Solução 1: redirecione para um arquivo que você pode escrever para
Seu diretório de trabalho atual é /
, que por padrão só pode ser modificado por root. Digite cd ~
para mudar para sua pasta pessoal, ou cd
seguido do caminho para um diretório em que você pode gravar, e faça novamente.
Solução 2: redirecionar com sh
sob sudo
Os redirecionamentos de shell não são repassados para os programas. Isso significa que, mesmo que você execute um programa em sudo
, o redirecionamento (como >>
) ainda será executado na sua conta. Isso é o que acontece:
sudo ls -l /usr/bin >>/ls-output.txt
-------------------------------------------------------
| execute external program | redirect stdout | what your shell sees
| sudo | command to execute as root | what sudo sees
Se você deseja sudo
a, você precisa executar um shell como root. Você pode fazer isso:
sudo sh -c ' ls -l /usr/bin >>/ls-output.txt '
-------------------------------------------------------------------------------
| execute external program (pass the single-quoted string verbatim) | your shell
| sudo | command to execute as root | sudo
| sh | -c | execute external program | redirect stdout | root shell
Dessa forma, o redirecionamento faz parte de uma invocação de sh
feita em sudo
.
Solução 3: redirecionar com tee
sob sudo
Como Oli ♦ sugerido , você também pode enviar seu comando para tee:
ls -l /usr/bin | sudo tee /ls-output.txt
-------------------------------------------------------------------------
| execute external program | pipe | execute external program | your shell
| sudo | command to execute as root | sudo
Observe que tee
é executado em sudo
, mas não em ls
. Isso ocorre porque tee
precisa de privilégios de raiz (para gravar em /ls-output.txt
) e ls
não. Se o programa que gera a saída fez precisar de privilégios de root, você precisaria de sudo
de ambos.
sudo ls -l /root | sudo tee /ls-output.txt
--------------------------------------------------------------------------------
| execute external program | pipe | execute external program | your shell
| sudo | command to execute as root | sudo #1
| sudo | command to execute as root | sudo #2
Além disso, se você não quiser a saída exibida na tela, poderá adicionar >/dev/null
ao final da linha.