Я собираюсь создать файл сценария оболочки, который сжимает все файлы из домашнего каталога, но tar не запускается после Я изменил разрешения.
#!/bin/bash
tar -zxvf homefiles.tar.gz /home/
Это не ясно: Какие полномочия Вы изменили? Но я проигнорирую это сообщение :)
Обычно у пользователей системы нет полномочий записи вне их собственного корневого каталога, который по умолчанию является /home/<user>
. Также Усера не может считать большинство файлов пользователя-B. Таким образом согласно пути в Вашем вопросе, для резервного копирования всех файлов и каталогов, расположенных в /home
, необходимо выполнить команду с полномочиями корня, при помощи sudo
.
Кроме того, Вы используете неправильную опцию - x
вместо этого c
- использовать tar --help
:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
tar -xf archive.tar # Extract all files from archive.tar.
Таким образом, правильная команда должна быть одним из них:
sudo tar -zcvf /home/homefiles.tar.gz /home/ --exclude=/home/homefiles.tar.gz # the backup will be created in the directory `/home`
tar -zcvf /home/<user>/homefiles.tar.gz /home/<user> --exclude=/home/<user>/homefiles.tar.gz
Вот расширенный пример для Вас:
Давайте примем наряду с /home
каталог там является также Apache и серверами MySQL, и мы хотим сделать больше полного резервного копирования системы.
1. Создайте названный файл mybackup
; сделайте это исполняемым файлом; найдите его в /usr/local/bin
быть доступным как широкая система команд оболочки. Создайте каталог, где файлы резервных копий будут храниться:
sudo touch /usr/local/bin/mybackup && sudo chmod +x /usr/local/bin/mybackup
sudo mkdir /var/backup
Вставьте следующий сценарий как содержание файла /usr/local/bin/mybackup
и сохраните его:
#!/bin/bash
## Get the current date as variable.
TODAY="$(date +%Y-%m-%d)"
## Delete backup files older than 2 weeks before create the new one.
find /var/backup/ -mtime +14 -type f -delete
## MySQL Section. The first line is if you are using `mysqldump`,
## the next line is for `automysqlbackup`. I'm using both.
mysqldump -u'root' -p'<my-pwd>' --all-databases | gzip > /var/backup/mysql-all-db.sql.gz
automysqlbackup
## Tar Section. Create a backup file, with the current date in its name.
## Add -h to convert the symbolic links into a regular files.
## Backup some system files, also the entire `/home` directory, etc.
## --exclude some directories, for example the the browser's cache, `.bash_history`, etc.
tar zcvf "/var/backup/my-backup-$TODAY.tgz" \
/etc/hosts /etc/sudoers* /var/spool/cron/crontabs /etc/cron* \
/etc/apache2 /etc/letsencrypt /etc/php/7.0/apache2/php.ini \
/etc/phpmyadmin/apache.conf /etc/mysql/debian.cnf \
/etc/ssh/sshd_config* /etc/pam.d/sshd \
/usr/local/bin \
/var/backup/mysql-all-db.sql.gz /var/lib/automysqlbackup/latest/*.sql.gz \
/root \
/home \
/var/www \
--exclude=/home/<some-user>/.composer --exclude=/home/<some-user>/.npm
## MySQL Section - remove the DB backup files, if you want:
#rm /var/lib/automysqlbackup/latest/*.sql.gz
rm /var/backup/mysql-all-db.sql.gz
Если бы это - VPS, возможно, Вы хотели бы получить доступ к своему файлу резервной копии от Интернета до веб-браузера. В этом случае мы могли зашифровать файл для дополнительной безопасности. Если Вы - поклонник 7zip, добавляет некоторая команда как рядом с нижней частью сценария:
rm /var/www/html/the-location/*
7za a -tzip -p'<my-strong-pwd>' -mem=AES256 "/var/www/html/the-location/my-backup-$TODAY.tgz.7z" "/var/backup/my-backup-$TODAY.tgz"
Если это будет рабочим столом, то возможно, Вы захотите исключить все Downloads
каталог для каждого пользователя. Вы могли исключить также все файлы, больше, чем или/и, исключая расширения определенного файла.
Обратите внимание, что все команды, используемые выше, расположены в /bin
или /usr/bin
это перечислено в значение по умолчанию $PATH
из Крона. Если Вы, намереваются использовать задание Крона для автоматизации задачи, и у Вас есть команды (сценарии), которые расположены за пределами этих каталогов, необходимо использовать /the/full/path/to/the/script
:)
2. Для упаковки в ящики резервного копирования вручную теперь можно использовать эту команду:
sudo mybackup
3. Для автоматизации задачи, можно добавить новую запись в корне crontab
командой sudo crontab -e
. Например, для выполнения сценария каждую ночь в 1:15 определение задания Крона должно быть:
15 1 * * * /usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1
/var/log/mybackup-cron.log
это будет содержать и сообщения об ошибках 2>&1
если существует кто-либо. Считайте журнал периодически, чтобы быть sur, все хорошо работает.С другой стороны, я предпочел бы создавать сценарий в /etc/cron.daily/
:
sudo touch /etc/cron.daily/mybackup && sudo chmod +x /etc/cron.daily/mybackup
Содержание файла должно быть чем-то как этим:
#!/bin/sh
test -x /usr/local/bin/mybackup || exit 0
echo -e "*** Log Begin $(date +%Y-%m-%d) ***\n" >> /var/log/mybackup-cron.log
/usr/local/bin/mybackup > /var/log/mybackup-cron.log 2>&1
echo -e "*** Log End $(date +%Y-%m-%d) *** \n" >> /var/log/mybackup-cron.log
Обновление:
Вышеупомянутый сценарий мог быть найден в репозитории GitHub, названном Простыми Решениями для резервного копирования.