Почтовое оповещение с сообщением «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) 
  • Сценарий Bash SFTPing на удаленный сервер и загрузка файлов, cd в соответствующий каталог на локальной машине
  • Сортировка файлов в папки, в зависимости от типа файла
  • Запуск команд из корневого каталога новой рабочей области
  • Передайте значение для приглашения ввода
  • Добавьте / удалите рабочую станцию ​​ip в / etc / sysconfig / iptables, а затем запустите перезапуск службы iptables
  • Команда не найдена при запуске функции в bash
  • Как запустить команду только после того, как предыдущая команда не удалась в bash?
  • Как работает эта функция bash?
  • команда sed не заменяет текст символом новой строки
  • Неблокированный опрос от двух труб?
  • Добавление имени папки в ZIP-файлы внутри нее.
  • Linux и Unix - лучшая ОС в мире.