如何找到符号链接执行的命令?

如何找到符号链接执行的命令?

在我的系统中的某个地方(问题是我不知道在哪里)我有一个符号链接,该链接具有优先级,bash但该链接已损坏,因此它不起作用。

进一步来说:

  • 当前目录:mysymlink
  • 路径中的某处(由包安装):mysymlink

从当前目录运行时,会调用文件系统中某处的mysymlink(损坏的)符号链接。mysymlink

我正在尝试找到该符号链接,将其删除,以便我可以使用当前目录中的符号链接。

我如何找到它?

(编辑)具体例子

命令-v testcafe

/usr/local/bin/testcafe

ls -l /usr/local/bin/testcafe

ls: 无法访问 /usr/local/bin/testcafe: 没有这样的文件或目录

(笔记:我删除了自己的目标路径因为失误)

如何删除此符号链接(系统中的某个位置)?

答案1

command -v UTILITY将向您显示如果您发出命令,shell 将尝试执行的内容UTILITY

既然报道了

/usr/local/bin/testcafe

但是之后

ls: cannot access /usr/local/bin/testcafe: No such file or directory

当您尝试ls -l这样做时,它让我相信该testcafe实用程序的报告位置已被外壳缓存,并已被删除。

要刷新 shell 的缓存,请使用hash -r(此命令不输出任何内容)。这将刷新缓存,然后 shell 将在您下次运行时执行完整路径查找testcafe

答案2

也许你应该尝试(假设ls不是别名;如果是则替换为/bin/ls)

ls -l $(which mysymlink)

因为which mysymlink给出了命令的完整路径mysymlink(即使用扩展$PATH多变的

你需要尝试这个命令外部包含mysymlink.

顺便说一句,它看起来像是.在你的$PATH.您可以使用 进行检查echo $PATH。并且将当前目录放在您的目录中$PATH可能会带来安全风险。

ls:无法访问/usr/local/bin/testcafe:没有这样的文件或目录

然后检查ls -dl /usr/ /usr/local/ /usr/local/bin/其中哪些目录不存在(也许您忘记了某些文件系统,或者您以 root 身份错误地删除了其中一些目录)。

当然也做一个ls -l /usr/local/bin/testcafe

(你应该尝试使用/bin/ls而不是ls因为我猜你ls是别名或重新定义)

如何删除此符号链接(系统中的某个位置)?

你需要首先找到它。使用查找(1)适当地(可能与-lname

答案3

要在 中的所有目录中查找损坏的符号链接PATH,请使用bash

IFS=: read -ra dirs <<<"$PATH"
find -L "${dirs[@]}" -type l -maxdepth 1

添加-deletefind以删除它们。

相关内容