如何減少檔案名稱而不是索引節點號?

如何減少檔案名稱而不是索引節點號?

我有一個軟體,可以在重新啟動時輪換其日誌檔案。然而,在開發過程中,我經常重新啟動它,所以我想隨時監控最新的日誌檔案。

如果我less正常啟動less program.log並按Shift+f到尾部,則當日誌檔案輪換時,我將繼續監視舊日誌檔案。我認為這是因為索引節點號保持不變並且less有一個指向該索引節點的開啟檔案句柄。

是否可以監視目前調用的任何日誌檔案的最新活動program.log

具體來說,我正在開發 Sun 作業系統,因此適用於 Sun 作業系統的解決方案將是理想的選擇。

答案1

less --follow-name如果您的版本less支持,請使用它。
該選項是在版本 416 中引入的。

Shift+F然後在 內執行正常的跟隨指令less

答案2

less選項--follow-name只是解決方案的一部分;
要替換tail -F,需要另一個參數:

less --follow-name +F file.log

單獨的選項less --follow-name file.log實際上並不會在文件更新後開始。您需要按 進入跟隨模式ShiftF
(退出導航模式ControlC。)

而不是遵循文件,--follow-name 改變行為的更少。它使 follow內部的
命令鍵基於檔案名,而不是檔案描述符。 ShiftFless

此外,沒有以less跟隨模式啟動的正常選項。
但你可以使用命令列給出執行的按鍵啟動後,透過在它們前面加上前綴+.
將修飾符選項與 , 結合使用+Fless實際上會以(修改後的)跟隨模式啟動。

單獨使用+F相當於 plain tail -f

less +F file.log

答案3

我剛剛在 U&L Q&A 中找到了答案,標題為:如何進行tail -f日誌輪替檔?

使用tail

(如果可以選擇在您的系統上安裝 GNU tail)

tail -F program.log

來自尾部手冊頁:

   -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

關鍵是--retry開關。這告訴tail命令繼續重試按名稱追蹤檔案。此-F開關同時執行 a-f和 a操作--retry

使用less

正如@StephaneChazela 在評論中指出的那樣,以下內容將不起作用。

tail -F program.log | less

您唯一的其他選擇是直接使用 less ,假設它直接支援--follow-name開關和less文件,tail完全放棄使用。

less --follow-name program.log

相關內容