You are on page 1of 60

Dominando o

Terminal do
Linux

Um Curso Rpido e
Descomplicado para Iniciantes

Elcio Ferreira

elcio@visie.com.br
1
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 que aparece aqui para


mim agora. Nesse texto, "elcio" meu nome de usurio e
"skywalker" o nome do meu computador (todos os
meus computadores e tem nomes de personagens de Star
Wars.) Em seu computador, claro, ser exibido o seu
nome de usurio e o nome do seu computador.

3
Depois disso h um sinal de Pasta do Usurio: cada usurio
dois-pontos, seguido da do Ubuntu tem sua prpria
pasta para armazenar seus
informao da pasta atual.
arquivos. aquela pasta que
Nesse caso, "~", que um no gerenciador de arquivos
atalho para a pasta do chamada de "Pasta pessoal".
usurio. Ela geralmente fica dentro da
pasta "/home". Minha pasta de
Em seguida h o caractere usurio est em "/home/elcio" e
de dlar (ou cifro), "~" um atalho muito
conveniente para ela.
terminando esse texto
especial. Logo depois o cursor est piscando, esperando
que voc digite um comando.

O nome desse texto especial "prompt". Ele indica que o


computador est pronto para receber comandos. s
voc mandar que ele vai fazer.

Digite, por exemplo, o seguinte comando, que manda o


terminal navegar para sua rea de trabalho:

cd "rea de Trabalho"

Em seguida pressione
H um jeito simples de digitar
ENTER. Com isso, comandos e caminhos no
trocamos de pasta e terminal, que comear a
estamos agora na rea de digitar o que voc quer e
pressionar TAB para que seu
trabalho. O prompt deve
computador os complete.

4
mudar, desse jeito:

Comando e resposta
Com isso, voc j deve ter percebido o funcionamento
bsico do terminal. Quando o terminal exibe o prompt,
voc deve digitar um comando. Aps digitar o comando,
pressione ENTER e o computador vai executar seu
comando.

Durante a execuo do comando, at que o prompt


aparea novamente, voc no deve digitar novos
comandos. Durante a execuo o computador pode
mostrar texto na tela sobre o que o comando est

5
fazendo.

Chamamos isso de sada A maioria dos comandos


do comando. Sada o executada de modo
praticamente instantneo.
texto que um comando
Assim, muitas vezes, ao
mostra na tela. Ao final pressionar ENTER voc ver
da execuo do comando, imediatamente a sada do
o computador mostrar comando e o prompt para
novamente o prompt, digitao de um novo comando.

avisando que est pronto


para receber o prximo comando. Veja esse exemplo de
terminal com a execuo dos comandos date, cd e pwd:

6
Argumentos de linha de comando
Para a maioria das tarefas que voc pode querer que um
comando execute ser necessrio dizer ao computador
mais do que o nome do comando. Pode ser necessrio
dizer onde e como aquele comando deve ser executado.

Por exemplo, o comando cd espera que voc diga para


que pasta deseja navegar. Assim, para entrar na pasta
"pasta1", usamos:

cd pasta1

Chamamos essas informaoes que vo aps o comando de


argumentos. H comandos que podem receber um tipo
especial de argumento. Por exemplo, o comando ls
mostra os arquivos de uma pasta e pode receber um
argumento especial para que mostre tambm os arquivos
ocultos, assim:

ls -a

Ns chamamos esses argumentos, que comeam com


hfen, de opoes. Assim, a opo -a faz com que o
comando ls mostre tambm os arquivos ocultos.

7
Navegando entre pastas e
operaes bsicas com
arquivos
Se voc quer de fato usar o terminal, a primeira coisa que
precisa dominar so as operaoes bsicas com arquivos.
Elas podem ser feitas com os comandos a seguir.

cd
Ns j vimos um pouquinho do que o comando cd faz. Ele
navega entre as pastas. Executar o comando cd sem
argumentos navega para a pasta do usurio. O comando
cd pode receber como argumento a pasta para a qual
navegar. Assim:

cd pasta2

Para sair de uma pasta, navegando para a pasta pai,


usamos dois pontos seguidos, assim:

cd ..

Para entrar em uma pasta dentro de outra, separamos as


pastas por barra, assim:

cd pastapai/pastafilha

E podemos fazer isso para tantos nveis quantos houver

8
no caminho da pasta desejada:

cd pastapai/pastafilha/neta/bisneta

Para navegar para uma pasta dentro de sua pasta de


usurio, no importa em que pasta voc esteja, voc pode
comear o caminho com til (~), assim:

cd ~/Documentos/Planilhas

Assim como em qualquer outro comando, sempre que


voc precisar indicar um caminho que contm espaos,
pode usar aspas para envolver o argumento, assim:

cd "~/rea de Trabalho/Minhas Msicas"

ls
O comando ls lista os arquivos da pasta atual. Voc pode
indicar ao comando que pasta deseja listar, assim:

ls pasta

Voc tambm pode usar a opo -a para exibir todos os


arquivos, como j mostramos:

ls -a

A opo -l exibe uma listagem detalhada, veja a diferena


de executar ls com e sem a opo -l na tela a seguir:

9
Nessa tela temos as permissoes de cada arquivo, uma
coluna mostrando quem o dono do arquivo, outra
mostrando a que grupo esse arquivo pertence. Temos
ento o tamanho de cada arquivo, seguido da data do
arquivo.

A opo -h deve ser usada junto com -l, ela faz com que o
ls exiba o tamanho de cada arquivo em um formato
amigvel para seres humanos. Veja:

10
As opoes do comando ls podem ser combinadas. Assim,
o comando a seguir:

ls -l -h -a

Pode ser escrito assim:

ls -lha

Isso pode ser feito no comando ls e em quase todos os


comandos que recebem opoes de uma nica letra. O
comando ls, assim como a maior parte dos comandos que
mostraremos aqui, tem muito mais opoes alm das que
vamos mostrar. Mostraremos s as mais teis, de uso

11
mais comum. Se voc quiser ler toda a documentao do
comando ls voc pode usar o comando man, assim:

man ls

Mas prepare-se. As documentaoes so bastante extensas


e a maioria est em ingls.

pwd
s vezes estamos dentro de uma pasta no terminal e no
sabemos exatamente em que pasta estamos. Para isso
existe o comando pwd, que mostra o caminho completo
da pasta atual. Veja um exemplo do seu funcionamento:

12
cp
O comando cp copia arquivos. Voc pode copiar um
arquivo para a mesma pasta, com um novo nome, assim:

cp arquivo.txt novonome.txt

Voc tambm pode copiar um arquivo para dentro de


uma pasta, desse jeito:

cp arquivo.txt pasta1

Voc tambm pode copiar uma pasta inteira, usando a


opo -r, assim:

cp -r ~/Documentos/planilhas "~/rea de Trabalho"

mv
O comando mv move arquivos. Sua sintaxe bem
semelhante do comando cp. Voc pode mover um
arquivo para uma pasta, assim:

mv arquivo.txt pasta1

Ou mov-lo de uma pasta para outra, desse jeito:

mv pasta1/arquivo.txt pasta2

O comando mv tambm pode ser usado para renomear


arquivos, desse jeito:

13
mv nomeantigo.txt nomenovo.txt

mkdir
O comando mkdir cria pastas. Sua sintaxe bem simples:

mkdir pasta3

Voc pode criar de uma nica vez uma estrutura de


pastas dentro de pastas, usando a opo -p, assim:

mkdir -p pastapai/pastafilha/pastaneta

rm
O comando rm apaga
Cuidado: o terminal confia em
arquivos. Sua sintaxe voc. Quando voc manda ele
tambm bastante mover, copiar ou apagar, ele
simples, assim: executa a operao sem
perguntar nada. Alm disso, o
rm arquivo.txt comando rm apaga
definitivamente os arquivos,
Voc pode apagar pastas no h Lixeira aqui. Por isso,
inteiras, usando a opo todo cuidado pouco ao usar o
-r, desse jeito: comando rm.

rm -r pasta3

14
Entradas e sadas de texto
O terminal uma interface baseada em texto. Vamos
tentar mostrar agora porque isso bom.

a entrada padro
H uma poro de comandos que esperam que o usurio
digite alguma coisa. Por exemplo, abra o terminal e digite
o comando python, sem argumentos. Voc deve obter
uma tela assim:

O comando python est sendo executado, e mostrou seu


prprio prompt:

15
>>>

Isso significa que o comando python est esperando que


voc digite alguma coisa. Em termos tcnicos, ns
dizemos que o comando python est "lendo" (ou
"ouvindo") o seu teclado. Outra maneira de colocar isso
dizer que a entrada padro para o comando python, nesse
caso, o teclado. Vamos digitar alguma coisa para ver
como o comando python se comporta. Digite:

print 2+2

Seguido de ENTER, e voc deve ver o comando python


imprimir para voc o resultado da operao, assim:

16
Para encerrar a entrada
Python uma linguagem de
padro, finalizando o programao. O comando
comando python, voc python abre o interpretador
precisa inserir um interativo da linguagem
caractere de final de Python. No se preocupe, voc
no precisa aprender Python
arquivo. Voc faz isso
para dominar o terminal,
pressionando CTRL+D em embora, se o fizer, no vai se
seu teclado. A mesma arrepender.
coisa vale para
praticamente qualquer comando que leia a entrada
padro.

Modificando a entrada padro


Vamos agora fazer o comando python ler a entrada
padro de outro lugar. Abra o gedit (ou seu editor de
texto favorito) e crie um arquivo de texto simples cujo
contedo exatamente o que digitamos para o comando
python, assim:

17
Salve com o nome de "soma.txt". Em seguida abra um
terminal, navegue at a pasta onde voc salvou o arquivo
e execute o seguinte comando:

python < soma.txt

Se voc fizer certinho todos os passos, vai ver que o


comando python imprime o resultado da soma, assim:

O que estamos fazendo aqui indicando ao comando


python, atravs do caractere "<", que ele deve ler a
entrada padro do arquivo soma.txt ao invs de ler do
teclado. Essa tcnica muito, muito til, como veremos a
seguir.

18
A sada padro
Muitos comandos devolvem informao ao usurio. Um
exemplo o comando ls que, como j vimos, exibe na tela
a listagem da pasta atual. Voc se lembra:

A sada do comando ls, assim como a maioria dos


comandos do terminal, um texto.

Esse texto exibido no terminal, que chamamos aqui de


"sada padro".

Modificando a sada padro


Da mesma forma que fizemos com a entrada padro,

19
possvel redirecionar a sada padro de um comando,
usando o caractere ">", assim:

ls -l > listagem.txt

Assim, indicamos ao comando ls que, ao invs de mostrar


no terminal, ele deve enviar a listagem de pasta para o
arquivo listagem.txt. Se voc seguir corretamente os
passos acima, vai criar na pasta listada um arquivo assim:

20
Pipes
Alm de fazer com que comandos leiam a entrada padro
a partir de arquivos e fazer com que salvem a sada
padro em arquivos, possvel conectar comandos. Isso
significa que um comando ler a entrada padro a partir
da sada padro de outro comando. Isso feito atravs do
caractere "|", chamado pipe.

Vamos construir um exemplo bem simples disso. No se


preocupe se o exemplo parecer muito simples, ou pouco
til, preciso que voc entenda bem os conceitos bsicos
para acompanhar o que vem a seguir. Para isso, vamos
entender primeiro o comando echo. O comando echo
imprime na tela os argumentos que receber, assim:

21
Assim, voc pode fazer com que a sada do comando echo
seja algo que possa ser lido pelo comando python:

echo print 1+1

E pode concatenar os dois comandos, dessa maneira:

echo print 1+1 | python

Isso vai fazer com que a sada padro do comando echo


seja a entrada padro do comando python. Veja:

Talvez voc no enxergue agora o quanto isso pode ser


til. Continue lendo, vamos ver isso logo.

22
A sada de erro
Os comandos em Linux tem uma entrada, a entrada
padro, mas duas sadas. A sada padro, que j vimos,
onde o comando exibe as coisas que voc espera que ele
exiba, e a sada de erro, onde ele exibe erros e avisa de
situaoes inesperadas. Vamos ver um exemplo com o
comando ls. O comando a seguir salva a listagem da pasta
"pasta existente" no arquivo listagem.txt, veja:

ls "pasta existente" > listagem.txt

Mas o que acontece se voc errar ao digitar o nome da


pasta, mandando o ls exibir a listagem de uma pasta que
na verdade no existe? Assim, por exemplo:

23
Essa mensagem de erro no foi exibida na sada padro,
mas numa outra sada, a sada de erro.

Voc pode perceber isso com facilidade redirecionando a


sada padro do comando, assim:

O resultado: como o comando ls no conseguiu listar a


pasta, o arquivo listagem.txt est vazio.

E como a mensagem de erro no foi enviada para a sada


padro, mas para a sada de erro, ela foi exibida na tela e
no enviada para o arquivo.

24
Isso muito til. Se a mensagem de erro fosse enviada
para a sada padro, voc executaria o comando acima e
acharia que est tudo bem. S descobriria que houve um
erro quando precisasse usar o arquivo listagem.txt e
descobrisse que, ao invs do contedo que voc esperava,
ele contm um erro.

Modificando a sada de erro


Pode haver situaoes em que, por qualquer motivo, voc
no quer que um comando exiba erros na tela, mas
prefere salvar esses erros num arquivo para conferir
depois.

Voc pode fazer isso atravs dos caracteres "2>". Por


exemplo:

ls "talvez exista" > listagem.txt 2> erro.txt

Se existir uma pasta chamada "talvez exista", a listagem


dessa pasta ser salva no arquivo listagem.txt. Se a pasta
no existir, ou houver algum outro erro em obter a
listagem de arquivos dentro dela, os erros sero salvos no
arquivo erro.txt.

Concatenando
Os caracteres ">" e "2>" redirecionam a sada padro e de
erro para arquivos, reescrevendo totalmente os arquivos.

25
Voc pode querer manter o contedo do arquivo,
escrevendo ao final dele.

Isso realmente muito til. Voc pode querer manter um


histrico de todas as vezes que um comando foi
executado, por exemplo.

Para fazer isso, voc usa os caracteres ">>" e "2>>".


Observe o comando a seguir:

ls "talvez exista" >> listagem.txt 2>> erro.txt

Ele faz a mesma coisa que o anterior, com uma diferena:


ele no reescreve os arquivos listagem.txt e erro.txt, ele
escreve as sadas ao final deles.

26
Comandos para lidar com texto
A interface do terminal baseada em texto. E isso
incrvel. Texto um formato de dados padronizado,
simples de ler e trabalhar, e universal.

Por isso, se voc deseja dominar o terminal, a primeira


coisa que voc precisa aprender bem trabalhar com
texto. Vamos ver agora alguns comandos simples para
trabalhar com texto. So fceis de aprender e simples de
usar, mas quando usados juntos permitem fazer coisas
muito poderosas.

cat
O comando cat l a entrada padro e despesa o contedo
na sada padro. Experimente executar o comando cat
sem argumentos, assim:

cat

O comando cat vai ficar esperando que voc digite texto.


Ele vai ento repetir na sada padro cada linha que voc
digitar. Experimente. Para terminar a entrada padro,
encerrando o comando cat, pressione CTRL+D.

Bom, isso no muito til, certo?

Mas como voc j sabe redirecionar a entrada e sada

27
padro, o comando cat pode ser bastante til. Por
exemplo, voc pode redirecionar a sada do comando cat
para um arquivo, assim:

cat > texto.txt

E em seguida o comando cat vai esperar que voc digite


texto mas, ao invs de repetir na tela o texto que voc
digitar, ele vai salv-lo no arquivo texto.txt.

Para ver o contedo de um arquivo, voc pode


redirecionar a entrada padro do comando cat. Por
exemplo:

cat < texto.txt

Isso vai mostrar na tela o contedo do arquivo texto.txt.


Essa uma situao to comum que o comando cat tem
uma maneira prpria para fazer isso. Se voc passar um
arquivo como argumento ao comando cat ele vai ler a
entrada desse arquivo. Assim, o caractere "<"
dispensvel:

cat texto.txt

Isso vai funcionar para o comando cat e para a maioria


dos comandos para lidar com texto.

28
grep
O comando grep funciona de maneira semelhante ao
comando cat, mas ele espera um argumento. Esse
argumento um padro de busca. Em seguida o grep
comea a ler a entrada padro, mas s vai repetir na sada
padro as linhas que contiverem o padro de busca. Veja
o exemplo:

Voc pode usar o comando grep para encontrar texto


dentro de um arquivo. Da mesma forma que com o
comando cat, voc pode redirecionar a entrada padro ou
pode simplesmente passar um arquivo como argumento
para o comando grep, assim:

29
Se voc passar a opo -n o comando grep vai exibir
tambm o nmero da linha encontrada. Veja:

30
Se voc quiser salvar os resultados do comando grep,
como voc j deve ter deduzido, pode redirecionar a sada
do comando grep para um arquivo. Assim:

grep Antnio listagem.txt > encontrados.txt

Isso vai procurar no arquivo listagem.txt todas as linhas


que contenham o texto "Antnio", salvando os resultados
num novo arquivo, encontrados.txt

Uma ltima dica til do comando grep que voc pode


us-lo para inverter a busca, atravs da opo -v. Assim,
ele vai exibir apenas as linhas que no contm o termo
buscado. Veja como exibir o arquivo soneto.txt, excluindo
todas as linhas que tem o texto "ente":

31
less
Muitas vezes voc quer ver o contedo de um arquivo,
mas ele muito extenso para a sua janela do terminal.
Uma maneira prtica de exibi-lo atravs do comando
less. Execute:

less arquivo.txt

E o comando less vai exibir o incio do arquivo e deixar


voc navegar usando as setas do teclado ou as teclas Page
Up e Page Down. Outra jeito de usar o comando less
redirecionando a sada longa de outro comando para ele.
Por exemplo, para examinar uma listagem de pasta com
muitos arquivos voc pode fazer:

ls -lh | less

tee
Em outras situaoes voc pode querer salvar a sada de
um comando em um arquivo e, ao mesmo tempo,
examin-la na tela ou redirecion-la para outro comando.
Por exemplo, digamos que voc queira salvar uma longa
listagem de pasta num arquivo e, em seguida, examinar
essa listagem. Voc poderia executar dois comandos em
sequncia, assim:

ls -lh > listagem.txt


less listagem.txt

32
possvel fazer isso de uma vez s, usando o comando
tee. O comando tee l a entrada padro e faz duas coisas
com ela. Ao mesmo tempo em que ele a salva num
arquivo, tambm a exibe na sada padro. Assim, se voc
fizer:

ls -lh | tee listagem.txt

A sada do comando ls ser salva no arquivo listagem.txt


e tambm exibida na tela. Voc tambm pode
redirecionar a sada padro do comando tee,
concatenando atravs de pipe em outro comando, assim:

ls -lh | tee listagem.txt | less

O comando ls vai listar a pasta e enviar a sada para o


comando tee, que vai salvar a sada no arquivo
listagem.txt e, ao mesmo tempo, envi-la para o comando
less, que vai exibi-la na tela e permitir voc navegar pela
listagem.

Tudo isso num comando s.

33
wc
O comando wc um contador de palavras. Veja:

O arquivo soneto.txt tem 20 linhas, 98 palavras e 546


caracteres. Voc tambm pode redirecionar a sada de
outro comando para o comando wc. Se voc quer contar
apenas linhas, voc pode usar a opo -l do comando wc.
Por exemplo, para contar quantos arquivos h numa
pasta, voc pode fazer:

ls | wc -l

34
sort
O comando sort l a entrada padro e exibe as linhas em
ordem na sada padro. Digamos que voc tenha um
arquivo com a lista de presena de alunos de uma
determinada turma. Voc pode exibir a lista em ordem
alfabtica, assim:

sort chamada.txt

O comando sort pode receber a opo -u, que faz com que
a lista de resultados seja nica, isso , a opo -u remove
as linhas duplicadas. Alm disso, o comando sort pode
receber a opo -n, que faz ordenao numrica e no
alfabtica. Se voc precisa ordenar nmeros, a opo -n
o que voc precisa.

Digamos que voc tenha um diretrio de arquivos de


chamada e voc precisa de uma lista de alunos que
vieram em qualquer uma das aulas. Voc pode fazer:

cat *.txt | sort -u

O comando cat vai enviar para o comando sort o


contedo de todos os arquivos txt da pasta. O comando
sort vai ento ordenar os resultados, removendo os
duplicados.

35
Caracteres coringa
Voc deve ter notado, no exemplo acima, o uso do
caractere "*". Ele um caractere coringa. H alguns
caracteres coringa que voc pode usar ao escrever nomes
de arquivos ou pastas. Os dois mais teis so "*" e "?".

O caractere coringa "*" significa "qualquer coisa". Veja


esse comando:

rm *

Isso vai excluir todos os arquivos da pasta atual. Veja esse


outro:

rm a*.txt

Isso vai excluir todos os arquivos cujo nome comea com


"a" e termina com ".txt".

O caractere coringa "?" significa "qualquer caractere".


Veja esse outro comando:

rm lista?.txt

Isso vai apagar os arquivos lista1.txt, lista5.txt, listab.txt,


mas no o arquivo lista10.txt ou listachamada.txt.

36
Donos e Permisses
Uma das coisas mais legais no Linux a maneira como
ele controla as permissoes de arquivos. Cada arquivo ou
pasta no Linux tem um dono, um grupo e um conjunto de
permissoes. Voc pode conferir isso com a sada do
comando ls, veja:

permisses usurio grupo

A primeira coisa em vamos nos concentrar em como ler


aquela coluna de permissoes. Ela tem dez caracteres. O
primeiro caractere o tipo de arquivo.

Um sinal de menos ("-") significa que essa linha da lista


apenas um arquivo comum. Um caractere "d" significa

37
que essa linha se trata de uma pasta. Para um caractere
"l" temos um link (uma espcie de atalho). Um caractere
"p" mostra um arquivo especial, do tipo pipe. Um
caractere "c" mostra um dispositivo como, por exemplo,
seu cdrom.

Os outros nove caracteres esto divididos em blocos de


trs.

O primeiro bloco so as permissoes para o usurio dono


do arquivo, o segundo bloco as permissoes para o grupo e
o ltimo bloco so as permissoes para todos os usurios.

Cada bloco pode ter as permissoes:

r - leitura
w - escrita
x - execuo

Veja:

tipo user grupo outros


- rwx r-x r--

Assim, uma linha de permissoes "-rwxrw-r--" significa


que temos um arquivo comum ("-"), cujo dono pode ler,
escrever e executar ("rwx"), o grupo pode ler e executar
("r-x") e os outros usurios podem apenas ler ("r--").

38
chown e chgroup
Voc pode mudar o usurio dono ou o grupo a que um
arquivo pertence usando os comandos chown e chgroup.
Para mudar o usurio, faa:

chown joaquim texto.txt

Isso vai fazer com que o arquivo texto.txt pertena ao


usurio joaquim. Para mudar o grupo, faa:

chgroup financeiro texto.txt

Isso vai fazer com que o arquivo texto.txt pertena ao


grupo financeiro. Voc tambm pode mudar, num nico
comando, o usurio e grupo de um arquivo, usando o
comando chown, assim:

chown joaquim:financeiro texto.txt

chmod
Para mudar as permissoes de um arquivo, voc pode usar
o comando chmod. Para dar permisso de execuo a um
arquivo, use:

chmod +x texto.txt

Para dar permisso de leitura e escrita, e remover a


permisso de execuo, use:

39
chmod +rw-x texto.txt

Voc pode definir um alvo para o comando chmod. Por


exemplo, para dar permisso de execuo apenas para o
usurio dono, faa:

chmod u+x texto.txt

Ou para o grupo:

chmod g+x texto.txt

Ou para o grupo e o usurio dono, de uma vez s:

chmod ug+x texto.txt

Os alvos possveis so:

u - usurio dono
g - grupo
o - os outros usurios
a - todos os alvos (equivalente a "ugo")

40
Trabalhando com listas
Uma das coisas mais legais para se fazer em seguida
aprender a trabalhar com listas de arquivos. Isso torna o
terminal uma ferramenta poderosssima de automao.

find
O comando find serve para encontrar arquivos dentro de
uma estrutura de pastas. Veja um exemplo da sada do
comando find:

O comando find pode receber uma srie de argumentos.


O primeiro deles uma pasta. Assim, comando a seguir
lista todos os arquivos e pastas dentro da pasta "Pasta 1":

41
find "Pasta 1"

O argumento -type, seguido de uma letra, filtra a lista por


tipo. O comando a seguir lista apenas arquivos:

find -type f

E esse lista apenas pastas:

find -type d

H uma peculiaridade no comando find. Se voc quer


procurar dentro de uma pasta, a pasta alvo deve sempre
ser o primeiro argumento. Assim, o comando a seguir no
funciona:

find -type f "Pasta 1"

O correto :

find "Pasta 1" -type f

O argumento -atime filtra os arquivos pela ltima vez que


foram acessados. O comando a seguir lista os arquivos
que foram acessados pela ltima vez h trs dias:

find -atime 3

Voc pode usar os sinais de + e - para modificar o


comportamento do -atime. O comando a seguir mostra os
arquivos acessados a mais de dez dias:

42
find -atime +10

E os acessados a menos de cinco dias:

find -atime -5

O argumento -name procura por arquivos cujo nome casa


com determinado padro. Por exemplo, para encontrar
todos os arquivos cujo nome termina com .bak, voc pode
fazer:

find -name "*.bak"

find -exec
Uma das coisas mais legais que voc pode fazer com o
comando find mand-lo executar um comando para
cada arquivo encontrado. Fazemos isso atravs do
argumento -exec. O argumento -exec deve ser seguido do
comando a ser executado. No lugar onde voc deseja
incluir o nome do arquivo, coloque os caracteres {}, e
termine o comando a ser executado com os caracteres ";".
Assim:

find -name "*.bak" -exec rm {} ";"

O comando acima executa o comando rm para cada


arquivo encontrado. Assim, digamos que o find encontre
cinco arquivos com extenso bak na pasta, assim:

43
o.bak
x.bak
pasta/y.bak
pasta/k.bak
pasta2/pasta3/w.bak

O comando find vai executar o comando rm para cada um


dos arquivos acima, assim:

rm o.bak
rm x.bak
rm pasta/y.bak
rm pasta/k.bak
rm pasta2/pasta3/w.bak

xargs
Um outro jeito de fazer com que o comando find execute
um comando para cada um dos resultados encontrados
atravs do comando xargs. O comando xargs l a entrada
padro e transforma em argumentos para um outro
comando. Voc pode us-lo com o find, por exemplo,
assim:

find -name "*.bak" | xargs rm

A principal diferena entre usar o comando xargs ou o


argumento -exec do comando find que o comando
xargs vai executar o comando alvo uma nica vez.

44
Assim, ao invs de executar:

rm o.bak
rm x.bak
rm pasta/y.bak
rm pasta/k.bak
rm pasta2/pasta3/w.bak

O comando xargs vai executar:

rm o.bak x.bak pasta/y.bak pasta/k.bak pasta2/p...

Se a lista de arquivos encontrados muito grande, isso


tem um grande impacto na performance de execuo.

for
Vamos agora aprender a trabalhar com o for, que no
um comando, mas uma estrutura de controle. As
estruturas de controle so um recurso poderosssimo do
terminal, e um assunto um pouco mais avanado. Mas
aprender o bsico sobre a estrutura for vai permitir,
imediatamente, que voc faa algumas coisas que
realmente valem a pena.

A estrutura for serve para executar um ou mais


comandos. Esses comandos formam um bloco de
comandos.

Digamos que voc queira, por exemplo, para cada arquivo


com a extenso txt numa pasta exibir os detalhes do

45
arquivo, seguido da contagem de linhas e palavras desse
mesmo arquivo, voc pode fazer:

for arquivo in *.txt; do


ls -lh $arquivo
wc $arquivo
done

Esse trecho, que fica entre as palavras chave do e done,


o bloco de comandos:

for arquivo in *.txt; do


ls -lh $arquivo
wc $arquivo
done

A estrutura for vai, para cada um dos arquivos em *.txt,


executar o bloco de comandos. No bloco de comandos o
texto $arquivo ser substitudo pelo nome do arquivo. O
nome disso varivel. Assim, essa estrutura for trabalha
com a varivel $arquivo.

46
Automatizando
A grande vantagem de se usar o terminal em relao
interface grfica o fato de voc poder automatizar
tarefas. disso que vamos falar agora.

Criando scripts
Digamos que voc, todos os dias, entre numa pasta,
apague todos os arquivos de backup (com a extenso
.bak.) Em seguida voc salva a data e hora atual no
arquivo resultados.txt. Em seguida, conta quantas linhas
tem o arquivo matriculas.txt e salve o resultado no
arquivo resultados.txt. Com isso, o arquivo resultados.txt
tem um relatrio dos resultados dia a dia.

Os comandos que voc executa todo dia so:

cd ~/curso
find -name "*.bak" | xargs rm
data >> resultados.txt
wc -l matriculas.txt >> resultados.txt

Voc pode salvar esses comandos num arquivo. O nome


que a gente d a um arquivo com uma sequncia de
comandos script.

Para criar nosso primeiro script, vamos criar um arquivo


de texto com os comandos acima, desse jeito:

47
Salve o arquivo como "rotina_diaria". Em seguida, entre
na pasta onde voc salvou o arquivo e d permisso de
execuo nele, assim:

chmod +x rotina_diaria

Pronto. Agora nosso arquivo um script, e pode ser


executado. Todos os dias, para executar a rotina diria,
entre na pasta onde o script est salvo execute:

./rotina_diaria

E pronto, sua sequncia de comandos ser executada.

48
Argumentos para scripts
Agora, digamos que voc precise executar essa sequncia
de comandos acima em pastas diferentes. Em algumas
voc precisa executar essa sequncia todo dia, em outras,
s de vez em quando.

Como voc vai fazer? Criar um script para cada pasta?

Ns podemos fazer com que nosso script receba


argumentos. fcil. Vamos alterar nosso cdigo para
ficar assim:

cd $1
find -name "*.bak" | xargs rm
data >> resultados.txt
wc -l matriculas.txt >> resultados.txt

Note que trocamos o nome da pasta por $1. Os


argumentos que voc passar para seu script ao execut-lo
estaro disponveis dentro do script nas variveis
especiais $1, $2, $3, $4 e assim por diante. Alterando
nosso cdigo como acima, para executar a rotina diria
para a pasta ~/curso, digite:

./rotina_diaria ~/curso

Para executar para a pasta ~/curso2/matriculas/ digite:

./rotina_diaria ~/curso2/matriculas/

49
Bnus: Exemplos
Seguem alguns exemplos de comandos teis que voc
pode usar para automatizar tarefas, alm de pacotes que
voc pode instalar em seu Ubuntu para ter novos
comandos disponveis.

Pacote Ubuntu: random faux Latin text


generator
O pacote libtext-lorem-perl contm um gerador de Lorem
Ipsum para o seu terminal. Eu tinha at feito um script
para isso antes de saber da existncia desse pacote. Para
instalar:

sudo apt-get install libtext-lorem-perl

E para usar:

lorem

Para gerar vrios pargrafos, use a opo -p informando


quantos pargrafos voc quer:

lorem -p12

Pacote Ubuntu: cclive


O pacote cclive, para download de vdeos do YouTube na
linha de comando, uma reescrita do clive mais eficiente,
com menor consumo de memria e menos dependncias.

50
Para instalar:

sudo apt-get install cclive

E para usar:

cclive http://www.youtube.com/watch?v=8fvTxv46ano

Isso vai baixar o vdeo na pasta atual. Simples e indolor.


Mas qual a vantagem de usar a linha de comando em
relao a uma extenso no navegador, onde voc no
precisa digitar comandos? Com a linha de comando
possvel automatizar as tarefas. Criei um script que
recebe um nome de usurio do YouTube e baixa os
ltimos 15 vdeos publicados. Chamei o arquivo de
massclive. Veja o cdigo fonte:

mkdir -p $1
lynx --dump http://www.youtube.com/user/$1/feed | \

grep youtube.com/watch | \
sed -e "s/.* //" | \
sed -e "s/&.*//" | \
sort -u | \
while read url
do
cclive -c --output-dir $1 $url
done

E voc pode usar assim:

./massclive maninthearenatv

51
Cowsay: a vaquinha falante do Linux
Teste a:

sudo apt-get install cowsay

Depois rode:

cowsay Funciona...

O cowsay tambm pode receber texto na entrada padro:

date|cowsay

Isso permite usos razoavelmente criativos:

lynx --dump http://news.google.com.br \


| grep "^\[" | grep -v "" \
| sed -e "s/.*\]//g" | sort -R | head -n 1|cowsay

Voc pode colocar seu Ubuntu para te dar uma dica de


Linux toda vez que voc abre o terminal, assim:

sudo apt-get install fortunes-ubuntu-server

Depois edite o arquivo ~/.bashrc e inclua no final:

fortune|cowsay

E pronto! Cada vez que voc abrir um terminal vai


receber uma dica de Ubuntu.

52
Fazendo o comando rm enviar arquivos para
a Lixeira
Talvez voc tenha um pouco de medo de usar o comando
rm, porque ele exclui definitivamente os arquivos. No h
lixeira, e todos os mtodos disponveis para desfazer a
deleo, como o ext2undel, no passam de boas tentativas
com uma razovel chance de insucesso.

Voc sabia que pode enviar um arquivo para a lixeira a


partir do terminal, ao invs de apag-lo? Para isso, voc
precisa instalar o pacote trash-cli. No Ubuntu, faa:

sudo apt-get install trash-cli

Em seguida voc pode usar, no lugar do comando rm, o


comando trash:

trash arquivo_a_apagar.txt

Voc tambm pode manipular a lixeira com os comandos


trash-list, restore-trash e trash-empty.

Substituindo o comando rm

E se quiser voc evitar usar o comando rm por engano,


insira no final de seu .bashrc:

53
alias rm=trash

Assim, cada vez que voc digitar o comando rm, ser na


verdade executado o comando trash. E se voc
deliberadamente quiser excluir um arquivo, sempre
poder chamar o comando rm digitando uma
contrabarra, assim:

\rm arquivo_a_apagar.txt

Mas voc tem certeza que vai substituir o


comando rm?

Na pgina do trash-cli o autor trata dessa questo. Ele diz


que, embora voc possa substituir o comando rm pelo
trash, voc no deveria, porque os argumentos dos dois
comandos so diferentes. Por exemplo, o comando rm
exige o argumento -R para remover diretrios, o trash
no. Ento ele sugere que no o faa.

Mas, se voc tem medo de apagar arquivos por engano,


ele sugere uma outra abordagem. Crie um alias para o
comando rm em seu .bashrc assim:

alias rm='echo "Voc no quer fazer isso."; false'

E pronto, voc no vai mais executar o comando rm por


engano, mas, do mesmo modo que no primeiro exemplo,
sempre poder execut-lo deliberadamente, comeando

54
com uma contrabarra.

Extraindo o udio MP3 de um vdeo


Para extrair apenas o udio, em MP3, de um vdeo, faa:

ffmpeg -i entrada_video.mp4 -vn saida_audio.mp3

Simples e rpido. E fcil de automatizar.

Configurando o locale no Ubuntu


um problema comum ao configurar um novo servidor
com Ubuntu, descobrir que no h um locale vlido
configurado, ou descobrir que o locale padro no o que
voc desejava. Os sintomas comuns de um sistema sem
um locale vlido so as seguintes mensagens:

locale: Cannot set LC_CTYPE to default locale: No


such file or directory
locale: Cannot set LC_ALL to default locale: No
such file or directory

Ou essa outra, bem mais assustadora:

perl: warning: Setting locale failed.


perl: warning: Please check that your locale
settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "pt_BR.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.

55
perl: warning: Falling back to the standard locale
("C").

Os sintomas de um locale diferente do que voc gostaria


so mensagens em algum idioma estranho.

Como corrigir? Vou explicar aqui, porque esse arquivo


fica num local muito inusitado, em minha opinio. No
est em /etc. Edite, como root, o arquivo:

/var/lib/locales/supported.d/local

E coloque os locales que voc quer que o sistema suporte.


A maioria dos usurios brasileiros vai se dar bem com
esse contedo:

pt_BR ISO-8859-1
pt_BR.UTF-8 UTF-8

No meu caso, como fao questo de trabalhar


exclusivamente com Unicode, eu deixo esse arquivo
assim:

pt_BR.UTF-8 UTF-8

Em seguida rode:

sudo dpkg-reconfigure locales

Isso deve resolver o problema.

56
O Linux tambm fala
H um tempo eu ensinei aqui como fazer o Mac falar. O
Linux tambm faz. Instala a:

sudo apt-get install espeak

Da s mandar:

espeak "Luke, I am your father."

E fala portugus tambm:

espeak -v pt "Luke, eu sou seu pai."

Com -f arquivo.txt, ele l o texto de um arquivo. Com -w


arquivo.wav, ele salva o udio num arquivo. E pode ser
comandado via ssh.

Consegue imaginar utilidades para isso?

Streamming e download ao mesmo tempo.


H um vdeo enoooorme na internet em que voc tem
muito interesse. Voc quer baixar e guardar o vdeo, mas
ao mesmo tempo quer assist-lo logo. Se voc iniciar o
download e tentar assistir via streamming ao mesmo

57
tempo, vai consumir o dobro da banda necessria, o
streamming vai ficar pausando a cada dois segundos e o
download vai levar muito tempo. O que fazer? No sei se
h no Windows algum player que faa download e toque
ao mesmo tempo. No linux eu resolvo assim, numa janela
de terminal:

wget -c http://servidor.com.br/video.wmv

Em outra:

tail -c 10000000000 -f video.wmv |mplayer -

Explicando, o primeiro comando, o wget, faz o download


do vdeo. O parmetro -c faz com que, se o arquivo
existir, o download seja continuado de onde parou. Isso
til porque se o download for interrompido, depois voc
pode continu-lo com o mesmo comando.

O segundo uma concatenao de comandos Unix. A


parte tail -c 10000000000 -f tableless.wmv um
comando e mplayer - outro. O primeiro usa o tail, que
imprime o final de um arquivo. Experimente, por
exemplo:

tail /var/log/syslog

Voc vai ver as ltimas linhas do log do sistema. O


parmetro -c recebe um nmero, o nmero de bytes a

58
imprimir a partir do fim do arquivo. Voc pode colocar
qualquer nmero que seja maior que o arquivo inteiro. O
parmetro -f faz o tail ficar esperando por contedo novo
no fim do arquivo. Experimente rodar num terminal, por
exemplo:

tail -f /var/log/syslog

Voc vai ver as ltimas linhas do syslog e o tail vai ficar


esperando por contedo novo. Abra programas, execute
aoes no sistema, pare e inicie daemons e voc vai ver as
novas linhas aparecendo ali. A mesma coisa acontece
como vdeo. O tail vai despejar na tela todo o contedo do
arquivo, e vai ficar esperando. A medida que o wget baixa
mais dados, o tail vai imprimindo o que chega.

O pipe depois do tail envia os dados do vdeo para o


comando mplayer, um player de vdeo muito poderoso e
flexvel.

59
Fique por dentro:

http://visie.com.br/treinamento/

Aprenda Javascript:

http://js.visie.com.br/

60

You might also like