Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Programmation shell sous Unix/Linux
  3. Les commandes filtres
Extrait - Programmation shell sous Unix/Linux ksh, bash, norme POSIX (avec exercices corrigés) (7e édition)
Extraits du livre
Programmation shell sous Unix/Linux ksh, bash, norme POSIX (avec exercices corrigés) (7e édition)
2 avis
Revenir à la page d'achat du livre

Les commandes filtres

Présentation

Ce chapitre présente les principales commandes filtres d’Unix. Ces commandes traitent un flux de données issues de l’entrée standard ou contenues dans un fichier. Elles peuvent être utilisées de manière autonome ou placées derrière un tube de communication. Les filtres s’utilisent pour la plupart de la même manière (quelques exceptions cependant). Les principales options de chaque commande sont exposées.

Syntaxe d’appel des commandes filtres

commande_filtre -options fic1 fic2 ... 
commande_filtre -options - 
commande_filtre -options < fichier 
commande | commande_filtre -options 

Visualisation de données

1. Consultation de données, création de fichiers : cat

Outre la consultation de fichiers, voici quelques exemples d’utilisation de la commande cat.

Syntaxe

cat [ options ] [ fichier ... ] 

Principales options :

-e

Matérialise les fins de lignes par un caractère $.

-t

Matérialise les tabulations par un caractère ˆI.

-v

Matérialise les caractères non affichables.

Exemples

Lorsque la commande cat ne reçoit pas de fichier en argument, elle lit ses données sur l’entrée standard (clavier). Ici, les données lues au clavier sont redirigées dans le fichier f1, ce qui a pour effet de créer le fichier si celui-ci n’existe pas ou de l’écraser si celui-ci existe.

$ cat > f1 
Ligne1 
Ligne2  
ˆd 
$ cat f1 
Ligne1 
Ligne2 

Le fichier f3 est la concaténation de f1 et f2 :

$ cat f1 
Ligne1 
Ligne2 
$ cat f2 
Ligne3 
Ligne4 
$ cat f1 f2 > f3 
 
$ cat f3 
Ligne1 
Ligne2 
Ligne3 
Ligne4 

L’option -t permet de visualiser les tabulations. Celles-ci sont matérialisées par le caractère ˆI :

$ cat f4 
mot1 mot2 
$ cat -t f4 
mot1ˆImot2 

L’option -e permet de visualiser les fins de ligne. Celles-ci apparaissent sous la forme du caractère $ :

$ cat -e f4 
mot1 mot2$ 

L’option -v permet d’afficher de manière visible les caractères non affichables. Un exemple d’utilisation a été donné au chapitre Paramétrage de l’environnement de travail - Historique de commandes, concernant le paramétrage du rappel de commande en ksh.

Affichage des alias permettant le rappel de commandes avec les flèches du clavier :

$ alias | cat -v 
__A=ˆP 
__B=ˆN 
__C=ˆF ...

Traitement de données

1. Comptage de lignes, de mots et de caractères : wc

La commande wc (word count) compte le nombre de lignes, de mots et de caractères. 

Syntaxe

wc [ options ] [ fichier ... ]  

Principales options :

-l

Compter le nombre de lignes.

-w

Compter le nombre de mots.

-c

Compter le nombre d’octets.

-m

Compter le nombre de caractères.

Exemples

Nombre de lignes, mots et caractères du fichier notes.txt :

$ wc notes.txt 
5  15  245 notes.txt 

Nombre de lignes uniquement :

$ wc -l notes.txt 
5 notes.txt 

Nombre de caractères contenus dans un nom de fichier saisi au clavier (attention au saut de ligne ajouté par la commande echo) :

$ read nomfic 
document.xls 
ˆd 
$ echo "$nomfic\c" | wc -c    # Linux : $ echo -n "$nomfic" | wc -c 
12 
$ 

Voici un fichier encodé en UTF-8 (les caractères accentués sont encodés sur 2 octets), manipulé sur un système dont l’encodage est également UTF-8 :

$ echo $LANG 
fr_FR.utf8 

Le fichier contient 2 caractères accentués :

$ cat utf8.txt 
élève 

La commande od nous montre que chaque caractère accentué du fichier est encodé sur 2 octets :

$ od -c utf8.txt 
0000000 303 251 l 303 250 v e \n 
0000010 

Nombre d’octets du fichier :

$ wc -c utf8.txt 
8 utf8.txt 

Nombre de caractères du fichier :

$ wc -m utf8.txt 
6 utf8.txt 

Les variables d’environnement qui définissent l’encodage sont LC_ALL, LC_CTYPE et LANG. Elles sont transmises aux commandes par le shell (elles doivent être exportées) et sont évaluées dans cet ordre : c’est la première valeur lue qui est prise en compte.

Obtenir la liste des valeurs de localisation (valeur liée au pays et à...

Compressions, archivages et conversions

1. Compressions : gzip, bzip2

Les commandes gzip/gunzip, bzip2/bunzip2 compressent/décompressent chaque fichier passé en argument sur la ligne de commande. La commande bzip2 possède un meilleur taux de compression. Ces commandes se trouvent en standard sur les systèmes Linux, et peuvent s’installer sur les systèmes Unix, si elles ne sont pas déjà présentes. La commande gzip produit l’extension .gz et la commande bzip2 produit l’extension .bz2.

Syntaxe de gzip

Compression :

gzip [ options ] [ fichier ... ]  

Décompression : 

gunzip [ options ] [ fichier ... ] 
zcat [ options ] [ fichier ... ] 

Principales options :

-c

Envoyer le résultat de la compression/décompression sur la sortie standard. La commande gunzip -c est équivalente à la commande zcat.

-t

Tester la validité de l’archive.

Si le nom de fichier est omis, les données à traiter sont lues sur l’entrée standard. 

Exemple

Compression du fichier java.doc :

$ gzip java.doc 

Le fichier original est remplacé par le fichier compressé :

$ ls java* 
java.doc.gz 

Décompression : le fichier original est restitué et remplace le fichier compressé :

$ gunzip java.doc 
$ ls java* 
java.doc 

Compression avec envoi du flux compressé sur la sortie standard (-c). Cette façon de procéder permet de conserver le fichier original :

$ gzip -c java.doc > java.doc.gz 
$ ls java* 
java.doc java.doc.gz 

Décompresser sans supprimer le fichier compressé :

$ gunzip -c java.doc.gz > java.doc 

Même chose que ci-dessus avec zcat :

$ zcat java.doc.gz > java.doc 

Les commandes bzip2, bunzip2 et bzcat fonctionnent de manière similaire, avec une légère différence dans l’utilisation des options....

Commandes réseau sécurisées

Cette section présente la commande de connexion à distance ssh et la commande transfert de fichiers sftp.

1. Connexion à distance : ssh

La commande ssh (secure shell) permet de se connecter à une machine distante. Les données échangées entre les machines sont cryptées.

Syntaxe

Connexion à une machine distante : 

ssh [-l nom_login] nom_machine  

Exécution d’une commande sur une machine distante : 

ssh nom_login@nom_machine [commande] 

À la première connexion sur un serveur, celui-ci envoie sa clé publique. Cette clé représente l’identifiant unique de la machine.

La commande ssh demande à l’utilisateur s’il reconnaît cette valeur de clé et s’il accepte la connexion. Dans l’affirmative, la clé du serveur est stockée dans le fichier $HOME/.ssh/known_hosts de la machine cliente.

Théoriquement, l’utilisateur de la machine cliente doit vérifier auprès de l’administrateur de la machine distante que la clé proposée est correcte avant d’accepter la première connexion.

Exemples

Première connexion au serveur www.monsite.com : l’utilisateur étant "root" sur la machine locale, ssh reprend cette identité sur la machine distante :

# ssh www.monsite.com 
The authenticity of host 'www.monsite.com (62.44.116.12)' can't be 
established. 
RSA key fingerprint is 1f:7b:e4:99:b1:c7:56:59:a0:a8:b1:ed:56:7f:19:a3. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added 'www.monsite.com,62.39.106.10' (RSA) to  
the list of known hosts. 
root@www.monsite.com's password: ***** 
# 

Se connecter sous l’identité christie sur la machine www.monsite.com...

Autres commandes

1. La commande xargs

La commande xargs, placée derrière un tube récupère les chaînes reçues en argument sur l’entrée standard et exécute commande2 en lui transmettant ces chaînes en tant qu’argument.

Syntaxe

commande1 | xargs [ options ] commande2  

Principales options :

-I chaine

Permet de lancer commande2 pour chaque valeur reçue sur l’entrée standard en remplaçant " chaine " par la valeur reçue.

-n nbar  commande2g

Ne prendra que nbarg arguments et sera lancée autant de fois que nécessaire. Utile pour ne pas dépasser le nombre maximum d’argument que commande2 peut tolérer.

-t

Affiche la ou les commandes réellement lancées (trace de l’exécution).

Intérêt de la commande xargs : elle permet de placer une commande (représentée par commande2) qui ne lit pas son entrée standard derrière un tube ou de faire exécuter plusieurs fois une commande (représentée par commande2) avec des lots d’arguments différents lorsque la liste de ces derniers est trop volumineuse pour lancer la commande en une seule fois.

Options -I et -n :

Si les options -I ou -n ne sont pas spécifiées, commande2 est exécutée une seule fois et utilise comme arguments la sortie standard de commande1. Si -I ou -n est utilisée, commande2 est lancée pour chaque argument / lot d’arguments reçus.

Premier exemple

Le fichier nom_fichiers.txt contient une liste conséquente de noms de fichiers à supprimer.

$ cat nom_fichiers.txt      # extrait du fichier  
rep1/f1a  
rep1/f1b  
rep2/f2a  
rep2/f2b  
...  
$ 

La commande suivante n’est pas valide...