Comportamento del comando `du` con il flag` -L`


11

Ho notato uno strano comportamento con il ducomando quando viene utilizzato con l' -Lopzione della riga di comando.

Sto usando Slackware 14 e Coreutils 8.19.

Per riprodurre lo strano comportamento, crea due cartelle:

mkdir foo
mkdir bar

Crea un file all'interno di una cartella:

perl -e 'print "A"x10000' > foo/text

E un link simbolico nell'altra cartella:

ln -s ../foo/text bar/text

Ora, se digiti:

du -h -L bar

Otterrai:

16k bar

Dal momento che il collegamento simbolico è stato rimosso. Ma se digiti:

du -h -L *

Otterrai:

16K     foo
4.0K    bar

E il collegamento simbolico non verrà negato. Mi sto perdendo qualcosa?


sembra duvoler giocare in modo intelligente qui, ma se si esegue df -a -L bar fool'output è molto sbagliato (contando i 16K nella barra lasciando il foo vuoto).
guido,

Risposte:


18

Per impostazione predefinita, duconterà ogni file solo una volta se è collegato a più volte. Se lo esegui du -L bar, conterà il file perché lo raggiunge solo una volta. Tuttavia, se lo esegui du -L *, verrà conteggiato solo la prima volta che lo vede. Per esempio:

$ du -L foo bar
16K     foo
4.0K    bar

$ du -L bar foo
16K     bar
4.0K    foo

Notare che lo scambio dell'ordine degli argomenti cambia la cartella che viene segnalata come 16 KB.

È possibile forzare il duconteggio del file due volte passando il -lparametro.

Modificare:

I collegamenti simbolici sono un tipo speciale di file ed è necessario un passaggio aggiuntivo per seguire il collegamento. dunon seguirà i collegamenti simbolici a meno che l' -Lopzione non sia abilitata.

Un collegamento reale, d'altra parte, è fondamentalmente un file esistente in due (o più) cartelle. dupresumibilmente tiene traccia di quali file ha visto per numero di inode per evitare di contarli due volte. -ldisabilita questo comportamento.

Quindi, con just -L, seguirà il collegamento simbolico, ma se il file di destinazione ha un numero di inode che ha già visto non verrà conteggiato di nuovo. Con solo -lconterà conteggi duplicati, ma non seguirà collegamenti simbolici.

Se lo usi -le -Linsieme, seguirà entrambi i collegamenti simbolici e consentirà anche di contare i file di destinazione più di una volta.


Grazie. Questo funziona Tuttavia mi piacerebbe avere qualche spiegazione in più. A pagina man, ho letto che -lfa count sizes many times if hard linked, ma qui sto lavorando con link simbolico. Inoltre, -lda solo non risolve il problema, mentre se uso entrambi -le -Lconta correttamente le dimensioni.
Zagorax,

@Zagorax Sì, la pagina man non è chiara su come -le come -Linteragire. La spiegazione è un po 'troppo lunga per un commento, quindi ho aggiornato la mia risposta.
David Baggerman,
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.