Find komutu neden / run / dizininde patlar?


13

Bu cevap tarafından verilen python sürümlerini kontrol etmek için aşağıdaki komutu kullandım . Aşağıda gösterilen bir hata dışında çalışır. Herhangi biri nedenini açıklayabilir mi?

$ 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'

Hata:

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

2
python --versionve python3 --versionetkin sürümü göstermek için. Hepimizin bir 2.x sürümü ve bir 3.x sürümü var;)
Rinzwind

6
Ve hata normaldir ve komutla ilgili bir sorun değildir. /run/"find" a dahil edilmemelidir. gvfskullanıcının sahibi değil.
Rinzwind

1
Ayrıca pythonkonsolu yazıp sekme tuşuna iki kez bastığınızda, yolunuzdaki her çalıştırılabilir dosyayı gösterecektir python.
Timo

7
İyi keder insanlar. Soruda oldukça ağır bir düzenleme yapıyorum çünkü bazı insanlar ilk paragrafa girmeyi başaramadı. OP, hangi sürümlerin nasıl bulunacağını bilir, bu komutun ( Python'un tüm sürümlerini bulan ) belirli bir hatayı neden gizlediğiyle ilgili soru . Eğer hakkında python -Vve alternatifler göndermek istiyorsanız , lütfen bu bilgiyi gerçekten talep eden bir soruya götürün .
Oli

1
Sorudaki komutu çalıştırmak kötü bir fikirdir, sisteminizde adı python ile başlayan herhangi bir dosyayı bulur ve kök olarak yürütür . Kullanıcılarınız bu komutu kullandığınızı öğrenirse, onlara önemsiz bir kök sömürüsü verdiniz.
Peter Green

Yanıtlar:


20

İzinler:

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

Bu nedenle, yalnızca sahip yürütme iznine sahiptir (dizinlerin aranmasına izin verir). Ancak, kullandınız sudove root'un tüm izinleri var, değil mi? Aslında istisnayı buldunuz:

Bu cevap tarafından Gilles Unix ve Linux SE izni SİGORTA için mountpoint olan kökü bu dizin için engellendi açıklıyor:

FUSE dosya sistemleriyle güven sınırlarını yönetmek zordur, çünkü dosya sistemi sürücüsü geleneksel dosya sistemleri için çekirdek kodunun aksine ayrıcalıklı bir kullanıcı olarak çalışır. Komplikasyonları önlemek için, varsayılan olarak FUSE dosya sistemlerine yalnızca sürücü işlemini çalıştıran kullanıcı erişebilir. Kök bile bu kısıtlamayı atlayamaz.

findKomutu sudo(kendi kullanıcı olarak UID 1000) olmadan çalıştırırsanız, dizine sahip olduğunuz için bu hatayı almazsınız, ancak bunun yerine başka izin hataları alırsınız, bu nedenle sudoGilles'in tavsiyesini kullanın ve alın:

Yalnızca yerel dosya sistemlerinde bir dosya arıyorsanız bulmak için -xdev iletin.


Python sürümlerini kontrol etmenin en kolay yolu:

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

Kök dışında sadece bir kullanıcım var, o zaman kime sahip olmayı bekliyorsun?
abdul qayyum

1
Bu sizsiniz, UID 1000. Bu cddizine normal kullanıcı olarak yapabilirsiniz, ancak root olarak değil. Eğer findonsuz çalıştırırsanız sudobu hatayı görmezsiniz (ancak elbette diğer izin hatalarını alırsınız)
Zanna

2
@abdulqayyum Emin misin? Varsayılan olarak ubuntu'nun çeşitli daemon süreçleriyle ilişkili birkaç kullanıcısı vardır. Yani evet, onlar giriş yapabilirsiniz ve bir ev dizini yok ama onlar var ... ve dosyaları ve dizinleri sahip olabilirler
Bakuriu

7

Hangi python sürümüne sahip olduğunuzu bulmanın birkaç yolu vardır. Hem Python 2 hem de Python 3 sürümlerini almanın iki yolu:

Python'a Özel

İlk önce sadece çalıştırın pythonve python3seçeneği ile--version

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

Bu python için özeldir, ancak diğer birçok program benzer bir yöntem kullanır.

Herhangi bir paket / program için genel

Daha genel bir yöntem, hangi paketin kurulu olduğunu görmektir. dpkg -ltüm paketlerinizi listeler, ancak aradığınız paketleri belirleyebilirsiniz. Sadece python ve python3 için aşağıdakileri kullanın:

$ 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 

Fazladan bir titbit olarak. Başından itibaren adı olan tüm paketleri bulmak pythonistiyorsanız, joker karakteri aşağıdaki *gibi kullanabilirsiniz :

$ dpkg -l 'python*'

Bu paketlerle çok sayıda satır yazdıracaktır.


İyi Cevap ama yukarıdaki komut dosyası işe yarıyor. Ben sadece izin reddi konusunda endişeliydim
abdul qayyum

Çoğumuz stderr'ı geçici bir dosyaya yönlendiriyoruz. Çok sayıda tarama türü işlemi gerçekleşir.
mckenzm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.