Wie erkenne ich den Pfad einer bestimmten Software?

13

Kontext: Ich versuche, eine Anwendung automatisch zu starten, wenn ich mich anmelde. Dazu muss ich das pathfür die Anwendung auswählen .

Bildbeschreibung hier eingeben

Hier sind die Pfade, die ich bereits untersucht habe:

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

Wenn dies helfen kann, heißt die Anwendung, die ich suche, " ScreenCloud " und ich habe sie aus dem Ubuntu Software Center heruntergeladen.

Aber ich kann es nicht finden. Kann ich irgendwie wissen, wo eine bestimmte Software installiert ist? Denn selbst wenn ich dieses Problem gefunden hätte, würde ich es in Zukunft gerne vermeiden, dasselbe Problem zu haben.

Ced
quelle
2
Funktioniert es nicht, wenn Sie einfach screencloud in die Befehlszeile eingeben?
Graham
Haben Sie es aus dem Snap Store oder aus dem Ubuntu Software Center erhalten, weil ich es in keinem der Ubuntu Apt-Repositories finden kann?
mchid
2
@mchid Ich habe nicht den Link von OP angesprochen, sondern Ihren Kommentar: "Weil ich ihn in keinem der Ubuntu apt-Repositorys finde " Screencloud kann aus dem .debPaket installiert werden , aber Sie müssen PPA hinzufügen.
WinEunuuchs2Unix
1
@mchid Ich wusste, dass der Befehl von screencloud.shauf geändert wurde screencloudund vermutete, dass er entfernt wurde /opt. Dieser Teil meiner Antwort zeigte auf, wie typeund whichwürde nicht finden, screencloudaber locatewürde.
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix Direkt am. screencloud.shgibt es eigentlich immer noch, aber ich bin nicht sicher, wie es screencloudanders ist als die Tatsache, dass die .shDatei ein Skript ist und screencloudnicht. Ich bin wirklich nicht mit dieser Anwendung vertraut. Darunter /usr/bin/gibt es ein screencloud, ein screencloud.shund auch ein screencloud-gefolgt von der Versionsnummer sozusagen wie es gimpist.
20.

Antworten:

16

Finden Sie den Pfad einer ausführbaren Datei

Bester Weg

  • type executable

Auschecken diese Frage an, um mehr darüber zu erfahren, wie typees besser ist. (Danke, Kommentare!)

Andere Möglichkeiten

  • whereis executable
  • which executable

Diese Befehle suchen nur in der PATH-Variablen ( echo $PATH), daher sind sie in einigen Fällen nicht gültig (integrierte Funktionen, Aliase oder Bash-Funktionen und mehr).

Biggybi
quelle
3
Unglaublicherweise war dies noch keine Frage an ubuntu. gute frage @Ced!
Tatsu
Tatsächlich kann ich es kaum glauben!
Biggybi
1
Ich fand aus einer anderen Frage aus , die typeüber bevorzugt, whichda es eine Schale builtin ist und kann bestimmen , ob ein Befehl ein Alias ist. Das war mir auch neu!
Arronical
1
Hier finden Sie eine (lange) Erklärung, warum dies typebevorzugt wird: Warum nicht "welches" verwenden? Was ist dann zu verwenden?
Terdon
1
@mchid die Punkte in der Antwort alle zutreffen. Einschließlich des Abschnitts "Anwendungsfälle", in dem darauf hingewiesen wird, dass whichdies im speziellen Kontext von Shell-Skripten tatsächlich nützlich ist. Außerhalb dieses Kontextes ist jedoch typefast immer die bessere Wahl.
Terdon
1

Suchen Sie den Befehlsspeicherort innerhalb oder außerhalb des Pfads

Angenommen, Sie möchten den Speicherort unameeines Programms ermitteln, das Systeminformationen auflistet. Wenn Sie wissen möchten, in welchem ​​Verzeichnis der Befehl der obersten Ebene gespeichert ist, haben Sie eine Reihe von Optionen:

$ 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

Finde die Vorteile

Die letzte Option locategibt alle Dateien zurück, die unamenicht nur das Programm enthalten, das an der Eingabeaufforderung ausgeführt wird.

Der Vorteil locateist, dass Befehle gefunden werden, die sich nicht in Ihrem Suchpfad befinden. type -a(Bevorzugter als einfacher type) und whichfindet nur Befehle in Ihrem Suchpfad. Um Ihren Suchpfad anzuzeigen, verwenden Sieecho $PATH .

Nehmen Sie zum Beispiel diese Antwort in Wie starte ich screencloud? :

Versuchen...

/opt/screencloud/screencloud.sh

Der locate screencloudBefehl wird es aber finden which screencloudund type -a screencloudnicht weil:

  • Der vollständige Name lautet screencloud.shund der locateBefehl sucht nur bei teilweiser Übereinstimmung.
  • /opt/screencloudwahrscheinlich ist nicht im Suchpfad. whichund typenur nach ausführbaren Dateien im Suchpfad suchen.

Hinweis: Dies ist eine ältere Antwort. Moderne ScreenCloud heißt mit screencloud.

Der Vorteil von Locate gegenüber dem findBefehl ist, dass er hunderte oder sogar tausende Male schneller sein kann. Auch wenn Sie findab /ausführen, treten viele Berechtigungsfehler auf, mit denen Sie nicht konfrontiert sind locate.

Suche nach Nachteilen

Wenn Sie das Programm erst heute installiert haben, müssen Sie es sudo updatedbzum Aktualisieren der locate-Datenbank verwenden.

WinEunuuchs2Unix
quelle
1

Verwenden Sie den folgenden Befehl, um alle Ihre $PATHVerzeichnisse aufzulisten :

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

Verwenden Sie den folgenden Befehl, um den vollständigen Pfad zu finden screencloud:

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

Wenn Sie verwendet apt, apt-getoder das Ubuntu Software Center , das Paket zu installieren, können Sie den folgenden Befehl verwenden Sie den vollständigen Pfad zu finden:

dpkg -L screencloud | grep bin

Angenommen , Sie verwendet dieses Repository , sollten Sie in der Lage sein , zu finden screencloud in /usr/bin/.

Der vollständige Pfad lautet:

/usr/bin/screencloud

oder

/usr/bin/screencloud-*

Wenn Sie jedoch den Snapcraft-Shop gemäß dem in Ihrer Frage angegebenen Link verwenden , befindet sich der Pfad unter folgendem Verzeichnis:

/snap/bin

Mehr Info

Denken Sie auch daran, dass bei Ubuntu die Groß- und Kleinschreibung beachtet werden muss.

mchid
quelle
Vielen Dank für diese sehr ausführliche Antwort, Sie haben eine positive Bewertung erhalten :)
Ced
1
Es war effektiv unter /snap/bin!
Ced