Hoe de grootte van een directory in Linux te krijgen

How Get Size Directory Linux



Het kennen van de grootte van een directory in Linux is niet zo eenvoudig als het klinkt. De opdracht ls -s zal de bestanden en submappen met hun grootte weergeven. De groottes (ongeveer 4096 bytes) die voor de mappen worden gegeven, zijn echter geen schijfgebruik. De grootte die voor een map wordt gezien, is de grootte van de metagegevens van de map.

Metadata zijn data over data. De schijnbare grootte is de grootte van de gegevens die van belang is voor de gewone gebruiker van de computer. De inhoud (tekst) van de brieven, afbeeldingen, video's enz. van de gebruiker vormen de schijnbare grootte. Deze gegevens worden niet willekeurig op de computer bewaard. De schijnbare gegevens moeten op een gecontroleerde manier worden bewaard. Het moet herkenbaar zijn. Het moet compleet zijn. Daar zijn andere eisen aan. Om aan deze extra eisen te voldoen zijn wat extra data nodig, en deze extra data zijn de metadata.







Onthoud dat er maar één map in een volume is. De rest zijn submappen. De hoofdmap geeft aanleiding tot submappen, die aanleiding geven tot het verdwijnen van andere submappen. Submappen worden echter meestal gewoon mappen genoemd. En dus is er maar één directorystructuur.



Dus, ls -s is niet handig om de grootte van een map te verkrijgen. Welk commando is dan handig? – Het du-commando. du staat voor Schijfgebruik. Het drukt het schijfgebruik van de map af.



Dit artikel legt de verschillende eigenschappen van het du commando in Linux uit, dat de verschillende programmeurs manieren biedt om de grootte van de mappen en hun submappen te kennen. Bash is de shell die wordt gebruikt voor de codevoorbeelden van dit artikel.





Artikel Inhoud

du zonder optie of argument

De huidige werkdirectory is de directory waarin de gebruiker momenteel werkt. De prompt toont normaal gesproken de huidige werkdirectory. Du typen zonder enige optie en argument, zoals zo:



van

en vervolgens op de Enter-toets te drukken, wordt het schijfgebruik weergegeven voor alle submappen van de huidige werkmap. Het zal deze informatie weergeven voor de substructuur van de huidige werkdirectory. Een punt op het display vertegenwoordigt de huidige werkdirectory.

Elk pad van de subboom wordt weergegeven in een lijn, op het display. Elke regel begint met de grootte van de map (de achternaam in het pad). De weergave kan er ongeveer zo uitzien:

8./dir1/dir2/dir3/dir4

12./dir1/dir2/dir3

16./dir1/dir2

twintig./dir1

Merk op dat het niet duidelijk is of de grootte in bytes of kilobytes of megabytes of gigabytes is. Kilobytes aan symbool, K betekent 1024 bytes; Megabytes aan symbool, M betekent 1.048.576 bytes; Gigabytes aan symbool, G betekent 1.073.741.824 bytes. Om de veelvouden aan te geven, moet de optie -h (switch) als volgt worden gebruikt:

van -H

Het display ziet er dan als volgt uit:

8,0K./dir1/dir2/dir3/dir4

12K./dir1/dir2/dir3

16K ./dir1/dir2

20K./dir1

Wanneer de -h optie wordt gebruikt, wordt gezegd dat de maten in een leesbare vorm zijn.

Opmerking: met de optie –all geeft het commando du ook schijfgebruik voor bestanden; schijfgebruik voor bestanden wordt in dit artikel echter niet behandeld.

Grootte van andere mappen

Een typisch absoluut pad voor een Linux-volume is als volgt:

/huis/John/zeggen/dirTwo/dirThree/dirFour

De eerste / is de hoofdmap. Deze directory heeft directe subdirectories, inclusief de homedirectory. De homedirectory bevat de directory van de gebruiker. Als de naam van de gebruiker John is, kan hij de directory van de gebruiker John noemen. De directory van de gebruiker wordt geïdentificeerd door ~. De gebruiker kan dus het commando cd ~ gebruiken om zijn directory vanuit elke directory te bereiken. dirOne is een map die door de gebruiker is gemaakt. De gebruiker kan op dit niveau ook andere mappen aanmaken. dirTwo, dirThree en dirFour zijn submappen naar hun vorige mappen, gemaakt door de gebruiker.

De gebruiker kan de grootte van elke andere map en zijn submappen (subboom) van elke map weten, waarbij het absolute pad als argument wordt omzeild. Als schijfgebruik bijvoorbeeld nodig is,

/huis/John/zeggen/dirTwo

dan zou het commando zijn:

van -H /huis/John/zeggen/dirTwo

of

van -H~/zeggen/dirTwo

waarbij ~ staat voor de directory van de gebruiker.

Om een ​​relatief pad te gebruiken, moet de gebruiker zich al in de corresponderende bovenliggende directory bevinden. Als de prompt bijvoorbeeld wordt weergegeven,

John@gastheer:~/zeg $

wat betekent dat de gebruiker zich in de directory /home/john/dirOne bevindt, dan geeft het volgende commando hetzelfde resultaat als het bovenstaande commando:

van -HdirTwo

De paden zouden nog steeds relatief zijn. Gebruik geen argument of gebruik de punt om dezelfde informatie voor de huidige map weer te geven.

Dit schema kan worden gebruikt om de grootte van slechts één map te krijgen, de laatste in een pad (voorafgegaan door het pad). Het is mogelijk om de grootte van een map in het midden van een pad te krijgen – zie include=PATTERN hieronder.

Eindtotaal

Een totale grootte van alle betrokken directories kan worden geproduceerd. Voor de bovenstaande situatie zou het commando zijn:

van -H --totaal

schijnbare grootte

De schijnbare grootte is meestal kleiner dan het schijfgebruik. In sommige situaties is de schijnbare grootte echter groter dan het schijfgebruik; reden - zie later. De opdracht om de schijnbare afmetingen voor het bovenstaande relatieve pad te verkrijgen, zou zijn:

van -H --schijnbare-groottedirTwo

Maximale diepte

Met –max-depth=0 drukt du alleen de grootte van de huidige werkdirectory af; met du –max-depth=1, drukt du de grootte van de huidige werkmap en de grootte van alle submappen op het eerste niveau af; met –max-depth=2 drukt du de grootte af van de huidige werkmap en de grootte van al zijn submappen op het eerste niveau, en van al zijn submappen op het tweede niveau; met –max-depth=3, drukt du de grootte af van de huidige werkmap en al zijn submappen op het eerste niveau, en al zijn submappen op het tweede niveau, en van al zijn submappen op het derde niveau; dit gaat verder met toenemende waarde van max-diepte. Een voorbeeld van het gebruik ervan is:

van -H --maximale diepte=2

Het sudo-commando

Een van de mappen met zijn eigen submappen in de hoofdmap is var. Als de gebruiker typt

van -H /waar

en op Enter drukt, zal hij zich realiseren dat de toestemming voor sommige mappen is geweigerd. Dat wil zeggen, hij kan de grootte van sommige mappen niet weten. De toestemming wordt geweigerd omdat de gebruiker niet de superuser is. De supergebruiker heeft het voorrecht om de grootte (schijfgebruik) van die mappen te zien. Dus om de gebruiker dat privilege te geven, moet hij de opdracht sudo als volgt gebruiken:

sudo van -H /waar

Als de shell de gebruiker om zijn wachtwoord vraagt, moet de gebruiker het wachtwoord invoeren en op Enter drukken. Met de opdracht sudo kan de gewone gebruiker (programmeur) de grootte van alle mappen in de var-map en vergelijkbare mappen zien.

Exclusief vermeldingen op maat

De optie –threshold=SIZE staat geen directory's toe waarvan de grootte kleiner is dan SIZE. Voor het pad,

/huis/John/zeggen/dirTwo/dirThree/dirFour

met de prompt op[e-mail beveiligd]:~$, dan

van -H --drempelwaarde=12K dirOne

waar 12K 12 kilobytes betekent, wordt de regel niet weergegeven voor een map waarvan het schijfgebruik minder is dan 12K.

–exclude=PATROON

Deze optie en waarde kunnen directoryregels weglaten die de gebruiker niet in de lijst wil.

Om de regel voor de laatste map weg te laten, dirFour van het pad

/huis/John/zeggen/dirTwo/dirThree/dirFour

het commando moet zijn:

van -H --uitsluiten= zeg/dirTwo/dirThree/dirFour dirOne

Het resultaat zal iets zijn als,

4.0K dirOne/dirTwo/dirThree

8.0K dirOne/dirTwo

12K dirOne

Opmerking: de grootten omvatten niet de grootte van de map op het laatste niveau (dirFour) van het pad.

Om alleen de afmetingen van de mappen met de bovenste diepte en hun sub-bomen te hebben, moet u de mappen met de onderste diepte niet in de optie hebben. Dus met het commando

van -H --uitsluiten= zeg/dirTwo/dirThree dirOne

de output zal zoiets zijn als,

4.0K dirOne/dirTwo

8K dirOne

Opmerking: de maten zijn exclusief de maten van de onderste hendelmappen van de boom.

Overweeg nogmaals, de absolute link,

/huis/John/zeggen/dirTwo/dirThree/dirFour

Met de volgende opdracht wordt het schijfgebruik verkregen van alleen de map dirTwo, een map binnen het pad. De opdracht is:

van -H --uitsluiten=/huis/John/zeggen/dirTwo/ * /huis/John/zeggen/dirTwo

Het argument heeft alle voorgaande mappen tot aan die in kwestie. De waarde van uitsluiten heeft alle voorgaande mappen, eindigend op *, net na die in kwestie. * betekent alle subdirectories op dat niveau (en hun substructuren). Het resultaat zal iets zijn als,

5.0K/huis/John/zeggen/dirTwo

Conclusie

Proberen de grootte van een map te weten met de opdracht ls -s is misleidend. Hiermee worden alleen de metagegevens van de directory verkregen. Om het schijfgebruik van een directory te kennen, moet het commando du worden gebruikt. Bij gebruik met de optie -h zijn de groottes van de mappen leesbaar. De schijnbare grootte kan worden verkregen met behulp van de optie schijnbare grootte. Zonder enige optie en argument toont het du commando alleen de grootte van alle subdirectories van de huidige directory, inclusief die van de huidige directory. Het argument voor du is het pad, dat bij de wortel kan beginnen. Opties en sommige van hun waarden bepalen precies welke mappen worden geadresseerd. De opdracht sudo geeft de gewone gebruiker standaard superuser-privileges.