前段时间,我们解释了 什么是软链接和硬链接 用实际例子。 有时您可能会忘记删除未使用的软链接或不指向任何地方的符号链接。 在文件系统上保留未使用的链接不会损害系统,除了占用一点磁盘空间。 所以没有必要保留它们。 只需找到并删除 Linux 系统上损坏的符号链接即可。
在 Linux 上查找损坏的符号链接并删除它们
有很多方法可以在 Linux 中找到损坏的符号链接或软链接。 这里我给出了两种方法。
1.使用“符号链接”实用程序查找和删除损坏的软链接
符号链接 是一个命令行、符号链接维护实用程序。 它扫描给定的目录并列出符号链接(如果有的话)。
符号链接可在许多 Linux 发行版的官方存储库中找到。
安装符号链接 中央操作系统, 跑:
$ sudo yum install symlinks
在 Fedora:
$ sudo dnf install symlinks
在 Debian, Ubuntu, Linux 薄荷糖:
$ sudo apt-get install symlinks
在 Ubuntu 上,您需要启用 [universe]
存储库。
$ sudo add-apt-repository universe
安装 Symlinks 后,运行以下命令查找并删除损坏的符号链接:
$ symlinks -dr <directory-path>
上面的命令将扫描给定目录中损坏的符号链接并删除它们。
这里,
d
– 删除悬空的符号链接r
– 递归
让我给你看一个例子。 我将创建一个名为 "abc"
在当前目录中。
$ touch abc
接下来我创建一个符号链接,名为 'xyz'
为了 abc
文件:
$ ln -s abc xyz
现在删除实际文件,即 abc
.
$ rm abc
您可能已经知道,一旦我们删除了实际文件,符号链接就没有任何价值。 因为它只是捷径,现在已经坏了。
要查找损坏的符号链接,请运行:
$ symlinks .
请 注意点 (.
) 在最后。 这意味着我们正在当前目录中搜索损坏的链接。
样本输出:
dangling: /home/sk/xyz -> abc
这里, 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/
用你自己的路径。
建议阅读:
- 如何在 Linux 上列出符号链接
希望能帮助到你。
CLID删除损坏的符号链接查找损坏的符号链接LinuxLinux 基础Linux 命令Linux 如何删除符号链接软链接符号链接符号链接