Ich habe den install
gesehen Befehl, der in vielen Makefiles verwendet wird, und seine Existenz und Verwendung sind irgendwie verwirrend. Auf den Manpages sieht es aus wie eine Kopie von cp
mit weniger Funktionen, aber ich nehme an, es würde nicht verwendet werden, es sei denn, es hätte einen Vorteil gegenüber cp
. Was ist los?
Akzeptierte Antwort:
install
kopiert nicht nur Dateien, sondern ändert auch den Besitz und die Berechtigungen und entfernt optional Debugging-Symbole aus ausführbaren Dateien. Es kombiniert cp
mit chown
, chmod
und strip
. Es ist ein praktisches Tool auf höherer Ebene, das eine allgemeine Abfolge elementarer Aufgaben erfüllt.
Ein Vorteil von install
über cp
für die Installation von ausführbaren Dateien besteht darin, dass, wenn das Ziel bereits vorhanden ist, die Zieldatei entfernt und eine neue erstellt wird. Dadurch werden alle aktuellen Eigenschaften wie Zugriffskontrolllisten und Funktionen beseitigt, die sowohl als Vor- als auch als Nachteil angesehen werden können. Wenn ausführbare Dateien aktualisiert werden und Instanzen dieser ausführbaren Datei ausgeführt werden, werden diese unbeeinflusst weiter ausgeführt. Im Gegensatz dazu cp
aktualisiert die vorhandene Datei, falls vorhanden. Bei den meisten Unix-Varianten schlägt dies mit dem Fehler EBUSY¹ fehl, wenn das Ziel eine laufende ausführbare Datei ist; bei manchen kann es zum Absturz des Targets führen, weil es Codeabschnitte dynamisch lädt und das Modifizieren der Datei dazu führt, dass unsinniger Code geladen wird.
install
ist ein BSD-Befehl (hinzugefügt in 4.2BSD, also in den frühen 1980er Jahren). Es wurde nicht von POSIX übernommen.
¹ „Textdatei beschäftigt“. In diesem Zusammenhang bedeutet „Textdatei“ aus obskuren historischen Gründen „binäre ausführbare Datei“.