Recueil de commandes
Documentation/aide
Avant de se pencher sur les commandes qui peuvent concrètement être utiles dans la réalisation de scripts, il peut être intéressant de connaître les commandes qui permettent de se renseigner sur les façons d’utiliser toutes les autres.
La commande man est la plus connue, mais apropos peut également être utile, surtout lorsque l’on a besoin d’une fonctionnalité qu’on n’utilise pas souvent.
1. Pages de manuel
Jusqu’en 1971, UNIX n’avait aucune documentation : il fallait être très familier avec le système (ou ses développeurs) pour pouvoir l’utiliser. Avec l’augmentation rapide du nombre d’utilisateurs, il est devenu nécessaire de proposer de la documentation. La commande man a alors été inventée : elle affiche des pages de manuel qui ont auparavant été rédigées par les auteurs des logiciels, par exemple. Elles permettent d’obtenir toutes les informations nécessaires sur la plupart des commandes, mais aussi sur des appels système, des fichiers de configuration, etc.
Les pages de manuel sont réparties en 8 sections :
1. Les commandes générales
2. Les appels système
3. Les fonctions des bibliothèques
4. Les fichiers spéciaux et les pilotes
5. Les formats de fichiers...
Gestion de fichiers
Étant donné que « tout est fichier » sous UNIX, beaucoup de commandes ont pour objectif de manipuler des fichiers. Toutes les commandes ne sont pas mentionnées ici, ce chapitre permet toutefois d’avoir des bagages suffisants afin de travailler sur les fichiers sous Linux.
1. Création
touch
La commande touch permet de modifier les dates de dernier accès et de dernière modification d’un fichier. Elle est équivalente à la séquence ouverture-sauvegarde-fermeture d’un fichier, sans modification, avec un éditeur de texte.
Un cas pratique dans lequel cette commande peut être utile serait un lockfile : si un fichier particulier existe, alors une procédure ne se lance pas (estimant qu’elle est déjà en cours par ailleurs) ; s’il n’existe pas, alors le script crée ce fichier et lance la procédure - à la fin de son exécution, le fichier est alors supprimé.
Cette approche peut également être utile quand on utilise la commande make pour compiler un programme, lorsque l’on veut le recompiler. En effet, tant qu’un fichier source n’a pas été modifié et si le binaire compilé est plus récent, make refuse de recompiler. Toucher le fichier permet de faire croire à make que celui-ci a été modifié afin de forcer la recompilation.
Mais cette commande est certainement plus souvent utilisée pour créer un fichier vide. En effet, par défaut elle ne nécessite pas que le fichier existe déjà, si nécessaire elle le crée. On peut créer un fichier de différentes manières, mais celle-ci est la plus simple si l’on a juste besoin d’un fichier vide, cas plutôt rare, mais qui peut arriver. Notez également qu’elle accepte plusieurs noms de fichier dans ses arguments.
touch /tmp/nouveau_fichier /tmp/autre_fichier
mkdir
La commande mkdir permet de créer un (ou plusieurs) répertoire(s) (« make directory »). Si aucune option particulière n’est utilisée et que l’un des répertoires à créer existe déjà, cette commande retourne une erreur. De même si l’on essaie de créer...
Gestion des utilisateurs et groupes
Deux types de commandes existent sous Debian pour la gestion des utilisateurs et des groupes.
D’une part, une série de commandes simplifiant ces actions de gestion, en automatisant certains aspects (la création des dossiers personnels des utilisateurs, par exemple), d’autre part, des commandes bas niveau, qui ne font que gérer ce qu’on leur demande et rien de plus. Selon les cas de figure, on peut être amené à utiliser l’un ou l’autre de ces types de commandes.
Les commandes simplifiées (par exemple adduser) ne sont pas disponibles sur tous les systèmes : elles ont été développées pour Debian et sont présentes dans cette distribution et ses dérivées. Parfois, quand des commandes portant ce nom existent, elles peuvent être simplement des liens vers les commandes bas niveau (c’est le cas sur la distribution Mandriva par exemple) : la syntaxe simplifiée n’est alors pas disponible. Il est d’ailleurs intéressant de noter que les commandes simplifiées ne sont que des scripts écrits dans le langage Perl et qu’ils appellent les commandes bas niveau pour effectuer les opérations d’ajout/suppression.
La majorité des commandes de gestion d’utilisateurs doivent être exécutées par l’utilisateur root pour qu’elles aient un effet : un utilisateur simple n’a le droit de modifier que certaines données le concernant.
Si vous développez un script qui est amené à être utilisé sur différentes distributions, il faut se limiter aux commandes de bas niveau.
1. Créer un utilisateur
adduser
La commande adduser permet de créer un nouvel utilisateur et de rendre son compte immédiatement utilisable. Appelée avec un nom d’utilisateur comme simple argument, elle crée un utilisateur selon les instructions contenues dans le fichier /etc/adduser.conf. Par défaut, un utilisateur normal est ajouté ainsi qu’un groupe d’utilisateurs qui lui est dédié, son dossier utilisateur est créé dans /home et le contenu de /etc/skel y est copié, enfin des informations le concernant sont demandées (par exemple son nom complet et son mot de passe).
Lorsqu’elle...
Processus
Un processus est l’instanciation d’un programme en mémoire, identifié par un identifiant numérique appelé PID, compris par défaut entre 1 et 32768. Lorsque tous les PID sont consommés, le compte recommence au début, les PID déjà utilisés le restent, mais les PID de processus terminés peuvent être réutilisés.
Si toutefois il est nécessaire de lancer plus de processus (c’est extrêmement rare !), cette limite peut être augmentée (elle est définie dans /proc/sys/kernel/pid_max), mais cela peut poser des problèmes à de vieux programmes datant du siècle dernier (il est toutefois peu probable que vous ayez à lancer un programme aussi vieux).
Lorsqu’un programme (une commande) est exécuté(e) plusieurs fois, plusieurs processus différents sont créés, chacun ayant son propre espace mémoire : il n’y a absolument aucun partage de données entre plusieurs processus issus d’un même exécutable.
1. Lister les processus
top
La commande top permet de lister les processus d’une manière interactive. Une fois ce programme lancé, il affiche à l’écran un résumé des processus en cours de fonctionnement.
En tête d’écran, on retrouve les informations liées à la durée de fonctionnement du système, suivies d’un résumé du nombre de processus (tâches) présents, puis le pourcentage d’utilisation du ou des processeurs et enfin l’utilisation de la mémoire.
En seconde partie, ce programme liste les processus en cours de fonctionnement les plus consommateurs de ressources. Par défaut, cette liste est triée par le pourcentage d’utilisation du processeur.
Différentes commandes existent pour manipuler ce logiciel ; ces commandes sont appelées en appuyant simplement sur la touche de clavier correspondante. Les plus intéressantes sont les suivantes :
Commande |
Action |
M |
Trier par utilisation mémoire. |
P |
Trier par utilisation processeur. |
s suivi d’un nombre puis [Entrée] |
Changer la périodicité du rafraîchissement de l’affichage. |
q |
Quitter. |
Touches fléchées, sauts de page, début... |
Disques et mémoire
1. Consulter les espaces disques
df
df (pour « disk free ») permet d’afficher les statistiques d’utilisation des différents systèmes de fichiers montés sur la machine (cela inclut les éventuels systèmes de fichiers distants). Ces informations sont gérées et desservies par les systèmes de fichiers eux-mêmes : elles ne sont pas recalculées à chaque appel à la commande. Par défaut, les tailles sont affichées en kio. La sortie de ce programme est sous forme de tableau, le séparateur de colonnes étant la tabulation.
Cette commande accepte différentes options, parmi lesquelles certaines sont particulièrement utiles.
Option |
Objectif |
-h ou --human-readable |
Afficher les tailles « lisibles par l’homme », en multiples de 1024. |
-H ou --si |
Afficher les tailles « lisibles par l’homme », en multiples de 1000. |
-i ou --inodes |
Afficher les nombres d’i-nœuds au lieu de la taille en octets. |
-l ou --local |
N’afficher que les systèmes de fichiers locaux. |
-P ou --portability |
Utiliser la sortie définie par la norme POSIX. |
L’option -h est souvent utilisée lorsque cette commande est appelée manuellement : il est plus facile de comprendre « 411G » que « 430817328 ».
L’option -P devrait être systématiquement utilisée dans des scripts ; l’utilisation de l’alignement selon la norme POSIX assure que, quelle que soit la version de cette commande utilisée et le système sur lequel on l’appelle, la sortie aura systématiquement la même forme.
Les i-nœuds (nœuds d’index) sont les structures de données contenant les informations permettant de retrouver les données des différents fichiers ; à chaque fichier est associé un i-nœud. Leur nombre est limité, c’est pourquoi il peut être utile de faire attention à leur quantité, notamment lorsque l’on envisage de stocker un grand nombre de fichiers. Lorsque l’on rencontre une erreur du type « espace disque insuffisant » alors que df -h affiche un espace largement suffisant, cela provient probablement des i-nœuds....
Système
1. Informations et manipulations basiques
uptime
La commande uptime permet de consulter la durée de fonctionnement du système, accompagnée du nombre d’utilisateurs connectés et de la charge moyenne du système.
$ uptime
17:21:02 up 1 day, 7:59, 1 user, load average: 2.43, 2.86, 2.83
Dans l’ordre, cette commande affiche :
-
L’heure actuelle (17:21:02).
-
La durée de fonctionnement (1 day, 7:59).
-
Le nombre d’utilisateurs (1 user).
-
La charge du système sur la dernière minute (2.43), les 5 dernières minutes (2.86) et les 15 dernières minutes (2.83).
On peut également demander la date et l’heure précise de démarrage du système avec l’option -s ou --since :
$ uptime --since
2017-09-04 09:21:22
lsb_release, uname
Les commandes lsb_release et uname permettent d’identifier le système sur lequel le script est en fonctionnement, conditionnant potentiellement son fonctionnement. lsb_release donne accès aux informations sur le système d’exploitation, uname donne accès aux informations sur le noyau Linux. Ces deux commandes acceptent l’option -a (--all) pour donner accès à toutes les informations qu’ils peuvent obtenir. Dans le cadre d’un script, il est préférable d’appeler les commandes avec des options particulières ; le tableau ci-dessous en liste une partie - la liste complète est accessible dans les pages de manuel de ces deux commandes.
Commande |
Information affichée |
uname -s |
Nom du noyau... |
Divers
1. Vrai et faux, oui et non
true, false
Ces deux commandes sont extrêmement simples :
-
true ne fait rien, avec succès (code d’erreur 0) - cette commande est utile pour créer une boucle infinie, avec while true.
-
false ne fait rien, sans succès (code d’erreur 1) - cette commande est peu utilisée dans des scripts, elle est utile par exemple comme shell attribué à un utilisateur, pour l’empêcher d’accéder à la machine.
yes
La commande yes retourne continuellement le caractère y seul sur une ligne, en boucle. Cela peut être utile lorsque l’on exécute une commande interactive qui nécessite que l’on réponde y à différentes questions, mais qu’elle ne propose pas d’option -y pour cela, grâce au chaînage de la sortie de yes dans l’entrée de la commande.
Lorsqu’on lui fournit un argument, yes retourne cet argument en boucle au lieu du caractère y. Par exemple, si on souhaite n’obtenir que « n » en boucle, il suffit alors d’utiliser la commande de cette manière :
yes n
2. Attente
sleep
La commande sleep permet de suspendre l’exécution d’un script. Elle prend en argument le nombre de secondes à attendre.
Certaines implémentations acceptent un nombre à virgule, voire un suffixe (pour définir...