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

10

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

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

Есть какой-либо способ сделать это? Может с разрешениями или со специальной конфигурацией?

Linux4win
источник
1
В качестве обходного пути вы можете поместить некоторый код в файлы входа вашей оболочки, чтобы при необходимости «test & mkdir».
Джефф Шаллер
3
/tmpскорее всего tmpfsфайловая система. Эти файлы на самом деле не удалены; они просто хранятся в оперативной памяти и теряются при перезагрузке. Вот почему вы получаете ответы, которые сводятся к тому, чтобы «воссоздать его при загрузке или при входе в систему»
MSalters

Ответы:

4

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

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

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

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

mkdir -p "/tmp/$USER"

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

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

TMPDIR=/tmp/$USER
export TMPDIR

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

Кусалананда
источник
Будет ли это: а) создавать каталоги для всех пользователей и б) запускать при «холодном» запуске?
Linux4win
1
@ Linux4win Этот ответ направлен на удовлетворение потребностей одного пользователя, потому что именно так вы сформулировали вопрос. Неважно, как загружается компьютер (горячий, холодный или теплый), но он не сработает при выходе из спящего режима (потому что это не загрузка).
Кусалананда
По какой-то причине добавление @reboot mkdir -p "/tmp/$USER"в конец crontab ничего не делает, а при запуске mkdir -p "/tmp/$USER"фактически создает каталог. Второй, кстати, у меня не работает, потому что мне нужно получить доступ к своим /tmpчерез другие программы, и каждый раз
запускать оболочку немного
@ Linux4win Задание @rebootcron не создает каталог? Получаете ли вы электронное письмо, отправленное в вашу учетную запись с сообщениями об ошибках от демона cron?
Кусалананда
ну нет ... Может потому что я не настроил mail? Или это не обязательно?
Linux4win
14

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

session optional pam_tmpdir.so

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

Стивен Китт
источник
7
Не могли бы вы объяснить, что такое соответствующие службы PAM и как можно добавить к ним линию? Какие файлы должны быть отредактированы?
Тердон
2

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

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

d     /tmp/your_username   0750 your_user your_group  - -
viraptor
источник
1

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

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

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

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

Blrfl
источник
mkdir a a/b; touch a/b/c, Теперь подождите, пока ваши 30 дней не истекли. Когда вы удалите cего, он обновится b, что будет означать, что ему придется ждать еще 30 дней. Аналогично с тем, aкогда вы удаляете b. Во-вторых, если вы создаете файлы, bно не трогаете их в aтечение 30 дней, aкаталог попадет rm -rfпод ваши последние файлы b.
Роайма
find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullу меня работает
роайма