Intereting Posts
Как исправить перекрывающийся раздел FreeBSD / UFS? Восстановление резервной копии Openldap USB-джойстик поддерживает строительство VICE от источника? Пароль учетной записи не позволит мне sudo Кросс-компилировать gdb для mips и сделать исполняемый файл небольшим, как в OpenWrt Как сохранить полноэкранный режим видео YouTube после перемещения мыши на другой экран в Awesome WM? Служба alsa alsa-store не найдена ls: Не показывать каталоги, которые соответствуют одному шаблону в подстановочных поисках, только файлы Получение новой версии GEOS, чем то, что доступно в репозиториях Debian В ed (редактор строк), как создать новый файл для редактирования? Как удалить BOOST 1.49 и установить BOOST 1.54 в ubuntu? Лучший способ сделать полное шифрование диска? как перемещать набор файлов в один слой Как проверить работоспособность системы с определенным номером Что такое файлы centos /root/core.*? они едят мой жесткий диск, пока он не будет полным

Почтовое оповещение с сообщением «tar: Удаление ведущих` / 'из имен участников »

У меня есть следующий скрипт

#!/bin/bash #Purpose = Backup #Created on 15-10-2015 #START #cp -b /etc/rc.local $DESDIR$MKDIRNAME/rc.local TIME=`date +"%d%b%y_%H%M%S"` MKDIRNAME=`date +"%d%b%y"` FOBACKUP=$(date +'%d%b%y' -d 'last month') DESDIR="/usr/local/backup/" FILENAME1="filebin_$TIME.tar.gz" FILENAME2="openvpn_$TIME.tar.gz" FILENAME3="script_$TIME.tar.gz" SRCDIR1="/usr/local/bin/" SRCDIR2="/etc/openvpn/" SRCDIR3="/var/script/" mkdir -m 0755 $DESDIR$MKDIRNAME tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1 tar -cpzf $DESDIR$MKDIRNAME/$FILENAME2 $SRCDIR2 tar -cpzf $DESDIR$MKDIRNAME/$FILENAME3 $SRCDIR3 cp -b /etc/rc.local $DESDIR$MKDIRNAME/rc.local cp -b /etc/crontab $DESDIR$MKDIRNAME/crontab if [ -d "$DESDIR$FOBACKUP" ]; then echo "file $FOBACKUP exist and was deleted!" rm -rf $DESDIR$FOBACKUP fi #END 

Тем не менее, я продолжаю получать почту каждый день – после того, как cron запускает этот скрипт – с этим сообщением:

 tar: Removing leading `/' from member names 

Как я могу сделать изменения в этом скрипте, чтобы не получать это предупреждение?

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

Следующие шаги должны устранить ваш нежелательный результат, устранить проблему, о которой предупреждал tar , и продолжать позволять вам видеть важные сообщения об ошибках. Сценарий становится более последовательным, поскольку переменные правильно отражают содержимое архива.

  1. Удалите все ведущие символы '/' из имен исходных каталогов .

     SRCDIR1="usr/local/bin/" SRCDIR2="etc/openvpn/" SRCDIR3="var/script/" и SRCDIR1="usr/local/bin/" SRCDIR2="etc/openvpn/" SRCDIR3="var/script/" 
  2. Используйте параметр -C / tar чтобы заставить tar изменять каталог до / перед архивированием. Если этот параметр недоступен, вы должны изменить каталог до / до выдачи команды tar .

     tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1 tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME2 $SRCDIR2 tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME3 $SRCDIR3 

Посмотрите на перенаправления труб и разницу между stdin, stdout и stderr .

Будут рассмотрены следующие вопросы:

 tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1 2> /dev/null 

EDIT: из-за соображений безопасности, связанных с использованием '2> / dev / null' для перенаправления stderr на / dev / null, приведены некоторые другие возможные методы «безопасного» выполнения операций tar, а НЕ использование опции «-C /» сначала перейти к '/' в пределах fs. Какой IMHO является проблемой безопасности, так как если архив извлечен из '/', он перепишет текущую файловую систему содержимым архива.

Некоторые альтернативы:

Альтернатива предложению Роберта (сначала перейти на $ SRCDIR)

 %> tar -cpzf -C $SRCDIR1 $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1 

Используйте перенаправление для stderr, запустите stdout, но все еще проверяйте наличие ошибок с помощью $?

 %> output=$((tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1) 2> /dev/null) %> [ $? -ne 0 ] && echo "An error occurred with tar" %> echo $output 

Или вы всегда можете использовать относительные и / или абсолютные пути (см. Man pwd )

 %> $((tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $(pwd)/$SRCDIR1) 2&>1)