Навіщо створювати таке посилання: ln -nsf?


42

Що це робить?

ln -nsf

Я знаю, що ln -sстворюється символічне посилання, а не жорстке посилання, що означає, що ви можете його видалити, і це не видалить думку, з якою воно посилається. Але що означають інші речі? (-nf)

Оновлення: гаразд ... тому я згадав, що ви можете знайти цей матеріал із командного рядка. Ось що я з’ясував із набору тексту 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

Але це все ще не дуже зрозуміло для мене, що це стосується. Чому я б хотів створити м'який / sym посилання, як це?


1
Навіть якщо ви не використовуєте, -sви можете видалити посилання, не видаляючи початковий файл. Жорсткі посилання збільшують кількість посилань файлу, тому він не буде видалений, якщо ви видалите лише одне з посилань на нього.
Амок

Це не зовсім різниця між жорсткою ланкою і символічною ланкою. Жорстке посилання вказує на ті самі байти (inode) на диску. М'яке посилання вказує на інший файл за назвою файлу .
Грег Х'югілл

Існують також чоловічі сторінки. тобто бігти людина ln. Або людина-людина, щоб дізнатися про цю систему допомоги. Ви також можете отримати інтернет-сторінки теж ...
Пітер Кордес

Відповіді:


43

На сторінці чоловіка 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

-nваріант (разом з -f) сили , lnщоб оновити символічне посилання на каталог. що це означає?

припустимо, у вас є 2 каталоги

  • foo
  • бар

і наявне символічне посилання

  • baz -> бар

тепер ви хочете оновити baz, щоб вказати на foo . якщо ви просто зробите

ln -sf foo baz

ви отримаєте

  • baz / foo -> foo
  • baz -> bar (без змін), і таким чином
  • бар / foo -> foo

якщо ви додасте -n

ln -sfn foo baz

ти отримуєш те, що хочеш.

  • baz -> foo

це те, що означає "без відміни": не вирішуйте існуюче посилання та не розміщуйте нове посилання всередині цього каталогу, а просто оновіть його.


2
Найкорисніша відповідь на сьогоднішній день.
kobejohn

1

Ось усі варіанти, щоб ln. Ви знайдете -n і -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

Ви можете ввести "man ln", щоб знайти такі речі:

   -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
я досі точно не розумію, що це означає
Ендрю

-1

-f, - примушуйте видалити наявні файли призначення

-n, --no-dereference трактує призначення, яке є символьним посиланням на каталог, як ніби це звичайний файл


-5

-f говорить, що якщо ціллю вашої команди є існуючий файл, його слід видалити та замінити новим посиланням. (Зверніть увагу, що в системах, що впливають на Unix, "файл" може включати каталоги, посилання, труби тощо)

-n модифікує -f, кажучи, що якщо вказана ціль є існуючим символьним посиланням, її не слід видаляти.


3
Ваш опис -nневірний. -fсам по собі не замінить символьне посилання на каталог. Під час заміни символьного посилання на каталог -nпотрібно обробляти існуюче символьне посилання як звичайний файл замість каталогу.
Брайан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.