Po co tworzyć taki link: ln -nsf?


42

Co to robi?

ln -nsf

Wiem, że ln -stworzy dowiązanie symboliczne, a nie dowiązanie twarde, co oznacza, że ​​możesz je usunąć i nie spowoduje to usunięcia myśli, że jest to link. Ale co oznaczają inne rzeczy? (-nf)

Aktualizacja: ok ... więc przypomniałam sobie, że możesz znaleźć te rzeczy z wiersza poleceń. Oto, co dowiedziałem się podczas pisania ln --help:

-f, --force                 remove existing destination files
-n, --no-dereference        treat destination that is a symlink to a
                            directory as if it were a normal file

Ale nadal nie jest to dla mnie jasne, jakie są tego konsekwencje. Dlaczego miałbym chcieć utworzyć taki link soft / sym?


1
Nawet jeśli nie używasz -s, możesz usunąć link bez usuwania oryginalnego pliku. Twarde linki zwiększają liczbę linków pliku, więc nie zostanie on usunięty, gdy usuniesz tylko jeden z linków do niego.
Amok,

To nie całkiem różnica między łączem twardym a łączem symbolicznym. Twardy link wskazuje te same bajty (i-węzeł) na dysku. Miękki link wskazuje inny plik według nazwy pliku .
Greg Hewgill,

Istnieją również strony podręcznika man. tj. uruchom man ln. Albo człowiek, aby dowiedzieć się o tym systemie pomocy. Możesz też pobrać strony podręcznika online ...
Peter Cordes,

Odpowiedzi:


43

Ze strony podręcznika BSD:

 -f    If the target file already exists, then unlink it so that the link
           may occur.  (The -f option overrides any previous -i options.)

 -n    If the target_file or target_dir is a symbolic link, do not follow
           it.  This is most useful with the -f option, to replace a symlink
           which may point to a directory.

32

-nopcja (razem z -fsiły) lnzaktualizować dowiązanie symboliczne do katalogu. co to znaczy?

załóżmy, że masz 2 katalogi

  • bla
  • bar

oraz istniejące łącze symboliczne

  • baz -> bar

teraz chcesz zaktualizować baz, aby wskazywał na foo . jeśli tylko zrobisz

ln -sf foo baz

dostałbyś

  • baz / foo -> foo
  • baz -> bar (niezmieniony), a zatem
  • bar / foo -> foo

jeśli dodasz -n

ln -sfn foo baz

dostajesz to, czego chcesz.

  • baz -> foo

to właśnie oznacza „brak dereferencji”: nie rozwiązuj istniejącego linku i umieść nowy link w tym katalogu, a po prostu go zaktualizuj.


2
Jak dotąd najbardziej pomocna odpowiedź.
kobejohn

1

Oto wszystkie opcje ln. Znajdziesz tutaj -n i -f.

 -F    If the target file already exists and is a directory, then remove
       it so that the link may occur.
       The -F option should be used with either -f or -i options.  If
       none is specified, -f is implied.
       The -F option is a no-op unless -s option is specified.

 -h    If the target_file or target_dir is a symbolic link, do not
       follow it.  This is most useful with the -f option, to replace 
       a symlink which may point to a directory.

 -f    If the target file already exists, then unlink it so that the
       link may occur.  (The -f option overrides any previous -i options.)

 -i    Cause ln to write a prompt to standard error if the target file
       exists.  If the response from the standard input begins with the
       character `y' or `Y', then unlink the target file so that the link
       may occur.  Otherwise, do not attempt the link.  (The -i option
       overrides any previous -f options.)

 -n    Same as -h, for compatibility with other ln implementations.

 -s    Create a symbolic link.

 -v    Cause ln to be verbose, showing files as they are processed.

-1

Możesz wpisać „man ln”, aby znaleźć takie rzeczy:

   -f, --force
          remove existing destination files

   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were
          a normal file

20
wciąż nie rozumiem dokładnie, co to znaczy
Andrew

-1

-f, --force usuwa istniejące pliki docelowe

-n, --no-dereferencje traktuj miejsce docelowe, które jest dowiązaniem symbolicznym do katalogu, tak jakby był normalnym plikiem


-5

-f mówi, że jeśli celem polecenia jest istniejący plik, należy go usunąć i zastąpić nowym łączem. (Zauważ, że w systemach, na które ma wpływ Unix, „plik” może obejmować katalogi, łącza, potoki itp.)

-n modyfikuje -f, mówiąc, że jeśli cel jest określony istniejącego łącza symboliczne, to powinien nie być usunięte.


3
Twój opis -njest nieprawidłowy. -fsam w sobie nie zastąpi dowiązania symbolicznego do katalogu. Podczas zastępowania dowiązania symbolicznego do katalogu -nkonieczne jest traktowanie istniejącego dowiązania symbolicznego jak zwykłego pliku zamiast katalogu.
Brian
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.