当前位置: 首页 > 科技观察

如何在Linux上查找和删除损坏的符号链接

时间:2023-03-18 19:03:36 科技观察

符号链接是指向另一个文件的Linux文件。如果引用的文件被删除,符号链接仍然存在,但不会显示为问题,除非您尝试使用它。这是查找和删除指向已删除文件的符号链接的简单方法。符号链接在Linux系统上发挥着非常有用的作用。它们可以帮助您记住重要文件在系统中的位置,使它们更易于访问,并且无需复制大文件以便于访问,从而为您节省大量空间。什么是符号链接?通常称为“符号链接”或“软链接”,符号链接是非常小的文件。事实上,符号链接真正包含的是它指向的文件的名称,通常包括路径(相对于当前位置或绝对)。如果有一个名为ref1的文件指向名为/apps/refs/ref-2020的文件,那么即使ref-202文件为2TB,ref1的长度也将为19个字符。如果指向./ref-2020,它只有10个字符长。如果指向ref-2020,则只有8个字节。如果您执行类似viref1的命令(其中ref1是符号链接的名称),您将编辑ref1指向的文件,而不是符号链接本身的内容。Linux系统知道如何使用符号链接并做正确的事情。同样,如果您使用cat、more、head或tail等命令,将查看引用文件的内容。另一方面,如果删除符号链接,则删除的是链接,而不是引用的文件。同样,Linux知道如何去做。符号链接使使用和共享文件变得更加容易,仅此而已。损坏的符号链接当符号链接指向的文件从系统中删除或重命名时,符号链接将不再有效。符号链接只不过是存储在特定目录中的引用,它不会随着指向它的文件的更改而更新或删除。它始终指向引用的文件,即使该文件早已不复存在。如果你尝试使用一个不存在的文件的符号链接,你会得到这样的错误:$tailwhassuptail:cannotopen'whassup'forreading:Nosuchfileordirectory本身(是的,奇怪的事情发生了),你会看到类似这样的东西:$catloopycat:loopy:Toomanylevelsofsymboliclinks$ls-lloopylrwxrwxrwx1shsshs5May2818:07loopy->loopyAnd,if(上面一长串的第一个字母)没有引起你的注意,这表明该文件是一个符号链接。rwxrwxrwx权限是标准的,不反映符号链接指向的文件的权限。查找损坏的符号链接查找命令有一个选项,可让您查找指向不再存在的文件的符号链接。此命令列出当前目录中的符号链接:$find。-typell(小写L)告诉find命令查找符号链接。另一方面,以下命令在当前目录中查找指向不存在文件的符号链接:$find.-xtypel为避免命令尝试查找您无权检查的文件或目录时出现错误,您可以将所有错误输出替换为/dev/null,如下所示:$find.-xtypel2>/dev/null您还可以使用此命令查找损坏的符号链接。它比前一个长,但做同样的事情:$find。-类型l!-执行测试-e{}\;-print2>/dev/null如何处理损坏的符号链接除非你知道符号链接被引用的文件被替换,否则最好的方法就是简单地删除损坏的链接。如果需要,您实际上可以使用单个命令查找和删除损坏的符号链接,例如:$find。-xtypel2>/dev/null-execrm{}\;命令的rm{}部分变为“删除文件”命令如果要将符号链接与不同的文件相关联,必须首先删除符号链接,然后重新创建它以使其指向新文件。下面是一个示例:$rmref1$ln-s/apps/data/newfileref1摘要符号链接使引用的文件更易于查找和使用,但有时它可能比去年关闭的广告餐厅的路标走得太远。find命令可以帮助您摆脱损坏的符号链接,或提醒您丢失可能仍然需要的文件。