我使用以下命令检查 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
因此只有所有者才具有执行权限(允许搜索目录)。但是,您使用了sudo
root,并且 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 具体内容
首先运行python
并python3
选择--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*'
这将打印很多带有包的行。