GNU/Linux >> Znalost Linux >  >> Linux

Jak bezpečně vyčistit složku tmp v systému Linux

Možná budete chtít zkusit něco takového:

find /tmp -mtime +7 -and -not -exec fuser -s {} ';' -and -exec echo {} ';'

find se používá k nalezení souborů, které odpovídají určitým kritériím.

  • -mtime +7 vybere pouze soubory, které jsou starší než 7 dní (můžete použít jakoukoli jinou hodnotu)
  • -exec fuser -s {} ';' volá fuser v tichém režimu pro každý soubor, který odpovídá kritériím stáří. fuser vrací 0 (=pravda) pro každý soubor, který byl právě zpřístupněn, a 1 (=nepravda) pro nepřístupné soubory. Protože nás zajímají pouze ty nepřístupné, vložíme -not před tímto -exec
  • -exec echo {} ';' pouze vytiskne všechny názvy souborů odpovídající kritériím. možná budete chtít použít -exec rm {} ';' místo toho zde, ale protože to může smazat některé stále používané soubory, myslím, že je bezpečnější provést nejprve jednoduchou ozvěnu.
  • upravit: Možná budete chtít přidat něco jako -name 'foo*.bar' nebo -uid 123 omezit účinky čištění na konkrétní vzory souborů nebo ID uživatelů, aby se předešlo náhodným účinkům.

K poslednímu bodu:Zvažte, že mohou existovat soubory, které jsou zapsány pouze jednou (např. při spouštění systému), ale často se čtou (např. jakýkoli X-session-cookie). Proto doporučuji přidat některé kontroly názvů, aby ovlivnily pouze soubory vytvořené vašimi vadnými programy.

edit2: K vaší poslední otázce:Soubor nebude smazán z disku, dokud žádný proces nebude mít otevřený popisovač (alespoň pro nativní linuxové souborové systémy). Problém je v tom, že položka adresáře je okamžitě odstraněna, což znamená, že od okamžiku, kdy soubor odstraníte, již žádné nové procesy soubor nemohou otevřít (protože k němu není připojen žádný název souboru).

Podrobnosti najdete na:https://stackoverflow.com/questions/3181641/how-can-i-delete-a-file-upon-its-close-in-c-on-linux

edit3: Ale co kdybych chtěl celý proces automatizovat?

Jak jsem řekl, mohou existovat soubory, které se jednou zapíší a pak jednou za čas čtou (např. soubory cookie relace X, soubory PID atd.). Tyto malé skripty pro odstranění nevyloučí (což je důvod, proč byste mohli chtít provést testovací běh s echo nejprve před skutečným smazáním souborů).

Jedním ze způsobů, jak implementovat bezpečné řešení, je použít atime .
atime ukládá čas posledního přístupu ke každému souboru. Ale tato možnost souborového systému je často zakázána, protože má docela určitý dopad na výkon (podle tohoto blogu někde v oblasti 20-30 %). Je tam relatime , ale ten zapíše pouze přístupový čas, pokud mtime se změnil, takže tento nám nepomůže.

Pokud chcete použít atime , doporučuji mít /tmp na samostatném oddílu (ideálně ramdisk), aby dopad na výkon na celý systém nebyl příliš velký.

Jednou atime je povoleno, vše, co musíte udělat, je nahradit -mtime parametr ve výše uvedeném příkazovém řádku s -atime .
Možná budete moci odstranit -not -exec fuser -s {} ';' , ale pro jistotu bych to tam nechal (pro případ, že aplikace udrží soubory otevřené po dlouhou dobu).

Nezapomeňte však, že příkaz otestujete pomocí echo než skončíte s odstraňováním věcí, které váš systém stále potřebuje!


Neházejte své vlastní.

Debian/Ubuntu má tmpreaper, pravděpodobně je dostupný i v jiných distech.

# tmpreaper - cleans up files in directories based on their age

sudo apt-get install tmpreaper

cat /etc/tmpreaper.conf 

Pokud jde o poslední část vaší otázky:

I když si nemyslím, že režim otevírání/vytváření „delete-this-if-i-die“ existuje, proces může bezpečně smazat soubor přímo po jeho vytvoření, pokud má k tomuto souboru otevřenou rukojeť. Jádro si pak ponechá soubor na disku a jakmile skončí poslední proces, který soubor otevřel (ať už kvůli havárii nebo normálně), uvolní se místo obsazené souborem.

Pro obecný způsob, jak vyřešit problém, že některé procesy někdy nevyčistí /tmp, bych navrhl podívat se na jmenné prostory připojení, popsané například zde nebo zde. Pokud je daný proces systémovým démonem, mohl by být zajímavý systemd a jeho nativní funkce umožňující privátní souborové systémy /tmp.


Linux
  1. Jak spravovat možnosti souborů Linux

  2. Jak vyprázdnit soubor protokolu v Linuxu

  3. Jak připojit soubor iso v Linuxu

  1. Jak najít soubor v Linuxu

  2. Jak vytvořit swap v Linuxu

  3. Jak vytvořit odkládací soubor v Linuxu

  1. Jak přesunout soubor v Linuxu

  2. Jak vytvořit soubor v Linuxu

  3. Jak přejmenovat soubor v Linuxu?