Hoe te Krijgen van de Grootte van een Bestand of Map in Linux

  • Dave McKay

    @TheGurkha

  • 19 December 2019, 8:00 uur EDT
Fatmawati Achmad Zaenuri/

Wanneer u de Linux du commando om zowel de feitelijke schijfgebruik en de ware grootte van een bestand of directory. We zullen uitleggen waarom deze waarden niet hetzelfde zijn.

feitelijk schijfgebruik en ware grootte

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

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

advertentie

twee metingen worden gebruikt in relatie tot de bestandsgrootte., De eerste is de werkelijke grootte van het bestand, dat is het aantal bytes van de inhoud die deel uitmaken van het bestand. 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 eens kijken naar een eenvoudig voorbeeld., We zullen een enkel teken omleiden naar een bestand om een klein bestand aan te maken:

echo "1" > geek.txt

nu zullen we de lange lijst gebruiken, ls, om te kijken naar de lengte van het bestand:

ls -l geek.txt

De lengte is de numerieke waarde die volgt op de dave dave entries, dat is twee bytes. Waarom zijn het twee bytes als we maar één karakter naar het bestand sturen? Laten we eens kijken wat er in het dossier gebeurt.,

advertentie

we gebruiken het hexdump commando, dat ons een exacte byte telling geeft en ons toestaat om niet-afdrukbare tekens Als hexadecimale waarden te” zien”. We zullen ook gebruik maken van de -C (canonieke) optie om de uitvoer aan te tonen hexadecimale waarden in het lichaam van de output, evenals hun alfanumeriek teken equivalenten:

hexdump -C geek.txt

De uitvoer toont ons dat, begin bij offset 00000000 in de file, er is een byte die de hexadecimale waarde van 31, en één die de hexadecimale waarde van 0A., Het rechtergedeelte van de uitvoer toont deze waarden waar mogelijk als alfanumerieke tekens.

de hexadecimale waarde van 31 wordt gebruikt om het cijfer 1 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, dus het wordt weergegeven als een periode (.) daarvan. Het line Feed-teken wordt toegevoegd door echo . Standaard start echoeen nieuwe regel nadat deze de tekst weergeeft die het nodig heeft om naar het terminalvenster te schrijven.,

die overeenkomt met de uitvoer van ls en komt overeen met de bestandslengte van twee bytes.

gerelateerd: hoe het ls Commando te gebruiken om bestanden en mappen op Linux weer te geven

advertentie

nu gebruiken we het du commando om naar de bestandsgrootte te kijken:

du geek.txt

Het zegt dat de grootte vier is, maar vier van wat?

er zijn blokken, en dan zijn er blokken

wanneer du bestandsgroottes in blokken rapporteert, hangt de grootte ervan af van verschillende factoren., U kunt opgeven welke blokgrootte het moet gebruiken op de opdrachtregel. Als u du niet forceert om een bepaalde blokgrootte te gebruiken, volgt een set regels om te beslissen welke te gebruiken.

eerst controleert het de volgende omgevingsvariabelen:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

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

advertentie

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

om de blokgrootte te ontdekken die het bestandssysteem gebruikt, gebruiken we het tune2fs programma., We zullen dan de -l (list superblock) optie gebruiken, de uitvoer doorsluizen naar grep, en dan regels afdrukken die het woord “Block bevatten.”

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

sudo tune2fs -l /dev/sda1 | grep Block

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

advertentie

Ten eerste weten we dat de kleinste hoeveelheid vastgoed van het bestandssysteem die kan worden besteed aan het opslaan van een bestand 4.096 bytes is. Dit betekent dat zelfs onze kleine, twee-byte bestand neemt 4 KB van de harde schijf ruimte.

het tweede ding om in gedachten te houden is toepassingen gewijd aan het rapporteren over harde schijf en bestandssysteem statistieken, zoals du, ls, en tune2fs, kunnen verschillende noties hebben van wat “block” betekent., De toepassing tune2fs rapporteert echte blokgroottes voor bestandssystemen, terwijl ls en du geconfigureerd of gedwongen kan worden andere blokgroottes te gebruiken. Deze blokgroottes zijn niet bedoeld om te relateren aan de blokgrootte van het bestandssysteem; ze zijn gewoon “brokken” die commando ‘ s gebruiken in hun uitvoer.

ten slotte geven de antwoorden vandu entune2fs dezelfde betekenis., Het tune2fs resultaat was één blok van 4.096 bytes, en het du resultaat was vier blokken van 1.024 bytes.

met du

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

laten we een voorbeeld bekijken:

du
advertentie

De grootte wordt gerapporteerd in de standaard blokgrootte van 1.024 bytes per blok. De hele subdirectory boom wordt doorkruist.,

du gebruiken op een andere map

als u wilt dat du rapporteert op een andere map dan de huidige, kunt u het pad naar de map doorgeven op de opdrachtregel:

du ~/.cach/evolution/

du gebruiken op een specifiek bestand

als u Als u een specifiek bestand wilt rapporteren, geeft u het pad naar dat bestand door op de commandoregel., U kunt ook langs een shell patroon voor een selecte groep van bestanden, zoals *.txt:

du ~/.bash_aliases

de Rapportage over de Bestanden in de Directories

Om du verslag van de bestanden in de huidige map en sub-mappen gebruik de -a (alle bestanden) optie:

du -a
Advertentie

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

Mapboomdiepte beperken

u kunt du vertellen om de mapboom tot een bepaalde diepte te tonen. Gebruik hiervoor de optie -d (max depth) en geef een dieptewaarde als parameter. Merk op dat alle submappen worden gescand en gebruikt om de gerapporteerde totalen te berekenen, maar ze zijn niet allemaal vermeld. Om een maximale mapdiepte van één niveau in te stellen, gebruik je het volgende commando:

du -d 1

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

om mappen een niveau dieper te tonen, gebruik je dit commando:

du -d 2

het instellen van de blokgrootte

u kunt de block optie gebruiken om een blokgrootte in te stellen voor du voor de huidige operatie.,d in de meest geschikte grootte van het blok volgens de schijf ruimte gebruikt door de mappen en bestanden, het gebruik van de -h (human-readable) optie:

du -h

Om de schijnbare grootte van het bestand in plaats van de hoeveelheid ruimte op de harde schijf gebruikt voor het opslaan van het bestand, gebruik je de --apparent-size optie:

du --apparent-size
Advertentie

U kunt dit combineren met de -a (alle) mogelijkheid om de schijnbare grootte van elk bestand:

du --apparent-size -a

Elk bestand wordt vermeld, samen met de schijnbare grootte.,

alleen totalen weergeven

als u wilt du om alleen het totaal voor de map te rapporteren, gebruikt u de optie -s (summarize)., Ook kunt u dit combineren met andere opties, zoals de -h (human-readable) optie:

du -h -s

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

du --apparent-size -s

het Weergeven van Wijziging Keer

Om de schepping of van de laatste wijziging van datum en tijd, gebruik de --time optie:

du --time -d 2

Vreemde Resultaten?,

als je vreemde resultaten ziet van du , vooral als je groottes kruist naar de uitvoer van andere commando ‘s, dan is dat meestal te wijten aan de verschillende blokgroottes waarop verschillende commando’ s kunnen worden ingesteld of aan die waarop ze standaard staan. Het kan ook te wijten zijn aan de verschillen tussen echte bestandsgroottes en de benodigde schijfruimte om ze op te slaan.

Als u de uitvoer van andere commando ‘ s wilt matchen, experimenteer dan met de optie --block In du.,

Dave McKay Dave McKay gebruikte voor het eerst computers toen geponste papieren tape in de mode was, en sindsdien is hij aan het programmeren. Na meer dan 30 jaar in de IT-industrie, is hij nu een fulltime technologie journalist. Tijdens zijn carrière werkte hij als freelance programmeur, manager van een internationaal softwareontwikkelingsteam, IT-serviceprojectmanager en recentelijk als functionaris voor gegevensbescherming. Dave is een Linux evangelist en open source advocaat.Volledige Bio lezen ”

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *