Accueil > Dossiers > UNIX

UNIX/LINUX (tutorial 1 - débuter)

Principes de base d'Unix

Unix est un terme qui désigne des systèmes multi-utilisateurs et multi-tâches ; avoir plusieurs utilisateurs en simultané est particulièrement intéressant dans un environnement d'entreprise, et surtout dans les réseaux. Il existe de nombreuses variantes de ce système, commerciales (Solaris, AIX) ou gratuites ; la plus célèbre est la gratuite Linux, dont on trouve diverses "distributions". Ces distributions sont différentes par leur contenu, mais aussi par leur facilité d'installation et la flexibilité des composants installés. Les plus courantes sont RedHat (dans les universités), Debian (utilisée en 2005 par des serveurs Google), Mandrake et SuSe.

Ce type de système est connu pour sa stabilité grâce à un principe simble : le code est public ; tout le monde peut y avoir accès, traquer les erreurs et soumettre de nouvelles versions à la communauté, contrairement à un système windows (ceci dit, certaines sources circulent encore pour windows 2000 sur le peer to peer).


Utilisateurs et mécanismes de protection

La sécurité est une chose importante, et la possibilité d'avoir plusieurs utilisateurs en simultané complique la tâche. Comment être certain qu'un utilisateur de base n'aille pas endommager le noyau ? Comment se prémunir de l'effacement accidentel de ses fichiers par un collègue ? A la base, il y a déjà un mécanisme : l'identification. Au démarrage, il faut vous identifier : votre nom de compte (le login : on dit parfois "se loguer" pour s'enregistrer) et le mot de passe associé. Il existe différents types d'utilisateurs avec différents types de droits ; les plus opposés sont l'invité, qui ne dispose que de droits restreints, et le root (aussi nommé Super-utilisateur) qui administre l'ensemble.

Le second mécanisme est la protection des fichiers. Vous devez déjà connaître les attributs : fichier accessible en lecture seule ou en écriture. Dans un environnement Unix, on s'attardera plus tard sur les trois possibles : lecture (read), écriture (write) et éxécution (execute) ; les abréviations sont respectivements r, w et x. Par ailleurs, les attributs d'un fichier sont considérés au regard de ses utilisateurs : un utilisateur (user) a certains droits, le groupe (group) auquel il appartient en a aussi, et pour terminer il y a les 'autres' (others) ; notons que l'utilisateur a au minimum les droits de son groupe. Sachant qu'il y a 3 types de permission (rwx) et trois ensembles d'utilisateurs, nous arrivons donc à 9 permissions de base. Pour conclure, signalons que rwx est comme un "mot" binaire, il est pondéré, r étant le bit de poid fort et x celui de poids faible ; donc autoriser la lecture et l'éxécution revient à 101 ce qui équivaut en décimal à 5, et de même tout autoriser revient à un décimal de 7. Si vous ne connaissez pas le binaire, trouvez des cours sur Internet ; c'est une base de l'informatique, et Unix n'est pas quelque chose de très simple non plus.


Quelques notes sur le contexte des dossiers Unix/Linux

Comme bon nombre d'utilisateurs, j'utiliserais les commandes et l'environnement d'une distribution RedHat d'un système Linux. En plus des commandes Unix, certaines de celles dont nous allons parler seront donc propre à cette configuration.

Pour taper les commandes, démarrez soit un Terminal (dans RedHat, vous le trouverez à la rubrique Outils de système), ou soyez directement en mode console (c'est-à-dire sans environnement graphique).


Commandes utilisées dans le présent tutorial, par ordre d'apparition

cd ; ls ; umask ; chmod ; mkdir ; rmdir ; pwd ; cat ; rm ; vi ; touch ; cp ; mv ; find ; who ; logname ; ps ; top ; man ; whatis ; apropos ; uname ; dal ; date. Soit les 24 commandes indispensables pour manipuler un environnement Unix / Linux.

SOMMAIRE DU TUTORIAL 1

I. Répertoires, fichiers et permissions
a) Parcourir et afficher
b) Les permissions
c) Gestion des permissions
d) Gestion des répertoires
e) Fichiers et redirections
f) Recherche de fichiers

II. Informations
a) Informations sur les utilisateurs connectés
b) Informations sur les processus
c) Informations sur les commandes
d) Informations sur la machine
e) Dates et heures


I. Répertoires, fichiers et permissions

a) Parcourir et afficher >> vers le sommaire
Il existe en Unix ce qu'on appelle des liens symboliques, des sortes de raccourci en d'autres termes. Ainsi, ce que vous considérez comme répertoire peut-être un lien vers un autre répertoire. Imaginez que dans une vieille version d'Unix, certains programmes demandent le répertoire /aqua et que, avec l'évolution du système, celui-ci ait été déplacé dans /up/aqua : un lien permettra de préserver la compatibilité.

Une autre notion importante est que la racine est unique et notée / ; dans d'autres systèmes, comme Windows, il y avait une racine (le répertoire "de base") à chaque partition.

Pour se déplacer entre les répertoires, comme dans MS-DOS on utilisera la commande cd (abréviation de Change Directory). Il suffit de lui indiquer le nom ou le chemin de l'endroit où l'on souhaite aller : avec cd Desktop, on se place dans le répertoire Desktop.

On considère le répertoire courant par . et le répertoire dans lequel il est contenu par .. Ainsi, si vous avez fait cd Desktop et que vous souhaitez revenir au répertoire précédent, vous ferez cd .. Si vous voulez revenir à la racine, comme elle est notée / vous ferez donc cd /

Enfin, la notion d'utilisateur revenant, chaque utilisateur a un répertoire qui lui est propre, et porte son nom. Pour y retourner, il vous suffit de taper la commande sans arguments : simplement cd. Le répertoire utilisateur étant aussi repéré par ~, vous pourrez taper cd ~ pour un même résultat.

Pour afficher le contenu d'un répertoire, la commande à utiliser est ls ; le commutateur -l permet d'avoir plus de renseignements, et le commutateur -s d'afficher la taille (Size). On pourrait donc marquer ls -l -s pour afficher davantage de renseignements et la taille ; par convention, on préfèrera indique l'ensemble de commutateurs par - puis accoler les lettres. On éxécute ainsi la commande ls -ls :
total 5103
4000 -rwxr-xr-x 1 aqualonne tests 3998789 fév 9 18:55 cours1.pdf
1103 -rwx--x--x 1 aqualonne tests 1102390 fév 3 03:32 image

On affiche la taille par blocs de 1 Ko, les permissions, l'utilisateur (ici aqualonne), son groupe (ici tests), la taille détaillée du fichier, sa date et heure de création, et son nom. Notons toutefois que dans Unix, les fichiers n'ont pas besoin d'extension : on reconnaitra leur type grâce à la signature qu'ils portent. Ainsi, le fichier cours1.pdf pourrait se nommer cours1 et il s'éxécutera sans problème ; le fait qu'il porte un .pdf indique soit qu'il a été prit dans windows (actuellement on peut lire sur des partitions FAT32), soit que l'utilisateur a jugé bon de compléter par un .pdf afin de mieux repérer son type.

b) Les permissions >> vers le sommaire
Nous avions déjà dit précédemment leur nature. Pour rappel, il y en a 9 : 3 (rwx : read, write, eXecute) pour 3 types d'utilisateurs (ugo : user, group, others). Or, en interne, il n'y a pas que 9 bits pour cela mais douze ! Vous remarquerez déjà qu'il y a 10 emplacements possibles... En réalité, le premier spécifie le type de données :

Caractère
Signification
-
Fichier courant
d
Répertoire (Device)
c
Fichier de périphérique "caractère" (Character Device)
b
Fichier de périphérique "bloc" (Bloc Device)
p
FIFO
l
Lien symbolique (Link)
s
Socket

Remarquons déjà la façon dont ils s'affichent : -rwxr-xr-x montre que l'utilisateur a les droits rwx, le groupe les droites xr (mais pas le r : il est remplacé par un -), et les autres les droits x (mais pas r et w, remplacés par --). Imaginons une configuration comme suit : -r-x--x---, qu'en déduiriez-vous ? Que l'utilisateur ayant créée le fichier (car le masque des permissions est initialisé à la création) peut le lire et l'éxécuter, que son groupe peut l'éxécuter, et que les autres ne peuvent rien faire.

Ceci fonctionne de même pour les répertoires, avec une signification logique : r permet de "lire" le répertoire c'est-à-dire d'afficher son contenu, w permet de le modifier donc supprimer/créer des fichiers, et x permet d'aller dans le répertoire. Quelques remarques : l'absence de x rend impossible l'accès aux sous-répertoires ; on bloque donc l'arborescence qui en découle. Le droit w donne un droit "général" sur les fichiers : même si nous n'avons pas la permission w sur un fichier, l'avoir dans le répertoire où se trouve ce fichier permettra de le détruire.

Il existe cependant quelques "dérogations" à ces règles. Ainsi, en plus nos lettres rwx vous pourriez voir apparaître un s, un t ; le s étant sur le système des bits SUID/SGID, et le t pour le Sticky Bit. Ceci étant un sujet un peu plus spécialisé, nous n'en parlerons pas encore.

c) Gestion des permissions >> vers le sommaire
Comme nous l'avons vu, les permissions correspondent à des bits, et l'ensemble a un équivalent en valeur décimale (nous nommerons cet équivalent la forme octale). Pour rappel, on considère qur rwx est un mot binaire : x vaut 2^0 (soit 1), w vaut 2^1 (soit 2) et r vaut 2^2 (soit 4) ; et ainsi de suite s'il y avait d'autres types de permission... Ainsi, r-x vaut 2^2 + 2^0 = 5. Et directement, on obtient que rwxr-xr-x donnera 751.

Par défaut, les fichiers et documents fabriqués ont des permissions : la commande umask permet de modifier les droits par défaut. C'est-à-dire, modifier les droits qui seront invoqués lors des prochaines créations. Attention : umask va supprimer les bits de permission demandés !

Par défaut, le masque de permission est rw-rw-rw- pour les fichiers (soit 666) et rwxrwxrwx pour les répertoires (soit 777) ; ceci dit, vérifiez votre environnement et peut-être la distribution : il n'est pas dit que cela reste indéfiniment les permissions par défaut.

Ainsi, appliquer umask 022 ne va rien soustraire pour l'utilisateur, mais va enlever w (write) pour le groupe et les autres. De même, umask 007 ne modifie rien pour l'utilisateur et son groupe mais enlève tous les droits aux autres.

Alors que umask modifie les réglages par défaut qui vont donc s'appliquer aux prochains fichiers et répertoires, chmod modifie les permissions des fichiers ou répertoires existants ; bien évidemment, il faut avoir accès au répertoire où se trouve ces fichiers (donc permission d'éxécution) pour réaliser l'opération. Comme pour umask, on peut passer la forme octale : chmod 777 aqual, autoriser tout à tout le monde sur le fichier aqual.

On a aussi une notation symbolique : on donne les utilisateurs concernés (u, g, o), les permissions (r, w, x) et le type d'opération (ajouter une permission, établir ou retirer). Exemple : chmod go+rx aqual, qui rajoute les permissions r et x aux utilisateurs g et o ; autrement dit, le groupe et les autres pourront lire et éxécuter le fichier. On peut aussi avoir chmod u=rwx,g=rx,o=x aqual ; on autorise tout à l'utilisateur, le groupe ne peut pas modifier le fichier, et les autres ne peuvent que l'éxécuter. Enfin, on peut avoir chmod go-rwx aqual : seul l'utilise peut toucher au fichier.

Dernier exemple : pour autoriser que la lecture à tout le monde, on peut faire chmod =r aqual, ce qui revient à chmod 444 aqual.

d) Gestion des répertoires >> vers le sommaire
Pour créer le répertoire maison, on utilise mkdir maison (mkdir : make directory, créer répertoire). Pour le détruire, on utilisera rmdir maison (rmdir : remove directory). Attention : le répertoire que l'on va créer sera dépendant d'un répertoire parent, où il faudra avoir les droits d'écriture.

Enfin, pour connaître le chemin (l'endroit où est le répertoire) depuis la racine, on utilisera pwd. Par exemple, en tapant pwd on aura comme réponse /home/aqualonne si on est dans le répertoire de base de l'utilisateur aqualonne.

e) Fichiers et redirections >> vers le sommaire
Avec la commande cat, on peut visualiser un fichier (attention, le contenu n'est pas forcément lisible !). Par exemple, avec cat aqual, on affiche le contenu du fichier aqual. Si on veut afficher en numérotant les lignes, on utilisera cat -n aqual (avec n pour Number).

Il est possible de diriger le résultat d'une commande vers un fichier ou une autre commande, en utilisant >. Par exemple, cat -n aqual > aqual2 va diriger l'affichage du fichier aqual vers un fichier nommé aqual2. On peut s'en servir d'une façon exotique pour copier un fichier, par exemple... Si l'on souhaite détruire un fichier, on utilisera la commande rm (remove) ; par exemple rm aqual2 va détruire le fichier aqual2, si on possède les permissions.

Il existe aussi des éditeurs de fichiers, plus ou moins compliqués. vi est assez simple : tapez vi aqual pour lancer l'éditeur sur le fichier aqual. A partir de là, vous naviguez entre les options de l'éditeur par les touches du clavier.

Avec la commande touch, on modifie la date de dernière modification d'un fichier au moment d'éxécution de la commande. Imaginons qu'avec ls -ls on ait la ligne :
1103 -rwx--x--x 1 aqualonne tests 1102390 fév 3 03:32 image
Après éxécution de touch image, on modifie la date de dernière modification du fichier image, d'où un ls -ls :
1103 -rwx--x--x 1 aqualonne tests 1102390 fév 6 11:56 image

Notons qu'appliquer la commande touch sur un fichier qui n'existe pas aura pour effet de créer un fichier vide à ce nom.

Nous pouvons copier : avec cp aqua aqua2, nous copions le fichier aqua sur un fichier aqua2. Attention, si le fichier aqua2 existe, il sera écrasé ! Pour que la commande demande confirmation, utiliser le commutateur i ; si le fichier aqua2 existe, alors cp -i aqua aqua2 va provoquer le message suivant :
cp: écraser 'aqua2' ?

La commande mv permet de renommer ou déplacer des fichiers ou des répertoires. Par exemple, pour renommer un fichier ou répertoire aqua1 en aqua1 on fera mv aqua1 aqua2.

f) Recherche de fichiers >> vers le sommaire
Avec la commande find on recherche un fichier ; sans précision, il sera recherché dans le répertoire en cours. Imaginons que nous ayons un fichier aqua dans notre répertoire, alors find aqua produira comme résultat : aqua. Si nous n'avons pas ce fichier, on aura comme résultat :
find: aqua: Aucun fichier ou répertoire de ce type

Cependant, il est rare de connaître le nom complet du fichier que l'on cherche : on peut alors utiliser des jokers. Une * signifiera qu'il manque une partie du mot. Pour désigner le fichier lemonde, on pourrait donc faire le* (cherche les fichiers qui commencent par le), ou *de (chercher fichier se finissant par de), voire le*de (fichier commancant par le et finissant par de). Ainsi, * n'a pas de limite ; par contre, si on ne connait pas un caractère en particulier, on peut le stipuler par ? ; ainsi on pourrait avoir ?emonde ou le?onde ... Attention : . et / ne répondent pas aux jokers.


II. Informations

a) Informations sur les utilisateurs connectés >> vers le sommaire
Nous avons parlé précédemment des utilisateurs, et de leur devoir de se loguer (identifier). Deux commandes vont vous renseigner sur la connexion des utilisateurs (nom de connexion, terminal, heure, nom d'hote distant ou numéro terminal x):
who : Affiche l'ensemble des utilisateurs connectés en spécifiant leur nom de connexion (8 caractères), leur terminal, l'heure de connexion, et la provenance (soit un terminal X, c'est-à-dire de l'environnement graphique, soit un ordinateur du réseau). Par exemple, vous obtiendrez :
aqualonn :0 Feb 10 00:00
aqualonn pts/4 Feb 10 01:04 (:0.0)

logname : Cette commande simple afficher le nom sous lequel vous avez été identifié. Si je m'identifie aqualonne, l'ordinateur répondra : aqualonne.

Il est possible d'utiliser des options sur une commande ; on appelle cela des commutateurs. Par exemple who -H aura pour effet d'afficher les en-têtes des lignes (ce qui se dit Heading, avec Head signifiant tête) :
NOM      LIGNE      HEURE         COMMENTAIRE
aqualonn :0         Feb 10 01:16
aqualonn pts/4      Feb 10 01:04    (:0.0)
test     pts/6      Feb 10 01:12    (:0.0)
aqualonn pts/7      Feb 10 01:16    (:0.0)

Attention, Unix fait attention à la "casse des lettres" : une majuscule est différente d'une minuscule. Ainsi, la commande wHo n'existe pas, et who -h provoquera l'erreur "option invalide".

b) Informations sur les processus >> vers le sommaire
Le démarrage d'un programe équivaut à créer ce qu'on nomme un processus. La commande ps permet de faire un affichage instantané des processus ; pour connaître en plus l'utilisateur et les ressources, faisons ps u. On a :
USER    PID    %CPU    %MEM   VSZ    RSS    TTY     STAT     START     TIME   COMMAND
aqualon 3153   0.0     0.3    4660   1360  pts/3     S       22:53    0:00     bash
aqualon 3444   0.0     0.1    3308    752  pts/3     R       23:23    0:00     ps u

On notera que, puisque l'affichage est instantané, notre commande ps u y apparait. Enfin, vous pouvez lancer un programme particulier pour cela, qui se nomme top. Lorsque vous remarquez que vous n'êtes plus dans le terminal, pour clôre le programme il y a deux moyens : soit il attend un argument de votre part, et vous appuyez sur q (pour quit), soit une méthode brutale qui est la combinaison Ctrl+C.

c) Informations sur les commandes >> vers le sommaire
Si vous désirez lire le manuel d'une commande, tapez man suivi du nom de la commande. Par exemple, man top va nous donner un manuel pour utiliser la commande top que nous venons de voir ; parfois, le manuel est traduit, parfois non. Si vous demandez le manuel d'une commande "native" (disons, de base...) vous n'obtiendrez pas grand chose ; essayez man cd.

Il existe une sorte de bases de données pour les commandes. Une version simple est accessible par whatis ; par exemple, whatis top donnera une brève description de la commande :
top            (1) - display Linux tasks

Pour trouver toutes les occurences (présences) de top dans la base de données, on peut utiliser apropos. Attention, dans les réponses de apropos top, on aura :
tsort                                  (1) - effectuer un tri topologique
wsetscreeg [curs_outopts] (3x) - curses output options
XIconifyWindow               (3x) - manipulate top-level windows

Enfin, certains programmes ont une aide plus courtes à laquelle on accède on faisant suivre leur nom de --help ; exemple : top --help ou ps --help.

d) Informations sur la machine >> vers le sommaire
La commande uname nous servira pour cela, à partir de nombreux commutateurs ; quelques exemples :
- uname sans commutateur donne le système, réponse possible Linux
- uname -m donne le type matériel de la machine, réponse possible i686
- uname -r donne le numéro de version du système, réponse possible 2.6.5-1.358
- uname -a (pour All) donne l'ensemble des informations. Vous retrouverez souvent le a pour All ; à retenir donc.

e) Dates et heures >> vers le sommaire
Il existe un calendrier, qui affichera le mois actuel par la commande cal. Vous pouvez aussi afficher le calendrier complet d'une année : cal -y est par défaut sur l'année actuelle, et cal -y 200 affichera le calendrier de l'an 200. De même qu'on donne l'année, on peut spécifier le mois ; ainsi pour avoir février 2004, on utilise cal -y 2 2004.

Avec la commande date vous obtiendrez l'ensemble des informations du moment : jour, mois, heure, année... Vous pouvez compléter cette commande avec une chaine de caractère, entre apostrophes "". La chaine de caractère pourra utiliser des variables à partir de la commande, par exemple :
date +"il est %l heure(s) sur le fuseau %Z"
Ce qui provoquera par exemple la réponse :
il est 5 heure(s) sur le fuseau CET

Il existe de nombreuses variables. Pour un inventaire, consultez le manuel de la commande.