Я нашел статью в Интернете, в которой даются инструкции по резервному копированию выделенного сервера с помощью rsync.
На одном из этапов этой статьи я должен создать пользователя с именем «rsync» и добавить ему привилегии sudo. Все идет хорошо, но параметры visudo для пользователя "rsync" довольно сложно понять. Некоторые параметры команды "/ usr / bin / rsync" практически не имеют документации в Интернете.
Ниже приводится строка visudo, о которой я говорю:
rsync ALL=(ALL) NOPASSWD: /usr/bin/rsync --server --sender -logDtprze.iLsf --numeric-ids . /
Начнем с того, что я как бы понимаю свойства "--server --sender". Что меня действительно беспокоит, так это опция "-logDtprze.iLsf".
У меня есть сервер CentOS, и эта опция недоступна в документации по rsync, когда я запускаю команду "man rsync". Собственно, каждый раз, когда я пытаюсь использовать эту опцию в visudo, ничего не работает.
В конце концов я обнаружил расплывчатую ссылку на "-logDtprze.iLsf" как на новую функцию rsync в Debian. Я не уверен в этом.
Я просто хотел знать, что делает этот параметр, и можно ли его игнорировать в настройках резервного копирования.
Я также хотел понять назначение точки и косой черты в конце строки ". /"
РЕДАКТИРОВАТЬ: Спасибо, бодгит! Я чувствую себя идиотом! :)
Это короткие варианты -l
, -o
, -g
, -D
и т. д., которые вместо того, чтобы перечислять их по отдельности, могут быть свернуты, что является стандартным поведением для большинства инструментов Unix, т.е. rm -rf
такой же как rm -r -f
.
Я провел небольшое исследование и нашел значение каждой буквы в последовательности параметров "-logDtprze.iLsf"
-l, --links copy symlinks as symlinks
-o, --owner preserve owner (super-user only)
-g, --group preserve group
-D, --devices transfer character and block device files
-t, --times preserve modification times
-p, --perms preserve permissions
-r, --recursive copy directories recursively
-z, --compress compresses data as it is sent to the destination
-e, --rsh=COMMAND allows to choose an alternative remote shell program
.
-i, --itemize-changes show list of changes being made to each file
-L, --copy-links transform symlink into referent file/dir
-s, --protect-args no space-splitting; wildcard chars only
-f, --filter=RULE allows to add rules to exclude certain files
Единственное, чего я не смог понять, так это значения периода "". в середине параметров.
вы наткнулись на довольно сложное взаимодействие между несколькими частями сеанса RSYNC через SSH.
Хотя другие ответы здесь дают некоторое представление о параметрах rsync, эти параметры могут не обязательно применяться к вашей конкретной ситуации, которая может быть уникальной в зависимости от параметров, которые вы отправляете в rsync.
Итак, нет, игнорировать эти параметры нельзя, поскольку в вашем случае они могут сильно отличаться.
Настоящий ключ к этому явно странному набору параметров rsync - это захватить фактическую отправляемую команду в вашем конкретном случае.
Есть по крайней мере несколько способов сделать это. Один из способов - выполнить rsync-резервное копирование файла, достаточно большого, чтобы передача, скажем, 20 секунд, чтобы дать возможность проверить запущенные процессы на удаленном компьютере во время передачи, например, с помощью такой команды, как:
rsync -a -e "ssh -i /Users/myuser/keys/id_test -l test" 192.168.1.101:/home/test/100m.txt /Users/myuser/100m.txt
где /home/test/100m.txt - достаточно большой файл, чтобы у него было время для просмотра процесса во время его передачи.
Чтобы увидеть фактическую команду, используемую rsync через ssh, войдите в отдельное окно терминала на удаленном компьютере и выполните
ps auxww|grep rsync
пока файл передается. В моем случае выполнение вышеуказанного дало:
# ps auxww|grep rsync
test 3860 7.5 0.0 13520 2780 ? Ss 18:49 0:00 rsync --server --sender -logDtpr . /home/test/100m.txt
root 3862 0.0 0.0 12784 968 pts/0 S+ 18:49 0:00 grep rsync
это затем дает представление о том, откуда взялись все эти параметры команды rsync, в моем случае "logDtpr" от выполнения "rsync -a", YMMV.
Другой способ найти отправляемую команду - использовать переменную среды SSH_ORIGINAL_COMMAND из man SSH:
SSH_ORIGINAL_COMMAND This variable contains the original command line if a forced command is executed. It can be used to extract the original arguments.
затем вы можете использовать параметры authorized_keys (см. запись AUTHORIZED_KEYS FILE FORMAT в man SSHD), чтобы добавить принудительную команду «command = myscript» к ключу, который используется для входа на удаленный сервер, и сделать эту команду сценарием оболочки «myscript» в котором есть пара строк вроде:
echo "$SSH_ORIGINAL_COMMAND" >> /fullpathto/mysshlog
exec $SSH_ORIGINAL_COMMAND
тогда, когда вы запустите свой rsync, фактическая используемая команда окажется в файле журнала "mysshlog"
Вы можете видеть из команды, найденной в первом примере выше, что для вашего случая конечный / будет исходным путем для копируемых файлов rsync.