web-dev-qa-db-fra.com

Pourquoi utiliser Installer plutôt que CP et MKDIR?

J'ai vu dans de nombreux endroits d'occasion install -d Pour créer des répertoires et install -c Pour copier un fichier. Pourquoi ne pas utiliser mkdir et cp? Y a-t-il un avantage à utiliser install?

70

Cela dépend de ce que vous faites.

La commande install est normalement utilisée dans les scripts d'installation fournis avec des packages et un code source pour installer un binaire à votre système. Il peut également être utilisé pour installer tout autre fichier ou répertoire. En plus de -d et -c options que vous avez -m Pour spécifier les nouvelles autorisations du fichier à installer, vous n'avez donc pas à faire un cp et un chmod pour obtenir le même résultat. Par exemple:

install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"

Vous avez aussi des options -g et -o Pour définir le groupe cible et le propriétaire, respectivement. Cela évite les appels distincts à chown. En général, en utilisant install raccourcit votre script et le rend plus concis en effectuant la création de fichiers, la copie, le réglage du mode et les éléments associés dans une commande au lieu de plusieurs.

Pour référence, voir man install. Pour l'utilisation, jetez un coup d'œil à tout script d'installation expédié avec un package code source .

61
user13742

"Installer" combine généralement les actions suivantes:

  • Copie du fichier spécifié sur la place cible, qui se fait en ce qui concerne les processus qui utilisent une ancienne copie. Contrairement à "CP", "Installer" soit le fichier Direcks avant la création d'une nouvelle, ou (dans les systèmes BSD, avec -s Switch) crée une nouvelle et renorme sur le nom de la cible atomiquement, ce qui évite la condition de race entre l'installation et la réouverture. . Sinon, la copie peut échouer (avec l'ETXTBSY) pour un fichier binaire exécutant ou provoquer un crash si un fichier de bibliothèque ou une donnée est remplacé.
  • Définissez les informations d'identification appropriées dans le nouveau fichier sans avoir besoin de commandes séparées.
  • Faire des annuaires intermédiaires, si demandé.
  • Évitez de modifier un fichier cible s'il est identique à la nouvelle version (-C Switch).

Il suit donc une approche UNIX qu'un outil doit être effectué pour une seule action complète d'installer un fichier créé par un outil de construction à son emplacement de travail.

Le concept complet que j'ai décrit est mis en œuvre dans les systèmes BSD (dans la version dit "xinstall"); Je traite ici le mode "Copie sûre" (nouvelle version avec Atomic Renaming) comme vital pour cela. Les systèmes Linux (de Coreutils) manquent cette partie importante et sont sujets aux races entre la suppression et la réouverture par un processus de spectateurs; Mais cela aurait pu être couvert par des gestionnaires de colis.

24
Netch

Outre les descriptions précédentes ici sur l'utilisation, il existe une différence de niveau bas entre cp et install, au moins sur Linux. Si la copie sur un fichier existant, cp écrase l'inode existant du fichier, tandis que install crée toujours une nouvelle inode pour le même nom de fichier.

Cela fait une différence lors de l'installation d'une nouvelle version d'un binaire exécutant. Utiliser cp provoque une erreur eBusy, tandis que install réussira. Le binaire exécuté utilisera toujours l'ancienne version, mais la nouvelle version est utilisée si le programme est redémarré.

12
Tomas Skäre

Si le répertoire en question existe déjà:

  • mkdir -p va essayer de définir les bits de propriété et de mode de fichiers
  • install -d n'essaiera pas de définir les bits de propriété de propriété et de fichier

Ceci est pour mkdir et install de GNU coreutils . Ils utilisent tous les deux le même make_dir_parents fonction, mais avec le preserve_existing Le paramètre est défini sur false ou true, respectivement.

4
Alexander