J'ai vu la commande install
utilisée dans de nombreux Makefiles, et son existence et son utilisation sont un peu déroutantes. D'après les pages de manuel, cela ressemble à une imitation de cp
avec moins de fonctionnalités, mais je suppose qu'il ne serait pas utilisé à moins qu'il n'ait un avantage sur cp
. Quel est le problème?
install
copie non seulement les fichiers mais modifie également leur propriété et leurs autorisations et supprime éventuellement les symboles de débogage des exécutables. Il combine cp
avec chown
, chmod
et strip
. C'est un outil pratique de niveau supérieur qui accomplit une séquence commune de tâches élémentaires.
Un avantage de install
sur cp
pour installer des exécutables est que si la cible existe déjà, elle supprime le fichier cible et en crée un nouveau. Cela supprime toutes les propriétés actuelles telles que les listes de contrôle d'accès et les capacités, qui peuvent être considérées à la fois comme un avantage et un inconvénient. Lors de la mise à jour des exécutables, s'il existe des instances de cet exécutable, ils continuent de fonctionner sans être affectés. En revanche, cp
met à jour le fichier en place s'il en existe un. Sur la plupart des variantes Unix, cela échoue avec l'erreur EBUSY¹ si la cible est un exécutable en cours d'exécution; sur certains, cela peut provoquer le plantage de la cible car elle charge dynamiquement des sections de code et la modification du fichier entraîne le chargement de code non logique.
install
est une commande BSD (ajoutée dans 4.2BSD , c'est-à-dire au début des années 1980). Il n'a pas été adopté par POSIX.
¹ "Fichier texte occupé". Dans ce contexte, "fichier texte" signifie "fichier exécutable binaire", pour raisons historiques obscures .
Il fournit un moyen standardisé de manipuler la propriété et les autorisations d'un fichier ou d'un répertoire tout en copiant le fichier ou en créant le répertoire, en une seule commande.
Avec la commande install
, nous pouvons copier un fichier avec les autorisations souhaitées
Exemple utilisé principalement lors de la configuration de LDAP
install -o ldap -g ldap /etc/openldap/DB_CONFIG_EXAMPLE /var/lib/ldap/DB_CONFIG
Cela nous évite de faire chown ldap. /var/lib/ldap/DB_CONFIG
, si vous avez copié à l'aide de cp
, vous devez également chown
dans ce scénario
Voir la page de manuel pour install
:
$ man install
extrait
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.
D'autres choses utiles telles que l'installation avec une propriété spécifique, des autorisations et la préservation des horodatages des fichiers d'origine peuvent également être obtenues en utilisant 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