Jak poznać ścieżkę konkretnego oprogramowania?

13

Kontekst: Próbuję uruchomić aplikację automatycznie po zalogowaniu. W tym celu muszę wybrać pathdla aplikacji.

wprowadź opis zdjęcia tutaj

Oto ścieżki, na które już spojrzałem:

  • /sbin
  • /usr/sbin
  • /usr/local/bin
  • /usr/share/

Jeśli to może pomóc, aplikacja, którą próbuję znaleźć, nazywa się „ ScreenCloud ” i pobrałem ją z Centrum oprogramowania Ubuntu.

Ale nie mogę go znaleźć, czy mogę wiedzieć, gdzie jest zainstalowane określone oprogramowanie? Ponieważ nawet gdybym go znalazł, chciałbym uniknąć tego samego problemu w przyszłości.

Ced
źródło
2
Czy to nie działa, jeśli po prostu wpiszesz screencloud w wierszu poleceń?
Graham
Czy dostałeś go ze sklepu z przystawkami lub z centrum oprogramowania Ubuntu, ponieważ nie mogę go znaleźć w żadnym repozytorium Ubuntu apt.
mchid
2
@mchid Nie odniosłem się do linku OP, ale raczej do twojego komentarza: „ponieważ nie mogę go znaleźć w żadnym repozytorium Ubuntu apt” Screencloud można zainstalować z .debpakietu, ale musisz dodać PPA.
WinEunuuchs2Unix
1
@mchid Wiedziałem, że polecenie zostało zmienione z screencloud.shna screencloudi podejrzewałem, że zostało przeniesione /opt. Ta część mojej odpowiedzi wskazywała, jak typei whichnie mogę znaleźć, screencloudale locatechciałbym.
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix Zaraz. screencloud.shfaktycznie nadal istnieje, ale nie jestem pewien, czym różni się od screencloudtego, że .shplik jest skryptem i screencloudnie ma go. Naprawdę nie znam tej aplikacji. Poniżej /usr/bin/znajduje się screenclouda screencloud.sh, a także screencloud-następujący po nim numer wersji, taki jak gimp.
mchid

Odpowiedzi:

16

Znajdź ścieżkę do pliku wykonywalnego

Najlepszym sposobem

  • type executable

Sprawdź to pytanie, aby dowiedzieć się więcej o tym, jak typelepiej. (Dzięki, komentarze!)

Inaczej

  • whereis executable
  • which executable

Te polecenia przeszukują tylko zmienną PATH ( echo $PATH), dlatego nie są poprawne w niektórych przypadkach (funkcje wbudowane, aliasy lub funkcje bash i więcej).

Biggybi
źródło
3
co niewiarygodne, nie było to jeszcze pytanie na pytanie Ubuntu. dobre pytanie @Ced!
tatsu
Rzeczywiście, trudno mi w to uwierzyć!
Biggybi
1
Dowiedziałem się z innego pytania, które typejest preferowane, whichponieważ jest wbudowane w powłokę i może określić, czy polecenie jest aliasem. To też było dla mnie nowe!
Arroniczny
1
Zobacz (długie) wyjaśnienie, dlaczego typepreferowane: dlaczego nie użyć „które”? Czego więc użyć?
terdon
1
@mchid wszystkie punkty w odpowiedzi mają zastosowanie. Zawiera sekcję „Use Cases”, która wskazuje, że whichjest to rzeczywiście przydatne w konkretnym kontekście skryptów powłoki. Poza tym kontekstem jest jednak typeprawie zawsze lepszym wyborem.
terdon
1

Znajdź lokalizację polecenia wewnątrz lub na zewnątrz ścieżki

Załóżmy, że chcesz znaleźć lokalizację unameprogramu wyświetlającego informacje o systemie. Jeśli chcesz wiedzieć, w którym katalogu jest przechowywane polecenie najwyższego poziomu, masz wiele opcji:

$ which uname
/bin/uname

$ type -a uname
uname is /bin/uname

$ command -v uname
/bin/uname

$ locate uname
/bin/uname
    (... SNIP dozens of Windows files on C & D ...)
/usr/lib/klibc/bin/uname
/usr/lib/plainbox-provider-resource-generic/bin/uname_resource
/usr/share/man/man1/uname.1.gz
/usr/share/man/man2/oldolduname.2.gz
/usr/share/man/man2/olduname.2.gz
/usr/share/man/man2/uname.2.gz

Znajdź zalety

Ostatnia opcja locatezwraca wszystkie pliki zawierające unamenie tylko program uruchamiany z wiersza polecenia.

Zaletą locatejest to, że znajdzie polecenia spoza twojej ścieżki wyszukiwania. type -a(preferowane zamiast prostych type) i whichznajdzie tylko polecenia na ścieżce wyszukiwania. Aby zobaczyć swoją ścieżkę wyszukiwania, użyj echo $PATH.

Weźmy na przykład tę odpowiedź w Jak uruchomić screencloud? :

Próbować...

/opt/screencloud/screencloud.sh

locate screencloudKomenda będzie go znaleźć, ale which screencloudi type -a screencloudnie będzie, ponieważ:

  • Pełna nazwa to screencloud.shtylko locatewyszukiwanie komendy przy częściowym dopasowaniu.
  • /opt/screencloudprawdopodobnie nie znajduje się na ścieżce wyszukiwania. whichi typeszukaj tylko plików wykonywalnych w ścieżce wyszukiwania.

Uwaga: to jest starsza odpowiedź. Modern ScreenCloud jest wywoływany z screencloud.

Zaletą lokalizowania nad findpoleceniem jest to, że może być setki, a nawet tysiące razy szybsze. Również uruchomienie findod zera /spowoduje wiele błędów uprawnień, z którymi się nie spotkasz locate.

Znajdź wady

Jeśli właśnie zainstalowałeś program dzisiaj, będziesz musiał użyć go sudo updatedbdo aktualizacji bazy danych lokalizatora.

WinEunuuchs2Unix
źródło
1

Użyj następującego polecenia, aby wyświetlić listę wszystkich $PATHkatalogów:

echo $PATH | sed 's/:/\n/g'

Użyj następującego polecenia, aby znaleźć pełną ścieżkę dla screencloud:

for i in $(echo $PATH | sed 's/:/\n/g'); do find $i/screencloud* 2>@1; done

Jeśli użyłeś apt, apt-getlub Centrum Oprogramowania Ubuntu do zainstalowania pakietu, możesz użyć następującego polecenia, aby znaleźć pełną ścieżkę:

dpkg -L screencloud | grep bin

Zakładając, że używana tego repozytorium , powinieneś być w stanie znaleźć screencloud w /usr/bin/.

Pełna ścieżka to:

/usr/bin/screencloud

lub

/usr/bin/screencloud-*

Jeśli jednak korzystasz ze sklepu snapcraft zgodnie z linkiem podanym w pytaniu, ścieżka będzie znajdować się w następującym katalogu:

/snap/bin

więcej informacji

Pamiętaj również, że w Ubuntu rozróżniana jest wielkość liter, więc musisz używać małych liter bez wielkich liter.

mchid
źródło
Dziękuję za tę bardzo szczegółową odpowiedź, wygrałeś głos pozytywny :)
Ced
1
To było skutecznie pod /snap/bin!
Ced