INTRODUCTION AU SYSTEME UNIX

Chapître 3

3 Éditeurs Standards
3.1 Les Éditeurs ed et sed
3.1.1 Adressage des Lignes
3.1.2 Commandes
3.1.3 L'Éditeur sed
3.2 L'Éditeur vi
3.2.1 Le Mode Insertion
3.2.2 Le Positionnement du Curseur
3.2.3 Recherche d'une Chaîne de Caractères
3.2.4 Ajuster l'Écran
3.2.5 Manipulation de Fichiers
3.2.6 Marquage de Texte
3.2.7 Modification de Texte
3.2.8 Copiage et Collage de Texte
3.2.9 Autres Commandes
4 Langage de Commande (Shell)
4.1 Commandes Externes et Commandes Internes
4.2 Shell, Login-Shell
4.3 Caractères Spéciaux
4.4 Expressions Rationnelles
4.4.1 Expressions Rationnelles Atomiques
4.4.2 Expressions Rationnelles
4.5 Le Login et l'Environnement Shell 4.6 Les Procédures et leurs Paramètres 4.7 Structures de Contrôle 5 Noyau Unix 6 Fichiers
6.1 Caractéristiques des Fichiers
6.2 Appels Systèmes Opérant sur les Fichiers
6.3 Communication entre Processus par Tubes
7 Processus
7.1 Caractéristiques des Processus
7.2 Gestion de Processus par le Système Unix
7.3 Appels Systèmes Opérant sur les Processus
7.3.1 Création de Processus
7.3.2 Fin d'un Processus
7.3.3 Attente de la Fin d'un Fils
7.3.4 Substitution
7.3.5 Quelques Primitives
7.4 Les Signaux
7.4.1 Caractéristiques des Signaux
7.4.2 Principaux Signaux
7.4.3 Appels Systèmes Associés aux Signaux

3 Éditeurs Standards

Bien que leurs interfaces utilisateur paraisse antique, une connaissance minimum des éditeurs de textes standard unix se révèle toujours utile pour plusieurs raisons:

ils sont présents sur presque toutes les machines, y compris les plus éloignées et le moins familières.
ils ne reclament que peu de ressources système et peuvent être utilisés sur des machines peu ou mal configurées ou en cours de modification système.
Ils sont très puissants et peuvent être utilisés depuis un programme.
Ils permettent de manipuler facilement les caractères spéciaux, des fichiers en octal, en hexadécimal ...

3.1 Les Éditeurs ed et sed

L'éditeur ed est un éditeur ligne relativement simple. Il travaille sur une copie du fichier dans un tampon et n'écrit le fichier que quand on demande un enregistrement. Les commandes agissent sur les lignes du tampon, pour les afficher, les modifier, en ajouter ou en supprimer, déplacer ou copier des lignes, ou remplacer des chaînes de caractères.

3.1.1 Adressage des Lignes

n désigne la n-ième ligne du fichier ;

$ désigne la dernière ligne du fichier ;

. désigne la ligne courante (permet d'indiquer des lignes à partir de ou jusqu'à la ligne courante ;

/exp/ désigne la première ligne après la ligne courante qui contient un motif dans l'ensemble représenté par l'expression rationnelle exp (la recherche est circulaire) ;

?exp? désigne la première ligne avant la ligne courante qui contient un motif dans l'ensemble représenté par l'expression rationnelle exp (la recherche est circulaire) ;

ad+nn est un entier et ad une adresse ayant l'une des formes décrites précédemment, désigne la ligne dont l'adresse est l'adresse ad augmentée de n ;

ad-nn est un entier et ad une adresse ayant l'une des formes décrites précédemment, désigne la ligne dont l'adresse est l'adresse ad diminuée de n.

3.1.2 Commandes

Toutes les commandes doivent être suivies de <CR> pour être exécutées.

[ad]a<CR>text<CR>. ("append") ajoute le texte text après la ligne adressée ;

[ad]i<CR>text<CR>. ("insert") ajoute le texte text avant la ligne adressée ;

[ad1[,ad2]]c<CR>text<CR>. ("change") change le texte des lignes adressées en text;

[ad1[,ad2]]d ("delete") supprime les lignes adressées ;

[ad1[,ad2]]mad3 ("move") déplace les lignes d'adresses ad1 à ad2 après la ligne d'adresse ad3. L'adresse ad3 peut prendre la valeur 0 et les lignes déplacées sont alors mises en début de fichier ;

[ad1[,ad2]]tad3 ("transfer") copie les lignes d'adresses ad1 à ad2 après la ligne d'adresse ad3. L'adresse ad3 peut prendre la valeur 0 et les lignes copiées sont alors mises en début de fichier ;

e[nomfich] ("edit") édite le fichier nomfich après avoir quitté l'édition du précédent. Si le fichier précédent n'a pas été enregistré, l'opération n'est pas effectuée ;

E[nomfich] ("edit") édite le fichier nomfich même si le fichier précédent n'a pas été enregistré ;

f[nomfich] ("file") change le nom du fichier édité en nomfich. Si le paramètre nomfich n'est pas fourni, cette commande affiche le nom du fichier édité ;

h ("help") affiche de l'aide concernant le dernier message d'erreur (message = ?) ;

H ("help") affiche systématiquement l'aide au lieu du ? quand une erreur se produit. On revient au mode normal en exécutant cette commande une seconde fois ;

[ad1,ad2]j ("join") joint les lignes adressées. Par défaut, joint la ligne courante et la suivante ;

[ad1[,ad2]]p ("print") affiche les lignes depuis celle d'adresse ad1 jusqu'à celle d'adresse ad2. Si une seule adresse est fournie, la commande affiche la ligne correspondante. Si aucune adresse n'est fournie, la ligne courante est affichée ;

[ad1[,ad2]]n ("number") affiche les lignes adressées précédées de leur numéro de ligne ;

q ("quit") quitte l'éditeur si les modifications ont été enregistrées ;

Q ("quit") quitte l'éditeur dans tous les cas ;

u ("undo") annule la dernière modification de tampon effectuée ;

[ad]r[nomfich] ("read") lit le contenu du fichier nomfich et le place dans le tampon après la ligne adressée (dernière ligne par défaut). Si nomfich n'est pas précisé, le nom de fichier courant (obtenu par la commande f) est utilisé. S'il n'y a pas de nom de fichier courant, il prend pour valeur nomfich ;

[ad1[,ad2]]w[nomfich] ("write") écrit les lignes adressées dans un fichier de nom nomfich. Si aucune adresse n'est précisée, toutes les lignes sont écrites dans le fichier. Si le fichier n'existe pas encore, il est créé. Le nom de fichier courant n'est pas modifié, sauf s'il n'y en avait pas, auquel cas il devient nomfich ;

[ad1[,ad2]]W[nomfich] ("write") a un effet similaire à celui de w, mais écrit les lignes adressées à la suite du contenu du fichier nomfich si celui-ci existe déjà ;

[ad]= indique le numéro de la ligne adressée ;

!cmd exécute la commande shell cmd puis rend la main à l'éditeur ;

[ad1[,ad2]]g/exp/comm_list ("global") applique les commandes de la liste comm_list sur toutes les lignes adressées contenant une chaîne de caractères correspondant à l'expression rationnelle exp ;

[ad1[,ad2]]s/exp/nouv_chaîne ("substitute") recherche, sur toutes les lignes adressées, la première occurrence de chaîne de caractères correspondant à l'expression rationnelle exp et la remplace par une nouvelle chaîne nouv_chaîne ;

[ad1[,ad2]]s/exp/nouv_chaîne/g ("substitute") recherche, sur toutes les lignes adressées, toutes les occurrences de chaînes de caractères correspondant à l'expression rationnelle exp et les remplace par une nouvelle chaîne nouv_chaîne ;

[ad1[,ad2]]s/exp/nouv_chaîne/n ("substitute") recherche, sur toutes les lignes adressées, la n-ième occurrence de chaîne de caractères correspondant à l'expression rationnelle exp et la remplace par une nouvelle chaîne nouv_chaîne ;

[ad1[,ad2]]v/exp/comm_list applique les commandes de la liste comm_list sur toutes les lignes adressées qui ne contiennent pas de chaîne de caractères correspondant à l'expression rationnelle exp.

3.1.3 L'Éditeur sed

L'éditeur sed est similaire à ed, mais il travaille en mode batch au lieu d'être interactif. La commande sed -f comm_fich source_fich applique l'ensemble des commandes ed contenues dans le fichier comm_fich à chacune des lignes du fichier à traiter source_fich. Le résultat est affiché sur la sortie standard.

3.2 L'Éditeur vi

L'éditeur vi est disponible sur toutes les machines UNIX. Il utilise deux modes : un mode insertion et un mode de commandes.

La syntaxe de commande d'appel de l'éditeur est vi [-r] fich1

3.2.1 Le Mode Insertion

a ("after") passe en mode insertion après la position courante du curseur

i ("insert before") passe en mode insertion avant la position courante

A ("append") passe en mode insertion à la fin de la ligne sur laquelle se trouve le curseur ;

I ("insert") passe en mode insertion avant le premier caractère non blanc de la ligne sur laquelle se trouve le curseur ;

Lorsque l'insertion de texte est terminée, on quitte le mode insertion pour passer au mode commande en appuyant sur la touche <ESCAPE>.

3.2.2 Le Positionnement du Curseur

l, <ESPACE> ou -> déplacent le curseur vers la droite, d'un caractère (jusqu'en fin de ligne) ;

h ou <- déplacent le curseur vers la gauche, d'un caractère (jusqu'en début de ligne) ;

j ou [arrowdown] déplacent le curseur vers le bas, d'une ligne (jusqu'en fin de fichier) ;

k ou [arrowup] déplacent le curseur vers le haut, d'une ligne (jusqu'en début de fichier) ;

.

.

.

3.2.3 Recherche d'une Chaîne de Caractères

/exp recherche la première occurrence correspondant à l'expression rationnelle exp à partir de la position courante du curseur, en avançant dans le fichier (la recherche est circulaire) ;

?exp recherche la première occurrence correspondant à l'expression rationnelle exp à partir de la position courante du curseur, en parcourant le fichier en arrière (la recherche est circulaire) ;

n (next) répète la dernière commande / ou ? ;

.

.

.

.

3.2.4 Ajuster l'Écran

<CTRL-L> efface et réaffiche l'écran ;

z <CR> réaffiche le texte, la ligne courante devenant la première ligne de l'écran ;

z- réaffiche le texte, la ligne courante devenant la dernière ligne de l'écran ;

z. réaffiche le texte avec la ligne courante au milieu de l'écran.

.

.

.

.

.

3.2.5 Manipulation de Fichiers

Remarque : le caractère : utilisé dans ces commandes (et qui doit être tapé) s'affiche sur la dernière ligne de l'écran : la ligne de commandes.

:w ("write") enregistre le fichier ;

:wq ("write and quit") ou ZZ enregistrent le fichier et quittent l'éditeur ;

:q ("quit") quitte l'éditeur si le fichier a été enregistré ;

:q! ("quit") quitte l'éditeur sans tenir compte des modifications effectuées ;

.

.

.

.

3.2.7 Modification de Texte

u ("undo") annule la dernière opération effectuée ;

U ("undo") rétablit la ligne courante, même si plusieurs opérations ont été effectuées dessus ;

J ("join") joint la ligne courante et la suivante ;

rx ("replace") remplace le caractère sur lequel le curseur est positionné par le caractère x ;

w ("word)" avance d'un mot ;

b ("back word") recule d'un mot ;

.

.

3.2.8 Copiage et Collage de Texte

L'éditeur vi gère 9 tampons dans lesquels les derniers morceaux de texte effacés, coupés ou copiés sont placés. On peut aussi utiliser des tampons personnalisés nommés de a à z.

numyy ou numY ("yank") copie num lignes à partir de la ligne courante comprise (une ligne par défaut) ;

p ("put") colle ce qui a été copié ou effacé après la position courante ;

P ("put") colle ce qui a été copié ou effacé avant la position courante ;

.

.

.

.