rsync --link-dest не работает должным образом с символическими ссылками

FreeBSD в целом имеет более строгое разделение между «базовой системой» и сторонним программным обеспечением, чем Linux.

FreeBSD будет устанавливать стороннее программное обеспечение в папку /usr/local. Это означает, что вам, вероятно, следует поискать в /usr/local/etc файлы конфигурации для nginx.

0
17.06.2016, 19:08
2 ответа

Файловая система в macOS (HFS +) не поддерживает жесткие ссылки на символические ссылки:

$ touch file
$ ls -l file
-rw-r--r-- 1 kk staff 0 Jun 17 18:35 file

$ ln -s file slink
$ ls -l file slink
-rw-r--r-- 1 kk staff 0 Jun 17 18:35 file
lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file

Следующее обычно создает жесткие ссылка на символическую ссылку и даже задокументирована в руководстве ln для macOS, чтобы сделать это (РЕДАКТИРОВАТЬ: нет, это не так, если у вас не установлен GNU coreutils и вы не читаете неправильное руководство, неужели!):

$ ln -P slink hlink
$ ls -l file slink hlink
-rw-r--r-- 1 kk staff 0 Jun 17 18:35 file
lrwxr-xr-x 1 kk staff 4 Jun 17 18:38 hlink -> file
lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file

Вы можете видеть по счетчику ссылок (1), что не было создано новое имя для slink (было бы 2 для обоих slink и hlink , если это сработало).Кроме того, stat сообщает нам, что hlink является символической ссылкой с 1 ссылкой на индексный дескриптор (не 2):

$ stat hlink
  File: 'hlink' -> 'file'
  Size: 4               Blocks: 8          IO Block: 4096   symbolic link
Device: 1000004h/16777220d      Inode: 83828644    Links: 1
Access: (0755/lrwxr-xr-x)  Uid: (  501/      kk)   Gid: (   20/   staff)
Access: 2016-06-17 18:38:18.000000000 +0200
Modify: 2016-06-17 18:38:18.000000000 +0200
Change: 2016-06-17 18:38:18.000000000 +0200
 Birth: 2016-06-17 18:38:18.000000000 +0200

РЕДАКТИРОВАТЬ: Поскольку я был пойман с использованием GNU coreutils, вот тесты снова с / bin / ln в macOS:

$ touch file
$ /bin/ln -s file slink
$ /bin/ln slink hlink   # there is no option corresponding to GNU's -P
$ ls -l file slink hlink
-rw-r--r--  2 kk  staff  0 Jun 17 18:59 file
-rw-r--r--  2 kk  staff  0 Jun 17 18:59 hlink
lrwxr-xr-x  1 kk  staff  4 Jun 17 18:59 slink -> file

Жесткая ссылка указывает на файл , а не на slink .

Например, Linux и OpenBSD (другие ОС, которые я использую), это возможно, что приводит к

$ ls -l file slink hlink
-rw-rw-r-- 1 kk kk 0 Jun 17 18:35 file
lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 hlink -> file
lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 slink -> file

(обратите внимание на «2»)

4
28.01.2020, 02:19

Вы не можете делать жесткие ссылки на символические ссылки (это не «ограничение» OS X). Жесткая ссылка - это ссылка на индексный дескриптор, а символическая ссылка - это не индексный дескриптор, а только запись в каталоге с некоторой дополнительной информацией.

Возможно, вы думаете о Windows, в которой есть аналогичные функции, которые ведут себя иначе.

rsync имеет параметр - copy-links , который указывает ему скопировать файл, на который символическая ссылка указывает на место назначения. Это было бы полезно, если вы пытаетесь создать полную копию исходного каталога (но не очень полезно, если ваша цель - уменьшить использование диска).

2
28.01.2020, 02:19

Теги

Похожие вопросы