AFAIK, no, no puedes. Tienes que eliminarlo y recrearlo. En realidad, puede sobrescribir un enlace simbólico y así actualizar el nombre de ruta al que hace referencia:
$ ln -s .bashrc test
$ ls -al test
lrwxrwxrwx 1 pascal pascal 7 2009-09-23 17:12 test -> .bashrc
$ ln -s .profile test
ln: creating symbolic link `test': File exists
$ ln -s -f .profile test
$ ls -al test
lrwxrwxrwx 1 pascal pascal 8 2009-09-23 17:12 test -> .profile
EDITAR : Como el OP señaló en un comentario, el uso de la --forceopción hará que se lnrealice una llamada al sistema unlink()antes symlink(). A continuación, la salida de stracemi caja de Linux lo demuestra:
$ strace -o /tmp/output.txt ln -s -f .bash_aliases test
$ grep -C3 ^unlink /tmp/output.txt
lstat64("test", {st_mode=S_IFLNK|0777, st_size=7, ...}) = 0
stat64(".bash_aliases", {st_mode=S_IFREG|0644, st_size=2043, ...}) = 0
symlink(".bash_aliases", "test") = -1 EEXIST (File exists)
unlink("test") = 0
symlink(".bash_aliases", "test") = 0
close(0) = 0
close(1) = 0
Así que supongo que la respuesta final es "no".
EDITAR : Lo siguiente se copia de la respuesta de Arto Bendiken en unix.stackexchange.com, alrededor de 2016.
De hecho, esto se puede hacer atómicamente rename(2), primero creando el nuevo enlace simbólico con un nombre temporal y luego sobrescribiendo limpiamente el enlace simbólico anterior de una sola vez. Como dice la página del manual :
Si newpath se refiere a un enlace simbólico, el enlace se sobrescribirá.
En el shell, haría esto de la mv -Tsiguiente manera:
$ mkdir a b
$ ln -s a z
$ ln -s b z.new
$ mv -T z.new z
Puede straceusar ese último comando para asegurarse de que realmente se está utilizando rename(2)debajo del capó:
$ strace mv -T z.new z
lstat64("z.new", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0
lstat64("z", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0
rename("z.new", "z") = 0
Tenga en cuenta que en lo anterior, ambos mv -Ty straceson específicos de Linux.
En FreeBSD, use mv -halternativamente.
Nota del editor: así es como Capistrano lo ha hecho durante años, desde ~ 2.15. Ver esta solicitud de extracción .
lncomando (o la API equivalente) sobrescribiendo el enlace anterior? ¿Qué problema estás teniendo?