
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.txt
e esse arquivo agora existe e pertence ao root. Remova o arquivo (você pode fazer isso desde que tenha permissão de gravação /home/user
e 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.