Este posibil să se utilizeze " ls " în Unix pentru a lista dimensiunea totală a unui sub-director și tot conținutul acestuia, spre deosebire de obicei 4K care (presupun) este doar director fișierul în sine? I. E.
total 12K
drwxrwxr-x 6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk
După degresare paginile man I'm a veni goale.
Incearca ceva de genul:
du -sh *
versiune scurtă a:
du --summarize --human-readable *
du
: Disk Usalvie
-s
: Afișează un rezumat pentru fiecare fișier specificat. (Echivalentul a -d 0
)
-h
: "Om poate fi citit" de ieșire. Utilizarea unitate de sufixe: Byte, Kibibyte (Kio), Mebibyte (MiB), Gibibyte (GiB), Tebibyte (TiB) și Pebibyte (PiB). (Unei baze de date2)
du -sh * | sort -h
Acest lucru va fi afișat în format lizibil.
Pentru a lista cele mai mari directoare din directorul curent în format lizibil:
du -sh * | sort-hr
O modalitate mai bună de a restricționa numărul de rânduri poate fi
du -sh * | sort-hr | cap-n10
În cazul în care puteți crește sufixul -n
pavilion pentru a restricționa numărul de rânduri enumerate
Eșantion:
[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M Vendor
1.1M composer.phar
488K phpcs.phar
488K phpcbf.phar
72K doc
16K nbproject
8.0K composer.lock
4.0K README.md
Se face mai convenabil pentru a citi :)
Pentru a-l afișa în ls-lh
format, utilizați:
(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'
Awk cod explicat:
if($1 == "total") { // Set X when start of ls is detected
X = 1
} else if (!X) { // Until X is set, collect the sizes from `du`
SIZES[$2] = $1
} else {
// Replace the size on current current line (with alignment)
sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0);
print $0
}
Eșantionul de ieșire:
drwxr-xr-x 2 root root 4.0K Feb 12 16:43 cgi-bin
drwxrws--- 6 root www 20M Feb 18 11:07 document_root
drwxr-xr-x 3 root root 1.3M Feb 18 00:18 icons
drwxrwsr-x 2 localusr www 8.0K Dec 27 01:23 passwd
Comanda vrei tu e 'du -sk' du = "utilizare disc"
-K pavilion vă oferă ieșire în kilobytes, mai degrabă decât du implicit de sectoare de disc (512-byte blocuri).
-S pavilionul va lista doar lucruri în top la nivel de director (de exemplu, directorul curent, în mod implicit, sau directorul specificat în linia de comandă). L's ciudat că du-a opus comportamentul e în acest sens. În mod implicit du va recursiv da discul de utilizare de fiecare sub-director. În contrast, ls va da doar lista de fișiere în directorul specificat. (ls-R vă oferă recursiv comportament.)
Pune acest shell funcție declarație în shell scripturi de inițializare:
function duls {
paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}
Am numit-o beat
, deoarece prezinta ieșire din ambele du
și e
(in ordinea asta):
$ duls
210M drwxr-xr-x 21 kk staff 714 Jun 15 09:32 .
$ duls *
36K -rw-r--r-- 1 kk staff 35147 Jun 9 16:03 COPYING
8.0K -rw-r--r-- 1 kk staff 6962 Jun 9 16:03 INSTALL
28K -rw-r--r-- 1 kk staff 24816 Jun 10 13:26 Makefile
4.0K -rw-r--r-- 1 kk staff 75 Jun 9 16:03 Makefile.am
24K -rw-r--r-- 1 kk staff 24473 Jun 10 13:26 Makefile.in
4.0K -rw-r--r-- 1 kk staff 1689 Jun 9 16:03 README
120K -rw-r--r-- 1 kk staff 121585 Jun 10 13:26 aclocal.m4
684K drwxr-xr-x 7 kk staff 238 Jun 10 13:26 autom4te.cache
128K drwxr-xr-x 8 kk staff 272 Jun 9 16:03 build
60K -rw-r--r-- 1 kk staff 60083 Jun 10 13:26 config.log
36K -rwxr-xr-x 1 kk staff 34716 Jun 10 13:26 config.status
264K -rwxr-xr-x 1 kk staff 266637 Jun 10 13:26 configure
8.0K -rw-r--r-- 1 kk staff 4280 Jun 10 13:25 configure.ac
7.0M drwxr-xr-x 8 kk staff 272 Jun 10 13:26 doc
2.3M drwxr-xr-x 28 kk staff 952 Jun 10 13:26 examples
6.2M -rw-r--r-- 1 kk staff 6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
11M drwxr-xr-x 42 kk staff 1428 Jun 10 13:26 src
$ duls doc
7.0M drwxr-xr-x 8 kk staff 272 Jun 10 13:26 doc
$ duls [bM]*
28K -rw-r--r-- 1 kk staff 24816 Jun 10 13:26 Makefile
4.0K -rw-r--r-- 1 kk staff 75 Jun 9 16:03 Makefile.am
24K -rw-r--r-- 1 kk staff 24473 Jun 10 13:26 Makefile.in
128K drwxr-xr-x 8 kk staff 272 Jun 9 16:03 build
Explicație:
A "lipi" de utilitate creează coloane de la intrarea sa în conformitate cu caietul de sarcini pe care le da. Dat două fișiere de intrare, pune-le una lângă alta, cu un tab ca separator.
Ne da putere de du -hs -- "$@" | cut-f1
ca primul fișier (flux de intrare într-adevăr) și de ieșire de e -ld -- "$@" ca cel de-al doilea fișier.
În funcție de, "$@"
se va evalua la lista de argumente în linia de comandă, fiecare în ghilimele duble. Prin urmare, va înțelege expandarea caractere și calea de nume cu spatii etc.
Dublu minusuri (--
) semnalul de sfârșit de opțiuni de linie de comandă pentru a du
și e
. Fără acestea, spun duls -l
ar confunda du
și orice opțiune pentru du " că "e
nu't au ar confunda" ls " (și opțiunile care există în ambele utilități ar putea să nu însemne același lucru, și ar fi destul de mess).
A "tăiat" după du
pur și simplu taie prima coloană a du -hs
de ieșire (la dimensiuni).
Am decis să pun du
ieșire de pe stânga, altfel, ar fi trebuit să gestioneze un instabil coloana din dreapta (din cauza la diferite lungimi de nume de fișiere).
Comanda nu va accepta linia de comandă steaguri.
Acest lucru a fost testat în ambele bash
și în ksh93
. Acesta nu va funcționa cu /bin/sh
.
ncdu
ncurses du
Acest minunat CLI utilitar vă permite să găsi cu ușurință fișiere mari și directoare interactiv.
De exemplu, din interiorul copac de un bine cunoscut proiect facem:
sudo apt-get install ncdu
ncdu
Rezultatul acesteia:
Apoi, am intra în jos și la dreapta de pe tastatură pentru a merge în `/șoferilor folder, și văd:
ncdu
calculează numai fișiere de dimensiuni recursiv dată la pornire pentru întreaga copac, așa că este eficientă.
"Total disc de utilizare" vs "dimensiune Aparentă" este analog cu du
, și i-am explicat la: https://stackoverflow.com/questions/5694741/why-is-the-output-of-du-often-so-different-from-du-b/55514003#55514003
Pagina web a proiectului: https://dev.yorhel.nl/ncdu
Întrebări legate de:
Testat în Ubuntu 16.04.
ncdu
non-interactive de utilizare
O altă caracteristică rece de `ncdu este că puteți mai întâi să-și arunce dimensiuni într-un format JSON, și mai târziu le reutiliza.
De exemplu, pentru a genera fișierul run:
ncdu -o ncdu.json
și apoi se examinează în mod interactiv cu:
ncdu -f ncdu.json
Acest lucru este foarte util dacă aveți de-a face cu o foarte mare și lent fișiere cum ar fi NFS.
În acest fel, poți primul export doar o singură dată, care poate dura ore, și apoi de a explora fișierele, renunta, de a explora din nou, etc.
Formatul de ieșire este doar JSON, astfel încât este ușor să-l reutilizați cu alte programe precum, de exemplu:
ncdu -o - | python -m json.tool | less
dezvăluie un simplu copac director structură de date:
[ 1, 0, { "progname": "ncdu", "progver": "1.12", "timestamp": 1562151680 }, [ { "asize": 4096, "dev": 2065, "dsize": 4096, "ino": 9838037, "nume": "/locul de muncă/linux-kernel-module-ieftin/submodule/linux" }, { "asize": 1513, "dsize": 4096, "ino": 9856660, "nume": "Kbuild" }, [ { "asize": 4096, "dsize": 4096, "ino": 10101519, "nume": "net" }, [ { "asize": 4096, "dsize": 4096, "ino": 11417591, "nume": "l2tp" }, { "asize": 48173, "dsize": 49152, "ino": 11418744, "nume": "l2tp_core.c" },
Testat în Ubuntu 18.04.
Aceasta este una imi place
update: nu mi-a placut cel anterior pentru că l-am't arată fișierele din directorul curent, doar enumerate directoare.
Exemplu de ieșire pentru /var
pe ubuntu:
sudo du -hDaxd1 /var | sort-h | coada -n10
4.0K /var/lock
4.0K /var/run
4.0K /var/www
12K /var/spool
3.7M /var/backups
33M /var/log
45M /var/webmin
231M /var/cache
1.4G /var/lib
1.7G /var
Acestea sunt toate mare sugestii, dar cea pe care am folosi este:
du -ksh * | sort -n -r
-ksh
face-vă că fișierele și folderele sunt enumerate într-un om-un format lizibil și în megaocteți, kilobytes, etc. Apoi le sorta numeric și invers la fel, așa că pune întâi pe cei mari.
Singurul dezavantaj la aceasta comanda este că calculatorul nu știu că Gigabyte este mai mare decât Megabyte asa ca va numai un fel de numere și veți găsi de multe ori anunturi de genul asta:
120K
12M
4G
Doar să fie atent să se uite la unitate.
Aceasta comanda, de asemenea, funcționează pe Mac (întrucât genu - h
nu, de exemplu).
du -S
du au o altă opțiune utilă: -S, --separate-dirs
spun du nu include dimensiunea de subdirectoare - la îndemână în unele ocazii.
Exemplu 1 - arată numai dimensiuni de fișier într-un director:
du -Sh *
3,1G 10/CR2
280M 10
Exemplul 2 - afișează fișiere de dimensiuni și subdirectoare în directorul:
du -h *
3,1G 10/CR2
3,4G 10
doar un avertisment, dacă doriți pentru a compara dimensiunile de fișiere. du produce rezultate diferite în funcție de sistemul de fișiere, dimensiune bloc, ... .
Se poate întâmpla ca mărimea fișierelor este diferit, de exemplu, compararea același director de pe hard-disk și un dispozitiv de stocare USB. Eu folosesc următorul script, inclusiv ls pentru a rezuma director de dimensiune. Rezultatul în bytes a lua toate sub-directoarele în considerare.
echo "[GetFileSize.sh] target directory: \"$1\""
iRetValue=0
uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
iRetValue=-1
else
echo "[GetFileSize.sh] computing size of files..."
# use ls to compute total size of all files - skip directories as they may
# show different sizes, depending on block size of target disk / file system
uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
uiLength=$(expr length "$uiTotalSize")
if [ $uiLength -lt 1 ]; then
uiTotalSize=0
fi
echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""
fi
exit "$iRetValue"
Pentru a afișa directorul curent's de fișiere și subdirectoare dimensiuni recursiv:
du -h .
Pentru a afișa aceeași mărime informații dar fără imprimarea lor sub directoarele recursiv (care poate fi o listă foarte mare), trebuie doar să utilizați --max-depth opțiune:
du -h --max-depth=1 .
Hmm, cel mai bun mod este de a utiliza această comandă:
du -h -x / | sort -hr >> /home/log_size.txt
Apoi, va fi capabil de a obține toate dimensiunile foldere pe toate server. Ușor pentru a vă ajuta să vă pentru a găsi cele mai mari dimensiuni.
Pentru un timp, am folosit Nautilus (pe Gnome desktop pe RHEL 6.0) pentru a șterge fișierele de pe dosarul meu acasă în loc de a folosi " rm " comandă în bash. Ca urmare, dimensiunea totală indicată de
du -sh
nu se potrivesc cu suma de utilizarea discului de fiecare sub-director, atunci când am folosit
du -sh *
Mi-a luat ceva timp să înțeleg că Nautilus trimite fișierele șterse sale Trash, și că dosarul nu este listat in du -sh *
comanda. Deci, am vrut doar să împărtășească acest lucru, în cazul în care cineva se confruntă cu aceeași problemă.