Fájl vagy könyvtár méretének megszerzése Linux alatt

A Linux duparancs használatakor megkapja a tényleges lemezhasználatot és a fájl vagy könyvtár valódi méretét. Megmagyarázzuk, miért nem ugyanazok az értékek.

Tényleges lemezhasználat és valódi méret

A fájl mérete és a merevlemezen elfoglalt hely ritkán azonos. A lemezterület blokkokban van elosztva. Ha egy fájl kisebb, mint egy blokk, akkor is egy teljes blokkot rendelnek hozzá, mert a fájlrendszer nem rendelkezik kisebb ingatlanegységgel.

Hacsak egy fájl mérete nem pontosan többszörös blokk, a merevlemezen használt helyet mindig fel kell kerekíteni a következő teljes blokkra. Például, ha egy fájl nagyobb, mint két blokk, de kisebb, mint három, akkor is három blokknyi hely szükséges a tárolásához.

Két mérést alkalmaznak a fájlmérethez viszonyítva. Az első a fájl tényleges mérete, amely a fájlt alkotó tartalom bájtjainak száma. A második a merevlemezen található fájl tényleges mérete. Ez a fájlrendszer-blokkok száma szükséges a fájl tárolásához.

Egy példa

Nézzünk meg egy egyszerű példát. Egyetlen karaktert átirányítunk egy fájlba egy kis fájl létrehozásához:

echo "1"> geek.txt

Most a hosszú formátumú felsorolást fogjuk használni  ls, a fájl hosszának megtekintéséhez:

ls -l geek.txt

A hossz a dave dave  bejegyzéseket követő numerikus érték , amely két bájt. Miért van két bájt, amikor csak egy karaktert küldtünk a fájlba? Vessünk egy pillantást arra, hogy mi történik a fájl belsejében.

Használjuk a hexdumpparancsot, amely pontos bájtszámot ad számunkra, és lehetővé teszi számunkra, hogy hexadecimális értékként "lássuk" a nem nyomtatott karaktereket. A -C(kanonikus) opciót arra is felhasználjuk, hogy a kimenetet arra kényszerítsük, hogy a hexadecimális értékeket jelenítse meg a kimenet törzsében, valamint azok alfanumerikus karakteregyenértékeit:

hexdump -C geek.txt

A kimenet megmutatja, hogy a fájlban a 00000000 eltolással kezdődően van egy bájt, amely 31 hexadecimális értéket tartalmaz, és egy 0A hexadecimális értéket. A kimenet jobb oldali része ezeket az értékeket alfanumerikus karakterként ábrázolja, ahol csak lehetséges.

A 31-es hexadecimális értéket a számjegy ábrázolására használják. A 0A hexadecimális értéke a Vonal előtag karakter képviseletére szolgál, amelyet nem lehet alfanumerikus karakterként megjeleníteni, ezért helyette pontként (.) Jelenik meg. A Line Feed karaktert hozzáadta echo. Alapértelmezés szerint  echoúj sort indít, miután megjeleníti a terminálablakba írandó szöveget.

Ez megegyezik a kimenettel  ls és megegyezik a két bájtos fájlhosszal.

KAPCSOLÓDÓ: Hogyan lehet használni az ls parancsot fájlok és könyvtárak listázására Linux rendszeren

Most a duparanccsal megnézzük a fájl méretét:

du geek.txt

Azt írja, hogy a mérete négy, de miből négy?

Vannak blokkok, és akkor vannak blokkok

Ha a du fájlméreteket blokkokban jelenti, akkor az általa használt méret több tényezőtől függ. A parancssorban megadhatja, hogy melyik blokkméretet használja. Ha nem kényszerít duegy adott blokkméretet, akkor az egy sor szabályt követ el annak eldöntésében, hogy melyiket használja.

Először a következő környezeti változókat ellenőrzi:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Ha ezek bármelyike ​​létezik, akkor a blokk méretét beállítja, és duleállítja az ellenőrzést. Ha egyik sincs megadva, akkor  dualapértelmezés szerint 1024 bájtos blokkméret. Hacsak nem POSIXLY_CORRECTállítják be az úgynevezett környezeti változót . Ebben az esetben dualapértelmezés szerint 512 bájtos blokkméret van.

Szóval, hogyan lehet megtudni, melyik van használatban? Megvizsgálhatja az egyes környezeti változókat a kivitelezésük érdekében, de van egy gyorsabb módszer. Hasonlítsuk össze az eredményeket a fájlrendszer helyett használt blokkmérettel.

A fájlrendszer által használt blokkméret felderítéséhez a tune2fsprogramot használjuk . Ezután használjuk a -l(list superblock) opciót, átvezetjük a kimenetet grep, majd kinyomtatjuk azokat a vonalakat, amelyek tartalmazzák a „Blokk” szót.

Ebben a példában megnézzük az első merevlemez első partícióján található fájlrendszert sda1, és használnunk kell sudo:

sudo tune2fs -l / dev / sda1 | grep Block

A fájlrendszer blokkmérete 4096 bájt. Ha ezt elosztjuk az eredménnyel, amelyet kaptunk du (négy), akkor az  du alapértelmezett blokkméret 1024 bájt. Most már több fontos dolgot tudunk.

Először is tudjuk, hogy a fájl tárolására fordítható legkisebb fájlrendszeri ingatlan 4096 bájt. Ez azt jelenti, hogy még az apró, két bájtos fájlunk is 4 KB merevlemez-helyet foglal el.

A második dolog, hogy tartsa szem előtt, alkalmazások szentelt jelentéstétel merevlemez és a fájlrendszer statisztika, mint a du, lsés  tune2fs, lehet különböző elképzeléseim „blokk” jelent. Az tune2fsalkalmazás jelentéseinek igazi fájlrendszer blokkteljesítményében, míg  lsés dube lehet állítani, vagy kénytelen használni más blokkméretek. Ezeknek a blokkméreteknek nem célja a fájlrendszer blokkméretének a kapcsolata; ők csak „darabok”, amelyeket a parancsok használnak a kimenetükben.

Végezetül más, mint használ különböző méretű blokkok, a válaszokat du, és tune2fs mind ugyanazt jelentik. Az tune2fseredmény egy 4096 bájtos blokk, az dueredmény pedig négy 1024 bájtos blokk lett.

Használata du

Parancssori paraméterek és opciók nélkül dufelsorolja az aktuális könyvtár és az összes alkönyvtár által használt teljes lemezterületet.

Nézzünk meg egy példát:

du

A méret az alapértelmezett blokkméretben, 1024 bájt blokkonként jelenik meg. A teljes alkönyvtárfát bejárják.

Használat duegy másik könyvtárban

Ha du a jelenlegi könyvtáraktól eltérő könyvtárban szeretne  jelentést tenni, akkor a parancssorban a könyvtár elérési útját adhatja át:

du ~ / .cach / evolution /

Használat duegy adott fájlon

Ha du egy adott fájlról szeretne  jelentést tenni, akkor a parancssorban adja át annak elérési útját. Héjmintát átadhat egy kiválasztott fájlcsoportnak is, például *.txt:

du ~ / .bash_aliases

Jelentés a könyvtárak fájljairól

Ha dujelentést szeretne készíteni az aktuális könyvtár és alkönyvtárak -afájljairól , használja az (összes fájl) beállítást:

du -a

Minden könyvtár esetében az egyes fájlok mérete, valamint az egyes könyvtárak összege jelentésre kerül.

Könyvtárfa mélységének korlátozása

Azt mondhatja, duhogy a könyvtárfát egy bizonyos mélységig sorolja fel. Ehhez használja a -d(max mélység) opciót, és adja meg a mélység értékét paraméterként. Ne feledje, hogy az összes alkönyvtárat átvizsgálják és felhasználják a jelentett összegek kiszámításához, de ezek nem mind szerepelnek. Egy szint maximális könyvtármélységének beállításához használja ezt a parancsot:

du -d 1

A kimenet felsorolja az alkönyvtár teljes méretét az aktuális könyvtárban, és mindegyikhez megad egy összeget is.

A könyvtárak egy szinttel mélyebb felsorolásához használja ezt a parancsot:

du -d 2

A blokk méretének beállítása

Az blockopcióval beállíthatja du az aktuális művelet blokkméretét . Egy bájt blokkméret használatához használja a következő parancsot a könyvtárak és fájlok pontos méretének megszerzéséhez:

du - blokk = 1

Ha egy megabájtos blokkméretet szeretne használni, használhatja a -m(megabájt) opciót, amely megegyezik a következőkkel --block=1M:

du -m

Ha a méreteket a könyvtárak és fájlok által használt lemezterületnek megfelelő legmegfelelőbb blokkméretben szeretné megadni, használja az -h(ember által olvasható) opciót:

du -h

A fájl látszólagos méretének és nem a merevlemezen tárolt terület nagyságának megtekintéséhez használja a következő --apparent-sizelehetőséget:

du - látszólagos méretű

Kombinálhatja ezt az -a(összes) opcióval az egyes fájlok látszólagos méretének megtekintéséhez:

du - látszólagos méretű -a

Minden fájl fel van tüntetve, látszólagos méretével együtt.

Csak az összesítés megjelenítése

Ha du csak a könyvtár összesítését akarja  jelenteni, használja az -s(összesítés) opciót. Kombinálhatja ezt más lehetőségekkel is, például az -h(ember által olvasható) opcióval:

du -h -s

Itt a következő --apparent-sizelehetőséggel fogjuk használni :

du - látszólagos méretű -s

A módosítási idők megjelenítése

A létrehozás vagy az utolsó módosítás idejének és dátumának megtekintéséhez használja a következő --timelehetőséget:

du - time -d 2

Furcsa eredmények?

Ha furcsa eredményeket lát du, különösen akkor, ha keresztre hivatkozik a méretre a többi parancs kimenetére, ez általában annak a különböző blokkméretnek köszönhető, amelyre a különböző parancsokat beállíthatja, vagy azok, amelyekre alapértelmezés szerint vonatkoznak. Ennek oka lehet a valódi fájlméretek és a tárolásukhoz szükséges lemezterület közötti különbség is.

Ha meg kell egyeznie más parancsok kimenetével, kísérletezzen a (z) --blockopcióval du.