J'ai vu dans de nombreux endroits install -d
créer des répertoires et install -c
copier un fichier. Pourquoi ne pas utiliser mkdir
et cp
? Y a-t-il un avantage à utiliser install
?
J'ai vu dans de nombreux endroits install -d
créer des répertoires et install -c
copier un fichier. Pourquoi ne pas utiliser mkdir
et cp
? Y a-t-il un avantage à utiliser install
?
Réponses:
Cela dépend de ce que vous faites.
Cette install
commande 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 -d
et que -c
vous avez -m
pour spécifier les nouvelles autorisations du fichier à installer, vous n'avez donc pas besoin d'effectuer les opérations a cp
et a chmod
pour obtenir le même résultat. Par exemple:
install -m644 "$srcdir/$pkgname-$pkgver-linux64" "$pkgdir/opt/$pkgname"
Vous avez également des options -g
et -o
pour définir le groupe cible et le propriétaire, respectivement. Cela évite les appels séparés à chown
. En général, l'utilisation install
raccourcit 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 cp
et install
, du moins sous Linux. Si vous copiez un fichier existant, cp
écrasez l'inode existant du fichier, tout install
en 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 cp
provoque une erreur EBUSY, alors install
ré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 mkdir
et install
de GNU coreutils . Ils utilisent tous les deux la même make_dir_parents
fonction, mais avec le preserve_existing
paramètre en cours de réglage sur false
ou true
, respectivement.
install
ou$(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.