本篇介紹如何使用 Linux 或 Mac 的 tail
與 less
等指令,及時查看檔案中持續增加的內容。
許多科學計算與模擬相關的程式在執行時,都會有一個或多個輸出檔案,例如資料輸出檔案、記錄檔(log)等,使用者通常都會根據這些輸出檔案,來判斷程式是否有如自己的預期正常執行。
假設我們的程式是 my_program
,而我們在執行時,將出的訊息都導向至 output.log
這個檔案中儲存起來:
# 執行程式 ./my_program > output.log
在程式執行的期間,會將輸出的訊息持續寫入 output.log
,而我們就可以從這個檔案中檢查程式是否有錯誤。
若要查看最新的檔案內容,對於剛入門的 Linux 初學者來說,最簡單的方式就是手動重複執行 cat
指令,輸出整個檔案內容:
# 手動重複查看輸出檔案的最新內容
cat output.log
若要即時監看類似這種持續增加的檔案內容,其實有更好的方式,以下是改用 tail
與 less
的教學。
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
既有的內容,並且停在那裏等待新增加的內容。
這時候回到原來的終端機,再寫入一行新的訊息至 output.log
中:
# 輸出訊息至 output.log echo World >> output.log
這時候我們在 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,這樣就會切換到跟隨模式。
在 less
的跟隨模式之下,只要檔案內容有增加,就會自動顯示出來。在跟隨模式下無法自由上下捲動內容,若要離開跟隨模式,可以按下 Ctrl + c。
除了 tail
與 less
這兩個 Linux 與 Mac 內建的工具之外,亦可參考 inotifywait
這個檔案監看工具,它通常用於較複雜的狀況,搭配自行撰寫的 shell 指令稿來使用。
參考資料:StackExchange