sortie du programme tail dans un fichier sous Linux

9

Je sais que nous pouvons utiliser le format ci-dessous pour rediriger la sortie d'écran vers un fichier:

$ your_program > /tmp/output.txt

Cependant, lorsque j'ai utilisé la commande ci-dessous, elle indique "-bash: /home/user/errors.txt: autorisation refusée"

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

Puis-je savoir comment faire fonctionner cette sortie? Le fichier ~ / errors.txt n'existe pas. Dois-je d'abord créer ce fichier txt avant d'utiliser la commande de redirection?

Xianlin
la source
1
Que se passe-t-il si vous tapez echo hi > ~/errors.txt? /home/userVotre répertoire personnel est -il correct (ou bash a-t-il été confus quant à l'emplacement de votre répertoire personnel)?
cjm
L' userutilisateur qui exécute la commande est-il?
utilisateur inconnu
oui, l'utilisateur est l'utilisateur qui exécute la commande
Xianlin
C'est un comportement normal pour sudo. sudone permet pas la redirection. trop de façons pour que les gens puissent l'utiliser pour faire des choses coquines qui ne sont pas incluses dans le sudoers.confdossier. Comme alternative, vous pouvez exécuter sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"pour gratter la fin du fichier errors.log dans le fichier de votre répertoire personnel.
Tim Kennedy

Réponses:

17

Derrière la pipe, le sudo ne fonctionne pas. Je ne sais pas pourquoi vous ne pouvez pas écrire chez vous - peut-être que le fichier appartient à root?

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

Vous avez peut-être besoin d'un utilisateur différent derrière le tuyau. Pour sûr, vous n'avez pas besoin d'un fichier préexistant.

Utilisateur inconnu
la source
Oui, cela a fonctionné ...
Xianlin
En ce qui concerne le problème d'autorisation, peut-être que $ HOME est monté sur NFS avec rootsquash?
Ansgar Esztermann
$ HOME n'est pas monté sur NFS.
Xianlin
6

Lorsque vous écrivez sudo somecommand > ~/errors.txt, le shell qui appelle sudo(et s'exécute comme vous) est celui qui effectue la redirection et l'ouverture ~/errors.txt. Voir Rediriger stdout vers un fichier sur lequel vous n'êtes pas autorisé à écrire . Généralement, le problème dans ce cas est que vous voulez que root écrive dans le fichier; voir la question liée pour savoir comment procéder.

Ici, il est étrange que vous ne puissiez pas écrire dans un fichier de votre répertoire personnel. Il est probable que vous ayez précédemment enregistré une sortie en tant que root dans /home/user/errors.txt, et ce fichier existe maintenant et appartient à root. Supprimez le fichier (vous pouvez le faire tant que vous disposez d'une autorisation d'écriture /home/user, puis vous pourrez le créer en tant qu'utilisateur.

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

Si le fichier n'existe vraiment pas, vous n'avez pas de permission d'écriture dans votre répertoire personnel. Bien que techniquement possible, et parfois utile pour certains utilisateurs restreints, c'est très inhabituel.

Gilles 'SO- arrête d'être méchant'
la source
J'ai essayé de supprimer '/home/user/errors.txt' et d'utiliser votre commande ci-dessus. Cela n'a pas fonctionné, interdisez-moi toujours d'écrire dans le répertoire personnel. Quoi qu'il en soit, je suppose que le lien que vous avez fourni peut être ma solution. C'est la même chose que la première réponse dans ce post. Cependant, vous avez donné des explications détaillées sur la redirection de la sortie standard vers un fichier et je vous en remercie.
Xianlin