¿Cómo maneja Linux un comando de movimiento bajo el capó?
Digamos que muevo mi directorio de inicio
/home/me
y muevo esto a otro directorio
/home/foo/me
¿Cómo se me
cambian todas las rutas de archivos y directorios ? Sé que mi Desktop
directorio bajo me
ahora es /home/foo/me/Desktop
tan bueno como, Documents
/home/foo/me/Documents
pero ¿el sistema de archivos actualiza explícitamente cada ruta me
para reflejar el cambio? Eso no suena muy eficiente y probablemente no sea esto.
¿Dónde puedo obtener más información sobre esto?
filesystem
Jeff
fuente
fuente
Respuestas:
Para comprender cómo mueve las carpetas, es posible que necesite comprender un poco sobre el sistema de archivos en Linux. Todos los archivos y carpetas se almacenan como parte de una estructura de datos llamada " inodo ". Cada archivo tiene un número de inodo, al igual que las carpetas.
Para ver el i-nodo de la carpeta, utilice el comando
ls -ial foldername
. La primera columna muestra el número de inodo del archivo. Para cada carpeta hay dos nombres únicos.
y..
, que representan el directorio propio y el directorio principal, respectivamente.Puede intentar hacer un experimento para mover un directorio (por ejemplo, / home / me / source) con subdirectorios y archivos a otro directorio (por ejemplo, / home / me / somewhere / else). El número de inodo de / home / me / source y todo su contenido permanece igual antes y después de mover. La única diferencia es el número de inodo de
..
, que originalmente comparte el número de inodo de / home / me y ahora se convierte en el número de inodo de / home / me / somewhere / else. En una redacción simple, Linux actualiza el enlace a la fuente del directorio y luego está listo.El contenido del disco duro no se modifica de todos modos, solo el índice de inodo se actualiza cuando se mueve la carpeta. Por supuesto, este no es el caso si mueve la carpeta a una ubicación física diferente.
fuente
Si está interesado en cómo funcionan programas como
mv
ycp
, recuerde que son de código abierto y puede obtener la explicación más precisa leyendo el código. Aquí tiene enlaces a todas las utilidades principales. Específicamente, puedes encontrar mv aquífuente
you can get the most accurate explanation by reading through the code.
Siento disentir; Durante mucho tiempo no tuve absolutamente ninguna experiencia con C, e incluso ahora no lo prefiero. Además, el código fuente a menudo se optimiza y contiene más casos extremos de los necesarios. Una explicación simbólica a menudo ayuda más.