onde o programa foi iniciado.Standard Error (stderr) Funciona basicamente da mesma forma que o stdout, mas e exclusivo para a saida de mensagens de erro. Tambem e geralmente associada ao terminal.Stdout e stderr sao separados porque e comum que as mensagens de erro sejam processadas de maneira diferente das mensagens comuns.PipesComo vimos acima, tudo no linux e visto como sendo um arquivo, inclusive a saida e entrada de dados de programas. Usando essa ideia, podemos juntar diversos comandos por meio de um pipe (em portuges algo como cano ou tubo), passando a saida de um comando para a entrada de outro. Isso facilita muito o trabalho e pode agilizar tarefas que, sem isso seriam praticamente impossiveis ou pelo menos impraticaveis.Vamos a um exemplo:Digamos que voce queira analisar as mensagens de inicializacao da sua maquina em um paginador, como o less. Voce faria assim:[root@MadMax] # dmesg | lessDessa forma, o comando dmesg envia sua saida para a entrada do comando less.Outro exemplo:[root@MadMax] # ps aux | grep httpdCom esse comando voce exibe na tela todos os processos do httpd (servidor web) ativos na sua maquina.E se voce quisesse somente os PIDs? Simples:[root@MadMax] # ps aux | grep httpd | awk {'print $2'}Bom, estes sao exemplos simples, mas a partir do momento que voce se acostumar com a ideia, vai achar diversas funcoes para isso.Este processo e gerenciado pelo shell e e transparente para o usuario.RedirecionamentosAs vezes e extremamente interessante enviar a saida de um comando para um arquivo, para poder analisar posteriormente. Isso e feito usando redirecionamentos.Um exemplo:[root@MadMax] # ls -la > file1dessa forma, a listagem do diretorio vai ser gravada em um arquivo, ao inves de ser exibida na tela.o redirecionador > cria um arquivo novo vazio e sobrescreve o arquivo se ele ja existir, para adicionar o texto no final de um arquivo existente, use >>[root@MadMax] # ls -la >> file1a listagem sera salva no final do arquivo file1. Se o arquivo nao existir, sera criado.Note que o redirecionador > envia apenas stdout, para enviar stderr, usamos 2>.E importante saber que o shell vai criar o arquivo antes de executar o comando, ou seja, os pipes e redirecionamentos sao analisados antes da execucao dos comandos. Por isso temos que tomar cuidado com comandos como esse:[root@MadMax] # grep 'felipe' arquivo > arquivoisto nunca deve ser feito, pois o arquivo seria sobreposto por um arquivo vazio, resultando na perda de tudo que havia no arquivo. O correto seria usar um arquivo intermediario para guardar a saida do grep e depois renomea-lo:[root@MadMax] # grep 'felipe' arquivo > arquivo2[root@MadMax] # mv arquivo2 arquivoEstes sao os redirecionadores usados no bash, outros shells podem ter sintaxes bem diferentes.Da mesma forma, podemos ler a entrada de um comando de um arquivo:[user@MadMax] $ mail -s "novo arquivo" felipe < novoarquivoAssim o conteudo do arquivo novoarquivo e enviado para o usuario felipe por email. Normalmente o comando mail espera que voce digite a mensagem no terminal.Os redirecionadores e seus significados:cmd > arquivo ecmd 1> arquivo envia stdout para arquivocmd 2> arquivo envia stderr para arquivocmd > arquivo 2>&1 envia stdout