Est-ce
make install
avec un Makefile la plupart du temps/usr/bin/install
?Quel travail nécessaire fait en
/usr/bin/install
plus de copier les fichiers juste compilés/usr/bin/local
?La page de manuel indique
/usr/bin/install
copier les fichiers et définir les attributs. Quels attributs sont si importants à définir?- Définit-il simplement les modes d'autorisation et le propriétaire / groupe, qui ne sont pas nécessaires?
11
Réponses:
install
offre un certain nombre de fonctionnalités en plus de la copie de fichiers dans un répertoire.-s
option supprime la table des symboles d'un exécutable, économisant de l'espace-m
option définit les bits d'autorisation. Les fichiers situés dans le répertoire du développeur ont été créés sous réserve de son umask, ce qui peut empêcher les autres de les exécuter.install -m 755 file1 /usr/local/bin
garantit que tout le monde peut exécuter le fichier, ce qui est probablement ce que le développeur souhaite pour un fichier dans un répertoire partagé.-o
et-g
définissent le propriétaire et le groupe. Aveccp
, le propriétaire et le groupe du fichier de destination seraient définis sur l'uid et le gid de celui qui a exécuté lecp
, et aveccp -p
, le propriétaire et le groupe du fichier de destination seraient les mêmes que le fichier dans le répertoire de construction, aucun des deux ne pouvant être ce que le développeur veut. Lewall
programme doit être en groupetty
, lescreen
programme doit être en groupeutmp
, etc.install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)
est plus succinct que les quatre commandescp
,strip
,chmod
, etchown
.Le dernier point est probablement la raison pour laquelle la
install
commande a été inventée et pourquoi de nombreux makefiles l'utilisent.Install
n'est pas toujours utilisé, cependant. J'ai vucp -r lib $(DESTDIR)/lib
quand il y a un arbre entier plein de choses à copier, et./install.sh
si le développeur préfère utiliser un script personnalisé. De nombreux packages ont uninstall.sh
dérivé de celui fourni avec X11, qui est similaireinstall
mais prend en charge une-t
option (transformation) pour renommer les fichiers de destination d'une manière spécifiée.la source
Étant donné que les commandes utilisées dans un makefile dépendent essentiellement des développeurs de projet, il est difficile de donner une réponse définitive ici. En général, je dirais que c'est une bonne pratique d'utiliser la
install
commande dans un makefile pour tous les processus d'installation mentionnés en 2, mais là encore ceinstall
n'est pas POSIX donc toujours l'utiliser ne peut pas être l'approche la plus portableAFAIK la plupart des outils peuvent être utilisés pour générer automatiquement des makefiles comme
automake
etcmake
utiliserontinstall
.install
Est généralement utilisé pour copier des fichiers et définir les autorisations / propriétaire / groupe dans une seule commande, comme vous le dites. Une autre fonction couramment utilisée consiste à supprimer les symboles inutiles (par exemple les symboles de débogage) d'un binaire qui n'en a plus besoin. Il a également quelques options supplémentaires pour des choses comme faire des sauvegardes avant d'installer et de travailler dans un contexte SELinux qui peuvent être utiles.Les autorisations à choisir dépendent du fichier lui-même. La plupart des fichiers installés sont lisibles par tout le monde, mais uniquement accessibles en écriture à la racine (l'idée est de placer les fichiers programme dans un endroit où ils sont accessibles à tous mais ne peuvent pas être falsifiés). Ce n'est pas le cas de tout, si le fichier contient des données sensibles, il est courant de limiter l'accès à un groupe ou à root uniquement.
la source