Автоматическое создание, удаление и запись файлов при запуске в Ubuntu
В этом руководстве показано, как автоматически создавать, удалять файлы/папки и/или записывать параметры в файлы конфигурации при запуске в Ubuntu и других Linux с помощью systemd.
Это может быть полезно, если какая-то конфигурация не сохраняется и сбрасывается до значений по умолчанию при каждой загрузке, или если вы хотите что-то очистить либо при каждой загрузке, либо после каждого периода времени.
Опытные пользователи могут вручную создать сценарий и запустить его с помощью задачи расписания 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, чтобы выйти.
Создать папку:
Чтобы автоматически создавать папку при каждой загрузке, например создать «myfolder
» в разделе /etc
, добавьте строки ниже:
#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
Добавьте приведенные выше строки в файл .conf
в каталоге /etc/tmpfiles.d
. Сначала будет создан каталог «/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 НЕ удаляет исходное содержимое файла (если оно есть), а просто попробуйте перезаписать его с самого начала.
Это означает, что если исходное содержимое файла длиннее нового содержимого, которое вы хотите записать, это приведет к испорчению содержимого файла (см. снимок экрана ниже). В этом случае используйте 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. *.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!