next up previous contents
Next: 2.7 Un peu de programmation [YB] Up: 2. Premières courses Previous: 2.5 Fichiers particuliers

Sous-sections

2.6 Commandes <<avancées>>

2.6.1 Description générique de l'utilisation d'une commande [YB]

Lorsque l'on souhaite décrire de manière concise l'utilisation d'une commande, on utilise un certain formalisme : on parle alors du format de la commande. Par exemple, pour la commande ln :



ln [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] [-version-control={numbered,existing,simple}] [-backup] [-directory] [-force] [-interactive] [-no-dereference] [-symbolic] [-verbose] [-suffix=backup-suffix] [-help] [-version] source [dest]



Une autre forme parfaitement équivalente est :



ln [options] source [dest]
Options: [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] [-version-control={numbered,existing,simple}] [-backup] [-directory] [-force] [-interactive] [-no-dereference] [-symbolic] [-verbose] [-suffix=backup-suffix] [-help] [-version]



L'exemple choisi est particulièrement complexe, mais il offre tous les symboles que vous pouvez rencontrer.

Premier principe : tout ce qui est entre crochets ('[' et ']') est facultatif, c'est-à-dire qu'il n'est pas obligatoire de donner l'option en question à la commande. Par exemple, dans ce qui précède, -backup est facultatif : son abscence n'empèchera pas la commande de s'exécuter, mais sa présence modifiera son fonctionnement. A l'inverse, ce qui n'est pas entre crochets est obligatoire : c'est le cas de source.

Deuxième principe : ce qui est entre accolades ('{' et '}') présente un choix, en général exclusif. Par exemple, pour l'option -version-control=, elle doit être suivie de l'un des mots numbered, existing ou simple (ainsi que l'option -V, d'ailleurs).

Ensuite, prenons le cas du premier crochet : -bdfinsvF. Ceci n'est manifestement pas un mot. Simplement, il est possible de donner aucune ou plusieurs options à la commande, parmis '-b', '-d', '-f', etc. et même des choses du genre '-dnsF', qui sont un collage de quatre options <<mono-lettre>>.

Enfin, pour les options '-S' ou '-suffix=', le mot backup-suffix doit être compris comme devant être remplacé par une chaîne de caractères de votre choix. Ceci vaut également pour les mots source et dest (qui en l'occurrence désignent des noms de fichiers). En général, la description textuelle de la commande permet de savoir (plus ou moins...) quoi mettre à la place de ces mots à remplacer.

Selon ce modèle, les trois commandes suivantes sont valides (et ici les deux dernières sont parfaitement équivalentes) :

ln un_fichier.html

ln -s -backup -S old un_autre_fichier.txt

ln -s -backup -suffix=old un_autre_fichier.txt

Voyez comment l'élément source, qui donc est obligatoire pour cette commande, apparaît sous le forme de noms de fichiers. De même, dans les deux dernières lignes, le paramètre backup-suffix apparaît sous la forme d'une chaîne de caractère : la chaîne <<old>>. Nous aurions put mettre la chaîne <<schtroumpf>>, cela n'eût fait aucune différence pour la commande (mais le résultat aurait peut-être été un peu étrange...)

Dans ce qui suit, nous utiliserons ce modèle pour décrire les commandes.

2.6.2 Retour sur la commande ls [YB]

La commande ls, avec l'option -l, permet d'obtenir les droits des fichiers d'un répertoire ainsi que de nombreuses autres informations. Considérons l'exécution de la commande 'ls -l' dans un répertoire maison :

[yves@kafka yves]$ ls -l 

total 40

drwxr-xr-x   2   yves  users   1024   Nov 22  23:08  Ada 

drwxr-xr-x   2   yves  users   1024   Dec 13  19:48  Courrier 

-rw-r-r-   1   yves  users  13312   Jan 24  02:32  Curr_Vit.sdw 

drwx---   5   yves  users   1024   Nov 27  21:28  Desktop 

drwx---   2   yves  users   1024   Dec  9  10:58  Docs 

drwxr-xr-x   2   yves  users   1024   Feb  1  19:13  Downloads 

drwx---   2   yves  users   1024   Jan  3  22:52  Mail 

drwxr-xr-x  21   yves  users   1024   Nov 23  21:36  Office50 

drwx---   2   yves  users   1024   Nov 22  23:09  Progs 

-rw-r-r-   1   yves  users    362   Feb  7  18:08  Xrootenv.0 

drwxr-xr-x   9   yves  users   1024   Dec 28  17:38  YvesWeb 

-rw-r-r-   1   yves  users   9860   Feb  2  19:08  cartes_visite.fig 

-rw-r-r-   1   yves  users   5561   Nov 22  23:15  config-kernel 

-rw-r-r-   1   yves  users   2643   Jan 13  22:55  config_kernel.txt

lrwxrwxrwx   1   yves  users     13   Mar 29  20:28  Doc_Linux -> LUG/Linux_doc

Décrivons les informations affichées.

La première ligne (celle commençant par <<total>>) totalise l'espace disque occupé par les fichiers listés, en kilo-octets.

Ensuite vient la liste des fichiers, un par ligne. Chaque ligne se décompose en plusieurs colonnes :

Les fichiers cachés (commençant par un point '.'), et notamment les répertoires spéciaux '.' et '..', n'apparaissent pas : il aurait fallut pour cela utiliser l'option '-a' de la commande ls.

2.6.3 Archivage de fichiers : tar et gzip [YB]

L'archivage est l'opération consistant à sauvegarder, d'une manière ou d'une autre, des fichiers importants : soit que l'on veuille garder une trace d'un état ancien, soit que la perte de ces fichiers serait dramatique et donc on préfère en avoir une copie quelque part (de préférence sur un support assez peu sensible à l'usure, comme un CD ou une bande).

L'alter ego de l'archivage est la restauration, qui est l'opération exactement inverse : à partir d'une sauvegarde, on récupère les fichiers qu'elle contient.

Il est rare de n'avoir qu'un seul fichier à sauvegarder, plutôt quelques dizaines ou centaines, et souvent l'espace occupé par ceux-ci est important. C'est pourquoi deux commandes furent créer pour faciliter cette opération, tar et gzip. D'autres commandes ou mécanismes plus sophitiqués existent, naturellement, mais ces deux commandes sont les plus répandues et toujours disponibles

2.6.3.1 La commande tar2.36

Elle permet, en gros, de <<coller>> plusieurs fichiers les uns au bout des autres, pour n'obtenir qu'un seul fichier plus facilement manipulable. Toute sa puissance réside dans le fait qu'elle peut sauvegarder toute une arborescence : si vos fichiers sont organisés en différents répertoires et sous-répertoires, la commande tar va <<descendre>> les répertoires qu'elle rencontre tout en conservant la strucutre, qui sera remise en place lors d'une restauration éventuelle. Notez que tar était initialement destinée à être utilisées sur des bands magnétiques (des unités de stockages remarquables par leur capacité, leur durée dans le temps, et leur lenteur), donc si vous voulez créer des archives sous forme de fichiers sur votre disque dur, il faudra utiliser l'option -f (décrite plus bas).

Les options de tar sont nombreuses. Le format de la commande est :

tar {c,d,r,t,u,x,A} [options] [fichier_tar] [fichiers...]

Ceci est évidemment un format abrégé. Normalement, fichier_tar est un fichier spécial (du répertoire /dev) qui correspond à un lecteur de bandes, sauf à utiliser l'option -f.

La première lettre désigne l'action à effectuer :

c
Création d'une nouvelle archive.
d
Compare les fichiers contenus dans fichier_tar avec les fichiers indiqués dans fichiers...
r
Ajoute les fichiers fichiers... à la fin de l'archive.
t
Affiche les noms des fichiers fichiers... s'ils sont contenus dans l'archives. Si le paramètre fichiers... est absent, liste les fichiers contenus dans l'archive.
u
Mise à jour : les fichiers fichiers... sont intégrés à l'archives s'ils ne s'y trouvent pas déjà, ou bien s'ils ont été modifiés.
x
Restauration des fichiers fichiers... depuis l'archive fichier_tar. Si fichiers... est absent, restaure tous les fichiers.
A
Permet de coller deux fichiers archives.
Quelques options, parmis les plus utilisées :

-f fichier
sans doute l'option la plus utilisée : permet d'utiliser un fichier sur disque, plutôt que des données sur bande, pour les opération d'archivage (sauvegarde ou restauration des fichiers).
-h
Déréférence les liens symboliques, c'est-à-dire, ne stocke pas le lien en tant que lien, mais plutôt le fichier sur lequel il pointe.
-ignore-failed-read
normalement, tar s'arrête avec un message d'erreur si elle rencontre des fichiers qu'elle ne peut lire (pour une raison ou pour une autre). Ce paramètre permet de continuer l'exécution de tar dans ce cas.
-k
lors de l'extraction, empèche d'écraser des fichiers existants par des fichiers contenus dans l'archive et ayant le même nom.
-v
mode <<verbeux>>, affiche le nom des fichiers sauvegardés ou restaurés.
-w
demande d'une confirmation avant d'effectuer une quelconque action.
-z
compresse les fichiers avec gzip avant de les sauvegarder, ou les décompresse lors de la restauration : permet donc d'obtenir une archive de taille réduite. Toutefois, l'algorithme de gzip est tel qu'il est plus efficace de compresser le fichier archive en un bloc, plutôt que chacun de ses fichiers.
-directory=rep
demande à tar de se placer dans le répertoire rep avant de faire quoi que ce soit.
-M
pour créer des archives en plusieurs morceaux : utile pour un stockage sur disquettes, par exemple. A utiliser avec l'option -L.
-P
normalement, le slash initial ('/') des noms de fichiers est supprimé par tar. Ce paramètre permet de stocker l'intégralité du chemin absolu de chaque fichier. Attention, ceci peut être dangereux lors de la restauration.
-L=taille
définit la taille en kilo-octets de chaque morceaux de l'archive. A utiliser avec -M.
La complexité de la commande justifie de donner ici quelques exemples. Remarquez que nous utilisons systèmatiquement l'option -v, pour avoir une liste de fichiers qui s'affiche à l'écran ; ceci n'est toutefois pas une obligation.

2.6.3.2 La commande gzip2.39

Quand à elle, permet de compresser un ou plusieurs fichiers. Cela consiste à appliquer un certain algorithme sur le contenu du fichier, pour obtenir à la fin un fichier de taille inférieure : ceci permet d'éviter trop de perte d'espace disque. Dans le cas de fichiers textes (pages HTML, documents de traitement de textes...), la compression est souvent très forte : il est courant de voir la taille du fichier ramenée à un quart de la taille initiale. Par contre, un algorithme de compression appliqué à des fichiers déjà compressés, ne permet pas de réduire leur taille, voire l'augmente légèrement... c'est notamment le cas des fichiers images dans certains formats, par exemple GIF ou JPEG. Notez que le résultat d'un compression appliquée à un fichier a pour résultat un nouveau fichier de taille certes inférieure, mais parfaitement illisible pour un \oeil humain. Et d'une manière générale, plus le fichier à compresser est volumineux, plus le taux de compression (le rapport entre la taille initiale et la taille après compression) est élevé.

L'opération inverse est évidemment possible : à partir d'un fichier compressé, on récupère alors le fichier dans sa forme initiale, sans aucune perte d'information (encore que ceci dépende des algorithmes ; celui utilisé par gzip ne provoque pas de perte d'information).

L'utilisation générale de gzip est de la forme :

gzip [options] [fichiers]

Quelques options :

-n
n est un nombre de 1 à 9. Permet de spécifier, en quelque sorte, la puissance de la compression : 1 est une compression minimum et rapide, 9 tente de compresser au mieux et donc plus lentement.
-d
pour décompresser un fichier compressé.
-r
lorsque que fichiers correspond à un répertoire, cette option permet de compresser les fichiers et les sous-répertoires qu'il contient.
-S suffix
précise quelle extension doit être utilisée (par défaut, c'est .gz). Utile lorsque l'on tente de décompresser des fichiers compressés avec d'autres utilitaires compatibles, tels que pkunzip sous DOS ou WinZip sous Windows (qui crééent une extension .zip).
Quelques exemples.

Il semble évident que dans l'optique de sauvegarder des fichiers, l'utilisation conjointe de tar et de gzip offre des possibilités intéressantes. Typiquement, une utilisation conjointe avec transfert du fichier archive sur une autre partition ou sur un réseau, serait quelque chose du genre (pour sauvegarder le répertoire /home) :

tar cvf backup.tar /home

gzip -9 backup.tar

cp backup.tar.gz /mnt/nfs (on utilise cp plutôt que mv, dans le cas ou la copie se passe mal)

rm backup.tar.gz (inutile de garder l'archive à son point de création, puisqu'elle a été copiée)

Par la suite, les fichiers ainsi sauvegardés pourront être restaurés par les opérations :

cp /mnt/nfs/backup.tar.gz .

gzip -d backup.tar.gz

tar xvf backup.tar

  
2.6.4 Réattribution d'un fichier : chown, chgrp

  
2.6.5 Modifier les droits sur un fichier ou un répertoire : chmod [YB]

Cette commande permet de modifier les droits (les attributs) d'un fichier. Si vous ne connaissez pas la notion de droits sur un fichier, consultez la section 2.3.2 page [*]. La première chose à bien comprendre, c'est que vous ne pouvez naturellement modifier les droits que d'un fichier dont vous êtes le propriétaire, sinon Linux ne serait pas un système très sécurisé...

chmod reconnaît les abbréviations r, w et x pour les droits (respectivement, lecture, écriture et exécution) et les abbréviations u, g et o pour les groupes de droits (respectivement, groupe relatif à l'utilisateur propriétaire, au groupe propriétaire, ou <<aux autres>>).2.40

Sous réserve que vous en ayez le droit, vous pouvez ajouter ou retirer un ou plusieurs droits d'un ou plusieurs groupes de droits, en indiquant les abbréviations des groupes concernés, puis un signe plus ('+') pour ajouter ou un signe monis ('-') pour retirer, puis les abbréviations des droits que vous voulez modifier.

Par exemple, pour accorder les droits en lecture et écriture pour le propriétaire et le groupe propriétaire sur le fichier Rapport.lyx, exécutez la commande :

chmod ug+rw Rapport.lyx

Notez que vous pouvez également appliquer ceci sur des répertoires.

Il est également possible d'utiliser les caractères jokers. Ainsi, pour accorder à vous seul le droit d'exécution sur tous les fichiers d'extension '.x' du répertoire courant, exécutez :

chmod u+x *.x

Enfin, l'option -R permet d'appliquer chmod récursivement sur l'arborescence contenue dans le répertoire, par exemple :

chmod -R u+x programmes/*.exe

Ceci va fixer l'attribut d'exécution sur tous les fichiers d'extension '.exe' dans le répertoire programmes et tous les sous-répertoires qu'il peut contenir.

  
2.6.6 Manipulation des liens : ln [YB]

Si vous ne l'avez déjà fait, consultez la section 2.2.3 page [*] pour bien comprendre la notion de lien sous Linux. La commande présentée ici permet de créer des liens, symboliques ou non. Sa forme générale est :

ln [options] fichier_à_lier fichier_lien

L'option la plus utile est l'option -s, qui permet de créer des liens symboliques plutôt que des liens symboliques. Voici un exemple typique d'utilisation de ln :

ln -s /mnt/cdrom /cdrom

Ceci va créer le fichier /cdrom, qui sera en fait un lien symbolique vers le répertoire /mnt/cdrom. Par la suite, vous pourrez indifféremment utiliser l'un ou l'autre dans vos commandes, par exemple :

mount /dev/hdd /cdrom

mount /dev/hdd /mnt/cdrom

...sont parfaitement équivalentes.

  
2.6.7 Montage et démontage de systèmes de fichiers : mount et umount [YB]

Ces deux commandes sont spécialement destinées au montage et au démontage des systèmes de fichiers, deux opérations essentielles décrites en 2.2.2 page [*].

La commande mount permet de monter un système de fichier en un point de l'arborescence. So forme est:

mount [options] [fichier spécial] [point de montage]

Si aucun paramètre n'est donné à la commande, on obtient simplement la liste des systèmes de fichiers actuellement montés. En principe, dès qu'un paramètre est donné, seul root peut utiliser mount.

L'utilisation la plus commune de mount est :

mount /dev/hdd /mnt/cdrom

Ceci monte simplement le système de fichiers présent sur le CD-ROM dans le lecteur, en l'accrochant au répertoire /mnt/cdrom. Notez qu'il est tout à fait possible, sur votre système, que le fichier spécial impliqué ne soit pas /dev/hdd. En principe, sous cette forme, vous verrez un message vous avertissant que le système de fichiers est monté en <<lecture seule>>. Cette petite complainte est normale, on ne peut écrire sur un CD-ROM.

Par ailleurs, la commande précédente peut échouer et renvoyer une erreure dans l'un des cas suivants :

Si la commande échoue, c'est le plus souvent pour l'une des raisons précédentes.

La commande mount ne possède que peu de paramètres. Citons :

-a
tente de monter tous les systèmes de fichiers indiqués dans /etc/fstab qui ne présentent pas l'option <<noauto>>. Dans ce cas, il n'est pas nécessaire de préciser un fichier spécial ni un point de montage (puisqu'ils sont déjà indiqués dans le fichier /etc/fstab).
-n
normalement, lorsque mount monte un système de fichier, celui-ci est noté dans le fichier /etc/mtab. Ce paramètre inhibe cette action.
-t <type>
indique à mount le type de système de fichiers que l'on tente de monter. Ceci ne devrait pas être nécessaire, en général mount devine assez bien à quoi il a affaire. Les types les plus courants sont :

msdos
pour les anciens systèmes MS-DOS ;
vfat
pour les systèmes Windows 95 et Windows 98 ;
ntfs
pour le système de Windows NT ;
iso9660
pour les CD-ROMs, du nom de la norme ISO qui leur est réservée ;
hpfs
pour le système OS/2
ext2
pour le système natif de Linux
nfs
pour les systèmes de fichiers exportés sur le réseau, selon la norme NFS.
-o <options>
Options complémentaires, pour affiner le montage. Nombre d'entre elles sont spécifiques d'un certains type de système de fichiers, mais certaines sont communes à tous, telles que :

noexec
pour interdire l'exécution de programmes présents sur ce système de fichiers ;
ro
protège le système de fichier contre l'écriture ;
rw
autorise lecture et écriture ;
remount
utilisée sur un système déjà monté, pour en modifier les options.
-v
affiche plein de messages d'informations lors du montage.
La commande umount effectue l'opération inverse, c'est-à-dire démonte le système de fichiers. En reprenant l'exemple précédent, son utilisation usuelle peut prendre l'une des deux formes suivantes, parfaitement équivalentes :

umount /dev/hdd

umount /mnt/cdrom

On peut donc spécifier indifféremment le fichier spécial ou le point de montage. La commande peut échouer dans l'un des cas suivants :

umount ne reconnait que les trois paramètres suivants, pratiquement jamais utilisés :

-a
tente de démonter tous les systèmes de fichiers notés dans /etc/mtab ;
-n
à l'instar de mount, lorsque umount démonte un système de fichiers, celui-ci est retiré du fichier /etc/mtab ; ce paramètre inhibe cela ;
-t <type>
ne démonte que les systèmes de fichiers du type indiqué.

  
2.6.8 Entrées/sorties directes de données : dd [YB]

Cette commande est l'une des plus dangereuses qui soit : elle permet d'écrire d'un endroit à un autre une série d'octets, sans s'occuper d'une eventuelle structuration de là où elle écrit. Vous pouvez ainsi, en une seule ligne, faire totalement et irrémédiablement disparaître les partitions de votre disque dur et rendre celui-ci inutilisable...

So forme générale est la suivante :

dd [-help] [-version] [if=file] [of=file] [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes] [skip=blocks] [seek=blocks] [count=blocks] [conv={ascii,ebcdic,ibm,block,unblock,lcase,ucase,swab,noerror,notrunc, sync}] 

L'utilisation la plus fréquente que vous aurez sans doute à en faire, est de prendre l'image binaire d'une disquette. Par image binaire, on entends habituellement recopier dans un fichier le contenu exact de la disquette, sans tenir compte de la manière dont elle est structurée ou formattée, sans savoir si elle contient ou non des fichiers. La commande est généralement :

dd if=/dev/fd0 of=image.bin

Ceci provoque la lecture par dd de tout se qui se trouve derrière /dev/fd0 (qui correspond au premier lecteur de disquette), sans opérer un quelconque montage de système de fichiers, et l'écriture de ce qui est lu dans le fichier image.bin dans le répertoire courant. Le fichier obtenue sera de la taille de la disquette en tant que support <<brut>>, c'est-à-dire légèrement supérieure à l'espace normalement disponible sur une disquette.

Ceci est particulièrement utile lorsque l'on souhaite copier une disquette sans s'occuper des fichiers qui sont dessus, ou bien lorsque le système de fichiers qu'elle contient ne peut être reconnu.

Les paramètres de dd les plus utilisés sont :

-help
donne un cours message d'aide ;
-version
donne la version de dd installée ;
if=file
pour <<input file>> (fichier d'entrée) ; indique la source d'octets que dd doit utiliser ; par défaut, c'est l'entrée standard, c'est-à-dire le clavier.
of=file
pour <<output file>> (fichier de sortie) ; indique vers quoi dd doit inscrire les octets qu'elle a lue ; par défaut, c'est la sortie standard, c'est-à-dire l'écran.
ibs=bytes
pour utiliser une lecture par blocs d'octets : ceci indique la taille des blocs (en nombre d'octets à lire en une seule fois).
obs=bytes
pour utiliser une écriture par blocs d'octets : ceci indique la taille des blocs (en nombre d'octets à écrire en une seule fois).
bs=bytes
combine les deux paramètres précédents, si l'on veut des blocs de même taille en lecture et en écriture.
skip=blocks
indique combien de blocs il faut <<sauter>> avant de commencer à lire ; la taille en octets de ces blocs est définie par ibs ou bs.
seek=blocks
indique combien de blocs il faut <<sauter>> avant de commencer à écrire ; la taille en octets de ces blocs est définie par obs ou bs.
count=blocks
indique combien de blocs il faut lire. Par défaut, dd lit tous les blocs qu'elle trouve.
Donnons quelques exemples, pour éclairer un peu tout cela.

La commande suivante sauvegarde la Table des Partitions du premier disque dur IDE (cette table se trouvant dans le premier secteur physique du disque) dans le fichier partitions.img :

dd if=/dev/hda of=partitions.img bs=512 count=1

Le fichier résultant a une taille d'exactement 512 octets, qui est la taille normal d'un secteur de disque. La Table des Partitions pourra par la suite être restaurée avec :

dd if=partitions.img of=/dev/hda

Les spécifications de taille sont superflues dans cette dernière commande.

2.6.9 Création et contrôle du système de fichiers de Linux : mke2fs, ext2fsck [YB]

Il en est de Linux comme des autres systèmes : pour qu'un disque ou une partition puisse être utilisée avec le système de fichiers propre à Linux, il est nécessaire de la préparer pour cela. De plus, au court du temps, de petites erreurs ou incohérences peuvent se glisser dans la structure du système de fichier : il est donc nécessaire de le vérifier régulièrement, et éventuellement de le corriger.

2.6.9.1 La commande mke2fs

Cette commande est utilisée pour créer un système de fichiers (vide, sans aucune information à l'intérieur) sur un disque ou une partition. Elle possède de nombreuses options, nous n'évoquerons ici que les plus fréquemment utilisées.

Son format complet est :

mke2fs [ -c | -l filename ] [ -b block-size ] [ -f fragment-size ] 
[ -i bytes-per-inode ] [ -N number-of-inodes ] 
[ -m reserved-blocks-percentage ] [ -o creator-os ] [ -q ]  
[ -r fs-revision-level ] [ -R raid_options ] [ -s sparse-super-flag ] 
[ -v ] [ -F ] [ -L volume-label ] [ -M last- mounted-directory ] 
[ -S ] [ -V ] device [ blocks-count ]

Quelques options :

-c
Recherche les blocs physiquement défectueux lors du formatage
-i bytes-per-inode
Nombre d'octets dans chaque i-n\oeud (voir la section 2.2.5 page [*]). Ce doit être un multiple de 1024 (1 kilo-octet), et par défaut vaut 4096. Si vous estimez que le disque va contenir beaucoup de petits fichiers, une valeur de 2048 est un bon compromis. Par contre, si vous pensez stocker principalement de gros fichiers, préférez des valeurs de 8192, voire davantages.
-m reserved...
Pourcentage de blocs réservés pour le super-utilisateur (root), par défaut 5%. Pour une partition destinée uniquement au stockage de données, vous pouvez réduire ce nombre pour gagner un peu d'espace (mais ne le fixer jamais à zéro).
-v
Mode verbeux : affiche des informations lors de l'exécution.
-L volume-label
Permet d'affectuer un nom au disque ou à la partition (ce qui est rarement utile...)
Par exemple, vous voulez préparer une disquette pour être utilisée par Linux (attention, elle ne sera plus lisible par d'autres systèmes !), exécutez alors simplement :

mke2fs /dev/fd0

Pour formatter une partition /dev/sdb7 destinée à recevoir des fichiers de grandes tailles, et nommée BigDatas (avec détails des opérations) :

mke2fs -i 8192 -m 1 -v -L BigDatas /dev/sdb7

2.6.9.2 La commande e2fsck

Il est nécessaire de vérifier de temps à autre la cohérence d'un système de fichiers (cela est en général fait automatiquement à intervalles réguliers lors du démarrage du système). Cette commande permet également de réparer (dans une certaine mesure) un système de fichiers endommagé, ce qui peut survenir lors d'un plantage du système ou de son arrêt intempestif.

Son format complet est :

e2fsck [ -pacnyrdfvstFSV ] [ -b superblock ] 
[ -B block- size ] [ -l|-L bad_blocks_file ] [ -C fd ] device 

Quelques options :

-b superblock
Permet d'utilise un autre superblock que la normale, ce qui peut aider dans certains cas. En général, des copies du superblock se trouve dans les blocs 8193, 16385, et ainsi de suite.
-c
Recherche des secteurs physiquement défectueux sur le disque.
-f
Force l'exécution, même si le système de fichiers semble correct.
-p
Réparation automatique.
-v
Mode verbeux : affichage d'informations lors de l'exécution.
Il est fréquent, à la suite d'un plantage de la machine, que lors du démarrage le processus d'initialisation s'interrompe pour vous signaler qu'un système de fichiers devant être monté (par exemple, /dev/hda5) est probablement défectueux : il vous est alors demandé d'entrer le mot de passe root, puis d'exécuter e2fsk manuellement (attention, il est possible que votre clavier soit configuré en clavier américain, consultez la figure 1.2 page [*] pour les correspondances de touches). Si l'arrêt intempestif de la machine est survenu lors d'une très faible activité du disque, la première commande à utiliser est alors :

e2fsck -f /dev/hda5

Si par contre, le disque connaissait une activité intense, il est probable que le superblock principal soit défectueux. Utilisez alors plutôt :

e2fsck -f -b 8193 /dev/hda5

Dans ce cas, vous pouvez également utiliser l'option -c si vous craignez pour l'intégrité physique du disque, mais l'exécution prend beaucoup plus de temps...

Il peut arriver, dans certains cas, que e2fsck ne parvienne pas à corriger certaines erreurs, parceque trop complexes ou trop nombreuses. Utilisez alors la combinaison de la dernière chance :

mke2fs -S /dev/hda5

e2fsck -f /dev/hda5

Mais inutile de vous dire que dans ce cas, il n'est garantie que vous puissiez récupérer toutes vos données... Il est toutefois très rare d'en arriver à cette extrémité.

2.6.10 Chercher un fichier dans l'arborescence : find [YB]

La commande find est utilisée pour rechercher des fichiers dans une arborescence, selon un ou plusieurs critères, et éventuellement d'effectuer une action sur les fichiers qui correspondent aux critères donnés. Cette commande est particulièrement riche et complexe à utiliser, aussi n'en donnerons-nous ici qu'un aperçu général. Pour plus de détails, consultez la page man associée.

La forme générale est :

find [chemins] [critères] [actions]

chemins désigne une liste de répertoires à utiliser comme points de départ de la recherche. Si aucun n'est indiqué, le répertoire courant est considéré comme point de départ. En tous les cas, les éventuels sous-répertoires contenus dans le (ou les) point de départ sont également parcourus pour la recherche.

critères est une succession de conditions que les fichiers doivent satisfaire pour être retenus. Citons les plus utilisés :

-name ''modèle''
donne un modèle pour le nom des fichiers. Il est possible d'utiliser les caractères jokers * et ? dans le modèle, mais dans ce cas n'oubliez pas les guillemets ;
-iname ''modèle''
identique à -name, mais sans tenir compte de la casse des lettres (c'est-à-dire ne différencie pas les majuscules des minuscules) ;
-atime +n|-n|n
recherche les fichiers dont le dernier accès remonte à plus de, moins de, ou exactement n jours (n'utilisez que l'une des trois formes) ;
-mtime +n|-n|n
même chose, mais concernant la dernière modification plutôt qu'un simple accès au fichier.
-mount
restreint la recherche au même système de fichier que le point de départ ;
-user nom
recherche les fichiers appartenant à l'utilisateur dont on donne le nom utilisé pour la connexion ;
Enfin, action est une série d'actions à effectuer sur les fichiers qui répondent aux critères donnés. Si aucune action n'est précisée, find affiche simplement le nom du fichier assorti de son chemin absolu complet. Citons :

-print
c'est l'action par défaut décrite plus haut ;
-exec <command> {} \;
exécute la commande <commande> chaque fois qu'un fichier répondant aux critères est trouvé. Ce peut être gzip, rm, more, etc. La paire d'accolades (<<{}>>) symbolise le nom du fichier. N'oubliez pas le <<\;>> à la fin ;
-ok <command> {} \;
même chose que -exec, mais avec une demande de confirmation avant d'exécuter la commande.
Donnons quelques exemples :

  
2.6.11 Recherche d'une chaîne de caratères dans un fichier : grep

2.6.12 Création d'un fichier spécial : mknod

2.6.13 Manipulations sur les processus : ps, kill [YB]

Nous avons vu en début d'ouvrage la notion de processus (voir la section 1.6 page [*]). Les deux commandes présentées ici permettent de les manipuler.

2.6.13.1 La commande ps

Elle permet d'obtenir des informations concernant les processus en cours d'exécution. Son format est :

ps [options]

Sans options, ps liste simplement les processus lancés par vous depuis votre connexion au système.

Les options reconnues par ps sont nombreuses, nous n'évoquerons ici que les plus courantes.

a
Liste tous les processus.
e
inclue les variables d'environnement dans la desscription d'un processus.
f
fait apparaître l'arborescence des processus.
l
Affichage long.
x
Affiche également les processus qui ne sont pas associés à une console particulière (c'est généralement le cas pour les démons, ou les programmes fonctionnant sous interface graphique).
Prenons un exemple :

[yves@kafka yves]$ ps xf

 PID  TTY  STAT  TIME  COMMAND

 708   ?    S    0:12  /usr/X11R6/bin/wmaker

 720   ?    SN   0:00  perl ./build_signature

 741   ?    S    0:00  wmclock -shape

 742   ?    S    0:02  kvt -T K Virtual Terminal

 745 ttyp1  S    0:00  \_ bash

1003 ttyp1  S    0:01     \_ kscd

6533 ttyp1  R    0:00     \_ ps xf

 953   ?    S    0:19  lyx

On voit ici plusieurs processus n'ayant pas de console associée (colonne TTY), et l'arborescence nous montre, par exemple, que le processus kvt (de PID 742) a donné naissance au processus bash, qui lui-même a créé les processus kscd et ps (il est normal que ps apparaisse dans la liste qu'il affiche, après tout lors de son exécution c'est également un processus !).

Naturellement, tous les processus du système n'apparaissent pas ici. Le sens des colonnes est le suivant :

PRI
Priorité du processus : un nombre élevé indique une priorité faible.
PID
Numéro unique affecté au processus par le système.
STAT
Etat du processus :

R
en cours d'exécution
T
arrêté
D
inactif, et ne pouvant être interrompu
S
inactif (endormi)
Z
zombie
N
valeur <<nice>> positive, c'est-à-dire processus a très faible priorité.
TTY
Console associée au processus
TIME
Temps accordé au processus sur le système, en heures et minutes.
Il existe d'autres colonnes, qui ne sont pas affichées ici. Consultez la (longue) page man de ps pour plus de détails.

Une utilisation fréquente de ps, est de filtrer sa sortie avec un grep. Par exemple, si nous voulons obtenir tous les processus résultant de l'exécution du programme httpd, nous pourrions utiliser :

ps ax | grep httpd

Résultat :

 617   ?    S  0:00 httpd 

 620   ?    S  0:00 httpd

 621   ?    S  0:00 httpd 

 622   ?    S  0:00 httpd

 623   ?    S  0:00 httpd 

6557 ttyp1  S  0:00 grep httpd 

Le programme httpd a donc été ici lancé cinq fois.

ps nous permet donc d'obtenir des informations sur les processus. Voyons maintenant comment agir sur eux.

2.6.13.2 La commande kill

Elle permet d'envoyer des signaux aux processus. Le mécanisme des signaux est un des aspects fondamentaux du fonctionnement d'un système de type Unix : il s'agit simplement d'attirer l'attention d'un processus, et de lui donner un nombre. Selon la valeur de ce nombre, le processus réagi en conséquence, si une procédure prévue pour ce signal est prévue : les processus peuvent en effet tout simplement ignorer les signaux qu'ils reçoivent, sauf quelques-un.

Ce mécanisme peut paraître extrèmement simpliste, mais il est très utilisé dans la communication entre processus : ceux-ci ont rarement beaucoup de choses à se raconter, et un simple nombre est souvent suffisant.

Le format de kill est :

kill [-l | -nombre] PID

L'option -l donne une liste de signaux prédéfinis. Cette liste donne le numéro du signal, ainsi que le mot équivalent pouvant être utilisé à la place du nombre.

Notez qu'il est toujours nécessaire de donner le numéro du processus (obtenu avec ps, par exemple, colonne PID) auquel s'adresse le signal. Quelques signaux très utilisés :

-1 ou -SIGHUP
Demande au processus de se <<ré-initialiser>>, c'est-à-dire, en quelque sorte de reprendre son exécution depuis le début. Utilisé essentiellement sur les démons, pour leur faire prendre en comtpe des modifications dans certains fichiers de configuration.
-15 ou -SIGTERM
Demande au processus de terminer son exécution, en exécutant immédiatement le code prévu à cet effet. C'est une manière <<douce>> de terminer un processus qui semble ne plus répondre.
-9 ou -SIGKILL
Ce signal ne peut être ignoré : que le processus ait prévu ou non une réponse, l'éventuel code de terminaison est exécuté si possible, puis le processus est vidé de la mémoire. C'est la manière <<forte>> pour faire disparaître un processus particulièrement récalcitrant.
Voici un exemple amusant. Connectez-vous au système sur une console texte quelconque, puis exécutez ps :

  PID TTY        TIME    CMD

 6585 tty2     00:00:00  bash

 6605 tty2     00:00:00  ps

Le shelle actif est le shell bash. Envoyons-lui un signal, avec :

kill -15 6585

Rien ne se passe... parce que le bash en question est le shell principal de la connexion, il ignore donc le signal 15 (SIGTERM). Soyons plus énergique :

kill -9 6585

Cette fois, vous vous retrouvez devant l'écran de connexion, comme si vous vous étiez déconnecté ! La commande précédente <<tue>> littéralement le processus bash, et comme c'était le processus qui vous permettait d'utiliser le système, vous vous trouvé déconnecté. Les deux dernière commandes sont parfaitement équivalentes à celles-ci :

kill -SIGTERM 6585

kill -SIGKILL 6585

Prenez garde en utilisant les signaux (surtout le SIGKILL), vous pourriez être obligé de redémarrer votre machine... Sachez également, pour conclure, que normalement un utilisateur ne peut pas faire ainsi disparaître les processus d'autres utilisateurs (sauf bien sur l'utilisateur root, qui a tous les droits...)

  
2.6.14 Partitionnement du disque : fdisk [YB]

Ce petit utilitaire vous permet de manipuler les partitions d'un disque dur. De nombreux autres utilitaires du même genre existent, souvent plus agréables à utiliser. Mais fdisk est le seul qui soit (normalement) toujours disponible et suffisamment peut exigeant pour fonctionner dans pratiquement n'importe quelle situation. Si vous n'êtes pas familier des notions relatives aux partitions des disques, consultez la section 2.1.3.1 page [*].

Le format de la commande pour l'appeler est :

fdisk [-l | -s partition] [disque]

Les options :

-l
donne une liste des partitions des différents disques attachés au système, avec leurs caractéristiques (cylindres de début et de fin, taille, type de système de fichiers...), par exemple :
[root@kafka /usr] fdisk -l 
 Disk /dev/hda: 128 heads, 63 sectors, 621 cylinders  
Units = cylinders of 8064 * 512 bytes 
  
   Device Boot    Start       End    Blocks   Id  System  
/dev/hda1             1       130    524128+   b  Win95 FAT32  
/dev/hda2   *       131       131      4032    a  OS/2 Boot Manager  
/dev/hda3           132       620   1971648    5  Extended  
/dev/hda5           132       261    524128+   b  Win95 FAT32  
/dev/hda6           262       294    133024+  82  Linux swap  
/dev/hda7           295       620   1314400+  83  Linux 
 
Disk /dev/hdb: 255 heads, 63 sectors, 527 cylinders  
Units = cylinders of 16065 * 512 bytes 
  
   Device Boot    Start       End    Blocks   Id  System  
/dev/hdb1             1       527   4233096    5  Extended  
/dev/hdb5             1        66    530082   83  Linux  
/dev/hdb6            67        83    136521   82  Linux swap  
/dev/hdb7            84       181    787153+  83  Linux  
/dev/hdb8           182       245    514048+  83  Linux  
/dev/hdb9           246       309    514048+  83  Linux  
/dev/hdb10          310       342    265041   83  Linux  
/dev/hdb11          343       424    658633+  83  Linux  
/dev/hdb12          425       527    827316   83  Linux
Cet exemple montre la présence de deux disques durs sur le premiers port IDE. La colonne <<Id>> est celle du code du type de système de fichiers présent sur la partition. La colonne <<Boot>> indique si la partition est celle utilisée lors du démarrage du système, ici /dev/hda2. Remarquez que les tailles sont données en kilo-octets.
-s partition
donne la taille de la partition donnée, par exemple :
[root@kafka /usr] fdisk -s /dev/hda6 
133024
disque
indique le disque dont on veut manipuler les partitions dans le mode interactif.
Le mode d'utilisation courant de fdisk est le mode interactif, si ni <<-l>> si <<-s>> n'est donné. C'est-à-dire que le programme se comporte un peut comme un shell (en beaucoup plus simple), attendant que vous entriez une commande au clavier suivie de Entrée. Ces commandes sont de deux catégories : celles un peu dangereuses, et celle très dangereuses. Citons les plus utilisées (mais il en existe de nombreuses autres) :

m
affiche une liste des commandes disponibles.
p
affiche la liste des partitions avec leurs caractéristiques. Utilisez fréquemment cette commande, les numéros de partition peuvent varier au cours des manipulations.
d
supprime une partition, dont on donne le numéro. Vous ne pouvez normalement pas supprimer une partition étendue, si celle-ci contient encore des partitions logiques.
n
créé une nouvelle partition. Le programme vous demande d'abord quel type de partition vous voulez : primaire ('p'), étendue ('e') ou logique ('l'). Vous devez créer une partition étendue avant de pouvoir créer des partitions logiques. Par ailleurs, notez bien que vous ne pouvez créer qu'une seule partition étendue (mais qui peut contenir presque autant de partitions logiques que vous voulez).
Ensuite vous est demandé le numéro de la partition. Rappelez-vous que Linux numérote les partitions primaires de 1 à 4, et les partitions étendues toujours à partir de 5.
Il vous faut maintenant donner le premier cylindre de la partition, dans l'intervalle qui vous est proposé. Entrez la plus petite valeur, bien souvent elle convient parfaitement. Puis le dernier cylindre, mais il est souvent plus commode de donner la taille désirée de la partition. Par exemple, pour créer une partition de 327 Mo, entrez <<+327M>>. Vous remarquerez peut-etre une leger décalage entre les tailles demandées et les tailles réelles : ceci vient de l'obligation de borner les partitions selon les limites de cylindres, et il est probable que la taille que vous avez demandée n'est pas un multiple de la taille d'un cylindre.
t
Par défaut, tout partition créée (sauf les partitions étendues, bien sûr) est marquée comme contenant le système de fichiers Ext2Fs, le système de fichiers de Linux. Cette commande permet de modifier cela : le programme demande d'abord le numéro de la partition, puis le code du système de fichier voulu. Entrez 'l' pour obtenir une liste des codes connus.
w
inscrit les changements sur le disque et quitte le programme. Si vous manipulez des partitions de type MS-DOS (FAT16 ou FAT32), il est possible qu'un message d'erreur survienne lorsque le programme se termine : il suffit normalement de redémarrer la machine, pour que les changements soient correctement pris en compte.
q
quitte fdisk sans enregistrer les changements sur le disque.
Gardez toujours présent à l'esprit que les manipulations des tables de partitions sont des opérations particulièrement sensibles : prenez donc toujours garde à ce que vous faites.

Par ailleurs, il est déconseillé (bien que cela soit possible) d'utiliser fdisk pour manipuler des partitions autres que celles devant êtres utilisées exclusivement par Linux (ceci concerne notamment les partitions DOS/Windows) : mieux vaut utiliser le programme de partitionnement spécifique de l'autre système que vous utilisez. Dans le même ordre d'idée, essayez de faire en sorte que les partitions soient numérotées <<dans l'ordre>> : par exemple, fdisk vous permet d'insérer (s'il y a la place) la partition n° 7 entre les partitions 5 et 6, en jouant sur le numéro de premier cylindre. Il faut absolument l'éviter : cela ne pose pas de problème à Linux, mais c'est loin d'être le cas de tous les systèmes. Donc faites attention si vous utilisez un autre système d'exploitation que Linux sur votre machine.

Enfin, vous aurez remarqué l'abscence de commande pour déplacer ou changer la taille d'une partition : fdisk ne permet pas ces opérations, vous devez détruire une partition pour par exemple réduire sa taille, ce qui équivaut à perdre tous les données qu'elle contient...

Dans tous les cas, la prudence recommande de sauvegarder vos données avant d'utiliser fdisk.



Footnotes

...tar2.34
que l'on peut traduire par goudron, ou bitume, en français
...tar2.35
que l'on peut traduire par goudron, ou bitume, en français
...tar2.36
que l'on peut traduire par goudron, ou bitume, en français
...gzip2.37
pour <<GNU Zip>>, la version GNU de l'algorithme de compression de Lempel-Ziv.
...gzip2.38
pour <<GNU Zip>>, la version GNU de l'algorithme de compression de Lempel-Ziv.
...gzip2.39
pour <<GNU Zip>>, la version GNU de l'algorithme de compression de Lempel-Ziv.
... autres>>).2.40
r pour Read, lecture ; w pour Write, écriture ; x pour eXecute, exécution ;

u pour user, Utilisateur ; g pour Group, groupe ; o pour Others, autres.


next up previous contents
Next: 2.7 Un peu de programmation [YB] Up: 2. Premières courses Previous: 2.5 Fichiers particuliers
kafka.fr@linux-france.org