NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
Desde 1971 Unix Primera edición Manuales .
Hay una segunda forma de sintaxis simple.
Edit: Me poner el archivo o nombre de archivo en lugar de TARGET --- ver comentarios, etc. véase también muy largo Además en la parte inferior, dirigiéndose al iceberg, duro y blando de ln
, no sólo la punta de la misma.
Entonces GNU ln
tiene esto:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
donde no necesita el nombre del enlace. Después de ln -s /usr/lib/modules
obtener un
modules -> /usr/lib/modules
con el mismo nombre que FILENAME ("target" o "source"), justo donde estás. No hay elección, no hay confusión.
Ahora, si es más exigente y desea que el enlace se cree con otro nombre y / o en otro lugar , agregue ese deseo como nombre o ruta. El objetivo real es lo primero, el nombre del nuevo enlace de fantasía adicional segundo.
O usted dice: "Conozco esta notación de flecha ls -l
para enlaces. No tengo una flecha en el caparazón para mostrar la dirección de mi enlace. Así que tengo que darle la vuelta".
Lo crea en una dirección, por lo que puede usarlo en la otra.
(FIN DE LA PARTE DE RESPUESTA-PREGUNTA)
En otro nivel, la palabra "enlace" en sí lleva un doble significado oculto. Los enlaces simbólicos llegaron más tarde, por lo que en los primeros días un enlace era solo un enlace. No había -s
opciones suaves y duras, no . Y ahora incluso uso el simbolismo fuente-destino:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
En esta etapa, hay enlaces, pero no duros y blandos, y ls -l
no muestra flechas, porque no hay dirección en un enlace (duro). Un "enlace" en esa etapa de evolución de Unix significaba que el nombre de archivo "B" (entrada de directorio "B") en el sistema de archivos apunta al mismo inodo al que apunta el nombre de archivo "A".
Los archivos A y B están "vinculados" juntos, porque comparten los mismos bloques. Entonces, ahora con cada rm, el kernel tiene que verificar: ¿elimino / libero los bloques de este archivo en el disco, o hay otro archivo vinculado a los mismos bloques? Para eso, se utiliza un contador de enlaces.
Supongamos que desea mantener un archivo grande en / tmp grom siendo eliminado y hacerlo ln /tmp/bigfile
. Ahora tiene un gran archivo grande en su directorio de trabajo. Después de limpiar / tmp y remover el "original", felizmente seguirás usando los mismos bloques de datos. No obtienes un enlace muerto o colgante, tienes un archivo normal. Apuntando a ningún archivo pero solo bloques del sistema de archivos como lo hace cada entrada de directorio. Solo que ahora "limpieza" / tmp no es tan eficaz como lo era. Parece vacío, y lo es, pero los bloques en la partición no se liberan.
A pesar de que un enlace rígido no cuesta espacio en sí mismo como lo hace cp, indirectamente puede hacerlo.
Agregando ln -s
a la secuencia anterior:
ln -s A B --- copy only the file's name to "B"
Ahora "B", el enlace suave, solo tiene una cadena con un nombre de ruta. Esta es información "blanda". Técnicamente "A" y "B" no están relacionados. Pero aún así B es un "enlace" en el nuevo sentido de que puede usar ese nombre de ruta almacenado como acceso directo a "A". Ahora es "un enlace a A" (punto) y no "vinculado con el inodo del archivo A"
Ambos tipos de enlaces pueden confundir no solo a los humanos sino también al kernel / fs. La página del manual de 1971 señala: "ERRORES: los enlaces se copian dos veces y se restauran como archivos separados con inodos separados".
Los enlaces duros a directorios (poco frecuentes / no permitidos) pueden provocar fácilmente una obstrucción.
Los enlaces blandos a directorios (muy comunes) pueden conducir a bucles eternos, deben ser reconocidos por utilities / kernel.
Ejemplo práctico en bash
Comenzando con un archivo regular "F" ...
ln F Fhard
... hace que Fhard tenga el mismo tamaño que F, pero AMBOS aparecen ahora en rojo oscuro SIN flechas ls -l --color
. Por stat
mostrar "Enlaces: 2" en relación con "Inode: xyz". El enlace duro F convierte a F en un enlace duro. Ambos son / stay filetype "archivo normal". Pero ambos tienen un inodo con un recuento de enlaces superior a 1.
ln -s F Fsoft
... crea un pequeño archivo "irregular" "Fsoft" con el tipo de archivo "enlace simbólico" --- incluso más ahorro de espacio que un directorio vacío. A ls -l
no muestra nada especial para "F". Para Fsoft, el tamaño que se muestra es de 1 byte ya que la cadena es 'F' y Fsoft -> F
se muestra como nombre. No es necesario colorear un enlace suave para reconocer uno. Porque en la forma abreviada ls -F
se @
agrega una cadena en espiral :Fsoft@
Con ls -l
esto se ve así:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard tiene el tamaño y el tipo de F.
Fsoft tiene el nombre de F y la longitud del nombre de F como tamaño, y un tipo de archivo diferente.
Corto ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
agregar --block-size=1
no produce los mismos tamaños tampoco. Fsoft tiene el tamaño "un byte, cero bloques". F y Fhard se desvían en paralelo:
6074368 F 6074368 Fhard 0 Fsoft@
Para ver si Fsoft cuelga o no, le ls
permite usar colores.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
y lo llamasb
"