Le document que vous lisez en ce moment est seulement le prmier d'une série que je vais écrire sur ce monde magique
qui est Linux.
Dans cette première partie, je vais faire une introductions à Linux, et je vais vous présenter ses principaux commandes. Je
voulais aussi ajouter une partie sur l'installation de ce système d'exploitation, mais j'ai trouvé que des documents traitent ce
sujet d'une façon très detaillée pour chaque distribution et chaque version.
Pour faire ce tutorial, je me suis appuyé sur les documents suivants:
Remarque: Ce document est testé avec Internet Explorer 6.0.2600.0000 sous Windows 98 (mais je pense que ça marchera aussi pour IE 4 et 5), Netscape Communicator 4.77 et Konqueror 2.11(avec KDE 2.11) sous Linux Mandrake 8.0. Pour ce qui est de Lynx ou Links je suis désolé que la mise en forme n'est pas assez bonne.
1.1- De quoi vous me parlez là?
Je vous parle de Linux (une réponse très bête non?). Linux est un système d'exploitation de type UNIX libre et gratuit (parfois vous payez, mais c'est juste pour couvrir les frais des CDs...), capable de tourner sur un simple PC (cependant, j'ai enetendu dire qu'il existe des versions pour MAC ...). La première version officielle de Linux date de 1991. Elle fut mise au point par une équipe de "hackers" (comprendre des vrais hackers et non pas des "crashers" !) autour de Linus Torvalds de l'Université de Helsinki, Finlande.1.2- Pourquoi Linux?
Si tu en as marre de Windaube (F**k Kro$oft), alors tu dois installer Linux.
Si votre petit Windaube (F**k Kro$oft une deuxième fois) plante tous les 5 minutes, alors tu dois installer Linux.
Si tu es fan de la programmation et tu cherches des compilateurs très puissants et gratuit, alors tu dois installer Linux.
Si tu es un Lamer et tu cherche à te faire remarquer devant tes amis, alors tu dois installer Linux (mais je suis sûr que tu arriveras jamais ;-)).
Si tu es simplement curieux et tu veux connaître un autre monde, alors tu dois installer Linux.
Si tu cherches ton bonheur devant ton PC, alors IL VOUS FAUT LINUX.Si tu ... (Arrêtez, j'en ai marre.).
Pourquoi?!
Cependant il existe quelques inconvénients (si on peut les appeler comme ça):
- Linux est multi-tâche: plusieurs programmes peuvent fonctionner simultanément.
- Linux est multi-utilisateurs: plusieurs utilisateurs peuvent utiliser simultanément le même ordinateur, via un réseau local ou via l'Internet, par exemple.
- Linux est remarquablement stable. A moins de commettre des imprudences sous le compte "root", il est extrêmement difficile de le "planter" complètement.
- Linux peut lire des disques de formats différents du sien. A partir de Linux, vous pouvez accéder à vos données qui se trouveraient par exemple sur votre partition MS-Windows. Toutefois, le contraire n'est pas vrai.
- Linux est très secure s'il y a devant lui un administrateur compétent.
- Il existe bien d'autres (beaucoup même) avantages que si on les cite, on va dépasser le niveau débutant de ce document.
1.3- Où trouver...
- Pour que Linux puisse fonctionner confortablement, il sera indispensable de lui réserver une partition à son propre format sur votre disque dur. Si vous n'avez qu'un seul disque dur et si vous ne voulez pas vous risquer à le repartitionner, vous pourrez toujours essayer Linux à partir de MSDOS grâce à une intallation "UMSDOS", mais vous risquez d'être fort déçus du fait du ralentissement qui s'ensuivra.
- C'est vous êtes fan de Microsoft Flight Simulator (arf) ou bien Tomb Raider, tampis pour vous.
1.3.1- Linux:
1.3.2- de l'aide:
- On peut se procurer Linux gratuitement sur l'Internet. Par ailleurs, l'ensemble est assez volumineux et, si Linux est gratuit, les communications téléphoniques (F**k ***télékom)ne le sont pas et les disquettes ou autres supports ne le sont pas non plus !
- On peut aussi trouver Linux avec certains livres ou magazines.
- La méthode la plus simple à l'heure actuelle est donc de se procurer Linux sur CDrom, soit dans les magasins de logiciels, soit par correspondance. Dans la plupart des cas, vous aurez ainsi une "distribution" relativement homogène, qui contiendra, outre le système d'exploitation Linux, une grande quantité de logiciels et de documentation. Avec certaines de ces distributions (compter environ 300 FF), on trouve aussi des manuels papier fort complets et surtout une période d'assistance téléphonique ou par Internet.
- Une idée est d'acheter un bouquin.
- Une autre bonne idée est de lire les howto et les guides fournit avec votre distribution.
- S'indcrire dans des forums ou des newsgroupes.
- Voici aussi quelques sites interessants:
2- Quelques concepts de base d'Unix:
2.1- Utilisateurs et groupes:
Remarque: J'ai bien dit UNIX, parce que cela est le cas de tous les UNIX y compris Linux.Comme vous le savez Linux est un système d'exploitation multi-utilisateur, c'est pour ça qu'il est nécessaire de s'identifier au début de chaque session. Chaque utilisateur a deux paramètres importants:
Pour se connecter en tant qu'utilisateur, c'est facile il suffit de remplir les champs login et password (n'ayez pas peur si vous ne voyez rien à l'écran quand vous tapez votre mot de pass, normal non?). Et pour se déconnecter, tapez "logout", et si ça marche pas tapez "exit".
- Login: c'est le nom avec lequel vous vous connectez à Linux.
- Password: c'est le mot de passe.
Remarque: Si vous êtes "root", il existe deux autres commandes intéressantes: "halt" pour arrêter le système et "reboot" pour le redémarrer.
Pour ajouter un nouvel utilisateur (en mode console), vous devez taper: "adduser user", et ça va créer un nouvel utilisateur du nom "user", ainsi qu'un répertoire "/home/user", dans lequel "user" aura ses fichiers. En fait, "adduser" est un script qui appelle "useradd" et crée en plus le home (le répértoire dejà mentionné là-haut) du nouvel utilisateur.
Astuce: Si votre commande "adduser" (ou "useradd") ne fonctionne plus, vérifiez s'il n'existe pas un fichier "/etc/pwd.lock", et détruisez le ("rm /etc/pwd.lock").
Pour changer le mot de passe d'un utilisateur: "passwd user" sous "root", ou "passwd" sous "user".
Pour retirer un utilisateur et tous ses documents : "userdel -r user" fera le travail.
Tapez "who" pour savoir qu'ils sont les utilisateurs connectés en ce moment, et "whoami" pour savoir sous quel nom d'utilisateur vous vous êtes connectés.Vous entendez beaucoup parler de "root", en effet c'est un utilisateur spécial (vous le verrez plus tard).
A part les utilisateurs, sous Linux (et d'ailleurs tous les Unix) il existe ce qu'on appelle un groupe. Les groupes sont utiles dans le cadre de partage de fichiers entre différentes personnes. Chaque groupe peut contenir autant d'utilisateurs que vous le souhaitez, et il est très courant de voir une telle séparation dans les gros systèmes.
Par défaut Par défaut, la création d'un utilisateur crée aussi un groupe du même nom que l'utilisateur.
Pour créer un groupe: "groupadd nouveau_groupe" crée un groupe du nom nouveau_groupe.
Pour ajouter l'utilisateur "user" au groupe nouveau_groupe : "gpasswd -a bebert nouveau_groupe".
Et pour identifier les groupes auxquels appartient l'utilisateur "user" : "groups user".Une autre chose à savoir c'est que le système ne connait pas les utilisateurs ou les groupes par leurs noms, mais par deux numéros, le premier est UID (User ID) pour les utilisateurs, et GID (Group ID) pour les groupes.
2.2- Les fichiers: (la majorité de cette partie est tirée du "Manuel de référence")
En tant que propriétaire d'un fichier, un utilisateur peut établir des droits sur ce fichier. Ces droits distinguent trois catégories d'utilisateurs: le propriétaire du fichier, tout utilisateur qui est membre du groupe propriétaire associé au fichier (appelé le groupe propriétaire) mais n'est pas le propriétaire lui-même, et les autres, catégorie qui regroupe tout utilisateur qui n'est ni le propriétaire ni membre du groupe propriétaire.On distingue trois types de droits :
Toutes les combinaisons de ces droits sont possibles : vous pouvez par exemple autoriser la lecture du fichier à vous seul et l'interdire à tous les autres. Vous pouvez même faire l'inverse, même si ce n'est pas très logique à première vue... En tant que propriétaire du fichier, vous pouvez en changer le groupe propriétaire (si et seulement si vous êtes aussi membre du nouveau groupe), voire vous en déposséder (c'est-à-dire en changer le propriétaire). Bien sûr, si vous vous dépossédez du fichier, vous perdez tous vos droits dessus...
- Droit de lecture (r pour Read, lire) : sur un fichier, cela autorise la lecture de son contenu. Pour un répertoire, cela autorise son contenu (c'est-à-dire les fichiers qu'il contient) à être listé.
- Droit d'écriture (w pour Write, écrire) : pour un fichier, cela autorise la modification de son contenu. Pour un répertoire, l'accès en écriture autorise un utilisateur à ajouter et/ou retirer des fichiers de ce répertoire, même s'il n'est pas le propriétaire des dits fichiers.
- Droit d'exécution (x pour eXecute, exécuter) : pour un fichier, cela en autorise l'exécution (par conséquent, seuls les fichiers exécutables devraient normalement avoir ce droit positionné). Pour un répertoire, cela autorise un utilisateur à le traverser (ce qui signifie entrer dans ce répertoire ou passer par celui-ci). Notez bien la séparation avec le droit en lecture: il se peut très bien que vous puissiez traverser un répertoire sans pouvoir lire son contenu !
Prenons un exemple:
$ls -l
total 1
-rw-r----- 1 slaydave prog 51230 Jul 16 14:11 langage_c
drwxr-xr-- 2 user prog 1024 Jul 8 14:11 programmation/
$-----------------------------
pour "$" il s'agit de l'invite de la ligne de commande,
pour le "root" il est souvent marqué "#".
Ce qui est est en gras c'est ce que vous tapez.Les dix premiers caractères désignent successivement le type du fichier et les droits qui lui sont associés; le premier caractère désigne le type du fichier : c'est un tiret (-) s'il s'agit d'un fichier ordinaire, (d) si le fichier est un répertoire. Il existe d'autres types de fichiers mais on est encore débutant pour les savoir, alors patience. Les neuf caractères qui suivent représentent les droits associés au fichier. On constatera ici la distinction faite entre les différents types d'utilisateurs pour un même fichier : les trois premiers caractères représentent les droits octroyés à l'utilisateur propriétaire, les trois suivants s'appliquent à tout utilisateur du groupe qui n'est pas le propriétaire, et les trois derniers aux autres; un tiret (-) signifie que le droit n'est pas octroyé.
Vient ensuite le nombre de liens du fichier (on verra pas ça une autre fois). Viennent ensuite le nom de l'utilisateur propriétaire du fichier et le nom du groupe propriétaire.
Enfin sont affichés la taille du fichier (en octets) ainsi que la date de sa dernière modification, et pour finir le nom du fichier ou répertoire lui-même.Observons maintenant en détails les droits associés à l'accès de chacun de ces fichiers : il faut tout d'abord enlever le premier caractère, qui désigne le type ; donc pour le fichier "langage_c", les droits accordés sont : "rw-r-----". Voici comment les interpréter :
Pour le répertoire "programmation", les droits sont rwxr-xr--, et donc :
- Les trois premiers (rw-) sont les droits accordés à l'utilisateur propriétaire de ce fichier, en l'occurrence "slaydave". L'utilisateur "slaydave" peut donc lire le fichier (r), le modifier (w) mais pas l'exécuter (-).
- Les trois suivants (r--) sont concédés à tout utilisateur qui n'est pas slaydave mais qui appartient au groupe "prog" : il pourra lire le fichier (r), mais ne pourra ni le modifier ni l'exécuter (--).
- Les trois derniers (---) s'appliquent à tout utilisateur qui n'est pas slaydave et qui n'appartient pas au groupe "prog" : un tel utilisateur n'a tout simplement aucun droit sur ce fichier.
Il existe une exception à ces règles : "root". "root" peut changer les attributs (droits, propriétaire, groupe propriétaire) de tous les fichiers, même s'il n'en est pas le propriétaire. Cela veut dire qu'il peut aussi s'en attribuer la propriété ! Il peut lire des fichiers sur lesquels il n'a pas le droit de lecture, traverser des répertoires auxquels il n'aurait normalement pas accès, et ainsi de suite. Et s'il lui manque un droit, il lui suffit juste de le rajouter..., le "root" est donc le super-utilisateur.
- "user", en tant que propriétaire du répertoire, peut en lister le contenu (r), peut ajouter des fichiers dans ce répertoire ou en supprimer (w), et il peut traverser ce répertoire (x).
- Tout utilisateur qui n'est pas "user" mais appartient au groupe "prog" pourra lister le contenu de ce répertoire (r) mais ne pourra pas y ajouter des fichiers (-); il aura par contre le droit de le traverser (x).
- Tout autre utilisateur ne pourra que lister les fichiers de ce répertoire (r), mais c'est tout. Il ne sera même pas capable de le traverser.
Pour conclure, il est utile de mentionner les différences entres les noms de fichiers dans le monde Unix et le monde Windows. Unix permet une flexibilité bien plus grande et a moins de limitations :
2.3- Les processus (introduction): (Même chose que pour la partie précédente)
- Un nom de fichier peut comporter n'importe quel caractère (à l'exception du caractère ASCII 0, qui dénote la fin d'une chaîne de caractères, et /, qui est le séparateur de répertoires), même des caractères non imprimables. De plus, Unix est sensible à la casse : les fichiers readme et Readme sont différents, car r et R sont deux caractères différents.
- Comme vous avez pu le remarquer, un nom de fichier ne comporte pas forcément une extension, à moins que vous le vouliez. Les extensions de fichiers n'identifient pas le contenu des dits fichiers sous Linux, pas plus qu'elles ne le font sur n'importe quel autre système d'exploitation, d'ailleurs. Ces « extensions » ainsi nommées sont toujours très pratique, cependant. Le caractère point (.) sous Unix est juste un caractère comme les autres. On peut noter que les noms de fichiers commençant avec un point sous Unix sont des «fichiers cachés».
On désigne par le terme de processus une instance de programme en cours d'exécution et son environnement. Chaque processus s'exécute avec les droits de l'utilisateur qui l'a lancé. En interne, le système identifie les processus de façon unique grâce à un numéro. Ce numéro est appelé le PID (Process ID). Avec ce PID, le système sait, entre autres choses, qui (quel utilisateur, donc) a lancé le processus. Il lui reste alors à vérifier si ce que le processus demande est « légal ». Si on en revient donc à l'exemple du fichier "langage_c" cité plus haut, un processus lancé par l'utilisateur "user" sera capable d'ouvrir ce fichier en lecture seule, mais pas en lecture/écriture, puisque les droits associés au fichier l'interdisent. Encore une fois, l'exception à la règle est "root"...Cela a pour conséquence que Linux est virtuellement immunisé contre les virus : pour opérer, les virus doivent infecter des fichiers exécutables du système. Mais avec le seul statut d'utilisateur, il leur est impossible de modifier ces fichiers, ce qui réduit le risque d'autant. Ajoutons que les virus sont, en général, très rares dans le monde Unix : jusque là, il n'existe que trois virus connus pour Linux (Je sais pas s'il existe d'autres), et ils sont complètement inoffensifs lorsqu'ils sont lancés par un utilisateur normal. Un seul utilisateur peut vraiment endommager le système en activant ces virus, et, encore une fois, c'est... "root".
Paradoxalement, il existe bien des logiciels antivirus sous Linux pour... les fichiers DOS/Windows. En effet, de plus en plus de serveurs de fichiers Linux fournissent des machines Windows, avec le paquetage logiciel Samba (non, on va pas parler de ça).Linux permet également un contrôle aisé des processus. Une façon de les contrôler sont les signaux. Avec les signaux, vous pouvez par exemple suspendre un processus ou le tuer. Envoyez simplement le signal correspondant au processus et c'est fait. Toutefois, vous serez limité à l'envoi de signaux à vos propres processus, pas aux processus lancés par un autre utilisateur. L'exception à la règle est "root". Oui, encore lui !(Dans un autre article, on va parler de ça en détail).
2.4- La ligne de commande (présentation):
La ligne de commande est le moyen le plus direct pour donner des ordres à la machine. Le shell est le programme qui se charge de lire et dexécuter les commandes que lutilisateur saisit. Classiquement, le shell est utilisé de manière interactive, cest à dire que lutilisateur dialogue avec le système par lintermédiaire du shell. Il saisit les commandes, et le shell les exécute et affiche les résultats. Le shell le plus couramment utilisé sous Linux est sans aucun doute bash. En tout cas, cest le shell par défaut que la plupart des distributions utilisent. Il est donc conseillé de connaître un petit peu ce que ce shell est capable de réaliser, et comment. Son nom provient de labréviation de langlais «Bourne Again SHell», ce qui signifie quil sagit effectivement dune nouvelle variante du shell sh.
Au temps des interfaces graphiques complexes et sophistiquées, il peut paraître archaïque de vouloir encore utiliser des lignes de commandes pour utiliser un ordinateur. Cest en partie vrai, mais il faut savoir que les shells Unix sont extrêmement puissants et que les interfaces graphiques ne permettent toujours pas, même à lheure actuelle, de réaliser toutes les tâches faisables avec un shell. Dautre part, il est souvent plus efficace de taper une simple commande dans un shell que de rechercher un outil graphique et de parcourir les divers menus, puis de choisir les options de la commande désirée avant de valider. Des ergonomes ont démontré, et des graphistes du monde entier le confirmeront, que la souris nest pas le périphérique dentrée le plus précis et le plus facile à utiliser pour manipuler les objets de lenvironnement utilisateur.
Quoi quil en soit, le shell est bien plus quun interpréteur de commande. Il sagit réellement dun environnement de programmation, permettant de définir des variables, des fonctions, des instructions complexes et des programmes complets, que lon appelle des scripts shell.
Mais ne comptez pas de savoir le tout à la fois, on verra ça dans un autre article.Voici quelques commandes importantes à savoir:
Exercice:
- su: pour devenir root provisoirement.
- pwd: pour savoir où on est sur le système.
- cd: pour changer le répertoire.
Elle peut être utilisée avec "." et "..", qui sont respectivement le répertoire courant et son répertoire parent.
Taper simplement "cd" vous ramènera à votre répertoire personnel.
Taper "cd -" vous renverra dans le dernier répertoire visité. Et enfin, vous pouvez spécifier le répertoire d'un utilisateur "user" en tapant "~darth" ("~" seul signifie votre propre répertoire personnel). Notez qu'en tant qu'utilisateur normal, vous ne pouvez, en général, pas accéder au répertoire d'un autre utilisateur (à moins qu'il ne l'ait explicitement autorisé ou que tel soit le réglage de la configuration par défaut du système), sauf si vous êtes "root".- man: "man commande" vous offres tous les informations sur le commande "commande". (Il existe aussi "info" qui fait la même chose).
Parfois vous tombez sur une expression tel que "voir les page de manuel commande(2)", pour cela vous faites: man 2 commande.- cat: Afficher le contenu d'un ou plusieurs fichiers sur la sortie standard, donc l'écran en temps normal.
- less: Utilisez less pour voir des gros fichiers, qui ne rentrent pas sur un écran.
- ls: Faire une liste de fichiers (meilleur que dir du DOS). (consulter les pages man pour plus d'info sur les options de cette commande).
Aller voir les pages man des commandes suivantes: "su", "pwd", "cd", "cat", "less", "ls" et "man".A la fin de cette partie j'ai décidé de vous donner une liste des principaux racourcis de clavier pour le shell BASH. D'abord les touches fléchées : Bash maintient un historique des commandes que vous tapez, dans lequel vous pouvez vous balader avec les flèches haut et bas. Vous pouvez remonter jusqu'à un nombre de lignes définies dans la variable d'environnement HISTSIZE (on va revenir au sujet de ces variables plus tard). De plus, l'historique est persistant d'une session à l'autre, donc vous ne perdrez pas les commandes que vous avez tapées lors d'une session précédente.
Les flèches gauche et droite déplacent le curseur dans le sens indiqué. Vous pouvez ainsi éditer vos lignes de cette façon.
"Ctrl+a" et "Ctrl+e", vous amèneront respectivement au début et à la fin de la ligne courante. Les touches "Backspace" et "Suppr" (aussi appelé "Del") fonctionneront comme on s'y attend. Un équivalent de "Backspace" est "Ctrl+h" et un équivalent de "Suppr" est "Ctrl+d". "Ctrl+k" effacera toute la ligne depuis la position du curseur jusqu'à la fin de la ligne, et "Ctrl+w" effacera le mot qui précède la position du curseur.
Taper "Ctrl+d" sur une ligne vide vous fera fermer la session actuelle, ce qui est un vrai raccourci par rapport à la commande "exit". "Ctrl+c" interrompra la commande en cours d'exécution, sauf si vous étiez en train d'éditer une ligne, auquel cas ce sera l'édition en cours qui sera interrompue et vous serez ramené à l'invite. "Ctrl+l" nettoie l'écran.
Il existe beaucoup d'autres racourcis, mais ce sont les essentiels.
3- Introduction à la ligne de commande:
3.1- Manipulation de fichiers:
La manipulation de fichiers signifie ici "copier", "déplacer" et "effacer" des fichiers. Le changement de leurs attributs (propriétaire, permissions associées) sera examiné par la suite.
3.2- Manipulation des attributs de fichiers:
- mkdir: cette commande permet de créer des répertoire.
$mkdir metal
-----------------------------
créer un répertoire "metal" dans le répertoire courant.$mkdir -p musique/slayer
-----------------------------
créer un répertoire "slayer" dans le répertoire "musique" après avoir créer ce dernier s'il n'existait pas.- touch: cette commande a pour but de mettre à jour les dates d'accès et de modification d'un fichier, mais on peut l'utiliser pour créer des fichier vides.
$touch paroles/reign_in_blood interview
-----------------------------
créer un fichier "reign_in_blood" de taille 0 dans le répertoire "paroles" (s'il existait), et un fichier "interview" aussi de taille 0 dans le répertoire courant.- rm: (ReMove) cette commande permet supprimer des fichiers ou des répertoires.
Cette commande accepte plusieurs options:
- -r ou -R : supprime récursivement. Cette option est obligatoire pour supprimer un répertoire, cependant il existe aussi une commande rmdir, mais elle ne supprime que des répertoires vides.
- -i : demande une confirmation avant chaque effacement. Cette option est par défaut dans plusieurs distribution.
- -f : le contraire de -i, cette option force la suppression des fichiers ou répertoires.
$rm -rf morbid/
-----------------------------
supprimer tout le répertoire "morbid".$rm -i *.txt
-----------------------------
supprimer tout les fichiers terminants par ".txt" dans le répertoire courant avec demande de confirmation (tapez o ou y pour confirmer, ou n sinon).- mv: cette commande permet de déplacer un fichier ou un dossier (peut aussi changer son nom).
Voici quelques options de cette commande:
- -f : force l'opération -. Aucun avertissement en cas d'écrasement d'un fichier au cours de l'opération.
- -i : le contraire: demande une confirmation à l'utilisateur avant d'écraser un fichier existant.
- -v : mode verbeux qui rapporte tous les changements.
$mv -f slayer/disco/*.htm .
-----------------------------
déplacer tous les fichiers du répertoire "slayer/disco" terminants par ".htm" dans le répertoire courant (.), sans demande de confirmation.$mv udisputed_attitude undisp
-----------------------------
renommer le fichier "undisputed_attitude" en "undisp".- cp: cette commande permet de copier des fichiers ou des répertoires.
Voici ses principaux options:
- -R : copie récursivement; obligatoire pour copier un répertoire.
- -i : demande une confirmation avant d'écraser des fichiers.
- -f : le contraire de -i.
- -v : mode verbeux qui mentionne toutes les actions effectuées par cp.
$cp -i slayer/photos/*.gif slayer/images/
-----------------------------
copier tous les fichiers se terminants par ".gif" du répertoire "slayer/photos" dans le répertoire "slayer/images/", en demandant une confirmation avant d'écraser un fichier.$cp -vR testament/paroles/ obituary/paroles/ ..
-----------------------------
copier tout les répertoire "testament/paroles/" "obituary/paroles/" dans le répertoire parent.
Les commandes présentée ici sont utilisées pour changer le propriétaire ou groupe propriétaire d'un fichier ou ses droits d'accès.
3.3- Redirections et tubes: (Tiré du "Manuel de référence")
- chown : changer le propriétaire d'un ou plusieurs fichiers.
Ses options:
- -R : récursif; change le propriétaire de tous les fichiers et sous-répertoires d'un répertoire donné.
- -v : mode verbeux; décrit toutes les actions effectuées par chown; indique quels fichiers ont changé de propriétaire à la suite de la commande et lesquels sont demeurés inchangés.
- -c : comme -v, mais ne mentionne que les fichiers pour lesquels un changement a eu lieu.
$chown slaydave /shared/book.tex
-----------------------------
changer le propriétaire du fichier "/shared/book.tex" pour nobody.$chown -Rc storm.metal *.mp3 musique/
-----------------------------
donner la propriété de tous les fichiers dans le répertoire courant se terminant par ".mp3" et de tous les fichiers et sous-répertoires du répertoire "musique/" à "storm" et au groupe "metal", en ne mentionnant que les fichiers affectés par la commande.- chgrp: (CHange GRouP) ne vous laisse changer que le groupe propriétaire d'un fichier ou d'un groupe de fichiers; sa syntaxe est très semblable à celle de la commande chown.
$chgrp death metal/obit*
-----------------------------
attribuer au groupe "death" tous les fichiers du répertoire "metal/" dont le nom commence par "obit".- chmod: changer les permissions sur des fichiers et des répertoires.
La syntaxe de cette commande est un peu particulière:
chmod [options] "changement de mode" "fichier|rép." [fichier|rép...]
Ce qui est entre crochets est facultatif, le signe "|" signifie "ou".Le changement de mode peut se produire de deux façons:
Les options principales sont très similaires à celles de chown ou chgrp :
- en octal; les droits d'accès de l'utilisateur propriétaire correspondent alors à des chiffres de la forme
00, où 0 et ceux des «autres» sont de la forme x. Pour obtenir le chiffre correct, il suffira d'additionner les droits d'accès assignés chiffre. Ainsi, les permissions rwxr-xr-- correspondent à 400+200+100 (droits d'accès de l'utilisateur propriétaire, rwx) +40+10 (droits d'accès du groupe, r-x) +4 (droits d'accès des autres, r--) = 754; les droits d'accès sont ainsi exprimés de manière absolue : les droits d'accès précédents sont remplacés de façon inconditionnelle. - à l'aide de certaines expressions : les droits d'accès sont ici indiqués par une suite d'expressions séparées par des virgules, une expression étant de la forme
[catégorie] "+|-" "droits d'accès"
La catégorie peut être une combinaison de : u (User, utilisateur, permission pour propriétaire), g (Group, groupe, permision pour le groupe propriétaire) ou o (Others, permission pour les « autres »). Si aucune catégorie n'est spécifiée, le changement s'applique à toutes les catégories.
Un "+" appose un droit d'accès, un "-" le retire et un "=" établit la permission.
Pour finir, les droits d'accès sont définis par une ou plusieurs des lettres suivantes : r (Read, lecture), w (Write, écriture) ou x (eXecute, exécution.
- -R : change les droits d'accès récursivement.
- -v : mode verbeux; décrit les actions effectuées pour chaque fichier.
- -c : comme -v mais ne mentionne que les fichiers dont les droits d'accès ont changé.
$chmod -R o-w metal/
-----------------------------
enlever de façon récursive le droit d'écriture aux «autres» sur tous les fichiers et sous-répertoires du répertoire "metal".$chmod -R og-w,o-x slayer/
-----------------------------
enlever de façon récursive le droit d'écriture pour le groupe et les autres sur tout le répertoire "slayer/", et retirer le droit d'exécution pour les autres.$chmod -c 644 divers/perso*/
-----------------------------
change les droits d'accès de tous les fichiers du répertoire "divers/" dont les noms commencent par "perso" en rw-r--r-- (droit de lecture pour tout le monde et droit d'écriture pour le propriétaire du fichier seulement), et ne mentionne que les fichiers affectés par l'opération.
3.3.1- Redirections:3.4- Autres: (encore tiré du "Manuel de référence")
Pour comprendre le principe des redirections et des tubes, ils nous faudra introduire ici une nouvelles notion qui concerne les processus. Chaque processus sous Unix (y compris les applications graphiques) ouvre un minimum de trois descripteurs de fichiers : l'entrée standard, la sortie standard et le canal d'erreur standard. Leurs numéros respectifs sont 0, 1 et 2. En général, ces trois descripteurs sont associés au Terminal depuis lequel le processus a été lancé, l'entrée standard étant lue depuis le clavier. Le but des redirections et des tubes est de rediriger ces descripteurs.Dans cette section on va parler des redirections.
Supposons, par exemple, que vous vouliez connaître la liste des fichiers se terminant par ".png" dans le répertoire "images", et que cette liste soit très longue : il serait donc pertinent de la stocker dans un fichier pour la consulter à loisir ensuite. Vous pouvez alors taper ceci :
$ ls images/*.png 1>liste_fichiers
Ce qui signifie que la sortie standard de cette commande (1) est redirigée (>) vers le fichier qui a pour nom liste_fichiers. Le signe > est l'opérateur de redirection de sortie. Dans le cas où le fichier de redirection n'existe pas, il est alors créé. Par contre, s'il existait précédemment, son ancien contenu est écrasé. Cependant, par défaut, le descripteur redirigé par cet opérateur est la sortie standard, il n'est donc pas nécessaire de le spécifier sur la ligne de commande. Vous pouvez donc écrire plus simplement : $ ls images/*.png > liste_fichiers
et le résultat sera exactement le même. Vous pouvez ensuite consulter le fichier à l'aide d'un visualisateur de fichiers textes tel que "less".Supposons maintenant que vous vouliez connaître le nombre exact de ces fichiers. Au lieu de compter manuellement, vous pouvez utiliser le bien nommé : "wc" (Word Count, comptage des mots) avec l'option -l, qui écrit sur la sortie standard le nombre de lignes du fichier. Pour obtenir le résultat désiré, une solution possible serait la suivante :
wc -l 0 <liste_fichiers
Le signe < est l'opérateur de redirection d'entrée. Le descripteur redirigé par défaut est également celui de l'entrée standard, donc 0. La ligne s'écrit alors simplement :
wc -l <liste_fichiersSupposons maintenant que vous vouliez retirer de cette liste toutes les «extensions» des fichiers puis sauvegarder le résultat dans un autre fichier. L'outil dont vous aurez besoin sera : "sed", pour Stream EDitor (éditeur de flux). Il suffira de rediriger l'entrée standard de sed vers le fichier liste_fichiers et de rediriger sa sortie vers le fichier résultat, par exemple la_liste : sed -e 's/\.png$//g' <liste_fichiers > la_liste
Il vous sera également possible de consulter à loisir cette nouvelle liste avec un visualisateur.Il pourrait aussi s'avérer utile de rediriger l'erreur standard. Par exemple, vous voulez savoir quels répertoires dans /shared ne vous sont pas accessibles : une solution est de lister récursivement ce répertoire et de rediriger les erreurs vers un fichier, tout en n'affichant pas le canal de sortie standard :
ls -R /shared > /dev/null 2>erreurs
Ce qui signifie que la sortie standard sera redirigée (>) vers /dev/null, un fichier spécial dans lequel tout ce qu'on écrit est perdu (et aura comme effet secondaire que la sortie standard ne sera pas affichée) et que le canal d'erreur standard (2) est redirigé (>) vers le fichier erreurs.3.3.2- Tubes:
Les tubes (pipes en anglais) sont en quelque sorte une combinaison des redirections d'entrée et de sortie. Leur principe mime en effet celui d'un tube: un processus envoie des données dans le tube par un bout et un autre processus lit les données par l'autre bout. L'opérateur tube est "|". Reprenons l'exemple de la liste des fichiers ".png" ci-dessus. Supposons que vous vouliez seulement connaître le nombre de fichiers en question sans avoir à stocker la liste dans un fichier temporaire.
utilisez alors la commande suivante:
ls images/*.png | wc -l
ce qui signifie que la sortie standard de la commande ls (donc la liste des fichiers) est redirigée vers l'entrée standard de la commande wc. Vous obtenez donc le résultat désiré.Vous pouvez de même construire directement la liste des fichiers «sans les extensions» avec la commande suivante:
ls images/*.png | sed -e 's/\.png//g' >la_listeou, si vous voulez simplement consulter la liste sans la stocker dans un fichier:
ls images/*.png | sed -e 's/\.png//g' | lessLes tubes et les redirections ne sont pas limités au seul texte lisible par les humains. Ainsi en est-il de la commande suivante, lancée à partir d'un xterm "console sous X-Window):
xwd -root | convert - ~/mon_bureau.png
ce qui effectuera une capture d'écran de votre bureau dans le fichier intitulé mon_bureau.png dans votre répertoire personnel.
3.4.1- Motifs d'englobement du shell:
Il est probable que vous utilisiez déjà sans le savoir des caractères d'englobement. Quand vous enregistrez un fichier dans une application sous Windows, quand vous recherchez un fichier, vous utilisez "*" pour désigner une suite de caractères quelconque. Par exemple, "*.txt" désigne l'ensemble des fichiers dont le nom se termine par ".txt". Je l'ai également beaucoup utilisé dans les sections précédentes, mais l'englobement va beaucoup plus loin que le seul "*".Quand vous tapez une commande comme "ls *.txt", puis Entrée, la tâche de trouver quels fichiers correspondent au motif "*.txt" n'est pas du ressort de ls, mais doit passer par le shell lui-même. Cela requiert donc une petite explication sur la façon dont le shell interprète une ligne de commande. Lorsque vous tapez :
$ ls *.txt
readme.txt recettes.txt
la ligne de commande est tout d'abord séparée en mots ("ls" et "*.txt" en l'occurrence). Quand le shell voit le "*" dans un des mots, il interprète le mot comme étant un motif englobant et le remplace dans la ligne de commande par les noms de tous les fichiers correspondant au motif. La ligne qui se trouve juste avant que ne s'enclenche l'exécution par le shell est donc devenue "ls readme.txt recettes.txt", ce qui donnera le résultat recherché. Le shell réagit aussi à la vue d'autres caractères :
Voici quelques exemples:
- ?: correspond à un caractère unique, quel qu'il soit.
- [...]: correspond à tout caractère écrit entre les crochets; les caractères peuvent désigner soit des intervalles (par exemple, 1-9), soit des valeurs discrètes, soit encore un mélange des deux. Exemple : "[a-zBE5-7]" correspond à tous les caractères de a à z, un B, un E, un 5, un 6 ou un 7.
- [!...]: correspond à tous les caractères qui ne se trouvent pas entre les crochets; [!a-z], par exemple, correspond à tout caractère qui n'est pas une lettre minuscule.
- {c1,c2}: correspond à c1 ou c2, où c1 et c2 sont également des caractères d'englobement, ce qui signifie que vous pouvez écrire "{[0-9]*,[acr]}" par exemple.
Attention !: Quoique que cela soit vrai sous Linux, il est possible que cela ne fonctionne pas sur les systèmes d'opération de la famille Unix.
- image/cars,space[0-9]/*.jpg: tous les fichiers dont le nom se termine par ".jpg" dans les répertoires image/cars, image/space0, jusqu'à image/space9, s'ils existent.
- /usr/doc/*/README: tous les fichiers de nom README dans tous les sous-répertoires immédiats de /usr/share/doc. Cela correspondra à /usr/share/doc/mandrake/README par exemple, mais pas à /usr/share/doc/myprog/doc/README.
- *[!a-z] : tous les fichiers du répertoire courant dont le nom ne finit pas par une lettre minuscule. Notes
3.4.2- Le complètement (completion) dans les lignes de commande:
Le complètement est une fonctionnalité des plus pratiques et tous les shells modernes (dont bash) l'incluent désormais. Son but est d'aider l'utilisateur à en faire le moins possible ! Le mieux pour illustrer ce qu'est le complètement est un exemple.Supposons que vous ayez dans votre répertoire personnel un fichier "fichier_au_nom_très_long_impossible_à_taper", et que vous vouliez le consulter. Mais, vous avez également dans ce même répertoire un autre fichier appelé fichier_texte. Que faire? Vous vous trouvez dans votre répertoire personnel et vous tapez alors la séquence suivante:
$ less fi<TAB>
(c'est-à-dire, tapez less fi suivi d'une pression sur la touche TAB). Le shell aura alors étendu la ligne de commande pour vous :
$ less fichier_
et aura également marqué la liste des choix possibles (dans sa configuration par défaut, qui peut être personnalisée). Tapez alors la séquence de touches suivante :
less fichier_a<TAB>
et le shell aura étendu la ligne de commande pour obtenir le résultat que vous souhaitiez:
less fichier_au_nom_très_long_impossible_à_taper
Il ne vous reste plus alors qu'à taper sur la touche Entrée pour valider et consulter le fichier.Il existe bien d'autres méthodes de completion, mais celle-là est suffisante, alors à vous de chercher si vous êtes curieux.
3.4.3- Lancement et manipulation de processus en arrière-plan:
Vous aurez remarqué que quand vous lancez une commande à partir d'un Terminal, vous devez normalement attendre que la commande soit terminée pour que le shell vous rende le contrôle: c'est que vous avez lancé la commande au premier plan. Il y a des situations, cependant, où cela n'est pas souhaitable.Supposons, par exemple, que vous ayez entrepris de copier récursivement un gros répertoire vers un autre. Vous décidez également d'ignorer les erreurs, donc vous redirigez le canal d'erreur vers /dev/null (déjà vu) :
cp -R images/ /shared/ 2>/dev/null
Une telle commande peut prendre plusieurs minutes avant d'être exécutée. Vous disposez alors de deux solutions : la première, brutale, est d'interrompre (de «tuer») (on verra ça après) la commande pour la relancer plus tard, quand vous aurez le temps. Pour ce faire, tapez Ctrl-c (la touche Control plus la touche c): cela terminera le processus et vous retournerez alors à l'invite. Mais attendez, ne faites pas ça ! Continuez à lire.Supposons que vous vouliez exécuter une commande pendant que vous faites quelque chose d'autre. La solution est de placer le processus en arrière-plan. Pour ce faire, tapez d'abord Ctrl-z pour suspendre le processus:
$cp -R images/ /shared/ 2>/dev/null
# Tapez Ctrl-z
[1]+ Stopped cp -R images/ /shared/ 2>/dev/nullet vous revoilà devant l'invite. Le processus est alors suspendu, dans l'attente d'être relancé (comme l'indique le mot-clé Stopped, arrêté). Vous allez le relancer mais en le maintenant en arrière-plan. Tapez bg (pour BackGround, arrière-plan), provoquera exactement l'effet escompté:
$bg
[1]+ cp -R images/ /shared/ 2>/dev/null &
$Le processus aura alors repris son exécution en tâche de fond, ce qu'indique le signe "&" (esperluette) à la fin de la ligne. Vous vous retrouvez alors en face de l'invite et pouvez continuer à travailler. Un processus qui tourne en tâche de fond, ou arrière-plan, est appelé un job.
Vous pouvez bien sûr lancer directement des processus en tâche de fond, justement en ajoutant une & à la fin de la commande. Ainsi, vous pouvez lancer la copie du répertoire en arrière-plan en écrivant:
$cp -R images/ /shared/ 22>/dev/null & Si vous le souhaitez, vous pouvez également remettre ce processus au premier plan et attendre qu'il se termine en tapant fg (pour ForeGround, premier plan). Répétez alors la séquence Ctrl-z, bg pour le remettre à l'arrière-plan.
Vous pouvez lancer plusieurs jobs de cette façon : chacune de ces commandes recevra alors un numéro de job. La commande jobs du shell indique la liste de tous les jobs associés au shell courant. Le job précédé d'un signe + désigne le dernier processus mis en tâche de fond. Pour remettre au premier plan un job en particulier, vous pourrez alors taper fgoù désigne le numéro de job, par exemple fg 5.
Notez que vous pouvez également suspendre ou lancer de cette façon des applications plein écran (si elles sont correctement programmées), telles que less ou un éditeur de texte comme VI, et les remettre au premier plan quand vous le voulez.
4.1- L'édition de texte: (La majorité de cette section est tirée du "Guide dinstallation et de configuration de Linux"
On trouve sous Linux des éditeurs de texte très puissants, "vi" et "emacs". Ils paraîtrons toujours complexe à la première vue, mais avec un peu de pratique c'est autre chose. Dans cette partie on va parler de quelques (je dis bien quelques) commandes de base pour l'utilisation de "vi" (prononcer vi-aîe), tout de même pour trouver de l'aide sur l'utilisation de "emacs" ou même "vi", il existe plusieurs Howto, sois vous les avez avec votre distribution sois vous les trouvez sur internet (vous pouvez me contacter si vous les trouvez pas).Pour éditer un fichier avec vi, il suffit de passer le nom de ce fichier en ligne de commande:
vi fichier
Il est possible de passer plusieurs fichiers dans la ligne de commande, et vi les éditera les uns après les autres. Cependant, il faut savoir que vi ne permet de travailler que sur deux fichiers à la fois, et quil nest pas facile de passer de lun à lautre. Par conséquent, il est conseillé de néditer quun seul fichier à la fois.vi est un éditeur qui fonctionne avec plusieurs modes de fonctionnement : le mode dédition, dans lequel le texte peut être modifié, le mode de commande, dans lequel des commandes particulières peuvent être données, et le mode de visualisation, dans lequel le fichier ne peut être que visualisé. Par défaut, vi est en mode de visualisation, et il faut utiliser une commande dédition pour passer en mode dédition. Quand on est en mode dédition, on peut revenir au mode de visualisation en appuyant sur la touche Echap (ou Esc, selon votre clavier). Cette touche a aussi une signification dans le mode de commande : elle annule la saisie de la commande en cours. Par conséquent, lorsquon est perdu et que lon ne sait plus dans quel mode on se trouve (ce qui arrive fatalement à un moment donné), il suffit dappuyer sur cette touche. On sait alors quon se trouve en mode de visualisation.
Le déplacement du curseur en mode de visualisation se fait avec les touches du curseur. Cependant, si votre clavier nest pas bien configuré, ces touches peuvent ne pas fonctionner. Cest pour cette raison que vi fournit un jeu de touches alternatif:
Le curseur est bien entendu déplacé automatiquement lors de la saisie du texte en mode dédition. Le passage en mode dédition peut se faire avec lune des commandes suivantes:
- la touche h permet de déplacer le curseur vers la gauche.
- la touche l permet de déplacer le curseur vers la droite.
- la touche j permet de déplacer le curseur vers le bas.
- la touche k permet de déplacer le curseur vers le haut.
La création dune nouvelle ligne peut donc être faite avec les commandes o et O, mais il est possible de couper une ligne en deux, ou de passer à la ligne simplement en tapant sur la touche Entrée en mode dédition. Inversement, la commande J permet de supprimer un saut de ligne en fin de ligne et de placer ainsi le texte de la ligne suivante à la suite du texte de la ligne courante. La suppression dun caractère se fait avec la touche Suppr (ou Del, selon le clavier) ou la touche de retour arrière (dite touche Backspace). Cependant, encore une fois, vi fournit un jeu de touches alternatif permettant de travailler avec un clavier mal configuré:
- la touche i permet de passer en mode dinsertion (le texte saisi sinsère avant le caractère sur lequel le curseur est positionné).
- la touche a permet de passer en mode dajout de caractères (le texte saisi sinsère après le caractère sur lequel le curseur est positionné).
- la touche A permet de placer le curseur en fin de ligne et de passer en mode dajout de caractères.
- la touche o permet de créer une nouvelle ligne après la ligne où se trouve le curseur et de passer en mode dédition sur cette nouvelle ligne.
- la touche O permet de créer une nouvelle ligne avant la ligne où se trouve le curseur et de passer en mode dédition sur cette nouvelle ligne.
Le texte qui a été supprimé est placé dans ce que lon appelle un buffer. Le contenu du buffer peut être inséré à nimporte quel endroit du fichier grâce à la commande p. Ainsi, il est possible de faire un couper/coller en effaçant la ligne désirée et en appuyant sur la touche p à lemplacement destination.
- la commande x permet deffacer le caractère situé sous le curseur.
- la commande dd permet deffacer la ligne où se trouve le curseur.
- la commande dw permet deffacer le mot où se trouve le curseur.
La commande u permet dannuler la dernière opération effectuée, et la commande U permet de la ré-exécuter.
La commande yy permet de copier la ligne courante dans le buffer. Cette commande est donc utilisée pour effectuer des copier/coller, en combinaison avec la commande p.Les commandes de vi peuvent être répétées un certain nombre de fois, en tapant un nombre avant de les taper. Ainsi, pour supprimer 3 lignes, il suffira de taper la commande suivante:
3dd
Dans ce cas, ces trois lignes sont également placées dans le buffer. La même technique peut être utilisée pour copier/coller plusieurs lignes en une seule opération.Enfin, vi accepte un certain nombre de commandes générales lorsquil est en mode de commande. Ce mode est activé dès que lon appuie sur la touche deux points (:) dans le mode de visualisation. Les commandes générales les plus utiles sont décrites ci-dessous:
Comme vous lavez constaté, vi est réellement une horreur à utiliser. Malgré tout, il permet de faire tout ce dont on a besoin pour éditer un fichier. Il dispose même de puissantes fonctionnalités que même les traitements de texte évolués ne sont pas capables de faire. Elles ne seront cependant pas décrites ici, car ceci dépasserait le cadre de ce document.
- la commande :q permet de quitter vi. Si le fichier en cours dédition a été modifié, vi refusera de se terminer sans lenregistrer. Si lon veut malgré tout sortir sans lenregistrer, il faudra utiliser la commande ":q !".
- la commande :w permet denregistrer le fichier courant. Pour enregistrer ce fichier et quitter vi, la commande :wq peut être utilisée.
- la commande :help sujet permet dobtenir de laide sur le sujet «sujet».
- la commande : !commande permet dexécuter la commande du shell « commande ». Ceci peut être pratique pour effectuer une opération dans le shell sans avoir à quitter vi. Ceci dit, il sera sans doute plus efficace dutiliser un autre terminal virtuel.
4.2- Quelques utilitaires en ligne de commande:
Dans cette section, on va parler d'un petit nombre d'outils en ligne de commande.
- grep: chercher une chaîne de caractère dans un fichier.
On l'utilise de cette façon:
grep chaine_de_caractere fichier
Cette commande accepte plusieurs options décrites dans les pages de manuels (man grep).Remarque: le texte cherché peut être placé entre guillemets si nécessaire, par exemple s'il contient des caractères comme "?" ou "*" (on a déjà vu ça, non?).
- find: permet de chercher des fichiers dans un réperoire selon des critères données.
Sa syntaxe est la suivante: (j'ai essayé de la simplifier)
find répertoire -name nom_du_fichier -print
où répertoire est le répertoire où la recherche va être effectuée. et nom est le nom du fichier à rechercher. Ce nom peut contenir des motifs d'englobements (vu précédemment), mais il faut utilisé des guillemets pour cela.
Cette commande accepte aussi plusieurs options de recherche à part "-name", et peut effectuer d'autres action à part "-print".
Pour plus d'informations à ce sujet "man find".- gzip: compresser un fichier.
On utilise cette commande de la manière suivante:
gzip fichier
où fichier est le fichier à compresser, le nom du fichier compressé sera "fichier.gz".Pour décomresser, utilisez la commande gunzip, elle s'emploie de cette façon:
gunzip fichier.gzPour plus d'informations les pages de manuels.
- tar: archiver des fichiers (regrouper tous les fichiers en un seul fichier structuré en bloc)...
Voici sa syntaxe:
tar options archive [fichiers]
où options sont les options qui indiquent l'opération à effectuer et la façon de l'effectuer. Et archive est le nom de l'archive qui doit être créé ..., et fichier est la liste des fichiers à archiver.Voici ses options les plus utilisée:
Et pour conclure quelques petits exemples:
- cvf: pour créer une archive.
- tvf: pour lister le contenu d'une archive.
- xvf: pour restaurer le contenu d'une archive.
$tar cvf archive.tar *
-----------------------------
archiver le contenu du répertoire courant dans le fichier "archive.tar".$tar xvf archive.tar
-----------------------------
extraire le contenu de "archive.tar".Pour en savoir plus les pages de manuel.
Il existe bien d'autres utilitaires (beaucoup plus nombreux que vous imaginez), que vous devez chercher par vous même dans les pages de manuel. Voici quelques commandes à chercher comme exercice:
crontab, at, bzip2, sort, convert, sed, zip, ....
5- Conclusion:
J'éspère que vous avez maintenant une base sur Linux (sinon vous pouvez me contacter). Vous avez sans doute
remarqué que j'ai utilisé trop de copier/coller, c'est parce que je pense que ces parties copiées
sont plus meilleur que ce que j'aurai pu écrire (et en plus pourquoi se fatiguer pour quelque chose que
les autres ont déjà faite), aussi le temps (1 jour et demi) ne permet pas d'écrire un tel document.
Enfin, une chose à ne pas oublier, la pratique et l'expérimentation sont très important.
Dans la prochaine partie, on parlera plus sur les processus, les variables d'environnement et aussi
beaucoup d'autres sujets.