J'ai 2 questions. Le premier est pour le -sf
options et le second est pour l'utilisation plus spécifique de -f
options.
En googling, j'ai compris la description de la commande ln
, option -s
et -f
.
(copier à partir 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
Je comprends ces options individuellement. Mais comment pourrait-on utiliser ceci -s
et -f
options simultanément? -s
est utilisé pour créer un fichier de liaison et -f
est utilisé pour supprimer un fichier de liaison. Pourquoi utiliser cette option fusionnée?
Pour en savoir plus sur la commande ln
, j'ai fait quelques exemples.
$ 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
Tout fonctionne bien avant la prochaine commande
$ ln -s foo foobar
$ ln -f foo # remove original file
Par la description de -f
Option, cette dernière commande ne doit pas fonctionner, mais ça fait! foo
est supprimé.
Pourquoi cela arrive-t-il?
Tout d'abord, pour trouver les options d'une commande. Vous pouvez utiliser man command
. Donc, si vous courez man ln
, tu verras:
-f, --force
remove existing destination files
-s, --symbolic
make symbolic links instead of hard links
Maintenant le -s
, comme vous l'avez dit, est de rendre le lien symbolique par opposition au dur. Les -f
Cependant, il ne faut pas supprimer le lien. Il est d'écraser le fichier de destination si l'on existe. Pour illustrer:
$ 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
By default, each destination (name of new link) should not already exist.
[...]
--backup[=CONTROL]
make a backup of each existing destination file
[...]
-f, --force
remove existing destination files
Vous devez lire attentivement pour comprendre ce que l'on entend dans man ln
. "Supprimer" est un peu trompeur sans le contexte.
Avec -i
vous avez la question suivante:
ln: replace 'q2'? y
Supprimer, écraser, remplacer ...
POSIX (man 1p ln
) a:
-f
Force existing destination pathnames to be removed to allow the link.
C'est une très bonne addition "... pour permettre le lien".
Et info ln
a:
Normalement 'ln' ne remplace pas les fichiers existants. Utilisez l'option '-force' ('-f') à remplacer les == les inconditionnellement, l'option '--interActive' ('I ') pour les remplacer de manière conditionnelle et le' - Packup '(' -B ') Option à renommer eux.
Exemple "- Backup": avec un _ existant qli -> qqq
:
ln -sb ttt qli
09:10 qli -> ttt
08:47 qli~ -> qqq