Friday, June 14, 2024
HomeHow toAutomatically Create, Delete, Write to Files on Startup in Ubuntu

Automatically Create, Delete, Write to Files on Startup in Ubuntu

This tutorial shows how to automatically create, delete files/folders, and/or write parameters into config files at startup in Ubuntu and other Linux using systemd.

This can be useful if some configuration do not persistent and reset to default on every boot, or you want to clean up something either on every boot or after every time period.

Advanced users can manually create a script, and run it via either crontab schedule task or custom systemd service. But, here I’m going to show you how to do the trick using tmpfile.d, a built-in configuration for creation, deletion and cleaning of volatile and temporary files.

In Ubuntu, Debian, Fedora, and many other Linux Distros, there are a few systemd services designed to automatically create volatile files and directories, and daily cleanup of temporary directories. They include:

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

To check if your system have them, run systemctl status systemd-tmpfiles* in a terminal window:

With them, user can create custom .conf files under one of following directories for custom creation, cleanup and file write operations on startup.

  • /etc/tmpfiles.d/ (recommend)
  • /run/tmpfiles.d/
  • /usr/lib/tmpfiles.d/
  • ~/.config/user-tmpfiles.d/ (not work in my case in Ubuntu 24.04)
  • ~/.local/share/user-tmpfiles.d/ (not work in my case in Ubuntu 24.04)

Create, Remove files or folders automatically on startup

To create a custom tmpfiles.d config file, just open terminal (Ctrl+Alt+T) and run command:

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

In the command, replace test with whatever name as you want. It creates and opens the file in command line nano text editor.

When the file opens, add following lines for corresponding operations. After editing, you may press Ctrl+S to save file, then Ctrl+X to exit.

Create Folder:

To automatically create a folder on every boot, for example create “myfolder” under /etc, add lines below:

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

Here the first line, starts with “#”, is description line does not function. In the second line, it tells to:

  • d – tells to do create operation if the folder does NOT exist.
  • /etc/myfolder – specify the path of directory to create.
  • ” skip to use default for Mode, User, Group, Age, and Argument.

By default, it uses 0775 for the folder permission ( read (4), write (2), execute (1) for owner & group (4+2+1=7), read, execute (4+1=5) for others), root for user and group.

For choice, you may specify the permission, ownership. And, set an “age” will make it cleanup all content in that folder after every given time period.

#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   -

The timer trigger takes action every 24 hours (except the first action which is 15 minutes later after boot up), so it’s better to set age in days.

If the folder already exists, and you want to remove all its content on startup (then cleanup on given time period), then use D instead with --remove argument.

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

Create File:

To automatically create a file at startup, use f or f+. For example:

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

Add the lines above into a .conf file under /etc/tmpfiles.d directory, will first create “/etc/myfolder” directory if not exist, then create “xxx.conf” file under that directory, and write “some text here” if the file does NOT exist.

Here, \n is a line break to make new line. Of course, you can skip argument with ‘-‘ (without quotes), so it just try to create the file if not exist.

If the file already exists, then ‘f’ will do nothing. In the case, you may use f+, which will replace original file content (if any) with the new one you set by argument.

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

Write text to File:

To automatically write some text into a file, use w. For example:

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

If the file does NOT exist, then it does nothing! And, w does NOT remove original file content (if any), but just try to overwrite from very beginning.

Meaning, if the original file content is longer than the new content you want to write to, then it will mess up the file content (See screenshot below). In the case, use f+ instead of w, which will overwrite all previous content.

To keep original file content, and write at the end of the file, use w+ instead.

#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

NOTE: w+ will not start a new line if there’s no line break at the end. So, you can add \n at beginning of the argument to start new line, also add it at the end for next.

In addition, you may write multiple files by using asterisk in filename. For example, 3* matches all files with their name start with 3. *.txt matches all .txt files in the directory.

NOTE: If you use both “w” and “w+” for writing same file, then only the first one will function! If you use both “f” and “f+” for creating same file, also only the first one will function.

Delete Files or Folders

To automatically delete files on startup, use r.

For example, delete all .txt files, the 123 file, empty folder, in user Documents folder:

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

To delete folder, and all contained files and sub-folders, use R instead:

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

In additiona

The tmpfiles.d configuration can do even more operations on startup, such as create a symlink, copy files or directories, and more! See the man page for more details!



Please enter your comment!
Please enter your name here

Most Popular