Ubuntu の起動時にファイルを自動的に作成、削除、書き込みする
このチュートリアルでは、systemd を使用して Ubuntu やその他の Linux でファイルやフォルダーを自動的に作成、削除したり、 起動時に設定ファイルにパラメーターを書き込んだりする方法を説明します。
これは、一部の構成が永続的ではなく、起動ごとにデフォルトにリセットされる場合、または起動ごとまたは一定期間後に何かをクリーンアップしたい場合に便利です。
上級ユーザーはスクリプトを手動で作成し、crontab スケジュール タスクまたはカスタム systemd サービスを介して実行できます。ただし、ここでは、揮発性ファイルと一時ファイルの作成、削除、およびクリーニングのための組み込み構成である 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/ (推奨)
- /run/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 - - - - -
ここで、「#」で始まる最初の行は、機能しないことを説明する行です。 2 行目では、次のように指示しています。
- 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 分後の最初のアクションを除く)、経過日数を日数で設定することをお勧めします。
フォルダーが既に存在し、起動時にその内容をすべて削除する (その後、指定された期間でクリーンアップする) 場合は、代わりに --remove
引数を指定して D を使用します。
#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
」ファイルを作成し、ファイルが存在しない場合は「ここにテキスト」を書き込みます。
ここで、\n は改行するための改行です。もちろん、「-」(引用符なし)を使用して引数をスキップできるため、ファイルが存在しない場合はファイルの作成が試行されます。
ファイルがすでに存在する場合、「f」は何もしません。その場合は、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 は元のファイルの内容 (存在する場合) を削除しませんが、最初から上書きすることを試みるだけです。
つまり、元のファイル コンテンツが書き込み先の新しいコンテンツよりも長い場合、ファイル コンテンツが台無しになります(下のスクリーンショットを参照)。この場合、w の代わりに f+ を使用すると、以前のコンテンツがすべて上書きされます。
元のファイルの内容を保持し、ファイルの最後に書き込むには、代わりに 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 で始まるすべてのファイルに一致します。 *.txt
は、ディレクトリ内のすべての .txt ファイルに一致します。
注: 同じファイルの書き込みに「w」と「w+」の両方を使用した場合、最初のもののみが機能します。同じファイルを作成するのに「f」と「f+」の両方を使用した場合も、 最初のもののみが機能します。
ファイルまたはフォルダーを削除する
起動時にファイルを自動的に削除するには、r を使用します。
たとえば、ユーザーのドキュメント フォルダー内のすべての .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 のマニュアル ページを参照してください。