Depois de um tempo parado com essa série e com meus estudos por falta de tempo, agora vou voltar a estudar e criar posts sobre Linux, voltado para a certificação LPI 1. No post de hoje vamos ver alguns comandos avançados no terminal, todos eles de altíssima relevância e cobrados no exame. Mais específicamente vamos ver comandos de busca e manipulação de entradas e saídas de comandos com alguns operadores.
Vamos começar pelos comandos localizadores. Existem uma série de comandos úteis para localizar todo o tipo de arquivo no sistema. Vejamos os principais:
# find / etc -type d | xargs ls -ld
Time
O comando time permite medir o tempo de execução de um programa:
# time find / -name *.conf
Locate
Outro método de busca é o comando locate, mas este em específico não faz a busca recursivamente, e sim por uma base de dados. Então, antes de usar esse comando você precisa atualizar a base de dados com o comando:
# updatedb
Pode ser que a primeira vez ele demore um pouco, porque ele está varrendo, verificando e catalogando todos os arquivos do disco. A sintaxe do comando é bem simples, apenas o comando e o que você pretende procurar.
# locate howto
A saída do comando acima será parecida com:
/usr/share/doc/python2.4-xml/howto.cls
/usr/share/doc/python2.4-xml/xml-howto.tex.gz
/usr/share/doc/python2.4-xml/xml-howto.txt.gz
/usr/share/vim/vim64/doc/howto.txt
Redirecionamentos
Antes de vermos os operadores de redirecionamento e os comandos, vamos a um pouco de teoria que pode ser necessário. O Linux tem três fluxos de dados, Entrada (INPUT), Saída (OUTPUT) e, Diagnósticos e Erros.
Por padrão, a entrada de dados é pelo teclado, e a saída é na tela. Normalmente erros também são mostrados na tela. Normalmente é utilizado alguns termos para identificar essas entradas e saídas padrões. São elas: 0 - Entrada de dados, representada por “stdin” (Standard Input); 1 - Saída de dados, representada por “stdout” (Standard Output); 2 - Saída de erros, representada por “stderr” (Standard Error).
Operadores e Comandos
> (maior): Direciona a saída do comando para um arquivo, substituindo o seu conteúdo, caso o arquivo já exista;
>> (maior-maior): Direciona a saída do comando para um arquivo, adicionando o texto ao final do arquivo, caso ele já exista;
< (menor): Passa o conteúdo do arquivo como argumento para o comando;
2> (dois-maior): Direciona as saídas de erro geradas pelo programa para um arquivo, substituindo seu conteúdo, caso o arquivo já exista;
2>> (dois-maior-maior): Direciona as saídas de erro geradas pelo programa para um arquivo, adicionando o texto ao final do arquivo, caso ele já exista;
2>&1 (dois-maior-e-um): Direciona as saídas de erro para a saída do comando, no caso para STDOUT;
&> (e-maior): Direciona todas as saídas (normal e de erro) para um arquivo, substituindo seu conteúdo, caso ele já exista; &» (e-maior-maior): Direciona todas as saídas (normal e de erro) para um arquivo, adicionando o texto ao final do arquivo, caso ele já exista;
| (barra vertical ou pipe): Utiliza a saída do primeiro comando como argumento do segundo comando; tee: mostra saída na tela e redireciona para um arquivo ou outra localização ao mesmo tempo;
<<: marca o fim de um bloco.
tee: Este comando permite que a saída seja exibida na tela e ao mesmo tempo redirecionada a um arquivo. Caso o arquivo não exista será criado um arquivo.
dd: O comando dd dos sistemas baseados em Linux e Unix, é um programa para copiar e converter arquivos de um local para outro, servindo até para clonar dispositivos ou áreas de discos fixos ou removíveis como CD(s), DVD(s), disquetes, HD(s), dispositivos USB entre outros. A sintaxe do comando é dd if=<origem> of=<destino>.
wc: A maioria dos arquivos de configuração no Unix é separada em linhas, temos este comando para contar as linhas de um arquivo. Este comando indica quantas linhas, palavras e caracteres tem um arquivo. Caso queira apenas ver a contagem de linhas use a flag -l, para contagens de palavras a flag -w e para a contagem de caracteres use a flag -c.
split: Usado para dividir um determinado arquivo em arquivos menores.
file: Informa o tipo do arquivo.
who: Determina quais usuários estão logados no sistema.
w: Mostra tempo que o sistema está ligado, média de carga do sistema, usuários logados.
ln: O comando ln permite criar links. Existem dois tipos de links suportados pelo Linux, os hard links e os links simbólicos. Os links simbólicos têm uma função parecida com os atalhos do Windows: eles apontam para um arquivo, mas se o arquivo é movido para outro diretório, o link fica quebrado. Os hard links por sua vez são semelhantes aos atalhos do OS/2 da IBM, eles são mais intimamente ligados ao arquivo e são alterados junto com ele. Se o arquivo muda de lugar, o link é automaticamente atualizado. Isto é possível porque nos sistemas de arquivos usados pelo Linux cada arquivo possui um código de identificação (chamado de inode), que nunca muda. O sistema sabe que o arquivo renomeado é o mesmo do atalho simplesmente procurando-o pelo inode ao invés do nome.
stat: Um inode é, na realidade, uma estrutura de dados que possui informações sobre um determinado arquivo ou diretório como, por exemplo, dono, grupo, tipo e permissão de acesso. Para sabermos essa e outras informações de um arquivo usamos o comando stat.
sort: Comando usado para organizar em ordem as linhas de um arquivo. Pode-se usar algumas flags para customizar a organização, como por exemplo, -f para ignorar caixa alta e caixa baixa, -n para classificação numerica e -r para ordem invertida.
uniq: Remove linhas duplicadas.
E era isso por hoje!
No próximo post sobre a série preparatória da certificação LPI 1 abordaremos mais um pouco de filtragem de comandos e administração da Shell. Eu fico por aqui, mas recomendo que estudem isso, pois mesmo que não prestem a prova, esse tipo de conhecimento pode fazer a diferença.
Bons estudos!