Pregunta:
Estoy enfrentando algún problema con la creación de enlaces suaves. A continuación se muestra el archivo original.
$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11 2014 /etc/init.d/jboss
La creación del enlace falla con un problema de permiso para el propietario del archivo:
ln -sv jboss /etc/init.d/jboss1
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied
$ id
uid=689(askar) gid=500(admin) groups=500(admin)
Entonces, creé el enlace con privilegios de sudo:
$ sudo ln -sv jboss /etc/init.d/jboss1
`/etc/init.d/jboss1' -> `jboss'
$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
A continuación, intenté cambiar la propiedad del enlace suave al usuario original.
$ sudo chown askar.admin /etc/init.d/jboss1
$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss
Pero el permiso del enlace flexible no se modificará.
¿Qué me falta aquí para cambiar el permiso del enlace?
Respuesta:
En un sistema Linux, cuando se cambia la propiedad de un enlace simbólico usando chown
, por defecto cambia el destino del enlace simbólico (es decir, a lo que apunta el enlace simbólico ).
Si desea cambiar la propiedad del enlace en sí, debe usar la opción -h
para chown
:
-h, –no-dereference afecta a cada enlace simbólico en lugar de a cualquier archivo referenciado (útil solo en sistemas que pueden cambiar la propiedad de un enlace simbólico)
Por ejemplo:
$ touch test
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
$ sudo ln -s test test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
$ sudo chown root:root test1
$ ls -l test*
-rw-r--r-- 1 root root 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
Tenga en cuenta que el destino del enlace ahora es propiedad de root.
$ sudo chown mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
Y de nuevo, el enlace test1
sigue siendo propiedad de root, a pesar de que test
ha cambiado.
$ sudo chown -h mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 mj mj 4 Jul 27 08:47 test1 -> test
Y finalmente cambiamos la propiedad del enlace usando la opción -h
.