En Linux, cuando crea una carpeta, crea automáticamente dos enlaces duros al inodo correspondiente. Una que es la carpeta que solicitó crear, la otra es la .
carpeta especial de esta carpeta.
Ejemplo:
$ mkdir folder
$ ls -li
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 folder
$ ls -lai folder
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 .
124593716 drwxr-xr-x 3 fantattitude staff 102 18 oct 16:52 ..
Como puede ver, ambos folder
y .
dentro folder
tienen el mismo número de inodo (se muestra con la -i
opción).
¿Hay alguna forma de eliminar este .
enlace especial ?
Es solo por experimentación y curiosidad.
También supongo que la respuesta podría aplicarse también a ..
un archivo especial.
Traté de mirar al rm
hombre pero no pude encontrar ninguna manera de hacerlo. Cuando intento eliminar .
todo lo que obtengo es:
rm: "." y ".." no puede eliminarse
Tengo mucha curiosidad sobre la forma en que funcionan estas cosas, así que no te abstengas de ser muy detallado sobre el tema.
EDITAR: Tal vez no estaba claro con mi publicación, pero quiero entender el mecanismo subyacente responsable de los .
archivos y las razones por las que no se pueden eliminar.
Sé que el estándar POSIX no permite una carpeta con menos de 2 enlaces duros, pero realmente no entiendo por qué. Quiero saber si podría ser posible hacerlo de todos modos.
fuente
Respuestas:
Es técnicamente posible eliminar
.
, al menos en sistemas de archivos EXT4. Si crea una imagen del sistema de archivostest.img
, móntela y cree unatest
carpeta, luego desmóntela nuevamente, puede editarla usandodebugfs
:debugfs
no se queja y borra debidamente la.
entrada del directorio en el sistema de archivos. Eltest
directorio todavía es utilizable, con una sorpresa:muestra solo
así que
.
realmente se fue. Sin embargocd .
,ls .
,pwd
todavía se comportan como de costumbre!Me había hecho previamente esta prueba utilizando
rmdir .
, pero que elimina i-nodo del directorio ( enormes gracias a BowlOfRed para señalar esto ), lo que dejatest
una entrada de directorio colgando y es la verdadera razón de los problemas encontrados. En este escenario, latest
carpeta queda inutilizable; después de montar la imagen, la ejecuciónls
producey el registro del kernel muestra
Al ejecutarse
e2fsck
en esta situación en la imagen, se elimina eltest
directorio por completo (el inodo del directorio desaparece, por lo que no hay nada que restaurar).Todo esto muestra que
.
existe como una entidad específica en el sistema de archivos EXT4. Me dio la impresión del código del sistema de archivos en el núcleo que espera.
y..
existe, y advierte si no lo hacen (vernamei.c
), pero con launlink .
prueba basada en no vi esa advertencia.e2fsck
no le gusta la.
entrada del directorio que falta y se ofrece a solucionarlo:Esto vuelve a crear la
.
entrada del directorio.fuente
.
carpeta realmente existe dentro del FS y las herramientas esperan que funcione correctamente.mount
ols
). No he visto si surgen otros problemas.rmdir .
lo que realmente estaba destruyendotest
y dejando eso como una entrada de directorio colgante, lo que esperarías causar problemas. ¡Consultaréunlink
y actualizaré mi respuesta!No hay forma de eliminar esta entrada del directorio. La
.
entrada significa "este directorio", la..
entrada significa "el directorio padre de este directorio". En realidad, no son enlaces duros, así es como se crea / representa la estructura de directorios.fuente
ls
u otras herramientas automáticamente, lo que no me parece realista.Como se describe en las Notas de Lion sobre el código fuente de Unix 6Unix temprano tenía un archivo de disco donde ambos archivos y directorios estaban representados en el disco por estructuras de inodo. Había un bit especial que indicaba que el contenido del archivo era un directorio. Cada inodo tenía un enlace a su inodo propietario que permitía a un archivo saber en qué directorio estaba. La excepción era el directorio '/' que era el propietario. También había un enlace a los contenidos. Si un inodo no tenía contenido, podría ser devuelto a la lista libre. Dado que un directorio era solo un archivo bendecido, incluso un directorio vacío tenía que tener contenido para evitar que se recolectara basura. Así, el .. era el enlace del inodo al inodo padre y al. estaba allí para indicar que el directorio todavía era utilizable. rmdir (llamando a unlink) podría eliminar el.
fuente
Como dice la respuesta 'posible duplicado de' post ', el estándar POSIX especifica que si rmdir intenta eliminar el directorio actual, fallará.
Con todo lo que construyas tienes que tener una base. Es difícil definir rutas relativas sin una forma de decir 'aquí'. Entonces el '.' se define como 'aquí'.
Además, puede eliminar 'punto' y 'punto punto'. Escriba su propio sistema operativo que no los defina. Aunque Unix (y, por extensión, Mac OSX), Linux e incluso MS DOS y Windows usan dot y dotdot.
TL; DR - 'punto' está en la definición del sistema operativo.
fuente