список файлов не из пакетов

Многие файлы устанавливаются пакетами в моей файловой системе.

  • Как я могу перечислить файлы, которые не ? То есть, пользователь создал, как компиляция программного обеспечения вручную, написание документов.
  • Есть ли способ перечислить файлы, которые из пакетов, но изменены? Чтобы проверить, что я изменил.

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

5
задан 10 July 2013 в 15:46

3 ответа

Для вашего второго замечания вы можете использовать debsums -ac (из пакета с тем же именем), чтобы перечислить все файлы пакета (включая файлы конфигурации), которые были изменены.

0
ответ дан 10 July 2013 в 15:46

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

find / -xdev -type f | sort >/tmp/root.files
sort /var/lib/dpkg/info/*.list >/tmp/installed.files
comm -23 /tmp/root.files /tmp/installed.files

Это, конечно, будет включать каждый файл в домашних каталогах. Вы можете пропустить некоторые каталоги в команде find, добавив директивы -prune (вам также необходимо добавить -print для печати остальных, поскольку действие -print подразумевается только в том случае, если действие отсутствует). [ 1122]

find / -xdev -type f -path /home -prune -o -path /var -prune -o -print | sort >/tmp/root.files

Чтобы проверить, изменился ли файл, вы можете сравнить его контрольную сумму с контрольной суммой в /var/lib/dpkg/info/$PACKAGE.md5sum. Если вы хотите сравнить каждый файл (это займет очень много времени):

for p in /var/lib/dpkg/info/*.list; do
  diff <(md5sum $(cat $p) | sort) <(sort ${p#.list}.md5sums);
done

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

Если вы измените файл конфигурации, он будет находиться в /etc; это единственное место, где вы должны изменить системные файлы. Установите пакет etckeeper , чтобы отслеживать ваши изменения в /etc. Запустите sudo etckeeper init, и /etc будет находиться под контролем версий (по умолчанию Bazaar ).

Если вы устанавливаете программное обеспечение для всей системы, установите его в /usr/local. Не трогайте ничего в /bin, /sbin, /lib (кроме установленных вручную модулей ядра, если они вам нужны, потому что у вас необычное оборудование), или /usr (кроме /usr/local, который предназначен для вашего собственного использования. ).

Все файлы в вашем домашнем каталоге были созданы вами (за исключением нескольких, которые были скопированы из /etc/skel при создании вашей учетной записи). Не существует общего способа отслеживать, какие из них являются значениями по умолчанию для приложения, какие возникают в результате выбора параметров конфигурации, а какие записывают текущее состояние (открытые файлы, историю команд и т. Д.).

0
ответ дан 10 July 2013 в 15:46

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

{ \
    find "${PREFIX-}/" -xdev -type f && \
    echo "" && \
    cat -- "${PREFIX}"/var/lib/dpkg/info/*.list; \
} | awk '
    done { --seen[$0]; }
    /^$/ { done = 1; }
    !done { files[++n] = $0; ++seen[$0]; }
    END { for (i = 1; i <= n; ++i) { if (seen[files[i]] > 0) { print(files[i]); } } }
' && debsums --admindir="${PREFIX-}"/var/lib/dpkg -a -c 2> /dev/null

Перед использованием обратите внимание на следующее:

  1. Замените -a на -e и добавьте -not -name "*~" после — введите f, если вас интересуют только изменения в файлах конфигурации.
    (Это значительно быстрее.)

  2. При необходимости добавьте sudo.

0
ответ дан 19 November 2020 в 13:01

Другие вопросы по тегам:

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