Unixept ForStudents
Unixept ForStudents
1. Introduction
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 2
Shell
Programmes
système
Noyau
(Kernel)
Matériel
Applications
Chaque couche est conçue de manière à être utilisée sans connaître les couches
inférieures. Ainsi, l’utilisateur peut accéder aux ressources par le biais dialogue
simple offert par la couche la plus évoluée (Shell et applications utilisateur). Au
besoin, il peut aussi développer des programmes utilisant les couches de plus
bas niveau.
Le noyau, qui assure l’interfaçage des applications avec les ressources
matérielles prend en charge la gestion des processus (tâches) et du système de
fichiers. Les différentes fonctions qu’il assure sont accessibles à travers des
appels système (primitives).
Appels système
Contrôle matériel
Matériel
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 3
Le système de fichiers
Sous unix, toute source ou destination de données est assimilée à un fichier.
Cette standardisation de la notion de fichier permet d’uniformiser au niveau
utilisateur la manipulation des flux de données : imprimer sur un périphérique
de type imprimante revient globalement à écrire dans un fichier associé à ce
périphérique.
On distingue différents types de fichiers:
• Les fichiers de données
• Les fichiers commandes : fichiers binaires exécutables ou fichiers de
commandes interprétables par un shell
• Les fichiers périphériques : fichiers spéciaux permattant l’accès aux
périphériques (terminaux, disques, imprimantes, …)
• Les répertoires : fichiers particuliers contenant d’autres fichiers
• Le fichier poubelle : nommé /dev/null, il a la particularité d’avoir une taille
toujours nulle.
L’une des particularités du SE unix réside dans l’unicité de la structure
arborescente qui permet à l’utilisateur d’accéder aux fichiers. Cette structure,
désignée par « système de fichiers » (file system), traduit l’organisation logique
du stockage des données indépendamment de l’organisation physique des
différents supports de stockage.
La racine du système de fichier est nommée « / ».
f1
grp1
f2
…
f…
home
grp2 r1{f1f2
/
f3f4
…
null
dev
…
usr
…
Les chemins qui désignent les fichiers à partir d'un point de l'arborescence sont
appelés chemins relatifs. Les chemins relatifs sont plus concis, mais nécessitent
la connaissance du répertoire courant (current directory).
Abréviations
. (point) Le répertoire courant (current directory)
.. (2 points) Le répertoire contenant le répertoire courant
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 4
? n'importe quel caractère
[abn] l'un des caractères a b ou n ([ ] : brackets)
[c-l] une lettre de c à l inclus (dash within brackets)
* n'importe quelle chaîne de caractères
{file,toto,ex} l'une des chaînes file toto ou ex ({ }: braces)
Ces abréviations permettent d'abréger les chemins et de désigner en une seule
fois plusieurs fichiers dont les noms ont des caractéristiques communes; ou de
désigner un seul fichier sans écrire totalement son nom lorsque aucune
ambiguïté n'est possible.
Dialogue Unix-utilisateur
L’accès d’un utilisateur au système d’exploitation s’effectue dans le cadre
d’une « session de travail » définie par les étapes suivantes :
• identification de l’utilisateur (par un nom de connexion et un mot de passe),
• exécution de tâches d’initialisation (profile, .profile,.cshrc, …),
• dialogue shell-utilisateur et/ou interface graphique-utilisateur,
• fin de la session.
Malgré la diversité de plus en plus croissante des interface graphiques qui
accompagnent le SE unix, le shell reste la seule interface de dialogue qui
permet à l’utilisateur d’accéder directement aux commandes standards unix et
de profiter ainsi de la protabilité et de la normalisation de ce système.
Shell est un programme interpréteur qui analyse une à une les lignes de
commandes entrées par l’utilisateur et assure l’exécution des tâches
correspondantes.
L’utilisation du shell nécessite l’accès à un terminal alphanumérique matérialisé
par :
• un terminal physique : ensemble clavier-écran connecté à un port de
communication de la machine,
• un pseudo-terminal : fenêtre d’une interface graphique ou de connexion à
distance.
Dans les deux cas un terminal assure d’une part une fonction « fichier » en
permettant de lire (clavier) et d’écrire (écran ou fenêtre) et d’autre part une
fonction « contrôle » en permettant la transmission de signaux aux processus
(^C pour l’interrompre l’exécution par exemple).
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 5
-la désignation de la commande
-les options
-les arguments de la commande
-les redirections
HOST% ls -l
l est une option de la commande ls.
Arguments
Les commandes peuvent nécessiter un ou plusieurs arguments pour préciser sur
quoi la commande va agir.
Les redirections
Au cours de son exécution, une commande peut manipuler des flux de données
entrants ou sortants : en général lecture de données à partir du clavier et
écriture de résultats ou de messages d’erreur sur l’écran du terminal.
Pour exécuter une commande, le shell demande au SE de créer un processus
qui exécutera le texte exécutable de cette commande. Parmi les actions que
comporte la création de ce processus, le SE définit trois descripteurs de fichiers
nommés fichiers standard :
- le fichier standard d’entrée (stdin): descripteur 0, ouvert en lecture seule
- le fichier standard de sortie (stdout): descripteur 1, ouvert en écriture différée
- le fichier standard de sortie d’erreur (stderr): descripteur 2, ouvert en écriture
non différée
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 6
Par défaut, des1=0 pour une redirection en entrée et des1=1 pour une
redirection en sortie.
Il faut noter que les redirections ne concernent nullement les données que la
commande lit ou écrit dans des fichiers autres que ceux associés au clavier et à
l’écran.
> fic ou 1 > fic Le fichier fic est créé s'il n'existait pas ou écrasé s'il existait déjà.
>>fic ou 1 >> fic Le fichier fic est créé s'il n'existe pas, mais s'il existe déjà, les sorties produites
par la commande seront ajoutées à la fin des données qu’il contient.
rediriger le stdin
< fic Les données nécessaires à la commande sont lues dans fic au lieu d'être lues au
clavier.
rediriger le stderr
2> fic ou 2>> fic Fonctionne comme la redirection du stdout. Les messages d'erreur sont écrits
ou ajoutés au fichier fic.
les pipelines
commande1 | commande2
Le stdout de commande1 est redirigé vers le stdin de commande2 .
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 7
Exemple:
Supposons qu'un fichier nommé listefic contienne une liste de fichiers:
HOST% cat listfic
/home/grp1/f1 /home/grp2/r1/f2
HOST%
Supposons qu'on veuille effacer les fichiers dont la liste est dans listfic :
la commande cat listfic est d'abord évaluée et est remplacée par son
résultat avant l’exécution de rm.
La commande est donc équivalente à
rm /home/grp1/f1 /home/grp2/r1/f2
Exemple de commandes
man nom_de_commande Cette commande écrit sur la sortie standard une description complète de la
commande (son effet, sa syntaxe, la liste exhaustive de ses options).
man -k mot_clé Cette commande fournit une liste des commandes en rapport avec le mot clé
désigné. Elle est utile lorsqu'on veut de l'aide sur une commande dont on ne
connaît pas le nom.
Les variables
d'environnement
Lorsque l'on exécute une commande (un programme) le shell et le système
d'exploitation tiennent compte de certaines caractéristiques qui définissent la
configuration du terminal, les propriétés de l'utilisateur, etc ...; l'ensemble de
ces caractéristiques définit l’"environnement".
La définition d'un environnement est généralement assurée par l'affectation de
certaines valeurs à des variables dites variables d'environnement. Ces variables
sont en fait définies comme des variables locales du shell, puis leur validité est
étendue à toutes les commandes exécutées à partir de ce shell en utilisant la
commande export.
env Les variables d’environnement et leur valeurs actuelles sont affichées par la
commande env.
Exemple:
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 8
Exemples de variables
d’environnement
Lorsqu'on commence une session un certain nombre de variables
d'environnement sont déjà définies. Ces variables sont prédéfinies dans les
fichiers d’initialisation du shell (.profile par exemple)
PATH La variable PATH contient une liste de répertoires dans lesquels Unix recherche
les commandes que vous avez désigné sans préciser leur chemin absolu.
Chaque chemin est séparé du suivant par un ":".
Exemple:
La variable PATH pourrait contenir:
/usr/bin:/usr/5bin:.
Si la commande que vous avez tapée n'est pas désignée par son chemin absolu,
Unix la recherche d'abord dans le répertoire /usr/bin, puis dans le répertoire
/usr/5bin, et enfin dans votre répertoire courant (le point final désigne
votre répertoire courant).
HOME Cette variable contient le chemin absolu de votre répertoire personnel (home
directory). En principe vous n'avez pas à la modifier.
Exemple:
cd $HOME est équivalent à cd .
Cette variable est surtout utilisée dans les scripts.
HOST% TERM=vt100
HOST% export TERM
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 9
Lister un répertoire
ls Donne la liste des fichiers du répertoire courant
HOST% cd /home/grp2/r1
HOST% ls
f1 f2
HOST%
Les listes fournies par ls sont par ordre alphabétique par défaut
ls -l fichier ou rep Donne des renseignements plus détaillés sur chaque fichier
HOST% ls -l /home/grp2/r1
-rwxr--r-- 0 grp2 855 Déc 10 10:00 f1
-rwxr--r-- 0 grp2 351 Déc 12 12:00 f2
HOST%
ls -a fichier_ou_rep Cette commande montre les fichiers normalement cachés (ceux dont le nom
commence par ".")
Créer un répertoire
mkdir nom_du_répertoire Le nom du répertoire peut être un chemin absolu ou relatif (par rapport au
répertoire courant). Cette commande nécessite l’autorisation en écriture pour le
répertoire père.
Détruire un fichier
rm fic1 fic2 … Cette commande nécessite les autorisations d'écriture sur les fichiers à détruire.
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 10
Détruire un répertoire
rmdir nom_du_répertoire Cette commande nécessite l’autorisation d'écriture sur le répertoire à détruire.
cp -r rep1 rep2 Tous les fichiers de rep1 (ainsi que tous les sous-répertoires et leurs contenus)
seront copiés avec le même nom et la même structure dans le répertoire rep2.
Renommer ou déplacer
un fichier
mv fic1 fic2 Le fichier fic1 sera renommé fic2.
HOST% cd /home/grp2/r1
HOST% mv f1 f3
NOTE La commande mv sert aussi à déplacer des fichiers: en effet fic1 et fic2
peuvent être des chemins complets relatifs ou absolus.
Changer les
autorisations d’accès
u r
g w
o + x
chmod chmod ug - rw fichier ou repertoire
uo rx
go wx
ugo rwx
Le premier groupe de lettres précise la population concernée:
u propriétaire (user)
g groupe du propriétaire (group)
o les autres (others)
+ signifie qu'on veut accorder les droits qui suivent
- signifie qu'on veut retirer les droits qui suivent
Le second groupe de lettres désigne les droits modifiés
r droit de lecture (read)
w droit d'écriture (write)
x droit d'éxécution (execute)
Seul le propriétaire d’un fichier peut en changer les autorisations.
Autorisations d’accès
par défaut
Lors de la création d’un fichier, des autorisations d’accès par défaut lui sont
affectées. Elles peuvent être affichées ou modifiées par le biais de la commande
umask.
umask masque Le masque est soustrait (OU exclusif) à 777 pour les répertoires et à 666 pour
les fichiers normaux.
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 11
Dans cet exemple, les autorisations par défaut sont fixées pour les répertoires à
rwxr-xr-x et à rw-r--r-- pour les fichiers normaux.
Rechercher un fichier
find répertoire options Cette commande recherche dans répertoire les fichiers correspondant aux
conditions précisées dans les options.
Les options usuelles sont:
find -user uid uid est soit un nom d'utilisateur soit son numéro
Scinder un chemin
basename fichier Ne garde que la dernière partie de la chaîne fichier (c'est à dire le nom du
fichier).
dirname fichier Ne garde que la première partie de la chaîne fichier (c'est à dire la suite des
répertoires qui y aboutissent).
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 12
3. Manipulation du contenu
des fichiers
od options fichier Renvoie le contenu du fichier sous forme octale, hexadécimale, décimale ou
ascii suivant les options demandées.
Recherche dans un
fichier
grep chaine fichier La commande grep est un filtre qui recherche dans le fichier toutes les
occurrences de chaîne . Elle fournit sur le fichier standard de sortie toutes les
lignes du fichier qui contiennent chaîne. Si la chaîne recherchée contient des
espaces ou des caractères spéciaux qui risquent d'être interprétés, il faut
l'enfermer dans des "".
Contenus tabulés
Dans beaucoup de commandes les fichiers de caractères peuvent être traités
comme des tableaux. Un tableau est un ensemble de lignes organisées en
colonnes. Chaque ligne a évidemment le même nombre de colonnes.
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 13
Normalement, les séparateurs de colonne sont des tab et les séparateurs de
ligne sont lf ou Return ou les deux.
Exemple:
donnée tab donnée tab donnée Return
donnée tab donnée tab donnée Return
expand -n fichier Permet de remplacer les caractères tab de fichier par n espaces .
unexpand fichier Remplace les espaces ou les chaînes d'espaces par un caractère tab .
paste fic1 fic2 Concaténation de tableaux: les colonnes de fic2 sont ajoutées à la droite des
colonnes de fic 1. Le résultat est écrit sur le stdout.
Extraction
cut -fn1,n2,n3 -dsépa fic Cette commande filtre permet d'extraire une partie des informations dans un
fichier organisé en tableau selon un séparateur spécifié.
Exemple:
Le fichier /etc/passwd est organisé en tableau de séparateur « : »:
nom:password:uid:gid:renseignements:homedir:shell
La ligne de l'utilisateur grp2 est supposée:
grp2:x:308:30:Mohamed 1A2004:/home/grp2:/bin/bash
La commande:
cut -f1,5 -d: /etc/passwd
va écrire sur le stdout les lignes ne comprenant que les champs nom (1er champ)
et renseignements (5ème champ).
La ligne relative à grp2 sera:
grp2:Mohamed 1A2004
Tri
sort options fic Trie les lignes du fichier fic. La commande comporte de nombreuses options
pour définir le tri à faire.
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 14
commande & Une commande peut être lancée en tâche de fond (background) en ajoutant un
"&" à la fin de la ligne de commande. Le terminal peut alors servir à lancer
d’autres commandes.
Processus en cours
ps La commande ps écrit sur le stdout des informations sur tout ou partie des
processus en cours selon les options indiquées. Les informations fournies
peuvent être réduites ou détaillées. Elles incluent généralement :
PID: Numéro du processus
TT: identification du terminal qui a lancé le processus
STAT: Etat du processus
TIME : temps CPU consommé par le processus
COMMAND : la commande qui a donné lieu au processus
Signaux
L’un des modes de communication entre processus offert par le SE unix est
basé sur les signaux : un processus P1 peut envoyer (dans la limite de certaines
restrictions liées aux propriétaires des processus) à un autre processus P2 un
signal n qui habituellement a une signification particulière pour le processus
récepteur. Lorsque le signal n’est pas ignoré ou intercepté par le processus
récepteur, il provoque l’exécution d’une activité prédéfinie : arrêt du processus,
interruption, ….
kill -n PID La commande kill permet au shell à partir duquel elle est exécutée d’envoyer le
signal n au processus d’identifiant PID.
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 15
5.
Les shell scripts
Exemple:
Supposons que l'utilisateur mohamed ait créé dans son répertoire un répertoire
nommé /user/mohamed/tmp, dans lequel il a l'habitude de mettre des
fichiers temporaires. Une bonne habitude serait de vider le contenu de ce
répertoire avant de quitter sa session pour libérer de l'espace disque.
Il va donc créer (avec vi par exemple) un fichier texte $HOME/nettoie
dans lequel il va mettre les commandes suivantes:
cd $HOME/tmp
rm `ls`
echo "Nettoyage terminé"
Avec son droit d'éxécution, le fichier nettoie est devenu une nouvelle
commande!
Avant de quitter sa session, il suffira à mohamed de lancer la commande
nettoie.
HOST% nettoie
nettoyage terminé
HOST%
Bien que très simple, cet exemple permet d'imaginer des scripts réalisant des
opérations plus complexes. On verra dans la suite que les scripts, comme toute
commande Unix peuvent avoir des options, des arguments et peuvent exécuter
certaines opérations sous condition.
Par exemple, on pourrait améliorer le script précédent en vérifiant d'abord que
le répertoire /user/mohamed/tmp existe et est bien un répertoire. Si tel
n'était pas le cas, il enverrait un message d'erreur (/user/mohamed/tmp
n'existe pas par exemple) et ne ferait rien d'autre.
La possibilité d'exécutions conditionnelles et de boucles permet de regarder les
scripts comme de véritables programmes dont les instructions sont les
commandes d'Unix.
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 16
Les variables
Dans un script on peut définir des variables. Ces variables ne peuvent
contenir que des chaînes alphanumériques.
Un nom de variable doit commencer par une lettre et peut être constitué de
lettres, de chiffres et "_" (underscore).
Exemples: var_1 v2 ma_variable
Affectation d'une variable Sous sh,bash ou ksh, pour affecter une chaine alphanumérique valeur à une
variable var il suffit d'écrire:
var=valeur
Si la chaine valeur contient des caractères spéciaux(1) il faut l'enfermer entre
deux """ (guillemets doubles).
Exemples:
question="etre ou ne pas etre"
var2=12 (ce n'est pas une valeur numérique!!
il s'agit du caractère "1" suivi du caractère "2")
var3= (affectation d'une chaine vide )
var4="cat fic1 fic2 > fic3"
Substitution d'une variable Le contenu de la variable var est obtenu par $var.
Exemple:
Si vous exécutez les lignes suivantes:
question="etre ou ne pas etre"
echo $question
vous verrez s'afficher à l'écran:
etre ou ne pas etre
Par contre
echo question
donnera
question
Portée des variables Une variable définie dans un script n'est reconnue qu'à l'intérieur du script. Pour
la rendre accessible à tous les niveaux inférieurs il faut utiliser la commande
export.
export var Cette commande rend la variable var connue à tous les niveaux inférieurs.
Les variables
prédéfinies
Il existe des variables prédéfinies dont les nom sont basés sur des caractères
particuliers (? # $ ! …)qui ont une signification
particulière.
Exemple:
HOST% grep "mohamed ali" administrateurs
… (résultat)
HOST% echo $?
On verra s'afficher
0 si la chaine "mohamed ali" a été trouvée
1 si la chaine "mohamed ali" n'a pas été trouvée
2 s'il y a eu une erreur(3)
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 17
# $# donne le nombre (1) d'arguments envoyés au script .
NOTE Les variables d'environnement utilisateur sont aussi reconnues par le script
(voir plus haut: les variables d'environnement).
Commandes
Toutes les commandes Unix sont utilisables dans un script.
Déroulement de
l'exécution du script
Normalement les commandes d'un script sont exécutées en séquence dans
l'ordre où elles sont écrites. Cependant il est possible d'avoir des exécutions
conditionnelles et des boucles.
Exemple:
cd /user/mohamed/textes
for fic in t1 t2
do
chmod ugo+x $fic
done
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 18
Exemple:
case $# in
0) echo "Il n'y a pas d'argument";;
1) echo "Il y a un argument";;
2) echo "Il y a deux arguments";;
*) echo "Il y a plus de deux arguments";;
esac
Exemple:
if mkdir monrep
then
echo "le répertoire monrep est créé"
else
echo "la création de monrep a échoué"
fi
test options commande Suivant les options choisies, la commande test sert à
tester l'état des fichiers
comparer des chaînes
comparer des entiers
Elle renvoie la valeur 0 pour "vrai" et 1 pour "faux" (sauf pour l'option -l)
Quelques options utiles:
eq =
ne ≠
gt >
test n1 - ge n2 Renvoie 0 si l'entier n1 est ≥ à l'entier n2
lt <
le ≤
NOTE La commande test est très utilisée dans les exécutions conditionnelles if.
Exemple:
cd /user/mohamed/textes
if test -f t1 #équivalent à if [ -f t1 ]
then
echo "le fichier t1 existe"
fi
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 19
multi-test if if liste_de_commandes_1
then
liste_de_commandes_01
elif liste_de_commandes_2
then
liste_de_commandes_02
…
elif liste_de_commandes_n
then
liste_de_commandes_0n
else
liste_de_commandes_x
fi
Exemple:
if [ $# = "0" ]
then
echo "Il n'y a pas d'argument"
elif [ $# = "1" ]
then
echo "Il y a un argument"
elif [ $# = "2" ]
then
echo "Il y a deux arguments"
else
echo "Il y a plus de deux arguments"
fi
Quelques commandes
utiles dans les scripts
expr expression Evalue expression. Cette commande comprend de nombreuses options et a une
syntaxe possible de expression très riche. Consulter la documentation officielle.
getopts Permet de connaître les options qui ont été données lors du lancement de
l'éxécution du script. Le script peut ainsi tenir compte de ces options.
read var Permet d'arrêter le déroulement du script dans l'attente d'une donnée au clavier.
Le déroulement du script reprend dès que l'utilisateur a tapé un Return .
Exemple:
avril 2007
Initiation à l’utilisation du système d’exploitation Unix 20
echo -n "Quel est votre nom:"
read lenom
echo "Votre nom est: "$lenom
La variable lenom contient la chaîne de caractères tapée par l'utilisateur.
avril 2007