Você está na página 1de 26

OSTENSIVO GUIA DE ESTUDO

CAPÍTULO 6

COMANDOS

6.1 - CONCEITO DE COMANDO

Um comando é um arquivo, que executa alguma função no Linux. Existem tanto


comandos internos ao shell como comandos que são programas (que
geralmente estão em /usr/bin ou /bin). A grande maioria dos comandos básicos
utilizados em um shell são programas provenientes do projeto GNU. Sendo assim,
eles compartilham algumas características comuns, como opções e sintaxe, tendo
o seguinte formato:

comando [opções] <parâmetros>

Sendo que <parâmetros> consiste em informações para a execução do comando


(como nomes de arquivos) e [opções], em geral, têm dois formatos: longo e curto.
O formato longo é composto de uma palavra precedida por dois traços, enquanto
que o curto é uma letra seguida de um traço apenas. Várias opções curtas podem
ser combinadas. Tanto as opções como os parâmetros podem ser opcionais,
dependendo do comando.

Exemplos (genéricos) de opções de linha de comando padrão GNU


--help Exibe uma tela de ajuda, com um resumo das opções
disponíveis.
--version Exibe a versão do programa e informações de copyright.
--opção=algo Liga a opção opção, passando a esta o parâmetro algo.
-2 Liga a opção "2".
-V Liga a opção "v".
-b teste Liga a opção "b", passando a esta o parâmetro teste.
-a2v Liga as opções "a", "2" e "v" simultaneamente.

Embora o padrão GNU seja amplamente utilizado, alguns programas têm sua própria
sintaxe, sendo que em geral esta não foge muito da ideia de opções curtas e
longas, precedidas de hífens. De qualquer modo, quando em dúvida, basta
consultar a documentação do programa.

Durante o curso (para a distro SUSE), sempre será usado o sinal > para indicar o
prompt de um usuário normal, e o sinal # para indicar uma linha de comando do
superusuário ou root.

Uma das tantas vantagens do GNU/Linux é a variedade de comandos que ele


oferece, afinal, para quem conhece comandos, a administração do sistema acaba se
tornando um processo mais rápido.

O “Shell” é o responsável pela interação entre o usuário e o sistema operacional,


interpretando os comandos.

É no “Shell” que os comandos são executados.

OSTENSIVO - 6-1 -
OSTENSIVO GUIA DE ESTUDO

6.2 - COMANDOS DE AJUDA

man Consulta a página de manual (man page) de um determinado comando. A


página de manual fornece uma ajuda rápida sobre o programa e de suas
opções. Pode ser especificada a seção (1-9), de acordo com o tema da
página de manual, sendo que um tópico pode estar contido em mais de uma
seção. As seguintes seções estão disponíveis:

Seções das Páginas de Manual


1. Comandos do usuário 2. Chamadas ao sistema
3. Bibliotecas de funções 4. Dispositivos
5. Formatos de arquivos 6. Jogos
6.9. Informações gerais 8. Administração do sistema
9. Programação em geral

Principais opções:

man [opções] comando


-k Procura determinada string na descrição das páginas de manual
disponíveis. Equivalente ao comando apropos
-K Procura determinada string no conteúdo das páginas de manual
disponível

Exemplos:
# man man
Apresentará uma tela com informações sobre o comando man e sua
descrição.

# man -k driver
Procura pelo termo driver em todas as páginas de manual do sistema.
Info Exibe páginas de informações sobre comandos. As páginas info têm a
característica de estarem formatadas em hipertexto, facilitando a pesquisa.
Para certos comandos, a página info mostrará as mesmas informações da
página de manual. Sintaxe:

Info [comando]

Exemplos:
# info
Mostra todas as páginas info existentes no sistema.

# info ls
Mostra a página info do comando Is.
help Mostra a ajuda sobre comandos internos ao bash (integrados ou built-in). Se
ele não retornar ajuda sobre um determinado comando, este é um comando
externo e deve ter sua própria página de manual.

Opção principal:
help [opções] [comando]
-s Mostra um resumo ou sinopse do comando

Exemplos:
# help
Mostra uma ajuda rápida sobre o shell bash.

OSTENSIVO - 6-2 -
OSTENSIVO GUIA DE ESTUDO

# help exit
Mostra uma ajuda sobre o comando exit.

# help -s cd
Mostra uma sinopse (-s) do comando cd.
whatis O whatis procura por palavras chaves em uma base de dados que contém o
nome e uma breve explicação de diversos comandos. Quando o whatis
encontra a palavra procura, ele exibe na saída padrão a descrição e o número
da seção da página de manual do comando. É equivalente a opção -f do man.
# whatis socket
socket (2) - create an endpoint for communication
socket (7) - Linux socket interface

# whatis printf
printf (3) - formatted output conversion
apropos O apropos funciona de maneira semelhante ao whatis, porém realiza a busca
pela palavra também nas descrições dos comando. É bastante útil para
situações onde o usuário não recorda o nome de um comando, pois pode
pesquisar por palavras chaves relacionadas ao comando. É equivalente a
opção -k do man.
Se o usuário deseja criar um diretório, mas não lembra qual é o comando para
isso, pode buscar por directory (diretório), por exemplo, e então seria listado,
entre outras opções, o comando mkdir:
# apropos directory
chdir (2) - change working directory
chroot (2) - change root directory
closedir (3) - close a directory
dirfd (3) - get directory stream file descriptor
getcwd (3) - Get current working directory
getdents (2) - get directory entries
getdirentries (3) - get directory entries in a filesystem
independent
format
getwd [getcwd] (3) - Get current working directory
mkdir (2) - create a directory

6.3 - Comandos de Gerenciamento do Shell/Terminal

echo Utilizado para mostrar ("ecoar") um determinado texto na tela de terminal.


Principais opções:

echo [opções] [expressão]


-n expressão Retira o caractere de nova linha ao final de
expressão.
-e Habilita a barra invertida como caractere de
escape, para a saída de caracteres na expressão.
Alguns caracteres que podem ser usados com esta
opção são:
 \c: suprime a nova linha
 \n: nova linha
 \r: retorno de linha
 \t: tabulação horizontal
 \v: tabulação vertical

OSTENSIVO - 6-3 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:

# echo “Isto é um teste”


Isto é um teste
Mostra a expressão entre as aspas. Neste caso, as aspas são opcionais.

# echo –n “Isto é um teste”


Isto é um teste#
Exibe a expressão entre aspas, tirando o espaço extra (basta notar o sinal do
prompt ao lado do final da expressão.

# echo –e “Isto é u\bm\b teste”


Isto é teste
A opção -e permite que \b seja entendido como apagar caractere anterior ,
ou seja, tudo que estiver antes do \b será suprimido.
clear Limpa a tela do terminal, apagando o conteúdo e movendo o prompt para o
início do terminal. Sintaxe:

clear
reset Restaura o estado original do terminal, corrigindo problemas com
fontes e posicionamento do cursor.

Principais opções:
reset[opções]
-q O tipo de terminal é mostrado na saída padrão.
-s Imprime na tela a sequência de comandos shell para reiniciar o
ambiente do terminal.

Exemplo:
# reset –s
Erase is delete.
Kill is control-U (^U).
Interrupt is control-C (^C).
Reinicia o terminal, mostrando informações sobre os atalhos para comandos que
inicializam o ambiente, na saída padrão.
exit Sai do shell/console atual. Sintaxe:

exit

6.4 - Comandos para Navegação no Sistema de Arquivos

pwd Exibe o diretório onde o usuário está. Exemplo:

# pwd
/home/aluno

Indica que o diretório /home/aluno é o diretório onde o usuário se encontra


atualmente.
cd Acessa um diretório, ou seja, muda do diretório atual para o diretório
especificado (change director/). O comando não possui uma página de
manual individual; sua descrição está incluída na página de manual do bash.
Sintaxe:

cd [diretório de destino]

OSTENSIVO - 6-4 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:

# cd /usr/bin
Leva o usuário para o diretório /usr/bin.

# cd ../
Faz o usuário retornar um diretório na estrutura de diretórios

# cd –
O usuário retornará ao último diretório acessado.

# cd
Faz com que o usuário seja direcionando para o seu diretório nome.
file
Retorna o tipo do arquivo, após a execução dos testes apropriados.

Principais opções:

Tree [opções] [diretório]


-b Não inclui o nome dos arquivos nas linhas de saída
O arquivo arq_desc deve conter uma lista de arquivos
(um em cada linha). Assim, o comando irá tentar
descobrir e mostrar o tipo de cada um dos arquivos
-f arq_desc contidos em arq_desc. Note que se o cominho
absoluto não for fornecido para cada arquivo, o
comando deve ser executado no local onde os
arquivos se encontram.

Exemplos:

# file favoritos.html
favoritos.html: HTML document text
Fornece o nome do arquivo e o tipo do arquivo favoritos.html.

# file –b script.py
python script text executable
Fornece apenas o tipo do arquivo scnpt.py.
Is Lista o conteúdo do diretório atual, ou do diretório/arquivo que for indicado na
linha de comando. Bastante flexível, aceita inúmeros parâmetros e opções.

Principais opções:
Is [opções] [arquivo | diretório]
-l Listagem no formato longo, com detalhes dos arquivos.
Lista todos os arquivos, incluindo arquivos ocultos (aqueles
-a
que têm seu nome iniciado por".").
--color Listagem colorida.
Coloca no final dos nomes de arquivo um símbolo indicando
-F o seu tipo (a barra no final da listagem indica que é um
diretório).
-r Inverte a ordem de classificação.
-R Faz uma listagem em modo recursivo.
-1 Exibe a listagem em uma coluna única.

OSTENSIVO - 6-5 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:
# cd /var/log
# ls –laF
total 21580 16 root root 4096
Nov 23 19:56 ./
drwxr-xr-x 20 root root 4096 Set 16 10:35 ../
drwxr-xr-x 1 root adm 240021 Nov 23 20:39 auth.log
-rw-r- - - - - 1 root adm 834094 Nov 23 19:54 boot.log
drwxr-xr-x 2 clamav clamav 4096 Nov 7
16:41 clamav/
drwxr-xr-x 2 root root 4096 Jul 11 12:35 cron/
drwxr-xr-x 2 root root 4096 Jul 11 12:35 daemons/

-rw-r- - - - - 1 root adm 15525 Nov 23 19:51 dmesg


-rw-r- - - - - 1 root adm 111767
Nov 23 19:53 explanations
drwxr-xr-x 2 root root 4096
Set 16 10:28 httpd/
-rw-r- - - - - 1 root adm 181722 Nov 23 19:53 kdm.log
drwxr-xr-x 2 root root 4096 Jul 11 12:35 kernel/
Dirige-se ao diretório /var/log, e faz uma listagem completa do diretório,
mostrando todos os arquivos e sub-diretórios (indicados com uma barra - /)
do diretório, e todos os seus detalhes.

-rw-r- - - - - 1 root adm 34734 Nov 11 13:26 Xorg.9.log


-rw-r- - - - - 1 root adm 40835 Jul 24 10:26
Xorg.1.log.old
drwx- - - - - 2 root root 4096 Jul 16 11:36 webmin/
-rw-r- - - - - 1 root adm 198518 Nov 23 19:53 user.log
-rw-r- - - - - 1 root adm 304890 Nov 23 19:20 urpmi.log
Executa a listagem no mesmo diretorio (/var/log), mas em modo reverso.

# ls –laF - - color=auto
Igual ao primeiro exemplo, com a diferença de indicar que a listagem deve
ser colorida, somente se a saída padrão for um terminal (- -auto).

# ls - -color /usr/bin
Lista os arquivos e sub-diretórios de /usr/bin de modo simples (sem detalhes
e em uma única coluna), colorindo o resultado apropriadamente.

6.5 - COMANDOS DE MANIPULAÇÃO DE ARQUIVOS, DIRETÓRIOS E LINKS

touch Para criar um arquivo, podemos simplesmente abrir um editor de texto e


salvá-lo.
Mas existem outras formas. Uma das formas mais simples é usando o
comando “touch”:

touch nome do arquivo


Exemplos:
# touch procedimentos .txt
Cria o arquivo (vazio) de nome procedimentos.txt no diretorio onde o usuário
se encontra.

OSTENSIVO - 6-6 -
OSTENSIVO GUIA DE ESTUDO

# touch contas .txt contas2 . txt contas3 . txt contas4 . txt


Cria os arquivos (vazios) de nome contas .txt contas2 . txt contas3 . txt
contas4 . txt no diretorio onde o usuário se encontra.
mkdir Cria um diretório. O único caractere que não pode ser usado para o nome de
diretório é a barra (/).

Opção principal:

mkdir [opções] diretório


-p Cria o diretório e a estrutura de sub-diretórios passada.
Exemplos:
# mkdir teste_novo
Cria o diretorio teste_novo no diretorio onde o usuário se encontra.

# mkdir . ./teste2
Cria o diretorio teste2 no diretorio acima do diretorio atual, na estrutura de
diretórios.

# mkdir -p /tmp/teste/outro/local\ da\ estrutura


Cria, dentro do diretorio /tmp, toda a estrutura de sub-diretórios listada. Note
que a barra invertida deve ser colocada em nomes de diretórios, para que o
caractere de espaço possa ser incluído.
rmdir Remove um diretório. Note que o diretório deve estar vazio para poder ser
removido. Opção principal:

rmdir [opções] diretório


-p Remove o a estrutura de sub-diretórios passada. O
diretório e seus subdiretórios devem estar vazios.

Exemplos:
# rmdir teste
Apaga o diretório teste, no local onde o usuário se encontra atualmente.

# rmdir . ./teste2
Apaga o diretório teste2, localizado no diretório acima do diretório atual, na
estrutura de diretórios.

# rmdir -p /tmp/teste/outro/local\ da\ estrutura


Remove a estrutura de diretórios indicada (não apaga o diretório pai - no
caso, /tmp).
cat Envia o conteúdo de um ou mais arquivos para a saída padrão. Serve
também para concatenar arquivos, mas é mais utilizado para listar o conteúdo
de um arquivo. Caso nenhum nome de arquivo ou argumento seja fornecido,
o cat permite que o usuário entre com os dados na entrada padrão (pelo
teclado), e liste o conteúdo.

Principais opções:
cat [opções] [arquivo]
-b Numera todas as linhas, menos as linhas em branco.
-E Mostra um caractere # ao final de cada linha.
-n Numera todas as linhas mostradas.
-T Mostra, em vez de caracteres de tabulação (Tab), um sinal "1

OSTENSIVO - 6-7 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:
# cat /etc/passwd
Joga na saída padrão (terminal) o conteúdo do arquivo /etc/passwd.

# cat -b /etc/inputrc
Exibe o conteúdo do arquivo /etc/inputrc, numerando as linhas que são
diferentes de linhas em branco.

# cat exemplo1.txt exemplo2.txt


Concatena os dois arquivos na ordem indicada, e mostra-os na saída padrão.
O comando tac possui a mesma função do cat, só que a
listagem/concatenação dos arquivos é na ordem inversa.
more Mostra o arquivo na saída padrão. Se o tamanho do arquivo for maior do
que o número de linhas da tela, faz uma pausa e aguarda o pressionamento
de uma tecla (Enter, Espaço ou q/Esc) para continuar a exibição.

Principais opções:
more [opções] arquivo
-d Mostra informações para o usuário de como prosseguir.
+num Inicia a exibição na linha indicada no número num.
Limpa a tela e depois exibe o conteúdo do arquivo, ao
-p
invés de paginar o conteúdo do arquivo.
Junta várias linhas em branco seguidas de trechos do
-s
arquivo e mostra apenas uma linha.

Exemplos:

# more -d exemplo1.txt exemplo2.txt


Concatena os arquivos e exibe-os nesta ordem. Caso o terminal seja curto
para a exibição, aguardará a interação do usuário, e mostrará informações
detalhadas de como prosseguir.

# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spol/lpd:
sync:x:5:65:sync:/sbin:/bin/sync
shutdown:x:6:66:shutdown:/sbin:/sbin/shutdown
halt:x:7:67:halt: /sbin:/sbin/halt
- - Mais - - (34%)
Faz a visualização do arquivo /etc/passwd na tela, esperando a interação do
usuário para prosseguir. Para parar a visualização neste momento, basta
pressionar a tecla q.

# more +4 /etc/passwd
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spol/lpd:
sync:x:5:65:sync:/sbin:/bin/sync

Inicia a exibição do arquivo /etc/passwd na linha 4.

OSTENSIVO - 6-8 -
OSTENSIVO GUIA DE ESTUDO

less O less é muito parecido com o comando more, mas permite a navegação
dentro do arquivo utilizando as setas do teclado (e outras teclas).

A maioria dos usuários do Linux prefere ler arquivos usando o comando less,
que geralmente é considerado melhor que o pagínador more. Ao contrário
do comando more, o comando less não finaliza automaticamente quando o
fim do arquivo de texto é encontrado.
Comparação entre more e less
Ação more less
Avança uma linha Enter Enter, e, j, cursor para baixo
Volta uma linha - y, k, cursor para cima
Avança uma tela Espaço, z, f Espaço, z, f
Volta uma tela b b
Arquivo anterior :p :p
Arquivo seguinte :n :n
Pesquisa / /
Sair q q

Exemplos:

# less /etc/passwd
Mostra na tela o conteúdo de /etc/passwd.

# less exemplo1.txt exemplo2.txt


Exibe o arquivo exemplol.txt e, para exibir o arquivo exemplo2.txt, o usuário
deverá digitar no terminal :n (dois pontos e a letra n) na tela.
cp Copia um ou mais arquivos para o local especificado. Algumas
observações importantes devem ser feitas a respeito de cópia de arquivos:
 Copiar um arquivo para outro diretório onde já existe outro arquivo
com mesmo
nome: o arquivo será sobrescrito.
 Copiar um arquivo para outro diretório que, por sua vez, possui um
diretório com
mesmo nome do arquivo a ser copiado: não é permitido.
 Copiar um arquivo, especificando como arquivodestino outro nome:
o arquivo
será renomeado durante a cópia.

Principais opções:
cp [opções] arquivol [arquivo2 diretório...] diretório
Preserva o máximo possível a estrutura e atributos dos
-a arquivos originais na cópia (mas não preserva a estrutura do
diretório). Equivalente a -dpR.
-b Faz backup de arquivos que serão sobrescritos.
Força a cópia, sobrescrevendo arquivos no destino sem
-f
confirmação. Usar esta opção com cuidado.
Copia ligações simbólicas com ligações simbólicas no lugar de
-d
copiar os arquivos para as quais apontam.
Modo interativo, solicita confirmação antes de sobrescrever
-i
arquivos.
Preserva o proprietário, grupo, permissões, tempo da última
-P
modificação e o tempo do último acesso originais.
Copia diretórios recursivamente, ou seja, toda a árvore abaixo
-R
do diretório de origem. 0 destino sempre será um diretório.

OSTENSIVO - 6-9 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:

# cp doc.txt documento.txt
Criação do arquivo documento.txt a partir do arquivo doc.txt, ou seja, faz uma
cópia.

# cp doc.txt /tmp
Como não foi mencionado o nome do arquivo de destino, será criado um
arquivo com o mesmo nome do atual, no diretório /tmp.

# cp -i doc.txt arquivo.jpg /tmp


sobrescrever ‘/tmp/doc.txt’? Y
Com o parâmetro -i, pede a confirmação da cópia, sobrescrevendo o arquivo
em /tmp. Note que a cópia de múltiplos arquivos requer que o último
parâmetro seja o diretório de destino.

# cp -b doc.txt /tmp
Copia o arquivo doc.txt para /tmp e cria um backup, chamado doc.txt--.
mv Move ou renomeia arquivos e diretorios dentro de um sistema Linux.

Principais opções:

mv [opções] arquivol [arquivo2 diretório...] destino


-f Sobrescreve arquivos no destino.
-i Solicita confirmação antes de sobrescrever um arquivo.

Exemplos:

# mv /tmp/teste.txt /home/aluno/teste2.txt
Move o arquivo teste.txt para /home/aluno/teste2.txt. Este comando pode
ser utilizado de várias formas, dependendo de onde o usuário estiver. Por
exemplo: se o usuário estiver no diretório home, o comando poderia ser
simplificado para "mv /tmp/teste.txt." onde o ponto indica o diretório onde o
usuário se encontra no momento.

# mv -f minha-lista.txt sua-lista.txt
Renomeia o arquivo minha-lista.txt, forçando a sobrescrita.

# mv diretório_1 diretório_2
Move toda a árvore do diretório_1 para dentro do diretório_2. Caso o
diretório_2 não exista, o diretório_1 será renomeado para diretório_2.
rm Apaga um arquivo ou diretorio (remove). É possível remover vários arquivos
simultaneamente, bastando para tal colocar o nome dos arquivos a remover,
logo depois do comando.

Principais opções:

rm [opções] arquivol [arquivo2 diretorio...]


-f Não solicita confirmação.
-i Modo interativo: solicita confirmação para cada remoção.
-r ou -R Modo recursivo, apaga toda uma árvore de diretórios.
Cuidado ao usar este parâmetro, principalmente junto com
-f.

OSTENSIVO - 6-10 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:

# rm documento.txt doc.txt documento-2.txt


Remove, do diretório onde o usuário se encontra, os arquivos especificados.

# rm -ri /tmp
Remove o diretório /tmp, removendo arquivos e sub-diretorios contidos nele
(parâmetro -r), e pedindo a confirmação para cada remoção (parâmetro -i).

# rm -f minha-lista.txt
Remove, sem perguntar, o arquivo minha-lista.txt, no diretório local.
In Cria um link para outro arquivo. Por padrão, o link é um link direto ou hard
link. É importante relembrar que não é possível criar hard links para
diretórios, e também é impossível criar links diretos entre sistemas de
arquivos.

Principais opções:

In [opções] origem [destino]


Força a criação do link, sobrescrevendo o outro arquivo (se for
-f
possível).
-s Cria um link simbólico.

Exemplos:

# ln -s ~/arquivo.txt /tmp/arquivoX
Cria o link simbólico arquivoX em /tmp, apontando para o arquivo -
/arquivo.txt (o sinal de til indica o diretório home do aluno). Desta forma, é
possível acessar este diretório por qualquer um dos caminhos.

# ln -s /bin/ls ls
Cria o link simbólico Is no diretório onde o usuário se encontra, apontando
para /bin/ls.

6.6 - COMANDOS PARA LOCALIZAÇÃO DE ARQUIVOS

find Procura por arquivos em um diretório (recursivamente) com


determinadas características. Bastante flexível e repleto de opções.
Principais opções:

find [opções] [caminho] expressão a procurar


Procura arquivos que foram acessados há menos do
-atime +n | -n | n que n (-n), mais do que n (+n), ou a exatamente n
(n) dias.
Procura arquivos que foram alterados há menos do
-ctime +n | -n | n que n (-n), mais do que n (+n), ou há exatamente n
(n) dias.
Executa comando para cada arquivo achado pelo
-exec comando {}\;
find.
Mesmo que o parâmetro -name, porém ignora a
-iname padrão
diferença entre letras maiúsculas e minúsculas.

OSTENSIVO - 6-11 -
OSTENSIVO GUIA DE ESTUDO

Especifica um nome de arquivo ou padrão a ser


procurado. Suporta alguns caracteres curinga, que
-name padrão
devem ser especificados entre aspas simples para
não serem expandidos pelo shell.
-perm Permissão (modo) do arquivo, especificado em octal.
Especifica um tipo de arquivo, podendo serf para
-type arquivo regular, d para diretório e 1 para link
simbólico.
Faz buscas por documentos os quais o usuário seja o
-user usuário
dono.
Exemplos:
# find / home -name documento.txt
Procura na árvore de diretórios, a partir de /home, arquivos com nome de
documento.txt.

# find . -name '*.txt'


Procura, partindo do diretório local em diante (note o ponto antes do
parâmetro -name), todos os arquivos com extensão .txt. É importante
observar que aqui, o ponto é opcional (caso seja suprimido, estará
subentendido que a busca partirá do diretório atual onde o usuário se
localiza, varrendo os sub-diretórios e arquivos deste diretório).

# find /tmp -type d -iname '*[0-9]'


Procura, no diretório /tmp, por nomes de diretórios (parâmetro -type d
especificando o diretório, e iname especificando nomes, não diferenciando
maiúsculas de minúsculas), que iniciem por qualquer caractere (asterisco),
mas que sejam finalizados por algum dígito (indicado entre os colchetes - de
zero a nove).

# find / -name '*.rpm' -type f -perm 644 -user joão


Procura, iniciando no diretório raiz, por nomes de arquivos regulares (-type f)
que possuam a extensão .rpm, com permissão 644 (leitura e escrita para o
dono, leitura tanto para o grupo como para outros) e que pertençam ao
usuário joão.
# find /usr -atime -2 -exec Is -l {} \;
Procura arquivos, a partir do diretório /usr, que tenham sido acessados nos
últimos dois dias, e à medida em que forem encontrados, lista-os mostrando
seus atributos (Is -I).
Which Aponta o caminho para determinado comando. Sintaxe:
which comando

Exemplos:
# which Is
Mostra onde está localizado o comando Is.
whereis O mesmo que o comando which, mas pode indicar também outras
informações, como por exemplo onde está a página de manual
(documentação) do comando.
Principais opções:

whereis [opções] arquivo [comando, diretório, caractere curinga ...]


-b Procura somente por binários.
-B Altera ou limita os lugares de procura por executáveis.
Faz a busca em sub-diretórios e faz a listagem,
-f
sinalizando o início de nomes de arquivos. Deve ser
OSTENSIVO - 6-12 -
OSTENSIVO GUIA DE ESTUDO

usado quando as opções -B, -M, ou -S forem usadas.


-m Procura somente por páginas de manual.
Altera ou limita os lugares de procura por páginas de
-M
manual.
-S Procura somente por fontes.
-s Altera ou limita os lugares de procura por fontes.
Procura por informações faltantes para determinado
-u comando. Deve ser usado em conjunto com outros
parâmetros.

Exemplos:
# whereis Is
Indica o local do executável e das páginas de manual do comando Is.

# cd /usr/bin
# whereis -u -M /usr/share/man -S /usr/src -f *
Encontra todos os arquivos em /usr/bin que não estão documentados em
/usr/share/man com fontes em /usr/src.

# whereis -m echo
Exibe o local onde estão (se existirem) as páginas de manual para o comando
echo.

# whereis -m -u *
Procura somente pelos arquivos no diretório atual que não possuam
documentação.

6.7 - UTILITÁRIOS PARA MANIPULAÇÃO DE TEXTO

grep Aplica um filtro à entrada padrão ou a um arquivo passado na linha de


comando, exibindo apenas as linhas que casarem com determinado
padrão fornecido. Geralmente é utilizado com caracteres de
redirecionamento e canalização, tornando-se assim uma ferramenta poderosa
de busca.
Principais opções:

grep [opções] expressão orquivo | diretório | curinga>


-E Habilita modo "estendido", que suporta expressões regulares.
-i Ignora distinção entre maiúsculas e minúsculas.
-l Lista os nomes dos arquivos em vez de linhas individualizadas.
Adiciona no início de cada linha encontrada o número da linha no
-n
arquivo de entrada.
Lista apenas as linhas que não coincidirem com a expressão
-v
procurada.

Exemplos:
# cat /etc/passwd | grep marco marco:x:505:505:Marco da
Silva:/home/marco:/bin/bash
Direciona o resultado do comando cat /etc/passwd (a exibição do conteúdo de
/etc/passwd na saída padrão) para a entrada do comando grep marco, ou
seja, faz a busca pela string em / etc/passwd, e exibe todas as linhas que
contiverem a string "marco" na saída padrão. Um resultado possível é
mostrado como exemplo.

OSTENSIVO - 6-13 -
OSTENSIVO GUIA DE ESTUDO

# grep marco < /etc/passwd


Mesmo efeito do comando anterior, mas escrito de outra forma: o arquivo
/etc/passwd é direcionado para a entrada do comando grep, que faz a busca
e exibe as linhas que coincidirem com a string na saída padrão.

# grep marco /etc/passwd


Mesmo efeito do primeiro comando, mas escrito de outra forma (esta é a
sintaxe do comando grep de uma forma simples): faz a procura da string
"marco" em /etc/passwd e exibe as linhas que coincidirem com a string na
saída padrão.

# grep -i marco /etc/passwd


Faz a mesma busca que o comando anterior, apenas ignorando a caixa (não
existe distinção entre maiúsculas e minúsculas).

# grep -v "aa" lista.txt


Lista todas as linhas do arquivo lista.txt que não contenham a string "aa".

# find /usr -name '*.so' | grep 'lib/Xll'


Procura, iniciando no diretório /usr, por nomes de arquivos que possuam a
extensão .so. O resultado da busca é direcionado para o comando grep, que
faz a busca pela string lib/Xll.

# cat /tmp/listadepacotes | grep -v devei


Faz procura por linhas no arquivo /tmp/lista_de_pacotes que não possuam a
string "devei".

head Exibe o início (10 linhas por padrão) de um arquivo passado em linha de
comando ou do texto enviado à entrada padrão.
Principais opções:

head [opções] arquivo [arquivol, arquivo2...]


-n Define o número de linhas a serem exibidas.
-V Imprime o(s) cabeçalho(s) com o(s) nome(s) do(s) arquivo(s).

Exemplos:
# head LEIAME.txt
Exibe na saída padrão as 10 primeiras linhas do arquivo LEIAME.txt.

# head -25 -v estados.txt cidades.txt


Exibe as 25 primeiras linhas dos arquivos estados.txt e cidades.txt,
identificando o início de cada arquivo com cabeçalho.

# cat lista-tels.txt | head -n 50


Lista as primeiras 50 linhas do arquivo lista-tels.txt. Note que a linha de
comando anterior é equivalente a head -n 50 lista-tels.txt.

# cat lista-tels.txt | grep -i joao | head -n 15


Faz a busca por "joao" no arquivo lista-tels.txt, e mostra as primeiras 15
linhas do resultado. Note que cada saída de comando é respectivamente
direcionada para a entrada do outro.

OSTENSIVO - 6-14 -
OSTENSIVO GUIA DE ESTUDO

tail Exibe o final (10 linhas por padrão) de um arquivo passado em linha de
comando ou do texto enviado à sua entrada padrão.
Principais opções:
tail [opções] arquivo [arquivol, arquivo2...]
-c n Ao invés de linhas, envia os n últimos caracteres do arquivo ou
string.
-f Mantém o arquivo aberto, mostrando novas linhas à medida
que forem adicionadas, assumindo que o arquivo está
crescendo. Esta opção é ignorada se a entrada for um pipe
(redirecionamento). Caso mais que um arquivo seja informado,
será impresso um cabeçalho sempre que apresentara saída
de um arquivo diferente, para indicara qual arquivo a saída se
refere.
-n Define o número de linhas a serem exibidas em n.

Exemplos:
# tail -25 /tnip/erro-compilacao.log
Exibe as 25 últimas linhas do arquivo /tmp/erro-compilacao.log.

# tail -f /var/log/messages
Este comando, bastante utilizado pelo superusuário, serve para verificar as
10 linhas finais do arquivo /var/log/messages, que contém arquivos
genéricos de log do sistema. Isto quer dizer que no terminal onde será
mostrado este comando, as entradas que são adicionadas ao arquivo serão
mostradas pelo comando tail assim que são incluídas.

# cat lista-tels.txt | tail -n 50


Mostra o arquivo lista-tels.txt na saída padrão, mostrando apenas as 50
últimas linhas do arquivo.
sort Ordena (enviando para a saída padrão) o conteúdo de um arquivo passado
em linha de comando, ou o conteúdo de sua entrada padrão.
Principais opções:

sort [opções] arquivo


-b Ignora os espaços em branco e tabulações.
Classifica em ordem de dicionário (como um caderno de
-d
endereços).
-f Não faz distinção entre maiúsculas e minúsculas.
-r Ordem reversa de classificação.
Usa o caractere definido em padrão como separador de
-t padrão
campos.
-u Não retorna linhas duplicadas.

Exemplos:
# sort -bd cidades.txt
Ordena o arquivo cidades.txt ignorando os espaços e tabulações e
classificando em forma de dicionário.

# sort -f /tmp/lista-tels.txt > /tmp/lista-tels-ordenada.txt


Ordena o arquivo /tmp/lista-tels.txt, não fazendo distinção entre maiúsculas e
minúsculas, e direciona a saída para o arquivo /tmp/lista-tels-ordenada.txt
(se não existir o arquivo, ele é criado).

OSTENSIVO - 6-15 -
OSTENSIVO GUIA DE ESTUDO

# cat /etc/passwd | grep bash | sort -r


Note a sequência de comandos: primeiro, o arquivo /etc/passwd é mostrado
na saída padrão; em seguida, são selecionadas (com o grep) somente as
linhas onde a string "bash" é encontrada, e por fim, o resultado desta busca
é ordenado de modo reverso (sort -r).

# sort -u lista-tels.txt
Ordena o conteúdo do arquivo lista-tels.txt, não retornando linhas duplicadas.
expand Substitui tabulações por espaços, aceitando arquivos na linha de comando ou
texto na entrada padrão. Por padrão, coloca o resultado na saída padrão.
Principais opções:

expand [opções] arquivo


-i Substitui somente as ocorrências de tabulação no início da linha.
-t n Substitui as ocorrências de tabulação do texto por n caracteres em branco.

Exemplos:
# cat /tmp/listagem.txt | expand > /tmp/listagem2.txt
Faz a substituição de tabulações por espaços no arquivo /tmp/listagem.txt, e
coloca o resultado em /tmp/listagem2.txt.

# expand -t 2 cidades.txt
Transforma qualquer ocorrência de tabulação por uma sequência de 2
espaços em branco do arquivo cidades.txt e mostra o resultado na tela.

# expand -i cidades.txt | head -5


Substitui as tabulações de início da linha em cidades.txt, e mostra as cinco
primeiras linhas.
unexpand Funciona de maneira oposta ao expand, convertendo espaços para
tabulações.

unexpand [opções] arquivo


-a Substitui somente as ocorrências de tabulação no início da linha.
-t n Substitui n espaços seguidos por uma tabulação. O valor padrão é
de 8 espaços.

# unexpand arquivo.txt
Substitui por uma tabulação cada oito espaços seguidos no início de uma
linha. Se uma linha iniciar com dez espaços, o unexpand substituirá por uma
tabulação e dois espaços. Caso exista menos de oito espaços seguidos no
início da linha, o unexpand mantém os espaços.
wc Exibe o número de linhas, caracteres e/ou palavras de um arquivo ou texto
enviado à entrada padrão, fazendo a contagem. Se for especificado mais de
um arquivo, é apresentado um total, que é a somatória dos resultados de
contagem de todos eles. Se não for colocada nenhuma opção, o padrão é
apresentar todas as informações (-w, -l, -c).
Principais opções:

wc [opções] arquivo
-c Conta apenas o número de caracteres (bytes).
-1 Conta apenas o número de linhas.
-w Conta apenas o número de palavras.

OSTENSIVO - 6-16 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:
# wc cidades.txt estados.txt
4 4 30 cidades.txt
260 1163 19127 estados.txt
264 1167 19157 total
Apresenta a contagem das linhas, palavras e caracteres (nesta ordem e em
cada coluna), dos arquivos cidades.txt e estados.txt. No final é apresentada
uma totalização das três opções.

# find /usr/lib -type l | wc -l


Faz uma busca em /usr/lib por arquivos do tipo link simbólico, e faz a
contagem de linhas do resultado encontrado.

# wc -w alunosl.txt » /tmp/contagem_total.txt
Faz a contagem de palavras no arquivo alunosl.txt, e acrescenta o resultado
no final do arquivo /tmp/contagem_total.txt.
cut "Recorta" colunas ou campos de texto enviado à entrada padrão ou de
um arquivo passado na linha de comando.
Principais opções:
cut [opções] arquivo
Recorta determinada coluna do arquivo (pode ser
-c especificada uma lista de intervalos (-) e/ou listas inclusivas
(,)).
Especifica o caractere que será usado como delimitador, ao
invés de tabulações. Para evitar potenciais problemas com
-d
expansão do shell, recomenda-se que o caractere delimitador
seja especificado entre aspas.
Seleciona os campos a serem cortados. É interessante que
-f
seja utilizado em conjunto com a opção -d.

Exemplos:
# cut -d ':' -f 1-3,5 /etc/passwd
Extrai (corta) do arquivo /etc/passwd os campos de 1 a 3 e o campo 5,
usando os dois pontos como delimitador de campos para o corte.

# cut -c 1-10 /etc/passwd


Extrai (corta) do arquivo /etc/passwd as colunas de 1 a 10.

# cat /etc/passwd | cut -d ':' -f 5 | sort


Extrai (corta) do arquivo /etc/passwd o campo 5, usando os dois pontos como
delimitador para a separação dos campos, e ordena o resultado.

tr Altera o arquivo original conforme as opções que forem passadas, e cria


um novo arquivo com as alterações.
Principais opções:

tr [opções] exprl expr2


-c Opera sobre o complemento de expr1, ou seja, sobre os
caracteres que não coincidem com esta expressão.
-d car Elimina o caractere car do documento original.
-s Substitui sequências repetidas de caracteres por uma só.
-t Trunca expr1 na largura de expr2.

OSTENSIVO - 6-17 -
OSTENSIVO GUIA DE ESTUDO

Exemplos
# tr -d: < /etc/passwd > passwd.novo
Elimina do arquivo /etc/passwd o caractere de dois pontos (:), e grava o
resultado em passwd.novo (criando-o, caso ele não exista, e
sobrescrevendo-o, caso eleja exista).

# Is -l | tr a-z A-Z
Exibe os arquivos e diretórios em letras maiúsculas. Neste caso, quando o tr
executa uma operação, exprl e expr2 devem possuir o mesmo tamanho.

diff Exibe a diferença entre dois arquivos. Muito utilizado por programadores.
Principais opções:
diff [opções] arquivol arquivo2
Não mostra detalhes da diferença; indica apenas que os
--brief
arquivos diferem entre si.
-i Não faz distinção entre maiúsculas e minúsculas.
--paginate Passa o resultado para o comando pr, que irá paginá-lo.
-r Modo recursivo, percorre sub-diretórios e seus arquivos.
A formatação da diferença está inclusa no resultado. É o
-u formato mais utilizado em programação e permite um fácil
reconhecimento visual das diferenças.
Exemplos:

# diff passwd /etc/passwd


2c2
< bin:x:l:l:bin:/bin:
---
> bin:x:l:l:bin:/bin:
Mostra a diferença entre um arquivo passwd local e o arquivo /etc/passwd.

# diff --brief passwd /etc/passwd


Files passwd and /etc/passwd differ
Indica apenas que os arquivos diferem entre si.

# diff --ignore-all-space passwd /etc/passwd


Faz a comparação entre os dois arquivos, ignorando todos os espaços em
branco. Para este exemplo, não será mostrado nenhum resultado, já que a
única diferença mostrada é o espaço.

# diff -ur /tmp/diretoriol /tmp/diretorio2


Verifica a diferença entre os diretórios indicados, de modo recursivo
(verificado arquivos e sub-diretórios) e exibindo o resultado com a
formatação da diferença inclusa.

6.8 - UTILITÁRIOS PARA GERENCIAMENTO DO SISTEMA

df Exibe a quantidade de espaço utilizado/livre nos sistemas de arquivos


atualmente montados.

OSTENSIVO - 6-18 -
OSTENSIVO GUIA DE ESTUDO

Principais opções:

df [opções] arquivo | diretório


Inclui todos os arquivos, mesmo os que não contenham nenhum
-a
bloco.
Exibe os tamanhos em um formato legível para seres humanos
-h
(por exemplo 1GB).
-T Exibe o tipo de sistemas de arquivo

Exemplos:
# df –h –T
Exibe a quantidade de espaço utilizado/livre nos sistemas de arquivos
atualmente montados com a informações em formato (Kb,Mb,Gb) e o tipo de
sistema de arquivo

Arquivos | diretórios quando especificados, será exibida somente a quantidade


de espaço utilizado/livre nos sistemas de arquivos que eles residem.

free Exibe a quantidade de memoria livre/utilizada pelo sistema.


Principais opções:

df [opções]
-b Exibe a quantidade (em byte) de memória Iivre/utilizada.
-k Exibe a quantidade (em Kbyte) de memória Iivre/utilizada..
-m Exibe a quantidade (em Mbyte) de memória Iivre/utilizada.
Verfica a quantidade de memória livre/utilizada a cada n
-s n
segundos

Exemplos:
# free –s 3
Exibe a quantidade de memoria utilizada/livre de 3 em 3 segundos

uptime Informa o tempo que o sistema está ativo (ou seja, “up”).

Lista os últimos usuários que estiverem logados no sistema, com os


last respectivos TTYs ( o nome de terminal onde o usuário está conectado.)
Principais opções:

last [opções] [usuário] [ttys]


-i Resolve o endereço IP para o nome de host no formato X.X.X.X.
Exibe os registros de shutdown do sistema e de mudanças da
-x
runlevels.

Exemplos:
# last –i root
Exibe as informações de log do usuario root com o respectivo IP

w Mostra quem esta logado no sistema, e o que anda fazendo.


Principais opções:

w [opções] [usuário]
-h Não exibe cabeçalhos.
-s Utiliza formato curto na saída.

OSTENSIVO - 6-19 -
OSTENSIVO GUIA DE ESTUDO

Exemplos:
# w –s root
Exibe as informações de log do usuario root e as aplicações do sistema que
ele está utilizando

wall Envia uma mensagem para os usuários que estejam logados.


Principais opções:

wall [-n] [arquivo com a mensagem]


-n Substitui o banner padrão.
Exemplos:
# wall recado.txt
Exibe uma mensagem para todos os usuarios com o conteúdo do arquivo
recado.txt
Permite a troca online de mensagens entre dois usuarios de um mesmo
write sistema. A mensagem deve ser digitada no prompt e finalizada com um
ENTER, sendo exibida no terminal do outro usuário. CTRL-D finaliza uma
sessão de write.

write usuário [tty]


Exemplos:
# write fulano
Olá mundo
Exibe a mensagem “Olá mundo” para o usuario fulano
mesg Permite (y) ou não (n) que outros usuários escrevam mensagens
(normalmente por meio do comando write) no terminal do usuário.

mesg [y|n]
Exemplos:
fulano@cqte:~> mesg y
fulano@cqte:~> write root
Olá mundo
Habilita o usuario fulano para escrever a mensagem e envia a mensagem
“Olá mundo” para o usuario root

6.9 - RECURSOS DO SHELL BASH

6.9.1 - HISTÓRICO DE COMANDOS

É possível acessar o histórico de comandos digitados no bash utilizando as teclas de


cursor (setas do teclado, para navegação); por exemplo: a tecla com a seta para
cima irá regressar no histórico de comandos, mostrando no bash os comandos
usados recentemente.

Além disso, existem alguns atalhos para o acesso a comandos anteriores. Entre eles,
destaque para:
 O comando history, que lista os últimos comandos digitados
 A combinação de teclas Ctrl+r, que permite repetir a execução de um
comando após a procura por um determinado padrão nos últimos comandos
digitados
 A exclamação dupla (!!) repete o último comando executado

OSTENSIVO - 6-20 -
OSTENSIVO GUIA DE ESTUDO

6.9.2 - USO DA TECLA TAB ("TAB COMPLETION")

Ao digitar algum comando, a tecla Tab pode ser utilizada para "completar" a linha de
comando. Esse comportamento é bastante útil e aumenta em muito a
produtividade. A tecla Tab se comporta da seguinte maneira:

 Se estiver sendo digitado o nome de um comando, a tecla Tab pode


ser utilizada para completar o nome deste após uma parte que o identifique
seja digitada.
 Após a digitação de um comando, pode-se utilizar a tecla Tab para
completar o nome de um arquivo/diretório, desde que uma parte que o
identifique seja digitada (ou não haja outra alternativa).
 Quando há mais de uma alternativa possível, o pressionamento da tecla Tab
causa um "beep". Pressionando a tecla Tab mais uma vez pode-se ver todas
as possibilidades, o que permite que o usuário continue a digitar o
comando/nome de arquivo.

6.9.3 - CARACTERES CURINGA

Os caracteres curinga (ou também chamados de wildcards) são caracteres que


servem para facilitar tarefas de um administrador de sistema, através da linha de
comando. Eles representam um grupo de caracteres, comumente utilizados para
representar nomes e partes de nomes de arquivos. Além disso, eles servem para
dar mais poder a pesquisas, informando padrões e posições, onde a utilização de
caracteres normais seria complicada.

É importante notar que, embora eles se pareçam com os metacaracteres de


expressões regulares (um conceito comum na área de computação), sua utilização e
significado são um pouco diferentes, dependendo do aplicativo. Abaixo segue uma
tabela dos principais curingas, junto com exemplos de como podem ser utilizados.

Principais Caracteres Curinga


Símbolo Significado
Representa um caractere, uma única vez. Exemplos:
 teste.??? - Todos os arquivos com o nome teste que
tenham uma extensão de três caracteres (sejam eles
? quais forem, diferentes de zero).
 /home/li??? - Todos os diretórios (ou arquivos) em
/home que comecem com li e tenham outros três
caracteres quaisquer em seu nome (diferentes de zero)
Representa qualquer caractere, qualquer número de vezes.
Exemplos:
 *.txt - Todos os arquivos com a extensão .txt.
 a*/teste.* -> Todos os arquivos de qualquer diretório
começado com "a" que tenham o nome teste e qualquer
*
extensão.
 Is arquivo.* -> lista todos os arquivos do diretório atual
que iniciem com os caracteres "arquivo", finalizando com
qualquer coisa (pode ser nenhum, um ou vários
caracteres).

OSTENSIVO - 6-21 -
OSTENSIVO GUIA DE ESTUDO

Especifica uma determinada faixa de caracteres; 0 caractere


'"^" pode ser utilizado para representar negação.
Exemplos:
 *[0-9] .txt - Todos os arquivos que terminem com algum
[] número e tenham a extensão .txt.
 [A-Z]*.txt - Todos os arquivos com extensão .txt que
tenham como inicial uma letra maiúscula.
 [^a-z]*.txt - todos os arquivos que não comecem com
alguma letra minúscula e tenham a extensão txt.
Especifica um determinado conjunto de palavras/caracteres.
Exemplo:
{}
 *.{txt,TXT,doc,DOC} - Todos os arquivos que tenham as
extensões .txt, TXT, .doe ou .DOC.

É importante entender que quem interpreta os caracteres curinga é o shell


bash, e não os programas que são por ele chamados. Em outras palavras, quando
eles são passados através de uma linha de comando, o shell bash os transforma na
sua representação final e chama o programa com essa representação. Por exemplo:
em um diretório onde existam quatro arquivos com extensão .t xt (t est e.t xt,
f ooba r.t xt, im po rt ant e.t xt e laia.t xt ), o co ma nd o:

# rm -f *.txt

será convertido automaticamente pelo shell em:

# rm -f teste.txt foobar.txt lala.txt importante.txt

Sendo assim, uma maneira prática, simples e, principalmente segura, de testar o uso
de curingas é através do comando echo, que retornará exatamente o que está
sendo a ele passado pelo shell. No caso do exemplo acima, o comando echo *. txt
retornaria a lista de arquivos com extensão . txt, o que permitiria que o usuário
conferisse a lista de arquivos a ser removida.

Para evitar a conversão, pode-se utilizar as aspas simples ao redor da expressão.


Desse modo, o programa receberá os curingas e lidará com eles a seu modo. Para
testar o efeito das aspas simples, basta utilizar o comando echo para notar a
diferença.

Compare os exemplos:

# echo *.txt
foobar.txt importante.txt lala.txt teste.txt
# echo `*.txt`
*.txt

O comando sem as aspas mostra o resultado da expressão com o curinga asterisco,


enquanto que as aspas fazem com que o conteúdo que esteja dentro delas seja
mostrado exatamente como está na tela.

OSTENSIVO - 6-22 -
OSTENSIVO GUIA DE ESTUDO

6.9.4 CANALIZAÇÃO E REDIRECIONAMENTO

Os comandos, quando usados isoladamente, têm uma função muito restrita.


Entretanto, eles se tornam extremamente poderosos quando usados em conjunto.
O shell bash permite que sejam feitos redirecionamentos e canalizações das saídas
e entradas de cada programa executado. Para entender seu funcionamento, é
necessário entender que saídas e entradas estão disponíveis em cada programa.

Entrada Padrão ("stdin")


É a via de entrada utilizada por todos os programas de console que são interativos
(como, por exemplo, para pedir uma confirmação do usuário). Além da interação
com o usuário, vários comandos trabalham com dados tanto da entrada padrão
como a partir de um arquivo passado pela linha de comando (é o caso de
comandos como o less, more, head, tail, etc).

Saída Padrão ("stdout")

É a saída de dados comumente utilizada para mostrar algo na tela. É a via normal de
comunicação entre um programa e o usuário. A saída de todos os comandos é
geralmente enviada para a saída padrão, a não ser no caso de erros, vista a seguir.

Saída de Erro Padrão ("stderr")

A saída de erro padrão é utilizada para comunicar mensagens de erro e, embora


também seja direcionada à tela de terminal do usuário, é enviada por um outro
canal de comunicação. Com a saída de erro separada da saída padrão, é possível
implementar filtros inteligentes, sem que mensagens de erro (sejam elas
importantes ou não) interfiram.

Em um sistema operacional Linux, é convencionado que a entrada padrão é o


teclado e a saída padrão é o monitor de vídeo. Para determinados fins, é útil
redirecionar a saída ou a entrada de dados. Uma vez compreendidos os canais de
comunicação de cada programa disponíveis para o bash, pode-se canalizá-los e
redirecioná-los.

Redirecionamento

A ideia do redirecionamento é apontar as saídas (ou entrada) de um programa para


um determinado arquivo. Isso é feito através de três operadores do bash:

Operador Descrição
> Envia uma determinada saída para um arquivo (sobrescrevendo-
o se ele já existir).
>> Adiciona (sem sobrescrever) uma saída a um determinado
arquivo.
< Utiliza um determinado arquivo como entrada padrão.
<< Utilizado em scripts, tópico avançado não visto nesse material.

OSTENSIVO - 6-23 -
OSTENSIVO GUIA DE ESTUDO

Como já visto, existem duas saídas de dados: a saída padrão e a saída de erro
padrão. O shell utiliza sempre a saída padrão para o redirecionamento da saída de
um programa. Para direcionar a saída de erro, é necessário especificá-la
explicitamente; veja a tabela a seguir, que mostra os principais direcionamentos para
saída de erros.

Operador Descrição
2>, 2>> 0 número 2 identifica a saída de erro padrão. Desse modo, estamos
trabalhando apenas com a saída de erro, e não com a saída padrão.
2>&1 Utilizando essa sintaxe particular do shell, estamos direcionando a
saída de erro (identificada pelo número inteiro 2) para o mesmo
caminho da saída padrão (identificada pelo número inteiro 1). A partir
daí, todo o direcionamento comum passa a incluir ambas as saídas.

Um recurso muito útil no Linux (e em vários Unixes) é o uso do arquivo /dev/null.


Ele é um arquivo de dispositivo especial, que ignora tudo o que é enviado para ele
(imagine o /dev/null como um "buraco negro"). Sendo assim, quando você quiser
descartar alguma saída padrão ou saída de erro, basta redirecioná-la para
/dev/null.

Seguem exemplos de utilização de redirecionamento:

# cat /etc/passwd > passwd.copia


Redireciona a saída do comando cat /etc/passwd para o arquivo
passwd.copia em vez da saída padrão. O que ele faz na verdade é uma
cópia do arquivo /etc/passwd para o arquivo passwd.copia.

# ls *.txt > saída-ls.txt


Redireciona o resultado do comando Is *.txt para o arquivo saida-ls.txt.

# ls /root 2 > saída-erro-ls.txt


Faz a listagem do diretorio /root (note que o usuário comum não poderá
fazer isso, e neste caso, um erro será gerado), e faz o direcionamento de
erros para o arquivo saida-erro-ls.txt, em vez da saída de erro padrão.

# ls *.rpm /root 2 > dev/null


Lista todos os arquivos com extensão .rpm do diretorio /root, e envia erros
para /dev/null, em vez da saída padrão.

# ls /root *.txt > saída-completa-ls.txt 2>&1


Lista o conteúdo de /root (note que o usuário comum não poderá fazer isso, e
portanto, um erro será gerado) e dos arquivos locais com extensão txt,
enviando a saída para o arquivo saida-completa-ls.txt.

# ls /root *.txt 2>&1 > saída-completa-ls.txt


A diferença deste com o anterior é que primeiramente é feito o tratamento de
erros, e depois é direcionado o resultado da operação para o arquivo saida-
completa-ls.txt. Ou seja, os erros são direcionados apenas para a saída
padrão, não são gravados no arquivo. A sugestão é que o aluno execute e
perceba a diferença entre os comandos.

OSTENSIVO - 6-24 -
OSTENSIVO GUIA DE ESTUDO

# cat < exemplo.txt > exemplo_copia.txt


Aqui esta se redirecionando tanto a entrada padrão como a saída padrão.
Ao invés do teclado, a entrada de informações no comando cat é o arquivo
exemplo.txt, e em vez da tela, a saída seria redirecionada para o arquivo
exemplo_copia.txt. Observe que o comando cp arquivo.txt
exemplo_copia.txt teria o mesmo efeito.

# echo y > confirm


# rm -i arquivo.txt < confirm
O primeiro comando envia o resultado de echo y para o arquivo confirm. O
segundo comando recebe como entrada o conteúdo do arquivo confirm, ou
seja, quando for pedida a confirmação para a remoção de arquivo.txt, será
recebido o conteúdo de confirm, que neste caso é "y"-

Canalização

A ideia de canalização é ligar dois ou mais processos através de suas saídas e


entradas de dados. Por exemplo, podemos direcionar a saída padrão de um
determinado programa para a entrada padrão de outro. Isso é extremamente útil
pois casa com a filosofia do UNIX de ter vários pequenos utilitários que cumpram
pequenas tarefas que, quando trabalhando em conjunto, garantem grande
flexibilidade e funcionalidade.
A principal ferramenta para canalização é o "pipe" ("tubo" em inglês),
representado pelo símbolo "|". Sua utilização é simples, e pode ser vista abaixo:

# ls | more
Direciona o resultado do comando Is para a entrada do comando more.

# cat /etc/inputrc | more


Direciona a saída do comando cat/etc/inputrc para o comando more.

# ls /etc /root 2>&1 | more


Lista o conteúdo dos diretórios /etc e /root, enviando os erros para a saída
padrão e, em seguida, direcionando todo este resultado para o comando
more.

tee
O tee copia a entrada padrão para a saída padrão e para o(s) arquivo(s) passado(s)
através de parâmetros ao comando. É útil para casos onde você não quer
apenas enviar a saída de um comando através de um pipe, mas também salvá-la
em um arquivo.

# ls -lha | tee lista1.txt lista2.txt


Apresenta na saída padrão o resultado do comando Is -lha e também grava o
resultado nos arquivos listal.txt e Iista2.txt.

# ls | tee arquivos.txt | grep -i fundamentos


Grava a saída do comando Is em arquivos.txt e repassa esta saída ao grep,
apresentando na saída padrão apenas os arquivos que possuem a string
fundamentos, não fazendo distinção entre letras maiúsculas e minúsculas.

OSTENSIVO - 6-25 -
OSTENSIVO GUIA DE ESTUDO

Caso os arquivos indicados como parâmetros ao tee não existam, eles serão
criados automaticamente. Por padrão, ao gravar em um arquivo já existente, o
tee irá sobrescrever o arquivo. Para adicionar informações ao final do arquivo, em
vez de sobrescrever-lo, utilize a opção -a:

# cal 11 2015 | tee -a lista1.txt


Adiciona o calendário de novembro de 2015 ao final do arquivo listal.txt,
gerado no exemplo anterior, além de também apresentar o calendário na
saída padrão

OSTENSIVO - 6-26 -

Você também pode gostar