Dominando o Terminal do Linux Um Curso Rápido e Descomplicado para Iniciantes
Elcio Ferreira
[email protected] 1
2
2
O que é o prompt e como funciona Se você abrir o terminal em seu Ubuntu agora, deve ver algo parecido com isso:
O texto "elcio@skywalker:~" ! o ue aparece aui para mim agora# $esse texto, "elcio" ! meu nome de usu%rio e "skywalker" ! o nome do meu computador &todos os meus computadores e tem nomes de personagens de Star 'ars#( )m seu computador, computador, ! claro, ser% exibido o seu nome de usu%rio e o nome do seu computador# 3
*epois disso +% um sinal de doispontos, seguido da in-orma./o da pasta atual# $esse caso, "~", ue ! um atal+o para a pasta do usu%rio#
Pasta do Usuário: cada usuário do Ubuntu tem sua própria pasta para armazenar seus arquivos. É aquela pasta que no gerenciador de arquivos é chamada de "Pasta pessoal". Ela geralmente ica dentro da pasta "!home". inha pasta de usuário está em "!home!elcio" e "#" é um atalho muito conveniente para ela.
)m seguida +% o caractere de d0lar &ou ci-r/o(, terminando esse texto especial# 1ogo depois o cursor est% piscando, esperando ue você digite um comando#
O nome desse texto especial ! "prompt"# )le indica ue o computador est% pronto para receber comandos# 2 s0 você mandar ue ele vai -a3er# *igite, por exemplo, o seguinte comando, ue manda o terminal navegar para sua %rea de trabal+o: cd "Área de Trabalho"
)m seguida pressione )$4)5# 6om isso, trocamos de pasta e estamos agora na %rea de trabal+o# O prompt deve
$á um %eito simples de digitar comandos e caminhos no terminal& que é come'ar a digitar o que voc( quer e pressionar )*+ para que seu computador os complete. 4
mudar, desse 7eito:
Comando e resposta 6om isso, você 7% deve ter percebido o -uncionamento b%sico do terminal# 8uando o terminal exibe o prompt, você deve digitar um comando# 9p0s digitar o comando, pressione )$4)5 e o computador vai executar seu comando#
*urante a execu./o do comando, at! ue o prompt apare.a novamente, você n/o deve digitar novos comandos# *urante a execu./o o computador pode mostrar texto na tela sobre o ue o comando est% 5
-a3endo# 6+amamos isso de sada * maioria dos comandos é e-ecutada de modo do comando# Sada ! o praticamente instantneo. texto ue um comando *ssim& muitas vezes& ao mostra na tela# 9o -inal pressionar E/)E0 voc( verá da execu./o do comando, imediatamente a sa1da do comando e o prompt para o computador mostrar% digita'2o de um novo comando. novamente o prompt, avisando ue est% pronto para receber o pr0ximo comando# ;e7a esse exemplo de terminal com a execu./o dos comandos date, cd e p,d :
6
Argumentos de linha de comando
6+amamos essas in-orma.>es ue v/o ap0s o comando de argumentos# ?% comandos ue podem receber um tipo especial de argumento#
$0s c+amamos esses argumentos, ue come.am com +-en, de op.>es# 9ssim, a op./o 3a -a3 com ue o comando ls mostre tamb!m os aruivos ocultos#
7
Navegando entre pastas e operações básicas com arquivos Se você uer de -ato usar o terminal, a primeira coisa ue precisa dominar s/o as opera.>es b%sicas com aruivos# )las podem ser -eitas com os comandos a seguir# cd
$0s 7% vimos um pouuin+o do ue o comando cd -a3# )le navega entre as pastas# )xecutar o comando cd sem argumentos navega para a pasta do usu%rio# O comando cd pode receber como argumento a pasta para a ual navegar# 9ssim: cd pasta2
) podemos -a3er isso para tantos nveis uantos +ouver 8
no camin+o da pasta dese7ada: cd pastapai/pastafilha/neta/bisneta
9ssim como em ualuer outro comando, sempre ue você precisar indicar um camin+o ue cont!m espa.os, pode usar aspas para envolver o argumento, assim: cd "~/Área de Trabalho/Minhas Músicas"
ls
O comando ls lista os aruivos da pasta atual# ;ocê pode indicar ao comando ue pasta dese7a listar, assim: ls pasta
;ocê tamb!m pode usar a op./o 3a para exibir todos os aruivos, como 7% mostramos: ls -a
9 op./o 3l exibe uma listagem detal+ada, ve7a a di-eren.a de executar ls com e sem a op./o 3l na tela a seguir:
9
$essa tela temos as permiss>es de cada aruivo, uma coluna mostrando uem ! o dono do aruivo, outra mostrando a ue grupo esse aruivo pertence# 4emos ent/o o taman+o de cada aruivo, seguido da data do aruivo# 9 op./o 3h deve ser usada 7unto com 3l , ela -a3 com ue o ls exiba o taman+o de cada aruivo em um -ormato amig%vel para seres +umanos# ;e7a:
10
9s op.>es do comando ls podem ser combinadas# 9ssim, o comando a seguir: ls -l -h -a
sso pode ser -eito no comando ls e em uase todos os comandos ue recebem op.>es de uma Anica letra# O comando ls, assim como a maior parte dos comandos ue mostraremos aui, tem muito mais op.>es al!m das ue vamos mostrar# Bostraremos s0 as mais Ateis, de uso 11
mais comum# Se você uiser ler toda a documenta./o do comando ls você pode usar o comando man, assim: man ls
Bas preparese# 9s documenta.>es s/o bastante extensas e a maioria est% em inglês# pwd
Cs ve3es estamos dentro de uma pasta no terminal e n/o sabemos exatamente em ue pasta estamos#
12
cp O comando cp copia aruivos# ;ocê pode copiar um aruivo para a mesma pasta, com um novo nome, assim: cp arui!o.tt no!onome.tt
;ocê tamb!m pode copiar um aruivo para dentro de uma pasta, desse 7eito: cp arui!o.tt pasta1
;ocê tamb!m pode copiar uma pasta inteira, usando a op./o 3r, assim: cp -r ~/Documentos/planilhas "~/Área de Trabalho"
mv
O comando mv move aruivos# Sua sintaxe ! bem semel+ante D do comando cp# ;ocê pode mover um aruivo para uma pasta, assim: m! arui!o.tt pasta1
Ou movêlo de uma pasta para outra, desse 7eito: m! pasta1/arui!o.tt pasta2
O comando mv tamb!m pode ser usado para renomear aruivos, desse 7eito:
13
m! nomeanti#o.tt nomeno!o.tt
mkdir
O comando m4dir cria pastas# Sua sintaxe ! bem simples: m$dir pasta%
;ocê pode criar de uma Anica ve3 uma estrutura de pastas dentro de pastas, usando a op./o 3p, assim: m$dir -p pastapai/pastafilha/pastaneta
rm
O comando rm apaga aruivos# Sua sintaxe tamb!m ! bastante simples, assim: rm arui!o.tt
;ocê pode apagar pastas inteiras, usando a op./o 3r, desse 7eito:
Cuidado : o terminal conia em
voc(. 5uando voc( manda ele mover& copiar ou apagar& ele e-ecuta a opera'2o sem perguntar nada. *lém disso& o comando rm apaga deinitivamente os arquivos& n2o há 6i-eira aqui. Por isso& todo cuidado é pouco ao usar o comando rm.
rm -r pasta%
14
Entradas e saídas de texto O terminal ! uma inter-ace baseada em texto# ;amos tentar mostrar agora porue isso ! bom# a entrada padrão
?% uma por./o de comandos ue esperam ue o usu%rio digite alguma coisa#
O comando p7thon est% sendo executado, e mostrou seu pr0prio prompt: 15
&&&
sso signi-ica ue o comando pyt+on est% esperando ue você digite alguma coisa# )m termos t!cnicos, n0s di3emos ue o comando p7thon est% "lendo" &ou "ouvindo"( o seu teclado# Outra maneira de colocar isso ! di3er ue a entrada padr/o para o comando p7thon, nesse caso, ! o teclado# ;amos digitar alguma coisa para ver como o comando p7thon se comporta# *igite: print 2'2
Seguido de )$4)5, e você deve ver o comando p7thon imprimir para você o resultado da opera./o, assim:
16
;amos agora -a3er o comando comando p7thon p7thon ler a entrada padr/o de outro lugar# 9bra o gedit &ou seu editor de texto -avorito( e crie um aruivo de texto simples cu7o conteAdo ! exatamente o ue digitamos para o comando p7thon, p7thon, assim:
17
Salve com o nome de "soma#txt"# )m seguida abra um terminal, navegue at! a pasta onde você salvou o aruivo e execute o seguinte comando: p(thon ) soma.tt
Se você -i3er certin+o todos os passos, vai ver ue o comando pyt+on imprime o resultado da soma, assim:
O ue estamos -a3endo aui ! indicando ao comando p7thon, p7thon, atrav!s do caractere "E", ue ele deve ler a entrada padr/o do aruivo soma#txt ao inv!s de ler do teclado# )ssa t!cnica ! muito, muito Atil, como veremos a seguir# 18
A saída padrão Buitos comandos devolvem in-orma./o ao usu%rio# Um exemplo ! o comando ls ue, ls ue, como 7% vimos, exibe na tela a listagem da pasta atual# ;ocê se lembra:
9 sada do comando ls, ls, assim como a maioria dos comandos do terminal, ! um texto# )sse texto ! exibido no terminal, ue c+amamos aui de "sada padr/o"# Modificando a saída padrão
*a mesma -orma ue -i3emos com a entrada padr/o, ! 19
possvel redirecionar a sada padr/o de um comando, usando o caractere "F", assim: ls -l & lista#em.tt
9ssim, indicamos ao comando ls ue, ao inv!s de mostrar no terminal, ele deve enviar a listagem de pasta para o aruivo listagem#txt# Se você seguir corretamente os passos acima, vai criar na pasta listada um aruivo assim:
20
Pipes 9l!m de -a3er com ue comandos leiam a entrada padr/o a partir de aruivos e -a3er com ue salvem a sada padr/o em aruivos, ! possvel conectar comandos# sso signi-ica ue um comando ler% a entrada padr/o a partir da sada padr/o de outro comando# sso ! -eito atrav!s do caractere "G", c+amado pipe#
;amos construir um exemplo bem simples disso# $/o se preocupe se o exemplo parecer muito simples, ou pouco Atil, ! preciso ue você entenda bem os conceitos b%sicos para acompan+ar o ue vem a seguir#
21
9ssim, você pode -a3er com ue a sada do comando echo se7a algo ue possa ser lido pelo comando p7thon: echo print 1'1
) pode concatenar os dois comandos, dessa maneira: echo print 1'1 * p(thon
sso vai -a3er com ue a sada padr/o do comando echo se7a a entrada padr/o do comando p7thon# ;e7a:
4alve3 você n/o enxergue agora o uanto isso pode ser Atil# 6ontinue lendo, vamos ver isso logo#
22
A saída de erro Os comandos em 1inux tem uma entrada, a entrada padr/o, mas duas sadas# 9 sada padr/o, ue 7% vimos, onde o comando exibe as coisas ue você espera ue ele exiba, e a sada de erro, onde ele exibe erros e avisa de situa.>es inesperadas# ;amos ver um exemplo com o comando ls# O comando a seguir salva a listagem da pasta "pasta existente" no aruivo listagem#txt, ve7a: ls "pasta eistente" & lista#em.tt
Bas o ue acontece se você errar ao digitar o nome da pasta, mandando o ls exibir a listagem de uma pasta ue na verdade n/o existeH 9ssim, por exemplo:
23
)ssa mensagem de erro n/o -oi exibida na sada padr/o, mas numa outra sada, a sada de erro# ;ocê pode perceber isso com -acilidade redirecionando a sada padr/o do comando, assim:
O resultado: como o comando ls n/o conseguiu listar a pasta, o aruivo listagem#txt est% va3io# ) como a mensagem de erro n/o -oi enviada para a sada padr/o, mas para a sada de erro, ela -oi exibida na tela e n/o enviada para o aruivo#
24
sso ! muito Atil# Se a mensagem de erro -osse enviada para a sada padr/o, você executaria o comando acima e ac+aria ue est% tudo bem# S0 descobriria ue +ouve um erro uando precisasse usar o aruivo listagem#txt e descobrisse ue, ao inv!s do conteAdo ue você esperava, ele cont!m um erro# Modificando a saída de erro es em ue, por ualuer motivo, você n/o uer ue um comando exiba erros na tela, mas pre-ere salvar esses erros num aruivo para con-erir depois#
;ocê pode -a3er isso atrav!s dos caracteres "IF"#
Se existir uma pasta c+amada "talve3 exista", a listagem dessa pasta ser% salva no aruivo listagem#txt# Se a pasta n/o existir, ou +ouver algum outro erro em obter a listagem de aruivos dentro dela, os erros ser/o salvos no aruivo erro#txt# Concatenando
Os caracteres "F" e "IF" redirecionam a sada padr/o e de erro para aruivos, reescrevendo totalmente os aruivos# 25
;ocê pode uerer manter o conteAdo do aruivo, escrevendo ao -inal dele# sso ! realmente muito Atil# ;ocê pode uerer manter um +ist0rico de todas as ve3es ue um comando -oi executado, por exemplo#
)le -a3 a mesma coisa ue o anterior, com uma di-eren.a: ele n/o reescreve os aruivos listagem#txt e erro#txt, ele escreve as sadas ao -inal deles#
26
Comandos para lidar com texto 9 inter-ace do terminal ! baseada em texto# ) isso ! incrvel# 4exto ! um -ormato de dados padroni3ado, simples de ler e trabal+ar, e universal#
O comando cat lê a entrada padr/o e despesa o conteAdo na sada padr/o# )xperimente executar o comando cat sem argumentos, assim: cat
O comando cat vai -icar esperando ue você digite texto# )le vai ent/o repetir na sada padr/o cada lin+a ue você digitar# )xperimente#
padr/o, o comando cat pode ser bastante Atil#
) em seguida o comando cat vai esperar ue você digite texto mas, ao inv!s de repetir na tela o texto ue você digitar, ele vai salv%lo no aruivo texto#txt#
sso vai mostrar na tela o conteAdo do aruivo texto#txt# )ssa ! uma situa./o t/o comum ue o comando cat tem uma maneira pr0pria para -a3er isso# Se você passar um aruivo como argumento ao comando cat ele vai ler a entrada desse aruivo# 9ssim, o caractere "E" ! dispens%vel: cat teto.tt
sso vai -uncionar para o comando cat e para a maioria dos comandos para lidar com texto#
28
grep O comando grep -unciona de maneira semel+ante ao comando cat , mas ele espera um argumento# )sse argumento ! um padr/o de busca# )m seguida o grep come.a a ler a entrada padr/o, mas s0 vai repetir na sada padr/o as lin+as ue contiverem o padr/o de busca# ;e7a o exemplo:
;ocê pode usar o comando grep para encontrar texto dentro de um aruivo# *a mesma -orma ue com o comando cat, você pode redirecionar a entrada padr/o ou pode simplesmente passar um aruivo como argumento para o comando grep, assim: 29
Se você passar a op./o n o comando grep vai exibir tamb!m o nAmero da lin+a encontrada# ;e7a:
30
Se você uiser salvar os resultados do comando grep, como você 7% deve ter dedu3ido, pode redirecionar a sada do comando grep para um aruivo# 9ssim: #rep ,ntnio lista#em.tt & encontrados.tt
sso vai procurar no aruivo listagem#txt todas as lin+as ue conten+am o texto "9ntLnio", salvando os resultados num novo aruivo, encontrados#txt Uma Altima dica Atil do comando grep ! ue você pode us%lo para inverter a busca, atrav!s da op./o 3v# 9ssim, ele vai exibir apenas as lin+as ue n/o cont!m o termo buscado# ;e7a como exibir o aruivo soneto#txt, excluindo todas as lin+as ue tem o texto "ente":
31
less Buitas ve3es você uer ver o conteAdo de um aruivo, mas ele ! muito extenso para a sua 7anela do terminal# Uma maneira pr%tica de exibilo ! atrav!s do comando less# )xecute: less arui!o.tt
) o comando less vai exibir o incio do aruivo e deixar você navegar usando as setas do teclado ou as teclas
tee
)m outras situa.>es você pode uerer salvar a sada de um comando em um aruivo e, ao mesmo tempo, examin%la na tela ou redirecion%la para outro comando#
2 possvel -a3er isso de uma ve3 s0, usando o comando tee# O comando tee lê a entrada padr/o e -a3 duas coisas com ela# 9o mesmo tempo em ue ele a salva num aruivo, tamb!m a exibe na sada padr/o# 9ssim, se você -i3er: ls -lh * tee lista#em.tt
9 sada do comando ls ser% salva no aruivo listagem#txt e tamb!m exibida na tela# ;ocê tamb!m pode redirecionar a sada padr/o do comando tee, concatenando atrav!s de pipe em outro comando, assim: ls -lh * tee lista#em.tt * less
O comando ls vai listar a pasta e enviar a sada para o comando tee, ue vai salvar a sada no aruivo listagem#txt e, ao mesmo tempo, envi%la para o comando less, ue vai exibila na tela e permitir você navegar pela listagem# 4udo isso num comando s0#
33
wc O comando ,c ! um contador de palavras# ;e7a:
O aruivo soneto#txt tem IM lin+as, N palavras e PQR caracteres# ;ocê tamb!m pode redirecionar a sada de outro comando para o comando ,c# Se você uer contar apenas lin+as, você pode usar a op./o 3l do comando ,c#
34
sort O comando sort lê a entrada padr/o e exibe as lin+as em ordem na sada padr/o# *igamos ue você ten+a um aruivo com a lista de presen.a de alunos de uma determinada turma# ;ocê pode exibir a lista em ordem al-ab!tica, assim: sort chamada.tt
O comando sort pode receber a op./o 3u, ue -a3 com ue a lista de resultados se7a Anica, isso !, a op./o 3u remove as lin+as duplicadas# 9l!m disso, o comando sort pode receber a op./o 3n, ue -a3 ordena./o num!rica e n/o al-ab!tica# Se você precisa ordenar nAmeros, a op./o 3n ! o ue você precisa# *igamos ue você ten+a um diret0rio de aruivos de c+amada e você precisa de uma lista de alunos ue vieram em ualuer uma das aulas# ;ocê pode -a3er: cat .tt * sort -u
O comando cat vai enviar para o comando sort o conteAdo de todos os aruivos txt da pasta# O comando sort vai ent/o ordenar os resultados, removendo os duplicados#
35
Caracteres coringa ;ocê deve ter notado, no exemplo acima, o uso do caractere ""# )le ! um caractere coringa# ?% alguns caracteres coringa ue você pode usar ao escrever nomes de aruivos ou pastas# Os dois mais Ateis s/o "" e "H"#
O caractere coringa "" signi-ica "ualuer coisa"# ;e7a esse comando: rm
sso vai excluir todos os aruivos da pasta atual# ;e7a esse outro: rm a.tt
sso vai excluir todos os aruivos cu7o nome come.a com "a" e termina com "#txt"# O caractere coringa "H" signi-ica "ualuer caractere"# ;e7a esse outro comando: rm lista0.tt
sso vai apagar os aruivos lista=#txt, listaP#txt, listab#txt, mas n/o o aruivo lista=M#txt ou listac+amada#txt#
36
Donos e ermissões Uma das coisas mais legais no 1inux ! a maneira como ele controla as permiss>es de aruivos# 6ada aruivo ou pasta no 1inux tem um dono, um grupo e um con7unto de permiss>es# ;ocê pode con-erir isso com a sada do comando ls, ve7a:
permissões
usuário
grupo
9 primeira coisa em vamos nos concentrar ! em como ler auela coluna de permiss>es# )la tem de3 caracteres# O primeiro caractere ! o tipo de aruivo# Um sinal de menos &""( signi-ica ue essa lin+a da lista ! apenas um aruivo comum# Um caractere "d" signi-ica 37
ue essa lin+a se trata de uma pasta# es para o usu%rio dono do aruivo, o segundo bloco as permiss>es para o grupo e o Altimo bloco s/o as permiss>es para todos os usu%rios# 6ada bloco pode ter as permiss>es: r leitura w escrita x execu./o ;e7a: tipo user grupo outros
-
r
r-
r--
9ssim, uma lin+a de permiss>es "rwxrwr" signi-ica ue temos um aruivo comum &""(, cu7o dono pode ler, escrever e executar &"rwx"(, o grupo pode ler e executar &"rx"( e os outros usu%rios podem apenas ler &"r"(#
38
chown e chgroup ;ocê pode mudar o usu%rio dono ou o grupo a ue um aruivo pertence usando os comandos cho,n e chgroup#
sso vai -a3er com ue o aruivo texto#txt perten.a ao usu%rio 7oauim#
sso vai -a3er com ue o aruivo texto#txt perten.a ao grupo -inanceiro# ;ocê tamb!m pode mudar, num Anico comando, o usu%rio e grupo de um aruivo, usando o comando cho,n, assim: chon oauimfinanceiro teto.tt
chmod
es de um aruivo, você pode usar o comando chmod #
39
chmod 'r- teto.tt
;ocê pode de-inir um alvo para o comando chmod #
Ou para o grupo: chmod #' teto.tt
Ou para o grupo e o usu%rio dono, de uma ve3 s0: chmod u#' teto.tt
Os alvos possveis s/o: u usu%rio dono g grupo o os outros usu%rios a todos os alvos &euivalente a "ugo"(
40
!rabal"ando com listas Uma das coisas mais legais para se -a3er em seguida ! aprender a trabal+ar com listas de aruivos# sso torna o terminal uma -erramenta poderosssima de automa./o# find
O comando -ind serve para encontrar aruivos dentro de uma estrutura de pastas# ;e7a um exemplo da sada do comando -ind:
O comando -ind pode receber uma s!rie de argumentos# O primeiro deles ! uma pasta# 9ssim, comando a seguir lista todos os aruivos e pastas dentro da pasta "
find "Pasta 1"
O argumento 3t7pe, seguido de uma letra, -iltra a lista por tipo# O comando a seguir lista apenas aruivos: find -t(pe f
) esse lista apenas pastas: find -t(pe d
?% uma peculiaridade no comando ind # Se você uer procurar dentro de uma pasta, a pasta alvo deve sempre ser o primeiro argumento# 9ssim, o comando a seguir n/o -unciona: find -t(pe f "Pasta 1"
O correto !: find "Pasta 1" -t(pe f
O argumento 3atime -iltra os aruivos pela Altima ve3 ue -oram acessados# O comando a seguir lista os aruivos ue -oram acessados pela Altima ve3 +% três dias: find -atime %
;ocê pode usar os sinais de J e para modi-icar o comportamento do 3atime# O comando a seguir mostra os aruivos acessados a mais de de3 dias: 42
find -atime '13
) os acessados a menos de cinco dias: find -atime -4
O argumento 3name procura por aruivos cu7o nome casa com determinado padr/o#
find -exec
Uma das coisas mais legais ue você pode -a3er com o comando -ind ! mand%lo executar um comando para cada aruivo encontrado# Ta3emos isso atrav!s do argumento 3e-ec# O argumento 3e-ec deve ser seguido do comando a ser executado# $o lugar onde você dese7a incluir o nome do aruivo, coloue os caracteres V, e termine o comando a ser executado com os caracteres "W"# 9ssim: find -name ".ba$" -eec rm 56 "7"
O comando acima executa o comando rm para cada aruivo encontrado# 9ssim, digamos ue o -ind encontre cinco aruivos com extens/o bak na pasta, assim:
43
o#bak x#bak pastaXy#bak pastaXk#bak pastaIXpastaYXw#bak O comando -ind vai executar o comando rm para cada um dos aruivos acima, assim: rm rm rm rm rm
o.ba$ .ba$ pasta/(.ba$ pasta/$.ba$ pasta2/pasta%/.ba$
xargs
Um outro 7eito de -a3er com ue o comando ind execute um comando para cada um dos resultados encontrados ! atrav!s do comando -args# O comando -args lê a entrada padr/o e trans-orma em argumentos para um outro comando# ;ocê pode us%lo com o -ind, por exemplo, assim: find -name ".ba$" * ar#s rm
9 principal di-eren.a entre usar o comando -args ou o argumento 3e-ec do comando ind ! ue o comando -args vai executar o comando alvo uma Anica ve3#
44
9ssim, ao inv!s de executar: rm rm rm rm rm
o.ba$ .ba$ pasta/(.ba$ pasta/$.ba$ pasta2/pasta%/.ba$
O comando -args vai executar: rm o.ba$ .ba$ pasta/(.ba$ pasta/$.ba$
pasta2/p...
Se a lista de aruivos encontrados ! muito grande, isso tem um grande impacto na per-ormance de execu./o# for
;amos agora aprender a trabal+ar com o or, ue n/o ! um comando, mas uma estrutura de controle# 9s estruturas de controle s/o um recurso poderosssimo do terminal, e um assunto um pouco mais avan.ado# Bas aprender o b%sico sobre a estrutura or vai permitir, imediatamente, ue você -a.a algumas coisas ue realmente valem a pena# 9 estrutura or serve para executar um ou mais comandos# )sses comandos -ormam um bloco de comandos# *igamos ue você ueira, por exemplo, para cada aruivo com a extens/o txt numa pasta exibir os detal+es do 45
aruivo, seguido da contagem de lin+as e palavras desse mesmo aruivo, você pode -a3er: for arui!o in .tt7 do ls -lh 8arui!o c 8arui!o done
)sse trec+o, ue -ica entre as palavras c+ave do e done, ! o bloco de comandos: for arui!o in .tt7 do ls -lh $arquivo wc $arquivo
done
9 estrutura or vai, para cada um dos aruivos em <.t-t , executar o bloco de comandos# $o bloco de comandos o texto =arquivo ser% substitudo pelo nome do aruivo# O nome disso ! vari%vel# 9ssim, essa estrutura -or trabal+a com a vari%vel =arquivo#
46
#utomati$ando 9 grande vantagem de se usar o terminal em rela./o D inter-ace gr%-ica ! o -ato de você poder automati3ar tare-as# 2 disso ue vamos -alar agora# Criando scripts
*igamos ue você, todos os dias, entre numa pasta, apague todos os aruivos de backup &com a extens/o #bak#( )m seguida você salva a data e +ora atual no aruivo resultados#txt# )m seguida, conta uantas lin+as tem o aruivo matriculas#txt e salve o resultado no aruivo resultados#txt# 6om isso, o aruivo resultados#txt tem um relat0rio dos resultados dia a dia# Os comandos ue você executa todo dia s/o: cd ~/curso find -name ".ba$" * ar#s rm data && resultados.tt c -l matriculas.tt && resultados.tt
;ocê pode salvar esses comandos num aruivo# O nome ue a gente d% a um aruivo com uma seuência de comandos ! script #
47
Salve o aruivo como "rotinaZdiaria"# )m seguida, entre na pasta onde você salvou o aruivo e dê permiss/o de execu./o nele, assim: chmod ' rotina9diaria
) pronto, sua seuência de comandos ser% executada#
48
Argumentos para scripts 9gora, digamos ue você precise executar essa seuência de comandos acima em pastas di-erentes# )m algumas você precisa executar essa seuência todo dia, em outras, s0 de ve3 em uando#
6omo você vai -a3erH 6riar um script para cada pastaH $0s podemos -a3er com ue nosso script receba argumentos# 2 -%cil# ;amos alterar nosso c0digo para -icar assim: cd $1 find -name ".ba$" * ar#s rm data && resultados.tt c -l matriculas.tt && resultados.tt
$ote ue trocamos o nome da pasta por =# Os argumentos ue você passar para seu script ao execut%lo estar/o disponveis dentro do script nas vari%veis especiais =, I, Y, Q e assim por diante# 9lterando nosso c0digo como acima, para executar a rotina di%ria para a pasta ~Xcurso, digite: ./rotina9diaria ~/curso
49
%&nus' Exemplos Seguem alguns exemplos de comandos Ateis ue você pode usar para automati3ar tare-as, al!m de pacotes ue você pode instalar em seu Ubuntu para ter novos comandos disponveis# Pacote Ubuntu random faux !atin text generator
O pacote libte-t3lorem3perl cont!m um gerador de 1orem psum para o seu terminal# )u tin+a at! -eito um script para isso antes de saber da existência desse pacote#
) para usar: lorem
Pacote Ubuntu cclive
O pacote cclive, para download de vdeos do [ou4ube na lin+a de comando, ! uma reescrita do clive mais e-iciente, com menor consumo de mem0ria e menos dependências# 50
) para usar: ccli!e http//.(outube.com/atch0!:;f!T!<=ano
sso vai baixar o vdeo na pasta atual# Simples e indolor# Bas ual a vantagem de usar a lin+a de comando em rela./o a uma extens/o no navegador, onde você n/o precisa digitar comandosH 6om a lin+a de comando ! possvel automati3ar as tare-as# 6riei um script ue recebe um nome de usu%rio do [ou4ube e baixa os Altimos =P vdeos publicados# 6+amei o aruivo de massclive# ;e7a o c0digo -onte: m$dir -p 81 l(n --dump http//.(outube.com/user/81/feed * > #rep (outube.com/atch * > sed -e "s/. //" * > sed -e "s/?.//" * > sort -u * > hile read url do ccli!e -c --output-dir 81 8url done
) você pode usar assim: ./masscli!e maninthearenat!
51
Cowsa" a va#uinha falante do !inux 4este a: sudo apt-#et install cosa(
*epois rode: cosa( @unciona...
O cowsay tamb!m pode receber texto na entrada padr/o: date*cosa(
sso permite usos ra3oavelmente criativos: l(n --dump http//nes.#oo#le.com.br > * #rep "A>B" * #rep -! "C" > * sed -e "s/.>//#" * sort -E * head -n 1*cosa(
;ocê pode colocar seu Ubuntu para te dar uma dica de 1inux toda ve3 ue você abre o terminal, assim: sudo apt-#et install fortunes-ubuntu-ser!er
*epois edite o aruivo ~X#bas+rc e inclua no -inal: fortune*cosa(
) pronto\ 6ada ve3 ue você abrir um terminal vai receber uma dica de Ubuntu# 52
$a%endo o comando rm enviar ar#uivos para a !ixeira
4alve3 você ten+a um pouco de medo de usar o comando rm, porue ele exclui de-initivamente os aruivos# $/o +% ]lixeira^, e todos os m!todos disponveis para des-a3er a dele./o, como o e-t>undel , n/o passam de boas tentativas com uma ra3o%vel c+ance de insucesso# ;ocê sabia ue pode enviar um aruivo para a lixeira a partir do terminal, ao inv!s de apag%loH
)m seguida você pode usar, no lugar do comando rm, o comando trash: trash arui!o9a9apa#ar.tt
;ocê tamb!m pode manipular a lixeira com os comandos trash3list , restore3trash e trash3empt7# Substituindo o comando rm
) se uiser você evitar usar o comando rm por engano, insira no -inal de seu #bas+rc:
53
alias rm:trash
9ssim, cada ve3 ue você digitar o comando rm, ser% na verdade executado o comando trash# ) se você deliberadamente uiser excluir um aruivo, sempre poder% c+amar o comando rm digitando uma contrabarra, assim: >rm arui!o9a9apa#ar.tt
Mas você tem certeza que vai substituir o comando rm?
$a p%gina do trash3cli o autor trata dessa uest/o# )le di3 ue, embora você possa substituir o comando rm pelo trash, você n/o deveria, porue os argumentos dos dois comandos s/o di-erentes#
) pronto, você n/o vai mais executar o comando rm por engano, mas, do mesmo modo ue no primeiro exemplo, sempre poder% execut%lo deliberadamente, come.ando 54
com uma contrabarra#
&xtraindo o 'udio MP( de um vídeo
Simples e r%pido# ) -%cil de automati3ar# Configurando o locale no Ubuntu
2 um problema comum ao con-igurar um novo servidor com Ubuntu, descobrir ue n/o +% um locale v%lido con-igurado, ou descobrir ue o locale padr/o n/o ! o ue você dese7ava# Os sintomas comuns de um sistema sem um locale v%lido s/o as seguintes mensagens: locale Jannot set KJ9JTLP to default locale No such file or director( locale Jannot set KJ9,KK to default locale No such file or director(
Ou essa outra, bem mais assustadora: perl arnin# Oettin# locale failed. perl arnin# Please chec$ that (our locale settin#s K,NQ, : RunsetS KJ9,KK : RunsetS KJ9JTLP : "pt9UE.QT@-;" K,N : "en9QO.QT@-;" are supported and installed on (our s(stem. 55
perl arnin# @allin# bac$ to the standard locale R"J"S.
Os sintomas de um locale di-erente do ue você gostaria s/o mensagens em algum idioma estran+o# 6omo corrigirH ;ou explicar aui, porue esse aruivo -ica num local muito inusitado, em min+a opini/o# $/o est% em Xetc# )dite, como root, o aruivo: /!ar/lib/locales/supported.d/local
) coloue os locales ue você uer ue o sistema suporte# 9 maioria dos usu%rios brasileiros vai se dar bem com esse conteAdo: pt9UE VOW-;;4X-1 pt9UE.QT@-; QT@-;
$o meu caso, como -a.o uest/o de trabal+ar exclusivamente com Unicode, eu deixo esse aruivo assim: pt9UE.QT@-; QT@-;
)m seguida rode: sudo dp$#-reconfi#ure locales
sso deve resolver o problema#
56
) !inux tamb*m fala
?% um tempo eu ensinei aui como -a3er o Bac -alar# O 1inux tamb!m -a3# nstala a: sudo apt-#et install espea$
*a ! s0 mandar: espea$ "Ku$e V am (our father."
) -ala português tamb!m: espea$ -! pt "Ku$e eu sou seu pai."
6om - aruivo#txt, ele lê o texto de um aruivo# 6om w aruivo#wav, ele salva o %udio num aruivo# ) pode ser comandado via ss+# 6onsegue imaginar utilidades para issoH +treamming e download ao mesmo tempo,
?% um vdeo enoooorme na internet em ue você tem muito interesse# ;ocê uer baixar e guardar o vdeo, mas ao mesmo tempo uer assistlo logo# Se você iniciar o download e tentar assistir via streamming ao mesmo 57
tempo, vai consumir o dobro da banda necess%ria, o streamming vai -icar pausando a cada dois segundos e o download vai levar muito tempo# O ue -a3erH $/o sei se +% no 'indows algum player ue -a.a download e toue ao mesmo tempo# $o linux eu resolvo assim, numa 7anela de terminal: #et -c http//ser!idor.com.br/!ideo.m!
)m outra: tail -c 13333333333 -f !ideo.m! *mpla(er -
)xplicando, o primeiro comando, o wget, -a3 o download do vdeo# O par_metro c -a3 com ue, se o aruivo existir, o download se7a continuado de onde parou# sso ! Atil porue se o download -or interrompido, depois você pode continu%lo com o mesmo comando# O segundo ! uma concatena./o de comandos Unix# 9 parte ]tail c =MMMMMMMMMM - tableless#wmv^ ! um comando e ]mplayer ^ ! outro# O primeiro usa o tail, ue imprime o -inal de um aruivo# )xperimente, por exemplo: tail /!ar/lo#/s(slo#
;ocê vai ver as Altimas lin+as do log do sistema# O par_metro c recebe um nAmero, o nAmero de bytes a 58
imprimir a partir do -im do aruivo# ;ocê pode colocar ualuer nAmero ue se7a maior ue o aruivo inteiro# O par_metro - -a3 o tail -icar esperando por conteAdo novo no -im do aruivo# )xperimente rodar num terminal, por exemplo: tail -f /!ar/lo#/s(slo#
;ocê vai ver as Altimas lin+as do syslog e o tail vai -icar esperando por conteAdo novo# 9bra programas, execute a.>es no sistema, pare e inicie daemons e você vai ver as novas lin+as aparecendo ali# 9 mesma coisa acontece como vdeo# O tail vai despe7ar na tela todo o conteAdo do aruivo, e vai -icar esperando# 9 medida ue o wget baixa mais dados, o tail vai imprimindo o ue c+ega# O pipe depois do tail envia os dados do vdeo para o comando mplayer, um player de vdeo muito poderoso e -lexvel#
59