为什么 find 命令会在 /run/ 中爆炸?

abd*_*yum 13 permissions find

我使用以下命令来检查此答案给出的 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'
Run Code Online (Sandbox Code Playgroud)

错误:

find: ‘/run/user/1000/gvfs’: Permission denied
Run Code Online (Sandbox Code Playgroud)

Zan*_*nna 20

权限:

$ stat -c %a /run/user/1000/gvfs
500
Run Code Online (Sandbox Code Playgroud)

所以只有所有者有执行权限(允许搜索目录)。但是,您使用过sudo并且 root 拥有所有可能的权限,对吗?其实你发现了异常:

这个答案吉尔斯在Unix和Linux SE解释了为什么权限被拒绝根该目录中,这是一个FUSE挂载点:

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

如果您在find没有sudo(作为您自己的用户,UID 1000)的情况下运行命令,您将不会收到该错误,因为您拥有该目录,但您会收到其他权限错误,因此,请使用sudo并接受 Gilles 的建议:

如果您仅在本地文件系统上搜索文件,请通过 -xdev 进行查找。


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

$ python --version
Python 2.7.12+
$ python3 --version
Python 3.5.2+
Run Code Online (Sandbox Code Playgroud)

  • @abdulqayyum 你确定吗?默认情况下,ubuntu 有相当多的用户与各种守护进程相关联。所以是的,他们无法登录,也没有主目录,但*他们存在*并且可以拥有文件和目录...... (2认同)

小智 7

有多种方法可以找到您拥有的 Python 版本。您可以通过以下两种方式获得 Python 2 和 Python 3 版本:

特定于 Python

首先运行pythonpython3选择--version

$ python --version
Python 2.7.12
$ python3 --version
Python 3.5.2
Run Code Online (Sandbox Code Playgroud)

这是特定于 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 
Run Code Online (Sandbox Code Playgroud)

作为一个额外的花絮。如果您想查找名称以 开头的所有包python,您可以使用通配符,*如下所示:

$ dpkg -l 'python*'
Run Code Online (Sandbox Code Playgroud)

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