Зачем создавать такую ​​ссылку: 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

Но это все еще не очень ясно для меня, каковы последствия этого. Зачем мне создавать ссылку на софт / сим так?


1
Даже если вы не используете, -sвы можете удалить ссылку, не удаляя оригинальный файл. Жесткие ссылки увеличивают количество ссылок на файл, поэтому он не будет удален, если вы удалите только одну из ссылок на него.
— Amok

Это не совсем разница между жесткой ссылкой и символической ссылкой. Жесткая ссылка указывает на те же байты (inode) на диске. Мягкая ссылка указывает на другой файл по имени файла .
— Грег Хьюгилл

Есть также справочные страницы. то есть беги человек Или человек, чтобы узнать об этой системе помощи. Вы также можете получить справочные страницы в Интернете ...
— Peter Cordes

Ответы:


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
  • бар

и существующая символическая ссылка

  • баз -> бар

теперь вы хотите обновить базу, чтобы указать вместо foo . если вы просто делаете

ln -sf foo baz

ты бы получил

  • Баз / Фу -> Фу
  • Баз -> Бар (без изменений), и, таким образом,
  • bar / foo -> foo

если вы добавите -n

ln -sfn foo baz

Вы получаете то, что хотите.

  • Баз -> Фу

Вот что означает «отсутствие разыменования»: не разрешайте существующую ссылку и не помещайте новую ссылку в этот каталог, а просто обновляйте ее.


2
Самый полезный ответ на сегодняшний день.
— Кобежон

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, --force удалить существующие файлы назначения

-n, --no-dereference обрабатывать назначение, которое является символической ссылкой на каталог, как если бы это был обычный файл


-5

-f говорит, что если целью вашей команды является существующий файл, его следует удалить и заменить новой ссылкой. (Обратите внимание, что в Unix-системах под «файлом» могут находиться каталоги, ссылки, каналы и т. Д.)

-n изменяет -f, говоря, что если указанная вами цель является существующей символической ссылкой, ее не следует удалять.


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