tail output do programa para arquivo no Linux

7

Eu sei que podemos usar o formato abaixo para redirecionar a saída da tela para um arquivo:

$ your_program > /tmp/output.txt

No entanto, quando eu usei o comando abaixo, ele diz "- bash: /home/user/errors.txt: Permission denied"

sudo tail /var/log/apache2/error.log > ~/errors.txt

Posso saber como fazer essa saída funcionar? O ~ / errors.txt não existe. Preciso criar este arquivo txt antes de usar o comando de redirecionamento?

    
por Xianlin 20.03.2012 / 07:12

2 respostas

15

Por trás do pipe, o sudo não funciona. Eu não sei porque você não pode escrever em sua casa - talvez o arquivo pertença ao root?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

Talvez você precise de um usuário diferente por trás do pipe. Com certeza, você não precisa de um arquivo preexistente.

    
por 20.03.2012 / 07:52
5

Quando você escreve sudo somecommand > ~/errors.txt , o shell que está chamando sudo (e está sendo executado como você) é aquele que está executando o redirecionamento e abrindo ~/errors.txt . Consulte Redirecionando o stdout para um arquivo que você não usa não tem permissão de gravação em . Normalmente, o problema nesse caso é que você deseja que o root grave no arquivo; veja a pergunta vinculada para saber como fazer isso.

Aqui, é estranho que você não possa gravar em um arquivo em seu diretório pessoal. É provável que você salvou anteriormente alguma saída como root em /home/user/errors.txt , e esse arquivo agora existe e pertence a root. Remova o arquivo (você pode fazer isso desde que tenha permissão de gravação em /home/user e, em seguida, poderá criá-lo como seu usuário.

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

Se o arquivo realmente não existir, você não terá permissão de gravação em seu diretório pessoal. Embora seja tecnicamente possível e, na verdade, útil ocasionalmente para alguns usuários restritos, é muito incomum.

    
por 20.03.2012 / 17:33