Я использую эту команду для резервного копирования некоторых важных файлов конфигурации:
tar -czvf /var/backups/201102121202.tgz -C / etc/crontab etc/httpd/conf.d/* etc/httpd/conf/httpd.conf etc/httpd/passwords etc/httpd/vhost/* etc/php.ini etc/my.cnf etc/ssh/* etc/hosts etc/sysconfig/iptables var/spool/cron/* etc/passwd etc/group root/iptables_config etc/postfix/main.cf etc/postfix/master.cf etc/postfix/transport etc/postfix/valid_recipients etc/postfix/virtual etc/sysconfig/memcached etc/php.d/apc.ini etc/selinux/config etc/yum.repos.d/* etc/list_of_installed_packages.txt etc/safe-rm.conf home/*/.bash* home/*/.ssh usr/local/bin/* usr/local/sbin/* /etc/pki/tls/certs/mysite.com.crt /etc/pki/tls/private/mysite.key /etc/pki/tls/certs/gd_bundle.crt
Когда я запускаю его, я получаю:
tar: etc/httpd/conf.d/*: Cannot stat: No such file or directory
tar: etc/httpd/vhost/*: Cannot stat: No such file or directory
tar: etc/ssh/*: Cannot stat: No such file or directory
tar: var/spool/cron/*: Cannot stat: No such file or directory
tar: etc/yum.repos.d/*: Cannot stat: No such file or directory
tar: home/*/.bash*: Cannot stat: No such file or directory
tar: home/*/.ssh: Cannot stat: No such file or directory
tar: usr/local/bin/*: Cannot stat: No such file or directory
tar: usr/local/sbin/*: Cannot stat: No such file or directory
tar: Removing leading `/' from member names
tar: Error exit delayed from previous errors
Кажется, я не могу использовать подстановочные знаки в путях.
Как я могу это исправить или обойти это?
Спасибо,
Дэн
Ответы:
Вероятная проблема заключается в том, что вы не находитесь в корневом каталоге (/), но подстановочные знаки предполагают, что вы находитесь. Помните, что оболочка расширяет символы подстановки в командной строке перед вызовом программы. Таким образом, вы, etc / ssh / *, относитесь к вашему текущему рабочему каталогу, который, скорее всего, не существует. Бежать
(cd /; tar ... etc/ssh/* ...)
вместо.источник
Вы скучаете по
/
до начала имен. Оболочка будет отображать имена только в том случае, если они являются абсолютными путями. Кроме того, если вы делаете это, нет необходимости использовать-C
,источник
/
к путям привязывает их и заставляет перезаписывать при извлечении системных файлов и не позволяет распаковывать файлы, скажем,/tmp
(не без использования chroot в любом случае).-C
причиныtar
сменить каталог.-C
один вариант должен быть сделан, как(cd /; tar czf ...)
или жеfind /etc/httpd/conf.d /etc/ssh /home/*/.ssh ... -print | sed 's;^/;;' > /tmp/tar.lst && tar czfCI $tarfile / /tmp/tar.lst && rm /tmp/tar.lst
, Но явно говорить, что «оболочка будет выводить имена, только если они являются абсолютными путями», неверно. Если бы это было правильно, тоecho *
или дажеecho ./*
не будет работать.Попробуйте сбросить * (или, возможно, / *).
Синтаксис остатка ...
Когда file является путем к каталогу, действие применяется ко всем файлам и (рекурсивно) подкаталогам этого каталога.
http://www.computerhope.com/unix/utar.htm
источник
ваша команда:
Вы делаете простую ошибку, как я в прошлом :)
Смотри мужик смол. Но в старых системах это руководство неполное, поэтому используйте info tar.
источник