程序文件位于/ usr / bin中,但不能使用


15

显然我的文件存在于 /usr/bin

$ ls /usr/bin/ngrok
/usr/bin/ngrok

但是,当我尝试chown它时,我收到一个错误

$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory

进一步尝试运行它也会失败!

$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found

这是怎么回事


如果“ / usr / bin /”不在您的PATH中,第三点也可能发生。您应该已经测试过,/usr/bin/ngrok以与下列情况完全对称sudo
Patrick Mevzek '18

Answers:


52

/usr/bin/ngrok将是指向无处的符号链接(或指向不存在的文件)。用检查ls -l


13
“无法取消引用”错误是此处已死的放弃。您不“取消引用”普通文件,而是打开它。
凯文

1
readlink -f /usr/bin/ngrok查找链接应指向的位置。
埃里克·杜米尼尔

namei -l /usr/bin/ngrok
hanshenrik

4

鉴于chown错误,最有可能的是它是一个符号链接,正如Sven回答的那样。但是,仅作为参考,以防有人在文件存在但不是链接但出现命令未找到/文件未找到错误的情况下结束此处,还有一种可能性是可执行文件是动态链接的,由于某些原因,它无法加载库:

  • 缺少库(ldd在二进制文件上运行以查看那些库)
  • 缺少装载机
  • Apparmor拒绝访问库或加载程序
  • ...

另外,对于脚本,如果出于类似原因而无法执行shebang中的解释器,则将得到相同的错误。


更令人困惑的是,这的确可以导致一个神秘的“没有这样的文件或目录”。
rackandboneman

0

您还可以选择更改符号链接本身的所有权

chown -h my_user:users /usr/bin/ngrok

如果您不希望(或没有许可)更改目标文件的所有权。


2
我不确定这如何回答问题-问题是“这里发生了什么?” 问题是目标文件不存在。这不能解决问题,也不能回答问题。
wizzwizz4

1
@ wizzwizz4我想您也可以将问题解释为“文件确实存在(符号链接是文件),为什么它告诉我否则我为什么不能更改其所有权?” 这个答案涵盖了这种解释。Sven仅假设(可能正确)假设OP希望使用目标文件。
JoL

1
@muru 这不适用于没有符号链接许可权的Linux系统。 其实,Linux是为数不多的一个(也是唯一)指出POSIX的系列操作系统有能力来设定的符号链接所有者/组。请参见Linux chown(1)手册页unix.stackexchange.com/questions/33180/…
Andrew Henle,

2
@AndrewHenle,这有什么帮助?更改符号链接的所有者/组在这里没有区别,因为执行时所应用的权限始终是目标文件的权限。因此,您可以拥有任何人拥有的链接,但是更改该链接的所有权对执行链接时所考虑的权限完全没有影响。
muru

1
@muru ,这有什么帮助?阅读我已经链接的问题,因为它专门询问:“在linux中,可以更改符号链接(symlink)的所有者或组所有者。我想知道为什么有人想要这样做,因为符号链接的权限不通过文件访问文件时使用 “”
Andrew Henle
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.