terça-feira, 19 de novembro de 2013

Redirecionamento de Entrada e Saída (I/O) do Linux / Unix

I/O Redirecionamento de Entrada / Saída

Neste artigo, exploraremos os poderosos recursos utilizados por muitos programas de linha de comando chamados redirecionamento de input/output. Como temos visto, vários comando tal como ls imprime suas saída na tela. Isto porém não tem nada a ver como o caso. Utilizando algumas notações especiais nós poderemos redirecionar a saída de vários comandos para arquivos, dispositivos, e até mesmo para a entrada de outros comandos.

Saída Padrão

Vários programas de linha de comando que exibe seus resultados o fazem enviando seus resultados para algum dispositivo chamado saída padrão. Por default, a saída padrão direciona seu conteúdo para a tela. Para redirecionar a saída padrão para um arquivo, o caractere  ">" é utilizado desta forma:

[alex@linux]$ ls > arquivo_lista.txt

Neste exemplo, o comando ls  é executado e o resultado é escrito num arquivo chamado de arquivo_lista.txt. Desde que a saída de ls foi redirecionada para o arquivo, o resultado não aparece na tela.
A cada vez que o comando acima é repetido, o arquivo_lista.txt é sobrescrito (desde o início)  com a saída do comando ls. Se você quiser que, em vez disto, o novo resultado seja anexado ao arquivo, utilizar ">>"  desta forma:


[alex@linux]$ ls >> arquivo_lista.txt

Quando o resultado for anexado, o novo resultado é adicionado ao fim do arquivo, que faz o arquivo alongar-se a cada vez que o comando é repetido. Se o arquivo não existir quando tentar anexar a saída redirecionada, o arquivo será criado. 

Entrada Padrão

Vários comandos podem aceitar entradas de algum dispositivo chamado entrada padrão. Por default, a entrada padrão recebe seu conteúdo do teclado, mas assim como a entrada padrão, ela pode ser redirecionada. Para redirecionar a entrada padrão a partir de um arquivo ao invés do teclado, é utilizado o caractere "<" :

[alex@linux]$ sort < arquivo_lista.txt

No exemplo acima foi usado o comando sort para inserir o conteúdo arquivo_lista.txt. O resultado é exibido na tela do monitor, desde que a saída padrão não seja redirecionada neste exemplo. Nós poderíamos redirecionar a saída padrão para outro arquivo desta maneira:

[alex@linux]$ sort < arquivo_lista.txt > sorted_arquivo_lista.txt

Como podemos ver, um comando pode ter tanto sua entrada quanto a saída redirecionada. Esteja consciente que a ordem de redirecionamento não importa. O único requisito é que o operador de redirecionamento ("<" & ">") deve aparecer depois de outra opção e argumentos no comando.

Pipes "|"

De longe, a mais útil e poderosa coisa que você pode fazer com o redirecionamento de I/O é conectar múltiplos comandos juntos com o que nós chamamos de pipes "|". Com pipes, a saída padrão de um comando é alimentado com a entrada padrão de um outro. Aqui está meu comando favorito absoluto:

[alex@linux]$ ls -l | less

Neste exemplo, a saída do comando ls  é alimentado dentro de less. Por usar o truque com "| less", você pode fazer com que qualquer comando tenha saída de rolagem. Eu uso esta técnica o tempo todo.
Por conectar os comando juntos você pode realizar proezas incríveis. Aqui estão alguns exemplos que desejará experimentar:

Exemplos de comandos usado junto com pipes
ComandoQue isto faz
ls -lt | headExibe os 10 mais recentes arquivos do diretório atual.
head - saída dos primeiros arquivos da lista do diretório.
du | sort -nrExibe uma lista de diretórios e quantos de espaço eles ocupam, classificados a partir do maior ao menor.
du - espaço estimado usado pelo arquivo

find . -type f -print | wc -lExibe o número total de arquivos do atual diretório de trabalho e seus subdiretórios.
find - busca por arquivos em uma hierarquia de diretório.

Filtros

Uma classe de programas que você pode usar com pipes é chamados de filtros. Filtros tomam a entrada padrão e realizam uma operação sobre esta, e envia o resultado para uma saída padrão. Desta forma, eles pode ser usados para processar informações de uma forma poderosa. Aqui estão alguns dos mais comuns programas que agem como filtros:

Comandos Filter Comuns
ProgramaQue Isto Faz
sortClassifica entrada padrão, então envia o resultado classificado para a saída padrão.
sort - classifica linhas num arquivo texto.
uniqDado um fluxo ordenado de dados a partir da entrada padrão, ele remove linhas duplicadas de dados (ou seja, garante cada linha seja única).
grepExamina cada linha de dados foi recebida da entradas e envia o resultado de cada linha que contém um padrão especificado de caracteres padrão.
fmtLê o texto a partir da entrada padrão, em seguida, envia texto formatado para a saída padrão.

prToma texto inserido a partir da entrada padrão e divide os dados em páginas com quebras de página, cabeçalhos e rodapés, em preparação para a impressão.
headEnvia o resultado das primeiras poucas linhas a partir da entrada. Útil para obter o cabeçalho de um arquivo.
tailEnvia o resultado das últimas linhas a partir de sua entrada. Útil para obter resultados como por exemplo as entradas mais recentes de um arquivo de log.
trTraduz caracteres. Pode ser usado para executar tarefas como conversões de MAIÚSCULAS/minúsculas ou mudar os caracteres de terminação da linha de um tipo para outro (por exemplo, a conversão de arquivos de texto do DOS para arquivos de texto estilo Unix).

sedEditor de fluxo de dados. Pode executar traduções de texto mais sofisticadas do que tr.
awkUma linguagem de programação inteiramente projetada para a construção de filtros. Extremamente poderosa.

Nenhum comentário:

Postar um comentário