Kaip gauti failo ar katalogo dydį sistemoje „Linux“

Kai naudojate „Linux“ dukomandą, gausite faktinį disko naudojimą ir tikrąjį failo ar katalogo dydį. Paaiškinsime, kodėl šios vertės nėra vienodos.

Faktinis disko naudojimas ir tikras dydis

Failo dydis ir kietajame diske užimama vieta retai būna vienodi. Vieta diske paskirstoma blokais. Jei failas yra mažesnis nei blokas, jam vis tiek priskiriamas visas blokas, nes failų sistema neturi mažesnio nekilnojamojo turto vieneto, kurį galėtų naudoti.

Jei failo dydis nėra tikslus kartotinių skaičius, kietajame diske jo naudojama vieta visada turi būti suapvalinta iki kito bloko. Pvz., Jei failas yra didesnis nei du blokai, bet mažesnis nei trys, jam laikyti vis tiek reikia trijų blokų vietos.

Pagal failo dydį naudojami du matavimai. Pirmasis yra tikrasis failo dydis, tai yra failą sudarančio turinio baitų skaičius. Antrasis yra efektyvusis failo dydis standžiajame diske. Tai failų sistemos blokų, reikalingų tam failui saugoti, skaičius.

Pavyzdys

Pažvelkime į paprastą pavyzdį. Mes peradresuosime vieną simbolį į failą, kad sukurtume nedidelį failą:

echo "1"> geek.txt

Dabar naudosime ilgo formato sąrašą  ls, norėdami pamatyti failo ilgį:

ls -l geek.txt

Ilgis yra skaitinė vertė, einanti po dave dave  įrašų, kuri yra du baitai. Kodėl tai yra du baitai, kai į failą siuntėme tik vieną simbolį? Pažvelkime į tai, kas vyksta failo viduje.

Mes naudosime hexdumpkomandą, kuri suteiks mums tikslų baitų skaičių ir leis mums „nesuspausdintus“ simbolius „matyti“ kaip šešioliktaines reikšmes. Mes taip pat naudosime -C(kanoninę) parinktį, kad priverstume išvestį rodyti šešioliktaines reikšmes išvesties tekste, taip pat jų raidinius ir skaitmeninius simbolių atitikmenis:

hexdump -C geek.txt

Išvestis rodo, kad, pradedant failo 00000000 poslinkiu, yra baitas, kuriame yra šešioliktainė reikšmė 31, ir toks, kuriame yra šešioliktainė vertė 0A. Dešinėje išvesties dalyje šios vertės vaizduojamos kaip raidiniai ir skaitiniai simboliai, kai tik įmanoma.

Skaitmeniui atspindėti naudojama šešioliktainė reikšmė 31. Šešioliktainė 0A vertė naudojama eilutės tiekimo simboliui reprezentuoti, kuris negali būti rodomas kaip raidinis skaitmeninis simbolis, todėl vietoj to jis rodomas kaip taškas (.). Eilutės tiekimo simbolį prideda echo. Pagal numatytuosius nustatymus, ji  echopradeda naują eilutę po to, kai ji pateikia tekstą, kurį reikia rašyti į terminalo langą.

Tai sutampa su išvestimi iš  ls ir sutampa su dviejų baitų failo ilgiu.

SUSIJ :S: Kaip naudoti „ls“ komandą, jei norite išvardyti failus ir katalogus sistemoje „Linux“

Dabar naudosime dukomandą, norėdami pamatyti failo dydį:

du geek.txt

Jis sako, kad dydis yra keturi, bet keturi iš ko?

Yra blokai ir tada yra blokai

Kai du failų dydžiai pateikiami blokais, jo naudojamas dydis priklauso nuo kelių veiksnių. Komandos eilutėje galite nurodyti, kokį bloko dydį jis turėtų naudoti. Jei neverčiate dunaudoti tam tikro bloko dydžio, laikomasi taisyklių rinkinio, kad nuspręstumėte, kurį naudoti.

Pirma, jis tikrina šiuos aplinkos kintamuosius:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOKIŠKAS

Jei kuri nors iš jų egzistuoja, nustatomas bloko dydis ir dunustojama tikrinti. Jei nė vienas nenustatytas,  dunumatytasis bloko dydis yra 1024 baitai. Nebent tai yra, nustatytas aplinkos kintamasis, vadinamas POSIXLY_CORRECT. Tokiu atveju dunumatytasis bloko dydis yra 512 baitų.

Taigi, kaip sužinoti, kuris iš jų yra naudojamas? Galite patikrinti kiekvieną aplinkos kintamąjį, kad jį išspręstumėte, tačiau yra greitesnis būdas. Palyginkime rezultatus su bloko dydžiu, kurį vietoj to naudoja failų sistema.

Norėdami sužinoti failų sistemos naudojamo bloko dydį, naudosime tune2fsprogramą. Tada naudosime -lparinktį („superblock“ sąrašas), pervesime išvestį grepir išspausdinsime linijas, kuriose yra žodis „Blokuoti“.

Šiame pavyzdyje mes pažvelgsime į failų sistemą pirmajame kietojo disko pirmajame skaidinyje sda1ir turėsime naudoti sudo:

sudo tune2fs -l / dev / sda1 | grep Blokas

Failų sistemos bloko dydis yra 4096 baitai. Jei padalinsime iš rezultato, kurį gavome iš du (keturių), tai rodo, kad  du numatytasis bloko dydis yra 1024 baitai. Dabar mes žinome keletą svarbių dalykų.

Pirma, mes žinome, kad mažiausias failų sistemos nekilnojamojo turto kiekis, kurį galima skirti failui saugoti, yra 4096 baitai. Tai reiškia, kad net mūsų mažytis dviejų baitų failas užima 4 KB vietos standžiajame diske.

Antras dalykas, reikia nepamiršti, yra prašymai skirti ataskaitų apie kietąjį diską ir failų sistemos statistikos, kaip antai du, lsir  tune2fs, gali turėti skirtingas sąvokas, kas yra "blokas" priemonėmis. tune2fsTaikymo ataskaitos tiesa failų sistemos blokų dydžiai, o  lsir dugali būti konfigūruojamas, arba priversti naudotis kitomis blokų dydžiai. Šie blokų dydžiai nėra skirti susieti su failų sistemos bloko dydžiu; jie tiesiog „gabaliukai“, kuriuos tos komandos naudoja savo išvestyje.

Galiausiai, išskyrus naudojant skirtingus blokų dydžiai, atsakymai iš duir tune2fs perteikti tą pačią reikšmę. tune2fsRezultatas buvo vienas blokas 4096 baitų, o durezultatas buvo keturi blokai 1,024 baitų.

Naudojant du

Neturint komandinės eilutės parametrų ar parinkčių, dupateikiamas bendras dabartiniame kataloge ir visuose pakatalogiuose naudojamo disko vietos sąrašas.

Pažvelkime į pavyzdį:

du

Dydis nurodomas pagal numatytąjį 1024 baitų bloko dydį. Pereinamas visas pakatalogio medis.

Naudojimas dukitame kataloge

Jei norite  du pranešti apie kitą katalogą nei dabartinis, galite komandų eilutėje perduoti kelią į katalogą:

du ~ / .cach / evolution /

Naudojimas dukonkrečiame faile

Jei norite  du pranešti apie konkretų failą, komandinėje eilutėje perkelkite kelią į tą failą. Taip pat galite perduoti apvalkalo šabloną pasirinktai failų grupei, pvz . *.txt:

du ~ / .bash_aliases

Ataskaitos apie katalogų failus

Norėdami turėti duataskaitą apie dabartiniame kataloge ir pakatalogiuose -aesančius failus , naudokite parinktį (visi failai):

du -a

Kiekvieno katalogo atveju nurodomas kiekvieno failo dydis ir bendras kiekvieno katalogo dydis.

Katalogo medžio gylio ribojimas

Galite nurodyti dukatalogų medį išvardyti iki tam tikro gylio. Norėdami tai padaryti, naudokite -dparinktį (maks. Gylis) ir kaip parametrą nurodykite gylio vertę. Atminkite, kad visi pakatalogiai yra nuskaitomi ir naudojami apskaičiuojant bendras ataskaitas, tačiau jie nėra visi. Norėdami nustatyti didžiausią vieno lygio katalogo gylį, naudokite šią komandą:

du -d 1

Išvestyje nurodomas bendras tos pakatalogio dydis dabartiniame kataloge, taip pat pateikiama kiekvieno iš jų bendra suma.

Norėdami katalogus išvardyti vienu lygiu giliau, naudokite šią komandą:

du -d 2

Bloko dydžio nustatymas

Galite naudoti blockparinktį, norėdami nustatyti bloko dydį du dabartinei operacijai. Norėdami naudoti vieno baito bloko dydį, naudokite šią komandą, kad gautumėte tikslius katalogų ir failų dydžius:

du - blokuoti = 1

Jei norite naudoti vieno megabaito bloko dydį, galite naudoti -m(megabaito) parinktį, kuri yra tokia pati kaip --block=1M:

du -m

Jei norite, kad dydžiai būtų pateikti tinkamiausiu bloko dydžiu, atsižvelgiant į disko vietą, kurią naudoja katalogai ir failai, naudokite -hparinktį (skaitoma žmonėms):

du -h

Norėdami pamatyti failo akivaizdų dydį, o ne vietos standžiajame diske kiekį, naudojamą failui laikyti, naudokite --apparent-sizeparinktį:

du - matomas dydis

Tai galite derinti su -a(visų) parinktimi, kad pamatytumėte kiekvieno failo akivaizdų dydį:

du - akivaizdaus dydžio -a

Kiekvienas failas pateikiamas kartu su tariamu dydžiu.

Rodomos tik sumos

Jei norite  du pateikti tik katalogo bendrą sumą, naudokite -sparinktį (apibendrinti). Taip pat galite tai derinti su kitomis parinktimis, pavyzdžiui, su -h(žmonėms skaitomu) variantu:

du -h -s

Čia mes jį naudosime --apparent-sizepasirinkdami:

du - akivaizdaus dydžio -s

Rodomas modifikavimo laikas

Norėdami pamatyti sukūrimo ar paskutinio modifikavimo laiką ir datą, naudokite --timeparinktį:

du - laikas-d 2

Keisti rezultatai?

Jei matote keistų rezultatų du, ypač kai kryžminate nuorodą į kitų komandų išvestį, dažniausiai tai lemia skirtingi blokų dydžiai, kuriems galima nustatyti skirtingas komandas arba tie, kuriems jie numatyti. Tai taip pat gali būti dėl tikrųjų failų dydžių ir jų saugojimui reikalingos vietos diske skirtumų.

Jei jums reikia suderinti kitų komandų išvestis, išbandykite --blockparinktį du.