Hur Får man Storleken på en Fil eller Katalog i Linux

  • Dave McKay

    @TheGurkha

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

När du använder Linux du kommando, du kan få både den faktiska diskanvändning och den verkliga storleken på en fil eller katalog. Vi ska förklara varför dessa värden inte är desamma.

faktisk diskanvändning och sann storlek

storleken på en fil och det utrymme som den upptar på din hårddisk är sällan desamma., Diskutrymme tilldelas i block. Om en fil är mindre än ett block, är ett helt block fortfarande tilldelas det eftersom filsystemet inte har en mindre enhet av fastigheter att använda.

Om inte en fils storlek är en exakt multipel av block, måste det utrymme den använder på hårddisken alltid avrundas uppåt till nästa hela blocket. Till exempel, om en fil är större än två block men mindre än tre, tar det fortfarande tre block av utrymme för att lagra den.

annons

två mätningar används i förhållande till Filstorlek., Den första är filens faktiska storlek, vilket är antalet byte av innehåll som utgör filen. Den andra är den effektiva storleken på filen på hårddisken. Detta är antalet filsystemblock som är nödvändiga för att lagra den filen.

ett exempel

låt oss titta på ett enkelt exempel., Vi omdirigerar ett enda tecken till en fil för att skapa en liten fil:

echo "1" > geek.txt

nu använder vi listan med långa format, ls, för att titta på filens längd:

ls -l geek.txt

längden är det numeriska värdet som följer dave dave poster, vilket är två byte. Varför är det två byte när vi bara skickade ett tecken till filen? Låt oss ta en titt på vad som händer i filen.,

annonsering

vi använder kommandothexdump, vilket ger oss en exakt byte och tillåter oss att ”se” icke-utskrift tecken som hexadecimala värden. Vi kommer också att använda alternativet -C (canonical) för att tvinga utmatningen att visa hexadecimala värden i utmatningens kropp, liksom deras alfanumeriska teckenekvivalenter:

hexdump -C geek.txt

utmatningen visar oss att det, från och med offset 00000000 i filen, finns en byte som innehåller ett hexadecimalt värde på 31, och en som innehåller en hexadecimal värdet av 0A., Den högra delen av utmatningen visar dessa värden som alfanumeriska tecken, där så är möjligt.

det hexadecimala värdet på 31 används för att representera siffran ett. Det hexadecimala värdet för 0A används för att representera Linjekanalen, som inte kan visas som ett alfanumeriskt tecken, så det visas som en period (.) istället. Line Feed-tecknet läggs till av echo . Som standard startar echoen ny rad efter att den visar texten som den behöver skriva till terminalfönstret.,

det stämmer med utmatningen från ls och överensstämmer med fillängden på två byte.

relaterat: hur man använder kommandot ls för att lista filer och kataloger på Linux

annons

nu använder vi kommandot du för att titta på filstorleken:

du geek.txt

det står att storleken är fyra, men fyra av vad?

det finns block, och sedan finns det Block

När du rapporterar filstorlekar i block, storleken den använder beror på flera faktorer., Du kan ange vilken blockstorlek den ska använda på kommandoraden. Om du inte tvingar du att använda en viss blockstorlek följer den en uppsättning regler för att bestämma vilken som ska användas.

först kontrollerar den följande miljövariabler:

  • du_block_size
  • BLOCK_SIZE
  • BLOCKSIZE

om något av dessa finns är blockstorleken inställd och du slutar kontrollera. Om ingen är inställd,du standardvärden för en blockstorlek på 1 024 byte., Om inte en miljövariabel som heter POSIXLY_CORRECT är inställd. Om så är fallet,du standardvärden för ett blockstorlek på 512 byte.

annons

Så, hur får vi reda på vilken som används? Du kan kontrollera varje miljövariabel för att räkna ut det, men det finns ett snabbare sätt. Låt oss jämföra resultaten med blockstorleken som filsystemet använder istället.

för att upptäcka blockstorleken som filsystemet använder, använder vi tune2fs – programmet., Vi använder sedan alternativet -l (list superblock), rör utmatningen genom grep och skriv sedan ut rader som innehåller ordet ”Block.”

i det här exemplet tittar vi på filsystemet på den första partitionen på den första hårddisken,sda1, och vi måste användasudo:

sudo tune2fs -l /dev/sda1 | grep Block

filsystemblocksstorleken är 4 096 byte. Om vi delar upp det med resultatet vi fick fråndu (fyra) visar detdu standardblockstorleken är 1 024 byte., Vi vet nu flera viktiga saker.

annons

först vet vi den minsta mängden filsystem fastigheter som kan ägnas åt att lagra en fil är 4,096 byte. Detta innebär att även vår lilla, två-byte fil tar upp 4 KB hårddiskutrymme.

det andra att komma ihåg är program som är avsedda för rapportering på hårddisk och filsystemsstatistik, till exempel du, ls och tune2fs, kan ha olika uppfattningar om vad” block ” betyder., tune2fs programmet rapporterar blockstorlekar för true file system, medan lsochdu kan konfigureras eller tvingas använda andra blockstorlekar. Dessa blockstorlekar är inte avsedda att relatera till filsystemblocksstorleken; de är bara ”bitar” de kommandon som används i deras produktion.

slutligen, förutom att använda olika blockstorlekar, ger svaren från du och tune2fs samma innebörd., Resultatettune2fs var ett block med 4 096 byte ,och resultatetdu var fyra block med 1 024 byte.

använda du

utan kommandoradsparametrar eller alternativ,du listar det totala diskutrymme som den aktuella katalogen och alla underkataloger använder.

låt oss ta en titt på ett exempel:

du
annons

storleken rapporteras i standardblockstorleken på 1 024 byte per block. Hela underkatalog trädet korsas.,

använda du på en annan katalog

om du vill du för att rapportera på en annan katalog än den nuvarande, kan du skicka sökvägen till katalogen på kommandoraden:

du ~/.cach/evolution/

använda du på en viss fil

om du vill du för att rapportera om en viss fil, skicka sökvägen till den filen på kommandoraden., Du kan också skicka ett skalmönster till en Välj en grupp av filer, såsom *.txt:

du ~/.bash_aliases

rapportering om filer i kataloger

att ha du rapport om filerna i den aktuella katalogen och underkataloger, använd -a (alla filer) alternativ:

du -a
annons

för varje katalog rapporteras storleken på varje fil, liksom en summa för varje katalog.,

begränsa Katalogträdets djup

Du kan berätta fördu att lista katalogträdet till ett visst djup. För att göra det, använd alternativet -d (max djup) och ge ett djupvärde som parameter. Observera att alla underkataloger skannas och används för att beräkna de rapporterade totalsummorna, men de är inte alla listade. För att ställa in ett maximalt katalogdjup på en nivå, använd det här kommandot:

du -d 1

utmatningen listar den totala storleken på den underkatalogen i den aktuella katalogen och ger också totalt för var och en.,

för att lista kataloger en nivå djupare, använd det här kommandot:

du -d 2

ställa in blockstorleken

Du kan använda alternativetblock för att ställa in en blockstorlek fördu för den aktuella åtgärden.,d använd alternativet -h (läsbar) i den mest lämpliga blockstorleken enligt det diskutrymme som används av kataloger och filer, använd alternativet-h(läsbar):

du -h

för att se filens uppenbara storlek snarare än mängden hårddiskutrymme som används för att lagra filen, använd alternativet--apparent-size:

du --apparent-size
annons

Du kan kombinera detta med alternativet-a(alla) för att se den synliga storleken på varje fil:

du --apparent-size -a

varje fil är listad, tillsammans med dess skenbara storlek.,

Visa endast totalsummor

om du vill attdu bara ska rapportera totalsumman för katalogen använder du alternativet-s (sammanfatta)., Du kan också kombinera detta med andra alternativ, till exempel alternativet -h (läsbar):

du -h -s

här använder vi det med alternativet --apparent-size:

du --apparent-size -s

visar Ändringstider

för att se skapa eller senaste ändring tid och datum, använd --time alternativet:

du --time -d 2

konstiga resultat?,

om du ser konstiga resultat från du, speciellt när du korsreferensstorlekar till utgången från andra kommandon, beror det oftast på de olika blockstorlekar som olika kommandon kan ställas in på eller de som de standard. Det kan också bero på skillnaderna mellan verkliga filstorlekar och diskutrymme som krävs för att lagra dem.

om du behöver matcha utdata från andra kommandon, experimentera med alternativet--block Idu.,

Dave McKay
Dave McKay använde först datorer när stansade papperstejp var på modet, och han har programmerat sedan dess. Efter över 30 år i IT-branschen är han nu en heltidsjournalist inom teknik. Under sin karriär har han arbetat som frilansprogrammerare, chef för ett internationellt mjukvaruutvecklingsteam, en IT-tjänst projektledare och senast som dataskyddsansvarig. Dave är en Linux evangelist och öppen källkod förespråkare.Läs hela Bio ”

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *