GNU/Linux >> Znalost Linux >  >> Linux

Určete umístění použití inodu

Řešení 1:

Nečekejte, že to proběhne rychle...

cd do adresáře, kde se domníváte, že by mohl být podadresář se spoustou inodů. Pokud tento skript zabere obrovské množství času, pravděpodobně jste našli, kde v souborovém systému hledat. /var je dobrý začátek...

V opačném případě, pokud přejdete do nejvyššího adresáře v daném souborovém systému, spustíte jej a počkáte na dokončení, najdete adresář se všemi inody.

find . -type d | 
while 
  read line  
do 
  echo "$( find "$line" -maxdepth 1 | wc -l) $line"  
done | 
sort -rn | less

O náklady na třídění se nebojím. Provedl jsem test a třídění tohoto neseřazeného výstupu proti 350 000 adresářům trvalo 8 sekund. Prvotní nález trval . Skutečnou cenou je otevření všech těchto adresářů ve smyčce while. (samotná smyčka trvá 22 sekund). (Testovací data byla spuštěna v podadresáři s 350 000 adresáři, z nichž jeden měl milion souborů, zbytek měl 1 až 15 adresářů).

Různí lidé poukazovali na to, že ls v tom není skvělé, protože třídí výstup. Zkoušel jsem echo, ale to také není skvělé. Někdo jiný poukázal na to, že stat poskytuje tyto informace (počet záznamů v adresáři), ale že to není přenosné. Ukázalo se, že find -maxdepth je opravdu rychlý při otevírání adresářů a počítá .soubory, takže... tady je... body pro každého!

Řešení 2:

Pokud je problém v jednom adresáři s příliš mnoha soubory, zde je jednoduché řešení:

# Let's find which partition is out of inodes:
$ df -hi
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda3               2.4M    2.4M       0  100% /
...

# Okay, now we know the mount point with no free inodes,
# let's find a directory with too many files:
$ find / -xdev -size +100k -type d

Myšlenka za find řádek je, že velikost adresáře je úměrná množství souborů přímo v tomto adresáři. Zde tedy hledáme adresáře se spoustou souborů uvnitř.

Pokud nechcete hádat číslo a dáváte přednost vypsání všech podezřelých adresářů seřazených podle "velikosti", je to také snadné:

# Remove the "sort" command if you want incremental output
find / -xdev -size +10k -type d -printf '%s %p\n' | sort -n

Řešení 3:

Grrr, komentování vyžaduje 50 opakování. Takže tato odpověď je vlastně komentářem k Chrisově odpovědi.

Vzhledem k tomu, že tazatele pravděpodobně nezajímají všechny adresáře, pouze ty nejhorší, je použití řazení pravděpodobně velmi drahé.

find . -type d | 
while 
  read line  
do 
  echo "$(ls "$line" | wc -l) $line"  
done | 
perl -a -ne'next unless $F[0]>=$max; print; $max=$F[0]'  | less

Toto není tak úplné jako vaše verze, ale vytiskne to řádky, pokud jsou větší než předchozí maximum, což výrazně snižuje množství vytištěného šumu a šetří náklady na třídění.

Nevýhodou je, že pokud máte 2 velmi velké adresáře a první má o 1 inode více než 2., nikdy neuvidíte 2.

Úplnějším řešením by bylo napsat chytřejší skript v perlu, který by sledoval 10 nejsledovanějších hodnot a na konci je vytiskl. Ale to je příliš dlouho na rychlou odpověď na chybu serveru.

Také některé středně chytřejší skriptování v perlu vám umožní přeskočit smyčku while – na většině platforem třídí výsledky ls, což může být u velkých adresářů také velmi drahé. Třídění ls zde není nutné, protože nás zajímá pouze počet.

Řešení 4:

Můžete použít tento malý úryvek:

find | cut -d/ -f2 | uniq -c | sort -n

Vytiskne, kolik souborů a adresářů je v každém z adresářů v aktuální složce, přičemž největší pachatelé jsou dole. Pomůže vám najít adresáře, které mají hodně souborů. (více informací)

Řešení 5:

Toto není přímá odpověď na vaši otázku, ale vyhledávání nedávno upravených souborů s malou velikostí pomocí funkce find může zúžit vyhledávání:

find / -mmin -10 -size -20k

Linux
  1. Najít největší soubory nebo adresáře?

  2. Jak mohu rekurzivně vypsat seznam všech adresářů na místě, nejprve na šířku?

  3. Jak najdu umístění spustitelného souboru v C?

  1. bash najít adresáře

  2. Najděte adresáře obsahující určitý počet souborů

  3. Jak najít pouze adresáře bez podadresářů?

  1. Najděte soubory a adresáře v Linuxu jako profík

  2. Průvodce linuxovým příkazem „Najít“.

  3. Jak uvolnit použití Inode?