Introduction à l'environnement Linux
Introduction à l'environnement Linux
Hicham MOHMOH
1- Introduction à Linux
1.1- Historique
L'originalité de ce système réside dans le fait que Linux n'a pas été développé dans un but
commercial. En effet aucune ligne de code n'a été copiée des systèmes UNIX originaux (en
effet Linux s'inspire de nombreuses versions d'UNIX commerciales: BSD UNIX, System V.
BSD UNIX). Ainsi, tout le monde, depuis sa création, est libre de l'utiliser mais aussi de
l'améliorer.
Bien que Linux ait été initialement conçu pour fonctionner sur plateforme PC, il a désormais
été porté (c'est-à-dire adapté) vers de nombreuses autres plates-formes, telles que Macintosh,
stations SPARC, stations DEC Alpha, ...
Lorsque vous vous procurez une distribution, vous n'avez pas besoin de savoir ce qu'elle
contient pour vous servir de Linux. Et bien, sachez que trois composants sont nécessaires
pour faire fonctionner Linux et se retrouver dans un environnement graphique:
Linux comprend un noyau (Kernel) qui est le centre nerveux du système. Il permet de faire le
lien entre les programmes et le matériel et en fait un système multi-tâches grâce au partage
des ressources. Chaque noyau possède une version composée de 3 numéros séparés par un
point (par exemple 2.2.10). Le deuxième numéro permet de savoir si la version est stable
(numéro pair) ou en cours de développement (numéro impair). Le troisième permet de savoir
si la version est récente (plus le numéro est grand, plus la version est récente).
Il comprend également un serveur X (et non X-Window). C'est une interface graphique qui a
été développée au MIT, permettant de créer des applications graphique fonctionnant sur
diverses plateformes. X-Window est l'interface graphique des stations UNIX. Elle est aux
systèmes Unix ce que Microsoft Windows est aux PC (n'allez surtout pas dire X-windows au
risque de vous faire trucider par un fanatique d'UNIX). L'avantage majeur de ce type
d'interface est l'utilisation d'une souris pour remplacer certaines commandes. Sous Linux il
existe une implémentation du système X-Window appelée XFree86, destiné aux systèmes
1
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Pour assurer la compatibilité et la portabilité, les systèmes Linux respectent l'unique norme
FHS (File Hierarchy Standard).
Hiérarchie de base
2
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
2- Distributions Linux
2.1- Définition
Les distributions rassemblent les composants d'un système GNU/Linux dans un ensemble
cohérent et stable facilitant son installation, utilisation et maintenance. Elles comprennent
donc le plus souvent un logiciel d'installation et des outils de configuration. Il existe de
nombreuses distributions, chacune ayant ses particularités propres, certaines sont dédiées à un
usage spécifique (pare-feu, routeur, grappe de calcul...) d'autres à un matériel spécifique.
2.2- Historique
Avant l'existence des distributions, les utilisateurs de GNU/Linux devaient composer eux-
mêmes leur système en réunissant tous les éléments nécessaires.
3
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
En 1992, Linux (version 0.96) est pleinement fonctionnel. C'est la naissance des premières
distributions GNU/Linux : Yggdrasil, MCC Interim Linux, TAMU. Au milieu de l'année,
Softlanding Linux System (SLS) est créé: Slackware la plus vieille distribution encore en
activité aujourd'hui, est basée sur cette distribution.
Distribution
Programmes spéciaux
L'objectif de la licence GNU GPL, selon ses créateurs est de garantir à l'utilisateur les droits
suivants (appelés libertés) sur un programme informatique :
La GNU GPL a été écrite par Richard Stallman pour être utilisée sur les programmes du
projet GNU. Elle est basé sur l'assemblage des licences utilisées par GNU Emacs, GNU
Debugger (GDB) et la GNU Compiler Collection (GCC). Ces licences contiennent des
clauses identiques, mais elles sont spécifiques à chaque programme. Le but de Stallman est de
produire une licence unique qui pourra être utilisé pour chaque projet et que cette licence
permette au plus grand nombre de projets de partager leur code source. C'est ainsi que naquit
la GPL version 1 en janvier 1989.
En 1990, il était devenu évident qu'une licence moins restrictive serait utile pour quelques
bibliothèques logicielles. Ainsi, quand la version 2 de la GPL apparut en juin 1991, une
nouvelle licence fut créée, la GNU Library General Public License (abrégé GNU LGPL ou
4
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
LGPL) prenant elle aussi la version 2 pour marquer leur lien de parenté. Les numéros de
versions sont devenus différents en 1999 quand la version 2.1 de LGPL est arrivée. La LGPL
a changé de nom en même temps afin de mieux réflèter sa place par rapport à l'esprit GNU :
elle s'appelle désormais la GNU Lesser General Public License (toujours abrégé GNU LGPL
ou LGPL).
• RedHat est une distribution commerciale largement répandue (surtout aux États-
Unis). La société RedHat qui la supporte a développé RPM, un gestionnaire de
paquets sous licence GPL que d'autres distributions utilisent.
• Fedora Le projet Fedora a d'abord eu pour but de développer des paquets RPM
complémentaires pour la distribution d'entrée de gamme de Red Hat. Mais au mois de
septembre 2003, Red Hat, décidé à se concentrer sur le marché des entreprises, laisse
la charge de sa distribution grand public à Fedora.
• Debian est une distribution non commerciale régie par le contrat social Debian. Elle
se distingue par le très grand nombre d'architectures supportées et par son cycle de
développement relativement long, gage d'une certaine stabilité. Sa qualité et son
sérieux sont unanimement reconnus, mais elle garde l'image d'une distribution
réservée aux experts, alors que son ergonomie a bien évolué.
• SuSE Linux est la première distribution européenne. Créée en 1993 à Nuremberg, elle
a été rachetée par la société Novell en fin 2003. Elle propose 2 distributions majeures :
SuSE Linux Enterprise pour les besoins d'entreprise (certifications hardware et
logicielles nombreuses) et openSUSE pour des besoins plus orientées grand public.
• Mandriva Linux est une distribution française éditée par la société Mandriva. Elle
est considérée comme facile d'installation pour les débutants.
• Slackware est l'une des plus anciennes distributions existantes. Son installation se
faisait initialement à partir d'un jeu d'une trentaine de disquettes et était réputée pour
être ardue car très peu automatisée. Slackware a été historiquement une des premières
permettant de faire tourner Linux in situ depuis un CD-ROM, dès 1995.
• KNOPPIX, distribution live.
Shell est un mot anglais signifiant « coquille ». En informatique, un Shell est une interface
qui permet d'accéder aux services proposé par un noyau ;
Un interpréteur de commandes, est un logiciel faisant partie des composants de base d'un
système d'exploitation, le command-line interface (CLI) (ou 'command prompt).
Son rôle est de traiter des lignes de commande tapées au clavier. Ces commandes, une fois
traitées, interprétées, auront pour effet de réaliser telle ou telle tâche d'administration, ou bien
de lancer l'exécution d'un autre logiciel.
5
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Bash, acronyme de Bourne-again shell, est l'interprète de commandes libre du projet GNU.
Son nom est un jeu de mots (Bourne again / born again, il apporte de nombreuses
améliorations, provenant notamment du Korn shell et du C shell. Son auteur original est Brian
Fox de la Free Software Foundation, relayé plus tard par Chet Ramey. Le Bourne shell
original fut écrit par Steve Bourne.
Bash est un logiciel libre publié sous licence GPL. Il est l'interprète par défaut sur de
nombreux Unix libres, notamment sur les systèmes GNU/Linux. C'est aussi le shell par défaut
de Mac OS X et il a été porté sous Windows par le projet Cygwin.
Bash utilise la bibliothèque readline ce qui lui permet, comme le C shell, de compléter
automatiquement les noms de commandes et de fichiers lors d'une frappe sur la touche TAB,
ce qui accélère considérablement le travail. Les touches UP et DOWN permettent de naviguer
avec facilité dans l'historique des commandes.
Le travail de tout interprète de commande peut se résumer à l'algorithme très simple suivant:
FIN
La fermeture de session se fera par la commande "exit" ou un "^D" (la marque de fin de
fichier sous UNIX: l'utilisateur ferme le flux de lecture de l'interprète, mettant fin à la boucle).
6
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
1. le premier mot de la ligne est interprété comme le nom de la commande, les autres
mots en sont les paramètres ou options;
2. chaque mot est séparé par un ou plusieurs caractères de séparation. Par défaut, ces
caractères sont l'espace et la tabulation (modifiable grâce à la variable
d'environnement IFS)
3. la fin de la commande est marquée, soit par un ";" (si l'on veut placer plusieurs
commandes sur la même ligne), soit par un saut de ligne.
Le premier mot de la ligne est donc considéré par l'interprète comme un nom de commande.
Mais il en existe de plusieurs sortes, avec différents types de priorité. Dans l'ordre décroissant
de priorité:
1. un alias: c'est un mot défini comme synonyme d'un autre (groupe de) mot(s). Dans ce
cas, l'interprète commence par remplacer le mot par son équivalent.
2. une commande interne: c'est une commande qui a été définie dans l'interprète lui-
même, elle ne fait pas l'objet d'un programme séparé. Par exemple, la commande "cd"
(change directory) est une commande interne du shell.
3. une commande externe, c'est-à-dire un programme (ou un fichier de commande, en
général appelé script) stocké sur le disque de la machine. Par exemple, "/bin/ls" est la
commande qui permet de lister les fichiers contenus dans un répertoire donné.
Dans le cas d'une commande externe, le shell doit retrouver le programme avant de pouvoir
l'exécuter. Il est clair qu'une recherche exhaustive, pour chaque commande, dans tout le
système de fichiers prendrait beaucoup trop de temps et rendrait le système inutilisable dans
la pratique. C'est la raison pour lequel seul un petit ensemble de répertoires est en fait consulté
lors de la recherche du programme permettant l'exécution de la commande. Ces répertoires
sont définis dans une variable d'environnement appelée "PATH" (chemin). Si la commande
n'est pas trouvée dans l'un des répertoires listés dans le PATH, l'exécution se soldera par un
message d'erreur du type "command not found".
L'invite est l'interface la plus simple à réaliser et conserve de nombreux avantages par rapport
aux environnements graphiques :
7
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
certaines tâches. Ainsi shell et logiciels utilitaires en mode graphique sont complémentaires
dans toute utilisation poussée de l'outil informatique.
Client C Client A
Serveur Linux
Hub
Une des utilisations majeures de la commande telnet était de se connecter à des serveurs
telnet, qui demandaient un identifiant, puis un mot de passe, et donnaient une ligne de
commande sur la machine distante en échange. Pour cela elle nécessitait le lancement d'un
démon sur la machine hôte, souvent appelé telnetd.
La commande telnet reste une commande très pratique pour tester des serveurs. Vu la
flexibilité du programme, il est possible d'utiliser la commande telnet pour établir une
connexion TCP interactive avec d'autres services tel que SMTP ou HTTP.
Cependant le côté basique de Telnet fait que toute communication est transmise en clair sur le
réseau, mots de passe compris ce qui représente un défaut de sécurité. Des sniffers comme
tcpdump ou Wireshark permettent d'intercepter les communications de la commande telnet.
Des protocoles chiffrés comme SSH ont été développés pour fournir un accès distant
remplaçant Telnet et dont l'interception ne fournit aucune donnée utilisable à un éventuel
espion.
8
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
• Pour se connecter au serveur, il faut disposer au préalable d’un compte utilisateur sur le
serveur Linux.
• Soit user1 ce compte utilisateur. On peut accéder d’une machine cliente (environnement
Windows) via l’invite de commande et en tapant :
telnet Adresse IP du serveur (ou le nom de domaine)
ex : telnet 192.168.1.111
ou encore : telnet suivi de open 192.168.1.111
l’utilisateur est invité à saisir son login et son mot de passe
Vous pouvez également utiliser le service ssh pour se connecter au serveur Linux. Pour se
connecter au serveur Linux, il y a l’utilitaire graphique Putty, téléchargeable gratuitement
d’Internet, qui est un exécutable qui propose d’ouvrir des sessions texte sur un serveur
distant en utilisant différents services, tel que telnet ou ssh.
5- Commandes Linux
COMMANDE DESCRIPTION
ls liste le contenu d'un répertoire
rm supprime un fichier
cp copie des fichiers ou répertoires
mv déplace des fichiers ou répertoires
cd change de répertoire
cd .. retourne au répertoire parent
clear efface tous les lignes du terminal
mkdir crée un nouveau répertoire (make directory)
rmdir supprime un répertoire vide (remove directory)
pwd permet d'afficher le répertoire actif (print working directory)
file permet de connaître le contenu probable du fichier spécifié
!! exécute la dernière ligne de commande
man
aide sur la commande demandée
pour une aide sur la fonction locate, on tape : man locate
apropos
change l'attribut d'un fichier
9
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
X=Lecture+Ecriture+Exécution
passwd change le mot de passe de l'utilisateur
affiche le contenu du fichier spécifié à l'écran
Cette commande ne doit être utilisée que pour des fichiers pour
lesquels la commande file a retourné : english test, ascii text ou
cat
commands text
Il ne faut surtout pas utiliser la commande cat sur des fichiers
dont le contenu supposé est data ou exécutable
more affiche le contenu du fichier avec des pauses
bye déconnexion
permet de Exécution le chemin d'un exécutable :
type
type nom du programme
tar permet de connaître le contenu d'un fichier.tar.gz (ou .tgz) sans
tout décompresser :
(sans
décompresser) tar tzf exemple.tar.gz | less
permet de supprimer un utilisateur.
userdel -r nom_user
date affiche la date et l'heure du système
who indique les utilisateurs connectés au système
cal affiche un calendrier
5.1- Exemples
La commande ls
Cette commande affiche la liste des fichiers accessibles. Elle s'utilise en ajoutant une ou
plusieurs options et le nom d'un répertoire :ls [options] [répertoire]
Il existe de nombreuses options et en particulier : -l, -a, -p et -d. Elles sont combinables : -al, -
lad, ...
L'option -l permet d'afficher toute une série d'informations sur chaque fichier listé.
L'option -a affiche tous les fichiers et les répertoires commencant par un point.
L'option -d n'affiche pas le contenu du répertoire mais uniquement le répertoire lui-même.
L'option -p permet de rajouter un slash après les noms de répertoires.
On peut également utiliser l'option page par page en tapant : ls | less. On peut afficher en
couleur avec ls --color
On peut également rajouter la commande ls -lrt qui permet de visualiser les fichiers les plus
récents du répertoire.
La commande cp
Cette commande permet de copier un fichier. Deux formes de copie existent :
cp Fichier1 Fichier2 : copie du Fichier1 sous le nom Fichier2
cp Fichier1 [Fichier2 Fichier3 ...] répertoire : le ou les fichiers sources indiqués sont
10
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
copiés dans le répertoire spécifié. Les fichiers sources conservent le nom original.
Si le fichier cible existe déjà, il sera écrasé. Alors faites attention...
Après avoir vu la structure du système de fichiers nous allons voir comment travailler sur les
fichiers et les dossiers.
Pour se déplacer d'un dossier à un autre on utilise la commande cd. Lancez une console et
lancez une commande pwd vous verrez que vous êtes dans votre dossier personnel (c'est le
dossier de démarrage par défaut).
Si vous voulez aller dans le dossier /etc tapez la commande cd /etc ; si vous voulez aller dans
le dossier perso contenu dans votre dossier personnel alors que vous vous y trouvez tapez cd
perso. Pourquoi y a t'il un / dans l'un et pas dans l'autre ? Tout simplement car le premier
chemin est absolu et part donc de la racine ( / ) alors que le deuxième est relatif à votre
position actuelle (et n'a donc pas besoin de partir de la racine). Si on devait taper le deuxième
chemin en absolu cela donnerait cd /home/user/perso. Si vous vous trouvez dans le dossier
/etc et que vous voulez vous rendre dans le dossier /etc/rc.d/init.d voila ce que cela donnerait
en chemin relatif : cd rc.d/init.d.
Pour créer un dossier il vous faut utiliser la commande mkdir. Le chemin du ou des dossiers à
créer pouvant être absolus ou relatifs. La structure type de la commande est (ce qui est entre
crochets est facultatif) :
mkdir dossier1 [dossier2] [dossier3] [dossier4] [etc...]
Si vous voulez créer toute une arborescence, pensez à commencer par créer le ou les dossiers
principaux avant de créer leurs fils. Par exemple pour créer une arborescence dans votre
dossier personnel alors que vous vous y trouvez tapez :
mkdir documents documents/personnel documents/professionnel documents/personnel/photos
documents/personnel/textes etc...
Comme vous le voyez créer toute une arborescence sous Linux est très simple : une seule
ligne de commande suffit. C'est l'une des petites choses pour lesquelles passer par la console
peut être plus rapide que de passer par le mode graphique.
Pour créer un fichier de type texte vous pouvez utiliser Vi (je détaillerai son fonctionnement
détaillé ultérieurement) en tapant vi nom_du_fichier_à_créer.
11
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Pour effacer un fichier il vous faudra être le propriétaire de ce fichier et taper la commande rm
nom_du_fichier_à_effacer. Pour effacer un dossier et tout ce qui se trouve dedans (sous-
dossiers y compris) il vous faudra utiliser l'option -R ou -r : rm -R nom_du_dossier. Attention
rm ne met pas les fichiers dans la corbeille il les supprime définitivement, et sous certaines
distributions vous n'aurez pas de garde fou pour vous demander confirmation avant de
supprimer le ou les fichiers !
Si vous souhaitez qu'il vous demande confirmation alors il vous faudra utiliser l'option -i : rm
-Ri nom_arborescence par exemple. Il va alors vous demander confirmation pour chaque
fichier à supprimer (ce qui peut être pénible si vous avez beaucoup de fichiers à supprimer).
Si par contre vous avez une distribution qui vous demande systématiquement confirmation et
que vous ne voulez justement pas avoir à répondre pour chaque fichier à supprimer, alors
vous pouvez utiliser l'option -f : rm -Rf nom_arborescence par exemple. Dans ce cas vous
forcez la suppression et il ne vous posera pas de question de confirmation (à utiliser donc avec
prudence). L'option -f permet aussi de forcer la suppression d'un fichier en lecture seule.
Nous verrons plus loin la notion de droits d'accès sur les fichiers qui explique pourquoi vous
ne pouvez supprimer que les fichiers vous appartenant (c'est une des nombreuses sécurité
issues d'Unix).
Pour faire une copie d'un fichier sous un autre nom vous devrez taper la commande : cp
ancien_nom nouveau_nom. Vous obtenez alors deux fichiers identiques avec deux noms
différents. Pour copier un fichier en gardant son nom mais dans un autre dossier il vous faudra
taper la commande suivante : cp fichier dossier_de_destination.
Si vous ne souhaitez pas copier le fichier mais le renommer alors il vous faudra utiliser la
commande mv : mv ancien_nom_fichier nouveau_nom_fichier. Si vous souhaitez déplacer le
fichier dans un autre dossier alors tapez mv nom_fichier dossier_de_destination.
La commande cp consomme des Inodes et donc de l'espace disque. Si vous avez juste besoin
de créer un lien vers un fichier et que vous ne souhaitez pas consommer de l'espace disque,
vous pouvez utiliser la commande ln : ln fichier1 fichier2. Si vous faites un ls -li dans le
dossier où se trouve le fichier vous verrez que celui-ci et son lien ont le même numéro
d'Inode. Le lien n'est qu'une ligne de plus dans le "fichier liste" du dossier pointant vers
l'Inode du fichier. Donc pas de consommation d'un Inode de plus.
12
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
On peut aussi faire un lien symbolique c'est-à-dire un fichier pointant vers un autre fichier
grâce à l'option -s : ln -s fichier lien_vers_fichier. L'intérêt de faire un lien symbolique plutôt
d'un lien normal est qu'il permet de faire des liens entre différents systèmes Unix, et de
maintenir l'arborescence traditionnelle même lorsqu'on déménage certaines commandes. Allez
par exemple regarder le dossier /etc/rc1.d et vous verrez qu'il pointe en réalité vers
/etc/rc.d/rc1.d. Le désavantage du lien symbolique est qu'il crée un fichier et consomme donc
un Inode, c'est-à-dire de l'espace disque.
Pour vérifier la quantité d'espace disque utilisée tapez la commande du, et si vous souhaitez
voir la quantité d'espace libre tapez la commande df. La commande du vous affichera l'espace
occupé par chaque dossier ou sous dossier contenu dans le dossier où vous vous trouvez, df
lui affichera l'espace libre pour chaque partition. Les options de du et df vous permettront
d'afficher ces résultats en octets, en kilo-octets, ou en %. Voyez le man pour les différentes
options.
Après avoir vu comment créer, supprimer, copier, déplacer, renommer un fichier, et faire un
lien vers un fichier, nous allons voir comment pousser plus loin les capacités du shell. On ne
connaît pas toujours le nom exact d'un fichier, d'un dossier ou d'une commande. Si vous
connaissez le début du nom vous pouvez utiliser une petite astuce de l'interpréteur de
commandes qui marche aussi bien pour les noms de fichiers et de dossiers que pour les noms
de commandes. Tapez les lettres dont vous êtes sûr puis appuyez sur la touche de tabulation
(celle avec les deux flèches allant en sens contraire), le shell va alors vous proposer tous les
noms de fichiers, de dossiers, ou de noms de commandes possibles. Il vous suffit alors de finir
le nom et de taper entrée. S'il n'y a qu'un choix possible le shell va reproduire la ligne de
commande que vous aviez tapé en complétant le nom incomplet.
Exemple : si vous avez dans votre dossier personnel un sous dossier nommé acpica-unix-
20060210, que ce dossier est le seul commençant par acpica et que vous souhaitez vous
déplacer dedans grâce à la commande cd, il vous suffit de taper cd acpica puis d'appuyer sur
la touche de tabulation vous aurez alors à la ligne suivante cd acpica-unix-20060210, il vous
suffit alors de taper sur Entrée et c'est bon.
Si vous avez d'autres dossiers commençant par acpica, le shell va vous faire une liste de tous
ces noms et recopier la ligne de commande en poussant le nom recherché jusqu'au maximum.
Par exemple si vous avez deux dossiers nommés acpica-unix-20051204 et acpica-unix-
20060210, ces deux noms ont comme partie commune acpica-unix200, le shell va donc vous
lister les deux noms possibles et vous recopier la ligne la ligne suivante : cd acpica-unix200.
Si vous avez trop de fichiers avec une base commune, ou si vous cherchez plusieurs fichiers
ou dossier, vous pouvez pousser les possibilités de la commande ls grâce aux caractères
génériques. Ceux-ci permettent de simplifier les recherches de fichiers :
- * remplace un ou plusieurs caractères
- ? Remplace un seul caractère et implique forcément sa présence
- [...] remplace un caractère par l'un de ceux mis entre crochets, ou l'un de ceux compris dans
la fourchette mise entre crochets ( [0-9] par exemple)
- [!...] exclut les caractères mis entre crochets.
13
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
- ls com*[!0-9] trouvera tous les fichiers commençant par com et suivis ou non d'une chaîne
de caractères mais ne se finissant pas par un chiffre. Exemple : combien-fichiers ou
commandeshell. Par contre des fichiers comme combien2 ou comment3 seront ignorés.
Les crochets équivalent à un seul caractère et impliquent sa présence comme pour le point
d'interrogation. Si ce caractère n'est pas présent on aura une erreur. Ces caractères génériques
marchent avec la plupart des commandes.
Si vous voulez regarder le contenu des dossiers cachés (dont le nom commence par un point)
sans que ls ne remonte dans l'arborescence (en fouillant le fichier nommé .. ), les caractère
génériques vous y aideront : ls .[!.]* vous permettra d'explorer tous les fichiers et dossiers
dont le nom commence par un point mais qui ne commencent pas par deux points, excluant de
ce fait la remontée dans l'arborescence.
Attention avec les caractères spéciaux vous pouvez faire de gros dégâts surtout si vous êtes
logué en tant qu'administrateur. Faites toujours un ls avec les caractères spéciaux que vous
voulez utiliser avant de taper la commande voulue, cela vous évitera d'effacer par exemple
tout votre système avec un bête rm -R * tapé à partir de la racine en tant que root.
Voyons quelques autres commandes bien pratiques. la commande cat nom_du_fichier vous
permet de visualiser le contenu d'un fichier texte à l'écran, mais ce n'est pas très pratique si le
fichier est long et prend plus d'un écran de long. Dans ce cas il est plus intéressant d'utiliser
more ou less. Si vous souhaitez lire un fichier par tranche de 8 lignes il vous suffit de taper
more -8 nom_du_fichier.
Si vous ne souhaitez voir que les 5 premières lignes d'un fichier il vous suffit de taper head -5
nom_du_fichier. Si vous souhaitez voir les 10 dernières lignes d'un fichier vous devrez taper
tail -n 10 nom_du_fichier. D'autres options permettent de lire un fichier à partir d'une ligne
précise, et les caractères génériques peuvent vous permettre de lire les premières lignes de
plusieurs fichiers (head -3 com* vous permettra de visionner les 3 premières lignes de tous les
fichiers commençant par com).
Pour comparer le contenu de deux fichiers textes vous pouvez utiliser la commande diff : diff
fichier1 fichier2. Si les deux fichiers sont identiques vous n'aurez aucun message. S'ils sont
différents diff indiquera les lignes en moins et celles en plus. La commande cmp fait plus ou
moins pareil mais avec moins d'options. Pour comparer deux arborescences vous pouvez faire
un ls -l dossiers | fichier-arbo de chaque arborescence et comparer les fichiers avec la
commande diff.
Si vous souhaitez chercher une chaîne de caractères dans un ou plusieurs fichiers textes il
vous faudra utiliser la commande grep : grep [options] chaîne_cherchée fichier_où_chercher.
grep -n qui * va chercher le mot "qui" dans tous les fichiers du dossier et affichera devant
chaque occurrence le numéro de la ligne où elle se trouve. grep -i qui * va chercher le mot
"qui" en ignorant la casse (c'est-à-dire en cherchant chaque lettre aussi bien en minuscule
qu'en majuscule). L'option -y fait la même chose. Les caractères génériques peuvent être
14
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
utilisés mais ils n'ont pas toujours la même valeur. L'étoile fonctionne de la même façon que
décrit précédemment, par contre le point d'interrogation est remplacé par un point simple.
Si vous souhaitez trier le contenu d'un fichier il vous faut utiliser la commande sort : sort
fichier va trier le contenu du fichier texte par le contenu de la première colonne (par défaut le
séparateur entre deux colonnes est l'espace). Si dans votre fichier le séparateur est : au lieu de
l'espace il vous faut changer le séparateur par défaut de la commande grâce à l'option -t suivie
du nouveau séparateur : sort -t: fichier. Pour trier par colonne il vous faut ajouter +0 après sort
pour trier par la première colonne, +1 pour trier par la deuxième, +2 pour trier par la
troisième, etc ... Si on veut trier sur la 3e colonne puis sur la 2e colonne sur un fichier qui en
comporte 4, il vous faut taper sort +2 -3 +1 fichier. Le -3 sert à exclure la 4e colonne du tri (il
faut penser à exclure les colonnes qui suivent celles que vous sélectionnez quand vous
commencez par une plus avancée sinon sort en tient compte). Vous pourrez découvrir les
multiples autres options de sort grâce aux pages du man.
Si vous avez besoin d'extraire une colonne d'un fichier texte structuré sous forme de tableau
vous devrez utiliser la commande cut : cut -d":" -f2 nom_du_fichier vous permettra d'extraire
la deuxième colonne du fichier (spécifié par -f2) le séparateur entre chaque colonne étant :
(spécifié par -d":"). Si on voulait extraire la première colonne il faudrait taper -f1, et si le
séparateur était l'espace il faudrait taper -d" " (ne pas oublier les "" autour du séparateur).
Si vous voulez convertir des caractères dans un fichier il vous faudra utiliser la commande tr :
tr 'a-z' 'A-Z' fichier3 vous permettra de transformer tous les : du fichier en ; et d'enregistrer le
nouveau texte dans fichier3, ce qui peut être très utile pour transformer une base de données
d'un format à un autre en changeant tout simplement le séparateur. Le seul format universel
pour les bases de données étant le format texte il vous suffit d'exporter votre base au format
texte et de modifier les séparateurs grâce à tr, d'enregistrer les changements dans un nouveau
fichier grâce aux redirections puis de réimporter le nouveau fichier.
Enfin voici une commande qui peut très vite devenir très complexe et remplacer parfois des
lignes entières de script shell. Il s'agit de la commande find. Sa structure globale est la
suivante :
find chemin -conditions -action
C'est une commande conditionnelle. Le chemin est récursif par défaut (si on lui met / il
cherchera partout) et il est obligatoire (. pour le répertoire courant, / pour la racine, /home,
etc...). Les conditions peuvent être très variées : on peut chercher les fichiers en fonction du
user ou du groupe propriétaire, en fonction du nom, de la taille, de l'Inode, des dates d'accès et
de modification, des droits d'accès, etc... L'action peut être de trois sortes :
- print : affiche à l'écran ce que find a trouvé (à faire avant toute autre action)
- exec : exécute une commande (toutes les commandes sont possibles)
- ok : exécute une commande mais demande confirmation d'abord.
Les {} servent de boucle dans laquelle les noms des fichiers trouvés par find viennent se
mettre. Voici quelques exemples de commande avec find :
find . -name "demo*" -print => va chercher puis afficher tous les fichiers du dossier courant et
de ses sous-dossiers dont le nom commence par demo
15
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
find . -name "comb*" -exec rm {} \; => va chercher puis effacer tous les fichiers du dossier
courant et de ses sous-dossiers dont le nom commence par comb
Les autres arguments conditionnels peuvent être -links n pour chercher les fichiers en fonction
du nombre n de liens pointant vers les fichiers ; -links +n pour chercher les fichiers qui ont
plus de n liens pointant vers eux, -links -n pour chercher les fichiers qui ont moins de n liens
pointant vers eux. L'argument -user nom_du_user permet de chercher les fichiers appartenant
à un user particulier. L'argument -mtime n permet de chercher les fichiers qui ont été modifiés
il y a n jours. Il y a bien d’autres arguments possibles. Je vous laisse les découvrir grâce au
man. Pensez bien à faire d'abord un find suivi d'un print avant de faire le même find avec un
exec ou un ok.
6- Le fichier /etc/passwd
C'est lui qui contient toutes les informations relatives aux utilisateurs (login, mots de
passe, ...). Seul le superutilisateur doit pouvoir le modifier. Il faut donc modifier les
droits de ce fichier de façon à ce qu'il soit en lecture seul pour les autres utilisateurs.
- le répertoire de connexion qui est celui dans lequel il se trouve après s'être connecté au
système
16
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Exemple
Voici un exemple de fichier passwd :
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
uucp:x:10:14::/var/lib/uucp/taylor_config:/bin/bash
said:x:500:100:Cool......:/home/said:/bin/bash
- Il faut savoir que les mots de passe situés dans ce fichier sont chiffrés. Ca sert donc à
rien de l'éditer et de remplacer le champ mot_de_passe en tapant directement son mot
de passe. Vous n'obtiendriez uniquement que le blocage du compte.
- Lorsqu'un utilisateur se connecte, le programme login compare le mot de passe tapé
par l'utilisateur (après l'avoir chiffré) à celui qui est dans le fichier passwd. Si ils sont
différents, la connexion ne peut se faire.
- Pour interdire l'utilisation, il suffit de remplacer le mot de passe chiffré par une étoile :
"*".
- On peut également ouvrir les accès à un compte en laissant le champ mot_de_passe
vide. Toute personne voulant se connecter avec ce compte pourra le faire.
- Pour pouvoir modifier le mot de passe d'un compte grâce à la commande passwd, il
faut être soit administrateur systême, soit propriétaire du compte.
- UID : identifiant (unique) de chaque compte utilisateur. Les nombres de 0 à 99 sont
fréquemment réservés à des comptes propres à la machine. Les valeurs supérieures à
100 sont elles réservées aux comptes utilisateurs.
- GID : identifiant de groupe. Le groupe par défaut (nommé group) porte le numéro 50.
Cet identifiant est utilisé en relation avec les droits d'accès aux fichiers. Cette question ne
vous préoccupera que si votre système comporte plus d'un seul groupe d'utilisateurs. (Il
faudra alors se préoccuper du fichier /etc/group.
- On peut à partir du Shell, modifier l'interpréteur de commandes. Pour ceci, on utilise la
commande chsh ou alors passwd -s. Linux cherche alors dans le fichier /etc/shells le
programme que vous avez spécifié. Seules les commandes présentes dans ce fichier
seront acceptées et remplaceront la valeur actuelle du champ
programme_de_demarrage. Ces restrictions ne s'appliquent pas au compte du
superutilisateur.
- Assurez-vous que les droits d'accès du fichier /etc/shells sont les mêmes que pour le
fichier /etc/passwd
- Le superutilisateur ne se nomme pas obligatoirement root. Pour le changer, il suffit de
remplacer le nom du compte root par celui désiré.
- Un compte privilégié est un compte dont l'identifiant (UID, User ID) vaut zéro.
7- Le fichier /etc/group
Ce fichier contient la liste des utilisateurs appartenant aux différents groupes. En effet,
lorsque de nombreux utilisateurs peuvent avoir accès au système, ceux-ci sont
fréquemment rassemblés en différents groupes ayant chacun des droits d'accès différents
aux fichiers et aux répertoires. On retrouve ainsi ces regroupements dans le fichier
/etc/group.
17
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Le numéro de groupe est le numéro qui fait le lien entre les fichiers /etc/group et
/etc/passwd
Exemple
Voici un exemple de fichier /etc/group :
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:
tty:x:5:
disk:x:6:
lp:x:7:
wwwadmin:x:8:
kmem:x:9:
wheel:x:10:
mail:x:12:cyrus
news:x:13:news
18
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Enfin, les fichiers peuvent être regroupés puis compressés pour obtenir une archive
portant l'extension .tar.gz.
Il est très utilisé dans le monde de Linux. Il permet de créer une archive unique
contenant de nombreux fichiers et toutes leurs informations annexes (droits,
propriétaires). Cette archive est plus fréquemment créée non compressée. On obtient un
fichier ayant l'extension .tar. Puis elle peut être compressée à l'aide de GZIP pour obtenir
un fichier avec l'extension .tar.gz (voir plus loin). Si on utilise l'outil TAR pour
compresser, on obtient une archive avec .tgz comme extension. Voici les différentes
options utilisées avec l'outil TAR :
Quelques exemples :
19
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
L'outil GUNZIP permet de décompresser un fichier ayant pour extension .gz. L'outil GZIP,
quant à lui, permet de compresser un unique fichier. C'est pourquoi il est utilisé avec
l'outil TAR. En effet, l'outil TAR regroupe différents fichiers dans une archive .tar et l'outil
GZIP la compresse. L'extension .gz créée par GZIP est ajoutée à celle du fichier. On peut
alors rencontrer des fichiers du type Fichier.txt.gz ou bien sûr Fichier.tar.gz. Notez bien
que l'outil GZIP remplace le fichier à compresser par celui créé. Le fichier initial ne se
trouve ainsi plus dans le répertoire. Voici les différentes options utilisées avec les outils
GZIP et GUNZIP :
Quelques exemples :
gzip -d fichier.tar.gz
ou Décompresse fichier.tar.gz
gunzip fichier.tar.gz
Comme vu précédemment, cette extension est obtenue par archivage à l'aide de l'outil
TAR puis par compression à l'aide de GZIP. Cette extension est l'une des plus
rencontrées avec l'extension RPM. Voici comment les compresser et les décompresser :
20
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
gunzip fichier.tar.gz
puis Même chose
tar xvf fichier.tar
Les permissions UNIX constituent un système simple de définition des droits d'accès aux
ressources, représentées par des fichiers disponibles sur un système informatique. Elles restent
le moyen le plus utilisé pour définir les droits des utilisateurs sur les systèmes de type UNIX.
Toute entité (personne physique ou programme particulier) devant interagir avec un système
UNIX est authentifié sur cet ordinateur]] par un utilisateur ou user. Ceci permet d'identifier un
acteur sur un système UNIX. Un utilisateur est reconnu par un nom unique et un numéro
unique (la correspondance nom/numéro est stockée dans le fichier /etc/passwd).
Tous les utilisateurs UNIX n'ont pas les mêmes droits d'accès à l'ordinateur (ils ne peuvent
pas tous faire la même chose), et ceci simplement pour des raisons de sécurité et
d'administration. Par exemple, pour éviter tout problème sur Internet, l'utilisateur qui gère le
serveur HTTP n'a pas le droit d'exécuter des commandes localement, pour éviter que le
serveur puisse le faire.
Sur tout système UNIX, il y a un super-utilisateur, généralement appelé root, qui a tous les
pouvoirs. Il peut accéder librement à toutes les ressources de l'ordinateur, y compris à la place
d'un autre utilisateur, c'est-à-dire sous son identité. En général, du moins sur les systèmes de
production, seul l'administrateur système possède le mot de passe root. L'utilisateur root porte
le numéro 0.
Groupe
21
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Propriété
Tout fichier UNIX possède un propriétaire. Au départ, c'est l'utilisateur qui a créé le fichier
mais il possible de le « donner » à un autre utilisateur. Seul le propriétaire du fichier et le
super utilisateur (root) peuvent changer les droits et l'appartenance de ce fichier. Seul root
peut s'attribuer un fichier, mais un utilisateur ordinaire peut donner un de ses fichiers à un
autre utilisateur ordinaire.
Un fichier UNIX appartient aussi à un groupe. Ceci donne pleinement son sens à la notion de
groupe. On définit ainsi les actions du groupe sur ce fichier. Ce groupe est souvent le groupe
d'appartenance du propriétaire, mais ce n'est pas obligatoire. Tout dépend en fait de ce qu'on
veut faire. On peut imaginer un scénario de délégation d'administration : le super utilisateur
est propriétaire d'un fichier de configuration, mais autorise tous les utilisateurs du groupe
admin (les administrateurs) à modifier ce fichier. Le fichier en question aura donc root comme
propriétaire et appartiendra au groupe admin.
Rappelons que les répertoires sous UNIX sont aussi des fichiers. Les droits sur les répertoires
(mais aussi les périphériques, etc.) fonctionnent exactement de la même façon que sur des
fichiers ordinaires.
À chaque fichier est associée une liste de permissions, qui déterminent ce que chaque
utilisateur a le droit de faire du fichier.
Norme POSIX
Les permissions d'accès aux fichiers dans la norme POSIX sont inspirées des permissions
d'accès UNIX.
Fonctionnement
Les différents droits
Les droits sur un fichier UNIX s'attribuent sur trois « actions » différentes possibles :
On appelle parfois r, w et x des « flags » ou « drapeaux ». Sur un fichier donné, ces 3 flags
doivent être définis pour son propriétaire, son groupe, mais aussi les autres utilisateurs
(différents du propriétaire et n'appartenant pas au groupe).
22
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Seuls root et le propriétaire d'un fichier peuvent changer ses permissions d'accès.
rwxr-xr--
\ /\ /\ /
v v v
| | droits des autres utilisateurs (o)
| |
| droits des utilisateurs appartenant au groupe (g)
|
droits du propriétaire (u)
signifie que le propriétaire peut lire, écrire et exécuter le fichier, mais que les utilisateurs du
groupe attribué au fichier ne peuvent que le lire et l'exécuter, et enfin que les autres
utilisateurs ne peuvent que lire le fichier.
Une autre manière de représenter ces droits est sous forme binaire grâce à une clef numérique
fondée sur la correspondance entre un nombre décimal et sont expression binaire :
• 0 = 000
• 1 = 001
• 2 = 010
• 3 = 011
• 4 = 100
• 5 = 101
• 6 = 110
• 7 = 111
A l'expression binaire en trois caractères sont associés les 3 types de droits (r w x) ; il suffit
donc de déclarer pour chacune des catégories d'utilisateur (user, group, others) un chiffre
entre 0 et 7 auquel correspond une séquence de droits d'accès. Par exemple :
Une astuce permet d'associer rapidement une valeur décimale à la séquence de droits
souhaitée. Il suffit d'attribuer les valeurs suivantes pour chaque type de droit :
23
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Puis on additionne ces valeurs selon qu'on veuille ou non attribuer le droit en correspondant.
Ainsi, rwx « vaut » 7 (4+2+1), r-x « vaut » 5 (4+1) et r-- « vaut » 4. Les droits complets
(rwxr-xr--) sont donc équivalent à 754. Un manière directe d'attribuer les droits est de les
écrire sous cette forme et d'utiliser le code à 3 chiffres résultant avec chmod (voir ci-après).
Utilisation
Pour voir quels droits sont attribués à un fichier, il suffit de taper la commande ls -l (ll)
nom_du_fichier :
# ls –l toto
-rwxr-xr-- 1 user group 12345 Nov 15 09:19 toto
La sortie signifie que le fichier toto (de taille 12345) appartient à « user », qu’on lui a attribué
le groupe « group », et que les droits sont rwxr-xr--. On remarque qu’il y a en fait 10
caractères sur la zone de droits. Le premier – n’est pas un droit, c’est un caractère réservé
pour indiquer le type de fichier. Il peut prendre les valeurs suivantes :
• d : répertoire
• l : lien symbolique
• c : périphérique de type caractère
• b : périphérique de type bloc
• p : fifo
• s : socket
• - : fichier classique
Changer les droits peut s’effectuer également simplement à partir du nombre à 3 chiffres
calculé comme précédemment. Ainsi, pour attribuer les droits r-xr-xr-x (i.e. 555), il suffit
d’exécuter :
Utilisation
Les options passées à la commande chmod sont indiquées comme ceci :
24
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Exemples
Options
chmod a un certain nombre d'options qui peuvent modifier le résultat. Certaines de ces options
sont :
• -R: récursivité, change les modes de tous les fichiers dans les sous-répertoires.
• -v: verbeux. Affiche la liste de tous les fichiers en cours de modification.
Modes
Pour chaque fichier donné, les permissions s'appliquent au propriétaire du fichier (u), aux
utilisateurs dans le groupe du fichier (g) ou à tous les autres utilisateurs (o). Pour appliquer les
modifications à tous en une seule fois, on utilise la commande (a) pour all.
Les modes peuvent être spécifiés de deux façons, avec des lettres ou avec des nombres en
octal. Pour les lettres, il existe des opérateurs de changement comme +, un mode d'ajout, =
définit le mode et -, enlever le droit du mode. Pour l'octal il faut additionner les nombres pour
chaque type de possesseur.
25
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
fastidieux). Pareil pour les messages d’erreur que l’on peut vouloir obtenir sous forme de
fichier log par exemple. Pour pouvoir dévier le flux standard on utilise des redirections.
L’exemple le plus simple est la redirection de sortie. Si par exemple on veut faire, un ls du
dossier /usr/bin, le nombre de fichiers est tellement long qu’ils dépassent de l’écran. Si on
veut pouvoir regarder tranquillement la liste des fichiers sous forme de fichier texte, il faut
rediriger la sortie standard de l’écran vers un fichier. Pour cela on utilise le signe > :
ls /usr/bin > listefichiers (sous linux un fichier n’a pas besoin d’avoir une extension, on
n’en met que par commodité pour l’interopérabilité et pour savoir quelle application va
pouvoir ouvrir le fichier).
Le résultat de cette commande est que rien n’apparaît à l’écran (la sortie standard n’est plus
utilisée), sauf les messages d’erreurs (et il y en aura sûrement si vous lancez cette commande
en tant que simple utilisateur, j’expliquerai pourquoi ultérieurement) et si vous allez regarder
ensuite dans le dossier où vous vous trouvez (souvent votre home ou dossier personnel) vous
y verrez le fichier listefichiers. Ouvrez le avec un éditeur de texte et vous y verrez le résultat
de la commande ls.
Voici sous forme de schéma le flux standard et la redirection de sortie :
On peut rediriger vers un fichier, mais aussi vers un terminal, ou un périphérique (imprimante
par exemple). Pour rediriger le résultat de la commande echo bonjour vers le premier
terminal virtuel (tty1) il faut taper :
echo bonjour > /dev/tty1 (les terminaux virtuels vont le plus souvent de tty1 à tty6)
Vous ne verrez rien sur la console d’où vous avez lancer la commande echo, par contre si
vous faîtes Ctrl+Alt+F1 vous verrez affiché bonjour.
De même que l’on peut rediriger la sortie, on peut rediriger l’entrée. Par exemple si on veut
compter le nombre de lignes, de colonnes et de mots d’un texte que l’on a déjà tapé et mis
dans un fichier texte, il suffit d’indiquer à la commande wc une autre entrée que l’entrée
standard. Pour rediriger l’entrée d’une commande on utilise le signe < , ce qui nous donnerait
par exemple :
wc < fichiertexte
Et si on voulait que le résultat de la commande wc sur ce fichier texte sorte lui aussi sous
forme de fichier ? Rien de plus simple il suffit de rediriger l’entrée ET la sortie :
26
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
27
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
ls –l /usr/bin | wc –l
Le pipe permet de simplifier la ligne de commande obtenue et optimise celle-ci. Ici pas de
création de fichier sur le disque dur, pas d’occupation d’espace disque, tout se passe en
mémoire : le flux de sortie de la première commande est envoyé comme entrée de la seconde,
puis est automatiquement détruit dès qu’il n’est plus nécessaire.
Le pipe n’empêche pas la redirection, on peut très bien combiner les deux par exemple :
ls –l /usr/bin | wc –l > nbfichiers 2> fichier-erreur
Ainsi le résultat de la ligne de commande n’apparaîtra pas à l’écran, et sera redirigé vers le
fichier nbfichiers, et les messages d’erreur seront redirigés vers le fichier fichier-erreur.
Si on veut néanmoins le résultat de la commande ls dans un fichier en plus du résultat de la
commande wc, alors il va falloir dédoubler le flux de sortie de ls, comme le ferait un tuyau en
forme de T en plomberie. Pour dédoubler le flux on utilise la commande tee :
ls –l /usr/bin | tee listefichiers | wc –l
On aura ainsi à l’écran le résultat de la commande wc appliquée sur le résultat de la
commande ls, ET la création du fichier listefichiers contenant le résultat de la commande ls.
Si on veut que la commande tee n’écrase pas ce qui se trouve dans le fichier de destination,
mais ajoute des données (comme avec le signe de concaténation >> et la commande cat), il
faut utiliser l’option –a. Cela peut servir par exemple à contrôler qui se connecte sur un poste
de travail au fur et à mesure de la journée, tout en affichant régulièrement le nombre de
connectés. Pour cela on va utiliser la commande who, et la commande wc, avec deux pipes
et la commande tee :
who | tee –a qui | wc –l
Il suffit de lancer cette ligne de commande régulièrement dans la journée (grâce à un
planificateur comme cron dont je parlerai dans le Cours d’Administration), et au fur et à
mesure de la journée le résultat de la commande who sera ajouté au fichier qui, et la
commande wc –l affichera le nombre d’utilisateurs connectés (puisque who sort une ligne
par utilisateur connecté).
11- Gestion des processus : commande ps
1. La commande "ps" :
2. La commande ps permet de connaître les processus actifs à un moment donné :
3. [delcros@mistra delcros]$ ps
4. PID TTY STAT TIME COMMAND
5. 341 p1 S 0 : 00 bash
6. 344 p2 S 0 : 00 bash
7. 1039 p3 S 0 : 00 bash
8. 1219 p3 R 0 : 00 ps
Le "PID" est l'identificateur d'un processus, c'est un nombre. Chaque processus est
identifié dans le système par un nombre unique.
28
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
"STAT" indique l'état dans lequel se trouve le processus. Dans l'exemple, trois
processus sont endormis (S comme "sleep"), et un processus en cours d'exécution (R
comme "run"). Le processus qui est en cours d'exécution n'est autre que la commande
"ps" que nous venons de lancer.
Le "COMMAND" précise, comme son nom l'indique, la commande dont l'état est
décrit par PID, TTY, STAT et TIME.
Ceci dit, une simple commande "ps" n'indique pas tous les processus du système. Le
simple fait de lancer ps nous a juste indiquer les processus associés à un terminal et
qui dépendent de l'utilisateur courant (ici "delcros").
En fait, il est tout a fait probable que d'autres processus non liés à un terminal aient été
lancés par "delcros". J'en suis d'ailleurs sur, puisque actuellement j'utilise emacs pour
réaliser cette modeste page de documentation et que pour visualiser le résultat, j'utilise
netscape :
[delcros@mistra delcros]$ ps -x
Les commandes qui ne sont pas associées à un terminal sont reconnaissables par le
point d'interrogation qui rempli le champs TTY.
1. Si vous voulez connaître tous les processus de la machine de tous les utilisateurs, il
suffit d'utiliser l'option ax. Si en plus vous voulez connaître les utilisateurs associés à
chaque processus, il vous suffit d'utiliser l'option aux. Vous verrez alors plusieurs
colonnes s'ajouter dont "USER" qui indique à quel utilisateur appartient le processus.
"%CPU" indique en pourcentage les ressources du microprocesseur utilisées par le
processus. "%MEM" montre en pourcentage les ressources en mémoire vive utilisées
par le processus. "RSS" donne réellement la mémoire utilisée en kilobytes par le La
commande "kill" :
29
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Par exemple, si j'ai lancé une connexion à l'Internet en PPP, un processus pppd sera en
cours. Pour tuer le processus, je peux d'abord faire un ps -ax pour connaître le numero
du PID de pppd et ensuite si par exemple le PID est 592, je peux tuer la connexion en
faisant :
[root@mistra delcros]# kill 592
Vous remarquerez que je suis logué en utilisateur "root" pour faire ceci, en effet le
processus pppd appartenait à l'utilisateur "root" et un autre utilisateur ne peut pas lui
expédier de signal.
Si un processus vous résiste, c'est à dire que vous n'arrivez pas à le tuer, vous devez
utiliser la commande : kill -9 PID (PID étant toujours le numéro de de processus).
Vous tuerez tous les processus qui contiennent la commande grep. Je vous
recommande donc d'utiliser l'option "-i" qui vous demande une confirmation avant de
tenter d'arrêter un processus
Quand vous lancez VI pour la première fois, vous voyez un écran rempli de tildes (un tilde
ressemble à ceci : ~) sur le côté gauche de l'écran. Les lignes vides au-delà de la fin du fichier
sont montrées de cette manière. En bas de votre écran, si vous avez spécifié un nom de fichier
existant, le nom et la taille de ce fichier sont affichés, comme ceci :
30
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Si vous lancez VI sans nom de fichier, la dernière ligne de l'écran restera vide. Si l'affichage
ne correspond à ces indications, votre terminal est sans doute mal réglé. Tapez :q et "retour"
pour sortir de VI, et régler votre type de terminal.
12.2 Sortir de VI
Maintenant que vous savez entrer dans VI, ce serait une bonne idée de savoir en sortir.
L'éditeur VI a deux modes et pour sortir de VI, vous devez être en mode commande. Appuyer
sur la touche appelée "Escape" ou "Esc" (Si votre terminal n'a pas une telle touche, essayez ^[,
ou contrôle-[) pour passer en mode commande. Si vous êtes déjà en mode commande quand
vous tapez "Escape", cela peut "biper", ne vous inquiétez pas, vous êtes encore dans le mode
commande.
La commande pour quitter VI est :q. Une fois en mode commande, tapez deux points, et 'q',
suivi de retour. Si votre fichier a été modifié d'une façon ou d'une autre, l'éditeur vous
préviendra, et ne vous laissera pas quitter. Pour éviter ce message, la commande est :q!. Cela
vous laisse quitter VI sans sauvegarder les changements.
Bien sûr, normalement dans un éditeur, vous devriez vouloir sauvegarder les changements
que vous avez faits. La commande pour enregistrer le contenu de l'éditeur est :w. Vous
pouvez combiner cette commande avec la commande pour quitter, soit :wq. Vous pouvez
spécifier un nom de fichier différent pour sauver sous ce nom après le :w. Par exemple, si
vous voulez sauvegarder le fichier sur lequel vous travaillez sous le nom nom_de_fichier_2,
vous devez taper :w nom_de_fichier_2 et retour.
Une autre façon de sauver vos changements et quitter VI est la commande ZZ. Quand vous
êtes en mode commande, taper ZZ est équivalent à :wq. Si des changements ont été faits dans
le fichier, ils seront sauvés. C'est la façon la plus simple de quitter l'éditeur, avec seulement
deux appuis de touches.
La première chose que beaucoup d'utilisateurs apprennent à propos de l'éditeur VI est qu'il a
deux modes: commande et insertion. Le mode commande permet l'entrée de commandes pour
manipuler du texte. Ces commandes sont en général longues d'un ou deux caractères, et
peuvent être entrées en peu de frappe de touche. Le mode insertion met tout ce qui est tapé sur
le clavier dans le fichier courant.
Les commandes du mode commande sont généralement au format suivant : (Les arguments
optionnels sont donnés entre crochet.
31
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
La quantité est définie par n'importe quel caractère de 1 à 9. Par exemple, la commande x
efface un caractère sous le curseur. Si vous tapez 23x en mode commande, cela va effacer 23
caractères.
Ceci est un simple groupe de commande pour permettre à un utilisateur débutant avec VI de
commencer. D'autres commandes utiles, seront présentées ultérieurement.
a
fait entrer en mode insertion, les caractères tapés ensuite seront insérés après le
curseur. Si vous spécifiez un nombre, tout le texte qui a été inséré sera répété ce
nombre de fois
h
déplace le curseur sur le caractère précédent.
i
entre en mode insertion, Le caractère tapé ensuite sera inséré avant la position actuelle
du curseur. Si vous spécifiez un nombre, tout le texte qui a été inséré sera répété ce
nombre de fois
j
déplace le curseur d'une ligne vers le bas.
k
déplace le curseur d'une ligne vers le haut.
l
déplace le curseur d'un caractère vers la droite.
r
remplace le caractère sous le curseur. Un nombre spécifie le nombre de caractères à
remplacer.
u
annule le dernier changement dans le fichier. Taper de nouveau u rétablit le
changement.
x
efface le caractère sous le curseur. Nombre spécifie combien de caractères il faut
effacer. Les caractères seront effacés après le curseur.
L'éditeur VI a 36 "buffers" pour conserver des morceaux de texte, ainsi qu'un "buffer"
principal. Chaque fois, qu'un bout de texte est effacé ou copié depuis le fichier, il est placé
dans le "buffer" principal. Beaucoup d'utilisateurs de VI utilisent rarement les autres buffers,
32
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
et se débrouillent sans eux. Le bloc de texte peut aussi être placé dans un autre buffer
demandé en utilisant la commande ". Après avoir tapé ", une lettre ou un chiffre identifiant le
buffer doit être entré. Par exemple, la commande : "mdd remplit le buffer m et efface la ligne
courante. De même, du texte peut être collé avec les commandes p ou P. "mp colle le contenu
du buffer m après la position actuelle du curseur. Pour toutes les commandes utilisées dans les
deux sections suivantes, ces buffers peuvent être spécifiés pour un stockage temporaire de
mots ou de paragraphes.
Couper et Copier
La commande la plus couramment utilisée pour couper est d. Cette commande efface du texte
dans le fichier. La commande est précédée par un nombre optionnel et suivie par une
indication de déplacement. Si vous doublez la commande en tapant dd, la ligne courante est
effacée. Voici quelques combinaisons :
d^
efface de la position actuelle du curseur jusqu'au début de la ligne.
d$
efface de la position actuelle du curseur jusqu'à la fin de la ligne.
dw
efface de la position actuelle du curseur jusqu'à la fin du mot
3dd
efface 3 lignes à partir de la position actuelle du curseur vers le bas.
Coller
Les commandes pour coller sont p et P. Elles diffèrent seulement par la position où elles
collent le texte par rapport au curseur. p colle le contenu du buffer spécifié ou du buffer
général après le curseur, tandis que P le colle avant le curseur. nombre avant la commande,
colle le texte le nombre de fois demandé.
L'éditeur VI peut faire deux types de recherche : chaînes de caractères ou caractères. Pour une
recherche de chaîne, les commandes / et ?sont utilisées. Quand vous lancez ces commandes,
la commande que vous venez de taper sera affichée sur la ligne du bas, où vous taperez la
chaîne que vous cherchez. Ces deux commandes diffèrent uniquement par la direction dans
laquelle la recherche est entreprise. La commande / cherche vers la fin du fichier, tandis que
la commande ? cherche vers le début du fichier (de bas en haut). Les commandes n et N
répètent la précédente recherche respectivement dans le même sens et dans le sens opposé.
Certains caractères ont une signification particulière pour VI, et doivent donc être précédés
d'un antislash (\) pour faire partie de l'expression recherchée.
Caractères spéciaux :
^
Début de ligne. (Au début de l'expression recherchée.)
33
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
.
Correspond à un caractère simple.
*
Correspond à zéro ou plusieurs fois le caractère précédent.
$
Fin de ligne (A la fin de l'expression recherchée.)
[
Correspond au début d'un groupe d'expressions correspondantes ou non. Par exemple
/f[iae]t correspond à chacun de ces mots : fit fat fet. Dans ce cas, il correspond
uniquement à ceux-là. /a[^bcd] ne correspond à aucun d'eux mais à tout ce qui contient
"a" et une lettre autre que "b","c","d".
<
Peut être inséré dans une expression précédée d'un antislash pour rechercher le début
ou la fin d'un mot. Par exemple /\<le\> va chercher seulement le mot "le" mais pas les
mots comme "leur" ou "fleur".
>
Voir la description du caractère '<' au dessus.
Les commandes t et T cherchent un caractère seulement sur la ligne courante, mais avec t, le
curseur se déplace sur la position avant le caractère, et T cherche depuis la fin de la ligne vers
la position après le caractère .
Ces deux commandes peuvent être répétées en utilisant les commandes ; ou, (; répète la
dernière recherche de caractère dans la même direction, alors que , la répète en sens inverse.)
Si l'option "ic" (ou ignorecase) est activée (tapez :set ic) la recherche est insensible à la
casse.
"
Spécifie le buffer à utiliser avec les commandes se servant d'un buffer. Faites suivre le
" par la lettre ou le nombre, qui correspond au buffer.
D
Efface (Delete) de la position actuelle du curseur à la fin de la ligne.
P
Colle (Paste) le buffer indiqué avant la position actuelle du curseur. Si aucun buffer
n'est indiqué (avec la commande ") alors 'P' utilise le buffer général.
X
Efface le caractère avant le curseur.
Y
Copie (Yank) la ligne courante dans le buffer indiqué. Si aucun buffer n'est indiqué, le
buffer général est utilisé.
34
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
d
Efface (Delete) jusqu'à lieu. "dd" efface la ligne courante. Un nombre efface ce
nombre de lignes. Tout ce qui est effacé est placé dans le buffer spécifié avec la
commande ". Si aucun buffer n'est spécifié, le buffer général est utilisé.
p
Colle (Paste) le buffer spécifié après la position actuelle du curseur ou la ligne. Si
aucun buffer n'est spécifié (avec la commande ") 'p' utilise le buffer général.
x
Efface le caractère sous le curseur. Un nombre indique combien de caractères doivent
être effacés. Les caractères seront effacés après le curseur.
y
Copie (Yank) jusqu'à lieu, en mettant le résultat dans un buffer. "yy" copie la ligne
courante. Un nombre copie ce nombre de lignes. Le buffer peut être spécifié avec la
commande ".Si aucun buffer n'est spécifié, le buffer général est utilisé.
Insérer du texte
A
Joint (Append) à la fin de la ligne courante.
I
Insère à partir du début de la ligne.
O
(la lettre)Entre en mode insertion sur une nouvelle ligne au-dessus de la position
courante du curseur.
a
Entre en mode insertion, les caractères tapés seront ajoutés après la position courante
du curseur. Un nombre insère tout le texte ce nombre de fois.
i
Entre en mode insertion, les caractères tapés seront insérés avant la position courante
du curseur. Un nombre insère tout le texte ce nombre de fois.
o
Entre en mode insertion sur une nouvelle ligne en dessous de la position courante du
curseur.
^B
Monte d'une page. Un nombre fait monter de ce nombre de pages.
^D
Descend d'une demi fenêtre. Un nombre fait descendre de ce nombre de lignes.
^F
Descend d'une page. Un nombre fait descendre de ce nombre de pages.
^H
Déplace le curseur d'un espace vers la gauche. Un nombre fait déplacer de ce nombre
d'espaces.
^J
Descend le curseur d'une ligne dans le même colonne. Un nombre fait descendre de ce
nombre de lignes.
^M
Déplace vers le premier caractère de la ligne suivante.
35
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
^N
Descend le curseur d'une ligne dans le même colonne. Un nombre fait descendre de ce
nombre de lignes.
^P
Monte le curseur d'une ligne dans le même colonne. Un nombre fait monter de ce
nombre de lignes.
^U
Monte d'une demi fenêtre. Un nombre fait monter de ce nombre de lignes.
$
Déplace le curseur à la fin de la ligne courante. Un nombre le fait se déplacer à la fin
des lignes suivantes.
%
Déplace le curseur sur la parenthèse ou accolade correspondante.
^
Déplace le curseur sur le premier caractère non-blanc.
(
Déplace le curseur au début de la phrase.
)
Déplace le curseur au début de la phrase suivante.
{
Déplace le curseur au paragraphe précédent.
}
Déplace le curseur au paragraphe suivant.
|
Déplace le curseur à la colonne indiquée par le nombre.
+
Déplace le curseur sur le prochain caractère non-blanc de la ligne suivante.
-
Déplace le curseur sur le prochain caractère non-blanc de la ligne courante.
0
(Zéro) Déplace le curseur sur la première lettre de la ligne courante.
B
Déplace le curseur d'un mot en arrière, en sautant la ponctuation.
E
Avance à la fin du mot, en sautant la ponctuation.
G
Aller (Go) à la ligne indiquée par le nombre. Si aucun nombre n'est donné, il va à la
fin du fichier.
H
Déplace le curseur sur le premier caractère non-blanc en haut de l'écran.
L
Déplace le curseur sur le premier caractère non-blanc en bas de l'écran.
M
Déplace le curseur sur le premier caractère non-blanc au milieu de l'écran.
W
Avance au début d'un mot,en sautant la ponctuation.
b
Recule le curseur d'un mot. Si le curseur est au milieu d'un mot, place le curseur sur le
premier caractère du mot.
e
36
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Avance le curseur d'un mot. Si le curseur est au milieu d'un mot, place le curseur sur le
dernier caractère du mot.
h
Déplace le curseur sur le caractère de gauche.
j
Descend le curseur d'une ligne.
k
Monte le curseur d'une ligne.
l
Déplace le curseur sur le caractère de droite.
w
Déplace le curseur sur le mot suivant. Si le curseur est au milieu d'un mot, place le
curseur sur le premier caractère du mot suivant.
^E
Déplace l'écran d'une ligne vers le haut. Un nombre fait monter de ce nombre de
lignes.
^Y
Déplace l'écran d'une ligne vers le bas. Un nombre fait descendre de ce nombre de
lignes.
z
Redessine l'écran avec les options suivantes. "z" place la ligne courante en haut de
l'écran; "z." place la ligne courante au centre de l'écran; et "z-" place la ligne courante
en bas de l'écran. Si vous spécifiez un nombre avant la commande 'z', il agit sur la
ligne spécifiée. Par exemple, "14z." place la ligne 14 au centre de l'écran.
Remplacer du texte
C
Change de la position du curseur jusqu'à la fin de la ligne.
R
Remplace les caractères de l'écran par les caractères entrés, s'arrête en tapant la touche
Escape.
S
Change une ligne entière.
c
Change jusqu'à <where>. "cc" change la ligne courante. Un nombre fait changer ce
nombre de lignes.
r
Remplace un caractère sous le curseur. Indiquer un nombre fait remplacer ce nombre
de caractères.
s
Substitue un caractère sous le curseur et passe en mode insertion. Spécifier un nombre
pour substituer ce nombre de caractères. Un signe dollar($) sera ajouté au dernier
caractère substitué.
37
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
,
Répète la dernière commande f, F, t ou T dans la direction opposée.
/
Recherche vers le bas dans le fichier la chaîne spécifiée après le /.
;
Répète la dernière commande f, F, t ou T.
?
Recherche vers le haut dans le fichier la chaîne spécifiée.
F
Recherche vers l'avant dans la ligne courante le caractère spécifié après la commande
'F'. S'il l'a trouvé, déplace le curseur sur sa position.
N
Répète la dernière recherche faite par '/' ou '?', mais dans la direction opposée.
T
Recherche vers l'arrière dans la ligne courante le caractère spécifié après la commande
'T', et se place sur la colonne suivante s'il l'a trouvé.
f
Recherche dans la ligne courante le caractère spécifié après la commande 'f'. S'il l'a
trouvé, déplace le curseur sur sa position.
n
Répète la dernière recherche faite par '/' ou '?'.
t
Cherche dans la ligne courante le caractère spécifié après la commande 't' et se place
sur la colonne précédant le caractère, s’il l'a trouvé.
~
Inverse la casse du caractère sous le curseur.
<
Décale jusqu'à lieu d'une tabulation vers la gauche. "<<" Décale la ligne courante et
peut être répété avec un nombre.
>
Décale jusqu'à lieu d'une tabulation vers la droite. ">>" décale la ligne courante et peut
être répété avec un nombre.
J
Joint la ligne courante à la suivante. Un nombre fait joindre ce nombre de lignes.
Sauvegarder et quitter
^\
Sort du mode "VI" et passe en mode "EX". L'éditeur EX est l'éditeur en ligne de
commande sur lequel VI est construit. La commande EX pour retourner dans VI est
":vi".
Q
Sort du mode "VI" et passe en mode "EX". L'éditeur EX est l'éditeur en ligne de
commande sur lequel VI est construit. La commande EX pour retourner dans VI est
":vi".
ZZ
Quitte l'éditeur, en sauvant tout les changements effectués.
38
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
Divers
^G
Affiche le nom du fichier courant et son statut.
^L
Vide et redessine l'écran.
^R
Redessine l'écran en retirant les mauvaises lignes.
^[
Touche d'échappement. Annule les commandes partiellement tapées.
^^
Retourne au dernier fichier édité.
!
Exécute un shell. Si un lieu est spécifié, le programme qui est exécuté avec ! utilise les
ligne(s) spécifiée(s) comme entrée standard, et va les remplacer par la sortie standard
du programme exécuté. "!!" exécute un programme utilisant la ligne courante comme
entrée. Par exemple "!4jsort" va prendre 5 lignes à partir de la position courante du
curseur et exécuter sort. Après avoir tapé la commande, il y aura un point
d'exclamation où vous pourrez taper la commande.
&
Répète la précédente commande ":s".
.
Répète la dernière commande qui a modifié le fichier.
:
Commence une commande de l'éditeur EX. La commande est exécutée une fois que
l'utilisateur a tapé retour.(voir section ci-dessous.)
@
Tape la commande stockée dans le buffer spécifié.
U
Restaure la ligne courante dans l'état où elle se trouvait avant que le curseur aille à la
ligne.
m
Marque la position courante du curseur avec le caractère spécifié après la commande
'm'.
u
Annule (Undo) le dernier changement dans le fichier. Retaper 'u' va refaire le
changement.(NDT : avec Vim,'u' annule le changement précédent et '.' le rétablit.).
Les commandes EX
L'éditeur VI est basé sur un autre éditeur, nommé EX. L'éditeur EX édite seulement par ligne.
Depuis l'éditeur VI, vous utilisez la commande : pour entrer une commande EX. La liste
donnée ici n'est pas complète, mais les commandes proposées sont les plus utilisées. Si plus
d'une ligne doit être modifiée par certaines commandes (comme ":s" et ":w"), un intervalle
doit être spécifié avant la commande. Par exemple, pour substituer de la ligne 3 à la ligne 15,
la commande est ":3,15s/from/this/g".
39
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
States of America" va insérer les mots, "United States of America" partout où le mot
"usa" est tapé.
:map touches new_seq
Mapping. Ceci vous permet de remplacer une touche ou une séquence de touches par
une autre touche ou séquence de touches.
:q
Quitte VI. Si des changements ont été faits, l'éditeur va afficher un message
d'avertissement.
:q!
Quitte VI sans sauvegarder les changements.
:s/pattern/to_pattern/options
Substitution. Ceci substitue le modèle spécifié par la chaîne dans to_pattern. Sans
option, il substitue seulement la première occurrence du modèle. Si un 'g' est spécifié,
toutes les occurrences seront substituées. Par exemple, la commande
":1,$s/Dwayne/Dwight/g" remplace toutes les occurrences de "Dwayne" par "Dwight".
:set [all]
Définit les options de VI et EX. La commande ":set all" affiche les options possibles.
(Voir la section sur la personnalisation de VI pour quelques options.)
:una string
Retire l'abréviation définie précédemment par ":ab".
:unm keys
Retire le mapping défini par ":map".
:vi
Commence l'édition d'un nouveau fichier. Si les changements n'ont pas étés
sauvegardés, l'éditeur vous le signale.
:w
Sauvegarde (Write out) le fichier courant.
:w nom_de_fichier
Ecrit (Write) le buffer dans le fichier spécifié.
:w >> filename
Ajoute le contenu du buffer au fichier.
:wq
Enregistre le buffer et quitte.
Glossaire
a2p : Convertisseur de awk vers Perl
a2aps : Conversion d'ASCII en PostScript
adb : Debugueur
adduser : Ajouter un nouvel utilisateur
40
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
41
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
42
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
43
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
44
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
45
Cours Initiation à l’environnement Linux M. Hicham MOHMOH
46