Why does the find command blow up in /run/?
Solution 1
The permissions:
$ stat -c %a /run/user/1000/gvfs
500
So only the owner has execute permission (which allows directories to be searched). But, you used sudo
and root has all possible permissions, right? Actually you found the exception:
This answer by Gilles on Unix and Linux SE explains why permission is denied for root that directory, which is a mountpoint for FUSE:
Managing trust boundaries with FUSE filesystems is difficult, because the filesystem driver is running as an unprivileged user, as opposed to kernel code for traditional filesystems. To avoid complications, by default, FUSE filesystems are only accessible to the user running the driver process. Even root doesn't get to bypass this restriction.
If you run the find
command without sudo
(as your own user, UID 1000) you will not get that error, because you own the directory, but you will get other permission errors instead, so, use sudo
and take Gilles' advice:
If you're searching for a file on local filesystems only, pass -xdev to find.
Easiest way to check python versions:
$ python --version
Python 2.7.12+
$ python3 --version
Python 3.5.2+
Solution 2
There is several ways to find what version of python you have. Here are two ways you'll get both Python 2 and Python 3 versions:
Python Specific
First just run python
and python3
with the option --version
$ python --version
Python 2.7.12
$ python3 --version
Python 3.5.2
This is specific for python, but a lot of other programs use a similar method.
General for any package/program
A more general method is to see what package is installed. dpkg -l
will list out all your packages, but you can specify what packages you are looking for. For just python and python3 use the following:
$ 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
As an extra titbit. If you'd like to find all the packages that has a name starting with python
, you can use wildcard character *
like this:
$ dpkg -l 'python*'
That will print a lot of lines with packages.
Related videos on Youtube
abdul qayyum
Updated on September 18, 2022Comments
-
abdul qayyum almost 2 years
I used the following command to check python versions as given by this answer. It does work except for one error, shown below. Can any one explain why?
$ 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'
Error:
find: ‘/run/user/1000/gvfs’: Permission denied
-
Rinzwind over 7 years
python --version
andpython3 --version
to show the active version. We all have a 2.x version and the a 3.x version ;) -
Rinzwind over 7 yearsAnd the error is normal and not a problem with the command.
/run/
should not be included in "find".gvfs
is not owned by your user. -
Timo over 7 yearsYou can also type
python
in the console and press the tab key twice, it'll show every executable in your path starting withpython
. -
Oli over 7 yearsGood grief, people. I'm making a fairly hefty edit to the question because some people didn't manage to make it to the first paragraph. The OP knows how to find which versions, the question is about why this command (which finds all versions of Python) is chucking out a specific error. If you want to post about
python -V
and alternatives, please take it to to a question actually soliciting that information. -
Peter Green over 7 yearsRunning the command in the the question is a bad idea, it will find any file on your system whose name starts with python and execute it as root. If your users find out you use this command then you just handed them a trivial root-exploit.
-
marcelm over 7 years@PeterGreen That is false; the command will invoke the
file
utility on every executable it finds. It doesn't execute them. See the-exec file -i '{}' \;
. -
Demi over 7 years@marcelm you may need to change it to
-exec file -i -- '{}' \;
to fix a problem with filenames starting with-
. -
Demi over 7 years@PeterGreen there is an obvious shell injection (the argument to
xargs
injects user-controlled filenames into a shell command, since filenames can contain colons)
-
-
abdul qayyum over 7 yearsGood Answer but the script above does work. I was just concerned about permission denial
-
abdul qayyum over 7 yearsI have only one user except root then who do you expect to own it?
-
Zanna over 7 yearsIt's you, UID 1000. You can
cd
to that directory as your normal user, but not as root. If you runfind
withoutsudo
you will not see that error (but you will get other permission errors of course) -
Bakuriu over 7 years@abdulqayyum Are you sure? By default ubuntu has quite a few users associated with various daemon processes. So yes, they can't login and they don't have a home directory but they exist and can own files and directories...
-
mckenzm over 7 yearsMost of us just redirect stderr to a temp file. Happens for a lot of scan type operations.