GNU/Linux >> Znalost Linux >  >> Ubuntu

Proč má Ls -l na výstupu jinou velikost než Ls -s?

Nemohu přijít na to, proč se mi zobrazují následující výsledky:

ls -l říká mi, že velikost daného souboru (HISTORIE) je „581944“:

$ ls -l HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY

ls -s říká, že je to „572“:

$ ls -s HISTORY
572 HISTORY

Samozřejmě potřebuji, aby hodnoty používaly srovnatelnou stupnici. Nejprve to tedy potvrzuji pomocí --block-size 1 v ls -l dává mi stejný výsledek jako předtím:

$ ls -l --block-size 1 HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY

Potom udělám totéž pro ls -s získat hodnotu ve stejném měřítku:

$ ls -s --block-size 1 HISTORY 
585728 HISTORY

Různé výsledky! 581944 ≠ 585728 .

Zkusil jsem generovat srovnatelné hodnoty obráceně, pomocí -k , ale chápu:

$ ls -lk HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY 
572 HISTORY

Opět jiné výsledky, 569 ≠ 572 .

Pokusil jsem se zadat –si, abych se ujistil, že obě možnosti používají stejné měřítko, ale bez úspěchu:

$ ls -lk --si HISTORY 
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY 
586k HISTORY

…opět různé hodnoty:582k ≠ 586k .

Zkoušel jsem hledat na webu, ale jediná věc, která se mi zdála relevantní, byla toto:

Některé soubory mají v sobě „díry“, takže použití je uvedeno v ls -s (…) je menší než velikost souboru uvedená pomocí ls -l .“

(Všimněte si, že v mých výsledcích se stane opak:ls -s vrátí velikosti větší než ls -l , ne menší.)

Mezitím tato stránka říká, že

neexistuje žádný elegantní způsob, jak detekovat díry v souborech Unix.

Jak se tedy mohu s tímto rozporem vypořádat? Které z těchto hodnot lze považovat za správné? Mohla by to být chyba v ls ?

Nejlepší odpověď

Krátká odpověď:

  • ls -l udává velikost souboru (=množství dat, která obsahuje)
  • ls -s --block-size 1 udává velikost souboru v souborovém systému

Vytvořme dva soubory:

řídký soubor o délce 128 bajtů (Řídký soubor je soubor obsahující prázdné bloky, viz Sparse File):

# truncate -s 128 f_zeroes.img
# hexdump -vC f_zeroes.img 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000080

Další soubor s náhodnými daty, také o velikosti 128 bajtů:

# dd if=/dev/urandom of=f_random.img bs=1 count=128
# hexdump -vC f_random.img 
00000000  bc 82 9c 40 04 e3 0c 23  e6 76 79 2f 95 d4 0e 45  |[email protected]#.vy/...E|
00000010  19 c6 53 fc 65 83 f8 58  0a f7 0e 8f d6 d6 f8 b5  |..S.e..X........|
00000020  6c cf 1b 60 cb ef 06 c6  d0 99 c6 16 3f d3 95 02  |l..`........?...|
00000030  85 1e b7 80 27 93 27 92  d0 52 e8 72 54 25 4d 90  |....'.'..R.rT%M.|
00000040  11 59 a2 d9 0f 79 aa 23  2d 44 3d dd 8d 17 d9 36  |.Y...y.#-D=....6|
00000050  f5 ae 07 a8 c1 b4 cb e1  49 9e bc 62 1b 4f 17 53  |........I..b.O.S|
00000060  95 13 5a 1c 2a 7e 55 b9  69 a5 50 06 98 e7 71 83  |..Z.*~U.i.P...q.|
00000070  5a d0 82 ee 0b b3 91 82  ca 1d d0 ec 24 43 10 5d  |Z...........$C.]|
00000080

Jak tedy můžete vidět v hexadecimální reprezentaci, oba soubory mají stejné množství dat , i když obsah je zcela odlišný.

Související:Ubuntu 16.10 na DELL XPS 13 9360 – (jak) mohu používat ovladače grafiky Intel?

Nyní se podíváme na adresář:

# ls -ls --block-size 1 f_*
1024 -rw-r--r-- 1 user user 128 Mar 18 15:34 f_random.img
   0 -rw-r--r-- 1 user user 128 Mar 18 15:32 f_zeroes.img
   ^                         ^
   |                         |
Amount which the           Actual file size
files takes on the fs

První hodnota je dána -s --block-size 1 je to množství místa, které soubor v systému souborů využívá .

Jak vidíte, řídký soubor zabírá nulové místo, protože souborový systém (ext3 v tomto případě) byl dostatečně chytrý, aby rozpoznal, že obsahuje pouze nuly. Také soubor s náhodnými daty zabírá na disku 1024 bajtů!

Hodnota závisí na tom, jak základní souborový systém zachází se soubory (velikost bloku, schopnost řídkého souboru, …).

V šestém sloupci je velikost souboru, pokud byste jej četli – je to množství dat, které soubor obsahuje a je to 128 bajtů pro oba soubory!


Ubuntu
  1. Co znamená velikost adresáře ve výstupu příkazu „ls -l“?

  2. Jak seřadit výstup Du podle velikosti?

  3. Jak zajistit, aby „datum“ vydalo čas z jiného časového pásma?

  1. Proč možnost Ssh -t přidává Cr &Lf do přesměrovaného výstupu?

  2. Co tento výstup z Xev znamená?

  3. Jak se Ubuntu liší od Debianu?

  1. Proč instalace rozšíření Gnome Shell z Extensions.gnome.org tiše selže?

  2. proč je výstup `du` často tak odlišný od `du -b`

  3. Proč tento plášťový ropovod vystupuje?