Estoy tratando de entender mejor los enlaces simbólicos ... y no tener mucha suerte. Esta es mi salida de shell real con nombre de usuario / host cambiado:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Pensé que se suponía que un enlace simbólico debía funcionar de manera transparente, en el sentido de que podría operar en el archivo al que apunta como si estuviera accediendo al archivo directamente (excepto, por supuesto, en el caso de rm
que, por supuesto, el enlace simplemente se elimine )
linux
ubuntu
bash
symbolic-link
orokusaki
fuente
fuente
df -T
) - ¿El resultado anterior es extraño para ti también?Respuestas:
Los enlaces simbólicos tienden a gustar de rutas completas o relativas al enlace, de lo contrario a menudo se pueden buscar
file-1.txt
localmente (por extraño que parezca).Navegue
proper
y ejecutels -l
y podrá ver que el enlace simbólico está buscandoactual/file-1.txt
, cuando debería estarlo../actual/file-1.txt
.Así que tienes dos opciones:
Dar el camino completo
Navegue a la carpeta en la que desea que esté el enlace y enlace desde allí
Editar : una pista para guardar la escritura.
Podrías hacer
ln -s ~/actual/file-{1,2}.txt ~/proper
Los elementos en las llaves se sustituyen y se colocan uno detrás del otro, creando el comando
fuente
rm -rf *
en una carpeta con enlaces simbólicos: puede borrar la carpeta a la que está vinculada. Solo haz rm symlinkname. Solo algunas cosas en las que he cometido errores: DEl problema es el uso de rutas relativas. Si especifica la creación de su enlace con la ruta explícita completa, funciona.
Su ejemplo crea enlaces en
proper
ese aspecto para un subdirectorio llamado actual en el directorio actual, en lugar de su padre de ambos.fuente
Los enlaces simbólicos pueden ser complicados. En esencia, un enlace simbólico es un archivo que contiene un nombre de archivo / nombre de ruta para otro archivo (y que está marcado para un tratamiento especial). Si el nombre de ruta en el archivo de enlace comienza con '
/
', entonces se trata como un nombre de ruta absoluto, y las cosas son bastante sencillas. Si no comienza con una barra oblicua, se trata como un nombre de ruta relativo, relativo al directorio donde se encuentra el enlace. (Esto es cierto tanto si el nombre contiene barras como si no). Por lo tanto, creóproper/file–1.txt
como un enlace a "actual/file–1.txt
", y cuando intentó acceder a él, el sistema intentó accederproper/actual/file–1.txt
. Deberías haber dichoPor cierto, no necesitabas los
touch
comandos.echo "file 1" > actual/file–1.txt
es suficiente para crearactual/file–1.txt
.fuente
Un problema relacionado, y puede ser obvio para muchos, pero me dejó perplejo durante unos minutos: si está creando un enlace simbólico dentro de un directorio que está enlazado, o si hay un enlace simbólico dentro de la ruta del directorio de trabajo actual, puede correr a problemas con enlaces simbólicos que no funcionan.
Use
cd ..
yls -l
repetidamente para ver si sus directorios principales están vinculados a sí mismos.Si necesita crear un enlace simbólico,
cd
al directorio de destino original, y crear nuevos enlaces simbólicos allí, para que las rutas relativas sean precisas.O para decirlo de otra manera: la ruta relativa es desde el origen hasta el destino. Si el origen se enlaza posteriormente, está bien. Pero es posible que tenga problemas para configurar un nuevo link_name de Origin dentro de un directorio que de alguna manera esté vinculado de manera simbólica.
fuente
cd ..
yls -l
repetidamente", podría usarnamei -mox $PWD
. Otra forma útil para averiguar si hay enlaces simbólicos a lo largo de la ruta es de usopwd -P
, lo que le proporciona una ruta de acceso al directorio actual, que no contiene ningún enlaces simbólicos (por lo que sipwd
ypwd -P
dar salida diferente, usted sabe que hay una en algún enlace simbólico a lo largo del camino )Cuando intentas crear un enlace a un archivo que no existe (o has dado la ruta de forma incorrecta) ln -s no arroja un error. Crea un enlace pero cuando intentas 'cat' en ese enlace dice que no se encontró ningún archivo. Incluso cuando puedes verlo usando ls. En tales casos, siempre verifique su ruta de archivo.
Porque el archivo etc / ufw / ufw.conf no existe. La ruta correcta es /etc/ufw/ufw.conf
fuente
ln -s
"a veces" no comprueba la existencia del objetivo es simplemente incorrecta.