Как я могу вернуть файл конфигурации обратно к исходно установленной версии после того, как я отредактировал его?

Я хочу вернуть файл в /etc/ обратно в его изначально установленную форму. Я редактировал файл с момента его установки. Как я могу восстановить этот файл конфигурации? Apt достаточно умен , а не , чтобы перезаписывать отредактированные конфигурационные файлы, так как мне сказать, что я хочу, чтобы это сделал? Я хочу вернуть файл /etc/foo.conf из пакета foo.

22
задан 16.09.2015, 12:40

5 ответов

Если вред уже нанесен, вот способ вернуть официальную версию файла конфигурации из командной строки. Сначала загрузите файл пакета (либо с apt-get --download-only, как показано ниже, либо со страницы пакета на packages.ubuntu.com ), затем извлеките его содержимое во временную папку. Затем вы можете скопировать файл в /etc. Обязательно соблюдайте исходные разрешения (большинство файлов в /etc принадлежат пользователю root и режиму 644 (т. Е. Читаемым по словам и пишущему по root), но каждое исключение существует по важной причине).

sudo apt-get --download-only --reinstall install foo
mkdir /tmp/foo
dpkg-deb -x /var/cache/apt/archives/foo_VERSION_ARCH.deb /tmp/foo

Обратите внимание, что это не относится к файлам конфигурации, которые не относятся к пакету, таким как /etc/fstab или /etc/passwd. Если вы потеряете это, вы сами. (Большинство в любом случае сильно зависят от системы.)


В будущем я рекомендую использовать etckeeper Install etckeeper [1119] [1117 ]. Установите пакет и запустите sudo etckeeper init. Это устанавливает контроль версий для всех файлов в /etc. Вам не нужно ничего делать, чтобы управлять etckeeper; вам нужно взаимодействовать с ним только тогда, когда вы хотите выполнить операцию контроля версий, например, обратиться к старым файлам. Файлы автоматически фиксируются до и после каждого запуска apt и каждую ночь (это настраивается).

По умолчанию в Ubuntu etckeeper использует Bazaar . Измените настройку в /etc/etckeeper/etckeeper.conf перед запуском etckeeper init, если вы предпочитаете Darcs, Git или Mercury.

С помощью Bazaar, чтобы вернуть /etc/foo.conf к последней подтвержденной версии:

cd /etc
sudo bzr revert foo.conf

Если вы хотите вернуться назад во времени, используйте sudo bzr log foo.conf, чтобы просмотреть историю файла, и [ 1113], если вы определили, что revno: 42 - это ревизия, к которой вы хотите вернуться.

0
ответ дан 24.04.2019, 20:48

Ответ , предоставленный Райаном Томсоном, направлялся в правильном направлении. Тем не менее, он не сможет выполнить эту работу (подробное описание приведено ниже).

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

sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo

. Это задаст вам вопрос типа

Configuration file '/etc/foo/foo.conf'
 ==> Modified (by you or by a script) since installation.
     Version in package is the same as at last installation.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ? 

. Вы должны нажать Y или I [ 1147] для установки исходного файла конфигурации сопровождающего пакета. Вы даже можете нажать D, чтобы посмотреть, что изменится, или запустить корневую оболочку с опцией Z, чтобы исправить себя.

Примечание: После замены вы найдете измененный файл как at /etc/foo/foo.conf.dpkg-old


Почему другие опции не будут работать?

Поскольку другие параметры в dpkg не работают. Опции, относящиеся к файлам конфигурации пакета:

  • --force-confmiss
  • --force-confnew
  • --force-confold
  • --force-confdef [ 1128]

--force-confmiss не будет работать, если версия пакета не изменяется. Со страницы руководства

Если файл конфигурации был изменен и версия в пакете действительно изменилась, всегда устанавливайте новую версию без запроса, если только - force-confdef [ 1150], также в этом случае действие по умолчанию является предпочтительным.

--force-confmiss работает с отсутствующими конфилами. Это также потерпит неудачу, когда версия не изменилась. Цитируя man-страницу

confmiss: Если conffile отсутствует и версия в пакете действительно изменилась, всегда устанавливайте отсутствующий conffile без запроса. Это опасно, поскольку это означает, что сохранение (удаление) изменения, внесенного в файл

--force-confold , сохранит измененную версию только в том случае, если версия изменена . Для того же пакета это тоже не удастся. Цитирование man-page

confold: Если conffile был изменен, а версия в пакете изменилась, всегда сохраняйте старую версию без запроса, если только [ 1153] - также указывается force-confdef , и в этом случае действие по умолчанию является предпочтительным.

--force-confdef также не удастся, поскольку действие по умолчанию - сохранить более старый файл (указывается в сообщении, показанном с помощью --force-confask. В нем есть строка (Y/I/N/O/D/Z) [default=N], означает сохранение по умолчанию. См. выше). И если указано --force-confnew, но версия не меняется, это тоже не будет работать. Цитирование man-page

confdef: Если conffile был изменен, и версия в пакете действительно изменилась, всегда выбирайте действие по умолчанию без запроса. Если действия по умолчанию нет, он перестанет спрашивать пользователя, если только не будет дано - force-confnew или - force-confold , и в этом случае он будет использовать это для решить окончательное действие.

Будет работать только --force-confask , поскольку он явно задаст вам вопрос, даже если версия такая же. Цитирование man-page

confask: Если conffile был изменен, всегда предлагайте заменить его на версию в пакете, даже если версия в пакете сделала не меняется (начиная с dpkg 1.15.8). Если какой-либо из - force-confmiss , - force-confnew , - force-confold или - force-confdef [1161 ], также он будет использоваться для принятия окончательного решения.

Надеюсь, что это поможет.

0
ответ дан 24.04.2019, 20:48

Используйте Synaptic (твик Ubuntu еще удобнее, но synaptic более понятен) и выберите «полностью удалить пакет». Это удалит все файлы конфигурации (вы можете сделать резервную копию этих файлов!).

Затем переустановите. Вы сделали

С Ubuntu Tweak вы получаете еще больше возможностей для очистки, повторного копирования и резервного копирования конфигурации. Может быть, вы хотите взглянуть на это. Это в программном центре.

с .: Synaptic также использует опцию «очистки» (как упоминалось выше Оли ...) - просто с графическим интерфейсом для более удобной работы.

0
ответ дан 24.04.2019, 20:48
  • 1
    Какой пакет удаляет файлы в вашем домашнем каталоге, когда вы его удаляете? Я бы посчитал это серьезной ошибкой! – sepp2k 12.11.2010, 07:45
  • 2
    @ Жиль: Ты прав. Чистка личных настроек в вашем домашнем каталоге не будет затронута. Я редактировал и исправлял вышесказанное. СРЮ – abatishchev 12.11.2010, 12:39
  • 3
    Очистка пакета не может быть вариантом, если другие зависят от него. – Ahmad Mageed 28.08.2012, 14:11

В зависимости от пакета вы можете найти файл конфигурации по умолчанию в /usr/share/doc/foo/examples.

0
ответ дан 24.04.2019, 20:48

Я наконец нашел ответ, который я смутно помнил много лет назад:

dpkg --force-confnew --force-confmiss -i PACKAGE.deb

Аргумент "confnew" заставляет dpkg заменять измененные файлы конфигурации на предоставленные пакетом, а "confmiss" аналогично с конфигурационными файлами, которые были удалены.

Согласно этому чату , вы также можете использовать эти опции через apt-get следующим образом:

apt-get -o DPkg::Options::="--force-confnew --force-confmiss" --reinstall install PACKAGE

, что избавляет вас от необходимости самостоятельно искать файл deb.

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

0
ответ дан 24.04.2019, 20:48
  • 1
    Проблема с --force-confnew состоит в том, что он будет устанавливать новые файлы конфигурации только при изменении версии. Если вы переустанавливаете ту же версию, он не установит новый конфигурационный файл, так как я его явно протестировал – rckd 28.08.2016, 21:11
  • 2
    И --force-confmiss установит новый файл конфигурации только в том случае, если версия была изменена и конфигурация отсутствует Как описано в справочной странице confmiss: If a conffile is missing and the version in the package did change, always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file. – Rikki 28.08.2016, 21:13

Теги

Похожие вопросы