O seguinte é um pouco simplificado para ajudar novos usuários.
Bem, primeiro, é necessário entender o conceito de entrada e saída padrão.
No Linux e em outros sistemas operacionais do tipo UNIX, cada processo possui uma entrada padrão ( stdin) e uma saída padrão ( stdout). A situação usual stdiné o teclado e stdouta tela ou a janela do terminal.
Então, quando você executa ls, ele lança sua saída para stdout. Se você não fizer mais nada, ele será exibido na tela ou na janela do terminal e você será exibido.
Agora, alguns comandos do Linux interagem com o usuário e costumam stdinfazer isso, sendo seu editor de texto um deles. Ele lê de stdinpara aceitar as teclas digitadas, fazer as coisas e depois gravar as coisas stdout.
No entanto, também existem comandos não interativos ou de "filtro" que NÃO funcionam interativamente, mas desejam um monte de dados. Esses comandos pegam tudo o que stdintem, fazem alguma coisa e jogam parastdout
Vejamos outro comando chamado du- significa uso de disco. du /usr, por exemplo, imprimirá ( stdoutcomo qualquer outro comando do Linux) uma lista de todos os arquivos nesse diretório e seu tamanho:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
Como você pode dizer logo de cara, ele não está classificado, e você provavelmente o quer em ordem de tamanho.
sorté um daqueles comandos de "filtro" que pega várias coisas stdine as classifica.
Então, se fizermos isso:
# du /usr | sort -nr
nós entendemos isso, que é um pouco melhor:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
E agora você pode ver que o "pipe" conecta o stdoutcomando de um ao stdinoutro. Normalmente, você o utilizará em situações como esta em que deseja filtrar, classificar ou manipular a saída de um comando. Eles podem ser colocados em cascata se você desejar processar a saída por meio de vários comandos do tipo filtro.
Se você digitar sortpor si só, ele ainda tentará ler stdin. Como stdinestá conectado ao teclado, ele estará aguardando você digitar e processar as coisas até pressionar Control-D. Isso não será solicitado, pois não é para ser usado de maneira interativa.
É possível que um programa diga se stdiné interativo ou não; portanto, alguns programas podem agir de maneira diferente se você os emitir sozinhos ou no final de um canal.
Além disso, canalizar um programa que funcione apenas de maneira interativa viresultará em problemas para você.
Os canais são diferentes do redirecionamento, pois os dados são embaralhados de um comando para o outro sem serem armazenados em nenhum lugar. Portanto, no exemplo acima, dua saída de não é armazenada em nenhum lugar. Na maioria das vezes, você não deseja isso com pipes, porque o motivo para usá-los é processar a saída de um comando de alguma maneira - mas existe um comando teeque permite que você pegue o seu bolo e o coma também; copie o que recebe de stdinpara os dois stdoute um arquivo de sua escolha. Você também pode fazer isso bashcom alguma sintaxe misteriosa envolvendo e comercial e colchetes que eu não conheço.
|é que ele não usa um nome; a saída do comando l-hand é passada diretamente para a entrada do comando no lado r do lado do tubo.