¿Qué representa el "tamaño" de un enlace simbólico en la salida de ls?

11

Comenzaré con el ejemplo:

$ 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 es un enlace simbólico del archivo file

Además, como sé 1650, sería el tamaño del archivo file, pero ¿cuál es el número 7que se encuentra debajo de la columna de tamaño?

EDITAR: Ejecutando du:

$ du -sh symfile
0   symfile

Entonces, ¿cómo podrías probar que 7 es el tamaño del enlace simbólico?


ACTUALIZAR:

prueba esto

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

Tenga en cuenta que el tamaño también está aquí 0.

Ahora:

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

Entonces, supongo que no es solo un tamaño

Maythux
fuente
2
El 7depende del sistema de archivos (y posiblemente otros parámetros). Es 7 en ext4, pero podría ser 13 en btrfs y 3 en tmpfs.
muru
1
Es un tamaño, pero el tamaño depende del sistema de archivos (btrfs presumiblemente almacena más metadatos que ext4 y ext4 más que tmpfs). Puede llenar su disco con enlaces. Solo digo que no se sorprenda si ve un número diferente en un sistema de archivos diferente.
muru
1
Su entrada de directorio tiene un tamaño mínimo, más grande de lo que necesita. Realice suficientes entradas y el tamaño del directorio aumentará. Consulte con: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
muru

Respuestas:

13

Los enlaces simbólicos ocupan el espacio necesario para almacenar el nombre y el destino más unos pocos bytes para otros metadatos.

Entonces es el tamaño del enlace simbólico.

Con respecto al tamaño de du -sh: du solo mira cuántos bloques están asignados, por lo que puede mostrar 0. staty ls -les mejor mostrar el tamaño en ese sentido.

Rinzwind
fuente
entonces por qué du -sh symfileda 0? -
Maythux
du solo mira cuántos bloques están asignados, por lo que puede mostrar 0. stat y ls -l son más inteligentes.
Rinzwind
Por favor lea la actualización
Maythux
Vea mi respuesta: es el nombre, el objetivo y algunos metadatos. En total representa 7 bytes. Otros sistemas operativos almacenan otros metadatos y, por lo tanto, tendrán un tamaño diferente.
Rinzwind 01 de
La pregunta era "¿Cómo puedes PROBARLO?"
Pilot6
5

Es el tamaño del enlace simbólico en bytes.

Algunos sistemas de archivos tienen un área pequeña dentro de la entrada del directorio que se usa para el comienzo del archivo, lo que acelera significativamente el procesamiento de enlaces simbólicos y lecturas pequeñas (piensa file) a expensas de las entradas de directorio más grandes.

Si todo el contenido del enlace simbólico encaja en la entrada del directorio, entonces no se asignan bloques de datos y el dutamaño se muestra como cero. Si el enlace simbólico no encaja, el espacio se asigna normalmente (por lo que termina con una asignación de bloque único), que puede ser optimizado por el sistema de archivos mediante la fusión de cola (pero no hay API para dusaber sobre esto).

El ext4sistema de archivos realiza esta optimización solo para enlaces simbólicos, los criterios se encuentran en la función ext4_inode_is_fast_symlink .

Simon Richter
fuente
" Algunos sistemas de archivos ... ": su respuesta se mejoraría si enumerara los sistemas de archivos comunes con esta función (y los comunes sin ella).
RM
1

Este es el tamaño del archivo de enlace simbólico en bytes.

El archivo Symlink es un archivo normal que almacena datos sobre dónde está el archivo al que apunta. En ext 4 es de 7 bytes.

Piloto6
fuente
tamaño en qué? ¿son bytes o bits o qué?
Maythux
Tamaño en bytes ..
Pilot6
1
entonces por qué du -sh symfileda 0?
Maythux
du no se presize con archivos muy pequeños. Intente usar du en un archivo de 99 bytes. Mostrará 4.0K.
Pilot6
ese es mi punto también, entonces al menos debería mostrar 4k para el enlace simbólico ya que en el concepto del sistema operativo está registrando un clúster para este archivo
Maythux