- Dave McKay
@TheGurkha
- December 19, 2019, 8:00 am EDT
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.
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.,
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 echo
en 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
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.
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.
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
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
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
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 du
for 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 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 ”