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.
-
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 hecholn -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
Este es el comportamiento estándar para casi todos los comandos de Unix.
-
los
-s
La opción especifica que está creando una enlace suave a diferencia de un enlace duro. Leer más aquí. -
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.