Infra - Linux
Evitando as mensagens de erro geradas pelo comando find
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.
por Rubens Queiroz de AlmeidaAo 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.
- Login automático com SSH e Automatização da instalação (deploy) e atualização de sites com GitLinux
- O que é Ar.DroneLinux
- Criando aplicativos para o iPhone no Linux (sem Xcode e MacOS X)Linux
- Blu-ray: Reproduzindo, copiando, ripando e assistindo no GNU/LinuxLinux
- Utilize seu iPad/iPhone/IPod Touch na plataforma GNU/LinuxLinux