源码编译安装的软件残留需优先查install_manifest.txt或按--prefix路径整体删除,再清理/usr/local/{bin,lib,share}等关联位置,切勿误删/usr/lib等系统核心目录。

确认是否为源码编译安装的软件
临时编译留下的“不必要依赖项”通常不是包管理器记录的依赖,而是手动 make install 后散落在系统各处的二进制、库、配置或头文件。这类残留不会出现在 apt list --installed 或 rpm -qa 中,所以不能靠 apt purge 或 dnf remove 清理。
先判断来源:如果没用过 apt install、dnf install 或 pacman -S,而是下载源码、执行了 ./configure && make && sudo make install,那大概率就是它。
优先检查 install_manifest.txt 是否存在
很多规范 CMake 项目在 make install 时会自动生成 install_manifest.txt,里面逐行记录了所有被安装的文件路径。这是最安全、最精准的清理依据。
- 进入你当初编译的源码目录(不是安装目录),运行:
cat install_manifest.txt—— 若有输出,说明可直接用于卸载 - 执行清理命令:
sudo xargs rm -f - 注意:该文件必须是绝对路径;若路径含空格或特殊字符,需加引号处理,但多数开源项目不会这样写
- 执行后建议再运行一次
cat install_manifest.txt | xargs ls -d 2>/dev/null | head -3验证是否真删干净
没有 install_manifest.txt 就按 prefix 目录整体删除
如果你编译时用了 ./configure --prefix=/opt/mytool 或 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/myapp,那所有文件都集中在那个目录下,无需逐个找。
- 确认 prefix 路径:翻查当初的 configure/cmake 命令历史,或看
which 工具名输出反推(例如which jq返回/usr/local/bin/jq,则 prefix 很可能是/usr/local) - 但别直接删
/usr/local—— 它可能混着其他软件。应只删子目录,如:sudo rm -rf /usr/local/mytool - 再检查关联路径:
/usr/local/lib/libmytool.so*、/usr/local/include/mytool.h、/usr/local/share/mytool/,一并删除 - 最后运行
sudo ldconfig(Linux)刷新动态库缓存,避免后续链接报错
手动清理常见残留位置与风险点
当既无 manifest 又无明确 prefix,就得靠经验定位。以下路径最常藏匿编译残留,但操作前务必确认归属,否则易误伤系统:
-
/usr/local/bin/、/usr/local/sbin/:检查是否有你编译的可执行文件(用file命令看是否为 ELF,排除 shell 脚本) -
/usr/local/lib/、/usr/local/lib64/:找.so、.a文件,注意不要删掉被其他软件依赖的通用库(如libpng、libjpeg) -
~/.local/bin/和~/.local/lib/:非 root 编译常用,尤其 Python/Cargo 工具链生成的二进制 -
/etc/下以软件名命名的配置目录(如/etc/mytool/):只删明确是你装的,别碰/etc/default或/etc/systemd/system/里未确认的服务文件 - 千万别删
/usr/lib/或/lib/下的文件——这些属于发行版核心,手动删可能导致系统无法启动
最隐蔽也最容易被忽略的是 pkg-config 文件(.pc),常位于 /usr/local/lib/pkgconfig/,它们不会影响运行,但会让后续编译错误地链接到旧版本。清之前先 pkg-config --modversion 包名 测试是否存在,再删对应 .pc 文件。











