Як довго тривають тимчасові файли, створені за допомогою mktemp?


20

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

Відповіді:


17

Так? Від man mktemp:

DESCRIPTION
   Create  a  temporary  file  or directory, safely, and
   print its name.  TEMPLATE must  contain  at  least  3
   consecutive  `X's  in last component.  If TEMPLATE is
   not specified, use tmp.XXXXXXXXXX,  and  --tmpdir  is
   implied.   Files  are  created  u+rw, and directories
   u+rwx, minus umask restrictions.

mktempпросто додає випадковий рядок для створення унікального імені файлу. Ніхто не збирається його видаляти автоматично.


Оскільки, здається, є трохи аргументу, давайте детальніше розберемося. mktempСторінка man говорить про це

якщо TEMPLATE не вказано, --tmpdirпередбачається, якщо --tmpdirне вказано, /tmpпередбачається.

Це означає, що просто запущений mktempфайл створить файл, який називається tmp.RANDOM_STRING в каталозі / tmp . Так що так, запуск mktempбез параметрів створить файл, який буде очищений разом із усім іншим у /tmpсистемному режимі. Для таких файлів $TMPTIMEзмінна буде важливою, як пояснено у відповіді Кріса нижче. Для багатьох дистрибутивів за замовчуванням очищається /tmpкожне завантаження, оскільки $TMPTIMEвстановлено значення 0. У більшості (якщо не у всіх) дистрибутивах це встановлюється у файлі /etc/default/rcS:

$ grep TMPTIME /etc/default/rcS
TMPTIME=0

Тепер, якщо ви робите вказати ШАБЛОН, наприклад , mktemp fooXXXто файл з ім'ям fooXXXстворюється в поточному каталозі , де XXXзамінюється трьома випадковими символами. Цей файл ніколи не буде видалений, якщо ви спеціально не зробили це. Видаляються лише файли з "офіційних" тимчасових каталогів, такі як /tmpколи-небудь автоматично, видаляється системою. Немає магічного біта, який можна встановити, який визначає тимчасовий файл, а файли зовні /tmpта його ilk не видаляються автоматично.

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

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt

2
Це не відповідає на моє запитання. У ньому йдеться про те, що він створює "тимчасовий" файл і не дає інформації про те, як довго він триває. Так це триває вічно? Чи перетворюється каталог tmp під час завантаження системи?
MYV

@Maksim див. Оновлену відповідь. Крім того, у вашому запитанні не було запиту, коли tmpочищається каталог, але коли файли, створені за допомогою mktemp, видаляються. Як бачимо, обоє не обов'язково пов'язані :).
тердон

6

Пам'ятайте, що тимчасові файли можуть бути видалені під час завантаження системи чи відповідно до TMPTIME. Будь ласка, подивіться, що у вас є /etc/cron.daily/tmpwatch.

/var/tmp/з іншого боку, як правило, імунітет tmpwatch.

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

Вам не потрібно створювати темп-файл у /tmp


Бачачи, як mktempможна запуститись у будь-якому каталозі та просто створити довільне ім’я файлу, я не бачу, як це має нічого спільного tmpwatch.
тердон

1
За замовчуванням mktempстворює файли в /tmp/.
Кріс

тільки якщо ви не даєте TEMPLATE, дивіться мою оновлену відповідь.
тердон

1

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


Чи не деякі системи використовують TMPTIME?
демур

@demure так, але лише для очищення /tmpчи інших каталогів tmp. Він не буде просто випадковим чином видаляти створені користувачем файли.
тердон

За замовчуванням mktempстворює файли в /tmp/.
Кріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.