next up previous contents index
Next: Installation de Linux Up: Conservatoire National des Arts Previous: Arborescence d'un système Linux   Contents   Index

Subsections

Utilisation de Linux

Dans ce chapitre, nous allons aborder la manipulation courante d'un système Linux correctement installé. Pour les auditeurs du TMRI, il s'agit de PC sur lesquels sont installés des systèmes Mandrake Linux 8.1. Dans un premier temps, les manipulations se feront en mode texte afin de bien comprendre le fonctionnement du système, puis nous aborderons le mode graphique.


Trouver de l'aide

Il existe plusieurs types d'aide en ligne :

Le manuel

Le manuel en ligne est accessible par la commande man. Il est organisé en différentes sections :


Table 4.1: Sections du manuel (commande man)

Section Intitulé
1 les commandes utilisateur
2 les appels système
3 les bibliothèques de programmation
4 les fichiers spéciaux
5 les formats de fichiers
6 les jeux
7 divers
8 les commandes d'administration
9 le noyau


La syntaxe de la commande man est :

cd /usr/src
rm linux
mkdir linux-2.4.17
ln -s linux-2.4.17 linux
tar xvfz linux-2.4.17.tar.gz

Par défaut, les sections sont parcourues dans l'ordre des numéros. Il est possible de préciser le numéro de section lors de l'ouverture du manuel :

make dep
make clean
make bzImage

Lors de la lecture du manuel, il est possible de rechercher un motif à l'aide de la commande . Cette commande positionne le curseur sur la première occurrence du motif. Pour se positionner sur l'occurrence suivante, on utilisera la touche , pour l'occurrence précédente, . Pour quitter le manuel, on utilisera la touche .

La variable d'environnement MANPATH donne le chemin de recherche des pages de manuel :

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
default=linux
keytable=/boot/fr-latin1.klt
lba32
prompt
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
        label=Linux
        root=/dev/hdb1
        append=" devfs=mount"
        read-only
image=/boot/vmlinuz.old
        label=VieuxLinux
        root=/dev/hdb1
        append=" devfs=mount"
        read-only
other=/dev/hda1
        label=Windows
        table=/dev/hda

Il existe une base de mots clés pour la recherche dans les pages de manuel. Cette base est construite par la commande /usr/sbin/makewhatis. Les commandes apropos et whatis permettent d'effectuer des recherches dans cette base de données. [ATR]

TexInfo

C'est un projet de la FSF (Free Software Foundation) pour remplacer les pages de manuel classiques. La base de données d'informations est répartie et accessible par la commande info. Cette commande permet de visualiser en mode interactif des documents hypertexte. Le système est auto renseigné, il suffit de lancer info et de naviguer dans cet environnement pour avoir l'aide en ligne. [ATR]

Les HOWTO

Les HOWTO sont des documents expliquant comment effectuer une tâche donnée comme : "Installer Linux sur le même disque que Windows NT". Ils sont disponibles dans plusieurs formats (texte, PostScript, HTML) et sont installés dans le répertoire /usr/doc/HOWTO. Ce sont les premiers documents à consulter lorsqu'on recherche une information pouvant s'exprimer par Comment faire pour ? ''.

Il existe des traductions françaises de ces documents sur . [ATR]

Les documentations

A partir du répertoire /usr/doc, on trouve les documentations des paquetages installés. Le contenu est assez inégal et dépend du concepteur du paquetage. C'est néanmoins une ressource importante en terme de documentation. [ATR]

Autres sources d'information

Les sites Web

Certains sites Web proposent de la documentation en ligne ou téléchargeable sur le système Linux (voir tableau 4.2, page [*]).


Table 4.2: Sites Web de documentation sur Linux
Nom URL
Linux Center http://linux-center.org/fr/
Unix Guru Universe http://www.ugu.com/
LDP http://sunsite.unc.edu/mdw/linux.html/
Le guide du ROOTard http://www.freenix.fr/linux/Guide


D'autres sites proposent des nouvelles concernant Linux et les logiciels libres en général. Ce sont de bonnes sources pour se tenir informé des nouvelles versions de logiciels (voir tableau 4.3, page [*]).


Table 4.3: Sites Web de nouvelles sur Linux
Nom URL
Freshmeat http://www.freshmeat.net
Da Linux French Page http://linuxfr.org/


Les forums

Un grand nombre de forums existe traitant en totalité ou partie de Linux. Les plus importants et les plus fréquentés sont :

Les commandes

Principes de base

Nous allons voir les commandes utilisateur principales de Linux (il en existe plusieurs centaines). Les commandes sont des programmes écrits avec n'importe quel langage informatique pour résoudre un problème donné. Le système est évolutif et il est facile d'ajouter de nouvelles commandes. Toutefois, avant d'écrire une commande, il faut vérifier qu'il n'existe pas quelqu'un ayant déjà effectué ce travail par une recherche sur le système ou sur le Web.

Une commande Linux est toujours composée de la même façon :

Les options sont généralement composées du signe - et d'un caractère ou d'un mot. Elles modifient, ou précisent, le fonctionnement de la commande. La liste des paramètres permet de spécifier la cible de la commande. Les options et les paramètres sont séparés par des caractères blancs (espace ou tabulation).

Entrer et sortir de Linux

Connexion à un système Linux

Nous avons vu que Linux est un système multi-utilisateur, ce qui signifie que plusieurs personnes différentes sont susceptibles d'utiliser une même machine. Il est donc nécessaire que chacun s'identifie clairement auprès du système. Cette opération est réalisée lors de l'opération dite de login (du verbe anglais ``to log in'', qui signifie ``s'enregistrer'' dans le système).

Chaque utilisateur d'un système Linux est identifié par un nom unique : son login. Lorsqu'un utilisateur veut se connecter à un système Linux, il doit préciser son login lorsque le système lui présente sa mire de connexion. Certains login peuvent être associés à un mot de passe, dans ce cas, le système le demandera à l'utilisateur après qu'il ait saisi son login. La mire de connexion peut être graphique ou en mode texte.

Une fois que l'utilisateur a été identifié, il peut accéder au système. Pour cela, le système vous donne accès à un ``interpréteur de commandes'', positionné à un endroit particulier du système de fichier : le répertoire de base de l'utilisateur, encore appelé ``home directory'' (pour répertoire ``maison''). Comme son nom l'indique, ce répertoire peut être utilisé comme bon lui semble par son propriétaire : il est libre d'y enregistrer ses données personnelles, d'y donner accès aux autres utilisateurs ou, au contraire, de le protéger. Il est aussi utilisé pour y placer des fichiers de configuration propres à l'utilisateur. Il y a généralement un répertoire de base par utilisateur.

Généralement, le répertoire de base des utilisateur a la forme suivante :

[root@pc1 linux]# lilo
Added Linux *
Added VieuxLinux
Added Windows

Sur tout système Linux, il existe un utilisateur bien particulier qui bénéficie de tous les droits sur le système : l'administrateur du système, communément appelé utilisateur ``root''. Cet utilisateur se connecte comme tous les autres, mais nécessite de respecter certaines précautions évidentes :

Déconnexion d'un système Linux

Il est très important de se déconnecter et de ne jamais laisser une session ouverte sans surveillance, car une personne mal intentionnée pourrait très bien utiliser ce terminal à vos dépends. Il aurait tous vos droits, et effectuerait ses opérations en votre nom. La sécurité du système garantissant que vous seul pouvez vous connecter sous ce nom, grâce au mot de passe, vous seriez donc responsable des agissements de l'intrus. Le problème est d'autant plus sensible pour les sessions de l'utilisateur ``root''.

Pour quitter l'interpréteur de commande, vous pouvez utiliser :

Ces deux dernières commandes ont pour effet de sortir de l'interpréteur de commande courant4.1. Si ce dernier se trouve être le shell de connexion, alors l'utilisateur est déconnecté de la machine.

Arrêt et redémarrage du système

Il faut bien comprendre que Linux, tout comme la plupart des systèmes d'exploitation modernes, ne peut pas être arrêté en éteignant directement l'ordinateur, comme on le faisait autrefois avec le DOS. En effet, la plupart des systèmes d'exploitation utilisent une partie de la mémoire de l'ordinateur pour y stocker temporairement les données qui ont été lues à partir du disque et celles qui doivent y être écrites. Cette zone de mémoire constitue ce qu'on appelle un tampon (``buffer'' en anglais), et elle sert à accélérer les accès aux périphériques plus lents, que sont les disques durs et lecteurs de CD-ROM. Il va de soi qu'une requête de lecture sur des données déjà situées en mémoire est infiniment plus rapide que si elles ne s'y trouvaient pas. Il est en revanche plus difficile de comprendre pourquoi les requêtes d'écriture doivent être différées. La raison est la suivante : le système préfère différer l'écriture physique sur le disque parce qu'une autre requête d'écriture dans la même zone du disque peut très bien avoir lieu ultérieurement. Si les données qui n'ont pas été écrites sont ainsi modifiées par une requête ultérieure, il n'est plus nécessaire de les écrire, et ainsi le système peut économiser un temps précieux en ne le faisant pas. Si les données à écrire sont contiguës à celles d'une requête précédente, le système peut les écrire en bloc, ce qui est toujours plus rapide que de faire plusieurs écritures partielles (notamment parce que les têtes de lecture du disque n'ont pas à être déplacées). Enfin, si les données qui doivent être écrites font l'objet d'une requête de lecture, il va de soi qu'elles sont immédiatement accessibles. On voit que cette stratégie permet de travailler beaucoup plus vite. De facto, Linux utilise toute la mémoire vive libre pour ses tampons d'entrées / sorties, ce qui en fait un système extrêmement performant. Le gain en performances peut facilement atteindre un facteur 3 ou 4.

Le problème majeur est évidemment que si on éteint l'ordinateur brutalement, les données dont l'écriture a été différée sont perdues. Pire, parmi ces données, il est probable qu'il y ait des informations vitales pour le système de fichiers, ce qui fait qu'il risque fort d'être endommagé.

L'arrêt du système est une opération qui est du ressort de l'administrateur. On ne peut normalement le réaliser que sous le compte root, mais il est possible de déléguer ce droit à d'autres utilisateurs. Plusieurs commandes sont disponibles, les plus simples sont données ci-dessous :

halt
Permet d'arrêter le système,
reboot
Permet de le redémarrer le système,
shutdown
Permet de réaliser les opérations précédentes avec plus de souplesse (par exemple, il est possible de différer l'arrêt du système et d'envoyer préalablement un message d'avertissement aux utilisateurs.).

Remarquez qu'un système Linux bien configuré4.2 peut fonctionner en continu pendant de très longues périodes (plusieurs mois ou années) sans nécessiter d'être arrêter ou redémarré régulièrement. Dans le cadre d'une entreprise, l'arrêt d'un système est donc rare (normalement, uniquement pour des opérations de maintenance, mais il s'agit le plus souvent d'économiser de l'électricité).

Parcours du système de fichier

Identifier le répertoire courant

La commande pwd (pour ``Present Working Directory'') permet d'afficher le chemin complet du répertoire courant :

[root@pc1 linux]# lsmod
Module                  Size  Used by
es1371                 26528   0 
ac97_codec              9248   0  [es1371]
soundcore               3440   4  [es1371]
af_packet              11984   0  (autoclean)
nls_iso8859-15          3392   3  (autoclean)
nls_cp850               3632   3  (autoclean)
vfat                    9744   3  (autoclean)
fat                    30240   0  (autoclean) [vfat]
floppy                 46608   1  (autoclean)
nls_iso8859-1           2880   1  (autoclean)
isofs                  17104   1  (autoclean)

Vous remarquerez que le nom du répertoire courant (``remi'', ici) appairait dans l'invite de commande (aussi appelé le ``prompt''). Ce comportement est paramétrable, il serait envisageable de faire apparaître le chemin complet dans l'invite de commande4.3.

Lister le contenu d'un répertoire

La commande ls permet de lister le contenu du répertoire courant.

[remi@pc1 remi]$ ls
C/            GNUstep/      Lettres/  Nautilus/  remi.leblond.free.fr/
CNAM/         guide.zip     Mail/     nohup.out  RPMS/
Desktop/      Guide.zip     mbox      nsmail/    sciemat/
email/        IMAGES/       memoire/  portable/  src/
emap_264.exe  kvirc-2.0.0/  MIDI/     prog/      tmp/

Dans la liste retournée par ls, nous distinguons les répertoires, dont le nom se termine par $/$, des autres fichiers. Nous remarquons que le nom des fichier est sensible à la case (les fichiers guide.zip et Guide.zip sont distincts, ce qui n'aurait pas été possible avec Windows). Il faudra donc prendre garde à l'utilisation des majuscules lors du nommage des fichiers.

Il est possible de préciser en argument de la commande ls le nom d'un fichier ou d'un répertoire4.4:

[remi@pc1 remi]$ ls guide.zip 
guide.zip
[remi@pc1 remi]$ ls email/
photo1.jpg  photo3.jpg  photo5.jpg  photo7.jpg  photo9.jpg
photo2.jpg  photo4.jpg  photo6.jpg  photo8.jpg

Cela permet de lister uniquement un élément du répertoire (dans le cas d'un fichier, il s'agit du fichier lui même, pour un répertoire, il s'agit des fichiers qu'il contient).

Il est possible de préciser un motif de recherche (voir tableau 4.4, page [*]) pour faire porter la commande sur tous les fichiers que la commande ne retourne que les noms de fichiers répondant à ce motif. Par exemple, si on désire afficher les noms des fichiers commençants par p :

[remi@pc1 remi]$ ls e*
emap_264.exe

email:
photo1.jpg  photo3.jpg  photo5.jpg  photo7.jpg  photo9.jpg
photo2.jpg  photo4.jpg  photo6.jpg  photo8.jpg


Table 4.4: Symboles de substitution
Symbole Signification
$*$ Ensemble de caractères quelconques
$?$ Un caractère quelconque
$\{a,b,toto\}$ Un caractère ou un mot valant a, b ou toto
$[abc]$ Un caractère valant a, b ou c
$[a-c]$ Un caractère compris entre a et c


Exemple d'utilisation des symboles de substitution :

[remi@pc1 essai]$ ls
bilan1999  bilan2001      prévision2000  prévision2002
bilan2000  prévision1999  prévision2001
[remi@pc1 essai]$ ls bilan*
bilan1999  bilan2000  bilan2001
[remi@pc1 essai]$ ls *2001
bilan2001  prévision2001
[remi@pc1 essai]$ ls bilan{1999,2001}
bilan1999  bilan2001
[remi@pc1 essai]$ ls prévision200[12]
prévision2001  prévision2002
[remi@pc1 essai]$ ls bilan200?
bilan2000  bilan2001
[remi@pc1 essai]$ ls prévision200[0-2]
prévision2000  prévision2001  prévision2002

Il est possible d'obtenir plus de renseignement de la commande ls en l'utilisant avec l'option -l. Cette option permet de faire apparaître :

[remi@pc1 remi]$ ls -l
total 2196
drwxrwxr-x    2 remi     remi         4096 fév 24 23:42 aide/
...
drwx------    2 remi     remi         4096 fév 20 22:55 tmp/

Cet affichage présente beaucoup d'informations :

La commande stat permet d'afficher la "fiche signalétique" du fichier, regroupant les principales méta-données de ce dernier.

  bash$ stat file1
    File: "file1"
    Size: 3562         Filetype: Regular File
    Mode: (0777/-rwxrwxrwx)    Uid: ( 500/ sandra)  Gid: ( 500/ sandra)
  Device:  8,0   Inode: 2043      Links: 1
  Access: Wed Nov 18 18:52:42 1997(00000.00:26:18)
  Modify: Wed Nov 18 18:52:42 1997(00000.00:26:18)
  Change: Wed Nov 18 18:52:59 1997(00000.00:26:01)

En plus des attributs déjà vus, cette commande affiche :

L'option de la commande ls permet de faire apparaître les fichiers cachés du répertoire. Les fichiers cachés ont simplement un nom dont la première lettre est '.'. Ces fichiers n'ont pas d'autre caractéristiques que de ne pas apparaître par défaut lors de la consultation des répertoires. Il ne bénéficient pas de droits d'accès particuliers et peuvent être manipulés comme tout autre fichier. Pour les rendre visibles, il suffit de les renommer.

[remi@pc1 remi]$ ls -a
./                                  .gimp-1.2/       
../                                 .gnome/          
.AbiSuite/                          .gnome-desktop/  
aide/                               .gnome_private/ 
.ArmageTronrc                       .gnucash/       
.aumixrc                            .gnupg/         
.bash_history                       GNUstep/         
.bash_logout                        .gphoto/         
.bash_profile                       .grip          
.bash_profile~                      .gtkrc          
.bashrc                             .gtoasterrc     
C/                                  .ICEauthority

Enfin, l'option (pour Récursif) de la commande ls permet de parcourir les éventuels sous répertoires.

Naviguer dans les répertoires

La commande cd permet de changer de répertoire courant. Utilisée seule, elle permet de revenir au répertoire de connexion de l'utilisateur courant. Suivi d'un nom de répertoire, elle permet de descendre dans ce répertoire. Suivi de '..', elle permet de remonter dans le répertoire précédant. Suivi de '/', elle permet de remonter à la racine du système de fichier (voir 4.5, page [*] pour les autres symboles utilisables).


Table 4.5: Symboles de définition des chemins d'accès
Symbole Signification
.. Répertoire précédant
. Répertoire courant
/ Racine du système de fichier
Répertoire de connexion de l'utilisateur courant
Répertoire de connexion de l'utilisateur "util"


Exemple d'utilisation de la commande cd :

[remi@pc1 remi]$ pwd
/home/remi
[remi@pc1 remi]$ ls
C/            essai/        latex2e.ps  MIDI/      prog/                  
CNAM/         GNUstep/      Lettres/    Nautilus/  remi.leblond.free.fr/
Desktop/      guide.zip     Mail/       nohup.out  RPMS/
email/        IMAGES/       mbox        nsmail/    sciemat/
emap_264.exe  kvirc-2.0.0/  memoire/    portable/  src/
[remi@pc1 remi]$ cd essai 
[remi@pc1 essai]$ pwd
/home/remi/essai
[remi@pc1 essai]$ cd ..
[remi@pc1 remi]$ pwd
/home/remi

La commande cd peut être utilisée avec des chemins de différents types :

Des chemins absolus
, c'est à dire définis depuis la racine du système de fichier. Exemple :

Des chemins relatifs
au répertoire courant. C'est à dire définissant le déplacement nécessaire pour atteindre le répertoire voulu depuis le répertoire courant. Exemple :

permet d'atteindre le répertoire /etc depuis le répertoire /home/remi

Créer un nouveau répertoire

La commande mkdir (``Make Directory'') suivie d'un nom permet de créer un nouveau répertoire en dessous du répertoire courant.

Exemple d'utilisation de la commande mkdir :

[remi@pc1 essai]$ ls
bilan1999  bilan2001      prévision2000  prévision2002
bilan2000  prévision1999  prévision2001
[remi@pc1 essai]$ mkdir "Mon répertoire"
[remi@pc1 essai]$ ls
bilan1999  bilan2001        prévision1999  prévision2001
bilan2000  Mon répertoire/  prévision2000  prévision2002
[remi@pc1 essai]$ cd "Mon répertoire"
[remi@pc1 Mon répertoire]$ ls
[remi@pc1 Mon répertoire]$ pwd
/home/remi/essai/Mon répertoire

Supprimer un répertoire

La commande rmdir, ou rd (``Remove Directory'') permet de supprimer un répertoire vide. S'ils existent, les fichiers contenus dans le répertoire à effacer devront être supprimés au préalable.

Exemple d'utilisation de la commande rmdir :

[remi@pc1 essai]$ ls
bilan1999  bilan2001        prévision1999  prévision2001
bilan2000  Mon répertoire/  prévision2000  prévision2002
[remi@pc1 essai]$ rmdir Mon\ répertoire
[remi@pc1 essai]$ ls
bilan1999  bilan2001      prévision2000  prévision2002
bilan2000  prévision1999  prévision2001
[remi@pc1 essai]$ cd ..
[remi@pc1 remi]$ rmdir essai 
rmdir: `essai': Le répertoire n'est pas vide.

Comme nous avons vu que les répertoires étaient des fichier d'un type particulier, il est également possible d'utiliser la commande rm pour les supprimer, mais à condition d'utiliser l'option afin de permettre une suppression récursive des fichiers contenus dans le répertoire (il y a toujours au moins . et ..).

Manipulation de fichier


Visualiser le contenu d'un fichier

La commande cat suivi d'un nom de fichier permet d'afficher l'ensemble du contenu d'un fichier. Si on indique le nom de plusieurs fichiers, la commande cat concatène le contenu de ces fichiers (d'où le nom de la commande).

[remi@pc1 essai]$ cat bilan2000 
Ceci est le bilan de l'année 2000 :

L'année 2000 a vraiment été une bonne année !!!

Un problème se pose lorsque l'ensemble du fichier ne peut pas s'afficher à l'écran : seule la fin du fichier est alors visible. Dans ce cas, la commande more permet d'afficher le contenu d'un fichier écran par écran (l'utilisateur doit appuyer sur la touche ESPACE pour faire défiler le texte d'un écran ou ENTRÉE pour faire défiler d'une ligne. La commande more s'utilise de la même façon que cat.

Lors de l'affichage du contenu d'un fichier à l'aide de la commande more, l'utilisateur dispose d'outils de navigation et de recherche de texte comparables à ceux que propose l'éditeur de texte vi (voir 4.6, page [*]) :

Commande Action
/<texte> permet de recherche le texte <texte> dans le fichier affiché (/<texte>/i permet de ne pas tenir compte de la différence entre les majuscules et les minuscules).
'n' et 'N' permettent respectivement de rechercher la prochaine et la précédente occurrence du texte recherché avec la commande précédente.
`` permet d'atteindre la $n^eme$ ligne du fichier. Utilisé seul, permet d'atteindre la fin du fichier.


Copie de fichier

La commande cp (comme ``CoPy'') permet de copier des fichiers. La syntaxe à utiliser est la suivante :

cp cible destination

La cible peut être un fichier à copier ou un ensemble de fichiers défini en saisissant une liste de nom séparée par des espaces ou en utilisant des motifs (voir tableau 4.4, page [*]).

Si le dernier argument correspond à un nom de répertoire, cp copie dans ce répertoire chaque fichier indiqué en con­ servant le même nom. Sinon, s'il n'y a que deux fichiers indiqués, il copie le premier sur le second. Une erreur se produit si le dernier argument n'est pas un répertoire, et si plus de deux fichiers sont indiqués.

Voici quelques exemples d'utilisation de la commande cp :

Il est possible d'utiliser l'option pour effectuer une copie récursive de fichiers (par exemple, pour recopier tous les fichiers d'un répertoire, avec les sous répertoires qu'il contient.

L'option permet d'interroger l'utilisateur avant d'écraser des fichiers existants.


Déplacement de fichier

La commande rm (comme ``ReMove'') permet de déplacer des fichiers. Elle utilise la même syntaxe que la commande cp. Elle peut être utilisée pour renommer un fichier lorsque la source et la cible se trouvent dans le même répertoire.

Exemples d'utilisation de la commande mv :


Suppression de fichier

La commande rm (comme ``ReMove'') suivie du nom d'un ou plusieurs fichier permet de supprimer des fichiers.

Il est possible d'utiliser l'option pour effectuer une suppression récursive de fichiers (par exemple, pour supprimer tous les fichiers d'un répertoire, avec les sous répertoires qu'il contient).

L'option permet d'interroger l'utilisateur pour confirmer chaque suppression.


Liens de fichiers

Il est possible de définir des liens pointant vers un fichier unique. Tous les liens sont alors manipulés comme pourraient l'être le fichier pointé. Pour l'utilisateur, il n'y a pas de différence entre le lien et le fichier pointé et il utilisera le lien comme s'il s'agissait du fichier original.

On distingue deux types de liens :

Les liens physiques

Ils correspondent à un référencement multiple d'un même fichier du disque. Généralement, il n'y a qu'une seule référence par fichier du disque, mais Linux permet d'en créer plusieurs. Dans ce cas, aucun des liens n'est plus important qu'un autre, qu'il ait été créé en premier ou en dernier. Il n'y a pas de notion de généalogie. Un lien physique ne peut être définis qu'au sein du même système de fichier. Il est alors impossible de distinguer le fichier original d'un autre lien. Lors de la suppression d'un fichier lié plusieurs fois, le fichier du disque n'est réellement détruit qu'après la suppression du dernier lien y faisant référence (voir figure 4.1, page [*]).

La création d'un lien physique se fait à l'aide de la commande ln sans paramètres :

L'utilisation des liens physiques peut être périlleuse, du fait qu'il est impossible de distinguer le fichier orignal (ou maître) de ses références. Elle doit donc être évitée dans la mesure du possible. On utilisera donc de préférence des liens symboliques.

Figure 4.1: Lien physique
\includegraphics[width=5cm]{lien_physique.eps}

Les liens symboliques

Un lien symbolique correspond à un pointeur vers un autre fichier. Contrairement aux liens physiques, on distingue ici clairement le fichier référencé du lien y faisant référence (voir figure 4.2, page [*]). La suppression du lien n'a aucune conséquence sur le fichier référencé. De même, la suppression d'un fichier n'a aucune conséquence sur les liens y faisant référence (les liens sont alors ``cassés'' car ils pointent vers un fichier qui n'existe pas). Les liens symboliques peuvent être comparés aux raccourcis de Windows, à la différence qu'il s'agit ici d'une fonction de base du système de fichier et non d'une verrue qu'il est facile de contourner (en éditant directement un fichier raccourci ``Windows'' à l'aide d'un éditeur de texte vous remarquerez qu'il s'agit en fait d'un fichier ASCII contenant, entre autre, le nom du fichier pointé).

La création d'un lien symbolique se fait à l'aide de la commande ln en utilisant l'option '-s' :

Figure 4.2: Lien symbolique
\includegraphics[width={6cm}]{lien_symbolique.eps}

Recherche de fichier

Il existe plusieurs commandes permettant de rechercher des fichiers dans un système Linux. Traditionnellement, la commande find permet de retrouver un fichier en parcourant l'arborescence des répertoires. La commande locate permet d'accélérer très sensiblement les recherches en exploitant une base de données des fichiers du système.


La commande find

Il vous sera sans doute nécessaire de rechercher des fichiers selon un critère donné dans toute une arborescence de répertoires. Pour cela, vous utiliserez la commande find. Cette commande est très puissante, mais dispose d'une syntaxe assez compliquée, du fait des nombreuses possibilités qu'elle offre. Pour rechercher un fichier en se basant sur son nom, la syntaxe de la commande est la suivante :

est le répertoire à partir duquel la recherche doit commencer et est le nom du fichier à rechercher. Ce nom peut contenir des caractères génériques du shell (des espaces, par exemple), mais dans ce cas il doit être placé entre guillemets afin d'éviter que ce dernier ne les interprète.

[remi@pc1 remi]$ find . -name toto
./CNAM/IA/DONNEES/toto
./essai/toto

find accepte d'autre options de recherche que le nom (partie de la ligne de commande), et peut effectuer d'autres actions que l'affichage du chemin des fichiers trouvés. Consultez les pages de manuel pour plus d'information à ce sujet [GIC02].


La commande locate

La commande locate4.5 fournit une façon sécurisée d'indexer et de rechercher rapidement des fichiers sur votre système. Elle exploite une base de données des fichiers du système sur laquelle elle effectue ses recherches, ce qui lui permet d'être beaucoup plus rapide que la commande find, qui recherche dans l'arborescence des fichier même. Ainsi, pour rechercher le fichier ``toto'' dans l'arborescence des fichiers du système, nous utiliserons la commande suivante :

La constitution de la base de données des fichiers du système est réalisée à l'aide de la commande slocate -c -u ( pour lire le fichier de paramétrage /etc/updatedb.conf et pour créer un base de données). Cette commande doit être lancée régulièrement pour maintenir une base de données à jour.

Recherche de texte dans un fichier

Recherche

La recherche d'une chaîne de caractères dans un ou plusieurs fichiers peut se faire à l'aide de la commande rep. Cette commande prend en premier paramètre le texte à rechercher, puis la liste des fichiers dans lequel ce texte doit être trouvé :

grep texte fichiers
grep "texte" fichiers

Le texte peut être placé entre guillemets si nécessaire (en particulier, s'il contient des espaces ou des caractères interprétés par le shell, comme et . Utilisé sans préciser de nom de fichier, grep recherche le texte sur l'entrée standard (par défaut, le clavier).

[remi@pc1 essai]$ grep année *
bilan2001:Ceci est le bilan de l'année 2001 :
bilan2001:L'année 2001 a vraiment été une bonne année !!!

grep accepte un grand nombre d'options, qui ne seront pas décrites ici. Par exemple, l'option permet de ne pas distinguer les majuscules des minuscules lors de la recherche. Consulter les pages de manuel pour plus d'information à ce sujet.

Remplacement de texte

Le remplacement de texte dans un fichier peut être effectué de manière automatique, c'est-à-dire sans avoir à ouvrir le fichier dans un éditeur, grâce à la commande sed (abréviation de l'anglais ``Stream Editor''). Cette commande est en fait un utilitaire de manipulation de flux de données, qui permet d'effectuer des traitements plus généraux que le simple remplacement de texte, mais c'est malgré tout pour cette opération qu'elle reste la plus utilisée.

sed peut travailler à la volée sur un flux de données textuelles, que ce flux provienne de l'entrée standard ou d'un fichier. Par défaut, il écrit le résultat de son travail sur le flux de sortie standard. Les opérations qu'il doit effectuer sur le flux de données peuvent être spécifiées de différentes manières, soit en fournissant un fichier script à l'aide de l'option , soit directement sur la ligne de commande, avec l'option . La syntaxe utilisée pour appeler sed est donc typiquement la suivante :

ou :

est le fichier sur lequel sed doit travailler, et est le fichier devant recevoir le flux de données modifiées. Notez que cette commande utilise une redirection du flux de sortie standard dans un fichier.

sed peut effectuer un grand nombre de commandes différentes et est réellement un outil très puissant. Cependant, nous ne verrons ici que la commande qui permet d'effectuer un remplacement de texte. Cette commande utilise la syntaxe suivante :

est le texte à rechercher, est le texte de remplacement, et est un jeu d'options exprimant la manière dont le remplacement doit être fait. Les options sont spécifiées à l'aide de simple caractères, les plus utiles étant sans doute , qui permet d'effectuer un remplacement global (au lieu de ne remplacer que la première occurrence sur la ligne du texte rencontrée), et , qui permet d'effectuer une recherche sans tenir compte de la casse des caractères.

Par exemple, la ligne de commande suivante :

permet de remplacer toutes les occurrences de la chaîne de caractères ``bonjour'' par la chaîne de caractères ``bonsoir'' dans le texte du fichier , et d'enregistrer le résultat dans le fichier .

Il ne faut pas utiliser le même nom de fichier pour le fichier source et le fichier de résultat. En effet, sed lit le fichier source à la volée, et effectuer une redirection sur ce fichier pendant son traitement provoquerait la perte irrémédiable de son contenu. Pour résoudre ce problème, on pourra utiliser un nom de fichier temporaire, et écraser le fichier original par ce fichier une fois la commande sed exécutée [GIC02].

Compression et décompression des fichiers

Linux fournit un grand nombre de programmes de compression de fichiers. Le meilleur est sans doute bzip2, et le plus compatible sans doute compress. Cependant, le plus utilisé et le plus courant, surtout pour la distribution des sources, reste incontestablement gzip. Nous allons décrire brièvement comment comprimer et décomprimer des fichiers avec gzip et bzip2 dans ce paragraphe.

La compression d'un fichier se fait de manière élémentaire :

est le fichier à comprimer. Après avoir effectué son travail, gzip renomme le fichier comprimé en . La compression d'un fichier avec bzip2 utilise exactement la même syntaxe, à ceci près qu'il faut remplacer gzip par bzip2. De plus, le nom du fichier comprimé porte l'extension au lieu de . Le fichier obtenu est donc nommé .

La décompression d'un fichier se fait à l'aide de la commande suivante :

ou

selon qu'il a été comprimé avec gzip ou bzip2. Après décompression, l'extension complémentaire ou est supprimée du nom de fichier [GIC02].


L'éditeur de texte vi

L'éditeur de texte utilisé le plus souvent sous Unix est vi, c'est un éditeur de texte pleine page qui, derrière ses apparences rustiques, est très puissant pour qui maîtrise sont utilisation.

Il existe sous Unix un très grand nombre d'éditeurs de texte, dont certains reprennent une copie conforme de l'ergonomie Windows, mais aucun n'est aussi rependu que vi. vi présente l'avantage d'être présent sur tous les systèmes Unix et fonctionne généralement même sur un système en mauvaise forme4.6, son apprentissage est donc essentiel à qui veut utiliser correctement un système Unix.

Par contre, son ergonomie particulière risque fortement de perturber les habitués des éditeurs de texte sous Windows. Oubliez ici votre souris, elle ne vous sera que d'une faible utilité. Ne cherchez pas les commandes dans un quelconque menu ou une barre d'icône, il n'y en a pas... Après ce petit lavage de cerveau, nous allons pouvoir nous pencher sur la question.

Utilisez la commande vi suivi éventuellement du nom du fichier à éditer pour entrer dans l'éditeur. Vous voyez alors apparaître le contenu de votre fichier et l'interface utilisateur de vi (voir figure 4.3, page [*]). En fait, l'interface utilisateur de vi se résume à la dernière ligne, en bas de l'écran. Austère non ?

Figure 4.3: Interface utilisateur de vi
\begin{figure}\begin{center}
\begin{verbatim}Ceci est le bilan de l'année 2000...
...
~
~
~
''bilan2000'' 3L, 85C 1,35 Tout\end{verbatim} \end{center}\end{figure}

L'éditeur vi permute régulièrement entre deux modes différents :

Pour passer du mode ``édition'' au mode ``commande'', il faut presser la touche ECHAP. Pour passer du mode ``commande'' au mode ``édition'', il faut entrer une commande d'édition (voir tableau 4.6, page [*]). Généralement, vi se lance en mode ``édition''. Il est possible de se déplacer dans le texte à l'aide des touches de direction, aussi bien en mode ``édition''4.7. qu'en mode ``commande''.


Table 4.6: Commandes de l'éditeur vi
Commande Explication
a Ajoute du texte après la position courante
A Ajoute du texte à la fin de la ligne courante
i Ajoute du texte avant la position courante
I Ajoute du texte au début de la ligne courante
r Remplace le caractère courant
R Remplace les caractères suivants
dd Efface la ligne courante
dw Efface le mot courant
d$ Efface la fin de la ligne courante
cw Change le mot courant
c$ Change la fin de la ligne courante
J Joint la ligne courante et la ligne suivante
<numéro>G Atteint un numéro de ligne
G Atteint la fin du fichier
:q Quitte l'éditeur (provoque une erreur si le fichier a été modifié depuis le dernier enregistrement).
:q! Quitte l'éditeur en ignorant les modifications apportées au fichier
:w Enregistre le fichier courant
:wq ou :x Quitte l'éditeur en enregistrant les modifications du document
/<texte> Recherche le texte à partir de la position courante en descendant dans le fichier
?<texte> Recherche le texte à partir de la position courante en remontant dans le fichier
n Atteint la prochaine occurrence du texte recherché (dans le sens défini pour la recherche)


Voici les commandes nécessaires pour ajouter une ligne en fin de fichier :


Table 4.7: Motifs de recherche utilisables avec vi
Motif Signification
Début de la ligne
Fin de la ligne
Caractère quelconque
Répétition quelconque du motif précédant (de 0 à n fois)
Répétition du motif précédent (de 1 à n fois)


Pour effectuer une recherche, il est possible d'utiliser des motifs de recherche (voir tableau 4.7, page [*]). Ainsi, pour rechercher toutes les lignes contenant les mots ``toto'' et ``tutu'' dans cet ordre, nous utiliserons la commande :

/toto.*tutu

De même, pour rechercher toutes les lignes commençant par ``toto'', nous utilisons la commande suivante :

/^toto

De même, pour rechercher les lignes commençant par ``toto'' et finissant par un numéro, nous utiliserons la commande suivante :

/^toto.*[0-9]$

Les entrée - sorties de de commandes

Principes

Nous avons constaté jusqu'à présent que les commandes utilisaient l'écran et le clavier pour communiquer avec l'utilisateur. Ce mode de fonctionnement est tout à fait adapté à une utilisation interactive du système, dans laquelle l'utilisateur transmet des ordres au système à l'aide du clavier et lit les réponses du système sur l'écran.

Tous les programmes Linux sont lancés avec trois flux de données ouverts : l'entrée standard (stdin), la sortie standard (stdout) et la sortie des erreurs (stderr).

Par défaut, l'entrée standard est le clavier et les sorties sont dirigées sur l'écran. Il est possible de rediriger l'entrée ou la sortie vers un fichier ou vers une autre commande. Ceci permet d'enchaîner des traitements sur un flot de données.

D'une façon générale, on retrouve donc trois flux pour toutes les commandes (voir figure 4.4, page [*]) :

Par défaut, les sorties standard et erreur sont redirigées sur l'écran et l'entrée standard est prise sur le clavier.

Figure 4.4: Les entrées-sorties de commandes
\includegraphics[width={15cm}]{ES_commandes.eps}

Exemple

[remi@pc1 essai]$ rm a toto
rm: remove write-protected file `a'? y (sortie standard,
                        réponse lue sur entrée standard)
rm: cannot remove `toto': Aucun fichier ou répertoire de ce type
                                         (sortie erreur)

[remi@pc1 essai]$ ls . toto
ls: toto: Aucun fichier ou répertoire de ce type
                                         (sortie erreur)
.:                                     (sortie standard)
bilan1999  bilan2001      prévision2000  prévision2002
bilan2000  prévision1999  prévision2001

Redirection de commandes

Nous avons vu que, par défaut, les entrées de commandes proviennent du clavier et les sorties (standard et erreur) sont envoyées sur l'écran, ce qui convient généralement dans le cadre d'une utilisation interactive du système. Il est toutefois possible de rediriger les entrées comme les sorties vers ou depuis :

Redirection vers un fichier

Pour rediriger la sortie standard d'une commande vers un fichier, on ajoute le symbole > suivi d'un nom de fichier à la commande. La ligne de commande permet de créer4.8 un fichier nommé toto contenant la liste des fichiers du répertoire courant.

On obtient un résultat légèrement différente en utilisant ». Ici le flux de la sortie standard est ajouté à la fin du fichier et ne remplace plus l'ensemble du contenu du fichier. De ce fait, si le fichier ``toto'' contient le texte ``Ceci est mon texte'', la commande ajoutera la liste des fichiers à la fin du texte ``Ceci est mon texte'', alors que aurait écrasé le contenu du fichier toto.

[remi@pc1 essai]$ cat toto
Ceci est mon texte
[remi@pc1 essai]$ ls >> toto
[remi@pc1 essai]$ cat toto
Ceci est mon texte
bilan1999
bilan2000
bilan2001
prévision1999
prévision2000
prévision2001
prévision2002
toto

Nous savons maintenant rediriger la sortie standard des commandes dans un fichier. Pour rediriger la sortie des erreurs, nous utilisons 2> ou , de la même façon que > ou ».

Ainsi, 4.9 permet d'obtenir la liste des fichiers du répertoire courant dans le fichier ``toto'' et de stoker les éventuelles erreurs générées par la commandes dans le fichier ``erreurs''.

Pour rediriger l'entrée standard d'une commande depuis un fichier, on utilise < après la commande. Ainsi, permet d'utiliser ``fichier2'' pour l'entrée standard de la commande .

Redirection vers une autre commande


Table 4.8: Syntaxe de lancement de commandes
Saisie Signification
La commande est exécutée normalement, le symbole d'invite sera affiché lorsqu'elle se terminera.
La commande est exécutée en arrière-plan, ce qui signifie qu'elle n'a en principe pas accès au terminal. Le shell reprend donc la main immédiatement, et affiche son symbole d'invite alors que la commande continue à s'exécuter en tâche de fond. Bash affiche une ligne du type

indiquant le numéro du job à l'arrière-plan suivi du PID c'est-à-dire de l'identifiant de processus. Lorsque la commande se termine, Bash affichera une ligne :

juste avant de proposer un nouveau symbole d'invite.

La commande est exécutée, mais sa sortie standard est dirigée vers le fichier indiqué. Seule la sortie d'erreur s'affiche à l'écran.
La sortie standard est ajoutée en fin de fichier sans en écraser le contenu.
La commande est exécutée, mais ses informations d'entrée seront lues depuis le fichier qui est indiqué plutôt que depuis le terminal.
Les deux commandes sont exécutées simultanément, l'entrée standard de la seconde étant connectée par un tube (pipe) à la sortie standard de la première.


Manipulation de processus

Qu'est-ce qu'un processus

Lancer une commande en tâche de fond

Consulter la liste des processus


La commande jobs

Exemple d'utilisation de la commande jobs :

[remi@rapido remi]$ jobs
[1]   Running                 emacs CNAM/linux/utilisation.tex &
[2]-  Running                 xdvi &
[3]+  Running                 gv &
[4]+  Stopped                 vi

Où ou peut lire les informations suivantes :

Ou peut intervenir sur les jobs à l'aide des commandes suivantes :


La commande ps


La commande top

Interaction avec les processus

Principes des signaux


Table 4.9: Principaux signaux de contrôle de processus
Numéro de signal Signification
15 Terminaison ``douce4.10'' de processus
9 Destruction ``violente4.11'' de processus
19 Suspension de processus
18 Reprise d'exécution de processus suspendu


Envoi de signal à un processus

Commande kill

La commande chmod permet de modifier les droits d'un ou plusieurs fichiers en utilisant le mode numérique ou le mode littéral.

La commande umask permet de fixer les droits qui seront enlevés par défaut pour la création de nouveaux fichiers. Cette commande est généralement lancée une fois lors de l'ouverture de session, elle est intégrée à l'interpréteur de commandes et sa syntaxe varie en fonction de celui que l'on utilise. Il est conseillé de positionner le masque en numérique pour s'affranchir des différences syntaxiques.

Les commandes chown et chgrp permettent de changer, respectivement le propriétaire et le groupe d'un fichier.


next up previous contents index
Next: Installation de Linux Up: Conservatoire National des Arts Previous: Arborescence d'un système Linux   Contents   Index

Document rédigé par Rémi LEBLOND (remi.leblond@free.fr)