Яке значення "ln -sf" в Linux?


21

У мене 2 питання. Перший - для -sfваріантів, а другий - для більш конкретного використання -fопцій.

За допомогою googling я зрозумів опис команди ln, опції -sта -f.

(копія з 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

Я розумію ці варіанти індивідуально. Але, як можна використовувати це -sі -fпараметри одночасно? -sвикористовується для створення файлу посилань і -fвикористовується для видалення файлу посилання. Я не можу зрозуміти цю ситуацію і навіщо використовувати цей об'єднаний варіант.

Щоб дізнатися більше про lnкоманду, я зробив кілька прикладів.

$ 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 

Все працює добре до наступної команди

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

За описом -fопції ця остання команда не повинна працювати, але вона є! fooвидаляється.

Чому це відбувається?


3
-fвиступає за силу ( --force); не для видалення!
Пандія

3
Щоб додати причину відповіді тердона ... Одне з використання - це при ручному оновленні бібліотек. Якщо ви робите це в два етапи - спочатку rm для видалення старого посилання, потім ln -s для створення нового - бібліотека не буде працювати між операціями ... що стає великою проблемою, якщо команді ln потрібна бібліотека працювати. Отже, при ln -sf старе посилання замінюється новим, без посилання ніколи не порушується.
Баард Копперуд

Відповіді:


42

Перш за все, щоб знайти те, що роблять параметри команди, ви можете використовувати man command. Отже, якщо ви запустите man ln, ви побачите:

   -f, --force
          remove existing destination files

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

Тепер, -sяк ви сказали, - зробити посилання символічним на відміну від жорсткого. -f, Однак, не видалити посилання. Це перезаписати файл призначення, якщо такий існує. Проілюструвати:

 $ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.