Wie verkleinere ich einen Dateinamen anstelle einer Inode-Nummer?

Wie verkleinere ich einen Dateinamen anstelle einer Inode-Nummer?

Ich habe eine Software, die ihre Protokolldateien beim Neustart rotiert. Während der Entwicklung starte ich sie jedoch häufig neu, sodass ich jederzeit die neueste Protokolldatei überwachen möchte.

Wenn ich lessnormal beginne less program.logund Shift+ fdrücke, um das Ende zu markieren, kontrolliere ich weiterhin die alte Protokolldatei, wenn die Protokolldatei rotiert wird. Ich gehe davon aus, dass dies daran liegt, dass die Inode-Nummer gleich bleibt und lessein offener Datei-Handle für diesen Inode vorhanden ist.

Ist es möglich, die neueste Aktivität in der aktuell aufgerufenen Protokolldatei zu überwachen program.log?

Insbesondere arbeite ich unter Sun OS, daher wäre eine Lösung, die dort funktioniert, ideal.

Antwort1

Verwenden Sie es less --follow-name, wenn Ihre Version lesses unterstützt.
Diese Option wurde in Version 416 eingeführt.

Shift+FFühren Sie dann innerhalb einen normalen Folgebefehl aus less.

Antwort2

Die lessOption --follow-nameist nur ein Teil der Lösung.
Um zu ersetzen tail -F, wird ein weiteres Argument benötigt:

less --follow-name +F file.log

Die Option allein wie folgt less --follow-name file.lognicht automatisch den Dateiaktualisierungen. Sie müssen den Verfolgungsmodus aktivieren, indem Sie drücken ShiftF.
(Beenden Sie den Modus, um zu navigieren, mit ControlC.)

Anstatt der Datei zu folgen,--follow-name verändert das Verhaltenvon weniger.
Dadurch wird die Befehlstaste ShiftFinnerhalb von lessbasierend auf dem Dateinamen und nicht dem Dateideskriptor ausgeführt.

Außerdem gibt es keine normale Option, lessim Follow-Modus zu starten.
Sie können jedoch die Befehlszeile verwenden, umTastenanschläge zum Ausführennach dem Start, indem Sie ihnen das Präfix voranstellen +.
Wenn Sie die Modifikatoroption mit kombinieren +F, lesswird tatsächlich im (modifizierten) Folgemodus gestartet.

Verwenden Sie es +Fallein für das Äquivalent von plain tail -f:

less +F file.log

Antwort3

Ich habe gerade die Antwort in diesem U&L Q&A mit dem Titel gefunden:Wie erstelle ich eine tail -fProtokollrotation für Dateien?.

Verwendung von tail:

(wenn die Installation von GNU Tail auf Ihrem System eine Option ist)

tail -F program.log

Von demtail-Manpage:

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

Der Schlüssel ist der --retrySchalter. Dieser weist den tailBefehl an, immer wieder zu versuchen, einer Datei nach Namen zu folgen. Der -FSchalter führt sowohl a als -fauch a aus --retry.

Verwenden vonless

Wie @StephaneChazela in den Kommentaren anmerkte, wird Folgendes nicht funktionieren.

tail -F program.log | less

Die einzige andere Möglichkeit, die Sie haben, besteht darin, „less“ direkt zu verwenden, vorausgesetzt, es unterstützt den --follow-nameSchalter und lessdie Datei direkt, und tailvollständig auf die Verwendung zu verzichten.

less --follow-name program.log

verwandte Informationen