sexta-feira, 17 de maio de 2013

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.


Localizadores


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

Este comando procura por diretórios e arquivos por uma infinidade de características, por exemplo, data de criação, data de modificação, nome, tamanho, etc.

A sintaxe do comando find é find [diretório] [opções/expressão].

Algumas flags interessantes:

- name [expressão]: Procura pela [expressão] definida nos nomes de arquivos e diretórios processados.

# find /etc -name*.conf

- maxdepth [num]: Limita a recursividade de busca na árvore de diretórios. Por exemplo, limitando a 1, a busca será feita apenas no diretório especificado e não irá incluir nenhum subdiretório.
# find /etc -maxdepth 1 -name*.conf

- amin [num]: Procura por arquivos que foram acessados [num] minutos atrás. Caso seja antecedido por “-”, procura por arquivos que foram acessados entre [num] minutos atrás e o momento atual.

# find ~ -amin -5

- atime [num]: Procura por arquivos que foram acessados [num] dias atrás. Caso seja antecedido por “-”, procura por arquivos que foram acessados entre [num] dias atrás e a data atual.

# find ~ -atime -10

- uid [num]: Procura por arquivos que pertençam ao usuário com o “uid 1000” [num].
# find / -uid 1000

- user [nome]: Procura por arquivos que pertençam ao usuário “aluno” [nome].

# find / -user aluno

- perm [modo]: Procura por arquivos que possuem os modos de permissão [modo]. Os [modo] de permissão podem ser numérico (octal) ou literal.
# find / -perm 644

- size [num]: Procura por arquivos que tenham o tamanho [num]. O tamanho é especificado em bytes. Você pode usar os sufixos k, M ou G para representar o tamanho em Quilobytes, Megabytes ou Gigabytes, respectivamente. O valor de [num] Pode ser antecedido de “+” ou “-” para especificar um arquivo maior ou menor que [num].
# find / -size +1 M

- type [tipo]: Procura por arquivos do [tipo] especificado. Os seguintes tipos são aceitos: b - bloco; c - caractere; d - diretório; p - pipe; f - arquivo regular; l - “link” simbólico; s - “socket”.
# find / dev - type b


Xargs


Outra forma de procurar por arquivos e/ou diretórios e executar um comando é através do comando xargs que obtém como a entrada a saída ok do comando antes do pipe e envia como stdin do próximo comando, no caso o ls -ld:

# 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!

0 comentários:

Postar um comentário

Subscribe to RSS Feed Follow me on Twitter!