it-swarm.dev

Jaký je způsob příkazového řádku k nalezení velkých souborů / adresářů k odstranění a uvolnění místa?

Hledáte řadu příkazů, které mi zobrazí největší soubory na jednotce.

217
Ryan Detzel

Pokud potřebujete pouze najít velké soubory, můžete použít find s -size možnost. Další příkaz zobrazí seznam všech souborů větších než 10 MB ( nezaměňovat s 10 MB ):

find / -size +10M -ls

Pokud chcete najít soubory mezi určitou velikostí, můžete je kombinovat s hledáním „velikost menší než“. Další příkaz vyhledá soubory mezi 10 MB a 12 MB:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage' uvádí seznam některých programů dostupných pro analýzu využití disku. Jedna aplikace, která vypadá velmi slibně, je gt5.

Z popisu balíčku:

Uplynula celá léta a disky se zvětšovaly a zvětšovaly, ale i v této neuvěřitelně velké éře pevného disku se zdá, že prostor časem mizí. Tyto malé a efektivní programy poskytují pohodlnější výpis než výchozí du (1). Zobrazuje, co se stalo od posledního spuštění, a zobrazuje velikost adresáře a celkové procento. Je možné procházet a vystupovat do adresářů pomocí kurzorových kláves s textovým prohlížečem (odkazy, elinky, rys atd.)

Screenshot of gt5

V sekci „související balíčky“ gt5 jsem našel ncdu. Z popisu balíčku:

Ncdu je du-viewer založený na ncurses. Poskytuje rychlé a snadno použitelné rozhraní prostřednictvím slavné du utility. Umožňuje procházet adresáře a zobrazit procenta využití disku pomocí knihovny ncurses.

Screenshot of ncdu

290
Lekensteyn

Používám pouze kombinaci du a sort.

Sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

Pak je to případ máchání a opakování. Zaměřte se na podadresáře, o kterých si myslíte, že jsou příliš velké, spusťte příkaz a zjistěte, co je příčinou problému.

Poznámka: Používám příznak du-x, Abych udržel věci omezené na jeden souborový systém (mezi SSD a RAID5 mám poměrně komplikované uspořádání vzájemně propojených věcí).

Poznámka 2: 2>/dev/null Přesměruje všechny chybové zprávy do zapomnění. Pokud vás neobtěžují, není to povinné.

36
Oli

Moje oblíbené řešení používá kombinaci několika z těchto dobrých odpovědí.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

Argumenty du:

  • -a pro „všechny“ soubory a adresáře. Nechte to jen pro adresáře
  • -BM pro výstup velikostí v blocích velikosti megabajtů (M) (B)
  • 2>/dev/null - vyloučit chybové zprávy „povolení odepřeno“ (díky @Oli)

Argumenty sort:

  • -n pro „numeric“
  • -r pro „reverzní“ (největší až nejmenší)

Argumenty head:

  • -n 50 pro pouhých 50 nejlepších výsledků.
  • Pokud používáte menší číslo, vypněte more

Poznámka: Předpona Sudo obsahuje adresáře, k nimž váš účet nemá oprávnění k přístupu.

Příklad zobrazující 10 největších souborů a adresářů v/var (včetně celkového součtu).

cd /var
Sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/Apache2
587M    ./log/Apache2/ssl_access.log
273M    ./cache
32
Dan King

Chcete-li zobrazit největší 20 nejlepších adresářů (rekurzivně) v aktuální složce, použijte následující jednosložkovou linku:

du -ah . | sort -rh | head -20

nebo (více orientovaný na Unix):

du -a . | sort -rn | head -20

Pro 20 největších souborů v aktuálním adresáři (rekurzivně):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

nebo s lidsky čitelnými velikostmi:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Vezměte prosím na vědomí, že -h je k dispozici pouze pro GNU sort, takže aby to fungovalo správně na OSX/BSD, musíte jej nainstalovat z coreutils. Pak přidat jeho složku do vašeho PATH.

Tyto aliasy jsou tedy užitečné v souborech rc (pokaždé, když je potřebujete):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
14
kenorb

odpověď qbi je správná, ale bude velmi pomalá, když bude spousta souborů, protože pro každou položku začne nový proces ls.

mnohem rychlejší verze používající najít bez vytváření podřízených procesů by bylo použití printf k tisku velikosti v bajtech (% s) a cesty (% p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries

10
kon

Vypadá to jako perfektní aplikace pro find:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

Tento příkaz najde všechny soubory v adresáři $DIRECTORY a spusťte ls -s na ně. Poslední příkaz vytiskne přidělenou velikost souboru plus název souboru. Výsledek je číslován a zobrazí se posledních pět záznamů. V důsledku toho uvidíte největších 5 souborů v $DIRETORY nebo jakýkoli podadresář. Pokud zadáte tail -n 1 uvidíte pouze největší soubor.

Navíc si můžete hrát hodně s find. Například můžete hledat soubory, které jsou mladší než n dní (-ctime -n) nebo kteří patří ke zvláštním uživatelům (-user johndoe).

9
qbi

Když potřebuji více volného místa na serverech, použiju tento příkaz. Nalezne všechny soubory větší než 50 MB a "du -h" vytvoří lepší seznam souborů a "sort -n" po potrubí vytvoří seznam numericky seřazený podle velikosti souboru.

find / -size +50M -type f -exec du -h {} \; | sort -n
5
zorbon.cz

Například pro nalezení všech GB souborů bych použil du a grep, i když ostatní metody zde zmíněné se zdají také skvělé.

du -h -a /dir | grep "[0-9]G\b"  

Můžete také získat fantastickou volbu --except, kterou du má.

1
dermen

Skvělý, uživatelsky přívětivý nástroj uvedený v odpovědi na podobná otázka je NCurses Disk Usage nářadí:

Sudo ncdu /
1
janoside

Vyzkoušejte Baobab, poskytuje vám grafický přehled o souborech a složkách, můžete vidět, kde jsou skutečné kosmické prasata, a smazat je jediným kliknutím https://help.ubuntu.com/community/Baobab

1
Oliver Hoffmann

Příkaz můžete použít k zobrazení největších souborů při přeskočení adresářů:

Sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10

Chcete-li najít všechny soubory, které jsou větší než 100 MB (toto není 100 MB, viz zde , pokud jste zmatení):

find / -size +100M -ls

příkaz níže zobrazí 5 největších souborů ve složce $DIRECTORY:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

USING du: Níže uvedený příkaz, který používá du, zobrazí v domovské pracovní složce adresáře s 20 největšími velikostmi:

Sudo du -a /home | sort -n -r | head -n 20

Chcete-li nyní zobrazit největší adresáře/soubory včetně podsložek, spusťte:

du -Sh | sort -rh | head -n 10

Pomocí ls:

Chcete-li zobrazit seznam pěti největších největších souborů v adresáři/bin, zadejte následující příkaz:

ls -lSh /bin | head -5

Můžete také použít analyzátor využití disku nebo Baobao , jak je zobrazeno zde .

0
Zezo

Můžete také třídit soubory podle velikosti:

find . -type f -exec du -h {} \; | sort -k1 -h

Nalezne pouze soubory a provede du -h pro každý soubor, který ukazuje velikost souboru. Nakonec třídíme výstup find/du podle prvního sloupce (v lidsky čitelném formátu).

Poslední tištěný soubor je největší.

0
Peregring-lk