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