Une différence significative est que cp tronque le fichier de destination et commence à copier les données de la source dans le fichier de destination.
install, d'autre part, supprime d'abord le fichier de destination.
Ceci est important car si le fichier de destination est déjà utilisé, de mauvaises choses pourraient arriver à quiconque utilise ce fichier au cas où vous cp
un nouveau fichier dessus. par exemple. l'écrasement d'un exécutable en cours d'exécution peut échouer. Tronquer un fichier de données dans lequel un processus existant est occupé à lire/écrire pourrait provoquer un comportement assez étrange. Si vous supprimez d'abord le fichier de destination, comme le fait l'installation, les choses continuent comme d'habitude - le fichier supprimé n'est pas réellement supprimé tant que tous les processus n'ont pas fermé ce fichier.
Techniquement, la différence entre install -c
et cp
est-ce install
définit les permissions du fichier cible sur rwxr-xr-x
. cp
préserve les autorisations du fichier source moins le umask. Ces comportements par défaut sont utiles dans différentes situations. Évidemment, avec toutes les options que cp
et install
offre aujourd'hui, les fonctionnalités ont convergé.
De nos jours, install
est couramment utilisé dans les makefiles, cp
partout ailleurs. Cette distinction est parfois utile car certains systèmes d'exploitation ou systèmes d'installation permettent de s'accrocher au install
programme pour enregistrer les packages installés. Les systèmes de gestion de paquets modernes rendent ce type de service obsolète, mais certaines personnes l'utilisent encore. De plus, la possibilité de définir les autorisations du fichier cible du même coup est très pratique.
Le install
l'utilitaire, à sa base, est un cp
fantaisiste . Mais en tant qu'outil d'installation spécifique, il contient quelques fonctionnalités qui cp
n'a pas. Mon /usr/bin/install
de GNU coreutils non seulement copie, mais peut également modifier les permissions/propriété en tant que drapeaux arg (sauvegardant chgrp
, chown
, chmod
invocations) une option pour supprimer les informations de débogage (enregistrement d'un strip
invocation) et aussi du mojo pour les contextes SELinux.
Il fournit simplement des actions de commodité utiles pour les installations de logiciels. Aucun ne change la vie, tous sont utiles et rendent vos scripts plus propres.