Sélection de commandes utiles
Introduction
Ce chapitre est une sélection de commandes, utiles au quotidien, qui s’ajoutent à celles déjà rencontrées dans les chapitres précédents. Nous les présentons surtout via des exemples. Elles sont donc volontairement relativement peu détaillées en termes de syntaxe et d’options. Pour une étude plus complète, le lecteur se reportera à la documentation en ligne (commande man) ou à l’aide-mémoire proposé à la fin de ce livre.
Pour exploiter au mieux Unix ou Linux, nous devons pouvoir recenser les commandes importantes et en mémoriser le nom et le rôle. Au fur et à mesure de la pratique, nous nous souviendrons des options les plus usuelles et nous saurons notamment construire des pipelines intéressants. Il sera, par la suite, aisé de retrouver ou d’approfondir des options plus avancées, si le besoin se présente.
Comme nous l’avons déjà indiqué, les exemples proviennent indifféremment de versions Unix ou Linux délibérément non précisées. Il ne faut donc pas se formaliser des variantes d’affichage, voire de comportements d’options, bien représentatives de la réalité des différents environnements de production.
Commandes complémentaires sur les fichiers
1. La commande file
La commande file lit le début des fichiers pour essayer d’en déterminer le type de contenu.
$ file toto titi rep
toto: empty
titi: ASCII text
rep: directory
$ file /usr/sbin/*
/usr/sbin/NetworkManager: ELF 32-bit
LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses
shared libs), for GNU/Linux 2.6.24 stripped
/usr/sbin/a2dismod: symbolic link to `a2enmod'
/usr/sbin/a2enmod: Perl script, ASCII text executable
/usr/sbin/aa-status: Python script, ASCII text executable
/usr/sbin/add-shell: POSIX shell script, ASCII text executable................................................
2. La commande nl
La commande nl permet de numéroter les lignes de façons variées grâce à de nombreuses options.
$ nl /etc/passwd | tail
14 michel:x:2000:2000::/home/michel:/bin/bash
15 mysql:x:50:50::/home/mysql:/bin/sh
16 stage1:x:5001:5000::/home/stage1:/usr/bin/ksh
17 stage2:x:5002:5000::/home/stage2:/usr/bin/ksh
18 stage3:x:5003:5000::/home/stage3:/usr/bin/ksh
19 stage4:x:5004:5000::/home/stage4:/usr/bin/ksh
20 stage5:x:5005:5000::/home/stage5:/usr/bin/ksh
21 stage6:x:5006:5000::/home/stage6:/usr/bin/ksh
22 stage7:x:5007:5000::/home/stage7:/usr/bin/ksh
23 stage8:x:5008:5000::/home/stage8:/usr/bin/ksh
$
Nous obtenons ici les 10 dernières lignes (tail) du fichier /etc/passwd, préalablement numérotées par la commande nl.
$ nl -s" == ” -v101 -i5 /etc/group
101 == root::0:root
106 == other::1:
111 == bin::2:root,bin,daemon
116 == sys::3:root,bin,sys,adm
121 == adm::4:root,adm,daemon
126 == uucp::5:root,uucp
131 == mail::6:root
136 == tty::7:root,adm
141 == lp::8:root,lp,adm
146 == nuucp::9:root,nuucp
151 == staff::10:
156 == daemon::12:root,daemon
161 == sysadmin::14:
166 == smmsp::25:smmsp
171 == nobody::60001:
176 == noaccess::60002:
181 == nogroup::65534:
186 == michel::2000:
191 == mysql::50:
196 == eni::3000:michel
201 == stage::5000:
$
Les options utilisées ici sont des options à argument. L’argument de chaque option doit être collé à celle-ci. L’option -s permet de choisir un séparateur...
Sauvegardes
L’activité de sauvegarde est plutôt de la responsabilité de l’administrateur système. Elle se décline souvent en commandes spécifiques ou en solutions logicielles. L’utilisateur ordinaire dispose, dans tous les cas, de deux commandes publiques tar et cpio, présentes sur toutes les versions.
1. Les commandes de compression
Les commandes de compression de fichiers sont souvent utilisées dans le contexte des sauvegardes. Il y a eu plusieurs familles de commandes, chronologiquement de plus en plus performantes.
Si ces commandes reçoivent des arguments, elles remplacent le fichier initial par un fichier compressé, renommé avec une pseudo-extension propre à la commande. Symétriquement, les commandes de décompression restituent le fichier original.
Si les commandes ne reçoivent pas d’argument, elles traitent alors tout naturellement leur entrée standard et écrivent le résultat sur la sortie standard. Cette convention permet de combiner ces commandes avec les commandes de sauvegarde dans des pipelines. Compte tenu de cette possibilité, les commandes de sauvegarde ne sont pas toujours dotées d’options de compression.
Le tableau suivant nous résume les trois familles de commandes les plus répandues.
Origine System V |
Origine Berkeley |
Logiciel libre |
|
Commande de compression |
pack |
compress |
gzip |
Extension des fichiers compressés |
.z |
.Z |
.gz |
Commande de décompression |
unpack |
uncompress |
gunzip |
Décompression sur sortie standard |
pcat |
zcat |
Quelques exemples
$ ls -l toto
-rw-r--r-- 1 michel michel 1487780 Aug 30 18:38 toto
$ pack toto
pack: toto: 19.1% Compression
$ ls -l toto.z
-rw-r--r-- 1 michel michel 1203947 Aug 30 18:38 toto.z
$ unpack toto
unpack: toto: unpacked
$ compress -v toto
toto: Compression: 37.25% — replaced with toto.Z
$ ls -l toto.Z
-rw-r--r-- 1 michel michel 933494 Aug 30 18:38 toto.Z
$ uncompress toto
$ gzip -v toto
toto: 54.9% — replaced with toto.gz
$ ls -l toto.gz
-rw-r--r-- 1 michel michel 670926 Aug 30 18:38 toto.gz
$ gunzip toto
$
Dans ces essais successifs, nous pouvons constater que la commande gzip est la plus performante. Il s’agit d’une commande open source qui n’est pas toujours disponible...
Commandes d’impression
Les systèmes Unix sont dotés d’un service d’impression permettant l’accès à des imprimantes locales (sur port série ou parallèle), des imprimantes distantes (locales à une autre machine jouant le rôle de serveur d’impression) et des imprimantes réseau (directement connectées au réseau).
Du point de vue de l’utilisateur, les imprimantes sont identifiées par des noms logiques attribués par l’administrateur système. L’utilisateur n’a donc pas à se préoccuper de la connexion physique et il ne lui est pas nécessaire de connaître les noms des fichiers spéciaux associés à ces imprimantes.
Trois services d’impression coexistent dans le monde Unix :
-
Le spouleur System V (démon lpsched) utilisé notamment sur Solaris et HP-UX.
-
Le spouleur Berkeley (démon lpd) utilisé notamment sur Linux.
-
Le spouleur AIX (démon qdaemon).
Ces services correspondent à des jeux de commande différents pour l’utilisateur. Le spouleur AIX reconnaît les commandes des deux autres services.
Spouleur System V |
Spouleur Berkeley |
Spouleur AIX |
|
Requêtes d’impression |
lp |
lpr |
qprt |
État des files d’attente |
lpstat |
lpq |
qchk |
Annulation de requêtes |
cancel |
lprm |
qcan |
Autres commandes utiles
1. La commande script
La commande script mémorise une session dans un fichier. Elle crée un processus shell fils et se termine à la fin de celui-ci. Le nom par défaut du fichier de capture est typescript. Un autre nom peut être donné en argument à la commande. L’option -a permet une utilisation du fichier en mode ajout.
$ script
Script started, file is typescript
$ echo bonjour
bonjour
$ who -q
michel
# users=1
$ exit
Script done, file is typescript
$ cat typescript
Script started on Wed Sep 3 09:17:41 2014
$ echo bonjour
bonjour
$ who -q
michel
# users=1
$ exit
script done on Wed Sep 3 09:18:09 2014
$
2. La commande crypt
Grâce à une clé de cryptage, choisie et tapée au clavier par l’utilisateur, la commande crypt permet de crypter et décrypter son entrée standard vers sa sortie standard. Elle s’utilise donc via des redirections, tel que dans l’exemple suivant.
Dans un premier temps, nous cryptons le contenu du fichier fic et obtenons le résultat dans le fichier ficbis. La commande nous demande de taper la clé de cryptage.
$ cat fic
Ceci est un fichier personnel
dont le contenu est confidentiel
meme vis a vis de l'administrateur systeme
$ crypt < fic > ficbis
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and
numbers.
Enter passphrase:
Enter passphrase:
Stdin was encrypted.
$
La commande od nous permet de visualiser en ascii les contenus des deux fichiers afin de constater que le fichier résultat est bien un codage fidèle du fichier de départ.
$ file ficbis
ficbis: data
$ od -c fic
0000 C e c i e s t u n f i c h
0020 i e r p e r s o n n e l \n d o
0040 n t l e c o n t e n u e s
0060...
Filtres
Le terme filtre désigne communément des utilitaires qui effectuent des traitements sur des fichiers ou des données contenant du texte. L’unité de traitement est en effet la ligne (présence du caractère \n (saut de ligne)). Les filtres constituent des outils très intéressants, notamment pour compléter les fonctionnalités du shell proprement dit, dans un contexte de script. Leur appellation provient sans doute du fait qu’ils apparaissent assez souvent dans des pipelines pour traiter des résultats de commandes.
Des commandes assez simples, déjà rencontrées, peuvent être qualifiées de filtres, telles que head, tail, wc, more, nl, pr, cut... Nous allons présenter ici des filtres complémentaires, plus élaborés, qui nécessitent souvent une prise en main syntaxique.
Les résultats des filtres sont toujours écrits sur la sortie standard. Les données ne sont pas modifiées. Il convient d’utiliser des redirections pour archiver ces résultats dans des fichiers.
1. Tris avec sort
La commande sort permet d’effectuer des tris. L’unité de traitement peut être la ligne complète ou seulement certains champs. Le critère de tri par défaut est le code ASCII. De nombreuses options permettent de choisir des critères plus réalistes (alphabétique, numérique...).
Syntaxe résumée
sort [options] [ +pos1 [ -pos2 ] ] fichiers...
Si aucun fichier n’est donné en argument ou si on utilise le caractère - (signe moins), la commande traite son entrée standard.
Quelques options
-u |
Suppression de lignes multiples dans le résultat. |
-o fichier |
Sauvegarde du résultat dans le fichier spécifié, qui peut être un des fichiers d’entrée. |
-d |
Critère alphanumérique (lettres, chiffres, espaces, tabulations). |
-f |
Minuscules et majuscules confondues. |
-n |
Critère numérique. |
-r |
Résultat en ordre décroissant. |
-tcar |
Redéfinition du séparateur de champs. |
-b |
Bonne gestion du nombre variable d’espaces entre les champs. |
Utilisation des champs
Les notations +pos1 [ -pos2 ] permettent d’indiquer que le tri doit s’effectuer uniquement sur certains champs. Il est possible d’indiquer...
Récapitulatif des commandes à approfondir dans la documentation de référence
awk |
Filtre multifonctions. |
cmp |
Comparaison de deux fichiers. |
comm |
Comparaison de fichiers triés. |
compress, uncompress |
Compression, décompression de fichiers. |
cpio |
Archivage et restauration de fichiers. |
crypt |
Cryptage et décryptage. |
cut |
Sélection de caractères ou de champs. |
df |
Informations sur l’espace disque libre. |
diff |
Comparaison de fichiers. |
du |
Informations sur l’espace disque utilisé. |
file |
Détermination du type de contenu. |
find |
Recherche de fichiers. |
fold |
Découpage de lignes. |
grep, egrep, fgrep |
Recherche d’expressions. |
gzip, gunzip |
Compression, décompression de fichiers. |
join |
Jointure entre deux fichiers triés. |
lp, lpstat, cancel |
Commandes d’impression du spouleur System V. |
lpr, lpq, lprm |
Commandes d’impression du spouleur Berkeley. |
nl |
Numérotation de lignes. |
od |
Visualisation de fichiers sous différents formats. |
pack, unpack |
Compression, décompression de fichiers. |
paste |
Concaténation de lignes entre plusieurs fichiers. |
pr |
Mise en forme de fichiers pour impression. |
qprt, qchk, qcan |
Commandes d’impression du spouleur AIX. |
script |
Capture d’une session sur un terminal. |
sed |
Éditeur de texte non interactif. |
sort |
Utilitaire de tri. |
split |
Éclatement d’un fichier en plusieurs fichiers. |
strings |
Recherche de texte dans... |
Quelques exercices
1) Sauvegarder son répertoire de connexion au format "tar zippé" en n’utilisant pas l’option éventuelle de compression de sa commande tar. L’archive sera créée sous /tmp et son nom comportera le nom de l’utilisateur et la pseudo-extension .tgz. Lister le contenu de l’archive, supprimer un fichier et le restaurer.
2) Même traitement avec la commande cpio (archive de pseudo-extension .cpio.gz).
3) Afficher le nom et la taille des cinq plus gros fichiers ordinaires sous /etc.
4) Dans le résultat de la commande ps -f, ne conserver qu’un seul espace entre chaque champ de chaque ligne.
5) Afficher les comptes dont l’UID est inférieur à 200 et qui n’ont pas de shell de connexion. Trier le résultat par UID décroissant.
Solutions
1) Sauvegarder son répertoire de connexion au format "tar zippé" en n’utilisant pas l’option éventuelle de compression de sa commande tar. L’archive sera créée sous /tmp et son nom comportera le nom de l’utilisateur et la pseudo-extension .tgz. Lister le contenu de l’archive, supprimer un fichier et le restaurer.
cd
tar cf - . | gzip > /tmp/$LOGNAME.tgz
gunzip < /tmp/$LOGNAME.tgz | tar tvf -
rm monfic # monfic est un de mes fichiers
gunzip < /tmp/$LOGNAME.tgz...