Cosa rappresenta la "dimensione" di un symlink nell'output di ls?


11

Inizierò con l'esempio:

$ ls -l dir1
total 4
-rw-r--r-- 4 maythux maythux 1650 2008-01-10 16:33 file
lrwxrwxrwx 1 maythux maythux  7 2008-01-15 15:17 symfile -> file

symfile è un link simbolico del file file

Anche come so 1650sarebbe la dimensione del file file, ma qual è il numero 7che è posto sotto la colonna dimensione?

EDIT: in esecuzione du:

$ du -sh symfile
0   symfile

Quindi, come hai potuto dimostrare che 7 è la dimensione del collegamento simbolico ?!


AGGIORNARE:

prova questo

$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun  1 19:42 file

nota che la dimensione è anche qui 0.

Adesso:

$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun  1 19:44 sym -> file

Quindi, suppongo che non sia solo una dimensione


2
Il 7dipende dal file system (ed eventualmente altri parametri). È 7 su ext4, ma potrebbe essere 13 su btrfs e 3 su tmpfs.
muru,

1
È una dimensione, ma la dimensione dipende dal filesystem (btrfs presumibilmente memorizza più metadati di ext4 e ext4 più di tmpfs). È possibile riempire il disco con collegamenti. Sto solo dicendo, non stupirti se vedi un numero diverso su un diverso filesystem.
muru,


1
La voce della tua directory ha una dimensione minima, più grande del necessario. Inserisci abbastanza voci e la dimensione della directory aumenterà. Controllare con: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
muru,

Risposte:


13

I collegamenti simbolici occupano lo spazio necessario per memorizzare il nome e la destinazione più alcuni byte per altri metadati.

Quindi è la dimensione del collegamento simbolico.

Per quanto riguarda la dimensione da du -sh: du guarda solo a quanti blocchi sono allocati, e quindi può mostrare 0. state ls -lsono migliori nel mostrare la dimensione in questo senso.


allora perché du -sh symfiledà 0? -
Maythux,

du osserva solo quanti blocchi sono allocati e quindi può mostrare 0. stat e ls -l sono più intelligenti.
Rinzwind,

Si prega di leggere l'aggiornamento
Maythux

Vedi la mia risposta: è il nome, la destinazione e alcuni metadati. Complessivamente compensa 7 byte. Altri SO memorizzano altri metadati e quindi avranno dimensioni diverse.
Rinzwind,

La domanda era "Come puoi provarlo?"
Pilota 6

5

È la dimensione del collegamento simbolico in byte.

Alcuni file system hanno una piccola area all'interno della voce di directory utilizzata per l'inizio del file, che accelera notevolmente l'elaborazione di collegamenti simbolici e letture di piccole dimensioni (si pensi file) a spese di voci di directory più grandi.

Se l'intero contenuto del collegamento simbolico si adatta alla voce della directory, non vengono allocati blocchi di dati e la dudimensione viene visualizzata come zero. Se il collegamento simbolico non si adatta, lo spazio viene allocato normalmente (quindi si finisce con un'allocazione a blocco singolo), che può essere ottimizzata dal filesystem usando l'unione di coda (ma non c'è API per dusaperlo).

Il ext4filesystem esegue questa ottimizzazione solo per i collegamenti simbolici, i criteri si trovano nella funzione ext4_inode_is_fast_symlink .


" Alcuni file system ... " - la tua risposta sarebbe migliorata se tu elencassi i file system comuni con questa funzione (e quelli comuni senza).
RM

1

Questa è la dimensione del file symlink in byte.

Il file symlink è un file normale che memorizza i dati relativi a dove si trova il file a cui punta. Nell'estensione 4 sono 7 byte.


dimensioni in cosa? sono byte o bit o cosa?
Maythux,

Dimensione in byte ..
Pilota 6

1
allora perché du -sh symfiledà 0?
Maythux,

du non è presize con file molto piccoli. Prova a usare du a circa 99 byte di file. Mostrerà 4.0K.
Pilota 6

questo è il mio pioint anche allora dovrebbe almeno mostrare 4k per il collegamento simbolico poiché nel concetto di sistema operativo sta registrando un cluster per questo file
Maythux,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.