Почему находка управляет аварийным завершением в/, выполненном/?

Я использовал следующую команду для проверки версий 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
13
задан 13 April 2017 в 05:23

2 ответа

Полномочия:

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

Поэтому только владелец имеет, выполняют разрешение (который позволяет каталогам искаться). Но, Вы использовали sudo, и корень имеет все возможные полномочия, правильно? На самом деле Вы нашли исключение:

Этот ответ Gilles на Unix and Linux SE объясняет, почему разрешение отклонено для корня, что каталог, который является точкой монтирования для FUSE:

Управление доверяет границам файловые системы FUSE, является трудным, потому что драйвер файловой системы работает как непривилегированный пользователь, в противоположность коду ядра для традиционных файловых систем. Для предотвращения сложностей, по умолчанию, файловые системы FUSE только доступны для пользователя, выполняющего процесс драйвера. Даже корень не добирается для обхода этого ограничения.

, Если Вы работаете эти find команда без sudo (как Ваш собственный пользователь, UID 1000) Вы не получите ту ошибку, потому что Вы владеете каталогом, но Вы получите другие ошибки разрешения вместо этого, таким образом, используйте sudo и послушайте совет Gilles:

при поиске файла в локальных файловых системах только передайте-xdev для нахождения.

<час>

Самый Легкий способ проверить версии Python:

$ python --version
Python 2.7.12+
$ python3 --version
Python 3.5.2+
20
ответ дан 23 November 2019 в 03:14

Существует несколько способов найти, какую версию 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*'

, Который распечатает много строк с пакетами.

7
ответ дан 23 November 2019 в 03:14

Другие вопросы по тегам:

Похожие вопросы: