在某些情况下二进制文件权限被拒绝错误

在某些情况下二进制文件权限被拒绝错误

我的机器上有一个二进制文件,最后变成了一种非常奇怪的状态,我不知道它到底出了什么问题。我已经用尽了我所知道的所有诊断方法(包括一些我从谷歌搜索中找到的新方法),所以我想我会在这里征求建议,希望能学到一些东西!

有问题的二进制文件是flutter(尽管我认为这不是特别相关)。它位于我的机器上/home/alyssa/.local/bin/flutter/bin/flutter。我的$PATH包含~/.local/bin/flutter/bin- 这是通过注入的.bashrc

症状

  • 从终端,我可以flutter --version无错误地运行。
  • which flutter没有返回任何输出并且退出代码 1。
  • type flutter如预期般返回flutter is /home/alyssa/.local/bin/flutter/bin/flutter
  • whereis flutter返回flutter: /home/alyssa/.local/bin/flutter
  • 但是,某些子进程无法运行 Flutter 命令,并出现权限错误。最简单的复制方法是通过 python3 的子进程:
$ python3 -c "import subprocess; subprocess.run(['flutter', '--version'])"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.6/subprocess.py", line 423, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: 'flutter'

我看过的东西

  • 我已经python3为其他几个二进制文件运行了该配方并且它按预期工作(打印版本时没有错误)。
  • 我通过相同的方法运行了和env,并与我的原始终端进行比较,输出都相同。因此,我相信启动的子进程是以相同的用户身份使用相同的 运行的,因此应该不会有问题。whoamiwhereispython3$PATH
  • 为了以防万一,我做了一个find . -name 'flutter' -type f- 这没有发现我的文件系统上有任何其他二进制文件。
  • namei -olm ~/.local/bin/flutter/bin/flutter表明所有相关文件/文件夹的权限均正常:
$ namei -olm ~/.local/bin/flutter/bin/flutter
f: /home/alyssa/.local/bin/flutter/bin/flutter
drwxr-xr-x root   root   /
drwxr-xr-x root   root   home
drwxr-xr-x alyssa alyssa alyssa
drwxr-xr-x alyssa alyssa .local
drwxr-xr-x alyssa alyssa bin
drwxr-xr-x alyssa alyssa flutter
drwxr-xr-x alyssa alyssa bin
-rwxr-xr-x alyssa alyssa flutter
  • 我确实认为有一点不同,那就是子进程没有使用 运行/bin/bash。我相信这一点是因为我无法type flutter使用该配方运行 - 它找不到,type因为那是 bash 内置的。但这并没有给我根本原因 - 一定是文件或我的什么地方出了问题,$PATH或者真正的问题是什么。

版本

  • 操作系统:Ubuntu 18.04.6 LTS
  • Bash:GNU bash,版本 4.4.20(1)-release(x86_64-pc-linux-gnu)
  • Python:3.6.9

如果您对其他诊断/我可以尝试的方法有任何建议,我将不胜感激!

相关内容