Linux / Commande install : copier un fichier et fixer ses droits
La commande GNU install copie un fichier vers un emplacement choisi tout en définissant ses droits et, avec les privilèges nécessaires, son propriétaire et son groupe. Elle convient pour placer un programme construit ou un fichier de configuration ; elle n’installe pas les dépendances ni ne tient la base de données des paquets comme apt ou dnf.
Le mode par défaut d’un fichier installé est généralement exécutable pour tous (0755) : précisez -m pour une configuration qui ne doit pas être exécutée. Avant de remplacer un fichier existant, comparez et sauvegardez la version en place. Les exemples ci-dessous utilisent d’abord un répertoire de pratique appartenant à votre compte ; vérifiez les options de votre version avec install --help ou man install. Le manuel officiel GNU Coreutils décrit les comportements de référence.
Quand utiliser install et quelle syntaxe choisir ?
install copie un ou plusieurs fichiers, ou crée un répertoire avec -d. Le programme est courant dans les scripts de construction et les Makefiles parce qu’il rend explicites le chemin et les attributs du résultat. Ses trois formes utiles sont :
install [options] SOURCE DESTINATION
install [options] SOURCE... RÉPERTOIRE
install -d [options] RÉPERTOIRE...
Ce bloc présente une syntaxe, pas des noms de fichiers à exécuter littéralement. Mettez les chemins contenant des espaces entre guillemets ; utilisez -- lorsque c’est accepté pour séparer les options des chemins commençant par un tiret. Si la destination est déjà présente, install peut la remplacer : le mode et la propriété du nouveau fichier seront ceux demandés, tandis que des attributs étendus tels que les xattrs ne sont pas préservés par défaut. Prévoyez donc la sauvegarde et les contrôles adaptés aux ACL et à SELinux lorsque ces mécanismes comptent.
Copier un programme et une configuration dans un dossier d’essai
Créez un nouveau dossier privé avec mktemp. Le bloc écrit deux petits fichiers sans secret et installe une copie exécutable et une copie non exécutable. Il ne requiert pas sudo et n’écrit pas dans /usr/local ou /etc :
lab=$(mktemp -d "$HOME/install-lab.XXXXXX") || exit 1
printf '#!/bin/sh\nprintf "outil prêt\\n"\n' > "$lab/mytool"
printf 'PORT=8080\n' > "$lab/mytool.conf"
install -m 0755 -- "$lab/mytool" "$lab/mytool-installed"
install -m 0644 -- "$lab/mytool.conf" "$lab/mytool-installed.conf"
stat -c '%a %n' "$lab/mytool-installed" "$lab/mytool-installed.conf"
"$lab/mytool-installed"
cat -- "$lab/mytool-installed.conf"
Sur un système Linux dont le système de fichiers respecte ces bits, stat doit afficher 755 et 644 pour les deux copies ; le programme écrit « outil prêt » et la configuration contient PORT=8080. Vérifiez l’emplacement indiqué par la variable lab avant de ranger l’exercice. Les droits de la copie ne prouvent ni que le programme convient à votre architecture ni qu’un service le lancera correctement.
Pour un vrai exécutable construit, un appel du type sudo install -m 0755 ./mytool /usr/local/bin/mytool demande les droits d’écriture sur la destination. Avant de l’utiliser, confirmez la provenance du fichier, son architecture et l’existence éventuelle de /usr/local/bin/mytool ; sauvegardez la version en place et prévoyez comment revenir en arrière. Pour une configuration, choisissez plutôt le mode et le propriétaire adaptés aux données qu’elle contient : 0644 serait excessif pour un fichier secret. N’exécutez sudo que pour les chemins qui l’exigent.
Créer un répertoire avec -d et les parents avec -D
L’option -d crée le dossier cible et ses parents manquants, puis applique le mode et, si demandés avec les privilèges nécessaires, le propriétaire et le groupe au dossier cible. Les parents créés automatiquement reçoivent normalement leurs attributs par défaut, pas le mode -m du dernier dossier. Pour tester sans privilège :
install -d -m 0750 -- "$lab/state/cache"
stat -c '%a %n' "$lab/state" "$lab/state/cache"
Le dernier dossier doit afficher 750 sur un système Linux adapté ; ne supposez pas que state a aussi ce mode. Lorsque chaque niveau a une politique précise, créez et vérifiez-les séparément. Sur un serveur où le compte myapp existe et où vous contrôlez ce chemin, sudo install -d -m 0750 -o myapp -g myapp /var/lib/myapp peut créer le dernier dossier pour ce service ; confirmez d’abord les comptes, un éventuel dossier existant et ses utilisateurs.
L’option -D concerne plutôt un fichier : elle crée les parents manquants de la destination et y copie la source. Par exemple, install -D -m 0644 SOURCE /chemin/nouveau/parametre.conf exige une vraie source et les droits d’écriture du chemin. Pour une unité systemd réelle, vérifiez le répertoire d’inclusion, sauvegardez une unité du même nom si elle existe, installez le fichier, contrôlez son contenu et sa syntaxe, puis rechargez le gestionnaire seulement après examen. -D ne remplace pas cette revue ni une politique de propriétaire sur chaque parent.
Choisir les options qui changent vraiment le résultat
| Option | Effet et condition |
|---|---|
-m MODE |
Définit les bits de mode de la copie ou du dernier répertoire créé avec -d. |
-o OWNER, -g GROUP |
Fixent propriétaire et groupe ; changer le propriétaire demande normalement les privilèges appropriés. |
-d, -D |
-d crée des répertoires ; -D crée les parents d’un fichier destination avant de le copier. |
-t DIR |
Nomme le répertoire de destination avant la liste des fichiers sources. |
-p |
Reprend les heures d’accès et de modification de la source. |
-s |
Retire la table des symboles d’un binaire avec l’outil de strip ; ne l’utilisez pas sur le script d’essai. |
-C |
Compare contenu et attributs pertinents pour éviter une modification inutile de la destination ; précisez les attributs attendus et vérifiez le résultat. |
Dans le manuel GNU install, -C compare notamment contenu, propriétaire, groupe, mode et parfois le contexte SELinux. Le manuel recommande de le combiner avec -o, -g et -m quand ces attributs sont importants, car les valeurs implicites peuvent être influencées par l’environnement. -p peut aussi réduire son intérêt en modifiant les horodatages. Une copie avec -s change le binaire : conservez de quoi le reconstruire ou le restaurer si les symboles de débogage sont nécessaires.
Contrôler une installation et savoir revenir en arrière
Après une installation dans un vrai chemin, lisez le mode, le propriétaire, le groupe et le type du fichier. Pour un exécutable, vérifiez aussi son lancement dans l’environnement de destination et ses bibliothèques nécessaires. Le résultat d’un install qui ne produit aucun texte ne suffit pas : examinez son code de sortie et la destination.
stat -c '%A %U:%G %n' "$lab/mytool-installed"
file "$lab/mytool-installed"
cmp -- "$lab/mytool" "$lab/mytool-installed"
Pour les fichiers de pratique, cmp ne doit signaler aucune différence. Sur un fichier de production, comparez aussi les paramètres et le comportement du service. Si la nouvelle version échoue, restaurez la copie sauvegardée et ses attributs, puis retestez le service et sa réponse. Une installation manuelle ne laisse pas à apt ou dnf un historique d’installation ou une gestion automatique des dépendances ; lorsqu’un logiciel est fourni par un paquet adapté, examinez ce choix avant une copie manuelle.
Dans un script déployant plusieurs fichiers, install -m 0644 -t DESTINATION fichiers... place chaque source dans le même dossier. Vérifiez l’expansion des fichiers source, l’espace disponible, les sauvegardes et les droits attendus avant de toucher à un répertoire partagé. install n’effectue pas à lui seul une bascule atomique de toute une application.
Questions fréquentes
La commande install installe-t-elle un paquet logiciel ?
Non. Elle copie des fichiers et définit certains attributs ; elle ne résout pas les dépendances et ne gère pas les mises à jour du paquet.
Pourquoi employer install plutôt que cp ?
install permet de déclarer dans la même commande le mode, et si besoin le propriétaire, le groupe et le répertoire cible. cp reste approprié pour une copie ordinaire lorsque ces attributs sont gérés séparément.
Comment conserver les dates de la source ?
Utilisez -p ou --preserve-timestamps pour les heures d’accès et de modification, puis vérifiez le résultat sur le système cible.
La référence des commandes Linux par tâche permet de situer install parmi les outils de fichiers et les gestionnaires de paquets.




