Que fait / usr / bin / install en plus de la copy?

  1. Est-ce que make install avec un Makefile la plupart du time appelle /usr/bin/install ?

  2. Quel est le travail nécessaire /usr/bin/install plus de copyr les files compilés dans /usr/bin/local ?

  3. La page de manuel indique /usr/bin/install copy les files et définit les attributes. Quels attributes sont si importants à définir?

  4. Définit-il simplement les modes d'autorisation et le propriétaire / groupe, qui ne sont pas nécessaires?

install offre un certain nombre de fonctionnalités en plus de copyr des files dans un directory.

  • l'option -s supprime la table de symboles d'un exécutable, économisant de l'espace
  • l'option -m définit les bits d'autorisation. Les files se trouvant dans le directory 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 file, ce qui est probablement ce que le développeur souhaite pour un file dans un directory partagé.
  • les options -o et -g définissent le propriétaire et le groupe. Avec cp , le propriétaire et le groupe du file de destination seraient définis sur le uid et le gid de celui qui a exécuté le cp , et avec cp -p , le propriétaire et le groupe du file de destination seraient les mêmes que le file dans le directory de construction , dont aucun ne pourrait être ce que le développeur veut. Le programme de wall doit être dans le groupe tty , le programme d' screen doit être groupe utmp , etc.
  • il réduit le nombre de commands qui doivent être mises dans une recette makefile. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR) est plus succinct que les quatre commands cp , ssortingp , chmod et chown .

Le dernier point est probablement la raison pour laquelle la command d' install été inventée et pourquoi de nombreux makefiles l'utilisent.

Install n'est cependant pas toujours utilisée. J'ai vu cp -r lib $(DESTDIR)/lib quand il y a tout un tree plein de choses à copyr, et ./install.sh si le développeur préfère utiliser un script personnalisé. De nombreux packages ont un install.sh dérivé de celui qui vient avec X11, qui est comme l' install mais supporte une option -t (transform) pour renommer les files de destination d'une manière spécifiée.

  1. Puisque les commands utilisées dans un makefile sont essentiellement destinées aux développeurs du projet, il est difficile de donner ici une réponse définitive. En général, je dirais que c'est une bonne pratique d'utiliser la command d' install dans un makefile pour tous les process d'installation mentionnés dans 2, mais install nouveau n'est pas POSIX, donc l'utiliser peut ne pas être l'approche la plus portable

    AFAIK la plupart des outils peuvent être utilisés pour générer automatiquement des makefiles comme automake et cmake utilisera install .

  2. Généralement, l' install est utilisée pour copyr des files et définir les permissions / propriétaire / groupe dans une command comme vous le dites. Une autre fonction couramment utilisée est de supprimer les symboles inutiles (par exemple les symboles de debugging) d'un binary 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 context SELinux qui peut être utile.

Les permissions à choisir dépendent du file lui-même. La plupart du time, les files installés sont lisibles par tout le monde, mais seulement par root (l'idée est de placer les files du programme dans un endroit où tout le monde peut y accéder mais qui ne peut pas être falsifié). Ce n'est pas le cas de tout, si le file contient des données sensibles, il est courant de limiter l'access à un groupe ou à la racine uniquement.