Устанавливает ли rsync новое ssh-соединение каждый раз для нескольких файлов или использует одно и то же соединение?

1) Правильный способ доступа к большому количеству скриптов - просто добавить каталог, в котором они находятся, в ваш $ PATH . Например, у меня есть личные сценарии в ~ / bin , поэтому в моем .profile у меня есть строка

export PATH=$HOME/bin:$PATH

, которая помещает мой ~ / bin перед существующих путей, поэтому я могу «перезаписывать» другие программы, имея сценарии с тем же именем. Если вы этого не хотите, поместите новые каталоги после $ PATH .

Так что просто добавьте каталог, в котором вы храните свои скрипты, в свой путь, и ваша проблема будет решена - полностью без символических ссылок.

2) Предпосылки: в конкретной файловой системе файлы идентифицируются с помощью их номера inode . Каталог просто сопоставляет имена файлов с номерами inode. Если вы используете ln без -s (жесткие ссылки), вы создаете новую запись каталога с индексным дескриптором существующего файла. Таким образом, очевидно, что это может работать только для файлов в одной файловой системе.

OTOH, если вы используете ln -s , вы создаете символическую ссылку (символическая ссылка): специальный файл, содержащий в качестве содержимого указанный вами путь, и этот путь используется вместо файла, когда вы пытаетесь получить к нему доступ. Вам не нужно быть root, чтобы создавать символические ссылки.

3) Когда вы выполняете ln ~ / test.sh / usr / local / bin , то команды ln обнаруживают, что / usr / local / bin - это каталог, поэтому предполагается, что вы действительно хотите выполнить ln ~ / test.sh /usr/local/bin/test.sh. То же самое происходит с -s .Об этом важно помнить, потому что вы также можете создавать символические ссылки на каталоги. Но только root может создавать жесткие ссылки на каталоги, потому что таким образом вы можете создать круговую структуру каталогов (и root должен знать достаточно, чтобы этого не делать).

4) В то время как жесткая ссылка имеет биты режима файла, символическая ссылка не имеет: любая попытка chmod символическая ссылка просто изменит биты режима файла в файле, на который она указывает.

5) Я не знаю, что случилось, когда вы не смогли выполнить test.sh , сообщение об ошибке Слишком много уровней символических ссылок указывает на то, что у вас где-то есть другие символические ссылки Итак, что-то пошло не так. Мне нужно увидеть вашу структуру каталогов, чтобы узнать, что произошло.

6) Если вы действительно хотите создать символическую ссылку для каждого скрипта в каталоге скриптов на / usr / local / bin / вместо того, чтобы просто устанавливать ПУТЬ (я не рекомендую that), рассмотрите возможность использования вместо него stow : эта программа устанавливает сразу несколько символических ссылок. Уложите , чтобы узнать подробности.

1
24.08.2017, 20:40
1 ответ

Вы можете тривиально проверить это самостоятельно, что даст вам ответ, действительный для конкретной используемой версии rsync:

rsync -e $'sh -x -c \'exec ssh "$@"\' _' \
  user@server:/path/to/file1 user@server:/path/to/file2 /local/directory

(Обратите внимание, что используемый выше синтаксис $''является расширением, доступным в ksh или bash, но не с/bin/sh).

Вы увидите строку, зарегистрированную sh -xдля каждой отдельной выполняемой команды ssh. Если есть только одна команда ssh, ваша конкретная версия rsync способна повторно использовать соединение. (Похоже, это имело место в моем собственном тестировании с версией 3.1.2 ).

1
28.01.2020, 00:49

Теги

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