Ich führe eine Anwendung aus, die in die Datei log.txt schreibt. Die App wurde auf eine neue Version aktualisiert, sodass die unterstützten Plugins nicht mehr kompatibel sind. Es erzwingt eine enorme Menge von Fehlern in log.txt und scheint das Schreiben in eine andere Protokolldatei nicht zu unterstützen.
Wie kann ich sie in ein anderes Protokoll schreiben?
Ich habe darüber nachgedacht, log.txt durch einen festen Link zu ersetzen (Anwendung kann den Unterschied nicht erkennen, oder?) Oder einen festen Link, der auf / dev / null verweist. Welche Möglichkeiten habe ich?
chmod -w log.txt
?Antworten:
Dies kopiert Ihr Null-Gerät mit den richtigen Haupt- und Nebenentwicklungsnummern,
log.txt
sodass Sie eine andere habennull
.Geräte sind im Kernel nicht namentlich bekannt, sondern durch ihre Haupt- und Nebennummer. Da ich nicht weiß, welches Betriebssystem Sie haben, fand ich es bequem, nur die Nummern zu kopieren, von denen wir bereits wissen, dass sie sind. Wenn Sie es mit den falschen Haupt- und Nebenzahlen machen, hätten Sie höchstwahrscheinlich ein anderes Gerät hergestellt, vielleicht eine Festplatte oder etwas anderes, auf das Sie nicht schreiben möchten.
quelle
sudo
(oder als Root-Benutzer ausgeführt wird). Bitte erläutern Sie (in Ihrer Antwort), was Sie mit "den richtigen Haupt- und Nebenentwicklungszahlen" meinen./dev/null
, wie er in Ihrem Befehl verwendet wird. Und ich denke, es würde zukünftigen Lesern helfen, in Ihrer Antwort zu vermerken ,sudo
was erforderlich ist.cp -a /dev/null log.txt
meine Kommentare ins Spiel ?sudo
diesen Befehl auszuführen, es sei denn , Sie als Benutzer passieren zu laufenroot
(was in der Regel abgeraten). Mitsudo
(oder läuft alsroot
) eine feste Verbindung (diese Antwort) oder einen symbolischen Link zu erstellen (@ V.Michel Antwort) kann die richtige Lösung nach allem, wenn die Datei in einem Ort platziert werden muss , dass jedes Benutzerkonto schreiben kann, Aber der Punkt ist: Beachten Sie diese Anforderung ausdrücklich.mknod
. Beachten Sie, dass Kommentare im Allgemeinen wenig Beachtung finden, sodass jemand, der die Frage nur liest und dann Ihre Antwort möglicherweise verwirrt (wie ich auch).Sie können einen symbolischen Link zu / dev / null erstellen und müssen nicht root sein:
quelle
ls -l log.txt
, dass es sich um eine Selbstdokumentation handelt , die zeigt, dass es sich um einen Symlink zu / dev / null handelt, anstatt sich darauf zu verlassen, dass z. B. "1, 3" irgendwie von Bedeutung ist.Die anderen Antworten hier werden wahrscheinlich funktionieren. Insbesondere die Symlink-Lösung wird wahrscheinlich die einfachste Lösung sein. Ich biete dies hauptsächlich der Vollständigkeit halber an.
Die beteiligten
mknod
(odercp -a
) Lösungen werden problematisch, wenn das Dateisystem, das die Datei enthält, keine Geräte unterstützt (z. B. wurde es mit dernodev
Option bereitgestellt ). Und natürlich funktionieren harte Links zwischen Dateisystemen einfach nicht.Eine Alternative zu festen Verbindungen oder zum Erstellen neuer Geräteknoten besteht in der Verwendung von Bind-Mounts, mit denen Sie eine Datei oder ein Verzeichnis von einem Teil Ihres Dateisystembaums auf einen anderen mounten können. So können Sie beispielsweise Folgendes ausführen:
Dies wirkt sehr ähnlich wie eine harte Verbindung, aber:
Für ein vollständiges Beispiel:
quelle
nodev
Dateisystem sein.Dies hängt entscheidend davon ab, wie die Anwendung mit log.txt umgeht.
Wenn die Anwendung nur die vorhandene Datei öffnet und darauf schreibt, können Sie sie wie in den anderen Antworten beschrieben mit / dev / null verknüpfen, an einer anderen Stelle verknüpfen oder an einer anderen Stelle fest verknüpfen (obwohl Hardlinks nicht dateisystemübergreifend sein können, gibt es also keine " t viel Sinn in diesem) erstellen Sie eine Kopie des / dev / null-Geräteknotens dort usw.
OTOH, wenn die Anwendung die Datei log.txt löscht und neu erstellt, funktioniert nichts davon. Sie könnten das gesamte Verzeichnis irgendwo anders verknüpfen, um die Schreibvorgänge in ein anderes Dateisystem umzuleiten, aber das ist alles, und Sie müssten sich mit anderen Dingen im Verzeichnis befassen.
Ich denke, wenn Sie wirklich wollten, können Sie ein benutzerdefiniertes Overlay-Dateisystem erstellen, das die meisten Operationen durchlaufen hat, während Sie alle Versuche, eine Datei mit dem Namen log.txt zu erstellen, verwerfen.
quelle
chattr +i log.txt
Beim ersten Mal wird die Datei von der Anwendung nicht mehr gelöscht.Nun, eine unanständige Methode mit Named Pipe:
Sie können fast alles mit dem gelöschten Protokoll machen, z. B. filtern oder über nc senden .
quelle
cat
Prozess beendet wird oder abstürzt, bleibt das Anmeldeprogramm hängen, wenn die Pipe voll ist.Erwägen Sie, die Datei zu einem tatsächlichen Nullgerät zu machen. Eine mit mknod erstellte Datei "log.txt" mit dem richtigen Dateityp und den gleichen Neben- und Hauptnummern fungiert als Null-Gerät, da dies der Fall ist.
quelle