Вопрос или проблема
Я часто использую директорию /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
, который создает временные директории для каждого пользователя:
-
Установка пакета:
sudo apt install libpam-tmpdir
-
Настройка PAM:
Добавьте строку в файл/etc/pam.d/common-session
:session optional pam_tmpdir.so
-
После этого при следующем входе в систему будет создана директория в
/tmp
, связанная с вашим UID, включая настройки переменных окруженияTMP
иTMPDIR
.
2. Использование cron job
Вы можете задать задачу cron, которая будет создавать вашу директорию при каждой перезагрузке системы. Выполните следующие шаги:
-
Откройте crontab:
crontab -e
-
Добавьте строку:
@reboot mkdir -p "/tmp/$USER"
Таким образом, при перезагрузке системы директория будет создана автоматически.
3. Использование systemd-tmpfiles
Если ваша система использует systemd
, вы можете управлять временными файлами с помощью systemd-tmpfiles
.
-
Создайте новый конфигурационный файл для управления директориями:
sudo nano /etc/tmpfiles.d/my_tmp.conf
-
Добавьте строку:
d /tmp/your_username 0750 your_user your_group - -
Здесь
your_username
,your_user
иyour_group
нужно заменить на соответствующие значения вашего пользователя. -
Чтобы изменения вступили в силу, перезагрузите систему или запускайте команду:
sudo systemd-tmpfiles --create
Это создаст директорию и установит права доступа.
4. Установка освобождения от старых файлов
Если вы хотите удалить старые файлы в вашем временном каталоге, но сохранить сам каталог, добавьте периодическую задачу в crontab. Например:
-
Откройте crontab:
crontab -e
-
Добавьте строку для удаления файлов старше 30 дней:
0 0 * * * find /tmp/$USER -type f -mtime +30 -exec rm -f {} \;
Эта команда будет запускаться ежедневно и очищать все файлы в вашей директории, которые старше 30 дней.
Заключение
Таким образом, чтобы предотвратить удаление вашей директории в /tmp
, используйте сочетание вышеописанных методов. PAM и cron jobs обеспечат ее автоматическое создание, в то время как systemd-tmpfiles
позволит установить необходимые настройки для управления. Однако учтите, что для более устойчивого хранения временных файлов лучше использовать директорию в вашем домашнем каталоге, так как она менее подвержена очистке.