Linux上的符号链接是一个非常棒的特性,但是它们可能会断开并指向任何东西。下面是如何找到断开的符号链接,检查它们,并在需要时从系统中删除它们。
符号链接,也称为“软链接”和“符号链接”,是一种可以指向文件和目录的快捷方式。符号链接看起来就像文件管理器窗口中的常规文件或目录。它还显示为终端窗口中的文件列表中的一个条目。符号链接指向的文件或目录可以位于文件系统树中的任何位置。
例如,假设您的主目录中有一个名为“dave link”的符号链接,它指向一个名为“text”的文件-文件.txt“位于文件系统树的其他位置。在符号链接上使用的命令将自动应用于它所指向的文件。如果您尝试在符号链接上使用cat或less,您将实际看到“text”的内容-文件.txt“文件。
标准Linux安装包含许多符号链接。即使你没有自己创建任何东西,操作系统也会使用它们。应用程序安装例程通常使用符号链接指向可执行文件。软件更新后,二进制文件将替换为新版本,只要新文件名与旧文件名相同,所有符号链接都将继续工作。
通过在根目录中使用ls,我们可以很容易地看到一些符号链接。有些条目在我们的ubuntu20.10测试机上以不同的颜色显示,它们以浅蓝色显示。
我们键入以下内容:
ls /我们可以使用-l(longlisting)选项进行更深入的研究。我们键入以下命令来查看所有“lib”条目和单个“bin”条目:
ls -l /lib* /bin每行的开头都有一个“l”,表示该项目是一个符号链接。“->”后面的文本显示符号链接所指向的内容。在我们的示例中,目标是所有目录。
所有者、组和其他人的权限列为读、写和执行。这些是默认的假条目。它们并不反映符号链接指向的对象的实际权限。目标文件或目录上的权限优先,并由文件系统授予。
当符号链接所指向的文件被删除或移动到另一个位置时,符号链接将被破坏(或挂起)。如果应用程序的卸载例程不能正常工作,或者在它完成之前被中断,则可能会留下断开的符号链接。
如果有人在不知道符号链接指向它的情况下手动删除文件,那么这些符号链接将不再工作。它们就像路标指向一个被推土机推平的城镇。
在当前目录中使用一个名为“hello”的符号链接可以很容易地看到这种行为。我们键入以下内容,使用ls查看:
ls -l它指向一个名为“bin”的目录中名为“htg”的程序。如果我们“运行”符号链接,它将为我们执行程序:
./hello我们现在可以通过直接运行程序来检查是否发生了这种情况:
../bin/htg正如所料,我们得到了同样的答复。删除程序文件:
rm ../bin/htg现在,当我们查看符号链接时,我们看到它以红色列出,因为Linux知道它已损坏。它还告诉我们以前的情况,这样我们就可以替换文件,重新编译程序,或者做任何必要的事情来修复符号链接。
请注意,如果尝试运行symlink,则得到的错误引用的是symlink名称,而不是symlink指向的程序的名称。
我们键入以下内容:
./hello大多数find的现代版本都有xtype(扩展类型)选项,这简化了查找断开的符号链接的过程。我们将使用带有xtype的l标志来告诉它搜索链接。按如下方式使用find和xtype,不带任何其他类型标志,强制xtype返回断开的链接:
find . -xtype l在我们的测试主目录中运行这个命令会发现很多断开的符号链接。请注意,默认情况下,搜索是递归的,因此它会自动搜索所有子目录。
如我们所料,我们故意破坏的“你好”符号已经列出。另一个符号链接与Firefox浏览器相关,其余的与snap相关。
如果我们使用-l(lines)选项将输出通过wc,我们可以计算行数,这与计算断开的符号链接相同。
我们键入以下内容:
find . -xtype l | wc -l我们被告知我们有24个符号链接被破坏,没有任何意义。
在冲入并删除所有断开的符号链接之前,请查看find命令的结果。看看是否有任何损坏符号链接的有效原因。
有时,符号链接可能是问题所在,而不是目标文件。如果符号链接创建不正确,它可能什么都没有指向,但真正的目标是存在的。在这种情况下,重新创建符号链接将是解决方法。
也有可能是一个明显损坏的符号链接被用作其他东西,例如文件锁的指示器或其他go/no-go指示器。Firefox做到了这一点;这就是我们列表中的第一个符号链接。不过,我们的测试机器上没有使用Firefox,所以删除它是安全的。
也有可能目标只是周期性地出现,这是特定软件的预期(和期望)行为。可能目标文件是从另一台机器或云复制的,它执行它的功能,然后再次被删除,结果在下一个周期被另一个程序替换。
断开的符号链接也可能是软件安装失败的征兆。在这种情况下,不应删除符号链接,而应手动修复它或重复安装。
修复了需要保留的断开链接后,重复该命令执行搜索。然后,搜索结果中应该没有固定的符号链接。
为了安全起见,最好将符号链接删除限制在自己的目录中。在以根目录或系统目录运行这些命令时要格外小心。
-exec(execute)选项对查找搜索结果运行命令。我们将使用rm删除每个断开的符号链接。当find发现每个断开的符号链接时,{}字符串被替换为每个断开符号链接的名称。
我们必须使用分号(;)来终止希望-exec运行的命令列表。我们将使用反斜杠(\)来“转义”分号,因此它被视为find命令的一部分,而不是Bash应该执行的操作。
我们键入以下内容:
find . -xtype l -exec rm {} \;我们返回到命令提示符,没有任何迹象表明发生了什么事。为了验证已删除断开的链接,我们重复该命令以查找它们,如下所示:
find . -xtype l没有任何匹配结果,这意味着已删除断开的符号链接。
同样,在运行删除符号链接的命令之前,请务必花时间查看符号链接列表。您可以通过运行命令在适当的目录中删除任何您不确定的内容来避免删除它们。
例如,在上面,我们可以在“.snap”目录中运行命令,然后手动删除单独的“hello”符号链接。这会使Firefox锁符号链接保持不变。
...隐私问题、跟踪、审查争议和所谓的“仇恨言论”(以及如何安全地应用这样的描述),Facebook远不是它的主人让你相信的舒适的网上家园。还有恶意软件。。。 ...
... 让我们看看什么是符号链接,如何在Linux以及macOS和Windows上创建符号链接,为什么需要这种特殊类型的快捷方式,等等。 ...
想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...
...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...
...DoH的好处,而无需任何修改。 相关:HTTPS(DoH)上的DNS将如何提升在线隐私 设置应用程序中的dns配置 Windows10的设置应用程序现在允许您配置DNS服务器和DoH设置。以前设置自定义DNS服务器需要访问classic控制面板。 要查找DNS(以...
...本的设备,让您可以从计算机和平板电脑上聊天。下面是如何管理可以访问您的信号帐户的设备。 如何查看链接的设备 Signal使用您的电话号码来识别您是谁,这意味着您必须使用智能**注册并登录才能使用该服务。一旦你做到...
...以使用按扣式软呢帽,但为了覆盖所有底座,我们将演示如何安装flatpak。 sudo flatpak install https://dl.flathub.org/repo/appstream/org.signal.Signal.flatpakref 在Manjaro上,您可以直接从pacman安装它。 sudo pacman -Sy signal-desktop 桌面启动信号 按键盘...