Linux查找文件系统中的失效链接

2018-12-27 分类 [软件技巧]

在Linux中有些软件包卸载之后会,系统里会遗留下各种失效的软链接。比如前几天卸载nginx之后,nginx.service对应的软链接还在,所以systemd一直报告有一个nginx服务,还指向了/dev/null,删除/etc下各种链接然后daemon-reload一下问题解决了,整个过程感觉十分费劲。如果能用一条命令找出所有的失效链接,批量处理此类问题,也算是生产力的一种提升。Google一下,就在StackOverflow上找出了解决方法,大概有这么三种:

find . -xtype l

需要注意的是:xtype会检查软连接指向的文件类型,不是所有的 find命令都有这个参数。

find . -type l ! -exec test -e {} \; -print
 find . -type l -exec sh -c 'file -b "$1" | grep -q ^broken' sh {} \; -print

当找出了要删除的链接,看一下是不是刚才删除的软件包残留的,如果确定没问题就可以在命令后面加一个| xargs rm -rf来把他们一次性删除。

/proc/run目录中找到了大量的无效链接,但这些显然都不属于应该清理的。按照个人经验,一般/etc/usr/lib之类的目录有可能存在残留的无效链接,仔细分辨后删除