什麼時候會進入大型檔案模式
門檻只有一個數字:64 MiB。
開檔時檔案大小達到 64 MiB,爾雅就不會把它整份讀進記憶體,而是換成一種唯讀的閱讀模式。訊息列會說「已以大型檔案唯讀模式開啟 access.log(512 MB)」,狀態列的模式那一格變成 大型檔案唯讀。
爾雅 Erya │ [access.log]
10.0.1.24 - - [25/Aug/2026:09:14:02 +0800] "GET /api/v1/orders HTTP/1.1" 200
10.0.1.31 - - [25/Aug/2026:09:14:02 +0800] "POST /api/v1/login HTTP/1.1" 302
10.0.2.10 - - [25/Aug/2026:09:14:03 +0800] "GET /static/app.js HTTP/1.1" 304
access.log │ 1284391:1 │ 大型檔案唯讀 │ UTF-8 │ LF
已以大型檔案唯讀模式開啟 access.log(512 MB)
三種大檔的走法不一樣
- 大的 UTF-8 文字檔 → 大型檔案唯讀模式(本章)。
- 大的二進位檔 → 串流的十六進位檢視,一樣唯讀(見 3.3.8)。
- 大的非 UTF-8 文字檔(例如 200 MB 的 Big5 匯出檔)→ 爾雅無法串流解碼,會當成二進位檔用十六進位開啟。要編輯的話得先在外面轉成 UTF-8。
這個模式下能做什麼
看得到、找得到、複製得走;但改不了。
可以做
- 捲動、翻頁、Ctrl+Home/Ctrl+End
- Ctrl+G 跳到指定行
- Ctrl+W 搜尋、F3 找下一個
- 選取與 Ctrl+C 複製
- Ctrl+L 自動換行
- Ctrl+P 十六進位檢視
- 開新頁籤、切換頁籤、離開
做不到(會顯示「大型檔案使用唯讀模式;無法修改內容」)
- 打字、刪除、貼上、剪下、刪行
- 儲存與另存新檔
- 取代(Ctrl+R/F5/F6)
- 復原與重做
- 編碼與換行轉換(F7/F8)
- 格式化、段落重排、矩形填滿與搬動
- 插入常用語、執行巨集
兩件事在這個模式下不會發生
- 沒有語法高亮。整份都是純文字顏色——高亮需要解析整份內容,這裡刻意關掉。
- 不能雙欄比對。按 F4 選到大型檔案會被擋下來:「大型檔案唯讀模式暫不支援雙欄比對,以避免載入完整內容造成記憶體耗盡」(見 3.4.9)。
記憶體是怎麼省下來的
只記「路標」,需要哪一行才去磁碟讀哪一行。
跟著 log 一直長
爾雅每 250 毫秒看一次檔案,新內容會自己出現。
這是大型檔案模式最實用的地方:拿它當 tail -f 用,而且可以搜尋、可以往回捲。
- 純追加時只補新的。爾雅只重建「最後一個還沒寫完的行」加上新增內容,不會重新掃描整個檔案,所以檔案再大也不會卡。
- 游標在檔尾就自動跟隨。停在最後一行的行尾時,新內容進來會自動把畫面推到最新。這就是 follow 模式。
- 游標移開就停住。只要你往回捲去看別的地方,畫面就固定在你正在讀的位置,不會被新進來的內容拉走。想繼續跟隨就按 Ctrl+End 回到檔尾。
- 更新時訊息列會說「偵測到檔案更新;已重新整理內容」。
看 log 的標準流程
erya /var/log/nginx/access.log → Ctrl+End 跳到檔尾開始跟隨 → 想查東西就 Ctrl+W 搜尋、F3 逐一往下 → 看完按 Ctrl+End 回到跟隨狀態。全程不用離開編輯器。
截斷與 rotation
檔案不是「變長」而是「換了一份」的時候。
| 磁碟上發生的事 | 爾雅的反應 | 常見情境 |
|---|---|---|
| 結尾追加內容 | 只補新的部分,很快 | 服務持續寫 log |
| 檔案被清空(截斷) | 重新開啟並重建索引 | > access.log、logrotate 的 copytruncate |
| 檔案被原地改寫 | 重新開啟並重建索引 | 整份重新產生的報表 |
| 檔案被換掉(rotation) | 重新開啟並重建索引 | logrotate 換新檔 |
rotation 之後你看的是新檔案
爾雅追的是路徑,所以 access.log 被換掉之後,你看到的會是新的那一份(通常是空的或很短),舊內容跑到 access.log.1 去了。要看舊的就另外開一個頁籤。
一般檔案的外部變更
小檔案也在盯,只是反應方式不同。
同一個 250 毫秒的檢查,對一般大小的檔案也在做——差別在於一般檔案可以編輯,所以要先判斷你有沒有改過(完整說明見 2.1.7):
| 檔案類型 | 你沒改過 | 你改過 |
|---|---|---|
| 一般文字檔 | 自動重新載入,復原紀錄清空 | 只提醒,等你按 Ctrl+S 時才用紅色確認列問(O/R/N) |
| 大型檔案 | 自動重新整理 | 不可能發生——這個模式本來就不能改 |
三種外部變更的處理
整理成一張表,遇到時照著看就好。
| 訊息列 | 顏色 | 你該做什麼 |
|---|---|---|
| 偵測到外部更新;已安全重新載入檔案 | 黃 | 不用做什麼。內容已經是最新的了,但復原紀錄沒了。 |
| 偵測到檔案更新;已重新整理內容 | 黃 | 大型檔案模式的自動更新,不用做什麼。 |
| 檔案已被外部程式修改;儲存前需要確認 | 黃 | 提醒而已,還沒擋你。存檔時會跳確認。 |
| 外部檔案已有更新:[O]覆寫、[R]重新載入、[N/Esc]取消 | 紅 | 要做決定了。不確定就按 N,再 F12 另存一份(2.1.7)。 |
| 重新整理外部檔案失敗:… | 黃 | 檔案被刪掉、權限變了或磁碟出問題。先確認檔案還在不在。 |
常見錯誤
大型檔案模式的六個常見疑問。
| 現象 | 原因與處理 |
|---|---|
| 打字沒反應,說唯讀 | 檔案超過 64 MiB,這個模式不能編輯(3.2.2)。要改請用其他工具切小,或先取出片段。 |
| 沒有語法高亮 | 大型檔案模式刻意停用(3.2.2)。 |
| 畫面一直被拉到最後面 | 游標停在檔尾,正在跟隨。往回捲就會停住(3.2.4)。 |
| 畫面不會自己更新 | 游標已經不在檔尾了。按 Ctrl+End 回去(3.2.4)。 |
| log 突然變空的 | 被截斷或 rotation 了,你看的是新的那一份(3.2.5)。 |
| 大的中文檔開起來變十六進位 | 非 UTF-8 的大檔無法串流解碼,會走二進位路線(3.2.1)。先在外面轉成 UTF-8。 |