Solía ln
escribir enlaces simbólicos durante años, pero todavía obtengo el orden de los parámetros al revés.
Esto generalmente me tiene escribiendo:
ln -s a b
y luego mirando la salida para recordarme.
Siempre imagino ser a -> b
como lo leo cuando en realidad es lo contrario b -> a
. Esto se siente contrario a la intuición, así que descubro que siempre me estoy cuestionando.
¿Alguien tiene algún consejo para ayudarme a recordar el orden correcto?
a
y lo llamasb
"ln source target
. Igual quecp source target
,mv source target
; ...Respuestas:
Utilizo lo siguiente:
ln
tiene una forma de un argumento (segunda forma listada en la página de manual ) en la que solo se requiere el objetivo (porque cómo podríaln
funcionar sin conocer el objetivo) yln
crea el enlace en el directorio actual. La forma de dos argumentos es una adición a la forma de un argumento, por lo tanto, el objetivo es siempre el primer argumento.fuente
ln
.-t
), entonces se siente casi como una prueba. "ln
crea el enlace en el directorio actual. La forma de dos argumentos es una adición a la forma de un argumento y, por lo tanto, el objetivo es siempre el primer argumento". Debido a que tiene sentido que este sea el caso al considerar la segunda forma, creo que esto me ayudará a recordar.Voy por "
ln
es comocp
. La 'fuente' debe ser lo primero".fuente
mv
.mv
,cp
yln
todos toman un archivo existente como primer argumento y el archivo de destino previsto o el nombre del directorio como segundo argumento.memcpy
,strcpy
etc. funcionen al revés.memcpy(dest,src,n);
mapas muy biendest = src;
. En otras palabras, establezca (los primerosn
bytes de) dest igual a (los primerosn
bytes de) src.La mayoría de los Unices documentan el
ln
comando como(Estoy omitiendo opciones, etc., aquí)
Ejemplos:
El estándar POSIX
OpenBSD :
NetBSD y FreeBSD
Mac OS
Solaris
AIX
El
ln
manual de GNU llama alsource
objetivo y altarget
nombre del enlace .Manual de GNU para
ln
Ignorando la elección de palabras de GNU, la
ln
utilidad sigue el mismo tipo de semántica que, por ejemplo,mv
ycp
en que el objetivo es lo que se crea a partir de la fuente .Por lo tanto,
crearía el enlace simbólico que
b
apunta aa
.Tenga en cuenta también que al crear enlaces simbólicos , la fuente es simplemente una cadena que representa a lo que debe apuntar el enlace simbólico. Por lo general, no se realiza ninguna verificación para validar que apunta a algo útil:
fuente
ln -s a b
funciona, y eso no tiene nada que ver con la redacción de GNU, ya que no creo que haya visto nunca la fraseología en la página del manual. : D (Es más fácil correrln -si a b
cuando no estoy seguro, se quejará sib
ya existe).En caso de que esto ayude a alguien: me he acostumbrado a pensar que es "en qué dónde ", lo que me ayuda a recordar que el primer argumento ("qué") es el archivo existente, el segundo ("dónde") es el lugar ponerle (un enlace). A diferencia del razonamiento en la mayoría de las otras respuestas, esto no es más que una frase concisa que puedo recitar mentalmente mientras escribo un comando, que sirve como ayuda para la memoria. Esto probablemente no será útil para todos, pero sospecho que ayudará a algunas personas.
Ayuda que los otros comandos estándar de manipulación de archivos usen la misma convención, por lo que puedo hacer lo mismo para
cp
ymv
.fuente
Recientemente escuché una excelente manera de recordar esta cosa en particular: una rima
El primer verso es cuáles son los argumentos de ln: algo antiguo seguido de un nombre de la nueva entrada del directorio.
fuente
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:donde no necesita el nombre del enlace. Después de
ln -s /usr/lib/modules
obtener uncon 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: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: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" ...
... hace que Fhard tenga el mismo tamaño que F, pero AMBOS aparecen ahora en rojo oscuro SIN flechas
ls -l --color
. Porstat
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.... 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' yFsoft -> F
se muestra como nombre. No es necesario colorear un enlace suave para reconocer uno. Porque en la forma abreviadals -F
se@
agrega una cadena en espiral :Fsoft@
Con
ls -l
esto se ve así: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
: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:Para ver si Fsoft cuelga o no, le
ls
permite usar colores.fuente
Es realmente útil recordar que el nombre del enlace es opcional. Si no se proporciona, se utiliza el nombre base del destino del enlace.
es idéntico a soltar el nombre del enlace por completo:
Esto no tendría ningún sentido si el objetivo del enlace fuera mencionado en último lugar.
fuente
Solo piense en Unix -> AT&T -> destino a la derecha:
fuente
ln abc def
,abc
ydef
son el mismo objeto; son indistinguibles Además, la operación no tiene ningún efectoabc
, aparte de aumentar su recuento de enlaces. El destino esdef
. Se acaba de instalar un puntero al objeto en ladef
ubicación.ln -s abc def
significa que el contenidoabc
está escrito en la ubicacióndef
.abc
ni siquiera tiene que resolver nada; Puede ser un enlace colgante.mv dest src
,ln [ -s ] dest src
,cp dest src
, ...Personalmente, prefiero evitar recordar X, a favor de saber dónde buscar X cuando lo necesito. También soy fanático de la actitud de "más vale prevenir que curar", por lo que siempre me gusta revisar cuidadosamente lo que estoy escribiendo, especialmente como root.
En este caso, la respuesta está literalmente en las primeras líneas de la página de manual:
No lo habría sugerido si fuera necesario profundizar en la página de manual, pero como está justo al principio, en mi humilde opinión, vale la pena los 3 segundos que lleva escribir
man ln
y salir.fuente
Similar a cp, que leí mentalmente como "copiar esto a eso", leí los comandos ln como "vincular esto a eso".
fuente
Así es como lo recuerdo: Olvídate del objetivo. En otras palabras, si estoy en dir1 y quiero crear un enlace simbólico aquí al archivo1 que existe en / some / other / dir /, simplemente haría:
Obtendrá un enlace simbólico llamado file1 en dir1 que apunta a / some / other / dir / file1. Desde la página de manual de ln:
Solo tenga en cuenta que esto funciona solo si desea que el enlace simbólico tenga el mismo nombre que el objetivo (lo que probablemente sea el caso).
fuente
Me gustaría ampliar la respuesta de @ gary.
Además de su respuesta: el
ln
comando puede aceptar un número arbitrario de argumentos, por lo que puede crear múltiples enlaces simbólicos en una sola invocación (lo cual es útil cuando lo necesita).ln -s foo bar baz
, ¿cuál es la explicación más lógica de qué argumentos significa qué?ln -s foo bar
, ¿cuál es la explicación más lógica de qué argumentos significa qué?fuente
Imagine una versión de la
ln
cual le permitió crear múltiples enlaces (simbólicos) en un solo comando.No haría nada para revertir eso, ya que un enlace simbólico solo puede apuntar a uno
TARGET
a la vez y la convención de línea de comando normal es colocar la parte que se repite al final de la línea de comando, por ejemplogrep PAT [FILE]...
fuente
"
ls
Muestraa -> b
de maneraln a b
"Solo recuerda que esto está mal.
fuente
ls -l
:link -> target
puede confundir tu idea de cómo configurar laln
línea de comando. Pero me temo que no ayudará mucho.