Diff для всех Linux-систем

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

Мне нужен отчет о всех файлах, которые были добавлены, удалены или изменены, и поэтапный анализ изменений. Что-то вроде вывода файла diff tool было бы здорово.

Я предполагаю, что мне нужно сделать какой-то снимок перед запуском скрипта и второй снимок после. Я предполагаю, что я бы накормил эти снимки в какой-то инструмент diff или diff-like.

Кто-нибудь знает, какие инструменты использовать и как различать всю систему?

Я использую Virtualbox, у которого есть функция разностных изображений , хотя я не знаю, смогу ли я адаптировать ее для этой цели. Более того, я предпочел бы более общее решение, если это возможно.

Я думаю, что ваша идея не за горами. Чтобы описать возможный способ: я использую rsnapshot для резервных копий. Он создает структуру каталогов (backup-) всех или подмножества ваших файлов с точками входа (например) /backup/hourly.1/... и /backup/hourly.0/... , где каждая ветвь переносит все данные, но использует (жесткие) ссылки для файлов, где никаких изменений не было сделано. Выполнение рекурсивного ls или find в обеих структурах и сравнение результата (отсортированного в случае поиска) покажут недостающие файлы, а проверка количества ссылок (в ls -l это будет второй столбец) будут отображаться новые файлы ( которые имеют счетчик ссылок 1). Подробные сведения об изменениях в файлах, которые вы можете (для идентифицированных файлов), используйте обычные инструменты diff . Как сказано, это наброски, потребуется некоторая работа по реализации и может иметь неочевидные причуды, поэтому возьмите это предложение с зерном соли

Я, вероятно, сделаю это с помощью rsync, как это предлагается в одном из комментариев. Rsync имеет функцию сухого режима и контрольной суммы, которую вы можете использовать для создания точного отчета о том, что изменилось.

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

Или вы можете использовать совершенно другой подход. Используйте git. Итак, в вашей «базовой» системе выполните git init в /, а затем после того, как вы запустили стороннюю вещь, которую вы могли бы просто сделать:

 git status > /tmp/changed-files.txt git diff > /tmp/changes.txt 

использование git даст вам немного гибкости. Сказав, что он может бороться за всю систему и может запутаться в / proc и т. Д.