Noté un comportamiento extraño con el du
comando cuando se usa con la -L
opció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?
symlink
disk-usage
coreutils
Zagorax
fuente
fuente
du
quiere jugar de manera inteligente aquí, pero si ejecutadf -a -L bar foo
la salida, está muy mal (contando los 16K en la barra, dejando vacío).Respuestas:
Por defecto,
du
solo contará cada archivo una vez si está vinculado a varias veces. Si lo ejecutadu -L bar
, contará el archivo porque solo lo alcanza una vez. Sin embargo, si lo ejecutadu -L *
, solo lo contará la primera vez que lo vea. Por ejemplo:Observe que intercambiando el orden de los argumentos cambia qué carpeta se informa como 16K.
Puede forzar
du
a contar el archivo dos veces pasando el-l
parámetro.Editar:
Los enlaces simbólicos son un tipo especial de archivo, y se necesita un paso adicional para seguir el enlace.
du
no seguirá enlaces simbólicos a menos que la-L
opción esté habilitada.Un enlace duro, por otro lado, es básicamente un archivo existente en dos (o más) carpetas.
du
presumiblemente rastrea qué archivos ha visto por número de inodo para evitar contarlos dos veces.-l
deshabilita 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-l
contará los enlaces duros duplicados, pero no seguirá los enlaces simbólicos.Si usa
-l
y-L
juntos, ambos seguirán los enlaces simbólicos y también permitirán contar los archivos de destino más de una vez.fuente
-l
lo hacecount sizes many times if hard linked
, pero aquí estoy trabajando con enlace simbólico. Además,-l
solo no resuelve el problema, mientras que si uso ambos-l
y-L
cuenta el tamaño correctamente.-l
e-L
interactuar. La explicación se hizo demasiado larga para un comentario, así que actualicé mi respuesta.