Perché creare un collegamento come questo: ln -nsf?


42

Cosa fa questo?

ln -nsf

So che ln -screa un collegamento simbolico, non un collegamento reale, il che significa che è possibile eliminarlo e non eliminerà l'idea a cui si sta collegando. Ma cosa significano le altre cose? (-nf)

Aggiornamento: okay ... quindi mi sono ricordato che puoi trovare questa roba dalla riga di comando. Ecco cosa ho scoperto digitando 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

Ma questo non è ancora molto chiaro per me quali siano le implicazioni di questo. Perché dovrei voler creare un collegamento soft / sym come questo?


1
Anche se non lo usi -s, puoi eliminare il collegamento senza eliminare il file originale. I collegamenti fissi aumentano il conteggio dei collegamenti del file in modo che non venga eliminato quando si elimina solo uno dei collegamenti ad esso.
Amok,

Questa non è esattamente la differenza tra un collegamento reale e un collegamento simbolico. Un collegamento reale punta agli stessi byte (inode) sul disco. Un collegamento software punta a un altro file per nome file .
Greg Hewgill,

Ci sono anche pagine man. cioè gestisci man ln. O uomo uomo, per conoscere questo sistema di aiuto. Puoi anche trovare pagine man online ...
Peter Cordes il

Risposte:


43

Dalla pagina man di 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

l' -nopzione (insieme a -f) forza lnad aggiornare un collegamento simbolico a una directory. cosa significa?

supponiamo di avere 2 directory

  • foo
  • bar

e un collegamento simbolico esistente

  • baz -> bar

ora vuoi aggiornare baz per puntare invece a pippo . se lo fai e basta

ln -sf foo baz

otterresti

  • baz / foo -> foo
  • baz -> bar (invariato), e quindi
  • bar / foo -> foo

se aggiungi -n

ln -sfn foo baz

ottieni quello che vuoi.

  • baz -> foo

questo è ciò che significa "no-dereference": non risolvere un collegamento esistente e posizionare il nuovo collegamento all'interno di quella directory, ma semplicemente aggiornarlo.


2
La risposta più utile di gran lunga.
kobejohn,

1

Ecco tutte le opzioni per ln. Troverai -n e -f qui.

 -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

Puoi digitare "man ln" per trovare queste cose:

   -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
ancora non capisco esattamente cosa significhi
Andrew

-1

-f, --force rimuove i file di destinazione esistenti

-n, --no-dereference tratta la destinazione che è un collegamento simbolico a una directory come se fosse un file normale


-5

-f dice che se la destinazione del tuo comando è un file esistente, dovrebbe essere rimosso e sostituito dal nuovo link. (Notare che nei sistemi influenzati da Unix, "file" può includere directory, collegamenti, pipe, ecc.)

-n modifica -f, dicendo che se il bersaglio si specifica è un link simbolico esistente, dovrebbe non essere rimosso.


3
La tua descrizione di -nè sbagliata. -fdi per sé non sostituirà un collegamento simbolico a una directory. Quando si sostituisce un collegamento simbolico a una directory, -nè necessario trattare il collegamento simbolico esistente come un normale file anziché come una directory.
Brian
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.