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.
Il existe plusieurs types d'aide en ligne :
Le manuel en ligne est accessible par la commande man. Il est organisé en différentes sections :
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]
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 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]
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]
Certains sites Web proposent de la documentation en ligne ou
téléchargeable sur le système Linux (voir tableau 4.2, page
).
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
).
Un grand nombre de forums existe traitant en totalité ou partie de Linux. Les plus importants et les plus fréquentés sont :
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).
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 :
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.
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 :
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é).
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.
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
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.
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).
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 :
permet d'atteindre le répertoire /etc depuis le
répertoire /home/remi
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
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 ..).
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 |
permet d'atteindre la fin du
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 :
: Duplication de ``fichier1'' vers
``fichier2'',
: Copies des
fichiers ``fichier1'' et ``fichier2'' dans le répertoire
``mon_repertoire'',
: Idem, mais en utilisant
un motif de substitution.
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.
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 :
: Renom-mage ``fichier1'' en
``fichier2'',
: Déplacement des
fichiers ``fichier1'' et ``fichier2'' dans le répertoire
``mon_repertoire'',
: Idem, mais en utilisant
un motif de substitution.
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.
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 :
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.
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' :
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.
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 :
où 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 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.
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.
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 :
où 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 :
où 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].
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 :
où 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 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 ?
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''.
|
Voici les commandes nécessaires pour ajouter une ligne en fin de fichier :
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]$
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.
[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
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 :
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 2», 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 .
|
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 :
représente le numéro de job,
représente l'état du job (Running ou Stopped),
Ou peut intervenir sur les jobs à l'aide des commandes suivantes :
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.