Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Unix
  3. Sélection de commandes utiles
Extrait - Unix Les bases indispensables (avec exercices pratiques et corrigés) (3ième édition)
Extraits du livre
Unix Les bases indispensables (avec exercices pratiques et corrigés) (3ième édition) Revenir à la page d'achat du livre

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