Поиск по сайту:

Автоматическое создание, удаление и запись файлов при запуске в 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!

Статьи по данной тематике