Як чистити / tmp?


73
rizhas@rizhas-laptop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7        67G   58G  5,2G  92% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev            1,5G   12K  1,5G   1% /dev
tmpfs           303M  1,2M  302M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            1,5G  348K  1,5G   1% /run/shm
none            100M   80K  100M   1% /run/user
overflow        1,0M  1,0M     0 100% /tmp
overflow        1,0M  1,0M     0 100% /tmp

Як почистити /tmp?


1
Можливо, відповів на Unix & Linux . Не впевнений, чи це робить це питання повторюваним.
drc

nope @ drc, але хороша знахідка. Я використовував посилання звідти, щоб оновити свою відповідь.
Rinzwind


Відповіді:


116

/ tmp повинен бути очищений при перезавантаженні, але якщо ви не перезавантажите (що нормально для серверів), очищення не відбудеться

find /tmp -ctime +10 -exec rm -rf {} +

видалить усі файли та папки старше 10 днів. ви можете додати його в щоденний крон.


ОНОВЛЕННЯ

У коментарях нижче @sfussenegger рекомендує дещо інший формат цієї команди, який може краще відповідати вашим потребам та системі, в якій ви працюєте.

sudo find /tmp -type f -atime +10 -delete

Тут використовується команда, sudoщоб переконатися, що все видалено (або ви можете запустити його як root), оперуючи файлами, до яких не можна було отримати доступ більше 10 днів, і видаляються лише файли, а не папки . Він також використовує -deleteдля уникнення необхідності виконання rmкоманди


2
замість часу створення (-ctime) ви можете використовувати час доступу (-imeime) замість цього, - звичайно, лише якщо файлова система зберігає цю інформацію (перевірити наявність часу в / etc / fstab)
sfussenegger

7
ОК, будь ласка, поводьтеся зі мною, але є ще одне: ви хочете шукати лише файли ( -type f). в іншому випадку ви можете виявити, що батьківського дерева каталогу не було доступно протягом деякого часу та видалити весь його вміст, який потенційно все ще може бути використаний. тож остаточна команда, яку я рекомендую,sudo find /tmp -type f -atime +10 -delete
sfussenegger

2
@sfussenegger, можливо, ваш міг сприяти вашим коментарям до відповіді? Я думаю, що це краще, ніж бути «прихованим» у коментарях.
Джонатан

34

Ви можете припустити, що все, що знаходиться в каталозі tmp (/ tmp / / usr / tmp тощо), може бути видалено. ПЕРЕД, ніж ви почнете видаляти зупинити всі програми та послуги, якими ви користуєтесь, оскільки / tmp / можуть бути використані програмами для тимчасового зберігання інформації для цього сеансу. Так зробіть sudo service mysql stopі sudo service apache2 stopякщо у вас запущений mysql та / або apache. Ім'я файлів у каталозі / tmp / у більшості разів дає зрозуміти, до якої програми вони належать.

Отже, з командного рядка ...

cd /tmp/
pwd
sudo rm -r *

очистить каталог / tmp / та видалить усі файли та підкаталоги. Будьте уважні, щоб правильно ввести його. Команда pwdтам не потрібна, але повинна показувати /tmp.

Якщо ви хочете його інтерактивно (тому вам потрібно підтвердити видалення):

cd /tmp/
sudo rm -ri *

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

Я також хотів би зазначити, що 1 Мб для / tmp - це не багато місця. Ви використовуєте MySQL? Дивіться https://unix.stackexchange.com/a/76058/10017 про те, як це виправити (спасибі @drc)


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

... тому використання who –b(дата останнього завантаження), а потім створення файлу / часу завантаження, датованого на момент завантаження ( touch ....... /boottime), дозволить зробити безпечний find /tmp -type f \( ! -newer /boottime \) -delete \;, видаливши лише файли, старші за останню завантаження
Олів'є Дулак

Чи можу я використовувати ці коментарі для розширення відповіді? Зверніть увагу: / tmp тут, ймовірно, з mysql.
Rinzwind

4
Як людина, яка mktempрегулярно використовує свої сценарії, я категорично не згоден із твердженням "без жодної шкоди".
hytromo

2
Якщо /tmpміститься щось старіше за останню перезавантаження, сценарії запуску не виконали своїх завдань.
Саймон Ріхтер

10

tmpreaperПрограма може використовуватися для очищення / TMP періодично. Ця програма видаляє все, до чого не було доступно в заданий термін, як правило, два тижні. Щоб це працювало належним чином, у файловій системі, на якій вона ввімкнена, повинна бути atimesвключена опція. Якщо ви використовуєте tmpfs , який, здається, ви робите, тоді вам слід добре.

Звичайно, перезавантаження також очищає / tmp , але це було б нудно.


Мене дивно, що це не стандартний варіант в Ubuntu та Debian. Для мене досить часто трапляються відносно непривілейовані користувацькі процеси заповнення / tmp.
шавлія

1
Так, але це політика, яку повинен встановити системний адміністратор. Якщо у вас є тривалі сервіси, які очікують збереження їх даних, будь-яке за замовчуванням, але "чистка" не буде небезпечною.
Саймон Ріхтер

7

Каталог /tmpозначає тимчасовий.

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

Тим не менш, якщо ви хочете видалити дані, наявні в ньому, використовуйте

sudo rm -r /tmp/*

видалення з нього не спричинить жодних проблем, оскільки це тимчасові файли.


9
Вони тимчасові в тому сенсі, що вони не потрібні після перезавантаження, це не означає, що вони зараз не потрібні або що вони не знадобляться за 5
хвилин

5
Неправда, що це "не спричинить жодних проблем". Я робив це один раз, перш ніж я краще знав і в основному шлангував свою машину.
Кайл Странд

Також дивіться unix.stackexchange.com/q/11235/38050
Kyle Strand

4

Будьте уважні, перш ніж запускати таку команду rm -r ./*. Після запуску це відновити будь-які дані буде дуже важко або неможливо.

Усі будуть видалені. Переконайтесь, що каталог, який ви видаляєте, є правильним.

Є більш безпечний спосіб поводження з речами.

# sudo rm -r /tmp/*

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


2

/tmpКаталог був очищений за замовчуванням при кожному завантаженні, тому що TMPTIMEце 0за замовчуванням.


1

Якщо ваше "/ tmp" кріплення у файловій системі Linux монтується як переповнення (часто розміром у 1 Мб), це, ймовірно, через те, що ви не вказали "/ tmp" як власний розділ, а ваша коренева файлова система заповнена і "/ tmp" було перераховано як запасний. Щоб виправити це, після того як ви очистите простір, просто відключіть резервний запас, і він повинен повторно встановити його в початковому пункті:

sudo umount overflow

якщо пристрій зайнятий

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