Я хочу вернуть файл /etc/
обратно в исходно установленную форму. Я редактировал файл с момента его установки. Как я могу восстановить этот файл конфигурации? Apt достаточно умен, чтобы не перезаписывать отредактированные файлы конфигурации, так как мне сказать, что я хочу это сделать?
Ради аргумента, скажем, я хочу вернуть файл /etc/foo.conf
из пакета foo
.
configuration
apt
Райан К. Томпсон
источник
источник
foo
, что, еслиbar
зависит,foo
а я не хочу удалятьbar
?Ответы:
Ответ, предоставленный Райаном Томсоном, направлялся в правильном направлении. Тем не менее, он не сможет выполнить эту работу (подробное описание приведено ниже).
Правильно (и самый простой) способ сделать это использует
-o
с ,apt
чтобы передать DPKG опции и заставитьdpkg
спросить вас , хотите ли вы , чтобы сохранить измененные конфигурационные файлы или оригинальные из них. Команда будет такой -Это бы задать вам вопрос, как
Вы должны нажать Y или I, чтобы установить исходный файл конфигурации сопровождающего пакета. Вы даже можете нажать D, чтобы посмотреть, что изменится, или запустить корневую оболочку с опцией Z, чтобы исправить себя.
Примечание. После замены вы найдете измененный файл как
at /etc/foo/foo.conf.dpkg-old
Почему другие варианты не будут работать?
Потому что другие параметры в dpkg не работают. Опции, которые имеют дело с файлами конфигурации пакета:
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
не будет работать, если версия пакета не меняется. С man-страницы--force-confmiss
работает с отсутствующими конфилями. Это также потерпит неудачу, когда версия не изменилась. Цитирование man-страницы--force-confold
сохранит измененную версию, только если версия изменена . Для того же пакета это тоже не удастся. Цитирование man-страницы--force-confdef
также потерпит неудачу, потому что действие по умолчанию - сохранить более старый файл (Обозначается в сообщении, показанном с помощью--force-confask
. У него есть строка,(Y/I/N/O/D/Z) [default=N]
означающая сохранение по умолчанию. См. выше). И если--force-confnew
указан, но версия не изменится, это тоже не будет работать. Цитирование man-страницыТолько
--force-confask
сработает, потому что он явно задаст вам вопрос, даже если версия такая же. Цитирование man-страницыНадеюсь, что это поможет.
источник
--force-confnew
? Я пыталсяapt-get […] -y
, но это не сработало. (Если это невозможно, пожалуйста, также отредактируйте ответ, чтобы сказать так.)--force-confnew
не спрашивая? Я думаю, что это случай по умолчанию, что означает, что он сохранит ваши изменения.--force-confask
делаетapt
всегда задают вопрос, в противном случае, вы будете использовать другие варианты , если вы уже знаете ответ.-o Dpkg::Options::=--force-confnew
безуспешно пытался (как и предсказывал твой ответ) и не читал сообщение об ошибке при попытке-o Dpkg::Options::="--force-confask --force-confnew"
. Тем не менее,apt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $package
правильно изменил конфигурационные файлы изменений$package
. Благодарность!Если вред уже нанесен, вот способ вернуть официальную версию файла конфигурации из командной строки. Сначала загрузите файл пакета (либо с помощью,
apt-get --download-only
как показано ниже, либо со страницы пакета на packages.ubuntu.com ), затем извлеките его содержимое во временную папку. Затем вы можете скопировать файл в/etc
. Обязательно соблюдайте исходные разрешения (большинство файлов в/etc
них принадлежат пользователю root и режиму 644 (т. Е. Читаемым по словам и пишущему по root), но каждое исключение существует по важной причине).Обратите внимание, что это не относится к файлам конфигурации, которые не из пакета, например
/etc/fstab
или/etc/passwd
. Если вы потеряете это, вы сами. (Большинство так или иначе очень зависит от системы.)В будущем я рекомендую использовать etckeeper . Установите пакет и запустите
sudo etckeeper init
. Это устанавливает контроль версий для всех файлов в/etc
. Вам не нужно ничего делать, чтобы управлять etckeeper; вам нужно взаимодействовать с ним только тогда, когда вы хотите выполнить операцию контроля версий, например, обратиться к старым файлам. Файлы автоматически фиксируются до и после каждого запуска apt и каждую ночь (это настраивается).По умолчанию в Ubuntu etckeeper использует Bazaar . Измените настройку
/etc/etckeeper/etckeeper.conf
перед запуском,etckeeper init
если вы предпочитаете Darcs, Git или Mercury.С Bazaar, чтобы вернуться
/etc/foo.conf
к последней версии:Если вы хотите вернуться назад во времени, используйте
sudo bzr log foo.conf
для просмотра истории файла, иsudo bzr revert -r 42 foo.conf
если вы определили, чтоrevno: 42
это ревизия, к которой вы хотите вернуться.источник
Вы можете загрузить пакет вручную с packages.ubuntu.com , распаковать файл и заменить его версией.
Или вы могли бы:
Второй чувствует себя намного более грубо. Он также может уничтожить другие конфигурации, если он использует более одного файла. Первый - это больше щелчка и усилий, но он кажется намного безопаснее.
Во-вторых, вы можете просто удалить файл, а --reinstall может заменить его. Если так, то это будет безопаснее.
источник
apt-get --reinstall purge package
не обидит иждивенцев.В зависимости от пакета, вы можете найти файл конфигурации по умолчанию в
/usr/share/doc/foo/examples
.источник
Используйте Synaptic (твик Ubuntu еще удобнее, но synaptic более понятен) и выберите «полностью удалить пакет». Это удалит все файлы конфигурации (вы можете сделать резервную копию этих файлов!).
Затем переустановите. Вы сделали
С Ubuntu Tweak вы получаете еще больше возможностей для очистки, повторного создания и настройки резервных копий. Может быть, вы хотите взглянуть на это. Это в программном центре.
PS: Synaptic также использует опцию «чистки» (как упоминалось выше Оли ...) - просто с графическим интерфейсом для более удобной обработки.
источник
Я наконец нашел ответ, который я смутно вспомнил много лет назад:
Аргумент «confnew» вынуждает dpkg заменять измененные файлы конфигурации на предоставленные пакетом, а «confmiss» аналогично действует и с файлами конфигурации, которые были удалены.
Согласно этому чату , вы также можете использовать эти опции через apt-get следующим образом:
что избавляет вас от необходимости самостоятельно искать файл deb.
Очевидно, что эти параметры опасны и могут привести к срыву важных файлов конфигурации системы при неправильном использовании.
источник
--force-confnew
том, что он будет устанавливать новые файлы конфигурации только при изменении версии. Если вы переустанавливаете ту же версию, он не установит новый файл конфигурации, как я это явно протестировал--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.