La commande `install` est un outil puissant pour la copie de fichiers sous Linux et macOS, particulièrement appréciée des utilisateurs avancés. Cet article explore comment optimiser votre travail grâce à cette commande.
Attention : Ce n’est pas un installateur de logiciels!
La commande `install` porte un nom qui peut prêter à confusion. Elle ne sert pas à installer des logiciels. Pour installer des paquets sous Ubuntu ou toute autre distribution basée sur Debian, la commande appropriée est `apt-get`. Pour les autres distributions, utilisez l’outil de gestion de paquets propre à votre distribution, comme `dnf` sur Fedora ou `zypper` sur openSUSE.
Alors, quel est le rôle de `install` ?
En bref, `install` regroupe les fonctionnalités de plusieurs commandes : `cp` (copie), `chown` (changement de propriétaire), `chmod` (modification des permissions), `mkdir` (création de répertoire) et `strip` (suppression des symboles). Elle permet d’exécuter ces actions combinées en une seule opération.
La commande `install` peut donc :
- Copier des fichiers, à l’instar de `cp`.
- Écraser des fichiers existants si nécessaire.
- Créer le répertoire cible s’il n’existe pas, comme le fait `mkdir`.
- Définir les droits d’accès utilisateur, comme avec `chmod`.
- Attribuer un propriétaire aux fichiers, comme avec `chown`.
- Supprimer les informations superflues des fichiers exécutables, de la même manière que `strip`.
Malgré cette richesse fonctionnelle, la commande `install` ne possède pas une myriade d’options.
Cas d’utilisation de `install`
L’usage de la commande `install` n’est pas quotidien pour la plupart des utilisateurs. Elle est cependant très utile dans des situations spécifiques, notamment lors du développement de logiciels. Imaginons que vous développiez un nouvel utilitaire. Il est nécessaire de réaliser des tests en dehors de l’environnement de développement. Cela implique de copier les nouveaux fichiers de programme dans un répertoire de test, qui peut nécessiter d’être créé, et d’ajuster les permissions et la propriété des fichiers.
Le développement étant un processus itératif, cette séquence d’actions peut être répétée à de multiples reprises. C’est là que la commande `install` intervient pour automatiser cette tâche. Une fois votre utilitaire prêt, `install` permet également de le déployer en copiant les fichiers avec les permissions adéquates vers leur emplacement final.
Un exemple concret
Prenons l’exemple d’un programmeur qui travaille sur un nouvel utilitaire nommé `ana`, composé d’un fichier exécutable et d’une base de données. Après les tests, il doit être installé dans `/usr/local/bin` pour être accessible à tous les utilisateurs du système Linux. Dans cet exemple, remplacez les noms de fichiers et les chemins par ceux correspondant à votre configuration.
Pour la phase de test, les fichiers seront copiés dans un répertoire nommé `~/test/ana`. Les membres du groupe `geek` auront des droits de lecture et d’exécution, et les autres utilisateurs auront le droit d’exécution uniquement. La commande `install` utilise la même représentation numérique que `chmod` pour les autorisations. Notre programmeur a décidé que les permissions doivent être définies comme suit :
- Propriétaire : lecture, écriture et exécution.
- Groupe : lecture et exécution.
- Autres : exécution uniquement.
Comment utiliser la commande `install`
Le répertoire de travail du programmeur fictif est `~/work`. Il a développé le programme, l’a compilé et obtenu un exécutable appelé `ana`. Il a également créé le fichier de base de données nommé `Words.db`. Les deux fichiers sont maintenant prêts pour les tests. Voici leur aperçu:
ls -l ana Words.db
L’utilitaire `ana` permet de créer des anagrammes à partir d’une phrase entrée en ligne de commande. Les tests de validation sont simples.
Le programmeur a testé `ana` avec le mot «biscuit» et tout semble fonctionner correctement. Il souhaite maintenant copier les deux fichiers dans `~/test/ana` pour tester l’utilitaire hors de l’environnement de développement. Il utilise la commande suivante :
install -D -v ana Words.db -t ~/test/ana
Les options utilisées sont :
- `D`: Crée les répertoires, y compris les répertoires parents si nécessaire.
- `v`: Affichage détaillé, liste chaque répertoire créé et chaque fichier copié.
- `t`: Spécifie le répertoire cible.
On constate que `install` crée le répertoire `~/test` puis `~/test/ana`, avant de copier les fichiers vers le répertoire cible.
La commande `ls` dans `~/test/ana` confirme que les fichiers ont bien été copiés.
ls -l
L’étape suivante consiste à tester l’utilitaire `ana` dans `~/test/ana`.
L’utilitaire fonctionne comme prévu, mais les permissions ne sont pas correctes. Il faut que le groupe `geek` ait les droits de lecture et d’exécution, et les autres utilisateurs le droit d’exécution uniquement.
Ces problèmes peuvent être résolus avec la commande suivante, en utilisant `sudo` pour exécuter la commande avec les privilèges root. Les options `-o` et `-g` le nécessitent. Un mot de passe sera demandé lors de l’exécution.
sudo install -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
Voici les nouvelles options utilisées:
- `-b` (sauvegarde) crée une sauvegarde des fichiers avant qu’ils ne soient écrasés.
- `-S` (suffixe) définit le suffixe des fichiers de sauvegarde. Si aucun suffixe n’est fourni, un tilde `~` est utilisé par défaut. Ici, nous demandons à `install` d’utiliser le suffixe `.bak`.
- `-o` (owner) permet de définir le propriétaire du fichier, en l’occurrence `dave`.
- `-g` (groupe) définit le groupe propriétaire des fichiers, ici le groupe `geek`.
- `-m` (mode) définit les modes de fichier en utilisant la syntaxe numérique standard de `chmod`.
L’option `-D` (création des répertoires) est inutile car le répertoire de test existe déjà. De même, l’option `-v` (verbose) a été omise. L’exécution de `ls` dans `~/test/ana` affiche les détails des fichiers :
ls -l
On constate que toutes les conditions sont remplies :
- Les fichiers ont été copiés dans le répertoire de test.
- Les permissions ont été correctement définies.
- `dave` est le propriétaire des fichiers.
- Le groupe `geek` est le groupe propriétaire des deux fichiers.
- Des copies de sauvegarde, nommées `ana.bak` et `Words.db.bak` ont été créées.
Tout cela a été accompli avec une seule commande.
Le programmeur effectue des modifications finales à l’utilitaire et le recompile. Les fichiers modifiés doivent être copiés de `~/work` vers `~/test/ana`. Pour ce faire, l’option `-C` (comparer) est utilisée. Si le fichier source et le fichier cible sont identiques, la copie n’a pas lieu.
sudo install -C -b -S .bak -o dave -g geek -m 751 ana Words.db -t ~/test/ana
La liste des fichiers dans le répertoire cible montre que la taille du fichier `ana` a changé et qu’il est plus grand que `ana.bak`. L’horodatage de `ana` a également été mis à jour. Ces modifications sont dues à la copie de la nouvelle version.
ls -l
La taille et l’horodatage de `Words.db` sont inchangés. Comme aucune modification n’a été apportée, le fichier n’a pas été copié. Pour un projet avec un grand nombre de fichiers, l’option `-C` permet d’économiser du temps et de réduire l’activité du disque dur, car seuls les fichiers modifiés sont copiés.
Le programmeur vérifie une nouvelle fois que l’utilitaire fonctionne correctement.
Il est maintenant temps d’utiliser `install` pour copier les fichiers dans `/usr/local/bin`, rendant le nouvel utilitaire accessible à tous les utilisateurs du système. Comme `/usr/local/bin` existe déjà, il n’est pas nécessaire de le créer. Une version modifiée de la dernière commande peut être utilisée.
Le répertoire cible est maintenant `/usr/local/bin`. L’option `-C` (comparaison) est supprimée car il n’y a pas encore de copie des fichiers dans ce répertoire. Il est donc inutile de comparer. De même, comme il n’y a rien à sauvegarder, les options `-b` (sauvegarde) et `-S` (suffixe) sont omises.
sudo install -o dave -g geek -m 751 ana Words.db -t /usr/local/bin
On peut vérifier que les fichiers ont été correctement copiés dans `/usr/local/bin`:
ls -l
Pour tester l’installation, changeons de répertoire et voyons si nous pouvons utiliser l’utilitaire depuis notre répertoire personnel.
Comme la commande `ana` n’est pas précédée de `./`, cela indique que l’exécution a bien lieu depuis `/usr/local/bin`. La mission est accomplie.
Il est possible de réduire la taille du fichier binaire en supprimant les tables de symboles et autres données superflues. Pour ce faire, la commande `install` peut être utilisée. La commande ci-dessous n’inclut pas `Words.db` car c’est une base de données et non un exécutable. Pour copier et réduire la taille de `ana`, on utilise la commande suivante, avec l’option `-s` (rétrécir) en minuscule, ainsi que les options `-b` (sauvegarde) et `-S` (suffixe) en majuscule :
sudo install -s -b -S .bak -o dave -g geek -m 751 ana -t /usr/local/bin
La taille du fichier `ana` a été réduite de près de 60%. Une version de sauvegarde du fichier a été créée, comme le montre la commande `ls`:
ls -l /usr/local/bin
En résumé
La commande `install` a une utilité spécifique. Pour beaucoup, elle ne sera pas utilisée quotidiennement ou même mensuellement. Elle est pourtant un outil puissant à connaître et à ajouter à son répertoire de compétences. Pour les situations où elle se révèle nécessaire, elle offre des gains d’efficacité, de simplicité et de rapidité.