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 手冊頁!




