GNU/Linux >> Znalost Linux >  >> Linux

Máme ručně smazat obsah /tmp?

Chcete-li odpovědět na otázky:

  • Je /tmp má být automaticky vyprázdněn:Ano
  • Máme odstranit soubory v /tmp? pravidelně a ručně:Ne , váš systém se o ně postará.

Pokud se můžete zeptat sami sebe:

  • Mohu smazat soubory z /tmp z jakéhokoli důvodu (potřebujete prostor, chcete odstranit stopy atd.):Záleží , čtěte dále .

Standard Hierarchy Filesystem (FHS) uvádí:

Adresář /tmp musí být dostupný pro programy, které vyžadují dočasné soubory.

Programy nesmí předpokládat, že nějaké soubory nebo adresáře v /tmp jsou mezi vyvoláním programu zachovány.

/var/tmp/ má podobný účel, ale nesmí být odstraněn během restartu.

není zaručeno že /tmp/ nebo /var/tmp/ jsou pravidelně uklízeny. To může záviset na vaší distribuci a nastavení, ačkoli většina systémů čas od času provádí nějaké vyčištění. Zobrazit komentář od mike .

Pokud potřebujete smazat soubor v /tmp , nejprve se podívejte, zda je soubor používán. Můžete to snadno provést pomocí:

lsof /tmp/file_to_delete

Pokud k tomu máte oprávnění, zobrazí se proces, který drží ovladač tohoto souboru, jako je název procesu, PID a typ souboru. Chcete-li zobrazit skutečně všechny procesy, přidejte před sudo nebo spustit jako uživatel root .

lsof +D /tmp

zobrazí všechny soubory v /tmp a adresáře níže (+D ), které jsou aktuálně otevřené. Tyto soubory byste samozřejmě neměli mazat.

Ve skutečnosti, když smažete soubor, který je stále otevřený – pokud k tomu máte oprávnění – stane se nepřístupným z jmenného prostoru souborového systému, ale stále existuje pro procesy, které pro něj mají otevřený popisovač souboru. Po zavření tohoto popisovače již soubor není pro tento proces přístupný, a pokud žádný proces již soubor nemá otevřen, je nakonec odstraněn. Proces by neměl předpokládat, že soubor přežije mezi následujícími open volání, ale programátoři jsou lajdáctví a nikdy nevíte. Z tohoto důvodu to není tak chytré k odstranění souborů, které jsou stále používány některými programy.


Myslím, že to závisí na variantě OS. Představoval bych si, že /tmp se obvykle vymaže při restartu a ve skutečnosti by nebylo bezpečné, aby se systém vyčistil uprostřed relace, protože nebude vědět, jaké soubory jsou aktivní.

Pokud jste odvážní, možná budete chtít hodit příkaz do crontab, který odstraní soubory starší než určitý věk, ale to může způsobit určité problémy, pokud smaže stále používané soubory. Můžete zkusit příkaz (nezkoušel jsem to) jako

find /tmp -type f -ctime +10 -exec rm {} +

Což teoreticky odstraní všechny soubory pod /tmp starší než 10 dní.


Adresáře /tmp a /var/tmp se čistí podle normálního plánu. To může záviset na vaší distribuci. Na mém systému CentOS (klon RedHat) je naplánována úloha cron, která má podle denního plánu spouštět tmpwatch, čistič tmp dir. Soubory v /var/tmp mohou zůstat o něco déle než soubory v /tmp/. Viděl jsem také skripty, které při restartu ořezávají /tmp (ale výslovně ne /var/tmp) s vědomím, že tento soubor nemůže nic držet otevřený, protože všechny procesy jsou nové.

Takže ano, /tmp má údržbu ze základních skriptů. Mimo tyto doby údržby se stále může naplnit. Pokud jste se rozhodli čistit věci ručně, nejlepší praxí správce systému je být opatrný. Sysadmin lore hovoří o symbolických odkazech v /tmp ukazujících na nezbytné systémové soubory, které byly smazány, když n00b sysadmins spustili jednoduchý find skript.


Linux
  1. Co jsou soubory /dev/zero a /dev/null v Linuxu

  2. Kdy mám použít /dev/shm/ a kdy /tmp/?

  3. Jaký je rozdíl mezi /tmp a /run?

  1. Proč jsou < nebo > vyžadovány pro použití /dev/tcp

  2. Jak změnit výchozí /tmp na /home/user/tmp

  3. Rozdíl a správné použití pro /tmp a /var/tmp

  1. Rozdíl mezi /opt a /usr/local?

  2. Jak zakázat automatické mazání souborů v adresářích /tmp a /var/tmp v CentOS / RHEL 5,6

  3. Jaké jsou významy /usr/sbin, /usr/local/sbin a /usr/local/bin?