O documento descreve os principais direcionadores de fluxo no Linux, incluindo >, >>, <, 2>, &>, |. O > direciona a saída padrão para um arquivo, substituindo seu conteúdo. O 2> direciona erros para arquivos. O < usa o conteúdo de arquivos como parâmetros de comandos. O | direciona a saída de um comando como entrada para outro.
2. Direcionadores
Direcionadores de fluxo fazem o que o nome sugere:
direcionam o fluxo da saída dos programas, enviando-as para
locais diferentes da saída padrão. Esses locais podem ser
arquivos, dispositivos, processos e outros programas.
O direcionadores utilizados no GNU/Linux são: > (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;
3. Direcionadores
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;
&> (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.
4. O direcionador >
O direcionador > direciona a saída padrão de um comando
para um arquivo. Caso o arquivo exista, o seu conteúdo é
substituído.
$ ps aux > processos.list
Agora, nada é impresso no terminal. Por que? Porque a
saída foi direcionada para o arquivo processos.list.
Verifique o conteúdo do arquivo.
5. O direcionador 2>
Uma restrição ao uso do direcionador > é que ele não funciona para
mensagens de erro. Por exemplo, vamos usar o comando ps aux
usando como parâmetro um processo inexistente.
$ ls diretorio_inexistente > diretorios.list
Observe que, mesmo usando o direcionador >, a mensagem de erro
foi exibida. Se visualizarmos o conteúdo do arquivo ls_out veremos
que nada foi gravado.
Para gravar as mensagens de erro, devemos usar o direcionador 2>:
$ ls diretorio_inexistente 2> diretorios.list
Agora sim, nenhuma mensagem de erro foi exibida na tela, porque
ela foi enviada para o arquivo diretorios.list, verifique o resultado.
6. O direcionador <
Uma função muito útil dos direcionadores é utilizar o conteúdo
de arquivos como parâmetros de comandos. Para isso
utilizamos o direcionador <. Como exemplo, vamos criar um
lista de programas que devem ser executados em seqüência,
no arquivo lista.exec, da seguinte forma:
$ cat lista.exec
ls
cat arquivo_inexistente
Agora, utilizamos o comando exec para executar os comandos
listados no arquivo lista.exec, da seguinte forma:
$ exec < lista.exec
7. O direcionador <<
Temos ainda o direcionador <<, utilizado para marcar o fim de
exibição de um bloco. Um dos usos mais freqüentes desse
direcionador é em conjunto com o comando cat.
O comando abaixo termina o comando cat quando for digitada a
palavra "fim":
$ cat << fim
> O comando só termina
> quando for digitada
> a palavra especificada
> depois do direcionador
> <<, nesse caso, a palavra
> é "fim"
> fim
8. Exemplo:
Poderiámos usar isso para inserir texto em um arquivo
sem precisar usar nenhum editor de texto. Vamos
inserir, por exemplo, uma linha ao final do arquivo
/etc/fstab:
$ cat << FIM >> /etc/fstab
> /dev/sda /mnt/usb vfat rw,user,noauto,sync 0 0
> FIM
9. O direcionador |
Por fim, temos o último direcionador, o |, também
conhecido como pipe (duto, cano), utilizado para
direcionar a saída de um comando para outro comando, e
é utilizado todo o tempo para a realização de todo tipo de
tarefas e procedimentos.
Um dos usos mais comuns do | é com os comandos ls e
more (ou less), para ver o conteúdo de um
diretório, quando este não cabe na tela, como o diretório
/etc, por exemplo. Para que possamos ver todos os
arquivos, direcionamos a saída do ls para o more, que faz
a paginação do conteúdo:
$ ls /etc | more