Was ist der Zweck des Befehls 'install'?

49

Ich habe den installBefehl in vielen Makefiles gesehen und seine Existenz und Verwendung sind verwirrend. Aus den Manpages geht hervor, dass es sich um eine Kopie cpmit weniger Funktionen handelt, aber ich gehe davon aus, dass es nicht verwendet werden würde, wenn es keinen Vorteil gegenüber hatte cp. Was ist das Problem?

azernik
quelle

Antworten:

50

installkopiert nicht nur Dateien, sondern ändert auch den Besitz und die Berechtigungen und entfernt optional Debugsymbole aus ausführbaren Dateien. Es kombiniert cpmit chown, chmodund strip. Es ist ein praktisches übergeordnetes Tool, mit dem eine allgemeine Abfolge elementarer Aufgaben ausgeführt werden kann.

Ein Vorteil von installover cpfür die Installation von ausführbaren Dateien ist, dass, wenn das Ziel bereits vorhanden ist, die Zieldatei entfernt und eine neue erstellt wird. Dadurch werden alle aktuellen Eigenschaften wie Zugriffssteuerungslisten und -funktionen beseitigt, die sowohl als Vor- als auch als Nachteil betrachtet werden können. Wenn beim Aktualisieren von ausführbaren Dateien Instanzen dieser ausführbaren Datei ausgeführt werden, bleiben diese davon unberührt. Im Gegensatz dazu wird cpdie vorhandene Datei aktualisiert, sofern vorhanden. Bei den meisten Unix-Varianten schlägt dies mit dem Fehler EBUSY¹ fehl, wenn das Ziel eine laufende ausführbare Datei ist. In einigen Fällen kann es zum Absturz des Ziels kommen, da Codeabschnitte dynamisch geladen werden und das Ändern der Datei dazu führt, dass unsinniger Code geladen wird.

installist ein BSD-Befehl (hinzugefügt in 4.2BSD , dh in den frühen 1980er Jahren). Es wurde nicht von POSIX übernommen.

¹ “Textdatei belegt”. In diesem Zusammenhang bedeutet „Textdatei“ aus unklaren historischen Gründen „ausführbare Binärdatei“ .

Gilles 'SO - hör auf böse zu sein'
quelle
Wichtiger Hinweis (soweit ich es verstehen kann) ist , dass es auch kombiniert rmmit cp. Dies bedeutet, dass Dateien, die gerade verwendet werden, überschrieben werden können, indem die Verknüpfung zu ihnen aufgehoben wird ( rm). cpallein würde einen fehler geben.
Code_fodder
10

Es bietet eine standardisierte Möglichkeit, den Besitz und die Berechtigungen einer Datei oder eines Verzeichnisses in einem einzigen Befehl zu ändern, während die Datei kopiert oder das Verzeichnis erstellt wird.

Ignacio Vazquez-Abrams
quelle
9
Es ist nicht atomar. Atom bedeutet, dass für andere Prozesse keine Zwischenzustände sichtbar sind. installFührt eine Kopie durch, gefolgt von chown und chmod, alle separate Systemaufrufe, und verwendet kein Rename-in-Place (zumindest ab Coreutils 8.13 hat die GNU-Version dies nicht). Wenn Sie davon ausgehen, dass alles atomar abläuft, könnten Sie eine böse Überraschung erleben.
3

Mit dem installBefehl können wir Dateien mit den gewünschten Berechtigungen kopieren

Beispiel, das hauptsächlich beim Einrichten von ldap verwendet wird

install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE  /var/lib/ldap/DB_CONFIG

Dies erspart uns das tun chown ldap. /var/lib/ldap/DB_CONFIG, wenn Sie mit kopiert haben, cpdann müssen Sie auch chownin diesem Szenario

Rahul Patil
quelle
1

Siehe die Manpage für install:

$ man install

Auszug

SYNOPSIS
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...


DESCRIPTION
       This  install  program  copies  files  (often just compiled) into 
       destination locations you choose.  If you want to download and
       install a ready-to-use package on a GNU/Linux system, you should instead 
       be using a package manager like yum(1) or apt-get(1).

       In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to 
       the existing DIRECTORY, while  setting  permission  modes and 
       owner/group.  In the 4th form, create all components of the given 
       DIRECTORY(ies).

       Mandatory arguments to long options are mandatory for short options too.

Andere nützliche Dinge, wie das Installieren mit bestimmten Eigentümern, Berechtigungen und das Beibehalten der Zeitstempel der Originaldateien, können ebenfalls mithilfe von erreicht werden install.

   -g, --group=GROUP
          set group ownership, instead of process' current group

   -m, --mode=MODE
          set permission mode (as in chmod), instead of rwxr-xr-x

   -o, --owner=OWNER
          set ownership (super-user only)

   -p, --preserve-timestamps
          apply access/modification times of SOURCE files to corresponding 
          destination files

Verweise

slm
quelle
4
Wie ich in der Frage sagte, las ich die Hauptseite; es hat mich nicht aufgeklärt, was dies zur Funktionalität von cp beiträgt.
azernik
slm hat die spezifische Funktionalität hervorgehoben, die die beiden voneinander unterscheidet: Sie können einen bestimmten Eigentümer, eine bestimmte Gruppe und einen bestimmten Modus für die Zieldatei festlegen install, anstatt nur die vorhandenen Berechtigungen beizubehalten, wie beicp
Joshua Miller,