você está aqui: Home  → Arquivo de Mensagens

Evitando as mensagens de erro geradas pelo comando find

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 05 de julho de 2010

Ao emitir o comando find, se não temos os privilégios do superusuário (root), e dependendo de onde estamos pesquisando, podemos receber uma enxurrada de mensagens de erro, que atrapalham e muito na visualização dos resultados:

  $ find / -name password\*
  find: `/lost+found': Permissão negada
  find: `/etc/ppp/peers': Permissão negada
  find: `/etc/cups/ssl': Permissão negada
  find: `/etc/chatscripts': Permissão negada
  find: `/etc/ssl/private': Permissão negada
  ./var/lib/pam/password
  find: `/var/lib/mysql': Permissão negada

E por aí vai, dezenas de linhas deste tipo. Rejeição em massa, um problema grave para quem tem auto estima baixa :-)

Se eu puder ignorar as mensagens de erro com segurança, basta redirecioná-las para o buraco negro de sistemas *nix, o dispositivo /dev/null:

  $ find / -name password\* 2> /dev/null
  /var/lib/pam/password
  /var/cache/debconf/passwords.dat
  /usr/share/ri/1.8/system/CGI/HtmlExtension/password_field-i.yaml
  /usr/share/ri/1.8/system/URI/Generic/password-i.yaml
  /usr/share/ri/1.8/system/URI/Generic/password%3d-i.yaml
  /usr/share/pixmaps/password.png
  /usr/lib/pppd/2.4.4/passwordfd.so

2> representa a saída padrão para erros (standard error output stream). De forma mais simples, a saída padrão para erros, também conhecida por stderr, é o local para onde a maior parte dos comandos executados enviam suas mensagens de erro. As mensagens normais são enviadas para a saída padrão (stdout), representada pelo número 1.

Mas vejamos uma outra situação. Executemos o mesmo comando, mas redirecionando a saída para um arquivo:

  $ find / -name password\* > saida.txt
  find: `/lost+found': Permissão negada
  find: `/etc/ppp/peers': Permissão negada
  find: `/etc/cups/ssl': Permissão negada
  find: `/etc/chatscripts': Permissão negada
  find: `/etc/ssl/private': Permissão negada
  find: `/var/lib/mysql': Permissão negada

No arquivo saida.txt temos o conteúdo:

  /var/lib/pam/password
  /var/cache/debconf/passwords.dat
  /usr/share/ri/1.8/system/CGI/HtmlExtension/password_field-i.yaml
  /usr/share/ri/1.8/system/URI/Generic/password-i.yaml
  /usr/share/ri/1.8/system/URI/Generic/password%3d-i.yaml
  /usr/share/pixmaps/password.png
  /usr/lib/pppd/2.4.4/passwordfd.so
  ... linhas omitidas

A saída padrão, stdout, foi direcionada para o arquivo saida.txt, mas os erros (stderr), continuaram sendo enviados para a tela. A diferença mais significativa é que o arquivo contém o que me interessa. Mesmo assim, meio trabalhoso, não?

Posso fazer melhor. Eu posso redirecionar a saída padrão para um arquivo e os erros para outro:

  $ find / -name password\* 2> /tmp/erros.txt 1> /tmp/saida.txt

Bastante útil. Por exemplo, ao rodar um shell script via cron do sistema, você pode querer que os erros lhe sejam enviados por email, para ver se tudo correu bem. É só fazer um teste e ver se o arquivo de erros tem conteúdo. Se tiver, envie o arquivo para você mesmo para que a situação possa ser analisada e as ações apropriadas sejam tomadas.



 

 

Veja a relação completa dos artigos de Rubens Queiroz de Almeida

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script