Você está na página 1de 19

2.

1 Introduo
Um componente-chave do shell bash so as variveis da
shell. Essas variveis so crticas porque armazenam
informaes vitais do sistema e modificar o comportamento
do shell bash , bem como muitos comandos . Esta unidade
iremos abordar em detalhes o que variveis de shell so e
como eles podem ser usados para configurar o shell.
Voc ira aprender como a varivel PATH afeta a forma como
os comandos so executados e como as outras variveis
afetam sua capacidade de usar o histrico de seus
comandos. Alm disso, voc tambm vai ver como usar
arquivos de inicializao para fazer variveis shell
persistente, de modo que ser criado toda vez que entrar
no sistema.
2.2 Variveis de Shell
Uma varivel um nome ou um identificador que pode ser
atribudo um valor. A Shell (e outros comandos) l os valores
destas variveis, que podem resultar em comportamento
alterado dependendo do contedo (valor) da varivel.
Variveis normalmente conter um nico valor, como 0 ou
jose. Alguns podem conter vrios valores separados por
espaos como Jose Carlos ou por outros personagens.
Exemplo :
/usr/bin: /usr/sbin: /bin: /usr/bin: /home/ joe / bin.
Podermos atribuir um valor a uma varivel, digitando o nome
da varivel, seguida imediatamente pelo sinal de igual = e,
em seguida, o valor. Por exemplo: nome="Jose Carlos".
Os nomes de variveis devem comear com uma letra
(carter alfa) ou sublinhado e conter apenas letras,
nmeros e o caractere sublinhado. importante lembrar que

os nomes de variveis so case-sensitive; A e a so


variveis diferentes. Assim como com argumentos para
comandos, aspas simples ou duplas devem ser usadas
quando caracteres especiais so includos no valor atribudo
varivel para evitar a expanso shell.
Atribuies de variveis vlidos

atribuies de variveis invlidos

a=1

1=a

_1=a

a-1=3

LONG_VARIABLE='OK'

LONG-VARIABLE='WRONG'

Name='Jose Romero'

'user name'=anything

O shell bash e muitos comandos fazem uso extensivo de


variveis. Uma das principais utilizaes de variveis o de
proporcionar um meio para configurar diferentes
preferncias para cada utilizador. Com base no valor das
variveis, o shell bash e comandos podem se comportar de
maneiras diferentes. Para o shell, variveis podem afetar o
que o prompt exibe, os diretrios do shell iro procurar os
para executar comandos e muito mais.
2.3 locais e variveis de ambiente
Uma varivel local s est disponvel para o shell no qual ele
foi criado. Uma varivel de ambiente est disponvel para o
shell em que foi criado e ele passado para todos os outros
comandos /(raiz) programas iniciados pelo shell.
Por conveno, os caracteres minsculos so usados para
criar nomes de variveis locais e caracteres maisculos so
usados ao nomear uma varivel de ambiente . Por exemplo,
uma varivel local pode ser chamado de teste, enquanto
uma varivel de ambiente pode ser chamado TEST.
Enquanto isso uma conveno que a maioria das pessoas
seguem , no uma regra.

Por padro, quando uma varivel atribudo no shell bash,


que inicialmente definido como uma varivel local. Existem
algumas maneiras que uma varivel local tambm podem
ser feitas para ser uma varivel de ambiente. Em primeiro
lugar, uma varivel local existente pode ser " exportados "
com o comando de exportao :
sysadmin@localhost:~$ ENVIRONMENT=1
sysadmin@localhost:~$ export ENVIRONMENT

Em segundo lugar, uma nova varivel pode ser " exportada"


e atribudo um valor com um nico comando. No caso a
seguir, assumimos que a varivel no tenha sido
previamente definido:
sysadmin@localhost:~$ export ENVIRONMENT=2

Em terceiro lugar, o comando declare ou typeset pode ser


usado, para "declarar " uma varivel a ser uma varivel de
ambiente . Estes comandos so sinnimos e funcionam da
mesma maneira :
sysadmin@localhost:~$ declare -x ENVIRONMENT=3
sysadmin@localhost:~$ typeset -x ENVIRONMENT=3

O comando env tambm pode ser usado para definir


temporariamente uma varivel. Os servidores so
geralmente definido como Tempo Universal Coordenado
(UTC) , o que bom para manter o tempo consistente em
servidores em todo o planeta , mas pode ser frustrante para
o uso prtico de simplesmente dizer a tempo:
sysadmin@localhost:~$ date

Wed Nov

3 23:30:01 UTC 2015

A varivel TZ definida apenas no ambiente do shell atual,


e apenas para a durao do comando. O resto do sistema
no ser afetada por esta varivel . Na verdade, executando
o comando data novamente ir verificar que a varivel TZ foi
revertido para UTC.
sysadmin@localhost:~$ date
Wed Nov

3 23:30:03 UTC 2015

2.4 Resultados Variveis


Existem vrias maneiras de exibir os valores das variveis .
O comando set por si s ir exibir todas as variveis ( locais
e ambiente ) :
sysadmin@localhost:~$ set | head
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_ali
ases:extquote:force_fignore:histappend:hostcomplete:interac
tive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="3" [2]="11" [3]="1" [4]="releas
e" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='4.3.11(1)-release'

Para exibir apenas as variveis de ambiente , voc pode


usar vrios comandos que fornecem quase a mesma sada
: env, declare -x , typeset -p -x ou export :





sysadmin@localhost:~$ env | head -5
SHELL=/bin/bash
TERM=xterm
HUSHLOGIN=FALSE
OLDPWD=/home/sysadmin
USER=sysadmin

Para exibir o valor de uma varivel especfica, use o


comando echo com o nome da varivel prefixada pelo
(cifro) $ . Por exemplo, para exibir o valor da varivel PATH,
voc deve executar echo $ PATH
sysadmin@localhost:~$ echo $PATH
/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin:/usr/games:/usr/local/games

2.5 Variveis Destruindo


Se voc criar uma varivel e , em seguida, no quero mais
essa varivel a ser definida , voc pode usar o comando
unset para exclu-lo :
sysadmin@localhost:~$ example=12
sysadmin@localhost:~$ echo $example
12
sysadmin@localhost:~$ unset example
sysadmin@localhost:~$ echo $example

2.6 Compreender a varivel PATH


A varivel PATH uma das variveis de ambiente mais
crticas para o shell, por isso importante entender o efeito

que tem sobre a forma como os comandos sero


executados.
A varivel PATH contm uma lista de diretrios que so
usados para procurar comandos digitados pelo usurio.
Quando o usurio digita um comando e pressiona a tecla
Enter, os diretrios PATH so pesquisados para um arquivo
executvel que corresponda ao nome do comando.
Processamento funciona atravs da lista de diretrios da
esquerda para a direita; o primeiro arquivo executvel que
corresponde ao que digitado o comando do shell ir
tentar executar.

sysadmin@localhost:~$ echo $PATH


/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin:/usr/games:/usr/local/games


Diretorio

Conteudo


/home/sysadmin/bin

Diretrio que contem o contedo ao usurio o sysadimin


usurio atual para programas de locais . Normalmente
usado por usurios que criam os seus prprios scripts.

/usr/local/sbin

Normalmente vazio, mas pode ter comandos


administrativos que foram compilados a partir de fontes
locais.

/usr/local/bin

Normalmente vazio, mas pode ter comandos que foram


compilados a partir de fontes locais.

/usr/sbin

Contm a maioria dos ficheiros de comando administrativas


.

/usr/bin

Contm a maioria dos comandos que esto disponveis


para usurios regulares para executar.

/sbin

Contm os comandos administrativos essenciais.

/bin

Contm os comandos mais fundamentais que so


essenciais para o sistema operacional para funcionar.

Para executar comandos que no esto contidas nos


diretrios listados na varivel PATH, existem vrias opes:
O comando pode ser executado digitando o caminho
absoluto para o comando.
O comando pode ser executado com um caminho relativo
para o comando.
A varivel PATH pode ser ajustado para incluir o diretrio
onde o comando est localizado .
O comando pode ser copiado para um diretrio que est
listada na varivel PATH.
Considere isto
Para demonstrar caminhos absolutos vs caminhos relativos
my.sh um script chamado executvel criado no diretrio
home:
sysadmin@localhost:~$ echo 'echo Hello World!' > my.sh
sysadmin@localhost:~$ chmod u+x my.sh

Um caminho absoluto especifica a localizao de um arquivo
ou pasta a partir do diretrio de nvel superior atravs de
todos os sub-diretrios para o arquivo ou diretrio.
Caminhos absolutos sempre comeam com o caractere /
representando o diretrio raiz. Por exemplo, /usr/bin/ls um
caminho absoluto . Isso significa que o arquivo ls , que est
no diretrio bin , que est no diretrio usr , que est no
diretrio / (root) . Um arquivo pode ser executado usando um
caminho absoluto da seguinte forma:
sysadmin@localhost:~$ /home/sysadmin/my.sh

Hello World!



Um caminho relativo especifica a localizao de um arquivo
ou diretrio relativo ao diretrio atual. Por exemplo, no
diretrio / home / sysadmin, um caminho relativo do ensaio /
newfile seria realmente se referir ao / home / sysadmin / /
arquivo newfile teste. Os caminhos relativos no comear
com o caractere / .
Usando um caminho relativo para um executar um arquivo
no diretrio atual requer o uso do .(ponto) personagem , que
simboliza o diretrio atual :
sysadmin@localhost:~$ ./my.sh
Hello World!


s vezes, um usurio deseja seu diretrio home adicionado
varivel PATH , a fim de executar scripts e programas sem
usar ./ na frente do nome do arquivo . Eles poderiam ser
tentados a modificar a varivel de caminho da seguinte
forma:
sysadmin@localhost:~$ echo $PATH
/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin:/usr/games:/usr/local/games
sysadmin@localhost:~$ pwd
/home/sysadmin
sysadmin@localhost:~$ PATH=/home/sysadmin


Infelizmente, tudo o que foi previamente contido na varivel
PATH ser perdido.
sysadmin@localhost:~$ echo $PATH
/home/sysadmin


Programas listados fora do diretrio /home/ sysadmin , agora
apenas pode ser acessvel atravs do respectivo nome
completo do caminho
sysadmin@localhost:~$ uname -a
Linux localhost 3.15.6+ #2 SMP Wed Jul 23 01:26:02 UTC 2014 x86_64 x86
_64 x86_64 GNU/Linux
sysadmin@localhost:~$ PATH=/home/sysadmin
sysadmin@localhost:~$ uname -a
-bash: uname: command not found
sysadmin@localhost:~$ /bin/uname -a
Linux localhost 3.15.6+ #2 SMP Wed Jul 23 01:26:02 UTC 2014 x86_64 x86
_64 x86_64 GNU/Linux


possvel adicionar varivel PATH , sem sobrescrever seu
contedo anterior . Importar o valor atual da varivel $ PATH
na varivel PATH recm-definido , utilizando-o em ambos os
lados da declarao de atribuio .
sysadmin@localhost:~$ PATH=$PATH


Termin-lo com o valor do caminho do diretrio base
adicional.
sysadmin@localhost:~$ PATH=$PATH:/home/sysadmin
sysadmin@localhost:~$ echo $PATH
/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/
sbin:/bin:/usr/games:/usr/local/games:/home/sysadmin


Agora scripts localizados no diretrio /hom/sysadmin pode
excutado sem usar um caminho:
sysadmin@localhost:~$ my.sh

Hello World!


Em geral, uma m idia para modificar a varivel $PATH.
Se fosse para mudar, os administradores v-lo como
atividade suspeita. Foras maliciosos querem ganhar
privilgios elevados e acesso a informaes confidenciais
residindo em servidores Linux. Uma maneira de fazer isso
escrever um script que partilha o nome de um comando do
sistema , em seguida, alterar a varivel PATH para incluir o
diretrio home do administrador. Quando os tipos de
administrador no comando , ele realmente executa o script
malicioso !
2.7 Inicializao Arquivos
Quando um usurio abre um novo shell, ou durante o login,
ou quando eles correm um terminal que inicia um shell, o
shell personalizado por arquivos chamados arquivos de
inicializao (ou configurao). Esses arquivos de
inicializao ajustadas a valor de variveis, criar aliases e
funes, e executar outros comandos que so teis para
iniciar o shell.
Existem dois tipos de arquivos de inicializao: arquivos de
inicializao "globais" que afetam todos os usurios no
sistema e arquivos de inicializao "locais" que so
especficos para um usurio individual.
Os arquivos de configurao globais esto localizados no
diretrio / etc. Arquivos de configurao local so
armazenados no diretrio home do usurio.
FESTANA Arquivos de Inicializao
Cada shell usa diferentes arquivos de inicializao. Alm
disso, a maioria das conchas executar diferentes arquivos

de inicializao quando o shell iniciado atravs do


processo de login (chamado de um shell de login) versus
quando um shell iniciado por um terminal (chamado de um
shell non-login ou um shell interativo).
O diagrama a seguir ilustra as diferentes arquivos que so
iniciados com um escudo tpico de incio de sesso contra
um shell interativo:
Nota: O personagem ~(home) representa o diretrio inicial e
nomes de arquivo do usurio precedido por um .(ponto)
indicam
arquivos
ocultos.

Quando o bash iniciado como um shell de login , o arquivo


/ etc / profile executado primeiro . Este arquivo tipicamente
executa todos os arquivos que terminam em .sh que so
encontrados no diretrio /etc/profile.d . O prximo arquivo
que executado normalmente ~ / .bash_profile , mas
alguns usurios podem usar o ~ / .bash_login ou ~ / .profile
. O arquivo ~ / .bash_profile normalmente tambm executa

o arquivo ~ / .bashrc que por sua vez executa o arquivo / etc


/ bashrc .
Observao : Uma vez que o arquivo ~ / bash_profile est
sob o controle do utilizador , a execuo do ~ / Bashrc e / etc
/ arquivos Bashrc tambm so controlveis pelo utilizador .
Quando o bash iniciado como um shell interativo, ele
executa o arquivo ~ / .bashrc , que tambm pode executar
o arquivo / etc/bashrc , se ele existir. Mais uma vez, desde
que o arquivo ~ / .bashrc de propriedade do usurio que
est efetuando login , o usurio pode impedir a execuo
do arquivo / etc / bashrc .
Com tantos arquivos de inicializao , uma pergunta comum
neste momento " qual arquivo eu devo usar? " O grfico a
seguir ilustra o efeito de cada um desses arquivos ,
fornecendo exemplos do que os comandos que voc pode
colocar em cada arquivo :
Arquivo

Finaidade

/etc/profile

Este arquivo s pode ser modificado pelo administrador e ser


executada por cada usurio que efetua login . Os
administradores usam esse arquivo para criar variveis de
ambiente chave , exibir mensagens aos usurios como eles login
e definir valores -chave do sistema .

~/.bash_profile

Cada usurio tem seu prprio arquivo .bash_profile de seu


diretrio home . O objectivo para este arquivo o mesmo que o
arquivo / etc / profile , mas ter esse arquivo permite ao usurio
personalizar o shell com seus prprios gostos . Normalmente
usado para criar variveis de ambiente personalizadas.

~/.bashrc

Cada usurio tem seu prprio arquivo .bashrc em seu diretrio


home. O objectivo para este arquivo para gerar coisas que
precisam ser criados para cada shell, como variveis locais e
aliases.

/etc/bashrc

Este arquivo pode afetar todos os usurios do sistema. Apenas


o administrador pode modificar esse arquivo. Como o arquivo
.bashrc , a finalidade deste arquivo gerar coisas que precisam
ser criados para cada shell, como variveis locais e aliases.

2.8 modificar arquivos de inicializao


A maneira shell de um usurio opera pode ser alterada pela
modificao dos arquivos de inicializao do usurio.
Modificando a configurao global requer acesso
administrativo ao sistema como os arquivos no diretrio / etc
s pode ser modificado por um administrador. Um usurio
s pode modificar os arquivos de inicializao em seu
diretrio home.
A melhor prtica criar um backup antes de modificar os
arquivos de configurao como um seguro contra erros ;
uma cpia de segurana sempre podem ser restaurados se
algo correr mal .
O padro ~ / .bash_profile enviada com Debian contm as
seguintes duas linhas que personalizar a varivel de
ambiente PATH:
PATH=$PATH:$HOME/bin
export PATH

A primeira linha define a varivel PATH para o valor


existente da varivel PATH , com a adio do subdiretrio
bin do diretrio home do usurio . A varivel $HOME referese ao diretrio home do usurio . Por exemplo, se o usurio
login "Jose" , em seguida, $ HOME / bin /home/ jose /
bin.
A segunda linha converte a varivel PATH local para uma
varivel de ambiente .

O arquivo padro ~ / .bashrc executa / etc / bashrc usando


uma declarao como :
./etc/bashrc
O . caracteres usada para abastecer um arquivo para
execut-lo. O . personagem tambm tem um comando
sinnimo, o comando source , mas o uso do . personagem
mais comum do que usando o comando fonte .
Terceirizao pode ser uma forma eficaz de testar as
alteraes feitas em arquivos de inicializao , permitindolhe corrigir os erros sem ter que sair e login novamente. Se
voc atualizar o ~ / .bash_profile para alterar a varivel
PATH , voc pode verificar se as alteraes esto corretas ,
executando o seguinte :
.~/.bash_profile
echo $PATH

2.9 BASH Scripts de sada


Assim como o bash executa um ou mais arquivos ao iniciar
-se , ele tambm pode executar um ou mais arquivos ao sair
. Como sadas festana , ele ir executar a ~ / .bash_logout
e / etc / bash_logout arquivos , se eles existirem.
Normalmente, esses arquivos so usados para "limpar "
tticas como o usurio sai do shell. Por exemplo , o padro
~ / .bash_logout executa o comando clear para remover todo
o texto presente na tela do terminal .
Considere isto
Quando um novo usurio criado, os arquivos do diretrio
/etc /skel so automaticamente copiados para o diretrio

home do novo usurio . Como administrador, voc pode


modificar os arquivos no diretrio / etc / skel para fornecer
recursos personalizados para novos usurios.
2.10 Comando Histrico
Em certo sentido, o arquivo ~ /.bash_history tambm poderia
ser considerada como um arquivo de inicializao , uma vez
que o bash tambm l esse arquivo como ele iniciado . Por
padro , este arquivo contm um histrico dos comandos
que um usurio tem executados dentro do shell bash.
Quando um usurio sai do shell bash, ele escreve a histria
recente a este arquivo.
Existem vrias formas que esta comando history venha ser
vantajoso para o usurio:
Voc pode usar a cima e para baixo teclas de setas para
rever o seu histrico e selecione um comando anterior para
executar novamente.
Voc pode selecionar um comando anterior e modific-lo
antes de execut-lo.
Voc pode fazer uma busca reversa atravs da histria para
encontrar um comando anterior para selecionar , editar e
execut-lo. Para iniciar a busca , pressione CTRL + R e , em
seguida, comear a digitar uma parte de um comando
anterior .
Executar um comando de novo , com base num nmero que
est associado com o comando .
2.11 A execuo de comandos anteriores
O shell bash ir permitir que o usurio utilize a seta para
cima para ver os comandos anteriores. Com cada presso
da seta para cima , o shell exibe mais um comando para trs
na lista de histrico .

Se o usurio vai para trs longe demais, a seta para baixo


pode ser usado para retornar a um comando mais recente.
Uma vez que o comando correto exibido , a tecla Enter
pode ser pressionado para execut-lo.
As teclas de seta esquerda e direita tambm pode ser usado
para posicionar o cursor dentro do comando , o Backspace
e Delete para remover texto e caracteres adicionais podem
ser digitados na linha de comando para modific-lo antes de
pressionar a tecla Enter para execut-lo.

Aao

tecla

Combinao de tecla

Anterior item do histrico

Ctrl+P

Historico das teclas

Ctrl+N

Histrico reverso

Ctrl+R

A partir de linha

Home

Ctrl+A

Fim da linha

End

Ctrl+E

Caracter deletado

Delete

Ctrl+D

Excluir esquerda do cursor

Backspace

Ctrl+X

Mover o cursor para esquerda

Ctrl+B

Mover o cursor para direita

Ctrl+F

2.12 Alterar Teclas de Edio


As chaves que esto disponveis para a edio de um
comando so determinados pelas configuraes de uma
biblioteca chamada Readline . As teclas so tipicamente
definido para coincidir com as principais atribuies
encontrados dentro do editor de texto Emacs ( editor Linux
popular) por padro.
Para vincular as chaves para coincidir com as principais
atribuies encontrado com outro editor de texto popular, o
editor vi , a shell pode ser configurado com o comando set o vi . Para definir os atalhos de teclado de volta para o editor
de texto Emacs , use o comando set -o emacs.
Nota: Se voc no sabe como usar o editor vi ainda, voc
pode querer ficar com as chaves Emacs.
Para configurar automaticamente as opes de histrico de
edies , edite o arquivo ~ / .inputrc . Se este arquivo no
existir, o arquivo / etc / inputrc usado em seu lugar. Atalhos
de teclado so definidos de forma diferente nos arquivos de
configurao do que na linha de comando ; por exemplo,
para ativar o modo de ligao chave vi para um indivduo ,
adicione as seguintes linhas ao arquivo ~ / .inputrc :
set keymap vi
Se a situao inversa , talvez devido s duas linhas acima
a ser adicionado ao arquivo / etc / inputrc , um usurio pode
ativar o modo emacs , adicionando as seguintes linhas ao
arquivo ~ / .inputrc :

set keymap emacs

2.13 Usando o comando histria


O comando histria pode ser usado para " re-executar "
comandos executados anteriormente . Quando usado sem
argumentos , o comando history fornece uma lista de
comandos executados anteriormente :
sysadmin@localhost:~$ history
1

ls

cd test

cat alpha.txt

ls -l

cd ..

ls

history

Observe que cada comando atribudo um nmero que um


usurio pode usar para re- executar o comando.
O comando histria tem inmeras opes , a mais comum
dessas opes so listadas abaixo :

Opo

Proposito

-c

Limpar lista

-r

Leia o arquivo de histrico e substituir a histria atual

-w

Faa a lista do histrico atual para o arquivo de histrico

Como a lista de histrico geralmente contm quinhentos ou


mais comandos , que muitas vezes til para filtrar a lista .
O comando histria aceita um nmero como um argumento
para indicar quantos comandos para listar . Por exemplo,
executar o comando histria de 10 s ir mostrar os ltimos
dez comandos da sua histria.
Considere isto :
Como ser discutido em maior detalhe noutra seco , o
comando grep muito til para filtrar a sada de comandos
que produzem sada copiosa . Por exemplo, para visualizar
todos os comandos em seu histrico que contm o padro
ps , execute a history | com o comando grep " ps" . Mostrar
quantos registros tem no terminal.

Você também pode gostar