程序文件存在于/usr/bin中,但无法使用

Jor*_*rik 15 linux unix filesystems file-permissions

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

$ ls /usr/bin/ngrok
/usr/bin/ngrok
Run Code Online (Sandbox Code Playgroud)

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

$ sudo chown my_user:users /usr/bin/ngrok
chown: cannot dereference '/usr/bin/ngrok': No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

$ ngrok
bash: ngrok: command not found
$ sudo /usr/bin/ngrok
sudo: /usr/bin/ngrok: command not found
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Sve*_*ven 52

/usr/bin/ngrok将是一个无处指向的符号链接(或者更确切地说是指向不存在的文件)。与ls -l.

  • “无法取消引用”错误在这里是致命的赠品。您不会“取消引用”普通文件,而是打开它。 (13认同)

mur*_*uru 5

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

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

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