¿Qué es exactamente punto punto (..)? ¿Por qué es diferente su comportamiento con los enlaces simbólicos?

15

Estoy tratando de entender la naturaleza de ..(doble punto). Parece apuntar a diferentes objetivos según cómo accedas a él.

Ejemplo:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

Ahora, /outer/middle/inner/..conduce a /outer/middle/, pero si accedo a través del enlace simbólico, /outer/inner/..conduce a /outer/. Parece que hay dos diferentes ..aquí.

¿Qué es ..exactamente? enlace simbólico? enlace duro? ¿O se genera dinámicamente dependiendo de la ruta cuando se accede al directorio? O tal vez mi comprensión de los enlaces simbólicos es incorrecta.

Editar:

Otra observación relacionada

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

Ahora si trato de acceder al archivo a través de /outer/inner/fél funciona. Pero no debería, ya /outer/inner/../fileque no apunta a un archivo. el archivo está adentro /outer/middle/inner/... ¿Esto parece contradecir el comportamiento de arriba?

usuario98456
fuente
Tenga en cuenta que los enlaces simbólicos no son accesos directos; son más como punteros.
wizzwizz4

Respuestas:

35

..es un enlace fijo al directorio padre que se crea como parte de la entrada del directorio.

Si publica ls -ailen cada uno de estos directorios, debería ver que todas las siguientes entradas tienen el mismo inode(primer campo) y el recuento de enlaces duros (tercer campo):

  • ..cuando se ejecuta ls -aileninner
  • .cuando se ejecuta ls -ailenmiddle
  • middlecuando se ejecuta ls -ailenouter

Ahora, / externo / medio / interno / ... conduce a / externo / medio /, pero si accedo a él a través del enlace simbólico, / externo / interno / ... conduce a / externo /. Parece que hay dos diferentes ... aquí.

Hay una ..entrada en inner. Si su directorio de trabajo actual es outer, debería ver los mismos resultados (una lista de directorios de middle)

  • ls -al inner/..
  • ls -al middle/inner/..

La única situación en la que "el acceso" ..a través del enlace simbólico debe proporcionar un comportamiento diferente es si cden innerel uso del enlace simbólico, para que su lógica de directorio de trabajo ( pwd -L) difiere de su físico directorio de trabajo ( pwd -P). En este caso, cd ..lo llevará de vuelta a outer no porque haya una ..entrada diferente , sino porque su shell está realizando un seguimiento de su directorio de trabajo lógico y le muestra un nivel, en lugar de hacer referencia a la ..entrada real inner.

Esta es una conveniencia proporcionada, por ejemplo, bashcomo parte del cdcomando incorporado . Puede anular esto pidiéndole que cambie a la ..entrada real con

cd -P ..

donde -Pindica cd(como en el caso pwdanterior) que use la ruta física.

usuario4556274
fuente
Ajá, la confusión viene de usar cdpara verificar. Entonces, corrígeme si estoy equivocado, ..siempre apunta al padre físico, si usa un enlace simbólico .., se dirigirá al padre (físico) real. La confusión ocurre solo al cdingresar en directorios.
user98456
Esto también explica el comportamiento de los segundos. Muchas gracias.
user98456
3
@Theophrastus, ls -laite muestra que /..es el directorio raíz en sí, nuevamente (también conocido como /. o /). A menos que el sistema de archivos esté roto, no debería haber otro caso donde . == ..; incluso cuando se monta un fs en algún lugar, obtiene el correcto ..del padre (temporal) (por lo que hay algo de magia allí, ..no es solo una entrada simple y estática en la tabla del sistema de archivos).
AnoE