Vraag Wat is een opdrachtregel om grote bestanden / mappen te vinden om te verwijderen en ruimte vrij te maken?


Op zoek naar een reeks opdrachten die me de grootste bestanden op een schijf laat zien.


158
2018-04-20 14:01


oorsprong


Zou iets grafisch in orde zijn? - RolandiXor♦
nee, draait op de commandoregel over ssh. - Ryan Detzel
Wat vreemd is, is dat ik twee servers heb die hetzelfde draaien. De ene is op 50% schijfgebruik en de andere is 99%. Ik kan niet vinden wat dit veroorzaakt. - Ryan Detzel
Dus ik ben in de war, het zegt 98% gebruikt met du maar toen ik de gt5-app draaide kreeg ik: grab.by/9Vv2 - Ryan Detzel


antwoorden:


Als u alleen grote bestanden wilt vinden, kunt u gebruiken find met de -size keuze. De volgende opdracht toont alle bestanden groter dan 10MiB (niet te verwarren met 10MB):

find / -size +10M -ls

Als u bestanden tussen een bepaalde grootte wilt vinden, kunt u deze combineren met een zoekopdracht "kleiner dan". Het volgende commando vindt bestanden tussen 10MiB en 12MiB:

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

apt-cache search 'disk usage' somt een aantal programma's op die beschikbaar zijn voor schijfgebruiksanalyse. Een applicatie die er veelbelovend uitziet, is gt5.

Uit de beschrijving van het pakket:

Jaren zijn verstreken en schijven zijn groter en groter geworden, maar zelfs op dit ongelofelijk grote harddisk-tijdperk lijkt de ruimte na verloop van tijd te verdwijnen. Dit kleine en effectieve programma biedt een handigere lijst dan de standaard du (1). Het geeft weer wat er sinds de vorige run is gebeurd en geeft de dir-grootte en het totale percentage weer. Het is mogelijk om te navigeren en naar mappen te gaan met behulp van cursortoetsen met tekstgebaseerde browser (links, elinks, lynx etc.)

Screenshot of gt5

Op de "gerelateerde pakketten" sectie van GT5, Ik vond ncdu. Uit de beschrijving van het pakket:

Ncdu is een op ncurses gebaseerde du viewer. Het biedt een snelle en eenvoudig te gebruiken interface via de beroemde du utility. Hiermee kunt u door de mappen bladeren en percentages van schijfgebruik weergeven met de bibliotheek ncurses.

Screenshot of ncdu


222
2018-04-20 14:16



ncdu is erg snel en precies wat ik nodig had, bedankt! Ik heb gt5 ook geprobeerd, maar het gewoon geannuleerd omdat het te lang zonder feedback aan het denken was - Lukas
Holy crap, ncdu is geweldig, bedankt voor het delen van je bevindingen! - While-E
Ik zou het geweldig vinden als ncdu werd sterker gewezen. Ik heb het af en toe nodig en ik kan me de naam niet herinneren. - Martin Thoma


Ik gebruik gewoon een combinatie van du en 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

Dan is het een geval van afspoelen en herhalen. Target de submappen waarvan je denkt dat ze te groot zijn, voer de opdracht voor hen uit en ontdek wat het probleem veroorzaakt.

Opmerking: ik gebruik du's -x flag om dingen beperkt te houden tot één bestandssysteem (ik heb een vrij gecompliceerde opstelling van cross-mounted dingen tussen SSD en RAID5).

Opmerking 2: 2>/dev/null stuurt foutmeldingen om naar de vergetelheid. Als ze je niet storen, is het niet verplicht.


29
2018-04-20 14:30



Wanneer ik dit commando uitvoer, daalt het af in onderliggende mappen. Van de du man page: "Vat het schijfgebruik van elk BESTAND samen, recursief voor mappen." - Jamie


Mijn favoriete oplossing gebruikt een mix van verschillende van deze goede antwoorden.

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

du argumenten:

  • -a voor "alle" bestanden en mappen. Laat het voor alleen mappen
  • -BM om de formaten in megabyte (M) blokgroottes (B) uit te voeren
  • 2>/dev/null - sluit "permission denied" error messages uit (bedankt @ Oli)

sort argumenten:

  • -n voor "numeriek"
  • -r voor "omgekeerd" (grootste tot kleinste)

head argumenten:

  • -n 50 voor de beste 50 resultaten.
  • Ga weg more als u een kleiner nummer gebruikt

Opmerking: Voorvoegsel met sudo om mappen op te nemen waarvoor uw account geen toegang heeft.

Voorbeeld van de 10 grootste bestanden en directory's in / var (inclusief eindtotaal).

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

16
2017-07-03 23:24



hou ervan, bedankt - electblake


qbi's antwoord is correct, maar het zal erg traag zijn als er veel bestanden zijn, omdat het een nieuw ls-proces voor elk item zal starten.

een veel snellere versie met behulp van find zonder paaiende kindprocessen zou zijn om printf te gebruiken om de grootte in bytes (% s) en het pad (% p) af te drukken

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


8
2017-11-16 12:55



Bevestig dat dit veel sneller is - Cookie


Gebruik de volgende one-liner om de grootste top-20-directory's (recursief) in de huidige map weer te geven:

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

of (meer Unix gericht):

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

Voor de 20 grootste bestanden van de huidige map (recursief):

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

of met door mensen leesbare maten:

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

Houd er rekening mee dat -h is beschikbaar voor GNU sort alleen, dus om het op de juiste manier met OSX / BSD te laten werken, moet je het installeren vanaf coreutils. Voeg vervolgens de map toe aan uw PATH.

Dus deze aliassen zijn handig om in je te hebben rc bestanden (elke keer wanneer je het nodig hebt):

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

7
2018-03-05 14:17





Dit lijkt de perfecte toepassing voor find:

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

Deze opdracht zal alle bestanden in de map vinden $DIRECTORY en voer uit ls -s op hen. De laatste opdracht drukt de toegewezen grootte van een bestand plus de bestandsnaam af. Het resultaat wordt numeriek gesorteerd en en de laatste vijf vermeldingen worden getoond. Dus als resultaat zie je de 5 grootste bestanden in $DIRETORY of een submap. Als je binnenkomt tail -n 1 je ziet alleen het grootste bestand.

Verder kun je veel spelen met find. U kunt bijvoorbeeld zoeken naar bestanden die jonger zijn dan n dagen (-ctime -n) of die behoren tot speciale gebruikers (-user johndoe).


6
2018-04-20 14:26





Wanneer ik meer vrije ruimte op servers nodig heb, gebruik ik deze opdracht. Alle bestanden zijn groter dan 50 MB en "du-h" maakt een betere lijst van bestanden en "sort -n" na de lijst met pipe make-numericaly gesorteerd op bestandsgrootte.

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

2
2017-10-11 20:40





Probeer Baobab, het geeft je een grafisch overzicht van bestanden en mappen, je kunt zien waar de echte ruimvliegers zijn en ze met één klik verwijderen https://help.ubuntu.com/community/Baobab


1
2018-01-29 11:47



In deze specifieke vraag geeft het OP de voorkeur aan een opdrachtregelmethode. Zie de opmerkingen bij de vraag. Ik zal de vraag ook aanpassen.


Om alle GB-bestanden te vinden, zou ik bijvoorbeeld du en grep gebruiken, hoewel de andere methoden die hier worden genoemd ook geweldig lijken.

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

Je kunt je ook verbeelden met de --optische optie die du heeft.


1
2018-06-11 19:04





Je zou ook bestanden op grootte kunnen sorteren:

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

Het vindt alleen bestanden en wordt uitgevoerd du -h voor elk bestand, dat de grootte van het bestand laat zien. Ten slotte sorteren we de uitvoer van find/du volgens de eerste kolom (in menselijk leesbaar formaat).

Het laatst afgedrukte bestand is het grootste.


0
2017-09-08 12:28