Linux查找文件系统中的失效链接
在Linux中有些软件包卸载之后会,系统里会遗留下各种失效的软链接。比如前几天卸载nginx之后,nginx.service对应的软链接还在,所以systemd一直报告有一个nginx服务,还指向了/dev/null,删除/etc下各种链接然后daemon-reload一下问题解决了,整个过程感觉十分费劲。如果能用一条命令找出所有的失效链接,批量处理此类问题,也算是生产力的一种提升。Google一下,就在StackOverflow上找出了解决方法,大概有这么三种:
- 如果你想用纯
find命令解决问题, 可以这么做:
find . -xtype l
需要注意的是:xtype会检查软连接指向的文件类型,不是所有的 find命令都有这个参数。
- 你也可以从
find命令中执行test -e:
find . -type l ! -exec test -e {} \; -print
- 当然也可以使用
grep工具:
find . -type l -exec sh -c 'file -b "$1" | grep -q ^broken' sh {} \; -print
当找出了要删除的链接,看一下是不是刚才删除的软件包残留的,如果确定没问题就可以在命令后面加一个| xargs rm -rf来把他们一次性删除。
在/proc和/run目录中找到了大量的无效链接,但这些显然都不属于应该清理的。按照个人经验,一般/etc、/usr、/lib之类的目录有可能存在残留的无效链接,仔细分辨后删除
永久链接:https://tenglog.com/posts/linux-find-all-broken-symlinks.html