Unix - Tour d'horizon rapide

par J.-D. Bonjour, ENAC-IT, EPF-Lausanne
(E-mail : Jean-Daniel.Bonjour@epfl.ch)


Avant-propos

Ce document (http://dgrwww.epfl.ch/SIDGR/guide_unix/introd_unixR.html) constitue une présentation rapide et sommaire des concepts élémentaires du système d'exploitation Unix et de ses commandes de base. Quelques aspects présentés ici sont spécifiques à l'environnement Unix-Sun ENAC-SSIE. Les commandes-réseau (telnet, ftp, mail...) sont traitées dans un autre support de cours ("Introduction à Internet").

Pour une présentation plus détaillée des notions décrites ici, on se référera aux documents en-ligne suivants :

  1. Aide-mémoire Unix ENAC-SSIE (http://dgrwww.epfl.ch/SIDGR/guide_unix/)
  2. Didacticiel Unix du LEAO-EPFL (http://dgrwww.epfl.ch/LEAO/)
  3. Didacticiel Unix de l'Uni. d'Edinburgh (http://dgrwww.epfl.ch/SIDGR/UNIXhelp1.3/Pages/)
  4. Manuel en-ligne Unix (commande "man" dans une fenêtre d'émulation terminal)
  5. Documentation Sun (AnswerBook, accessible depuis le Root-Menu ou le Front Panel CDE)
La matière présentée ici peut être exercée à l'aide de la page "Exercices d'introduction à Unix" (http://dgrwww.epfl.ch/SIDGR/guide_unix/exercices_unix.html).


1. Généralités sur Unix

Un système d'exploitation est un ensemble de programmes qui contrôlent et organisent l'usage des ressources d'un ordinateur.

Quelques caractéristiques essentielles du système d'exploitation Unix :

Unix se compose principalement de :


Figure 1 : Architecture Unix

S'ajoute à Unix, sur une station de travail, un environnement graphique (système de fenêtrage) basé sur X-window composé de :

Le système de fichier est une organisation logique d'un ensemble de disques physiques. L'ensemble des répertoires (directoires, ou dossiers dans la terminologie PC) forme une structure hiérarchique. Le système de gestion de fichiers Unix est arborescent et n'a qu'une seule racine : "/" (root directory, sommet de la hiérarchie) par oposition à Windows p.ex. qui en a plusieurs (A:, C: etc...)

Unix contient un certain nombre de répertoires-système spéciaux (/usr, /etc, /dev, /var...). Dans l'environnement Unix ENAC-SSIE, tous les utilisateurs se trouvent sous l'arborescence /USERS/nom_utilisateur


Figure 2 : Système de fichier Unix

Un fichier est désigné par son nom et par le chemin d'accès (path) menant, depuis la racine, jusqu'à son emplacement dans la hiérarchie de répertoires. Le nom de fichier est composé d'une suite de 1 à 255 caractères (seulement 14 sur les anciens Unix System V). Dans la pratique, on se limite généralement aux caractères : a-z, A-Z, 0-9, "_", "-" et "."

Toutes les commandes et applications cherchent et déposent par défaut leurs fichiers dans le répertoire courant (défini par l'utilisateur). Lorsque l'on veut accéder à un fichier qui n'est pas dans le répertoire courant, il faut faire précéder son nom du path qui est la séquence des noms de répertoires conduisant jusqu'à ce fichier, chaque nom de répertoire étant séparé du suivant par le caractère "/".

Quelques caractères spéciaux dans nom de fichier et path, interprétés par le shell :

Un path peut être "absolu" ou "relatif" :

Unix étant multi-utilisateur, le système de fichier maintient également des informations indiquant :


2. Commandes de base

2.1 Conventions de notation dans ce document

En police de caractère machine à écrire (police "Courier" à espacement fixe)
Texte qui doit être entré tel quel au clavier (ex: "ls")
En itallique
Vous devez substituer vous-même l'information indiquée
(ex: "cp fich_source fich_destination")
Entre accolades { }
Eléments optionnels (ex: "ls {-al} {path}")
Entre < >
Touche du clavier ou combinaison de touches (ex: <CR>, <ctrl-C>)
Entre [ ]
Origine, au sens étymologique, des mnémoniques de commandes et des options
(ex. pour la commande "rm" : [remove])
Texte souligné
Liens hyper-texte vers d'autres documents (exploitables depuis browser WWW)

2.2 Prompt

Par l'affichage de son "prompt", le shell "invite" l'utilisateur à entrer une commande. Dans l'environnement ENAC-SSIE, le prompt par défaut est du type : [NoCommande]username@machine:/répertoire_courant>

La commande est interprétée par le shell puis exécutée lorsque l'utilisateur presse la touche <CR>.

2.3 Forme d'une commande

prompt> verbe {-option(s)} {paramètre(s)} <CR>

2.4 Touches et caractères spéciaux

Sur clavier Sun "Type 5 Suisse-romand", pour accéder aux caractères spéciaux notés au bas à droite de certaines touches, utiliser simultanément la touche <AltGraph> (située deux touches en-dessous de la touche <CR>). Exemple : pour obtenir le caractère "|" (pipe), frapper <AltGraph-1>

2.5 Commandes principales

Mot de passe
nispasswd
Changement de son mot de passe. Lorsque le système le demande, introduire "à l'aveugle" son ancien mot de passe puis le nouveau mot de passe de son choix (au min. 6 caractères dont 1 chiffre)
Manuel Unix en ligne
man commande
Demande d'aide sur la commande spécifiée [manual]. (Pour davantage d'info. cliquer ici)
Pour des informations encore plus détaillées, consulter l'AnswerBook Sun (à partir du Root-Menu ou du Front Panel CDE)

Alias

alias nom_alias 'commande {options} {paramètres}'
Crée un alias (raccourci de commande) nom_alias pour la commande spécifiée (avec ses éventuels options et paramètres)
Passage d'arguments dans un alias (C-shell) : Exemple : si on a défini : alias psg 'ps -ef | grep \!* | more'
on pourra passer la commande : psg toto
qui est équivalente à : ps -ef | grep toto | more'

Répertoires

ls {fichier(s) ou répertoire(s)}
Liste le contenu du répertoire courant {ou le(s) fichier(s) ou répertoire(s) spécifiés} [list files]
-a = tous les fichiers, y compris hidden-files (fichiers dont le nom commence par ".")
-l = listage long : droits d'accès (voir commande chmod), liens, propriétaire, taille [bytes], date et heure de modification
-R = liste en parcourant récursivement tous les sous-répertoires
cd {répertoire}
Change de répertoire courant [change directory]. Si on ne donne pas de nom de répertoire, renvoie dans le répertoire principal de l'utilisateur (home)
pwd
Affiche le chemin d'accès du répertoire courant [path of working directory]
mkdir répertoire
Crée répertoire de nom spécifié [make directory]
rmdir répertoire
Détruit le répertoire spécifié (dont le contenu doit avoir préalablement été détruit) [remove directory]
Visualisation de fichiers
cat fichier
Affiche le contenu du fichier texte spécifié
cat fichier1 fichier2 fichier3 > fichierf
Concatène fichiers 1, 2 et 3 dans fichierf [catenate]
more fichier
Affichage contrôlé du fichier texte spécifié. L'avancement dans le fichier est contrôlé par les commandes :
<SPACE> = page suivante
<CR> = ligne suivante
/chaîne = cherche la chaîne de caractères spécifiée
n = cherche la prochaine occurence de cette chaîne
q = termine affichage (sortie de more)
head {-n} fichier
Affiche les 10 {ou n} premières lignes de fichier
tail {-n} fichier
Affiche les 10 {ou n} dernières lignes de fichier
+n = à partir de la n-ème ligne jusqu'à la fin du fichier
Manipulation de fichiers
cp fich_source fich_dest
Copie fichier source sur fichier destination [copy]
cp fichier(s) répertoire
Copie fichier(s) dans répertoire
mv fich_source fich_dest
Renomme fichier
mv fichier(s) répertoire
Déplace fichier(s) dans répertoire [move]
mv rép_source rép_dest
Renomme répertoire ou le déplace dans autre répertoire
rm {-i} fichier(s)
Détruit fichier(s) [remove]
Avec -i, demande confirmation à l'utilisateur (option activée par défaut en ENAC-SSIE)
chmod
Changement des droits d'accès d'un fichier ou répertoire [change mode]. (Pour plus d'info. sur cette commande, cliquer ici)
Edition de fichiers-texte
vi fichier
Editeur de base, commun à tous les Unix, mais pas très convivial [visual editor]. (Pour plus d'info. cliquer ici)
emacs fichier
xemacs fichier
Editeur de la Free software fundation (GNU), en version terminal resp. X-window
dtpad fichier
Editeur de base de l'environnement CDE
Utilisation de l'espace disque
du {répertoire}
Affiche l'espace-disque utilisé par toute l'arborescence courante {ou par celle spécifiée} [directory usage]
-a = affiche non seulement les répertoires mais aussi les fichiers
-k = affiche les tailles en Kbyte (exprimées sinon en blocs de 512 bytes)
Passée dans votre home, la commande "du -k" vous indique donc en KB la place disque totale que vous occupez
quota -v
Affiche l'usage de l'espace-disque occupé par l'utilisateur (maximum autorisé et espace utilisé) sur chaque file-system
Comparaisons, recherches, tris
diff fichier1 fichier2
Compare ligne par ligne le contenu des fichiers texte fichier1 et fichier2, et affiche les différences
grep 'motif' fichier(s)
Affiche les lignes de fichier(s) contenant chaîne de caractères satisfaisant à expression régulière motif [global regular expression print]. Voir aussi commande egrep plus riche [extended grep] et fgrep
-i = ne distingue pas majuscules et minuscules
-v = affiche toutes les lignes ne satisfaisant pas la condition
sort fichier_entree > fichier_sortie
Trie alphabétiquement (selon table ASCII) ligne par ligne le contenu de fichier_entree et envoie résultat sur fichier_sortie
-n = trie numériquement plutôt qu'alphabétiquement ("10" viendra après "2")
-r = trie dans ordre inverse
-f = ne distingue pas majuscules et minuscules
Impression
lp {-d imprimante} fichier(s)
Envoie le(s) fichier(s) sur la file d'attente de l'imprimante spécifiée [line printer]
Si aucune imprimante n'est spécifiée, utilise celle définie par l'utilisateur par la variable d'environnement LPDEST (ou l'imprimante par défaut définie par l'administrateur)
lpstat {imprimante}
Indique l'Id (sous la forme imprimante-No) et le statut des requêtes d'impression en attente sur toutes les imprimantes (ou l'imprimante spécifiée) [line printer status]
cancel Id(s)
cancel -u username
Avorte la(les) job(s) d'impression spécifié(s) par Id(s),
ou avorte tous les jobs d'impression soumis par l'utilisateur username
Compression
compress fichier
Compresse fichier (réduction de taille de l'ordre de 50%). Le résultat est un fichier de nom fichier.Z, et le fichier original disparaît du répertoire
uncompress fichier{.Z}
Décompresse fichier fichier.Z compressé avec compress. Le résultat est un fichier de nom fichier, et le fichier.Z disparaît du répertoire
Les commandes suivantes seront utilisées en fonction des extensions rencontrées :
.gz
utiliser commande "gunzip"
.zip
utiliser commande "unzip"
.uu
utiliser commande "uudecode"
.tar
utiliser commande "tar"
Processus, jobs
ps -ef {| grep username}
Affiche la liste de tous les processus {ou seulement ceux de l'utilisateur username}, leur PID, leur état, le temps CPU utilisé, la commande exécutée... [process status]
kill -9 PID
Tue processus de PID spécifié
commande &
Exécute commande en arrière-plan (background). Elle s'exécute donc de façon "détachée"du shell courant. Le job en question peut survivre au shell et à la session à partir desquels il a été lancé
(Identique à la séquence : "commande <CR> <ctrl-Z> bg" )
jobs
Liste les jobs du shell courant (suspendus ou s'exécutant en arrière-fond) avec leurs jobID (numérotés dans le cadre du shell auquel ils sont rattachés) [jobs status]
kill -9 %jobID
Tue le job de jobID spécifié
Commandes diverses
date
Affiche la date et l'heure courante
who
Affiche la liste des utilisateurs connectés sur la machine courante
echo {"}chaîne de caractères{"}
echo $variable
Affiche chaîne de caractères ou contenu de variable sur la sortie standard
-n = sans faire de saut de ligne à la fin de l'affichage

2.6 Redirection et tube

commande >{>}{!} fichier_sortie
Redirige la sortie de la commande ("sortie standard") vers fichier_sortie
>> = en mode append si fichier préexiste
>! = écrase fichier s'il préexiste
commande1 | commande2
La sortie de commande1 est envoyée en entrée dans la commande2

2.7 Rappel et édition des commandes

Possibilités offertes par le T-shell (Shell interactif par défaut en ENAC-SSIE) pour reprendre/éditer les dernières commandes : Pour des infos. sur le mécanisme de l'"historique", cliquer ici

Le T-shell offre en outre la possibilité d'expansion automatique des noms de fichiers/répertoires avec la touche <TAB>


3. Shell-scripts

Un shell-script est un fichier contenant une séquence de commandes Unix (procédure de commandes). On peut aussi lui passer des arguments lors de l'appel, créer et faire usage de variables, réaliser des tests, des branchements, des boucles, des entrées/sorties, etc... Le shell est ainsi utilisé comme un véritable langage de programmation dont les scripts sont interprétés à l'exécution (pas de compilation préalable).

Nous présentons ci-dessous le "b-a-ba" de la programmation en Bourne-Shell. Pour davantage d'info. sur les différents Shells (C-Shell, T-Shell, Bourne-Shell, Korn-Shell...), cliquer ici. Et pour davantage d'info. sur la programmation de shell-scripts, cliquer ici.

La première ligne d'un script en Bourne-Shell doit être :
#!/bin/sh
Dans toutes les autres lignes, le caractère # signale le début d'un commentaire qui sera ignoré par le shell.

3.1 Exécution d'un shell-script

Pour exécuter un script depuis un C-Shell ou T-Shell, on a les deux possibilités suivantes :
source script
Le script s'exécute dans le shell courant. (L'environnement du shell principal peut être modifié par le script, p.ex. définition d'alias ou de variables d'environnement).
script
Le script s'exécute dans un shell-fils (l'environnement du shell principal n'est pas modifié !). Il faut dans ce cas que le doit d'accès eXecute aie été préalablement mis au script (avec la commande "chmod u+x script").

3.2 Définition et usage de variables

variable=valeur
Bourne-shell : Affecte valeur à variable locale. (Il ne doit pas y avoir d'espace entre la variable, le signe = et la valeur)
unset variable
Efface variable locale
$variable
Retourne contenu de variable locale (que l'on peut p.ex. afficher avec : "echo $variable")
printenv
Affiche la liste des variables d'environnement
VARIABLE=valeur puis
export VARIABLE
Bourne-shell : Affecte valeur à VARIABLE puis place cette variable dans l'environnement. (Il ne doit pas y avoir d'espace entre la VARIABLE, le signe = et la valeur).
unset VARIABLE
Bourne-shell : Efface variable d'environnement VARIABLE
$VARIABLE
Retourne le contenu de la variable d'environnement VARIABLE (que l'on peut p.ex. afficher avec : "echo $VARIABLE")
Quelques variables d'environnement prédéfinies

3.3 Passage d'arguments dans un script

On peut récupérer dans le script les arguments passés dans la ligne de commande lors de l'appel du script de la façon suivante : Exemple : si le script bonjour contient :
      #!/bin/sh
      echo Hello $1 $2 ! Ca va bien ?
la commande : "bonjour Monsieur Dupond" retournera :
      Hello Monsieur Dupond ! Ca va bien ?

3.4 Interaction d'un script avec l'utilisateur

On utilise la commande "read variable"
Exemple : si le script dir contient :
      #!/bin/sh
      echo "Nom du fichier ? \c"
      read fichier
      ls -l $fichier
la commande : "dir" retournera :
      Nom du fichier ? toto
      -rw-rw-r--  1 dupond   83   Jun 6 17:53  toto
Si l'on fait "read var1 var2 var3", read découpe la ligne que l'on a frappée en mots et met le 1er sur var1, le second sur var2, et tout le reste de la ligne sur var3

3.5 Structures de contrôle

On dispose de différentes structures de contrôle telles que :
      if-then-elif-fi
      for-do-done
      while-do-done
      until-do-done
      case-in-esac
Pour davantage d'info. sur ces structures de contrôle, cliquer ici.

3.6 Prologue utilisateur

Lors de l'initialisation d'un shell (p.ex. chaque fois que vous ouvrez une fenêtre d'émulation terminal), le fichier .cshrc se trouvant dans votre répertoire principal s'exécute en premier lieu (prologue). Par défaut ce fichier n'existe pas. Il s'agit d'un shell-script écrit en C-Shell, qui est sous la responsabilité de l'utilisateur. Il peut contenir toutes les commandes d'initialisations souhaitées, typiquement des définitions d'alias et de variables d'environnement. Il ne doit cependant pas contenir de commandes interactives (commandes exigeant une réponse de l'utilisateur, p.ex. commande read).

Le fichier-prologue .login n'est pas utilisé dans l'environnement Unix ENAC-SSIE.


[MAIL] © Jean-Daniel BONJOUR, ENAC-SSIE, EPF-Lausanne. Révision: 19.9.97.