Hoe u de grootte van een bestand of map onder Linux kunt krijgen

Een Linux-terminalvenster op een laptop in Ubuntu-stijl.
Fatmawati Achmad Zaenuri / Shutterstock

Als u de Linux du commando, verkrijgt u zowel het werkelijke schijfgebruik als de ware grootte van een bestand of directory. We leggen uit waarom deze waarden niet hetzelfde zijn.

Werkelijk schijfgebruik en ware grootte

De grootte van een bestand en de ruimte die het op uw harde schijf inneemt, zijn zelden hetzelfde. Schijfruimte wordt in blokken toegewezen. Als een bestand kleiner is dan een blok, wordt er nog steeds een heel blok aan toegewezen omdat het bestandssysteem geen kleinere eenheid onroerend goed heeft om te gebruiken.

Tenzij de grootte van een bestand een exact veelvoud van blokken is, moet de ruimte die het op de harde schijf gebruikt altijd naar boven worden afgerond naar het volgende hele blok. Als een bestand bijvoorbeeld groter is dan twee blokken maar kleiner dan drie, heeft het nog steeds drie blokken ruimte nodig om het op te slaan.

Er worden twee metingen gebruikt in relatie tot de bestandsgrootte. De eerste is de werkelijke grootte van het bestand, het aantal bytes aan inhoud waaruit het bestand bestaat. De tweede is de effectieve grootte van het bestand op de harde schijf. Dit is het aantal bestandssysteemblokken dat nodig is om dat bestand op te slaan.

Een voorbeeld

Laten we naar een eenvoudig voorbeeld kijken. We zullen een enkel teken omleiden naar een bestand om een ​​klein bestand te maken:

echo "1" > geek.txt

Het "echo" 1 "> geek.txt” commando in een terminalvenster.’ width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Nu zullen we de lange lijst gebruiken, <code>ls</code>, om naar de bestandslengte te kijken:</p>
<pre>ls -l geek.txt</pre>
<p><img decoding="async" class="alignnone wp-image-450609 size-full" src="https://www.howtogeek.com/wp-content/uploads/2019/12/31.png" alt=

De lengte is de numerieke waarde die volgt op de dave dave ingangen, wat twee bytes is. Waarom zijn het twee bytes als we maar één teken naar het bestand hebben gestuurd? Laten we eens kijken wat er in het bestand gebeurt.

We gebruiken de hexdump commando, dat ons een exact aantal bytes geeft en ons in staat stelt om niet-afdrukbare tekens als hexadecimale waarden te “zien”. We gebruiken ook de -C (canonieke) optie om de uitvoer te dwingen hexadecimale waarden weer te geven in de hoofdtekst van de uitvoer, evenals hun alfanumerieke tekenequivalenten:

hexdump -C geek.txt

Het "hexdump -C geek.txt" commando in een terminalvenster.

De uitvoer laat ons zien dat, beginnend bij offset 00000000 in het bestand, er een byte is met een hexadecimale waarde van 31, en een met een hexadecimale waarde van 0A. Het rechtergedeelte van de uitvoer geeft deze waarden waar mogelijk weer als alfanumerieke tekens.

De hexadecimale waarde van 31 wordt gebruikt om het cijfer één weer te geven. De hexadecimale waarde van 0A wordt gebruikt om het Line Feed-teken weer te geven, dat niet kan worden weergegeven als een alfanumeriek teken, maar wordt in plaats daarvan als een punt (.) Weergegeven. Het Line Feed-teken wordt toegevoegd door echo . Standaard, echobegint een nieuwe regel nadat het de tekst weergeeft die nodig is om naar het terminalvenster te schrijven.

Dat komt overeen met de output van ls en gaat akkoord met de bestandslengte van twee bytes.

VERWANT: Hoe de ls-opdracht te gebruiken om bestanden en mappen op Linux weer te geven

Nu zullen we de du commando om naar de bestandsgrootte te kijken:

du geek.txt

Het "du geek.txt" commando in een terminalvenster.

Er staat dat de maat vier is, maar waarvan vier?

Er zijn blokken en dan zijn er blokken

Wanneer du rapporteert bestandsgroottes in blokken, de gebruikte grootte is afhankelijk van verschillende factoren. U kunt op de opdrachtregel specificeren welke blokgrootte het moet gebruiken. Als je niet forceert du om een ​​bepaalde blokgrootte te gebruiken, volgt het een reeks regels om te beslissen welke moet worden gebruikt.

Ten eerste controleert het de volgende omgevingsvariabelen:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOKGROOTTE

Als een van deze bestaat, wordt de blokgrootte ingesteld, en du stopt met controleren. Als er geen zijn ingesteld, du standaard ingesteld op een blokgrootte van 1024 bytes. Tenzij, dat wil zeggen, een omgevingsvariabele genaamd POSIXLY_CORRECT is ingesteld. Als dat het geval is, du standaard ingesteld op een blokgrootte van 512 bytes.

Dus, hoe kunnen we erachter komen welke in gebruik is? U kunt elke omgevingsvariabele controleren om erachter te komen, maar er is een snellere manier. Laten we de resultaten vergelijken met de blokgrootte die het bestandssysteem in plaats daarvan gebruikt.

Om de blokgrootte te ontdekken die het bestandssysteem gebruikt, gebruiken we de tune2fs programma. We gebruiken dan de -l (lijst superblok) optie, leid de uitvoer door grepen druk vervolgens regels af die het woord ‘Block’ bevatten.

In dit voorbeeld kijken we naar het bestandssysteem op de eerste partitie van de eerste harde schijf, sda1, en we zullen moeten gebruiken sudo:

sudo tune2fs -l /dev/sda1 | grep Block

Het "sudo tune2fs -l / dev / sda1 | grep Block" commando in een terminalvenster.

De blokgrootte van het bestandssysteem is 4.096 bytes. Als we dat delen door het resultaat dat we hebben gekregen du (vier), het toont de du standaard blokgrootte is 1024 bytes. We weten nu een aantal belangrijke dingen.

Ten eerste weten we dat de kleinste hoeveelheid bestandssysteemvastgoed dat kan worden besteed aan het opslaan van een bestand 4.096 bytes is. Dit betekent dat zelfs ons kleine bestand van twee bytes 4 KB ruimte op de harde schijf in beslag neemt.

Het tweede dat u in gedachten moet houden, zijn toepassingen die zijn bedoeld voor rapportage over statistieken van de harde schijf en bestandssysteem, zoals du, ls, en tune2fs, kunnen verschillende opvattingen hebben over wat “blokkeren” betekent. De tune2fs applicatie rapporteert echte blokgroottes van het bestandssysteem, terwijl ls en du kan worden geconfigureerd of gedwongen om andere blokgroottes te gebruiken. Die blokgroottes zijn niet bedoeld om te relateren aan de blokgrootte van het bestandssysteem; het zijn gewoon “brokken” die deze commando’s gebruiken in hun uitvoer.

Ten slotte, behalve het gebruik van verschillende blokgroottes, zijn de antwoorden van du en tune2fs brengen dezelfde betekenis over. De tune2fs resultaat was een blok van 4.096 bytes, en de du resultaat was vier blokken van 1024 bytes.

Gebruik makend van du

Zonder opdrachtregelparameters of opties, du geeft de totale schijfruimte weer die de huidige map en alle submappen gebruiken.

Laten we een voorbeeld bekijken:

du

Het "du" commando in een terminalvenster.

De grootte wordt gerapporteerd in de standaard blokgrootte van 1024 bytes per blok. De volledige submapboom wordt doorlopen.

Gebruik makend van du op een andere directory

Als je wil du om te rapporteren over een andere map dan de huidige, kunt u het pad naar de map op de opdrachtregel doorgeven:

du ~/.cach/evolution/

Het "du ~ / .cach / evolution /" commando in een terminalvenster.

Gebruik makend van du op een specifiek bestand

Als je wil du om over een specifiek bestand te rapporteren, geeft u het pad naar dat bestand op de opdrachtregel door. U kunt ook een shell-patroon doorgeven aan een geselecteerde groep bestanden, zoals *.txt:

du ~/.bash_aliases

Het "du ~ / .bash_aliases" commando in een terminalvenster.

Rapporteren over bestanden in telefoonboeken

Hebben du rapport over de bestanden in de huidige map en submappen, gebruik de -a (alle bestanden) optie:

du -a

Het "du -a" commando in een terminalvenster.

Voor elke map wordt de grootte van elk bestand gerapporteerd, evenals een totaal voor elke map.

Uitvoer van een "du -a" -commando in een terminalvenster.

De diepte van de directorystructuur beperken

Je kunt het zien du om de directorystructuur tot een bepaalde diepte weer te geven. Gebruik hiervoor de -d (max diepte) optie en geef een dieptewaarde op als parameter. Merk op dat alle submappen worden gescand en gebruikt om de gerapporteerde totalen te berekenen, maar ze worden niet allemaal vermeld. Gebruik deze opdracht om een ​​maximale mapdiepte van één niveau in te stellen:

du -d 1

Het "du -d 1" commando in een terminalvenster.

De uitvoer toont de totale grootte van die submap in de huidige map en geeft ook een totaal voor elke map.

Gebruik deze opdracht om mappen een niveau dieper weer te geven:

du -d 2

Het "du -d 2" commando in een terminalvenster.

De blokgrootte instellen

U kunt de block optie om een ​​blokgrootte in te stellen voor du voor de huidige bewerking. Om een ​​blokgrootte van één byte te gebruiken, gebruikt u de volgende opdracht om de exacte grootte van de mappen en bestanden te krijgen:

du --block=1

Het "du --block = 1" commando in een terminalvenster.

Als u een blokgrootte van één megabyte wilt gebruiken, kunt u de -m (megabyte) optie, die hetzelfde is als --block=1M:

du -m

Het "du -m" commando in een terminalvenster.

Als u de grootten wilt die worden vermeld in de meest geschikte blokgrootte volgens de schijfruimte die wordt gebruikt door de mappen en bestanden, gebruikt u de -h (door mensen leesbare) optie:

du -h

Het "du -h" commando in een terminalvenster.

Om de schijnbare grootte van het bestand te zien in plaats van de hoeveelheid ruimte op de harde schijf die wordt gebruikt om het bestand op te slaan, gebruikt u de --apparent-size optie:

du --apparent-size

Het "du --apparent-size" commando in een terminalvenster.

U kunt dit combineren met de -a (alles) optie om de schijnbare grootte van elk bestand te zien:

du --apparent-size -a

Het "du --apparent-size -a" commando in een terminalvenster.

Elk bestand wordt vermeld, samen met de schijnbare grootte.

Uitvoer van het "du --apparent-size -a" commando in een terminalvenster.

Alleen totalen weergeven

Als je wil du om alleen het totaal voor de directory te rapporteren, gebruikt u de -s (vat samen) optie. U kunt dit ook combineren met andere opties, zoals de -h (door mensen leesbare) optie:

du -h -s

Het "du -h -s" commando in een terminalvenster.

Hier gebruiken we het met de --apparent-size optie:

du --apparent-size -s

Het "du --apparent-size -s" commando in een terminalvenster.

Wijzigingstijden weergeven

Om de tijd en datum van de aanmaak of laatste wijziging te zien, gebruikt u de --time optie:

du --time -d 2

Het "du --time -d 2" commando in een terminalvenster.

Vreemde resultaten?

Als je vreemde resultaten ziet van du , vooral als je een kruisverwijzing maakt naar de uitvoer van andere commando’s, is dit meestal te wijten aan de verschillende blokgroottes waarop verschillende commando’s kunnen worden ingesteld of die waarvoor ze standaard zijn. Het kan ook te wijten zijn aan de verschillen tussen de werkelijke bestandsgroottes en de schijfruimte die nodig is om ze op te slaan.

Als u de uitvoer van andere opdrachten wilt matchen, experimenteer dan met de --block optie in du.

Nieuwste artikelen

spot_img

Related Stories

Leave A Reply

Vul alstublieft uw commentaar in!
Vul hier uw naam in