Saltar al contenido

¿De qué está hecho un enlace simbólico? Comprender la estructura de los enlaces simbólicos

Solución:

Enlaces simbólicos

Referencias autorreferenciadas a nombres de archivo

Un enlace simbólico es literalmente un archivo de texto tratado especialmente por el kernel y cuyo contenido es una ruta a otro archivo / directorio.

Puede leer el contenido de un archivo de enlace simbólico con readlink, y si normalmente abre un archivo de enlace simbólico, el sistema abrirá el archivo / directorio al que hace referencia el contenido del enlace simbólico.

Analogía de referencia de puntero / C ++

Si está familiarizado con C / C ++, entonces un enlace simbólico se comporta como una referencia de C ++ o un puntero con referencia automática en la mayoría de los contextos (no todos: por ejemplo, rm o mv trabajar directamente en el enlace simbólico, no en el destino). La diferencia es que las referencias reales de C ++ se unen a las direcciones de memoria, mientras que los enlaces simbólicos se unen a las direcciones del sistema de archivos.

Enlaces simbólicos colgantes

El contenido de un enlace simbólico no tiene que ser una referencia de ruta de archivo válida -> entonces tienes un enlace simbólico colgando (como un puntero danglig o una referencia colgante).

Enlaces simbólicos relativos

Si la ruta de archivo en un enlace simbólico no es absoluta (comenzando con /), entonces la ruta de archivo relativa se resuelve en relación con la ubicación del enlace simbólico (en contextos que no son de enlace simbólico, las rutas relativas se resuelven en relación con el enlace simbólico). $PWD).


La bandera -s y los enlaces duros

los -s la bandera es para “crear symlinks “. ln también puede crear enlaces duros. Los enlaces duros operan a otro nivel, que está más cerca de la implementación del sistema de archivos (en consecuencia, no puede crear enlaces duros en diferentes sistemas de archivos).

Los sistemas de archivos Unix almacenan nombres de archivo (nombres de directorio /) y contenido de archivo (contenido de directorio) por separado, y los nombres son solo punteros de referencia contados por referencia a su contenido. Un vínculo físico crea otro nombre para el mismo contenido mientras aumenta el recuento de referencias.

$ echo 'the contents' > f1
$ ls -l f1 
  * 1 * #the 2nd column is the reference count
$ ln f1 f2 #create another name for the contents of f1
$ ls -l f1
   * 2 * #the contents of f1 has two named references to it
$ rm f1  #the contents of f1 lives on (in f2) #
         # because rm only removes the reference to the data block
         #and this isn't the only reference
         #(rm ivokes a system call literally named `unlink`)

Vínculos duros de directorio

No puede crear enlaces duros de directorio, pero . y .. son enlaces físicos de directorio creados implícitamente para usted. En consecuencia, el recuento de enlaces físicos de un directorio refleja cuántos subdirectorios tiene (cada subdirectorio viene con un .. enlace fijo al padre).


Symlinks y hardlinks: descripción general del panorama:

echo 'file data' > fileName 
ln fileName fileName2 #hardlink
ln -s "$PWD/fileName" absoluteSymlinkTofileName 
ln -s fileName relativeSymlinkTofileName 

En el mismo sistema de archivos físico, ln crea otro nombre para file data (ln fallará en los sistemas de archivos). Puede eliminar cualquiera fileName o fileName2 y mientras quede al menos un nombre, file data vive en.

absoluteSymlikTofileName es una referencia autorreferenciada a la fileName nombre. Siempre que esa ruta se resuelva en algo, el enlace simbólico es válido. Si elimina el destino, el enlace simbólico cuelga. Este es un enlace simbólico absoluto, por lo que puede moverlo a otros lugares sin cambiar su validez.

relativeSymlinkToFileName se refiere a un nombre llamado fileName en el mismo directorio que el directorio de relativeSymlinkToFileName. Si lo mueve a otro directorio que también tiene un archivo (o directorio) llamado fileName, luego apuntará a eso.

  1. los ln El comando crea el enlace simbólico en el directorio actual si no se especifica ningún directorio. Por lo tanto, phpmyadmin.conf se pone en /etc/apache2/conf-enabled/. También podrías haber hecho

    ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
    

    Este es el comportamiento estándar para casi todos los comandos de Unix.

  2. los -s La opción especifica que está creando una enlace suave a diferencia de un enlace duro. Leer más aquí.

  3. No entiendo bien la pregunta (“¿cómo puede el sistema saber dónde está?”). phpmyadmin.conf se crea en el directorio actual (en este caso /etc/apache2/conf-enabled/).

ln -s /etc/phpmyadmin/apache.conf phpmyadmin.conf

3. Este comando crea un enlace simbólico en la ubicación /etc/apache2/conf-enabled/phpmyadmin.conf, cuyo objetivo es /etc/phpmyadmin/apache.conf. Después de esto, abriendo el archivo /etc/apache2/conf-enabled/phpmyadmin.conf es equivalente a abrir /etc/phpmyadmin/apache.conf. Si /etc/phpmyadmin/apache.conf existe, entonces /etc/apache2/conf-enabled/phpmyadmin.conf tiene el mismo contenido. Si /etc/phpmyadmin/apache.conf no existe entonces abriendo /etc/apache2/conf-enabled/phpmyadmin.conf fallará, como si /etc/apache2/conf-enabled/phpmyadmin.conf no existía.

Un enlace simbólico es solo texto. El enlace en sí sigue existiendo y apuntando al mismo objetivo, ya sea que ese objetivo exista o no. Esto permite, por ejemplo, que los enlaces simbólicos a unidades extraíbles sigan existiendo, ya sea que la unidad esté presente o no, o reemplazar un archivo al que apunte un enlace simbólico (el hecho de que el objetivo pueda dejar de existir temporalmente no afecta la simbólica Enlace). Cuando el objetivo no existe, se dice que el enlace simbólico es roto

1. El enlace podría haberse creado sin cambiar el directorio actual. Por supuesto, el comando tendría que cambiarse para incluir la ruta completa al enlace deseado.

ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf

Cuando el enlace simbólico es absoluto (es decir, su destino es una ruta absoluta), no hay ninguna ventaja en cambiar al directorio antes de crear el enlace. Cuando un vínculo simbólico es relativo, hay una ventaja, porque el primer argumento para ln -s es el destino del enlace, y se interpreta en relación con la ubicación del enlace, no con el directorio actual en el momento en que ln se ejecuta el comando. Por ejemplo, se podría haber creado un enlace relativo como este:

ln -s ../../phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf

Pero si el directorio actual no /etc/apache2 entonces en general ../../ no es /etc, asi que ../../phpmyadmin/apache.conf no es un objetivo existente; por ejemplo, no se recogerá al completar el shell.

2. El ln El comando existía antes que los enlaces simbólicos. Originalmente creó enlaces duros, que tienen un caso de uso significativamente más limitado, por lo que no se usan mucho. A pesar de que ln -s se usa con más frecuencia que simple ln, el significado de llano ln no se puede cambiar porque eso rompería la compatibilidad con versiones anteriores.

Si te gusta la programación, tienes la libertad de dejar una noticia acerca de qué le añadirías a este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *