Qual è il significato di 'ln -sf' in Linux?


21

Ho 2 domande. Il primo è per le -sfopzioni e il secondo è per l'uso più specifico delle -fopzioni.

Cercando su google, ho capito la descrizione di comando ln, opzione -se -f.

(copia da 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

Comprendo queste opzioni singolarmente. Ma come si possono usare questo -se le -fopzioni contemporaneamente? -sè usato per creare un file di collegamento e -fper rimuovere un file di collegamento. Non riesco a capire questa situazione e perché usare questa opzione unita.

Per saperne di più sul lncomando, ho fatto alcuni esempi.

$ 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 

Tutto funziona bene prima del prossimo comando

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

Con la descrizione -fdell'opzione, quest'ultimo comando non dovrebbe funzionare, ma funziona! fooè rimosso.

Perché sta succedendo?


3
-fsta per force ( --force); non per rimuovere!
Pandya,

3
Per aggiungere un motivo alla risposta di Terdon ... Uno degli usi è quando aggiorna manualmente le librerie. Se lo fai in due passaggi - prima rm per rimuovere il vecchio link, poi ln -s per crearne uno nuovo - la libreria non funzionerà tra le operazioni ... il che diventa un grosso problema se il comando ln necessita della libreria lavorare. Quindi con ln -sf, il vecchio link viene sostituito con uno nuovo, senza che il link venga mai interrotto.
Baard Kopperud,

Risposte:


42

Prima di tutto, per scoprire cosa fanno le opzioni di un comando, puoi usare man command. Quindi, se corri man ln, vedrai:

   -f, --force
          remove existing destination files

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

Ora, -scome hai detto, è quello di rendere il collegamento simbolico anziché duro. Il -f, tuttavia, non è quello di rimuovere il collegamento. Serve a sovrascrivere il file di destinazione se ne esiste uno. Illustrare:

 $ 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
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.