Hvordan for at Få Størrelsen på en Fil eller Mappe i Linux

  • Dave McKay

    @TheGurkha

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

Når du bruger Linux du kommando, får du både den faktiske brug af diske og den sande størrelse af en fil eller mappe. Vi forklarer, hvorfor disse værdier ikke er de samme.

faktisk diskbrug og ægte størrelse

størrelsen på en fil og den plads, den optager på din harddisk, er sjældent den samme., Diskplads er tildelt i blokke. Hvis en fil er mindre end en blok, er en hel blok stadig tildelt det, fordi filsystemet ikke har en mindre enhed af fast ejendom til at bruge.

medmindre en fils størrelse er et nøjagtigt multiplum af blokke, skal den plads, den bruger på harddisken, altid afrundes til den næste hele blok. For eksempel, hvis en fil er større end to blokke, men mindre end tre, tager det stadig tre blokke plads til at gemme den.

annonce

to målinger anvendes i forhold til Filstørrelse., Den første er den faktiske størrelse af filen, hvilket er antallet af byte af indhold, der udgør filen. Den anden er den effektive størrelse af filen på harddisken. Dette er antallet af filsystemblokke, der er nødvendige for at gemme den pågældende fil.

et eksempel

lad os se på et simpelt eksempel., Vi vil omdirigere et enkelt tegn i en fil for at oprette en lille fil:

echo "1" > geek.txt

Nu, vi vil bruge det lange format notering, ls, at se på den fil, længde:

ls -l geek.txt

længden er den numeriske værdi, der følger dave dave poster, som er to bytes. Hvorfor er det to bytes, når vi kun sendte et tegn til filen? Lad os se på, hvad der sker inde i filen.,

annonce

Vi bruger kommandoenhexdump, som giver os et nøjagtigt byte-antal og giver os mulighed for at “se” ikke-udskrivende tegn som HE .adecimale værdier. Vi vil også bruge -C (kanoniske) mulighed for at tvinge output til at vise hexadecimale værdier i kroppen af produktionen, samt deres alfanumeriske tegn ækvivalenter:

hexdump -C geek.txt

output viser os, at starten på offset 00000000 i den fil, der er en byte, der indeholder en hexadecimal værdi 31, og et, der indeholder en hexadecimal værdi af 0A., Den højre del af output viser disse værdier som alfanumeriske tegn, hvor det er muligt.

den he .adecimale værdi på 31 bruges til at repræsentere cifferet. Den he .adecimale værdi af 0A bruges til at repræsentere Linjefødningstegnet, som ikke kan vises som et alfanumerisk tegn, så det vises som en periode (.) derimod. Linjefødningstegnet tilføjes af echo . Som standard starter echoen ny linje, når den viser den tekst, den skal skrive til terminalvinduet.,

, der stemmer overens med output fra ls og er enig med fill længden af to bytes.

RELATERET: Sådan Bruger Kommandoen ls for at Liste Filer og Mapper på Linux

Reklame

Nu, vi vil bruge du kommandoen til at se på den fil størrelse:

du geek.txt

Det siger størrelse er fire, men fire af hvad?

der er blokke, og så er der blokke

Når du rapporterer filstørrelser i blokke, afhænger størrelsen, den bruger, af flere faktorer., Du kan angive, hvilken blokstørrelse den skal bruge på kommandolinjen. Hvis du ikke tvinger du til at bruge en bestemt blokstørrelse, følger det et sæt regler for at bestemme, hvilken der skal bruges.

for det Første kontrol følgende miljøvariabler:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Hvis nogen af disse eksisterer, blok størrelse er indstillet, og du stopper kontrol. Hvis ingen er indstillet, du standard til en blokstørrelse på 1,024 bytes., Medmindre det vil sige en miljøvariabel kaldet POSIXLY_CORRECT er indstillet. Hvis det er tilfældet, du standard til en blokstørrelse på 512 bytes.

annonce

så hvordan finder vi ud af, hvilken der er i brug? Du kan tjekke hver miljøvariabel for at finde ud af det, men der er en hurtigere måde. Lad os sammenligne resultaterne med den blokstørrelse, som filsystemet bruger i stedet.

for at finde den blokstørrelse, som filsystemet bruger, bruger vi tune2fs – programmet., Vi bruger derefter indstillingen -l (list superblock), rør udgangen gennem grep, og udskriv derefter linjer, der indeholder ordet “blok.”

I dette eksempel, vil vi se på filsystemet på den første partition på den første harddisk, sda1, og vi bliver nødt til at bruge sudo:

sudo tune2fs -l /dev/sda1 | grep Block

file system blok størrelse er 4.096 byte. Hvis vi deler det med det resultat, vi fik fra du (fire), viser det du standardblokstørrelse er 1,024 bytes., Vi ved nu flere vigtige ting.

annonce

først, vi kender den mindste mængde af filsystemet fast ejendom, der kan afsættes til lagring af en fil er 4.096 bytes. Det betyder, at selv vores lille, to-byte fil optager 4 KB harddiskplads.

Den anden ting at holde i tankerne er programmer, der er dedikeret til rapportering om harddisk og filsystem i en statistik, som f.eks. du ls og tune2fs, kan have forskellige opfattelser af, hvad “blok” betyder., Programmettune2fs rapporterer om ægte filsystemblokstørrelser, mens ls og du kan konfigureres eller tvinges til at bruge andre blokstørrelser. Disse blokstørrelser er ikke beregnet til at forholde sig til filsystemets blokstørrelse; de er bare “bidder”, som disse kommandoer bruger i deres output.

endelig, bortset fra at bruge forskellige blokstørrelser, giver svarene fra du og tune2fs den samme betydning., tune2fs resultatet var en blok af 4,096 bytes, ogdu resultatet var fire blokke af 1,024 bytes.

brug af du

uden kommandolinjeparametre eller indstillinger viser du den samlede diskplads, som den aktuelle mappe og alle undermapper bruger.

lad os se på et eksempel:

du
annonce

størrelsen rapporteres i standardblokstørrelsen på 1,024 bytes pr. Hele undermappen træet er gennemkøres.,

Bruger du på en Anden Mappe

Hvis du ønsker du for at rapportere om en anden mappe end den nuværende, du kan passere stien til den mappe på kommandolinjen:

du ~/.cach/evolution/

Bruger du om en Bestemt Fil

Hvis du ønsker du for at rapportere om en bestemt fil, passere stien til denne fil på kommandolinjen., Du kan også forbi en shell-mønster til en udvalgt gruppe af filer, som f.eks. *.txt:

du ~/.bash_aliases

Rapportering om Filer i Mapper

har du rapport om filer i den aktuelle mappe og undermapper, brug -a (alle filer):

du -a
Reklame

For hver mappe, skal størrelsen af hver fil, der er rapporteret, samt en total for hver mappe.,

begrænsning af Mappetræets dybde

Du kan fortælledu for at liste mappetræet til en bestemt dybde. For at gøre det skal du bruge indstillingen -d (ma.depth) og give en dybdeværdi som parameter. Bemærk, at alle undermapper scannes og bruges til at beregne de rapporterede totaler, men de vises ikke alle. For at indstille en maksimal bibliotek dybde på et niveau, skal du bruge denne kommando:

du -d 1

output angiver det samlede størrelse af denne undermappe i den aktuelle mappe og giver også et samlet beløb for hver enkelt.,

Til listen mapper et niveau dybere, skal du bruge denne kommando:

du -d 2

Indstilling af Blok Størrelse

Du kan bruge block mulighed for at indstille en blokstørrelse for du for den nuværende drift.,d i den mest hensigtsmæssige blok størrelse i henhold til den diskplads, der anvendes af de mapper og filer, skal du bruge -h (læsbar) indstilling:

du -h

for At se den tilsyneladende størrelse af filen, snarere end den mængde plads på harddisken, der bruges til at gemme filen, skal du bruge --apparent-size mulighed:

du --apparent-size
Reklame

Du kan kombinere dette med -a (alle) mulighed for at se den tilsyneladende størrelse af hver fil:

du --apparent-size -a

Hver fil er angivet, sammen med sin tilsyneladende størrelse.,

viser kun totaler

Hvis du vil dufor kun at rapportere summen for mappen, skal du bruge indstillingen -s (opsummere)., Du kan også kombinere denne med andre muligheder, såsom -h (læsbar) indstilling:

du -h -s

Her bruger vi det med --apparent-size mulighed:

du --apparent-size -s

Visning af Ændring Times

for At se oprettelse eller seneste ændring af tid og dato, skal du bruge --time funktion:

du --time -d 2

Mærkelige Resultater?,

Hvis du ser mærkelige resultater fra du , især når du cross-reference størrelser til output fra andre kommandoer, er det normalt på grund af de forskellige blok størrelser, som forskellige kommandoer, der kan indstilles, eller dem, som de som standard. Det kan også skyldes forskellene mellem reelle filstørrelser og den diskplads, der kræves for at gemme dem.

Hvis du har brug for at matche produktionen af andre kommandoer, eksperimentere med --block i du.,

Dave McKay
Dave McKay brugte først computere, da stanset papirbånd var på mode, og han har programmeret lige siden. Efter over 30 år i IT-branchen er han nu en fuldtids teknologijournalist. I løbet af sin karriere har han arbejdet som freelance-programmør, leder af et internationalt soft .areudviklingsteam, en projektleder for IT-tjenester og senest som databeskyttelsesansvarlig. Dave er en Linu.evangelist og open source fortaler.Læs hele Bio ”

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *