¿Cuál es el significado de 'ln -sf' en Linux?

21

Tengo 2 preguntas El primero es para las -sfopciones y el segundo es para el uso más específico de las -fopciones.

Al buscar en Google, descubrí la descripción del comando ln, la opción -sy -f.

(copia de http://linux.about.com/od/commands/l/blcmdl1_ln.htm )

-s, --symbolic : make symbolic links instead of hard links
-f, --force : remove existing destination files

Entiendo estas opciones individualmente. Pero, ¿cómo podría usar esto -sy -fopciones simultáneamente? -sse usa para crear un archivo de enlace y -fpara eliminar un archivo de enlace. No puedo entender esta situación y por qué usar esta opción combinada.

Para saber más sobre el lncomando, hice algunos ejemplos.

$ touch foo     # create sample file
$ ln -s foo bar # make link to file
$ vim bar       # check how link file works: foo file opened
$ ln -f bar     # remove link file 

Todo funciona bien antes del próximo comando

$ ln -s foo foobar
$ ln -f foo     # remove original file

Por la descripción de la -fopción, este último comando no debería funcionar, ¡pero lo hace! fooes removido.

¿Por qué está pasando esto?

casamia
fuente
3
-fsignifica fuerza ( --force); no para quitar!
Pandya
3
Para agregar una razón a la respuesta de terdon ... Uno de los usos es al actualizar manualmente las bibliotecas. Si lo hace en dos pasos: primero rm para eliminar el enlace anterior, luego ln -s para crear uno nuevo, la biblioteca no funcionará entre las operaciones ... lo que se convierte en un gran problema si el comando ln necesita la biblioteca trabajar. Entonces, con ln -sf, el enlace anterior se reemplaza por uno nuevo, sin que el enlace se rompa nunca.
Baard Kopperud

Respuestas:

42

En primer lugar, para encontrar lo que hacen las opciones de un comando, puede usar man command. Entonces, si corres man ln, verás:

   -f, --force
          remove existing destination files

   -s, --symbolic
          make symbolic links instead of hard links

Ahora, -scomo dijiste, es hacer que el enlace sea simbólico en lugar de difícil. Sin -fembargo, no es para eliminar el enlace. Es para sobrescribir el archivo de destino si existe uno. Para ilustrar:

 $ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 bar
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo

$ ln -s foo bar  ## fails because the target exists
ln: failed to create symbolic link bar’: File exists

$ ln -sf foo bar   ## Works because bar is removed and replaced with the link
$ ls -l
total 0
lrwxrwxrwx 1 terdon terdon 3 Mar 26 13:19 bar -> foo
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo
terdon
fuente