tar: Удаление продвижения '/' от имен элемента

В большинстве дистрибутивов, нажатия Ctrl+Alt+Backspace, уничтожает X11 (графический) интерфейс и перезапускает его. К сожалению, некоторые недавние, предположительно "удобные для пользователя" дистрибутивы деактивировали этот очень полезный ярлык по некоторой непостижимой причине. Я не знаю, таким образом ли Монетный двор "удобен для пользователя", но Вам нечего терять, пробуя его :)

143
23.12.2012, 18:44
8 ответов

Используйте --absolute-names или -P опция отключить эту опцию.

tar fczP bkup.tar.gz /home/foo/

tar fcz bkup.tar.gz --absolute-names /home/foo
77
27.01.2020, 19:28
  • 1
    Это - корректный ответ, но знать, это в большинстве случаев, это не то, что Вы хотите, вызываете его результаты в архиве, который извлекает в полных путях! –  rubo77 21.11.2013, 12:04
  • 2
    Используя -C / опция, как описано в ответе @Marcus' будет мерзавец, избавленный от сообщения STDERR, если это будет Вашей основной целью. –  Matt Sanders 29.12.2013, 00:29
  • 3
    Как @rubo77, прокомментировала, обычно это не ожидаемый результат команды. –  alfredocambera 25.08.2016, 18:16
  • 4
    Большую часть времени это не то, что пользователь хочет, просто потому что большинство из них не читает руководство, пока им не нужно к (никто, получил время для этого). Так, это было бы мудро, по крайней мере, развернуло бы Ваш ответ, попросив людей не сделать это, если они не абсолютно уверены, что понимают то, что является эффектом его. Особенно будучи принятым как ответ. –  Mladen B. 02.12.2017, 09:16

Это - на самом деле функция, не проблема. Архивы с абсолютными местоположениями являются угрозой безопасности. Взломщики могли использовать такие архивы для обманывания пользователей в установку файлов в критических системных местоположениях.

Да, Вы могли использовать -P. Но что случилось с разрешением tar удалить наклонную черту вправо и просто требование, чтобы пользователь архива явно сделал извлечение в корневом каталоге? Затем они сознательно влияют на критические системные местоположения и не могут сделать этого случайно.

88
27.01.2020, 19:28
  • 1
    Sometimes являются проблемы. Я нашел этот поток после установки резервного сценария, который пошлет по электронной почте на ненулевом статусе выхода от tar. Это конкретное сообщение вызывало tar выходить с состоянием 1, который заставлял меня получать ложные предупреждения по электронной почте на успешных резервных копиях, просто потому что tar писал это сообщение в STDERR. Я устранил эту проблему при помощи своей собственной настроенной версии решения @Marcus: cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert] –  rubynorails 14.12.2015, 21:14
  • 2
    я думаю, существует некоторые варианты использования для использования -P - например, если Вы обеспечиваете некоторую функцию создания снимков файловой системы в FUSE. Часть времени можно хотеть к untar снимок в определенном каталоге, а не cwd с точки зрения пользователя. –  DIMMSum 28.11.2016, 06:11

Если Вы хотите избавиться от "Удаления продвижения '/' от имен элемента", распечатанных к STDERR, но все еще хотеть кончить те, которые ведут наклонные черты как tar мудро, делают по умолчанию, я видел отличное решение здесь комментатором timsoft.

Решение включает использование-C опция изменить каталог на корень (/), затем указывая дерево файла для архивации без ведущей наклонной черты, потому что теперь Вам только нужен относительный путь. Это делает то же самое, поскольку нормальный tar создает команду, но никакое разделение не необходимо:

tar fcz bkup.tar.gz -C / home/foo/
86
27.01.2020, 19:28
  • 1
    Это не будет работать с возрастающими резервными копиями. Но хороший ответ. –  gajdipajti 05.08.2014, 10:12
  • 2
    Это также не работает, если Вы хотите смолить файлы, обозначенные расширением оболочки (например. tar c -C / home/foo/*), потому что оболочка не знает об измененном корне. Но все еще хороший ответ для других случаев. –  Boris 15.04.2015, 09:27
  • 3
    -C / не работает на меня, период. Это не предотвращает stderr для меня. –  Acumenus 10.08.2015, 10:45
  • 4
    @A-B-B удостоверяется, что путь после-C / относителен. –  zurfyx 31.12.2016, 12:17
  • 5
    Это приблизится к работе, если у пользователя не будет полномочий на корневом каталоге? –  Mladen B. 02.12.2017, 09:20

Это - то, как я сделал это при помощи метода грубой силы: 2>&1 | grep -v "Removing leading".

Например:

tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v  "Removing leading"
7
27.01.2020, 19:28
  • 1
    Проблема с этим - это, скрывает код ошибки. Таким образом, если Вы захотите проверить код ошибки от tar в сценарии удара, то затем он не возвратится 0 на успехе. сэр I –  Brian 07.04.2015, 18:19
  • 2
    @staticx, код ошибки 0 независимо. –  Acumenus 10.08.2015, 10:58
  • 3
    @A-B-B Мой tar команда может возвратиться 2 на фатальной ошибке. –  Jite 02.11.2015, 17:46
  • 4
    @Brian можно использовать $PIPESTATUS для получения кода выхода. См. unix.stackexchange.com/questions/14270 / … –  simpleuser 10.09.2016, 20:13

На месяц позже, но я нашел наиболее подходящее решение для своего случая (в сценарии оболочки ) - это перейти в родительский каталог и выполнить там команду.

cd /var/www/
tar -czf mysite.gz mysite

Вместо:

tar -czf /var/www/mysite.gz /var/www/mysite
34
27.01.2020, 19:28

Я решил эту проблему с помощью:

cd /home/foo && tar czf ~/backup.tar.gz.

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

cd / && tar xzf backupt.tar.gzпосле передачи.

3
27.01.2020, 19:28

Попробуйте использовать -Cтолько для пути, что предотвратит сжатие с полными путями:

root@server # tar fcz bkup.tar.gz -C /home/ foo/
4
27.01.2020, 19:28

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

0
21.08.2020, 08:47

Теги

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