正如我想象的许多 Linux 用户所做的那样,多年来我遵循了无数不同线程、博客文章、视频等的建议,并对系统文件进行了各种更改,以改进我的设置。
其中一些是出于个人喜好和定制,例如更改/修改键盘布局或鼠标设置。其他的则更注重修复,例如修复我的笔记本电脑由于某些制造商特定的问题而无法从睡眠中唤醒,或者弄乱音频驱动程序配置以使音频正常工作。
我现在想重新开始全新安装。我计划使用相同的发行版和相同的笔记本电脑,因此很可能我需要再次进行这些更改以使事情按照我希望的方式工作 - 甚至让它们完全工作。
有没有聪明的如何弄清楚多年来我所做的哪些更改在重新安装后可能需要重新进行?
我考虑过检查哪些系统文件是由我手动编辑的(假设这是可能的),或者甚至对我的安装和普通安装之间的特定文件夹进行比较。然而,我绝对不记得我必须编辑的大部分文件,而且我对 Linux 的了解不够,不知道哪些文件/目录是重要的,哪些我可以安全地忽略等等。
编辑:澄清一下,我不是在谈论点文件;我将它们置于版本控制之下。
编辑 2:有问题的发行版是 Manjaro,i3wm 版本。
答案1
pacman
您可以使用 Arch 及其衍生产品查询软件包数据库:
pacman -Qii | awk '/^MODIFIED/ { print $2 }'
这将为您提供所有已修改文件的列表。要查看实际的修改,您必须将文件与相应包中的原始文件进行比较,但我不会为此烦恼。相反,备份结果列表中的所有文件,然后diff
备份新安装的文件。
答案2
我会使用相同的软件包对相同的发行版/版本进行全新安装(例如在虚拟机中)。比较校验和等是微不足道的。
答案3
正如已经建议的那样,您可以创建清除安装,生成所有文件的哈希值(排除 中的临时文件/tmp
,/var/tmp
并比较哈希值。但恕我直言,这不会为您提供大量信息,因为如果您的系统是在 2 或 3 年前安装的您将看到(几乎)所有文件都因软件包的新版本而更改。关于配置文件,您可以尝试备份它们并在新安装中恢复它们或用于diff
显示更改。
将来,如果你想真正跟踪更改,你可以使用audit
(几乎)所有 Linux 发行版中存在的子系统。
答案4
目前:
- 从 USB 启动并在另一个磁盘上备份系统
- 使用与您现在使用的版本完全相同的版本重新安装操作系统
- 重新安装所有软件并将其更新到与您现在使用的版本完全相同的版本(但不要更改配置)
- 再次从 USB 启动,将新旧系统安装在某处并比较文件之间的差异(例如
sudo diff -Naur /mnt/old /mnt/new
)
一些创造性地使用 find 也会对您有所帮助。
例如:类似的内容sudo find /mnt/old -xdev -mtime -100
会显示过去 100 天内更改的所有文件。
我不建议这样做确切地我提到的,否则你得到的信息将是巨大的。您必须根据您的需求进行一些调整。 (例如仅比较某些目录)。find
会帮助你的。
为将来:
- 更多版本控制(例如
etckeeper
) - 更多备份(例如
rsync
)并不时比较它们(例如diff
) - 具有 COW 的文件系统(例如 btrfs )