J'ai vu dans de nombreux endroits install -dcréer des répertoires et install -ccopier un fichier. Pourquoi ne pas utiliser mkdiret cp? Y a-t-il un avantage à utiliser install?
J'ai vu dans de nombreux endroits install -dcréer des répertoires et install -ccopier un fichier. Pourquoi ne pas utiliser mkdiret cp? Y a-t-il un avantage à utiliser install?
Réponses:
Cela dépend de ce que vous faites.
Cette installcommande est normalement utilisée dans les scripts d'installation fournis avec les packages et le code source pour installer un fichier binaire sur votre système. Il peut également être utilisé pour installer tout autre fichier ou répertoire. En plus des options -det que -cvous avez -mpour spécifier les nouvelles autorisations du fichier à installer, vous n'avez donc pas besoin d'effectuer les opérations a cpet a chmodpour obtenir le même résultat. Par exemple:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Vous avez également des options -get -opour définir le groupe cible et le propriétaire, respectivement. Cela évite les appels séparés à chown. En général, l'utilisation installraccourcit votre script et le rend plus concis en créant des fichiers, en les copiant, en définissant les paramètres de mode et les éléments associés dans une seule commande au lieu de plusieurs.
Pour référence, voir man install. Pour l’utiliser, jetez un coup d’œil à tous les scripts d’installation livrés avec le code source d’un paquet .
"installer" combine généralement les actions suivantes:
Donc, il suit l'approche Unix qu'un outil doit être créé pour une action unique mais complète d'installation d'un fichier créé par un outil de construction à son emplacement de travail.
Le concept complet décrit ci-dessus est implémenté dans les systèmes BSD (dans la version dite "xinstall"); Je considère ici que le mode "copie conforme" (nouvelle version avec renommage atomique) est essentiel. Les systèmes Linux (de coreutils) manquent cette partie importante et sont sujets à des courses entre suppression et réouverture par un processus de contrôle; mais cela aurait pu être couvert par les gestionnaires de paquets.
Outre les descriptions précédentes concernant l’utilisation, il existe une faible différence de niveau entre cpet install, du moins sous Linux. Si vous copiez un fichier existant, cpécrasez l'inode existant du fichier, tout installen créant toujours un nouvel inode pour le même nom de fichier.
Cela fait une différence lors de l'installation d'une nouvelle version d'un binaire en cours d'exécution. L'utilisation cpprovoque une erreur EBUSY, alors installréussira. Le binaire en cours utilisera toujours l'ancienne version, mais la nouvelle version est utilisée si le programme est redémarré.
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 fichierinstall -d ne tentera pas de définir les bits de propriété et de mode de fichierCeci est pour mkdiret installde GNU coreutils . Ils utilisent tous les deux la même make_dir_parentsfonction, mais avec le preserve_existingparamètre en cours de réglage sur falseou true, respectivement.
installou$(INSTALL)dans les makefiles indique également que ces étapes sont des étapes de copie d'installation et non des étapes de copie ordinaires. Cela pourrait être utile.