Почтовое оповещение с сообщением «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 

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

2 Solutions collect form web for “Почтовое оповещение с сообщением «tar: Удаление ведущих` / 'из имен участников »”

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) 
  • Инструмент для создания текстовых файлов из шаблона
  • Составные команды в && / || состояние
  • dash: строка синтаксического анализа на две переменные
  • Как установить пары фиксированного значения, вертикально ориентированные пары ключ-значение в файле CSV?
  • .bashrc не экспортирует путь?
  • Скрипт для эмуляции Windows + клавиша
  • Импорт параметров переменных среды с другого сервера
  • mailx и HP-UX для миграции RedHat
  • Линейная командная строка Linux, которая выйдет из строя, если будет произведен какой-либо стандарт
  • Замените% 20 пробелом в именах файлов?
  • Запустить сценарий ожидания из другой оболочки
  • Linux и Unix - лучшая ОС в мире.