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