Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Nota:
Nota Em máquinas virtuais os terminais virtuais
podem não estar disponíveis.
A janela terminal exibe a prompt;
sysadmin@localhost:~$
sysadmin@localhost ~$
A prompt anterior dá o nome do utilizador que fez
login (sysadmin), e o nome do sistema (localhost) e
a diretoria atual (~).
Scripting:
Scripting Habilidade de colocar comandos num ficheiro
e executá-lo, resultando na execução de todos os
comandos. Também possibilita a inclusão de
funcionalidades de programação.
Aliases:
Aliases Possibilidade de criação de pequenos
"nicknames" para longos comandos.
Variáveis:
Variáveis Usadas para armazenar informação para a
BASH shell. Estas variáveis podem ser usadas para
modificar como os comandos e funções trabalham, bem
como proporcionar informação vital para o sistema de
informação.
Muitos comandos podem ser usados por si só sem
quaisquer argumentos adicionais.
sysadmin@localhost:~$
sysadmin@localhost:~$ ls
Desktop Documents Downloads Music Pictures Pu
blic
Templates Videos
Um argumento também pode ser passado para o
comando ls , para especificar por exemplo
ficheiros de uma certa diretoria.
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/ppp
ip-down.d ip-up.d
sysadmin@localhost:~$
sysadmin@localhost:~$
Dado que o comando ls aceita múltiplos argumentos,
poderemos listar o conteúdo de multiplas diretorias de
uma só vez, digitando o comando: ls /etc/ppp /etc/ssh
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/ppp /etc/ssh
/etc/ppp:
ip-down.d ip-up.d
/etc/ssh:
moduli ssh_host_dsa_key.pub ssh_host_rsa_k
ey sshd_configssh_config
ssh_host_ecdsa_key ssh_host_rsa_key.pub
ssh_host_dsa_key ssh_host_ecdsa_key.pub ssh_impor
t_id
sysadmin@localhost:~$
sysadmin@localhost:~$
As opções podem ser usadas com os comandos
para expandir ou modificar a forma como o
comando se comporta.
sysadmin@localhost:~$
sysadmin@localhost:~$ ls -l /etc/ppp
total 0
drwxr-xr-x 1 root root 10 Jan 29 2015 ip
ip--down.d
drwxr-xr-x 1 root root 10 Jan 29 2015 ip-
ip-up.d
sysadmin@localhost:~$
sysadmin@localhost:~$
Quando damos um comando no terminal, o
comando é armazenado no "history list".
Isto serve para podermos usar “antigas ordens”
com menos trabalho – sem termos que repetir tudo
de novo.
!3
sysadmin@localhost:~$
sysadmin@localhost:~$ history
1 date
2 ls
3 cal 5 2015
4 history
sysadmin@localhost:~$
sysadmin@localhost:~$ !3
cal 5 2015
May 2015
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
sysadmin@localhost:~$
sysadmin@localhost:~$
Alguns exemplos adicionais do comando history :
Exemplo Significado
history 5 Mostra os últimos 5 comandos do histórico
!! Executa de novo o último comando
!-5 Executa o 5º comando
!ls Executa o comando ls mais recente
A “BASH shell variable” é uma funcionalidade que
nos permite (a nós ou á shell), armazenar dados.
sysadmin@localhost:~$
sysadmin@localhost:~$ echo $PATH
/home/sysadmin/bin:/usr/local/sbin:/usr/local/bi
n:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
sysadmin@localhost:~$
sysadmin@localhost:~$
Baseado no no seguinte output, quando tentamos
executar o comando, a shell olhará primeiro para o
comando na diretoria /usr/lib/qt-3.3/bin .
sysadmin@localhost:~$ zed
sysadmin@localhost:~$
-bash: zed: command not found
sysadmin@localhost:~$
sysadmin@localhost:~$
Se houver software aplicacional instalado no nosso
sistema, poderemos necessitar de modificar a
PATH por forma a tornar mais fácil a execução
desses comandos.
sysadmin@localhost:~$
sysadmin@localhost:~$
PATH=/usr/bin/custom:$PATH
sysadmin@localhost:~$
sysadmin@localhost:~$ echo $PATH
/usr/bin/custom:/home/sysadmin/bin:/usr/local/s
bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/u
sr/games
sysadmin@localhost:~$
sysadmin@localhost:~$
Há 2 tipos de variáveis usadas na BASH shell,
“locais e ambientais”.
sysadmin@localhost:~$
sysadmin@localhost:~$ variable1='Something'
Para vermos o conteúdo da variável , colocamos o
caractere $ antes da mesma:
sysadmin@localhost:~$
sysadmin@localhost:~$ echo $variable1
Something
Para se ver as variáveis ambientais, usamos o
comando env (procurando através do output
usando o grep.
sysadmin@localhost:~$
sysadmin@localhost:~$ env | grep variable1
sysadmin@localhost:~$
sysadmin@localhost:~$
Após a exportação da variable1, esta é agora uma
“environment variable”.
sysadmin@localhost:~$
sysadmin@localhost:~$ export variable1
sysadmin@localhost:~$
sysadmin@localhost:~$ env | grep variable1
variable1=Something
variable1
O comando export também pode ser usado na
criação de variáveis ambientais:
sysadmin@localhost:~$
sysadmin@localhost:~$ export variable2='Else'
sysadmin@localhost:~$
sysadmin@localhost:~$ env | grep variable2
variable2=Else
variable2
Para alterar o valor de uma variável ambiental basta
simplesmente omitir o $ quando nos referimos a
ela:
sysadmin@localhost:~$
sysadmin@localhost:~$ variable1=$variable1' '$va
riable2
sysadmin@localhost:~$
sysadmin@localhost:~$ echo $variable1
Something Else
As variáveis exportadas podem ser removidas
usando o comando unset :
sysadmin@localhost:~$
sysadmin@localhost:~$ unset $variable2
Podem haver situações em que existem várias
versões do mesmo comando instalados no sistema
ou em que os comandos são acessíveis a alguns
utilizadores e não a outros.
sysadmin@localhost:~$
sysadmin@localhost:~$ which date
/bin/date
sysadmin@localhost:~$
sysadmin@localhost:~$ which cal
/usr/bin/cal
sysadmin@localhost:~$
sysadmin@localhost:~$
sysadmin@localhost:~$
sysadmin@localhost:~$ type which
O which é indexado (/usr/bin/which)
Este output deverá ser similar ao output do
comando which , visto anteriormante:
sysadmin@localhost:~$
sysadmin@localhost:~$ which which
/usr/bin/which
O comando type também pode identificar
comandos embutidos na bash (ou outra)
shell:
sysadmin@localhost:~$
sysadmin@localhost:~$ type echo
echo is a shell builtin
Neste caso, o output é significafivamente
diferente do output do comando which:
sysadmin@localhost:~$
sysadmin@localhost:~$ type -a echo
echo is a shell builtin
echo is /bin/echo
O comando type também pode identificar
“aliases” para outros comandos:
sysadmin@localhost:~$
sysadmin@localhost:~$ type ll
ll is aliased to `ls -alF'
sysadmin@localhost:~$
sysadmin@localhost:~$ type ls
ls is aliased to `ls --color=auto'
O output daqueles comandos indica que ll é
um alias para ls -alF, e o ls é um alias para ls
--color=auto.
sysadmin@localhost:~$
sysadmin@localhost:~$ type -t echo ll which
builtin
alias
file
Um alias pode ser usado para mapear longos
comandos em sequências mais pequenas.
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/r*.conf
/etc/resolv.conf /etc/rsyslog.conf
O caractere ? representa qualquer caractere unitário.
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/t???????
/etc/terminfo /etc/timezone
sysadmin@localhost:~$
sysadmin@localhost:~$
Os caracteres especiais podem ser usados em
conjunto para encontrar padrões mais
complexos.
O comando /etc/*???????????????????? Mostrará
apenas ficheiros da diretoria /etc com 20 ou
mais caracteres no filename:
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/*??????????????
??????
/etc/bindresvport.blacklist /etc/ca-certificates.
conf
sysadmin@localhost:~$
sysadmin@localhost:~$
O * e o ? Também podem ser usados
conjuntamente para analisar ficheiros com
extensão de 3 letras usando o comando echo
/etc/*.??? :
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/*.???
/etc/blkid.tab /etc/issue.net
sysadmin@localhost:~$
sysadmin@localhost:~$
Os [] são usados para a correspondência de um
carcter unitário representando uma gama de
caracteres para possível correspondência.
Por exemplo, echo /etc/[gu]* mostrará qualquer
ficheiro que comece pelo caractere g ou u e
contenha zero ou mais caracteres adicionais :
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/[gu]*
/etc/gai.conf /etc/groff /etc/group /etc/group- /e
tc/gshadow /etc/gshadow- /etc/ucf.conf /etc/ude
v /etc/ufw /etc/update-motd.d /etc/updatedb.con
f
sysadmin@localhost:~$
sysadmin@localhost:~$
Os [] também podem ser usados para representar uma
gama de caracteres.
Por exemplo, o comando echo /etc/[a-d]* mostrará
todos os ficheiros que comecem por qualquer letra
entre a e d (inclusive):
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/[a-d]*
/etc/adduser.conf /etc/adjtime /etc/alternatives /etc/a
pparmor.d
/etc/apt /etc/bash.bashrc /etc/bash_completion.d /etc
/bind /etc/bindresvport.blacklist /etc/blkid.conf /etc/bl
kid.tab /etc/ca-certificates /etc/ca-certificates.conf /et
c/calendar /etc/cron.d /etc/cron.daily /etc/cron.hourly
/etc/cron.monthly /etc/cron.weekly /etc/crontab /etc/d
bus-1 /etc/debconf.conf /etc/debian_version /etc/defa
ult
/etc/deluser.conf /etc/depmod.d /etc/dpkg
sysadmin@localhost:~$
sysadmin@localhost:~$
O comando echo /etc/*[0-9]* mostrará qualquer
ficheiro que contenha pelo menos um número:
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/*[0-9]*
/etc/dbus-1 /etc/iproute2 /etc/mke2fs.conf /etc/
python2.7 /etc/rc0.d
/etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc
5.d /etc/rc6.d
sysadmin@localhost:~$
sysadmin@localhost:~$
A gama (range) é baseada na tabela de texto ASCII .
sysadmin@localhost:~$
sysadmin@localhost:~$ echo /etc/*[9-0]*
/etc/*[9-0]*
sysadmin@localhost:~$
sysadmin@localhost:~$
O ponto de exclamação é usado
conjuntamente com os [] para negar a gama
(range).
Por exemplo, o comando echo
[!DP]* mostrará qualquer ficheiro que não
comece por D ou P.
Há 3 tipos de cotas com especial significado
para a Bash shell: ", ', e `.
sysadmin@localhost:~$
sysadmin@localhost:~$ echo "The glob characters
are *, ? and [ ]"
The glob characters are *, ? and [ ]
sysadmin@localhost:~$
sysadmin@localhost:~$
As duplas aspas ainda permitem a substituição do
comando (discutido mais á frente), substituição da
variável e permite mais alguns metacaracteres.
sysadmin@localhost:~$
sysadmin@localhost:~$ echo "The path is $PATH"
The path is
/usr/bin/custom:/home/sysadmin/bin:/usr/local/s
bin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/u
sr/games sysadmin@localhost
sysadmin@localhost:~$:~$
As aspas simples previnem a shell de fazer
qualquer interpretação de caracteres
especiais.
Isto inclui caracteres especiais, variáveis,
substituiçaõ de comandos e de ouros
metacaracteres.
Por exemplo, se quisermos que o
caractere $ signifique simplesmente $, em vez de
indicar á shell para olhar para o valor da variável,
poderemos executar o 2º comando abaixo:
sysadmin@localhost:~$
sysadmin@localhost:~$ echo The car costs $100
The car costs 00
sysadmin@localhost:~$
sysadmin@localhost:~$ echo 'The car costs $100'
The car costs $100
sysadmin@localhost:~$
sysadmin@localhost:~$
Podemos usar uma técnica alternativa para atribuir
cotas unitárias a carcteres unitários.
sysadmin@localhost:~$
sysadmin@localhost:~$ echo Today is date
Today is date
sysadmin@localhost:~$
sysadmin@localhost:~$
sysadmin@localhost:~$
sysadmin@localhost:~$ echo Today is `date`
Today is Mon Nov 2 03:40:04 UTC 2015
sysadmin@localhost:~$
sysadmin@localhost:~$
Permite usar múltiplos comandos de uma sá
vez, ou correr comandos adicionais,
dependendo do sucesso do comando.
February 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
March 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
O duplo && atua como um "and" lógico - if 1º
comando teve sucesso , then o 2º comando (á
direita do &&) também irá correr.
If o 1º comando falha, then o 2º comando não
correrá.
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/xml
catalog catalog.old xml-core.xml xml-core.xml.old
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/junk
ls: cannot access /etc/junk: No such file or directory
sysadmin@localhost:~$
sysadmin@localhost:~$
O modo em que podemos usar o sucesso ou a falha do
comando ls conjuntamente com o && consisterá na
execução de uma linha de comando como a seguinte:
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/xml && echo success
catalog catalog.old xml-core.xml xml-core.xml.old
success
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/junk && echo success
ls: cannot access /etc/junk: No such file or directory
sysadmin@localhost:~$
sysadmin@localhost:~$
No 1º exemplo, o comando echo é executado porque o
comando ls foi bem suceedido.
No 2º exemplo, o comando echo naão foi executado
porque o comando ls falhou.
O duplo || é um "or“ lógico. Funciona de forma similar
ao &&;
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/xml || echo failed
catalog catalog.old xml-core.xml xml-
core.xml.old
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/junk || echo failed
ls: cannot access /etc/junk: No such file or
directory failed
sysadmin@localhost:~$
sysadmin@localhost:~$