Comportamiento del comando `du` con bandera` -L`


11

Noté un comportamiento extraño con el ducomando cuando se usa con la -Lopción de línea de comando.

Estoy usando Slackware 14 y Coreutils 8.19.

Para reproducir el comportamiento extraño, cree dos carpetas:

mkdir foo
mkdir bar

Cree un archivo dentro de una de las carpetas:

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

Y un enlace simbólico en la otra carpeta:

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

Ahora, si escribe:

du -h -L bar

Obtendrás:

16k bar

Dado que el enlace simbólico fue desreferenciado. Pero si escribes:

du -h -L *

Obtendrás:

16K     foo
4.0K    bar

Y el enlace simbólico no será desreferenciado. ¿Me estoy perdiendo de algo?


parece que duquiere jugar de manera inteligente aquí, pero si ejecuta df -a -L bar foola salida, está muy mal (contando los 16K en la barra, dejando vacío).
guido

Respuestas:


18

Por defecto, dusolo contará cada archivo una vez si está vinculado a varias veces. Si lo ejecuta du -L bar, contará el archivo porque solo lo alcanza una vez. Sin embargo, si lo ejecuta du -L *, solo lo contará la primera vez que lo vea. Por ejemplo:

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

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

Observe que intercambiando el orden de los argumentos cambia qué carpeta se informa como 16K.

Puede forzar dua contar el archivo dos veces pasando el -lparámetro.

Editar:

Los enlaces simbólicos son un tipo especial de archivo, y se necesita un paso adicional para seguir el enlace. duno seguirá enlaces simbólicos a menos que la -Lopción esté habilitada.

Un enlace duro, por otro lado, es básicamente un archivo existente en dos (o más) carpetas. dupresumiblemente rastrea qué archivos ha visto por número de inodo para evitar contarlos dos veces. -ldeshabilita este comportamiento.

Entonces, con solo -L, seguirá el enlace simbólico, pero si el archivo de destino tiene un número de inodo que ya ha visto, no se volverá a contar. Con solo -lcontará los enlaces duros duplicados, pero no seguirá los enlaces simbólicos.

Si usa -ly -Ljuntos, ambos seguirán los enlaces simbólicos y también permitirán contar los archivos de destino más de una vez.


Gracias. Esto funciona. Sin embargo, me encantaría tener alguna explicación adicional. En la página hombre, leí que -llo hace count sizes many times if hard linked, pero aquí estoy trabajando con enlace simbólico. Además, -lsolo no resuelve el problema, mientras que si uso ambos -ly -Lcuenta el tamaño correctamente.
Zagorax

@Zagorax Sí, la página del manual no es clara sobre cómo -le -Linteractuar. La explicación se hizo demasiado larga para un comentario, así que actualicé mi respuesta.
David Baggerman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.