tail 指令不顯示最後一行

tail 指令不顯示最後一行

我使用以下命令在每次文件更改時讀取最後一行。

tail -f -n1 Entrie.txt

碰巧寫的第一行顯示它沒有問題,但後來當我寫第二行時它會拋出以下錯誤

tail: Entrie.txt: file truncated

顯示該錯誤後,它顯示了文件中寫入的所有值。但不僅如此,在寫了很多行之後,錯誤就不再出現並被修復,而且我需要它始終運作良好。

我在 Linux 中運行這個命令。

我正在編輯器中向文件添加行並保存。

答案1

您可以透過寫入新版本或將資料附加到目前版本來修改文件。

外殼中的範例:

  • date > sample_file.txt- 使用新文字重新建立檔案(date命令的輸出)
  • date >> sample_file.txt- 將文字附加到目前文件

第一種情況 - 您的文件已被截斷(內容已刪除並重新創建,可以透過在文字編輯器中簡單的「寫入」來完成)並tail對此發出警告。第二種情況 -tail按您的預期工作。

答案2

當文字編輯器儲存檔案時,經常發生的情況是將其儲存到暫時的文件,清空(截斷)原始文件,並將臨時文件中的內容複製到原始文件中。這樣做是為了不改變原始檔案的權限、所有權和其他元資料。

這意味著從 的角度來看tail,檔案被截斷(清空),因此它開始顯示檔案的最後一行因為編輯正在重寫它(這就是它顯示整個文件的原因)。

若要將行新增至文件中,請讓tail命令始終僅顯示文件的最後一行而不顯示其他內容,您必須確保附加行到文件。由於文字編輯器通常改寫文件,您可能必須使用其他方式來執行此操作。

將資料附加到文件的一個非常基本的方法是使用cat

cat >>Entrie.txt

這將cat追加到檔案中Entrie.txt。它會等待您的輸入,您可以直接從終端輸入檔案。按 後,目前行將立即寫入文件末尾Enter。若要停止輸入數據,請Ctrl+D按空白行。

顯然,一旦您按下,這顯然不會給您任何機會來更正您在前幾行中所寫的內容Enter

另一種選擇是使用additions.txt編輯器在單獨的檔案(例如 )中編輯新行。儲存該文件然後執行

cat additions.txt >>Entrie.txt

這會將 的完整內容新增additions.txt到文件末尾Entrie.txt

相關內容