为什么 find 命令在 /run/ 中崩溃了?

为什么 find 命令在 /run/ 中崩溃了?

我使用以下命令检查 Python 版本这个答案。除了下面显示的一个错误外,它确实有效。有人能解释一下原因吗?

$ sudo find / -type f -executable -iname 'python*' -exec file -i '{}' \; \
    | awk -F: '/x-executable; charset=binary/ {print $1}' \
    | xargs readlink -f | sort -u | xargs -I % sh -c 'echo -n "%: "; % -V'

错误:

find: ‘/run/user/1000/gvfs’: Permission denied

答案1

权限:

$ stat -c %a /run/user/1000/gvfs
500

因此只有所有者才具有执行权限(允许搜索目录)。但是,您使用了sudoroot,并且 root 拥有所有可能的权限,对吗?实际上,您发现了例外:

这个答案经过吉尔斯在 Unix 和 Linux SE 上解释了为什么拒绝 root 对该目录的权限,该目录是 FUSE 的挂载点:

使用 FUSE 文件系统管理信任边界很困难,因为文件系统驱动程序以非特权用户身份运行,而传统文件系统则以内核代码运行。为了避免复杂化,默认情况下,只有运行驱动程序进程的用户才能访问 FUSE 文件系统。即使是 root 也无法绕过此限制。

如果您find不以(作为您自己的用户,UID 1000)的身份运行该命令sudo,您将不会收到该错误,因为您拥有该目录,但您会收到其他权限错误,因此,请使用sudo并采纳 Gilles 的建议:

如果您仅在本地文件系统上搜索文件,请传递 -xdev 来查找。


检查python版本的最简单方法:

$ python --version
Python 2.7.12+
$ python3 --version
Python 3.5.2+

答案2

有几种方法可以找到你拥有的 Python 版本。以下是两种获取 Python 2 和 Python 3 版本的方法:

Python 具体内容

首先运行pythonpython3选择--version

$ python --version
Python 2.7.12
$ python3 --version
Python 3.5.2

这是针对 python 特有的,但许多其他程序也使用类似的方法。

适用于任何包/程序

更通用的方法是查看安装了哪些包。dpkg -l将列出所有包,但您可以指定要查找的包。对于 python 和 python3,请使用以下命令:

$ dpkg -l 'python'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                  Version         Architecture    Description
+++-=====================-===============-===============-================================================
ii  python                2.7.11-1        amd64           interactive high-level object-oriented language 
$ dpkg -l 'python3'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                  Version         Architecture    Description
+++-=====================-===============-===============-================================================
ii  python3               3.5.1-3         amd64           interactive high-level object-oriented language 

额外提示:如果您想要查找所有名称以 开头的包python,可以使用通配符,*如下所示:

$ dpkg -l 'python*'

这将打印很多带有包的行。

相关内容