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.
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 :
, pour plus de détails). Pour un répertoire,
cela équivaut grosso modo au nombre de fichiers qu'il contient (rappelons
que les répertoires sont considérés comme des fichiers).
, pour plus de détails).
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
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 :
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
il
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 :
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
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.
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.
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 :
La commande mount ne possède que peu de paramètres. Citons :
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 :
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 :
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.
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.
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 :
). 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.
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
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 :
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é.
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 :
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.
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.
[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 :
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.
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 :
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...)
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 :
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.
u pour user, Utilisateur ; g pour Group, groupe ; o pour Others, autres.