Cours D'unix
Cours D'unix
1. Arborescence
2. Noms de fichiers
3. Chemin d'un fichier
a. Répertoire parent
b. Répertoire courant
c. Chemin absolu
d. Chemin relatif
4. Types de fichiers
a. Exécutable
b. Répertoire
c. Lien (ln)
i. Symbolique
ii. Physique
d. Fichier
e. Fichier caché
5. Navigation (cd)
6. Commandes sur le système de fichiers
7. Lister les fichiers (ls)
8. Méta-caractères
Arborescence
Comme dans tous les autres systèmes d'exploitation, les données sont organisées en
fichiers eux-mêmes organisés en répertoires (et sous-répertoires) sur les éléments de
sauvegarde. L'architecture du système de fichiers est sous la forme d'un arbre dont le
répertoire noté / est la racine. Tous les autres répertoires en sont les noeuds et les
fichiers les feuilles. Un système de fichier est donc un arbre n-aire.
Noms de fichiers
Sous Unix (et contrairement au Dos), tous les caractères alphanumériques plus la
ponctuation sont des caractères valides. De plus il n'existe pas de notion d'extension de
fichier. Cela fait du caractère . (point) un caractère comme un autre qui peut apparaître
-1-
plus d'une fois dans un nom de fichier. Par contre l'espace est considéré comme un
séparateur à proscrire dans le nommage des fichiers. Le système Unix n'accepte pas les
caractères accentués et distingue les minuscules des majuscules.
Exemples :
Alors que sous Dos, les fichiers sont au format 8.3 c'est-à-dire que les fichiers portent un
nom de 8 caractères et une extension de 3 caractères séparés par un point (.), le
système Unix autorise tout comme Windows95 des noms de fichiers long (256 caractères
environ).
Les caractères invalides sous Dos (;+=[]',"*\<>/?:|.) sont acceptés par Unix.
Exemple : [Link]+[Link] est accepté par Unix mais refusé par Dos.
Répertoire parent
Répertoire courant
Chemin absolu
Chemin relatif
-2-
Le chemin relatif désigne la succession des répertoires à parcourir depuis le
réperoire courant pour accéder au fichier spécifié.
Types de fichiers
Sous Unix, les fichiers peuvent être de 5 types différents :
Exécutable
Répertoire
Les répertoires, nous l'avons vu plus haut, sont des ensembles de fichiers et de
répertoires.
Les liens sont des fichiers assez spéciaux puisqu'il permettent d'associer plusieurs
noms à un seul et même fichier. Pour créer un lien, utiliser la commande ln.
L'utilité des liens est évidente puisqu'ils permettent à partir d'un seul fichier
physiquement présent sur l'espace disque, d'avoir plusieurs références de noms
différents et localisées en des lieux différents d'un même fichier qu'il n'est plus
besoin de copier. Lorsque le fichier pointé est volumineux, l'emploi des liens est
donc très avantageux.
Lien symbolique
Un lien symbolique est un simple pointeur vers un autre fichier bien réel.
-3-
Syntaxe : ln -s nom-du-fichier-à-pointer nom-du-lien-symbolique
Lien physique
Ainsi les deux fichiers : le lien et le fichier pointé sont physiquement les
mêmes bien que virtuellement (pour le système de fichiers) ils portent des
noms différents et puissent être localisés dans des répertoires différents.
Fichier
Un fichier est de type fichier lorsqu'il est "tout à fait normal", qu'il n'a rien de
particulier ; c'est-à-dire lorsqu'il n'est ni un exécutable, ni un répertoire et ni un
lien.
Fichier caché
Les fichiers et répertoires cachés se distinguent des autres par la seule présence
d'un point (.) en première position dans leur nom. La commande de listage des
fichiers ne les affichera pas par defaut.
Navigation (cd)
La commande unix de navigation dans le système de fichier est : cd pour Change
Directory.
Exemple Description
-4-
Commandes sur le système de fichiers
Commande Description
rm Supprime un fichier ou un répertoire.
mv Déplace ou renomme un fichier ou un réperoire.
Aux commandes sur les fichiers (rm, mv, cp) vous pouvez spécifier plusieurs arguments et
utiliser les méta-caractères.
Syntaxe : ls
Exemple :
$ ls
amoi.c [Link] tp3.c
[Link] tp1.c zizitop.mp3
monprog.c tp2.c
Cette commande accepte les méta-caractères afin de n'afficher que les fichiers qui
répondent à certaines contraintes lexicographique.
Syntaxe : ls expression-régulière
Exemple :
$ ls *.c
amoi.c tp1.c tp3.c
monprog.c tp2.c
-5-
On peut afficher toutes les informations relatives à un fichier : type, droits, numéro
d'inode, nom, UID, GID, taille, date et heure de création... avec l'attribut -l.
Syntaxe : ls -l
Exemple :
$ ls -l
-rwxr--r-- 1 root univ 106 Apr 10 15:09 amoi.c
drwxr-xr-x 1 root univ 1024 Jan 5 20:54 DATA
-rwx------ 1 root univ 5160 Feb 23 09:22 [Link]
lrwxrwxrwx 1 root univ 3 Jan 24 12:16 tp -> TpK
Pour afficher les fichiers cachés, utiliser l'attribut -a (all). Très pratique pour lister les
fichiers de configuration.
Syntaxe : ls -a
Exemple :
$ ls -a
.bash [Link] tp2.c
.netscape monprog.c tp3.c
.profile [Link] zizitop.mp3
amoi.c tp1.c
Commande Description
ls Liste les fichiers par ordre alphabétique en colonnes.
ls -r Tri inverse.
Méta-caractères
Les méta-caractères * (astérisque) et ? (point d'interrogation) sont très utiles lors de la
manipulation de fichiers en groupe. Le méta-caractère * remplace dans l'expression dans
laquelle il apparait, zéro, un ou plusieurs autre(s) caractère(s). Quand à ?, il remplace un
et un seul caractère.
-6-
Par exemple, la commande rm * -r supprime tous les fichiers de tous les réperoires
inclus dans celui courant. A utiliser avec parcimonie!
Alors que mv tp*.c tpC déplace dans le répertoire tpC tous les fichiers ayant n'importe
quoi entre tp et .c.
Mais si on écrit mv tp??.c tpC , on déplace les fichiers contenant exactement deux
caractères entre tp et .c.
-7-
II. Manipulation de fichiers
Par Hugo ETIEVANT
1. Afficher
a. Afficher le contenu d'un fichier (cat)
b. Affichage inverse (tac)
c. Afficher l'entête (head)
d. Afficher la fin (tail)
e. Afficher écran par écran (more et less)
f. Numérotation des lignes (nl)
g. Affichage sans doublon (uniq)
h. Affichage avec tri (sort)
2. Découper (split)
3. Différences (diff)
4. Statistiques (wc)
5. Type de fichier (file)
6. Création de fichier (touch)
7. Calcul d'un condensat (md5sum)
a. Présentation
b. A quoi ça sert ?
c. Exemples
8. Recherche de fichiers (find)
a. Introduction
b. Liste des critères de recherche
c. Combinatoire des tests
9. Combinatoire des commandes précédentes
Afficher
Sous Unix, il existe de nombreuses commandes spécialisées qui permettent d'afficher sur
la sortie standard le contenu d'un fichier.
Par combinaison de ces commandes au sein de tubes, on peut former des commandes
complexes très utiles.
La commande cat permet d'afficher sur la sortie standard l'entier contenu d'un
fichier. En voici les options :
- v (Verbose) permet de convertir les caractères spéciaux des fichiers binaires en
caractères affichables
- n (Number) numérote les lignes
- b (number nonBlank) numérote que les lignes non vides
- E (show Ends) affiche le symbôle $ (dollard) à la fin de chaque ligne
- s (Squeeze blank) n'affiche au plus un ligne vide
- T (show Tab) affiche les caractères tabulations comme ^I
- A (show All) équivalent à -vET
- e équivalent à -vE
-8-
- t équivalent à -vT.
A l'origine, cat permet de concaténer des fichiers et d'en renvoyer le résultat sur
la sortie standard.
La commande tac est homologue à cat mais affiche le contenu d'un fichier en
partant de la dernière ligne vers la première.
La commande head permet de n'afficher que les permières lignes d'un fichier (10
par défaut). En voici les options :
- cN affiche les N premiers octets
- nN affiche les N premières lignes
- q n'affiche pas le nom du fichier
- v affiche le nom du fichier avant d'en afficher l'entête.
-9-
Exemple : head [Link]
La commande tail permet de n'afficher que les dernières lignes d'un fichier (10
par défaut). Elle est homologue à head et possède les mêmes attributs.
Les commandes more et less permettent d'afficher page par page des fichiers
volumineux sur la sortie stantard.
- 10 -
Syntaxe : nl fichier
Exemple : nl [Link]
Affiche le contenu du
La commande uniq permet d'afficher le contenu d'un fichier ligne par ligne en
ométant les doublons. En voici les options :
- u affichage sans doublon (par défaut)
- d affichage des doublons
- c comptage des doublons
La commande sort permet de trier les lignes d'un fichier. En voici les options :
- b ignore les espaces en début de ligne
- d ordre alphabétique (A-Z, a-z, 0-9, espace) (par défaut)
- f ignore la casse
- n ordre numérique
- r inverse l'odre de tri.
Cet exemple permet de trier les lignes du fichier [Link] dans l'ordre
alphabétique (d) sans tenir compte des espaces de début de ligne (b) et sans
différencier majuscules et minucules (f).
Découpage (split)
- 11 -
La commande split permet de découper un fichier en plusieurs plus petits. Ses
options sont :
- b n (Bytes) découpage par blocs de n octets
ou
- l n (Lignes) découpage par blocs de n lignes
Ici on découpe le fichier [Link] qui est une vidéo volumineuse en fichiers
de 1.35 Mo afin de la sauvegarder sur disquettes (de capacité maximum de 1.44
Mo).
Par défaut, les fichiers issus de la découpe auront un nom ayant pour préfixe x et
pour suffixe une suite de lettre du type aa, ab,ac... créés dans l'ordre
lexicographique naturel (descendant de 'a' vers 'z').
Pour changer le préfixe, il suffit de le spécifier en fin de commande.
Ici on découpe le fichier de log du serveur HTTP en plus petits fichiers de 100
lignes chacun. Dont le nom sera du type [Link], [Link]...
Note : pour découper des fichiers texte brut, faire la découpe en nombre de
lignes. Tandis que pour découper les fichiers binaires, utiliser la découpe en
nombre d'octets.
Commandes :
cat cours_de_c.[Link].* > cours_de_c.[Link]
gunzip cours_de_c.[Link]
acroread cours_de_c.pdf
- 12 -
Différences (diff)
Exemple :
$ split .signature .[Link]
3a4
> .[Link]
Ici on peut voir qu'il y a une différence entre les ligne 3 et 4 dans le fichier
.[Link] où i ly a une ligne insérée. S'ils avaient été égaux, diff n'aurait
rien affiché.
Exemple :
$ split -q .signature .[Link]
Files .signature and .[Link] differ
Exemple :
$ split -q .signature .signature
Files .signature and .signature are identical
Statistiques (wc)
Syntaxe : wc fichier
Exemple : wc [Link]
- 13 -
Exemple :
$ wc [Link]
12 108 671 [Link]
Dans l'exemple précédent, le fichier [Link] comporte 12 lignes, 108 mots et 671
caractères.
Cette commande retourne le type d'un fichier passé en paramètre. Pour opérer, elle fait
appel à un fichier qui contient les signatures binaires d'un grand nombre de fichier.
Elle est par exemple capable de fournir les caractéristiques du système qui a compilé un
fichier exécutable parmis plusieurs centaines.
Exemple :
$ file ../*
../DATA: directory
../[Link]: Microsoft Word document
../tp6.c: program text C++
../[Link]: international ascii text
Dans l'exemple précédent, on souhaite connaître le type de tous les fichiers du répertoire
parent.
Appliquée à un fichier déjà existant, elle modifie son heure de dernier accès et met cette
dernière à l'heure courante par défaut.
- 14 -
Présentation
A quoi ça sert ?
Lorsque l'on transmet des messages ou des fichiers par mail, ftp ou http ; il est
utile de savoir si le fichier reçu à destination n'a pas subit d'altération pendant son
transfert (erreur de transmission, piratage...). Pour cela on transmet en plus du
fichier un condensat.
L'émeteur E calcule le condensat C du fichier F et envoie le tout au récepteur R.
Le récepteur R calcule le condensat K du fichier F et le compare à C. Si C=K alors
tout va bien, sinon cela signifie que le fichier F a subit des modification durant son
transfert. Et R va demander à E de le lui renvoyer.
Exemples
Exemple :
$ md5sum [Link]
607cdbaeef8f20be5dcb428f007c9696 [Link]
Exemple :
$ md5sum -c upload.md5 -v
- 15 -
[Link] FAILED
md5sum: 1 of 1 file(s) failed MD5 check
Introduction
Cet exemple recherche et affiche (print) les fichiers dont la date de dernière
modification (mtime : Modify Time) remonte à plus de 7 jours (+7).
Option Description
print affiche le résultat
- 16 -
atime +n|-n|n nombre de jours depuis la date de dernier accès
newer fichier le fichier est plus récent que celui passé en paramètre
Les options doivent êtres précédées d'un trait d'union (-) et leur paramètre
éventuel séparé par un espace.
Les paramètres numériques n peuvent être passé en valeur absolue (par exemple
7) ou bien en valeur relative (+2 ou -20).
- 17 -
Chacune des options du tableau précédent constitue un test. La commande find
offre une algèbre booléenne permettant de combiner à l'aide d'opérateurs les
tests souhaités afin de former une expression complexe.
1. ( expr )
force la priorité d'évaluation
2. ! expr
négation logique (devien vrai si était faux et inversement)
3. -not expr
idem
4. expr_1 expr_2
expr_2 est évaluée si expr_1 est vrai
5. expr_1 -a expr_2
idem
6. expr_1 -and expr_2
idem
7. expr_1 -o expr_2
expr_2 n'est pas évaluée si expr_1 est vrai
8. expr_1 -or expr_2
idem
9. expr_1, expr_2
expr_1 et expr_2 sont toujours évaluées mais la valeur booléenne de la
liste est celle de expr_2. La valeur de expr_1 est dont passée aux
oubliettes.
Ainsi dans les exemples précédents, les critères étaient évalués de gauche à
droite tant que que le précédent renvoyait vrai.
Cet exemple affiche sur la sortie standard la liste des fichiers qui ne portent pas
l'extention ".c".
- 18 -
III. Le protocol SMTP
Par Hugo ETIEVANT
1. Introduction
2. Déroulement d'une session SMTP
a. Connexion (telnet)
b. Démarrer
c. Destinateur
d. Destinataire
e. Début du message
f. Fin du message
g. Quitter
h. Dialogue
3. Exemple typique de session
4. Résumé des commandes
5. Format MIME
a. Introduction
b. Manipulation
c. Résumé des champs MIME
Introduction
Le protocol SMTP (simple mail transfert protocol) permet l'envoie de mail au format
ASCII (c'est-à-dire sous forme de caractères imprimables à l'opposé du format binaire
des fichiers objects ou exécutables).
Grâce à des commandes simples, vous apprendrez à envoyer des mails en ligne de
commande du Shell d'Unix.
Démarrer
- 19 -
Syntaxe : HELO identifiant
Destinateur
A noter que vous pouvez indiquer n'importe quoi comme email du momment qu'il
contient le symbôle "@". Et faire une blague en vous faisant passer pour
[Link]@[Link].
Destinataire
Début du message
Syntaxe : DATA
Fin du message
La fin du message s'indique par le caractère . (point) seul sur la dernière ligne du
message.
Syntaxe : .
Quitter
Syntaxe : QUIT
- 20 -
Dialogue
Syntaxe Description
telnet machine port Connection à la machine sur le port afin d'entrer sur le protocol
SMTP.
- 21 -
Format MIME
Introduction
On a vu plus haut que le SMTP permet l'envoie en format textuel de mail, c'est-à-
dire que les messages sont envoyés sur le réseau internet sous la forme d'une
suite de caractères. Cela ne pose pas de problème quand on souhaite envoyer un
message écrit très simple mais pour l'envoie de fichiers joints, cela pose un
problème.
Manipulation
Les champs From, To, Bcc et autres de votre logiciel de messagerie sont au
format MIME. Et il est possible de les renseigner manuellement au cours de
l'écriture du message durant le protocol SMTP.
C: DATA
S:354 Send mail; end with "." on a line by it self
C: From: cyberzoide@[Link]
C: To: [Link]@[Link]
C: MIME-Version: 1.0
C: Subject: R&V ce soir
C: Content-Type: text/plain; charset=iso-8859-1
C: salut mon pote
C:
C: Viens a la maison ce soir,
C: on se fait une bouffe...
C: .
S:250 message accepted
- 22 -
Champs Description
email du destinateur, pend la valeur de syntaxe
From
login@serveur ou alias <login@serveur>
To email du destinataire
Return-Path
In-Reply-To
Content-Transfert-
format du transfert SMTP, 8bit en général
Encoding
- 23 -
IV. Le protocol FTP
Par Hugo ETIEVANT
1. Introduction
2. Exemple typique de session ftp (ftp)
3. Résumé des commandes
Introduction
Le protocol FTP permet le transfert de fichiers d'une machine locale (votre ordinateur)
vers une machine distante (souvent votre hébergeur de page perso ou un serveur
quelconque). La commande ftp du système Unix permet d'utiliser le protocol du même
nom.
Une session FTP commence généralement par le transfert (sans cryptage) du login et
mot de passe de l'utilisateur. Le serveur ouvre deux sockets de transfert : une pour les
commandes et une autre pour les données (fichiers transférés).
Il existe des cas ou aucun mot de passe n'est nécessaire : pour les sites publiques pour
le libre téléchargement.
Il vous faut lancer le module FTP par la commande ftp, vous connecter à un serveur
distant avec open, spécifier votre login avec user et votre mot de passe par pass.
Exemple :
ftp
open [Link]
user cyberzoide
pass ********
Ou bien spécifier en paramètre à la commande ftp l'adresse du serveur distant qui vous
demandera votre login et mot de passe.
Pour télécharger un fichier distant et le stocker sous un autre nom sur votre machine
locale : get distant-file local-file. Pour télécharger simplement un fichier, pas
besoin de spécifier un nouveau nom : get disant-file.
Même chose pour envoyer un fichier de votre machine local vers le serveur : put local-
file distant-file. Pour l'envoyé simplement : put local-file.
- 24 -
Pour utiliser les méta-caractères dans les noms de fichiers, il faut utiliser les commandes
mget et mput.
Exemples :
get index.php3l
get index.php3l [Link]
put [Link]
put [Link] [Link]
put [Link] images/[Link]
mget *.wav
mput *.gif ../images
Attention il vous faut garder en mémoire le répertoire courant local en plus du répertoire
courant distant. Affichez le répertoire courant par les commandes pwd ou cd . pour la
machine distante et lcd . pour la machine locale.
$ ftp [Link]
Connected to [Link].
220 [Link] FTP server ready.
Name ([Link]:h-etie00): cyberzoide
331 Password required for cyberzoide.
Password:*******
230 Bienvenue sur le serveur ftp de MultiMania.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" is current directory.
ftp> cd images
250 CWD command successful.
ftp> pwd
257 "/images" is current directory.
ftp> lcd .
Local directory now /home/h-etie00
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
.
..
[Link]
[Link]
[Link]
[Link]
[Link]
226 Transfer complete.
ftp> get [Link]
200 PORT command successful.
150 Opening BINARY mode data connection for [Link] (44 bytes).
226 Transfer complete.
44 bytes received in 0.00 seconds (9.91 Kbytes/s)
ftp> mget a*.gif
mget [Link]? y
200 PORT command successful.
150 Opening BINARY mode data connection for [Link] (601 bytes).
- 25 -
226 Transfer complete.
601 bytes received in 0.03 seconds (17.52 Kbytes/s)
mget [Link]? y
200 PORT command successful.
150 Opening BINARY mode data connection for [Link] (601 bytes).
226 Transfer complete.
601 bytes received in 0.01 seconds (91.18 Kbytes/s)
ftp> disconnect
221 Goodbye.
ftp> bye
$
Commande Description
- 26 -
Equivalent de get mais ici le transfert est reprit à la fin du fichier,
reget pratique pour reprendre un téléchargement précédemment
interrompu.
- 27 -
message d'information si aucun paramètre n'est spécifié.
remotehelp recv
- 28 -
V. Les MTools
Par Hugo ETIEVANT
1. Introduction
2. Formats de fichier
3. Les commandes
a. Attributs de fichiers (mattrib)
b. Copie de fichiers (mcopy)
c. Suppression de fichiers (mdel)
d. Listage de répertoire (mdir)
4. Résumé des commandes
Introduction
Les MTools sont un ensemble d'instructions qui permettent de travailler sous Unix avec
des disquettes au format MS-DOS. Le système de fichier (FAT) d'étant pas codé de la
même façon sous Dos et sous Unix, il est nécessaire de faire des convertions de format
de données lorsqu'on souhaite transférer des fichiers du système Unix vers les
compatibles IBM.
Ces commandes sont les homoloques de celles du Dos dont vous reconnaîtrez par ailleurs
la syntaxe.
Formats de fichier
Sous Unix, les fins de de ligne des fichiers au format texte sont codées par un saut de
ligne système (NewLine), alors que sous Dos, on a un saut de ligne plus un retour chariot
(Carriage Return) ainsi qu'un caractère de fin de fichier (ASCII n°26 : Ctrl+Z).
Ces différences rendent illisibles les fichiers d'un système à un autre, c'est pourquoi il est
nécessaire d'utiliser les MTools pour effectuer les convertions adéquates.
Les commandes
Toutes les commandes qui suivent à l'exception de mcopy ne s'appliquent qu'au système
de fichier Dos et ne peuvent pas manipuler les fichiers du système de fichier Unix.
La commande mattrib permet de changer les attributs d'un fichier d'un système
de fichier compatible Dos. Par exemple, si vous souhaitez changer les attributs
d'un fichier situé sur une disquette Windows, cette commande est toute indiquée.
- 29 -
A noter que ces attributs n'ont rien avoir avec les droits de fichier du système
Unix.
h caché
r lecture seule
s système
Les noms de fichiers peuvent contenir des méta-caractères ou être des réperoires.
L'attribut / (slash) permet de parcours de manière récursive les sous-réperoires.
Exemples :
mattrib a:monprog.c +r pour protéger en écriture le fichier monprog.c situé sur
le lecteur de disquette.
mattrib a:data +h +r -a -/ pour cacher, protéger en écriture et supprimer
l'attibut archive de tous les fichiers du répertoire data et de ses sous-répertoires.
Cette commande permet de copier des fichiers depuis un lecteur de disquette vers
le système Unix et inversement.
Vous pouvez faire une copie d'un fichier sur le même volume.
Ou bien sauvegarder des fichiers de votre compte Unix vers une disquette.
Et inversement, copier des fichiers d'une disquette vers votre compte Unix.
- 30 -
Pour copier les sous-répertoires d'un réperoire passé en paramètre à mcopy,
utilisez l'attribut / (slash).
Exemple : mcopy ../*.c *.h -/ a:\TpC\ pour copier tous les fichiers écrits en
langage C (fichiers sources en .c et d'entêtes en .h) du répertoire parent plus
ceux des sous-répertoires successifs. Les fichiers sont copiés dans le réperoire TpC
du lecteur de disquette qui est ici nommé a:.
L'attribut p (preserve) préserve les attributs des fichiers copiés. Seuls les droits du
propriétaire (et non ceux du groupe ou des autres) sont préservés lors de la copie
vers une disquette. Et réciproquement, les attributs d'un fichier d'un système Dos
sont convertis en droits propriétaires.
Exemple : mcopy *.txt a: -p tous les fichiers textes sont copiés dans la
disquette et tous les droits propiétaires sont convertis en leurs attributs Dos
équivalents.
Par défaut, le détail de la copie n'est pas affiché. Pour forcer l'affichage des noms
de fichiers copiés, utilisez l'attribut v (verbose).
Le plus important reste l'attribut t (translate) qui convertit les formats de fichiers
texte Unix en format Dos et réciproquement. Car la convertion n'est pas faite par
défaut par les mtools.
Problème de la convertion des noms de fichier dans le sens Unix vers Dos :
.[Link] [Link]
monprogrammeamoi.c MONPRO~1.C
tata+moi TATA_MOI
M[5].25/12/[Link] M_5__2~[Link]
- 31 -
Suppression de fichiers (mdel)
Elle demande confirmation pour les fichiers qui possèdent l'attribut lecture seule.
Permet de lister les fichiers d'un répertoire Dos. N'accepte en paramètre que des
identificateurs de répertoire et ne s'applique pas au système de fichier Unix.
Exemple : mdir a:\ pour afficher la liste des fichiers du réperoire racine de la
disquette.
Commande Description
Change les attributs de fichiers Dos.
mattrib [+a/-a](archive) [+h/-h](hidden) [+r/-r](read only) [+s/-s](system)
[-/](recurse forder)
- 32 -
mdir Affiche le contenu d'un répertoire Dos. [-a] (hidden files) [-w] (wide
output) [-/] (recurse)
Toutes ces commandes acceptent les méta-caractères * et ? dont l'utilisation suit les
règles du système Unix et non pas Dos. Par exemple * remplace *.*.
Lors du passage de paramètres optionnels, c'est le préfixe - (tiret) d'Unix et non pas le /
(slash) du Dos qui permet d'introduire les paramètres.
- 33 -
VI. Droits d'accès aux fichiers
Par Hugo ETIEVANT
Notion de droits
Les droits d'accès aux fichiers (appelés encore modes ou permissions) sont un point
essentiel du système Unix. Ils permettent de définir des droits différents sur un même
fichier selon la catégorie d'utilisateurs.
Ainsi les manipulations de fichiers sont restreintes selon les droits alloués à chaque
- 34 -
fichier. A chaque catégorie d'utilisateur correspond des droits spécifiques sur un fichier.
Exemple :
ls -l
-rw-r--r-- cyberzoide univ [Link]
drwxr-xr-x cyberzoide univ data
-rw-r--r-- cyberzoide univ [Link]
-rw------- cyberzoide univ Mail
Ici n'ont été reproduites que les informations intéressantes affichées par la commande
(certaines ont été effacées). Sont affichés : la liste des droits puis le nom du propriétaire
de chaque fichier, le nom du groupe d'utilisateurs auquel appartient de propriétaire des
fichier et enfin le nom du fichier.
En préfixe des droits (et ici en noir) est affiché le type du fichier (d pour les répertoires et
- pour les fichiers normaux et les exécutables).
On peut voir dans cet exemple que tous les fichiers sont du même propriétaire dont le
nom est cyberzoide. Ce propriétaire faisant partie du groupe appelé univ. Vous
apprendrez par la suite la signification des lettres r, w et x.
Droits d'accès
Les droits d'accès d'un fichier sont au nombre de trois:
Lecture
Ecriture
- 35 -
L'accès en écriture permet de modifier un fichier et de le supprimer. Il est désigné
par la lettre w (write).
Exécution
Pour qu'un programme puisse être exécuté, il est indispensable que le droit en
exécution sur ce fichier soit autorisé pour l'utilisateur qui souhaite le lancer.
Quant à un répertoire, il est tout aussi indispensable que son droit en exécution
soit autorisé pour qu'on puisse accèder aux fichiers qu'il contient.
Ce droit en exécution est sans effet lorsqu'il est affecté à un fichier qui n'est pas
un exécutable.
Catégories d'utilisateurs
A un fichier on affecte les droits correspondants à trois catégories d'utilisateurs : les
droits du propriétaire du fichier, les permissions du groupe d'utilisateurs auquel
appartient le propriétaire et celles concédées à tous les autres.
Propriétaire
Le propriétaire d'un fichier est la personne qui le crée. Il est désigné par la lettre u
(owner).
Groupe
Autres
Cette catégorie regroupe tous les utilisateurs qui ne sont ni le propriétaire d'un
fichier ni faisant partir du même groupe que le propriétaire. On les désignent par
la lettre a (other).
- 36 -
Modèle concentrique des droits d'accès
Lorsqu'un droit est alloué, on voit la lettre correspondante (r, w ou x). Si le droit
est refusé, on voit un tiret (-).
- 37 -
lecture.
--x exécution
-w- écriture
r-- lecture
Or les droits globaux d'un fichier sont identifiés par l'association de 3 triplets de
droits. Ce qui nous fait 83=512 combinaisons différentes. Le tableau suivant
regroupe quelques unes de ces combinaisons possibles.
Droits
Description
globaux
rwxr-xr-x Le propriétaire a tous les droits, et le groupe ainsi que les autres
n'ont pas accès en écriture.
rwx------ Le propriétaire a tous les droits mais le groupe et les autres aucun.
- 38 -
chacune des trois catégories d'utilisateur.
Pour cela, on utilise la commande chmod (change mode) selon la syntaxe suivante :
On peut utiliser cette commande de deux façons différentes pour les mêmes résultats.
On choisit soit la notation symbolique soit la notation numérique.
Notation symbolique
Pour affecter à chaque catégorie les droits voulus, on peut utiliser une notation
symbolique selon la syntaxe :
Où les termes catégorie, opération et liste des droits doivent êtres respectivement
remplacés par leur notation décrite dans les tableaux suivants.
Catégorie Description
u propriétaire
g groupe
a autres
Opération Description
+ ajouter
- retirer
= définir
Droit Description
r lecture
w écriture
x exécution
Exemple Description
chmod g=rwx [Link] Alloue au groupe tous les droits.
- 39 -
chmod a-rwx [Link] Retire aux autres tous les droits.
Notation numérique
Ainsi on remplace chacun des triplets par un nombre compris entre 0 et 7. Ce qui
nous fait un nombre à trois chiffres en guise de notation numérique.
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
- 40 -
chmod 761 [Link] rwxrw-r--
Remarques importantes
Exécutable
Répertoire
Pour pouvoir lister les fichiers d'un répertoire, ce dernier doit être accessible en
lecture.
Fichier
Manipulation
Exemple : si le masque de protection vaut 037 alors 740 (=777-037) seront les
droits alloués à tout nouveau fichier.
- 41 -
Exemple : umask 037
D'après cet exemple, tout nouveau fichier aura les droits 740 (rwxr-----) car le
masque de protection vaudra 037 (----wxrwx).
Remarque
Droits étendus
SUID
Définition
Son utilité vient du fait qu'il n'est pas besoin d'accorder durablement des
droits étendus à n'importe qui sur des fichiers sensibles. Puisque l'accès à
ces fichiers est filtré par un programme qui est seul à prendre des
initiatives sur ces fichiers.
Exemple
- 42 -
L'exemple le plus flagrant est celui du programme /usr/bin/passwd (rws-
-x--x) qui appartient à l'utilisateur root. Ce programme possède le droit s
en lieu et place du droit en exécution du triplet du propriétaire. Ce
programme sert à modifier votre mot de passe personnel qui est stocké
dans le fichier /etc/passwd (rw-r--r--) appartenant à root dont vous
n'avez pas les droits en écriture.
Comment donc modifier votre mot de passe si vous n'êtes pas autorisé à
écrire sur le fichier stockant les mots passes ?!! Pour des raisons de
sécurité évidentes, le root interdit à quiconque de pouvoir modifier ou
supprimer ce fichier. Par contre le programme /usr/bin/passwd vous y
autorise grace au droit SUID : vous utilisez le droit en écriture du root
durant l'exécution du programme qui change votre mot de passe.
Manipulation
Notation symbolique
Notation numérique
SGID
Exécutable
- 43 -
appartient le propriétaire de l'exécutable et non plus les droits du
propriétaire.
Répertoire
Manipulation
La valeur numérique du droit SGID est 2000, il est symbolisé par la lettre s
et est affiché à la place du droit d'exécution du groupe.
Notation symbolique
Notation numérique
Sticky Bit
Le droit Sticky Bit (appellé aussi bit collant) est alloué à la catégorie autres d'un
répertoire.
- 44 -
Ce bit collant permet donc d'aller à l'encontre du droit en écriture d'un répertoire
dont héritent les fichiers du répertoire.
- 45 -
VII. Compression
Par Hugo ETIEVANT
1. Archiver
a. Le programme archiveur (tar)
b. Créer une archive
c. Extraire les fichiers d'une archive
d. Archive et compression automatique
e. Contenu d'une archive
2. Compresser
a. Le compresseur compress
i. Compression
ii. Décompression
b. Le compresseur gzip et le décompresseur gunzip
Archiver
Archiver des fichiers consiste en les réunir en un seul autre fichier. Ce dernier n'est pas
compressé c'est-à-dire que sa taille est égale la somme ce celle des fichiers qu'il
regroupe.
Pour archiver des fichiers, on utilise le programme tar. Dont les principales
options sont :
- c (Create) pour créer une archive
- x (eXtract) pour extraire les fichiers d'une archive
- t (lisT) pour afficher la liste des fichiers d'une archive
- v (Verbose) pour le mode verbeux
- f (Force) pour forcer le remplacement de fichiers
- z (gZip) traite les fichiers avec gzip (compression après archivage,
décompression avant extraction et décompression temporaire pour afficher la liste
des fichiers). Créer une archive
Dans l'exemple précédent, on crée une archive qui porte le nom [Link] qui
contient tous les fichiers d'extention .c du répertoire courant.
Le motif est une expression régulière du Shell qui peut donc contenir des
métacaractères.
- 46 -
Extraire les fichiers d'une archive
(Après avoir créé une archive) On remplace l'option c (create) par x (extract)
pour extraire tous les fichiers d'une archive.
On peut n'extraire de l'archive que les fichiers satisfaisant un motif (encore une
expression régulière).
L'ordre des options n'a pas d'importance, en revenche, celui de fichier et motif
en a.
Pour visualiser la liste des noms des fichiers contenus dans une archive, on utilise
l'option t.
- 47 -
Syntaxe : tar t [Link]
Compresser
Le but de la compression est de réduire la taille des données en utilisant un algorithme.
Un fichier compressé n'est plus utilisable telquel à moins de le décompresser. Les
programmes de compression suivants remplacent le fichier spécifié en paramètre par un
autre d'extention caractéristique du programme.
Le but du jeu est de compresser une archive .tar afin d'avoir une seule archive
compressée correspondant à une multitude de fichiers originaux (au lieu d'avoir une
archive compressée pour chaque fichier originaux).
Le compresseur compress
Compression
Cet exemple compresse tous les fichiers d'extention .doc en affichant leur
taux de compression respectifs et force l'écrasement d'éventuels anciennes
- 48 -
archives de mêmes noms.
Décompression
- 49 -
Syntaxe : gzip -d [Link]
- 50 -
VIII. Le Shell d'Unix
Par Hugo ETIEVANT
1. Les commandes
a. Internes
b. Externes
c. Complexes
d. Scripts
2. Flux de données
a. Entrée standard
b. Sortie standard
c. Sortie d'erreur standard
d. Redirections
3. Caractères spéciaux
4. Les variables du Shell
a. Variables d'environnement
b. Autres variables
c. Déclaration
d. Manipulation
5. Fichiers de commandes
a. Exécution
b. Paramètres
6. Structures
a. if then else
b. case
c. for
d. while
e. until
7. Tests
a. Chaînes de caractères
b. Chaînes numériques
c. Fichiers
d. Autres opérateurs
Les commandes
Le Shell est un programme qui permet l'exécution de commandes qui affichent en
générale un résultat à l'écran.
Tout programme en cours d'exécution est appelé processus. Le Shell en est un.
Commandes internes
- 51 -
Les commandes internes au Shell font partie intégrante du Shell et leur exécution
n'implique pas la création d'un nouveau processus.
Commandes externes
Ce sont des programmes binaires généralement situés dans le répertoire /bin que
le Shell va exécuter sous la forme d'un nouveau processus.
Commandes complexes
Exemple :
Fichiers de commandes
Appelés aussi scripts Shell, ces fichiers textes regroupent une succession
ordonnée de commandes et de structures de contrôles. Ecrire un script revient à
faire de la programmation.
Exemple :
if [ $# -eq 1 ]
then if [ -f "/bin/$1" ]
then echo "Commande externe."
fi
else echo "Syntaxe: $0 commande"
fi
l'entrée standard
la sortie standard
la sortie d'erreur standard
Entrée standard
- 52 -
L'entrée standard est le canal d'entrée des données qui est utilisé par le système.
Par défaut c'est le clavier.
Ainsi, les commandes du Shell prennent leurs paramètres sur l'entrée standard.
Sortie standard
La sortie standard est le canal de sorties des données. C'est par ce canal que
transitent les données résultant de l'exécution d'une commande. C'est en général
un terminal, c'est-à-dire l'écran.
Ainsi, les commandes du Shell écrivent très souvent des résultats sur la sortie
standard.
La sortie d'erreur standard est le canal par lequel les messages d'erreurs
transitent, c'est en général l'écran. Il arrive quelque fois qu'une fenêtre soit
spécialement dédiée à ce canal.
Dès qu'un code d'erreur est généré par une commande, il est envoyé un message
sur ce canal.
Redirections
Par exemple on souhaite écrire dans un fichier la liste des fichiers d'un répertoire.
La commande ls permet de lister les fichiers d'un répertoire. Cette commande
envoie le résultat de sa recherche sur la sortie standard (écran).
Exemple :
$ ls
amoi.c [Link] tp3.c
[Link] tp1.c zizitop.mp3
monprog.c tp2.c
Pour rediriger la sortie standard sur un fichier, on utilise le caractère spécial >.
Exemple :
$ ls > [Link]
Exemple :
$ cat [Link]
amoi.c [Link] tp3.c
[Link] tp1.c zizitop.mp3
- 53 -
monprog.c tp2.c
Le caractère > permet de créer le fichier si celui-ci n'existe pas lors de l'exécution
de la commande. Si le fichier existe déjà, son contenu est écrasé.
Exemple :
La commande echo permet d'afficher du texte sur la sortie standard qui est ici
redirigée vers le fichier [Link] à la suite duquel on écrit la chaîne de caractères
passée en argument.
Exemple :
$ cat [Link]
amoi.c [Link] tp3.c
[Link] tp1.c zizitop.mp3
monprog.c tp2.c
Liste de mon répertoire
On voit que le contenu du fichier n'a pas été écrasé et qu'il contient une phrase en
plus.
Caractère Description
> Redirige la sortie standard.
Caractères spéciaux
En plus des caractères de redirection des flux standards de données, le Shell possèdent
des caractères dont la signification est très... spéciale, les voici regroupés dans le tableau
suivant.
Caractère Description
Métacaractère qui remplace n'importe quelle chaîne de caractères
* (même vide).
Exemple : cp * DATA copie tous les fichiers dans le répertoire DATA.
- 54 -
? Métacaractère qui remplace un caractère quelconque.
Défini une chaîne de caractères qui ne sera pas évaluée par le Shell.
'...' Exemple : echo '*?&' affiche sur la sortie standard les caractères
spéciaux *?& sans les interpréter.
Défini une chaîne de caractères dont les variables seront évaluées par le
Shell.
"..."
Exemple : echo "Vous êtes $USER." affiche Vous êtes + la valeur de la
variable $USER.
- 55 -
($HOME), la liste des répertoires dans lequels aller chercher les exécutables des
commandes externes ($PATH), et bien d'autres encore...
Variable=Valeur Description
PWD=/home/hugo Stocke le chemin et le nom du répertoire courant.
HOSTNAME=
[Link] Nom du serveur.
Autres variables
Variable Description
$$ PID du processus Shell en cours.
Déclaration
Syntaxe : nom=valeur
- 56 -
La valeur de la variable peut être numérique ou être une chaîne de caractère, son
format n'a pas d'importance.
Une variable peut être utilisée dans n'importe quelle circonstance du moment que
c'est dans le Shell. Son nom doit être précédé du signe dollard ($) et être entre
accolades ({}) si un autre mot lui est contigu.
Exemples :
$ echo $EMAIL
cyberzoide@[Link]
Dans le second exemple, une chaîne contenant la même variable est passée en
paramètre à echo. Les doubles quotes sont des caractères spéciaux ("...")qui
obligent le Shell a évaluer la valeur des variables que contient la chaîne entre
double quote. La commande echo affiche donc la chaîne à l'écran.
Et enfin, cette fois les simples quotes interdisent au Shell d'évaluer la valeur de la
variable. Donc echo affiche la chaîne brute.
Autres exemples :
Dans le second exemple, la variable est entre accolades afin que le Shell la
distingue des caractères qui suivent.
Dans le dernier exemple, la variable rep contient une chaîne entre accents
graves, ce qui oblige le Shell à l'interpréter comme une commande et à la
remplacer par la chaîne qui serait renvoyée sur la sortie standard à l'exécution de
la dite commande.
Fichiers de commandes
- 57 -
Les fichiers de commandes (scripts) sont des fichiers textes qui contiennent des
commandes du Shell ordonnées par des structures de contrôle.
Exécution
Syntaxe : sh script
Cette syntaxe lance un nouveau processus Shell qui lit ses commandes
dans le fichier script. Ce fichier doit être accessible en lecture.
Syntaxe : ./script
Le terminal est momentanément remplacé par le fichier script accessible
en lecture (pas de nouveau processus créé).
Syntaxe : script
Lance un nouveau processus Shell qui lit ses commandes dans le fichier qui
doit être accessible en lecture et en exécution.
Syntaxe : exec script
Le Shell courant est remplacé par un processus Shell qui lit ses
commandes dans le fichier qui doit être accessible en lecture et en
exécution.
Paramètres
Il est possible d'exécuter un script en lui passant des arguments comme pour
n'importe quelle autre commande.
Variable Description
$# Nombre d'arguments.
$0 Nom de la commande.
Structures
if then else
if condition
then instruction
fi
- 58 -
Si la condition est vraie, alors instruction (qui peut être un bloc d'instruction) est
exécutée.
if condition
then instruction1
else instruction2
fi
Si la condition est vraie, alors instruction1 est exécutée et la seconde est ignorée,
sinon c'est instruction2 qui est exécutée et la permière est ignorée.
if condition1
then instruction1
elif condition2
then instruction2
fi
elif est équivalent à else if. Ainsi l'instruction2 n'est exécutée que si condition1 est
fausse et condition2 est [Link] toutes deux vraies en même temps.
case
case chaine in
motif_1) instruction1;;
motif_2) instruction2;;
...
motif_k) instructionk;;
esac
Si la chaine de caractères est semblable au motif_i pour i=1,…,k (qui est une
chaîne d'expansion de chemin, accepte les méta caractères * ?, [], {} et ~) alors
l'instructioni est exécutée.
La chaine peut tout à fait vérifier simultanément plusieurs motifs différents, dans
ce cas de figure les instructions (ou blocs d'instructions) correspondantes seront
tous exécutés.
for
On fait donc varier la variable en lui faisant prendre successivement toutes les
valeurs de l'ensemble.
- 59 -
while
while condition
do
instructions
done
Boucle dont les instructions sont exécutées tant que l'expression condition est
vrai.
until
Structure répétitive jursqu'à ce que la condition soit vraie (i.e. tant qu'elle est
fausse).
until condition
do
instructions
done
Boucle dont les instructions sont exécutées tant que l'expression condition est
fausse.
Tests
Les conditions des structures peuvent être évaluées grâce à la commande test.
Chaînes de caractères
test -z chaine
Renvoie vrai si chaine est vide.
test -n chaine
Renvoie vrai si chaine n'est pas vide.
Chaînes numériques
- 60 -
Opérateur Signification
-eq =
-ne <>
-lt <
-le <=
-gt >
-ge >=
Fichiers
-f fichier ordinaire
-d Répertoire
-r accès en lecture
-w accès en écriture
-x accès en exécution
Autres opérateurs
Opérateur Signification
! négation
-a conjonction (et)
-o disjonction (ou)
- 61 -
IX. Exemples de scripts et commandes
Par Hugo ETIEVANT
- 62 -
sauve tp/algo/ -v
sauve programs -f
sauve DATA
- 63 -