Tiedoston tai hakemiston koon saaminen Linuxissa

Kun käytät Linux- dukomentoa, saat sekä todellisen levynkäytön että tiedoston tai hakemiston todellisen koon. Selitämme, miksi nämä arvot eivät ole samat.

Todellinen levyn käyttö ja todellinen koko

Tiedoston koko ja kiintolevyllä oleva tila ovat harvoin samat. Levytila ​​jaetaan lohkoina. Jos tiedosto on pienempi kuin lohko, sille varataan edelleen koko lohko, koska tiedostojärjestelmässä ei ole pienempää kiinteistöyksikköä käytettäväksi.

Ellei tiedoston koko ole tarkka kerrannaislohko, sen kiintolevyllä käyttämä tila on aina pyöristettävä ylöspäin seuraavaan kokonaiseen lohkoon. Esimerkiksi, jos tiedosto on suurempi kuin kaksi lohkoa, mutta pienempi kuin kolme, sen tallentaminen vie silti kolme lohkoa tilaa.

Tiedoston kokoon nähden käytetään kahta mittausta. Ensimmäinen on tiedoston todellinen koko, joka on tiedoston muodostavan sisällön tavujen lukumäärä. Toinen on kiintolevyllä olevan tiedoston todellinen koko. Tämä on tiedostojärjestelmän lohkojen määrä, joka tarvitaan kyseisen tiedoston tallentamiseen.

Esimerkki

Katsotaanpa yksinkertaista esimerkkiä. Ohjaamme yhden merkin tiedostoon pienen tiedoston luomiseksi:

echo "1"> geek.txt

Seuraavaksi käytämme pitkämuotoista luetteloa,  lstiedostojen pituuden tarkasteluun:

ls-geek.txt

Pituus on dave dave  merkintöjä seuraava numeerinen arvo , joka on kaksi tavua. Miksi se on kaksi tavua, kun lähetimme tiedostoon vain yhden merkin? Katsotaanpa, mitä tiedoston sisällä tapahtuu.

Käytämme hexdumpkomentoa, joka antaa meille tarkan tavumäärän ja antaa meidän "nähdä" ei-tulostettavat merkit heksadesimaaliarvoina. Käytämme myös -C(kanonista) -vaihtoehtoa pakottaaksemme lähdön näyttämään heksadesimaaliarvot tuotoksen rungossa sekä niiden aakkosnumeeriset merkkiekvivalentit:

hexdump -C geek.txt

Lähtö osoittaa meille, että tiedostossa 00000000 siirtymästä alkaen on tavu, joka sisältää heksadesimaaliarvon 31, ja yksi, joka sisältää heksadesimaaliarvon 0A. Lähdön oikeanpuoleinen osa kuvaa nämä arvot aakkosnumeerisina merkkeinä aina kun mahdollista.

Heksadesimaaliarvoa 31 käytetään numeron edustamiseen. 0A: n heksadesimaaliarvoa käytetään edustamaan rivinvaihtomerkkiä, jota ei voida näyttää aakkosnumeerisena merkkinä, joten se näkyy sen sijaan pisteenä (.). Rivinvaihtomerkki lisätään echo. echoAloittaa oletusarvoisesti  uuden rivin, kun se näyttää kirjoitettavan tekstin pääteikkunaan.

Se on  ls yhtä suuri kuin kahden tavun tiedostopituus ja on samaa mieltä.

RELATED: Kuinka käyttää ls-komentoa tiedostojen ja hakemistojen luettelointiin Linuxissa

Nyt käytämme dukomentoa tiedostokoon tarkastelemiseen:

du geek.txt

Siinä sanotaan, että koko on neljä, mutta neljä mitä?

On lohkoja ja sitten on lohkoja

Kun du raportoidaan tiedostokoot lohkoina, sen käyttämä koko riippuu useista tekijöistä. Voit määrittää, mitä lohkokokoa sen tulisi käyttää komentorivillä. Jos et pakota dukäyttämään tiettyä lohkokokoa, se päättää käytettävästä joukosta sääntöjä.

Ensinnäkin se tarkistaa seuraavat ympäristömuuttujat:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Jos jokin näistä on olemassa, lohkon koko asetetaan ja dulopettaa tarkistamisen. Jos mitään ei ole asetettu,  duoletusarvoisesti lohkokoko on 1024 tavua. Ellei toisin POSIXLY_CORRECTsanoen aseteta ympäristömuuttujaa . Jos näin on, duoletuksena on 512 tavun lohkokoko.

Joten miten voimme selvittää, mikä on käytössä? Voit tarkistaa jokaisen ympäristömuuttujan sen selvittämiseksi, mutta on nopeampi tapa. Verrataan tuloksia sen lohkon kokoon, jota tiedostojärjestelmä käyttää sen sijaan.

Löydämme tiedostojärjestelmän käyttämän lohkon koon käyttämällä tune2fsohjelmaa. Käytämme sitten -l(list superblock) -vaihtoehtoa, syötämme lähdön läpi grepja tulostamme sitten rivit, jotka sisältävät sanan Estä.

Tässä esimerkissä tarkastelemme ensimmäisen kiintolevyn ensimmäisen osion tiedostojärjestelmää sda1, ja meidän on käytettävä sudo:

sudo tune2fs -l / dev / sda1 | grep Estä

Tiedostojärjestelmän lohkokoko on 4096 tavua. Jos jaamme sen tuloksella, jonka saimme du (neljästä), se näyttää  du oletuslohkon koon olevan 1024 tavua. Tiedämme nyt useita tärkeitä asioita.

Ensinnäkin tiedämme, että pienin määrä tiedostojärjestelmän kiinteistöjä, jotka voidaan käyttää tiedoston tallentamiseen, on 4096 tavua. Tämä tarkoittaa, että jopa pieni, kaksitavuinen tiedosto vie 4 kt kiintolevytilaa.

Toinen asia pitää mielessä on sovelluksia omistettu raportointiin kiintolevyn ja tiedostojärjestelmän tilastoja, kuten du, lsja  tune2fsvoi olla erilaisia käsityksiä siitä, mitä ”lohkolla”. tune2fsSovellus raportoi todellinen tiedostojärjestelmä lohkon kokoa, kun taas  lsja duvoidaan konfiguroida tai pakko käyttää muita lohkon kokoja. Näiden lohkokokojen ei ole tarkoitettu liittyvän tiedostojärjestelmän lohkokokoon; ne ovat vain "paloja", joita komennot käyttävät tuotannossaan.

Lopuksi, lukuun ottamatta eri lohkokokojen käyttöä, vastaukset duja tune2fs välittävät saman merkityksen. tune2fsTulos oli yksi lohkon 4096 tavua, ja dutulos oli neljä lohkoa 1024 tavua.

Käyttämällä du

Ilman komentoriviparametreja tai -vaihtoehtoja, duluettelo nykyisen hakemiston ja kaikkien käyttämien alihakemistojen koko levytilasta.

Katsotaanpa esimerkkiä:

du

Koko ilmoitetaan oletuslohkon koon ollessa 1024 tavua lohkoa kohden. Koko alihakemistopuu kulkee läpi.

Käyttäminen dueri hakemistossa

Jos haluat  du raportoida eri hakemistosta kuin nykyinen, voit siirtää polun hakemistoon komentorivillä:

du ~ / .cach / evolution /

Käyttäminen dutietyssä tiedostossa

Jos haluat  du raportoida tietystä tiedostosta, välitä polku tiedostoon komentoriviltä. Voit myös välittää kuorimallin valitulle tiedostoryhmälle, kuten *.txt:

du ~ / .bash_aliases

Hakemistojen tiedostoista raportointi

Jos haluat saada duraportin nykyisen hakemiston ja alihakemistojen -atiedostoista , käytä (kaikki tiedostot) -vaihtoehtoa:

du -a

Jokaisen hakemiston osalta ilmoitetaan kunkin tiedoston koko sekä kunkin hakemiston kokonaismäärä.

Hakemistopuun syvyyden rajoittaminen

Voit dukäydä luetteloimaan hakemistopuun tietyn syvyyden. Voit tehdä tämän käyttämällä vaihtoehtoa -d(suurin syvyys) ja antamalla parametriksi syvyysarvo. Huomaa, että kaikki alihakemistot skannataan ja niitä käytetään raportoitujen kokonaissummien laskemiseen, mutta ne eivät ole kaikkia. Määritä yhden tason hakemiston enimmäissyvyys käyttämällä tätä komentoa:

du -d 1

Lähdössä luetellaan kyseisen alihakemiston koko nykyisessä hakemistossa ja annetaan myös summa kullekin.

Jos haluat luetteloida hakemistot yhden tason syvemmälle, käytä tätä komentoa:

du -d 2

Lohkon koon asettaminen

Voit käyttää blockvaihtoehtoa asettaa lohkokoko du nykyiselle toiminnolle. Voit käyttää yhden tavun lohkokokoa seuraavalla komennolla saadaksesi hakemistojen ja tiedostojen tarkat koot:

du --block = 1

Jos haluat käyttää yhden megatavun lohkokokoa, voit käyttää -m(megatavua) -vaihtoehtoa, joka on sama kuin --block=1M:

du -m

Jos haluat, että koot ilmoitetaan sopivimmalla lohkokoolla hakemistojen ja tiedostojen käyttämän levytilan mukaan, käytä -h(ihmisen luettavissa) -vaihtoehtoa:

du-h

Nähdä näennäinen tiedoston koko pikemmin kuin määrä kiintolevytilaa käytetään tallentaa tiedoston, käytä --apparent-sizevaihtoehtoa:

du - ilmeinen koko

Voit yhdistää tämän -a(kaikki) -vaihtoehtoon nähdäksesi kunkin tiedoston näennäiskoon:

du - näennäiskokoinen -a

Jokainen tiedosto ja sen näennäinen koko on luettelossa.

Näytetään vain summat

Jos haluat  du raportoida vain hakemiston kokonaismäärän, käytä -s(yhteenveto) -vaihtoehtoa. Voit myös yhdistää tämän muihin vaihtoehtoihin, kuten -h(ihmisen luettavissa olevaan) vaihtoehtoon:

du -h -s

Tässä käytämme sitä --apparent-sizevaihtoehdolla:

du - näkyvä koko -s

Näytetään muutosajat

Jos haluat nähdä luomisen tai viimeisen muokkauksen ajan ja päivämäärän, käytä --timevaihtoehtoa:

du - aika-d 2

Outoja tuloksia?

Jos näet outoja tuloksia du, varsinkin kun ristiviittaat koot muiden komentojen lähtöön, se johtuu yleensä erilaisista lohkokokoista, joihin eri komennot voidaan asettaa tai jotka oletuksena. Se voi johtua myös todellisten tiedostokokojen ja niiden tallentamiseen tarvittavan levytilan eroista.

Jos haluat sovittaa muiden komentojen lähdön, kokeile kohdassa olevaa --blockvaihtoehtoa du.