本篇介紹如何使用 Linux 或 Mac 的 tailless 等指令,及時查看檔案中持續增加的內容。


許多科學計算與模擬相關的程式在執行時,都會有一個或多個輸出檔案,例如資料輸出檔案、記錄檔(log)等,使用者通常都會根據這些輸出檔案,來判斷程式是否有如自己的預期正常執行。

假設我們的程式是 my_program,而我們在執行時,將出的訊息都導向至 output.log 這個檔案中儲存起來:

# 執行程式
./my_program > output.log

在程式執行的期間,會將輸出的訊息持續寫入 output.log,而我們就可以從這個檔案中檢查程式是否有錯誤。

若要查看最新的檔案內容,對於剛入門的 Linux 初學者來說,最簡單的方式就是手動重複執行 cat 指令,輸出整個檔案內容:

# 手動重複查看輸出檔案的最新內容
cat output.log

若要即時監看類似這種持續增加的檔案內容,其實有更好的方式,以下是改用 tailless 的教學。

tail 跟隨模式

tail 是一個類似 cat 的指令,不過它只會輸出檔案的最後幾行(預設是 10 行),如果加上 -f 參數啟用跟隨模式時,它就會在輸出檔案的最後幾行後,持續等待新增加的檔案內容,只要有新內容加入時,就會自動將其輸出。

這裡我們以簡單的指令稿示範 tail 跟隨模式的使用方式,首先讓程式輸出的訊息導入 output.log,同時也順便建立這個輸出檔案:

# 輸出訊息至 output.log
echo Hello >> output.log

輸出檔案建立之後,接著開啟另外一個終端機,執行 tail 以跟隨模式監看 output.log 的檔案內容:

# 以跟隨模式監看 output.log
tail -f output.log

這時候 tail 應該就會輸出一行 output.log 既有的內容,並且停在那裏等待新增加的內容。

<code>tail</code> 跟隨模式

tail 跟隨模式

這時候回到原來的終端機,再寫入一行新的訊息至 output.log 中:

# 輸出訊息至 output.log
echo World >> output.log

這時候我們在 tail 的輸出中,就會看到新增加的這一行內容了。

<code>tail</code> 跟隨模式

tail 跟隨模式

透過 tail 的跟隨模式,我們就可以輕鬆監看程式的最新輸出訊息,不必屢屢手動重複執行 cat 指令了。

如果要監看的輸出檔案不會在一開始就建立,或是有可能被刪除重建,這種狀況就可以改用 -F 參數,它跟 -f 類似,不過它會在檔案讀取失敗(的檔案不存在)後自動等待並重試。在這種狀況下,就算輸出檔案後來才被建立,或是中途被刪除又重建,也可以正常抓到最新的程式輸出訊息。

# 失敗時自動重試
tail -F output2.log

# 刪除又重建輸出檔案
echo Hello >> output2.log
rm output2.log
echo Hello2 >> output2.log
echo World2 >> output2.log

less 跟隨模式

less 是用來快速查看文字檔的小工具,而它也有支援跟隨模式,可以即時將新加入的內容顯示出來。

首先按照一般的方式執行 less,並指定要監看的檔案:

# 使用 less 監看 output.log
less output.log

接著在 less 的模式下按下 Shift + f,這樣就會切換到跟隨模式。

<code>less</code> 跟隨模式

less 跟隨模式

less 的跟隨模式之下,只要檔案內容有增加,就會自動顯示出來。在跟隨模式下無法自由上下捲動內容,若要離開跟隨模式,可以按下 Ctrl + c

除了 tailless 這兩個 Linux 與 Mac 內建的工具之外,亦可參考 inotifywait 這個檔案監看工具,它通常用於較複雜的狀況,搭配自行撰寫的 shell 指令稿來使用。

參考資料:StackExchange