Как проверить наличие измененных файлов конфигурации в системе Debian?


Ответы:


78

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

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}'

Редактировать (работает с локализованными системами):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}' | sort | less

Изменить (работает с пакетами с OK в имени файла):

dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS="  "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK$/{print $1}' | sort | less

Работает как шарм на Ubuntu 10.4, я бы тебя голосовал тысячу раз :-)
Людвиг Вайнцерль

работает отлично. Вы могли бы использовать, md5sum --quietхотя, чтобы избежать фильтрации файлов ОК с awk(и, следовательно, проблемы локализации?) Кстати: вы не знаете, как включить неотслеживаемые файлы в / etc? Например, в / etc / apache2 / sites-available?
sfussenegger

Было бы интересно узнать, как на debsums -ecсамом деле работает мой answer ( ), потому что он, похоже, дает гораздо меньше результатов, чем этот.
naught101

Кроме того, очевидно, что единственные файлы conf проверяются на наличие версий пакетов, которые затем появляются debsums -ec: если я использую этот метод для повторной установки версий пакетов , то некоторые файлы, перечисленные с помощью этого метода, не изменяются.
naught101

В качестве дополнительной проверки, чтобы увидеть, какие изменения конфигурации могут быть отложенными или устаревшимиfind /etc -type f \( -iname '*.ucf-dist' -o -iname '*.ucf-old' -o -iname '*.dpkg-old' -o -iname '*.dpkg-dist' \) -print | sort
sphakka

47

от man debsums:

  debsums -ce
          List changed configuration files.

1
Это, безусловно, самый простой и лучший ответ.
mfisch

1
Только debsums не устанавливается по умолчанию, и вы можете не захотеть устанавливать его.
Алексис Уилк

1
@AlexisWilke: это 218 КБ и имеет минимальные зависимости ...
naught101

11

Извините за некро, но хотя ответ @ naught101 был правильным для измененных файлов, для добавленных файлов это не помогло . Решение @ Грэма хорошо, но зависит от etckeeper; Я не хочу изменять файловую систему.

find /etc -type f | grep -vFf <(debsums -e -r /etc | sed 's/[[:space:]]*OK$//')

Поиск файлов в / и т.д. / , что debsumsделает не сообщать действительным. Это означает, что не отслеженные файлы или файлы, которые не "ОК" (хэши не совпадают).


Также нужно запустить, debsums --list-missingчтобы проверить, не пропущены ли в одном или нескольких пакетах контрольные суммы включенных файлов. В настоящее время вывод должен быть пустым.
Микко Ранталайнен

8

Как правило, мне нравится устанавливать etckeeper в системе сразу. С помощью чего-то вроде etckeeper я могу найти не только файл, но и узнать, насколько он отличается.

Видеть:


6

Или дебсум -е | grep FAILED, который также покажет все отсутствующие файлы

(из пакета дебсум)


2

Это может быть излишним, но так как кто-то упомянул etckeeper, и в то время как я занимался расследованием, я наткнулся на этот другой драгоценный камень, который может быть более полезным, если вы пытаетесь выяснить вещи «после факта».

http://devstructure.com/blueprint/

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


Не ясно из их домашней страницы (выглядит немного устаревшим), если поддерживается Python-3. Кто-нибудь пробовал?
sphakka

Судя по тому, что репозиторий GitHub последний раз был активным несколько лет назад, я бы не поставил слишком много денег на него, работающем в Python3, из коробки, но он выглядит довольно хорошо написанным, так что это может быть не так уж много усилий, чтобы добавить в Python3 служба поддержки.
dragon788

1

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

Это зависит от того, использовали ли вы etckeeper с git vcs в идеале с самого начала, хотя это также должно работать, если вы специально добавляете и фиксируете ранее измененные файлы после первой фиксации. Обратите внимание, что здесь есть одна проблема: Ubuntu настраивает etckeeper для использования Bazaar по умолчанию (спонсор Canonical Bazaar), а не по умолчанию, установленным разработчиками etckeeper.

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

filter_sed="/committing changes in \/etc after apt run\$/d"

etckeeper vcs log --oneline |
  sed "$filter_sed; \$d; s/ .*//" |
  xargs etckeeper vcs show --name-only --format=format: |
  sort |
  uniq |
  sed "/^\$/d"

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

Примечательный файл, который он мне забирает, - мой xorg.conf- вам нужно добавить его в / etc / X11 самостоятельно, если вам это нужно. Также мои default/grubизменения подобраны, кажется, что это скопировано из / usr / share скриптом после установки, а не указано как часть пакета. Если в файл, подобный этому, было внесено изменение, методы, связанные с dpkg, не будут его отображать


1
Кстати, git logтеперь есть --invert-grepопция, которая позволяет отфильтровывать неинтересные коммиты без использования sed.
Нил Мэйхью
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.