Erstellen eines Programms in bin

8

Ich habe verlinkt und ein Programm in C ++ erstellt, das ich jetzt habe

foobar.out

Ich möchte in der Lage sein, es in das bin-Verzeichnis zu stellen und es wie systemweite Befehle zu verwenden, z

ssh, echo, bash, cd...

Wie kann ich das erreichen?

NullOverFlow
quelle
2
Normalerweise würde man es einfach nennen foobar, nicht foobar.out. (zB gcc -Wall -O3 -march=native foobar.c -o foobar). a.outist der Standardname, aber nehmen Sie das nicht als Beispiel.
Peter Cordes

Antworten:

25

Es gibt zwei Möglichkeiten, wie Sie die Binärdatei ausführen können, ohne ihren Pfad anzugeben (ohne das Erstellen von Aliasen oder Shell-Funktionen, um sie mit einem absoluten Pfad für Sie auszuführen):

  1. Kopieren Sie es in ein Verzeichnis, das sich in Ihrem befindet $PATH.
  2. Fügen Sie das Verzeichnis, in dem es sich befindet, zu Ihrem Verzeichnis hinzu $PATH.

Um die Datei beispielsweise in ein Verzeichnis in Ihrem Pfad zu kopieren /usr/local/bin( wohin lokal verwaltete Software gehen soll ), müssen Sie über Superuser-Berechtigungen verfügen. Dies bedeutet normalerweise, dass Sie Folgendes verwenden sudo:

$ sudo cp -i mybinary /usr/local/bin

Es muss darauf geachtet werden, keine vorhandenen Dateien im Zielverzeichnis zu überschreiben (aus diesem Grund habe ich -ihier hinzugefügt ).


Um ein Verzeichnis zu Ihrem $PATHhinzuzufügen, fügen Sie eine Zeile in Ihre ~/.bashrcDatei ein (falls Sie verwenden bash):

PATH="$HOME/bin:$PATH"

... wenn die Binärdatei in ist $HOME/bin.

Dies hat den Vorteil, dass Sie keine Superuser-Berechtigungen benötigen oder etwas im Basissystem Ihres Computers ändern / hinzufügen müssen. Sie müssen nur die Binärdatei in das binVerzeichnis Ihres Home-Verzeichnisses verschieben.

Beachten Sie, dass Änderungen an .bashrcwirksam werden, wenn die Datei das nächste Mal bezogen wird. Dies geschieht, wenn Sie ein neues Terminal öffnen oder sich abmelden und erneut anmelden oder source ~/.bashrcmanuell ausführen .

Kusalananda
quelle
Ein weiterer Punkt ist, dass Verzeichnisse im PATH der Reihe nach durchsucht werden: Wenn Ihr Programm mit dem angegebenen neuen PATH denselben Namen wie eines in früheren Verzeichnissen hat, wird das System dieses weiterhin finden und ausführen. Sie können entweder PATH so ändern, dass $ HOME / bin früher ist, oder einen Alias ​​für Ihr neues Programm verwenden.
Jamesqf
@jamesqf Ich habe die Reihenfolge geändert. Persönliche Binärdateien werden fast immer mit Vorrang vor Binärdateien des Basissystems gewünscht.
Kusalananda
Am besten behalten Sie es in einem eigenen Verzeichnis und verknüpfen es mit einem der PATH-Verzeichnisse
Fez Vrasta
@Kusalananda: Oder "source your_shell's_rc_file", da nicht jeder Bash verwendet.
Jamesqf
installist schön; Dadurch befindet sich das Skript im Root-Besitz. (Theoretisch könnte jemand, der Ihr Konto knackt, es nicht vermasseln. Zumindest nicht, bis er das nächste Mal Root-Privilegien erhält, wenn Sie manuell sudo oder so ...)
Peter Cordes
10

Sie sollten mehr über die Variable PATH lesen . Ich vermute sehr, dass Sie es angemessen verwenden (oder ändern) sollten.

Ich möchte es in das bin-Verzeichnis stellen können

Ich denke du meinst /bin/ oder /usr/bin/. Ich bin mir nicht sicher, ob es sinnvoll ist, dort eigene Programme hinzuzufügen. Vielleicht ist es besser, einen Symlink in sie einzufügen (z. B. mit so etwas wie ln -sv $(realpath foobar.out) /usr/bin/), wenn Sie unbedingt möchten, dass Ihr Programm dort angezeigt wird (was meiner Meinung nach wahrscheinlich ein Fehler ist, da Sie den Paketmanager Ihrer Distribution durcheinander bringen ).

Wahrscheinlich ist die Installation Ihres Programms in /usr/local/bin/ viel klüger (beides /bin/und /usr/bin/intakt zu lassen, wie von Ihrer Linux-Distribution bereitgestellt und verwaltet ). Siehe LSB und mehr über die lesen Datei Hierarchy Standard .

... wie systemweite Befehle zB .... cd

Dies ist ein starkes Missverständnis Ihres Teils (in der ursprünglichen Variante Ihrer Frage haben Sie cdspäter zu Recht entfernt ). cd ist keine ausführbare Datei und kann keine ausführbare Datei sein . Sie ist (und muss) ein integrierter Befehl Ihrer Shell.

Vielleicht möchten Sie die frei herunterladbare erweiterte Linux-Programmierung lesen, um zu verstehen, warum cdkeine ausführbare Datei sein kann (das aktuelle Arbeitsverzeichnis ist Teil des Status jedes Prozesses, und jeder Prozess hat ein eigenes und kann es mit chdir (2) ändern . .)

Basile Starynkevitch
quelle
7
install /path/to/oobar.out /usr/local/bin/
Hauke ​​Laging
quelle
4

Kopieren Sie Ihre ausführbare Datei nach /usr/bin/, Sie sollten sie dann wie echoeine andere ausführbare Datei ausführen können/usr/bin/

cp -a <filename> /usr/bin/
chmod a+x /usr/bin/filename
Hunter.S.Thompson
quelle
2
wow einfach so! Linux ist wirklich großartig, danke!
NullOverFlow
4
In der Praxis ist das ein schlechter Rat. Meine Antwort erklärt warum.
Basile Starynkevitch
4

Ich würde die akzeptierte Antwort von @Kusalananda ergänzen. Ein weiterer Vorteil beim Platzieren Ihrer selbst gebrauten Skripte und Programme in $ HOME / bin besteht darin, dass Sie beim Upgrade Ihres Systems diese nicht verlieren. Dies ist eine bessere Möglichkeit, Ihre persönliche Toolbox zu verwalten und sie portabler zu machen.

Terry Wendt
quelle
/usr/local/binist auch eine gute Wahl, je nachdem, ob es sich um ein Skript handelt, das nur Sie verwenden würden oder nicht. Ich behalte (Teile von) meinem / usr / local bei Neuinstallationen.
Peter Cordes