Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Exécution de flux de textes en utilisant des filtres
Une page de Wikiversité.
| Chapitre 1 | |||
| Leçon : Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix | |||
|---|---|---|---|
| Retour au | Travailler en ligne de commande | ||
| Chap. suiv. : | Gestion de base des fichiers | ||
En raison de limitations techniques, la typographie souhaitable du titre, « Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix : Gérer des flux de textes en utilisant les filtres
Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Exécution de flux de textes en utilisant des filtres », n'a pu être restituée correctement ci-dessus.
Sommaire |
[modifier] Objectifs
Description: Les Candidats devraient être en mesure d'appliquer des filtres sur les flux texte(text streams). Ces taches incluent l'envoi de fichiers texte et de flux externes(output streams) à travers les filtres utilitaire texte (text utility filters) pour modifier ceux-ci, et utiliser les commandes standards UNIX issues des packages textutil GNU.
Fichiers, termes et commandes principaux inclus :
- cat
- cut
- expand
- fmt
- head
- join
- nl
- od
- paste
- pr
- sed
- sort
- split
- tac
- tail
- tr
- unexpand
- uniq
- wc
[modifier] Correspondance de chaîne et jokers
Le joker est un mécanisme de correspondance de chaîne pour la génération de noms de fichiers. L'objectif du joker est d'accroître la productivité : Localiser les fichiers dont vous ne vous souvenez pas. Localiser les fichiers qui ont quelque chose en commun. Travailler avec un groupe de fichiers plutôt qu'individuellement.
Le shell interprête ces caractères spéciaux :
! @ # $ % ^ & * ( ) { } [ ] | \ ; ~ ' " ` ?
Les caractères utilisés pour les jokers sont :
? * [ ] ~
Si vous utilisez un caractère joker, le shell va essayer de générer un fichier. Essayez la commande suivante :
echo all files *
[modifier] Caractères joker speciaux
? correspond à n'importe quel caractère (une et une seule fois). * n'importe quel caractère (zéro ou plusieurs fois) [abcfghz] un caractère parmi le jeu indiqué [a-z] Un caractère dans une série [!x-z] Pas dans cette série ~ Répertoire personnel ~utilisateur Répertoire personnel de "utilisateur"
Exemples:
? Seulement un caractère [aA]??? Quatre caractères, en commençant par a ou A. ~toto chemin du répertoire personnel de toto [!0-9]* Toute chaîne qui ne commence pas par un chiffre.
Que font ces commandes?
ls [a-z][A-Z]??.[uk] ls big* ls a???a ls ??*
[modifier] Shell et jokers
Une commande shell peut être une commande simple ou complexe.
ls -l [fF]* ls *.c | more ls -l [a-s]* | mail `users`
La première activité du shell est d'interpréter les jokers. Seulement le shell interprète les jokers sans guillemets.
[modifier] Guillemets et commentaires
[modifier] Guillemets
Utiliser des guillemets pour que le shell n'interprète pas les caractères spéciaux et ne transforme plusieurs mots en commandes shell.
- 'chaîne' Presque tout dans les guillemets est littéral :
echo 'Il le fait, "Pourquoi ?"' echo 'Parce que "#@&^:-)"' echo '$VAR='Moi
"chaîne" Comme 'chaîne' mais interprète $, \, !
echo "Que s'est-il passé ?" echo "Je ne sais pas mais lisez cette $REPONSE"
L'antislash \ traite le caractère suivant comme littéral :
echo \$VAR=Moi echo Que s\'est-il passé \?
Comment afficher l'antislash ?
echo \\
[modifier] Commentaires
Vous pouvez ajouter des commentaires sur une ligne de commande ou dans un script. Utiliser le caractère #. Un espace doit immédiatement précéder #.
Exemples:
echo $HOME # Print my Home directory echo "### PASSED ###" # Only this part is a comment Echo The key h#, not g was pressed.
Commandes
- cat, tac: Concaténer des fichiers et afficher le résultat sur la sortie standard.
- head, tail: Renvoyer sur la sortie standard la première (respectivement) la dernière partie des fichiers passés en argument.
- nl: Renvoyer le nombre de lignes des fichiers passés en argument.
- wc: Afficher le nombre de lignes, de mots et d’octets d’un fichier.
- cut: Supprimer une partie de chaque ligne d’un fichier.
- tr: Convertir ou éliminer des caractères.
- expand, unexpand: Convertir les tabulations en espaces et espaces en tabulations.
- Paste: Fusionner les lignes de deux fichiers.
- join: Join lines of two files on a common field.
- uniq: Supprimer les lignes en double dans un fichier trié.
- split: Découper un fichier en plusieurs.
- fmt: Formater simplement du texte.
- pr: Convertir des fichiers texte pour l'impression.
- sort: Trier les lignes d'un fichier texte.
- od: Dump files in octal and other formats.
Concaténer des fichiers Pour concaténer des fichiers, utilisez cat.
cat [options] [files...] tac [options] [files...]
Les résultats s'affichent sur la sortie standard (stdout).
options Courantes: -s: jamais plus d'une seule ligne blanche. -n: nombres de lignes générées.
Exemples:
cat fichier # Affiche fichier sur stdout. cat chapitre* # Affiche tous les fichiers commençant par chapitre sur stdout. cat -n -s fichier # Affiche fichier avec les numéros de ligne et les simple lignes blanches.
Pour concaténer les fichier à l'envers, utilisez tac. Présente le début et la fin du fichier
Pour voir seulement quelques lignes au début ou à la fin du fichier,
head [options] [files...] # début tail [options] [files...] # fin
Les résultats comme toujours sont affichés sur la sortie standard (stdout).
Options Courantes: -n: nombre de ligne à afficher. (avec les commandes head et tail) -c: nombre d'octet à afficher (head et tail) -f: ajouter à la sortie. (tail) -s #: itération pour chaque donnée # sec. (tail)
Exemples:
head fichier # affiche les 10 premières lignes de fichier. head -n 2 fichier # affiche les 2 premières lignes de fichier tail -c 10 fichier # affiche les 10 dernières lignes de fichier tail -f -s 1 /var/log/messages
Affiche les 10 dernières lignes de messages, actualise et vérifie s'il y a de nouvelles données toutes les 10 secondes.
Numéroter les lignes Pour ajouter les numéros de lignes à un fichier nl (numbering lines).
nl [options] [files...]
Options courantes: -i #: incrémente les numéros de ligne par #. -b: style de numérotation: a: numérote toutes les lignes, t: les ligne vides, n: aucune lignes . -n: format de numérotation: rz: justifier à droite, ln: justifier à gauche.
Exemples:
nl fichier # Ajoute les numéros de lignes à toutes les lignes de fichier. nl -b t -n rz fichier # Numérote les lignes non vides au format compléter par 0 (0-completed format à l'anglo-saxone c'est-à-dire 01-02-03-04-05...).
Compter des occurrences dans un fichier
Pour afficher le nombre de lignes, caractères, mots dans un fichier, utilisez wc (word count).
wc [options] [files...]
Options courantes: -c: la taille en octet. -m: le nombre de caractère. -w: le nombre de mots (words). -l: le nombres de lignes. -L: Longueur de la plus longue ligne.
Exemples:
wc *.[ch] # Affiche le nombre de lignes, mots et caractères de tous les fichiers .c et .h. wc -w fichier # Affiche le nombre de mots de fichier.
Couper des champs dans un fichier
Pour supprimer des sections de chaque ligne d'un fichier, utilisez cut (couper en anglais).
cut [options] [files...]
Options Courantes: -b #: extrait les octets à la position #. -f #: extrait le numéro du champ #.
Exemples:
cut -b 4 fichier # Affiche le 4e octet de chaque lignes de fichier. cut -b 4,7 fichier # Affiche les 4 et 7 èmes octets de chaque lignes de fichier. cut -b -2,4-6, 20- fichier # Extrait les caractères 1 et 2, 4 à 6 et 20 jusqu'à la fin de chaque ligne de fichier. cut -f 1,3 -d: /etc/passwd # Extrait le nom d'utilisateur (username) et ID de chaque ligne de /etc/passwd.
Le délimiteur par défaut est TAB mais peut être changer avec l'option -d.
[modifier] Conversion de caractères
Pour transposer stdin vers stdout, utiliser tr.
tr [options] JEU1 JEU2
Options courantes:
-d: supprimer les caractères dans JEU1. -s: remplacer chaque répétition de caractère dans JEU1 par un seul.
Examples:
tr ‘a‘ 'A' # Transposer petit a par A. tr ‘[A-Z]’ ‘[a-z]’ # Transposer majuscules par minuscules. tr -d ‘ ‘ # Supprimer tous les espaces.
Pour convertir les tabulations en espaces, utiliser expand et pour convertir les espaces en tabulations, utiliser unexpand.
expand fichier unexpand fichier
[modifier] Manipulation de lignes
Pour regrouper les lignes de différents fichiers, utiliser paste (coller en anglais).
paste [options] [fichiers...]
Options courantes:
-d #: délimiteur: utiliser # comme délimiteur. -s: serial: coller un fichier à la fois (une ligne par fichier).
Exemples:
paste f1 f2 # Affiche les lignes de f1 suivies de celles de f2 séparées par une tabulation. paste -d: fichier1 fichier2 # Utilise ':' comme délimiteur.
Pour fusionner les lignes des fichiers ayant un champ commun, utiliser join.
join fichier1 fichier2
Pour supprimer les lignes dupliquées dans un fichier trié (lignes consécutives), utiliser uniq.
uniq [options] [fichiers...]
Options courantes:
-d: n'afficher que les lignes dupliquées. -u: n'afficher que les lignes uniques.
Exemples:
uniq -cd file # Affiche les lignes dupliquées et leur nombre.
Découper des fichiers
Pour découper des gros fichiers, utiliser split.
split [options] fichier
Options courantes:
-l #: découper tous les # lignes. -b #: découper en # octets + b pour 512 octets, k pour Ko, m pour Mo.
Exemples:
split -l 25 fichier # Découpe fichier en fichiers de 25 lignes. split -b 512 fichier # Découpe fichier en fichiers de 512 octets. split -b 2b fichier # Découpe fichier en fichiers de 2*512 octets.
[modifier] Formatage pour l'impression
Pour formater un fichier, utiliser fmt.
fmt [options] [fichiers...]
Options courantes:
-w #: largeur de ligne maximum.
Exemples:
$ fmt -w 35 fichier # Affiche avec une largeur de 35 caractères.
Pour formater un fichier pour une imprimante, utiliser pr.
pr [options] [fichiers...]
Options courantes:
-d: interlignes doubles.
Exemples:
$ pr -d fichier # Formater fichier avec double-interlignes.
Trier les lignes de fichiers textes Pour trier les lignes d'un fichier, utiliser sort.
sort [options] fichier
Le résultat est affiché sur la sortie standard.
Options courantes:
-r: Inverse -f: Ignorer la casse -n: Numérique -o fichier: Redirige la sortie vers fichier -u: Pas d'enregistrements en double -t;: Utiliser ';' comme délimiteur, à la place des espaces ou tabulations.
Exemples:
sort fichier -r sort fichier -ro resultat
Binary file dump Pour afficher le contenu d'un fichier binaire, utiliser od.
od [options] fichier
Le résultat est affiché sur la sortie standard et commence par une adresse offset en octal.
Options courantes:
-c: each byte as character -x: 2-byte in hex -d: 2-byte in decimal -X: 4-byte in hex. -D: 4-byte in decimal.
Exemples:
$ od -cx /bin/ls
0000000 177 E L F 001 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
457f 464c 0101 0001 0000 0000 0000 0000
0000020 002 \0 003 \0 001 \0 \0 \0 224 004 \b 4 \0 \0 \0
0002 0003 0001 0000 9420 0804 0034 0000
0000040 ° ² \0 \0 \0 \0 \0 \0 4 \0 \0 006 \0 ( \0
b2b0 0000 0000 0000 0034 0020 0006 0028
0000060 032 \0 031 \0 006 \0 \0 \0 4 \0 \0 \0 4 200 004 \b
001a 0019 0006 0000 0034 0000 8034 0804
[modifier] Exercices
- Use wildcard characters and list all filenames that contain 'x' follow by 'in' in the /etc directory.
- Use wildcard characters and list all filenames that start with any character between 'a' and 'e' that have at least two more characters and do not end with a number.
- Use wildcard characters and list all filenames of exactly 4 characters and all filenames starting with an uppercase letter. Do not descend into any directory found.
- Use wildcard characters and list all files that contains 'sh' in /bin.
- Display you environment variable HOME preceded by the string "$HOME value is:"
- Display the contents of $SHELL with two asterisk characters before and after it.
- How would you display the following string of characters as is with echo using double quote and \.
- @ # $ % ^ & * ( ) ' " \
- Compose echo commands to display the following two strings:
- That's what he said!
- 'Never Again!' he replied.
- Display the number of words in all files that begin with the letter h in the /etc directory.
- How would you send a 2M file with two 1.44M floppy. How would you put back together the splitted file?
- What is the command to translate the : delimiter in /etc/password by #?