Co oznacza „ln -sf” w systemie Linux?


21

Mam 2 pytania Pierwszy dotyczy -sfopcji, a drugi bardziej szczegółowego wykorzystania -fopcji.

Przeglądając go, zrozumiałem opis polecenia ln, opcji -si -f.

(kopia z 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

Rozumiem te opcje indywidualnie. Ale jak korzystać z tego -si -fopcji jednocześnie? -ssłuży do tworzenia pliku łącza i -fsłuży do usuwania pliku łącza. Nie rozumiem tej sytuacji i dlaczego warto skorzystać z tej scalonej opcji.

Aby dowiedzieć się więcej o lnpoleceniu, podałem kilka przykładów.

$ 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 

Wszystko działa dobrze przed następnym poleceniem

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

Według opisu -fopcji to ostatnie polecenie nie powinno działać, ale działa! foojest usunięty.

Dlaczego to się dzieje?


3
-foznacza force ( --force); nie do usunięcia!
Pandya

3
Aby dodać powód do odpowiedzi terdona ... Jednym z zastosowań jest ręczna aktualizacja bibliotek. Jeśli zrobisz to w dwóch krokach - najpierw rm, aby usunąć stary link, a następnie ln -s, aby utworzyć nowy - biblioteka nie będzie działać między operacjami ... co staje się wielkim problemem, jeśli komenda ln potrzebuje biblioteki pracować. Tak więc w przypadku ln -sf stary link jest zastępowany nowym, bez żadnego zerwania łącza.
Baard Kopperud

Odpowiedzi:


42

Przede wszystkim, aby dowiedzieć się, co robią opcje polecenia, możesz użyć man command. Jeśli więc uruchomisz man ln, zobaczysz:

   -f, --force
          remove existing destination files

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

Teraz, -sjak powiedziałeś, połączenie ma być symboliczne, a nie trudne. Nie -fnależy jednak usuwać łącza. Nadpisuje plik docelowy, jeśli taki istnieje. Ilustrować:

 $ 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.