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