Non riesco a capire perché ottengo i seguenti risultati:
ls -l
mi dice che la dimensione di un dato file (HISTORY) è "581944":
$ ls -l HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
ls -s
dice che è "572":
$ ls -s HISTORY
572 HISTORY
Ovviamente ho bisogno di fare in modo che i valori utilizzino una scala comparabile. Quindi prima confermo che usando --block-size 1
in ls -l
mi dà lo stesso risultato di prima:
$ ls -l --block-size 1 HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 581944 Feb 22 10:59 HISTORY
Quindi faccio lo stesso con ls -s
per ottenere un valore nella stessa scala:
$ ls -s --block-size 1 HISTORY
585728 HISTORY
Risultati diversi! 581944 ≠ 585728 .
Ho provato a generare valori comparabili al contrario, usando -k
, ma ottengo:
$ ls -lk HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 569 Feb 22 10:59 HISTORY
$ ls -sk HISTORY
572 HISTORY
Di nuovo, risultati diversi, 569 ≠ 572 .
Ho provato a specificare –si per assicurarmi che entrambe le opzioni utilizzassero la stessa scala, inutilmente:
$ ls -lk --si HISTORY
-rw-rw-r-- 1 waldyrious waldyrious 582k Feb 22 10:59 HISTORY
$ ls -sk --si HISTORY
586k HISTORY
…di nuovo, valori diversi:582k ≠ 586k .
Ho provato a cercare sul web ma l'unica cosa che ho trovato che sembrava pertinente era questa:
Alcuni file hanno "buchi" al loro interno, quindi l'utilizzo elencato da ls -s
(...) è inferiore alla dimensione del file indicata da ls -l
."
(nota che nei miei risultati accade il contrario:ls -s
restituisce dimensioni maggiori di ls -l
, non più piccolo.)
Nel frattempo, questa pagina lo dice
non esiste un modo elegante per rilevare i buchi dei file Unix.
Quindi, come posso affrontare questa discrepanza? Quale di questi valori può essere considerato corretto? Potrebbe essere un bug in ls
?
Migliore risposta
Risposta breve:
ls -l
fornisce la dimensione del file (=la quantità di dati che contiene)ls -s --block-size 1
fornisce la dimensione del file sul file system
Creiamo due file:
Un file sparso di 128 byte di lunghezza (Un file sparse è un file contenente blocchi vuoti, vedere File sparsi):
# 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
Un altro file con dati casuali, anche di dimensione 128 byte:
# 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
Quindi, come puoi vedere nella rappresentazione esadecimale, entrambi i file hanno la stessa quantità di dati , anche se il contenuto è molto diverso.
Correlati:Ubuntu 16.10 su DELL XPS 13 9360 – (come) utilizzo i driver grafici Intel?Ora, diamo un'occhiata alla directory:
# 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
Il primo valore è dato da -s --block-size 1
opzione, è la quantità di spazio utilizzata dal file sul file system .
Come puoi vedere, il file sparse occupa zero spazio, poiché il file system (ext3
in questo caso) è stato abbastanza intelligente da riconoscere che contiene solo zeri. Inoltre, il file con dati casuali occupa 1024 byte sul disco!
Il valore dipende dal modo in cui il file system sottostante tratta i file (dimensione del blocco, capacità dei file sparsi, ...).
Nella sesta colonna c'è la dimensione del file se vuoi leggerlo:è la quantità di dati che contiene il file ed è 128 byte per entrambi i file!