Запобігайте видаленню каталогу в / tmp


10

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

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

Чи можна це зробити? Може, з дозволами або зі спеціальною конфігурацією?


1
Як вирішення, ви можете ввести якийсь код у файли реєстрації вашої оболонки, щоб "тестувати & 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

у файлі запуску вашої оболонки, якщо ви хочете використовувати цей каталог як тимчасовий каталог за замовчуванням.


Чи буде це a) створювати каталоги для всіх користувачів і b) також запускати "холодний" запуск?
Linux4win

1
@ Linux4win Ця відповідь відповідає потребам одного користувача, оскільки саме так ви сформулювали питання. Не має значення, як завантажується машина (гаряча, холодна чи тепла), але вона не спрацьовує при відновленні зі сну (тому що це не завантаження).
Кусалаланда

Чомусь додавання @reboot mkdir -p "/tmp/$USER"до кінця crontab нічого не робить, під час роботи mkdir -p "/tmp/$USER"фактично створюється каталог. Другий, до речі, не працює для мене, тому що мені потрібно отримати доступ /tmpдо інших програм, і
щойно розпалювати

@ Linux4win Завдання @rebootCron не створює каталог? Чи отримуєте ви будь-який електронний лист, надісланий на ваш рахунок з будь-якими повідомленнями про помилки від демона cron?
Kusalananda

ну ні ... Може тому, що я не налаштував 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, і як лінія може бути додана до них? Які файли слід редагувати?
terdon

2

Якщо у вас немає системи з systemd і вона використовує systemd-tmpfiles для управління очищенням, тоді вам слід налаштувати каталог за допомогою цієї системи.

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

d     /tmp/your_username   0750 your_user your_group  - -

1

Як зазначено в коментарях, /tmpце файли, які є тимчасовими, і їх не буде пропущено, якщо їх видалити. Якщо ви опинилися в середині чогось і машина перезавантажиться, все, що ви там написали, зникне, і вам доведеться починати заново, а це означає, що ці файли, можливо, не були такими тимчасовими.

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

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

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


mkdir a a/b; touch a/b/c. Тепер зачекайте, поки ваш 30 днів закінчиться Після видалення cоновлення оновиться b, а це означає, що йому доведеться почекати ще 30 днів. Так само і aпри видаленні b. По-друге, якщо ви створюєте файли, bале не торкаєтесь їх aпротягом 30 днів, у aкаталог потраплять rm -rfі видаляються ваші останні файли під b.
roaima

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullпрацює для мене
roaima
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.