Que fait / usr / bin / install à part la copie?

11
  1. Est-ce make installavec un Makefile la plupart du temps /usr/bin/install?

  2. Quel travail nécessaire fait en /usr/bin/installplus de copier les fichiers juste compilés /usr/bin/local?

  3. La page de manuel indique /usr/bin/installcopier les fichiers et définir les attributs. Quels attributs 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?
Tim
la source
"Est-ce que make install avec un Makefile appelle la plupart du temps / usr / bin / install?" Non, il fait ce qu'il veut. C'est une cible de fabrication. Votre question concerne l'exécutable d'installation? Ou à propos de faire? Ce n'est pas clair.
Faheem Mitha
tous les deux. @FaheemMitha
Tim
Ok, eh bien, 1 et 2 sont des questions différentes, et la réponse à 1 est, probablement pas, mais définissez "la plupart du temps". Je ne suis pas sûr du point 1, de toute façon.
Faheem Mitha

Réponses:

17

install offre un certain nombre de fonctionnalités en plus de la copie de fichiers dans un répertoire.

  • l' -soption supprime la table des symboles d'un exécutable, économisant de l'espace
  • l' -moption 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/bingarantit 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é.
  • les options -oet -gdéfinissent le propriétaire et le groupe. Avec cp, 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é le cp, et avec cp -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. Le wallprogramme doit être en groupe tty, le screenprogramme doit être en groupe utmp, etc.
  • cela réduit le nombre de commandes qui doivent être insérées dans une recette de makefile. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)est plus succinct que les quatre commandes cp, strip, chmod, et chown.

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

Installn'est pas toujours utilisé, cependant. J'ai vu cp -r lib $(DESTDIR)/libquand il y a un arbre entier plein de choses à copier, et ./install.shsi le développeur préfère utiliser un script personnalisé. De nombreux packages ont un install.shdérivé de celui fourni avec X11, qui est similaire installmais prend en charge une -toption (transformation) pour renommer les fichiers de destination d'une manière spécifiée.

Mark Plotnick
la source
2
  1. É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 installcommande dans un makefile pour tous les processus d'installation mentionnés en 2, mais là encore ce installn'est pas POSIX donc toujours l'utiliser ne peut pas être l'approche la plus portable

    AFAIK la plupart des outils peuvent être utilisés pour générer automatiquement des makefiles comme automakeet cmakeutiliseront install.

  2. installEst 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.

Graeme
la source