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.