Ich habe an vielen Stellen gesehen, install -d
wie man Verzeichnisse erstellt und install -c
eine Datei kopiert. Warum nicht mkdir
und verwenden cp
? Gibt es einen Vorteil bei der Verwendung install
?
Ich habe an vielen Stellen gesehen, install -d
wie man Verzeichnisse erstellt und install -c
eine Datei kopiert. Warum nicht mkdir
und verwenden cp
? Gibt es einen Vorteil bei der Verwendung install
?
Antworten:
Es hängt davon ab, was Sie tun.
Der install
Befehl wird normalerweise in Installationsskripten verwendet, die mit Paketen und Quellcode zum Installieren einer Binärdatei auf Ihrem System geliefert werden. Es kann auch verwendet werden, um andere Dateien oder Verzeichnisse zu installieren. Zusätzlich zu den Optionen -d
und -c
haben Sie die Möglichkeit -m
, die neuen Berechtigungen der zu installierenden Datei anzugeben, damit Sie nicht die Schritte a cp
und a chmod
ausführen müssen, um das gleiche Ergebnis zu erzielen. Zum Beispiel:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Sie haben auch Optionen -g
und -o
zum Festlegen der Zielgruppe bzw. des Eigentümers. Dies vermeidet separate Anrufe an chown
. Im Allgemeinen install
verkürzt die Verwendung Ihres Skripts die Länge und macht es übersichtlicher, indem Sie die Erstellung, das Kopieren, die Einstellung des Modus und verwandte Dinge in einem Befehl statt in vielen Befehlen ausführen.
Referenz siehe man install
. Schauen Sie sich zur Verwendung einfach ein Installationsskript an, das mit einem Paketquellcode geliefert wurde .
"install" kombiniert im Allgemeinen die folgenden Aktionen:
Es folgt also dem Unix-Ansatz, dass ein Tool für eine einzelne, aber vollständige Aktion zum Installieren einer Datei erstellt werden soll, die von einem bestimmten Build-Tool an seinem Arbeitsspeicherort erstellt wurde.
Das von mir beschriebene Gesamtkonzept ist in BSD-Systemen implementiert (in der sogenannten "xinstall" -Version); Ich betrachte hier den "Safe Copy" -Modus (neue Version mit atomarer Umbenennung) als unerlässlich. Linux-Systeme (von coreutils) übersehen diesen wichtigen Teil und neigen dazu, zwischen dem Löschen und dem erneuten Öffnen durch einen Zuschauerprozess hin und her zu rennen. Dies hätte jedoch von Paketmanagern abgedeckt werden können.
Abgesehen von den vorherigen Beschreibungen zur Verwendung gibt es einen geringen Unterschied zwischen cp
und install
, zumindest unter Linux. Beim Kopieren über eine vorhandene Datei wird cp
der vorhandene Inode der Datei überschrieben, während install
immer ein neuer Inode mit demselben Dateinamen erstellt wird.
Dies macht einen Unterschied, wenn eine neue Version einer laufenden Binärdatei installiert wird. Die Verwendung cp
verursacht einen EBUSY-Fehler, der install
jedoch erfolgreich ist. Die ausgeführte Binärdatei verwendet weiterhin die alte Version, die neue Version wird jedoch verwendet, wenn das Programm neu gestartet wird.
Wenn das betreffende Verzeichnis bereits existiert:
mkdir -p
wird versuchen, die Besitz- und Dateimodusbits zu setzeninstall -d
wird nicht versuchen, die Besitz- und Dateimodusbits zu setzenDies ist für mkdir
und install
von GNU Coreutils . Beide verwenden die gleiche make_dir_parents
Funktion, wobei jedoch der preserve_existing
Parameter auf false
bzw. gesetzt true
wird.
install
oder$(INSTALL)
in Makefiles kennzeichnet diese Schritte auch als Installationskopierschritte und nicht als gewöhnliche Kopierschritte. Das könnte nützlich sein.