De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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