Предотвратить удаление директории в /tmp

Вопрос или проблема

Я часто использую директорию /tmp на своем Linux-машине для хранения временных файлов (например, PDF-файлы с сайта, который сначала просит меня их скачать и т. д.) и часто создаю директорию с моим именем пользователя. Но при каждом перезапуске она (включая все файлы) удаляется. Теперь я знаю, что могу поместить ее в /var/tmp, но хочу, чтобы все ее содержимое удалялось, а сама директория сохранялась.
Итак:

tmp
 |- me # это должно остаться
 |  |- foo1 # это должно быть удалено...
 |  |- bar1 # ...и это тоже
 |- другие вещи...

Есть ли способ сделать это? Может быть, с помощью прав доступа или специальной конфигурации?

Я использую pam-tmpdir для этого: он создает временную директорию, частную для пользователя, при входе в систему. Чтобы настроить это, добавьте

session optional pam_tmpdir.so

в подходящие службы PAM; на системе, основанной на Debian, установка пакета libpam-tmpdir предложит сделать это за вас, или вы можете добавить строку в /etc/pam.d/common-session. В следующий раз, когда вы войдете в систему, вы найдете директорию в /tmp/user с вашим идентификатором пользователя, и TMP и TMPDIR будут установлены соответственно.

Одним из решений было бы использовать задание cron с @reboot:

@reboot mkdir -p "/tmp/$USER"

Добавление этого в ваш crontab с помощью crontab -e заставит его выполнять это каждый раз, когда машина загружается.

Или используйте

mkdir -p "/tmp/$USER"

в вашем файле запуска оболочки.

В любом случае, вы также можете использовать

TMPDIR=/tmp/$USER
export TMPDIR

в вашем файле запуска оболочки, если хотите использовать эту директорию как стандартную временную директорию.

Если вы работаете на системе с systemd и она использует systemd-tmpfiles для управления очисткой, то вам следует настроить директорию с помощью этой системы.

Вот полная документация. Вы, вероятно, сможете достичь желаемого, создав /etc/tmpfiles.d/something.conf со следующим содержимым:

d     /tmp/your_username   0750 your_user your_group  - -

Как было указано в комментариях, /tmp предназначена для файлов, которые являются временными и не будут отсутствовать, если их удалить. Если вы находитесь в процессе работы и машина перезагружается, все, что вы написали там, исчезнет, и вам придется начать заново, что означает, что эти файлы, возможно, не были такими уж временными.

Я поддерживал временную директорию в своем домашнем каталоге в течение многих лет, начиная с тех пор, когда гигабайт был большим объемом, и обнаружил, что это требует периодической очистки, чтобы избавиться от файлов, которые стали старыми и ненужными. Большую часть времени то, что у меня оставалось после этого процесса, было меньше пары недель, так что теперь я очищаю ее с помощью задания cron, которое выполняется один раз в день:

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

Все, что я загружаю или создаю как полувременные, попадает туда, а система очищает все, что я оставляю. Все, что нуждается в постоянном месте, получает его задолго до того, как задание cron избавится от него.

Ответ или решение

Чтобы предотвратить удаление определенной директории в /tmp, в частности, директории, которая принадлежит вашему пользователю, необходимо рассмотреть несколько вариантов и подходов. Важно помнить, что /tmp предназначен для временных файлов, которые могут быть удалены системой, особенно при перезагрузке. Однако вы можете использовать несколько методов, чтобы сохранить нужную директорию.

1. Использование PAM и pam_tmpdir

Если вы хотите, чтобы ваша директория /tmp/$USER оставалась и создавалась автоматически при входе в систему, вы можете использовать модуль PAM (pam_tmpdir). Установите пакет libpam-tmpdir, который создает временные директории для каждого пользователя:

  1. Установка пакета:

    sudo apt install libpam-tmpdir
  2. Настройка PAM:
    Добавьте строку в файл /etc/pam.d/common-session:

    session optional pam_tmpdir.so
  3. После этого при следующем входе в систему будет создана директория в /tmp, связанная с вашим UID, включая настройки переменных окружения TMP и TMPDIR.

2. Использование cron job

Вы можете задать задачу cron, которая будет создавать вашу директорию при каждой перезагрузке системы. Выполните следующие шаги:

  1. Откройте crontab:

    crontab -e
  2. Добавьте строку:

    @reboot mkdir -p "/tmp/$USER"

Таким образом, при перезагрузке системы директория будет создана автоматически.

3. Использование systemd-tmpfiles

Если ваша система использует systemd, вы можете управлять временными файлами с помощью systemd-tmpfiles.

  1. Создайте новый конфигурационный файл для управления директориями:

    sudo nano /etc/tmpfiles.d/my_tmp.conf
  2. Добавьте строку:

    d     /tmp/your_username   0750 your_user your_group  - -

    Здесь your_username, your_user и your_group нужно заменить на соответствующие значения вашего пользователя.

  3. Чтобы изменения вступили в силу, перезагрузите систему или запускайте команду:

    sudo systemd-tmpfiles --create

Это создаст директорию и установит права доступа.

4. Установка освобождения от старых файлов

Если вы хотите удалить старые файлы в вашем временном каталоге, но сохранить сам каталог, добавьте периодическую задачу в crontab. Например:

  1. Откройте crontab:

    crontab -e
  2. Добавьте строку для удаления файлов старше 30 дней:

    0 0 * * * find /tmp/$USER -type f -mtime +30 -exec rm -f {} \;

Эта команда будет запускаться ежедневно и очищать все файлы в вашей директории, которые старше 30 дней.

Заключение

Таким образом, чтобы предотвратить удаление вашей директории в /tmp, используйте сочетание вышеописанных методов. PAM и cron jobs обеспечат ее автоматическое создание, в то время как systemd-tmpfiles позволит установить необходимые настройки для управления. Однако учтите, что для более устойчивого хранения временных файлов лучше использовать директорию в вашем домашнем каталоге, так как она менее подвержена очистке.

Оцените материал
Добавить комментарий

Капча загружается...