saída do programa tail para arquivo no Linux

saída do programa tail para arquivo no Linux

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 usei o comando abaixo, ele diz"-bash: /home/user/errors.txt: Permissão negada"

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?

Responder1

Atrás do cano, o sudo não funciona. Não sei por que você não consegue escrever para 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 pré-existente.

Responder2

Quando você escreve sudo somecommand > ~/errors.txt, o shell que está chamando sudo(e executando como você) é aquele que executa o redirecionamento e a abertura ~/errors.txt. VerRedirecionando stdout para um arquivo no qual você não tem permissão de gravação. 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 inicial. Provavelmente você salvou alguma saída anteriormente como root em /home/user/errors.txte esse arquivo agora existe e pertence ao root. Remova o arquivo (você pode fazer isso desde que tenha permissão de gravação /home/usere então 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 inicial. Embora seja tecnicamente possível e ocasionalmente útil para alguns usuários restritos, é muito incomum.

informação relacionada