在我的系统中的某个地方(问题是我不知道在哪里)我有一个符号链接,该链接具有优先级,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
添加-delete
到find
以删除它们。