在Linux上查找损坏的符号链接并删除它们
在Linux中,有很多方法可以找到损坏的符号链接或软链接,这里我给出了两种方法。
1.使用"symlinks"工具查找和删除损坏的软链接
Symlinks是一个命令行符号链接维护工具,它扫描给定的目录,并列出符号链接。
Symlinks 在许多Linux发行版的官方存储库中可用。
在CentOS上安装Symlinks,运行:$ sudo yum install symlinks
在Fedora上:$ sudo dnf install symlinks
在Debian,Ubuntu,Linux Mint上:$ sudo apt-get install symlinks
在Ubuntu上,你需要启用[universe]存储库。$ sudo add-apt-repository universe
安装Symlinks后,运行以下命令查找并删除损坏的符号链接:$ symlinks -dr
上面的命令将扫描给定目录中的损坏的符号链接并删除它们。
这里,d-删除空置的符号链接
r-递归
我给你看个例子,我在当前目录中创建一个"abc"的文件。$ touch abc
接下来,为ac文件创建一个名为'xyz'的符号链接:$ ln -s abc xyz
现在删除实际文件$ rm abc
正如你已经知道的,一旦我们删除了实际的文件,符号链接就没有了价值,因为它只是捷径,而现在目标不存在了。
要查找损坏的符号链接,请运行:$ symlinks .
请注意末尾的点(.),这意味着我们正在搜索当前目录中断开的链接。
示例输出:dangling: /home/sk/xyz -> abc
使用命令删除这个断开的链接:$ symlinks -dr .
示例输出:dangling: /home/sk/xyz -> abc
deleted: /home/sk/xyz -> abc
最后再次运行'symlinks'命令以确保是否有剩余的链接。
2.使用"find"命令查找和删除损坏的软链接
我们也可以使用'find'命令来删除损坏的符号链接。
要查找损坏的符号链接,但不删除它们,请运行:$ find . -xtype l
此命令将列出当前目录中损坏的符号链接,如果要在特定路径上搜索断开的符号链接,例如/usr/local/,请执行以下操作:$ find /usr/local/ -xtype l
输出:
上面的命令将在/usr/local/及它子目录中搜索断开的链接,正如你在上面的输出中看到的,有许多损坏的符号链接。
或者,使用以下命令列出未使用的符号链接:$ find /usr/local/ -xtype l ! -exec test -e {} ; -print
还可以检查断开的链接点的位置,确保删除了预期的符号链接是一种很好的做法。$ find /usr/local/ -xtype l -exec ls -l {} +
示例输出:lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/drracket -> /home/sk/racket/bin/drracket
lrwxrwxrwx 1 root root 27 Jan 21 08:53 /usr/local/bin/gracket -> /home/sk/racket/bin/gracket
lrwxrwxrwx 1 root root 32 Jan 21 08:53 /usr/local/bin/gracket-text -> /home/sk/racket/bin/gracket-text
lrwxrwxrwx 1 root root 24 Jan 21 08:53 /usr/local/bin/mred -> /home/sk/racket/bin/mred
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/mred-text -> /home/sk/racket/bin/mred-text
lrwxrwxrwx 1 root root 23 Jan 21 08:53 /usr/local/bin/mzc -> /home/sk/racket/bin/mzc
lrwxrwxrwx 1 root root 24 Jan 21 08:53 /usr/local/bin/mzpp -> /home/sk/racket/bin/mzpp
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/mzscheme -> /home/sk/racket/bin/mzscheme
lrwxrwxrwx 1 root root 26 Jan 21 08:53 /usr/local/bin/mztext -> /home/sk/racket/bin/mztext
lrwxrwxrwx 1 root root 30 Jan 21 08:53 /usr/local/bin/pdf-slatex -> /home/sk/racket/bin/pdf-slatex
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/plt-games -> /home/sk/racket/bin/plt-games
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/plt-help -> /home/sk/racket/bin/plt-help
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/plt-r5rs -> /home/sk/racket/bin/plt-r5rs
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/plt-r6rs -> /home/sk/racket/bin/plt-r6rs
lrwxrwxrwx 1 root root 34 Jan 21 08:53 /usr/local/bin/plt-web-server -> /home/sk/racket/bin/plt-web-server
lrwxrwxrwx 1 root root 26 Jan 21 08:53 /usr/local/bin/racket -> /home/sk/racket/bin/racket
lrwxrwxrwx 1 root root 24 Jan 21 08:53 /usr/local/bin/raco -> /home/sk/racket/bin/raco
lrwxrwxrwx 1 root root 28 Jan 21 08:53 /usr/local/bin/scribble -> /home/sk/racket/bin/scribble
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/setup-plt -> /home/sk/racket/bin/setup-plt
lrwxrwxrwx 1 root root 26 Jan 21 08:53 /usr/local/bin/slatex -> /home/sk/racket/bin/slatex
lrwxrwxrwx 1 root root 29 Jan 21 08:53 /usr/local/bin/slideshow -> /home/sk/racket/bin/slideshow
lrwxrwxrwx 1 root root 27 Jan 21 08:53 /usr/local/bin/swindle -> /home/sk/racket/bin/swindle
要同时删除所有断开的链接,请运行:$ sudo find /usr/local/ -xtype l -delete
或者$ sudo find /usr/local/ -xtype l ! -exec test -e {} ; -delete
用你自己的路径替换/usr/local/。