Многие файлы устанавливаются пакетами в моей файловой системе.
Это было бы полезно для меня в проекте по обновлению пользовательских изображений, которые используются внутри компании. Также при переустановке дома я забыл, что делал. Конечно, самое интересное находится вне домашней директории, но изменения, например, в файлах точечной конфигурации в домашней сети также интересны.
Для вашего второго замечания вы можете использовать debsums -ac
(из пакета с тем же именем), чтобы перечислить все файлы пакета (включая файлы конфигурации), которые были изменены.
Чтобы ответить на ваш вопрос буквально, вы можете перечислить файлы, которые не приходят из пакетов, следующим образом:
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
при создании вашей учетной записи). Не существует общего способа отслеживать, какие из них являются значениями по умолчанию для приложения, какие возникают в результате выбора параметров конфигурации, а какие записывают текущее состояние (открытые файлы, историю команд и т. Д.).
Собирая воедино другие ответы, вот сценарий, в котором перечислены все файлы, которые не относятся ни к одному из установленных пакетов, за которыми следуют все измененные файлы конфигурации.
{ \
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
Перед использованием обратите внимание на следующее:
Замените -a
на -e
и добавьте -not -name "*~"
после — введите f
, если вас интересуют только изменения в файлах конфигурации.
(Это значительно быстрее.)
При необходимости добавьте sudo
.