Использование резервного копирования, Git и Apt-Get для отмены изменений на Linux VPS

При изучении командной строки Linux часто упоминается предостережение о том, что в ней отсутствует команда undo. Это особенно актуально для таких вещей, как удаление файлов с помощью команды rm; тем не менее, Linux имеет эквиваленты на все подобные случаи.

Данное руководство описывает способы отмены (undo) изменений, внесенных из командной строки. Единственной стратегии не существует, потому использованные программы и техники варьируются относительно того, что именно нужно отменить.

Все действия данного руководства выполнены на Ubuntu 12.04, но большинство дистрибутивов и версий Linux также могут выполнить их, но могут нуждаться в небольшой редакции.

Отмена изменений файла

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

Резервное копирование

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

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

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

Существуют различные уровни резервного копирования, а именно: полное копирование (резервное копирование всех данных), дифференциальное резервное копирование (копирование каждого файла, который изменился с момента последнего полного резервного копирования), а также инкрементное резервное копирование (копирование изменений данных в файлах с момента последнего полного или дифференциального копирования).

Часто последние два уровня совмещаются с целью получить полную резервную копию файлов без затрат на запуск полного копирования.

Обычно отдельные файлы могут быть восстановлены без необходимости восстановления всей файловой системы. Это особенно полезно, если файл был случайно удален или изменен.

Контроль версий

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

Системы контроля версий, такие как Git и Mercurial, позволяют отслеживать изменения файлов. Это значит, что если над конфигурационным каталогом (как /etc) осуществляется контроль версий, то нарушившие систему изменения можно легко отменить.

На этом сайте есть несколько статей, охватывающих использование Git.

Вкратце, Git можно установить на Ubuntu с помощью следующих команд:

sudo apt-get update
sudo apt-get install git

После завершения установки нужно настроить несколько параметров конфигурации, набрав:

git config --global user.name "your_name"
git config --global user.email "your_email"

Затем нужно указать каталог, изменения которого нужно отслеживать. Для примера можно использовать каталог /etc. Также стоит установить контроль версий домашнего каталога. Инициализировать git-репозиторий можно, введя:

cd /etc
sudo git init

Затем можно внести в данный каталог (и во все его подкаталоги) все файлы, набрав:

sudo git add .

Подтвердите изменения, набрав:

git commit -m "Initial commit"

Теперь все внесенные файлы находятся под контролем версий. При внесении изменений в файлы данного каталога нужно перезапускать две последние команды (при этом вместо «Initial commit» нужно вводить другое сообщение).

Затем можно вернуть файл к предыдущему состоянию, найдя хэш подтверждения в журнале:

git log
commit 7aca1cf3b5b19c6d37b4ddc6860945e8c644cd4f
Author: root
Date:   Thu Jan 23 13:28:25 2014 -0500
again
commit 4be26a199fd9691dc567412a470d446507885966
Author: root
Date:   Thu Jan 23 13:20:38 2014 -0500
initial commit

Теперь восстановите файл, набрав что-то вроде:

git checkout commit_hash -- file_to_revert

Как можно видеть, это довольно простой способ отменить внесенные изменения.

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

Отмена изменений при помощи менеджера пакетов

Иногда менеджер пакетов apt вносит некоторые изменения, которые нужно отменить. В других случаях, менеджер пакетов может помочь восстановить параметры пакета по умолчанию.

Удаление пакетов с помощью Apt

Иногда пакет устанавливается только для того, чтобы убедиться, что он не подходит. Чтобы удалить пакет при помощи apt, наберите:

sudo apt-get remove package

Но данное действие оставляет конфигурационные файлы невредимыми. Иногда это полезно, но если пакет нужно полностью удалить с системы, нужно использовать команду «purge»:

sudo apt-get purge package

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

Чтобы удалить любые автоматически установленные зависимости, используйте команду apt «autoremove»:

sudo apt-get autoremove --purge

Также случается, что при установке пакетов при помощи apt сложно удалить метапакеты.

Метапакеты – это просто пакеты, которые являются списком зависимостей. Сами они ничего не устанавливают, так как это просто список других пакетов, которые нужно скачать. Как известно, их достаточно сложно полностью удалить автоматически.

Инструмент, который может помочь в данной ситуации – пакет «deborphan». Чтобы установить его, введите:

sudo apt-get install deborphan

После удаления метапакета можно запустить команду «orphaner», чтобы найти оставленные при удалении пакета файлы. Это помогает обнаружить пакеты, которые нельзя удалить обычными методами.

Еще один способ найти блуждающие файлы – пакет «mlocate». Его можно установить так:

sudo apt-get install mlocate

Затем можно обновить индекс файлов путем запуска этой команды:

sudo updatedb

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

locate package_name

Также можно увидеть файлы, установленные пакетами посредством метапакетов, просмотрев apt-логи:

sudo nano /var/lob/apt/history.log

Информация о пакетах может быть использована для удаления ненужных пакетов  вручную.

 Восстановление файлов по умолчанию

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

При необходимости создать резервную копию текущего конфигурационного файла можно ввести:

sudo mv file file.bak

Команда «sudo» в вышеприведенной команде нужен, если у пользователя нет прав на изменение данного каталога. В противном случае эту команду можно опустить.

После удаления или перемещения файла можно переустановить пакет, говоря apt проверить, отсутствует ли какой-либо конфигурационный файл:

sudo apt-get -o Dpkg::Options="--force-confmiss" install --reinstall package_name

Если пакет, отвечающий за конфигурационный файл, который нужно восстановить, неизвестен, то можно использовать утилиту «dpkg»:

dpkg -S file_name

Чтобы просто просмотреть изначальные этапы конфигурирования пакета, на которых  во время некоторых установок изменяются определенные значения, запустите команду:

dpkg-reconfigure package_name

Это перезапустит все запросы конфигурации, которые произошли после начальной установки программы.

Как найти права на файл по умолчанию

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

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

dpkg -S filename

Это действие указывает пакет, к которому относится данный файл. К примеру, если нужно выяснить, к какому пакету относится файл /etc/deluser.conf, можно ввести:

dpkg -S /etc/deluser.conf
adduser: /etc/deluser.conf

Как видите, это действие сообщает, что за данный файл отвечает пакет «adduser». Затем можно попробовать найти файл «.deb» данного пакета, перейдя в архив apt:

cd /var/cache/apt/archive

В данном каталоге можно найти файлы «.deb» для многих установленных в данной системе пакетов. Если файл, соответствующий используемому пакету, не может быть найден, то его придется повторно скачать из репозитория при помощи команды:

sudo apt-get download package

К примеру,  если файл «.deb» для пакета adduser не был найден, то его можно получить, введя:

sudo apt-get download adduser

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

dpkg -c file.deb

Для программы «adduser» результат выглядит примерно так:

dpkg -c adduser_3.113ubuntu2_all.deb
drwxr-xr-x root/root         0 2011-10-19 18:01 ./
drwxr-xr-x root/root         0 2011-10-19 18:01 ./etc/
-rw-r--r-- root/root       604 2011-10-19 18:01 ./etc/deluser.conf
drwxr-xr-x root/root         0 2011-10-19 18:01 ./usr/
drwxr-xr-x root/root         0 2011-10-19 18:01 ./usr/sbin/
-rwxr-xr-x root/root     35120 2011-10-19 18:01 ./usr/sbin/adduser
-rwxr-xr-x root/root     16511 2011-10-19 18:01 ./usr/sbin/deluser
. . .

Как можно видеть, пакет по умолчанию устанавливает права на чтение и запись для владельца (root), а также права на чтение для всех остальных пользователей.

Итоги

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

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

Tags: , , , , ,

Добавить комментарий