Ich habe an vielen Stellen gesehen, install -dwie man Verzeichnisse erstellt und install -ceine Datei kopiert. Warum nicht mkdirund verwenden cp? Gibt es einen Vorteil bei der Verwendung install?
Ich habe an vielen Stellen gesehen, install -dwie man Verzeichnisse erstellt und install -ceine Datei kopiert. Warum nicht mkdirund verwenden cp? Gibt es einen Vorteil bei der Verwendung install?
Antworten:
Es hängt davon ab, was Sie tun.
Der installBefehl 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 -dund -chaben Sie die Möglichkeit -m, die neuen Berechtigungen der zu installierenden Datei anzugeben, damit Sie nicht die Schritte a cpund a chmodausführen müssen, um das gleiche Ergebnis zu erzielen. Zum Beispiel:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Sie haben auch Optionen -gund -ozum Festlegen der Zielgruppe bzw. des Eigentümers. Dies vermeidet separate Anrufe an chown. Im Allgemeinen installverkü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 cpund install, zumindest unter Linux. Beim Kopieren über eine vorhandene Datei wird cpder vorhandene Inode der Datei überschrieben, während installimmer ein neuer Inode mit demselben Dateinamen erstellt wird.
Dies macht einen Unterschied, wenn eine neue Version einer laufenden Binärdatei installiert wird. Die Verwendung cpverursacht einen EBUSY-Fehler, der installjedoch 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 mkdirund installvon GNU Coreutils . Beide verwenden die gleiche make_dir_parentsFunktion, wobei jedoch der preserve_existingParameter auf falsebzw. gesetzt truewird.
installoder$(INSTALL)in Makefiles kennzeichnet diese Schritte auch als Installationskopierschritte und nicht als gewöhnliche Kopierschritte. Das könnte nützlich sein.