Endprogrammausgabe in Datei unter Linux


9

Ich weiß, dass wir das folgende Format verwenden können, um die Bildschirmausgabe in eine Datei umzuleiten:

$ your_program > /tmp/output.txt

Wenn ich jedoch den folgenden Befehl verwendet habe, heißt es "-bash: /home/user/errors.txt: Berechtigung verweigert".

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

Darf ich wissen, wie diese Ausgabe funktioniert? Die Datei ~ / Errors.txt existiert nicht. Muss ich diese txt-Datei zuerst erstellen, bevor ich den Umleitungsbefehl verwende?


1
Was passiert, wenn Sie tippen echo hi > ~/errors.txt? Ist /home/userIhr korrektes Home-Verzeichnis (oder hat Bash irgendwie verwirrt, wo sich Ihr Home-Verzeichnis befindet)?
cjm

Ist userder Benutzer, der den Befehl ausführt?
Benutzer unbekannt

Ja, der Benutzer ist der Benutzer, der den Befehl
ausführt

Dies ist normales Verhalten für sudo. sudoerlaubt keine Umleitung. Zu viele Möglichkeiten, damit die Leute damit ungezogene Dinge tun können, die nicht in der sudoers.confDatei enthalten sind. Alternativ können Sie sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"das Ende von Errors.log in die Datei in Ihrem Home-Verzeichnis verschieben.
Tim Kennedy

Antworten:


17

Hinter dem Rohr funktioniert der Sudo nicht. Ich weiß nicht, warum Sie nicht zu Ihnen nach Hause schreiben können - vielleicht gehört die Datei zu root?

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

Vielleicht brauchen Sie einen anderen Benutzer hinter dem Rohr. Natürlich benötigen Sie keine bereits vorhandene Datei.


Ja, das hat funktioniert ...
Xianlin

Was das Berechtigungsproblem betrifft, ist $ HOME möglicherweise NFS-gemountet mit Rootsquash?
Ansgar Esztermann

Das $ HOME ist nicht NFS-gemountet.
Xianlin

6

Wenn Sie schreiben sudo somecommand > ~/errors.txt, ist die Shell, die aufruft sudo(und wie Sie ausgeführt wird), diejenige, die die Umleitung und das Öffnen ausführt ~/errors.txt. Siehe Umleiten von stdout in eine Datei, für die Sie keine Schreibberechtigung haben . Normalerweise besteht das Problem in diesem Fall darin, dass root in die Datei schreiben soll. In der verknüpften Frage finden Sie Möglichkeiten dazu.

Hier ist es seltsam, dass Sie nicht in eine Datei in Ihrem Home-Verzeichnis schreiben können. Möglicherweise haben Sie zuvor eine Ausgabe als root in gespeichert /home/user/errors.txt, und diese Datei ist jetzt vorhanden und gehört zu root. Entfernen Sie die Datei (Sie können dies tun, solange Sie über Schreibberechtigung verfügen /home/user, und können sie dann als Benutzer erstellen.

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

Wenn die Datei wirklich nicht vorhanden ist, haben Sie keine Schreibberechtigung in Ihrem Home-Verzeichnis. Obwohl dies technisch möglich und gelegentlich für einige eingeschränkte Benutzer nützlich ist, ist es sehr ungewöhnlich.


Ich habe versucht, '/home/user/errors.txt' zu löschen und den obigen Befehl zu verwenden. Es hat nicht funktioniert, verbiete mir trotzdem, in das Home-Verzeichnis zu schreiben. Wie auch immer, ich denke, der von Ihnen angegebene Link kann als meine Lösung verwendet werden. Es ist das gleiche wie die erste Antwort in diesem Beitrag. Sie haben jedoch einige ausführliche Erklärungen zur Umleitung von stdout in eine Datei gegeben, und ich danke Ihnen dafür.
Xianlin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.