- Dave McKay
@TheGurkha
- December 19, 2019, 8:00am EDT
a Linux du
parancs használatakor mind a tényleges lemezhasználatot, mind a fájl vagy könyvtár valódi méretét megkapja. Elmagyarázzuk, miért nem azonosak ezek az értékek.
tényleges Lemezhasználat és valódi méret
egy 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 egy teljes blokkot továbbra is hozzárendelnek hozzá, mert a fájlrendszernek nincs kisebb ingatlanegysége.
hacsak egy fájl mérete pontosan több blokk, a merevlemezen használt helyet mindig a következő teljes blokkra kell kerekíteni. Például, ha egy fájl nagyobb, mint két blokk, de kisebb, mint három, még mindig tart három blokk helyet tárolni.
két mérést használnak a fájl méretéhez 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 fájl tényleges mérete a merevlemezen. Ez a fájlrendszerblokkok száma, amelyek a fájl tárolásához szükségesek.
példa
nézzünk egy egyszerű példát., Egy karaktert átirányítunk egy fájlba egy kis fájl létrehozásához:
echo "1" > geek.txt
most a hosszú formátumú listát használjuk, ls
, hogy megnézzük a fájl hosszát:
ls -l geek.txt
a hossza a
ls -l geek.txt
div id = “9c6e6dbf8e” > bejegyzések, ami két bájt. Miért két bájt, amikor csak egy karaktert küldtünk a fájlba? Nézzük meg, mi történik az aktában.,
ahexdump
parancsot fogjuk használni, amely pontos bájtszámot ad nekünk, és lehetővé teszi számunkra, hogy a nem nyomtatási karaktereket hexadecimális értékként “láthassuk”. A -C
(kanonikus) opcióval arra kényszerítjük a kimenetet, hogy hexadecimális értékeket jelenítsen meg a kimenet testében, valamint alfanumerikus karakter ekvivalenseiket:
hexdump -C geek.txt
a kimenet azt mutatja, hogy a fájlban 0000000000 eltolással kezdődően van egy bájt, amely egy hexadecimális értéke 31, hexadecimális értéke pedig 0a., 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ék a számjegy ábrázolására szolgál. A 0a hexadecimális értéke a Sorfolyam karakterének ábrázolására szolgál, amelyet nem lehet alfanumerikus karakterként megjeleníteni, tehát periódusként (.) helyett. A sor Feed karakter hozzá echo
. Alapértelmezés szerint a echo
új sort indít, miután megjeleníti a terminál ablakába írandó szöveget.,
Ez a ls
kimenettel egyezik meg, és két bájt fájlhosszával.
kapcsolódó: hogyan használjuk az ls parancsot fájlok és könyvtárak listázására Linuxon
most adu
parancsot használjuk a fájlméret megtekintéséhez:
du geek.txt
azt mondja, hogy a méret négy, de mi?
vannak blokkok, majd vannak blokkok
amikor du
jelentések fájlméretek blokkokban, az általa használt méret több tényezőtől függ., Megadhatja, hogy melyik blokkméretet kell használni a parancssorban. Ha nem kényszeríti adu
– t egy adott blokkméret használatára, akkor egy sor szabályt követ annak eldöntéséhez, hogy melyiket használja.
először a következő környezeti változókat ellenőrzi:
- DU_BLOCK_SIZE
- BLOCK_SIZE
BLOCKSIZE BLOCKSIZE
ha ezek közül bármelyik létezik, a blokk mérete be van állítva, és du
leállítja az ellenőrzést. Ha nincs beállítva, a du
alapértelmezés szerint 1,024 bájt blokkméret., Hacsak nincs beállítva egy POSIXLY_CORRECT
nevű környezeti változó. Ha ez a helyzet, du
alapértelmezés szerint egy blokk mérete 512 bájt.
szóval, hogyan deríthetjük ki, melyik van használatban? Akkor ellenőrizze az egyes környezeti változó, hogy dolgozzanak ki, de van egy gyorsabb módja. Hasonlítsuk össze az eredményeket a blokk méretével, amelyet a fájlrendszer használ.
a fájlrendszer által használt blokkméret felfedezéséhez a tune2fs
programot használjuk., Ezután a -l
(list superblock) opciót használjuk, a kimenetet a grep
, majd nyomtassa ki a “blokk” szót tartalmazó sorokat.”
ebben a példában megnézzük a fájlrendszert az első merevlemez első partícióján, sda1
, és a sudo
:
sudo tune2fs -l /dev/sda1 | grep Block
a fájlrendszerblokk mérete 4,096 bájt. Ha ezt a du
(négy) eredmény alapján osztjuk meg, akkor a du
alapértelmezett blokkméret 1,024 bájt., Most már számos fontos dolgot tudunk.
először is tudjuk, hogy a fájlrendszer legkisebb ingatlana, amelyet egy fájl tárolására lehet fordítani, 4,096 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és a merevlemez, valamint a fájl rendszer statisztikák, például a du
, ls
vagy tune2fs
, lehet különböző fogalmak, mi az a “blokk” jelent., Atune2fs
alkalmazás valódi fájlrendszerblokk méreteket jelent, míg als
és adu
konfigurálható vagy kényszeríthető más blokkméretek használatára. Ezek a blokkméretek nem a fájlrendszer blokkméretéhez kapcsolódnak; csak” darabok ” azok a parancsok, amelyeket a kimenetükben használnak.
végül a különböző blokkméretek használata mellett a du
és a tune2fs
válaszok ugyanazt a jelentést közvetítik., A tune2fs
eredmény egy 4,096 bájtos blokk volt, a du
eredmény pedig négy 1,024 bájtos blokk.
A du
parancssori paraméterek vagy opciók nélkül a du
felsorolja az aktuális könyvtár és az összes alkönyvtár által használt teljes lemezterületet.
vessünk egy pillantást egy példára:
du
a méret Az alapértelmezett blokkméret 1,024 bájt / blokk. Az egész alkönyvtárfa áthalad.,
A du egy másik könyvtárban
Ha azt szeretné, hogy a du
jelentse az aktuális könyvtárat, akkor átadhatja a parancssor könyvtárának elérési útját:
du ~/.cach/evolution/
segítségével du egy adott fájlban
ha du
egy adott fájl jelentéséhez adja át a fájl elérési útját a parancssorban., Azt is át a shell mintát, hogy válasszon ki egy csoportot a fájlokat, mint például a *.txt
:
du ~/.bash_aliases
jelentés Fájlok Könyvtárak
, Hogy a du
jelentés a fájlokat az aktuális könyvtárban, valamint alkönyvtárak, használja a -a
(minden fájl) opció:
du -a
minden könyvtárban, a méret, minden fájl számolt be, valamint egy teljes, minden könyvtár.,
A könyvtárfa mélységének korlátozása
meg lehet mondani du
a könyvtárfa egy bizonyos mélységre történő felsorolásához. Ehhez használja a -d
(Max mélység) opciót, és adja meg a mélységértéket paraméterként. Vegye figyelembe, hogy az összes alkönyvtár beolvasásra kerül, és a jelentett összegek kiszámítására szolgál, de nem mindegyik szerepel a listában. 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 adott alkönyvtár teljes méretét az aktuális könyvtárban, és mindegyikhez egy teljes értéket is biztosít.,
a könyvtárak egy szinttel mélyebb listájához használja ezt a parancsot:
du -d 2
a blokkméret beállítása
használhatja a block
opciót a blokkméret beállításához du
az aktuális művelethez.,d a legmegfelelőbb blokk méret szerint a által használt lemezterület a könyvtárak, fájlok, használja a -h
(olvasható) opció:
du -h
látni, hogy a látszólagos méretét, a fájl inkább, mint amennyi hely a merevlemezen tárolja a fájlt, akkor használja a --apparent-size
opció:
du --apparent-size
lehet ezt összeegyeztetni a -a
(minden) opció, hogy a látszólagos méret, minden fájl:
du --apparent-size -a
Minden fájl felsorolt, valamint a látszólagos méretét.,
csak az összes megjelenítése
Ha azt szeretné, hogy adu
csak a könyvtár teljes értékét jelentse, használja a -s
(összefoglalás) opciót., Akkor is, ha ezt kombináljuk egyéb lehetőségek, mint például a -h
(olvasható) opció:
du -h -s
Itt, majd használjuk a --apparent-size
opció:
du --apparent-size -s
Megjelenítés Módosítása Alkalommal
látni létrehozásának vagy utolsó módosításának időpontját, használja a --time
opció:
du --time -d 2
a Furcsa Eredmények?,
ha furcsa eredményeket lát a du
-tól , különösen akkor, ha más parancsok kimenetére keresztezi a referenciaméreteket, általában a különböző blokkméretek miatt, amelyekhez különböző parancsokat lehet beállítani, vagy azok, amelyekre alapértelmezés szerint. 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 --block
opcióval a du
.,
Dave McKay először használt számítógépet, amikor a papírszalag divatos volt, és azóta is programozik. Több mint 30 év után az informatikai iparban, most teljes munkaidős technológiai újságíró. Karrierje során szabadúszó programozóként, egy nemzetközi szoftverfejlesztő csapat menedzsereként, informatikai szolgáltatási projektmenedzserként, legutóbb pedig Adatvédelmi tisztviselőként dolgozott. Dave egy Linux evangélista és nyílt forráskódú szószólója.Olvassa el a teljes Bio ”