網站搜尋

Ubuntu 啟動時自動建立、刪除、寫入文件


本教學課程介紹如何在 Ubuntu 和其他 Linux 中使用 systemd 在啟動時自動建立、刪除檔案/資料夾和/或將參數寫入設定檔。

如果某些配置在每次啟動時不持久並重設為預設值,或者您希望在每次啟動時或每個時間段後清理某些內容,這可能會很有用。

進階使用者可以手動建立腳本,並透過 crontab 規劃任務或自訂 systemd 服務來執行它。但是,在這裡我將向您展示如何使用 tmpfile.d 來實現這一點,tmpfile.d 是一個用於建立、刪除和清理易失性檔案和臨時檔案的內建設定。

在 Ubuntu、Debian、Fedora 和許多其他 Linux 發行版中,有一些 systemd 服務旨在自動建立易失性檔案和目錄,以及每日清理臨時目錄。它們包括:

  • systemd-tmpfiles-setup.service
  • systemd-tmpfiles-clean.timer
  • systemd-tmpfiles-setup-dev.service
  • systemd-tmpfiles-setup-dev-early.service

要檢查您的系統是否有它們,請在終端機視窗中執行 systemctl status systemd-tmpfiles*:

  • /etc/tmpfiles.d/(建議)
  • /運行/tmpfiles.d/
  • /usr/lib/tmpfiles.d/
  • ~/.config/user-tmpfiles.d/ (在我的 Ubuntu 24.04 中不起作用)
  • ~/.local/share/user-tmpfiles.d/ (在我的 Ubuntu 24.04 中不起作用)

啟動時自動建立、刪除檔案或資料夾

要建立自訂 tmpfiles.d 設定文件,只需開啟終端機 (Ctrl+Alt+T) 並執行命令:

sudo nano /etc/tmpfiles.d/test.conf

在命令中,將 test 替換為您想要的任何名稱。它在命令列 Nano 文字編輯器中建立並開啟檔案。

當文件開啟時,新增以下行進行對應的操作。編輯完成後,可以按Ctrl+S儲存文件,然後按Ctrl+X退出。

建立資料夾:

要在每次啟動時自動建立資料夾,例如在 /etc 下建立“myfolder”,請新增以下行:

#Type  Path           Mode   User Group  Age  Argument
d     /etc/myfolder    -    -     -     -    -

這裡第一行以「#」開頭,是說明行不起作用。在第二行中,它告訴:

  • d - 告訴在資料夾不存在時執行建立操作。
  • /etc/myfolder - 指定要建立的目錄的路徑。
  • 「-」跳過以使用模式、使用者、群組、年齡和參數的預設值。

預設情況下,它使用0775作為資料夾權限(讀取(4),寫入(2),執行(1)所有者和群組(4+2+1=7),閱讀,執行( 4+1=5) 對於其他人),root 對於使用者和群組。

對於選擇,您可以指定權限、所有權。 並且,設定「年齡」將使其在每個給定時間段後清理該資料夾中的所有內容。

#Type  Path                            Mode   User Group  Age  Argument
d     /home/ji/Documents/myfolder      0775    ji    ji     -    -
d     /home/ji/Documents/myfolder/test 0775    ji    ji    10d   -

計時器觸發器每 24 小時執行一次操作(啟動後 15 分鐘後的第一次操作除外),因此最好以天為單位設定年齡。

如果該資料夾已存在,並且您希望在啟動時刪除其所有內容(然後在給定時間內清理),則使用D 取代--remove 參數。

#Type  Path                            Mode   User Group  Age  Argument
D     /home/ji/Documents/myfolder/test 0775    ji    ji    10d   --remove

建立文件:

若要在啟動時自動建立文件,請使用 f 或 f+。例如:

#Type  Path                     Mode   User Group  Age  Argument
d     /etc/myfolder              -     -      -     -     -
f     /etc/myfolder/xxx.conf     -     -      -      -    some text here\n

將上面的行加入/etc/tmpfiles.d 目錄下的.conf 檔案中,將會先建立“/etc/myfolder”目錄,如果不存在,則在該目錄下建立“xxx.conf”文件,如果該文件不存在,則在此處寫入“some text here”。

這裡, \n 是換行符,用來建立新行。當然,您可以使用“-”(不含引號)跳過參數,因此如果檔案不存在,它只會嘗試建立檔案。

如果文件已經存在,那麼「f」將不執行任何操作。內容(如果有)您透過參數設定的一個。

#Type  Path                     Mode   User Group  Age  Argument
d     /etc/myfolder              -     -      -     -     -
f+     /etc/myfolder/xxx.conf     -     -      -      -    some text here\n

將文字寫入文件:

若要自動將一些文字寫入文件,請使用 w。例如:

#Type    Path                   Mode User Group  Age   Argument
w      /home/ji/Documents/333    -    -     -     -   auto write line 1

如果該文件不存在,那麼它就什麼都不做!並且,w不會刪除原始檔案內容(如果有),而是嘗試從頭開始覆蓋。

這意味著,如果原始文件內容比您要寫入的新內容長,那麼它會弄亂文件內容(請參見下面的螢幕截圖)。在這種情況下,請使用 f+ 而不是 w,這將覆蓋所有先前的內容。

若要保留原始文件內容並在文件末尾寫入,請改用 w+。

#Type    Path                   Mode User Group  Age   Argument
w+      /home/ji/Documents/333    -    -     -     -    #This is a new line\n
w+      /home/ji/Documents/3*    -    -     -     -    #write one more line\n
w+      /home/ji/Documents/33*    -    -     -     -    enable=1

注意:如果結尾沒有換行符,w+將不會開始新行。因此,您可以在參數開頭新增 \n 以開始新行,也可以將其新增在下一個參數的末尾。

此外,您可以透過在檔案名稱中使用星號來寫入多個檔案。例如,3* 符合名稱以 3 開頭的所有檔案。

注意:如果您同時使用“w”和“w+”寫入同一個文件,則只有第一個起作用!如果您同時使用「f」和「f+」建立同一個文件,也只有第一個運作。

刪除檔案或資料夾

若要在啟動時自動刪除文件,請使用r。

例如,刪除使用者 Documents 資料夾中的所有 .txt 檔案、123 檔案、空資料夾:

#Type    Path                     Mode  User  Group   Age  Argument  
r      /home/ji/Documents/*.txt   -     -     -       -      -
r      /home/ji/Documents/123     -      -     -      -       -
r      /home/ji/an-empty-folder   -      -     -      -       -

若要刪除資料夾以及所有包含的檔案和子資料夾,請使用 R 取代:

#Type    Path                     Mode  User  Group   Age  Argument  
R      /home/ji/Documents/myfolder   -     -     -       -      -

另外

tmpfiles.d 設定可以在啟動時執行更多操作,例如建立符號連結、複製檔案或目錄等等!有關更多詳細信息,請參閱 freedesktop.org 手冊頁!

相關文章