0% ont trouvé ce document utile (0 vote)
43 vues63 pages

Cours D'unix

Le document présente le système de fichiers sous Unix, en détaillant l'arborescence, les types de fichiers, et les commandes de navigation et de manipulation des fichiers. Il explique également les chemins d'accès, les méta-caractères, et fournit des exemples d'utilisation des commandes pour afficher, découper, et rechercher des fichiers. Enfin, il aborde la création de fichiers et les statistiques, ainsi que les différences entre les fichiers.

Transféré par

Josué Nelson
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
43 vues63 pages

Cours D'unix

Le document présente le système de fichiers sous Unix, en détaillant l'arborescence, les types de fichiers, et les commandes de navigation et de manipulation des fichiers. Il explique également les chemins d'accès, les méta-caractères, et fournit des exemples d'utilisation des commandes pour afficher, découper, et rechercher des fichiers. Enfin, il aborde la création de fichiers et les statistiques, ainsi que les différences entre les fichiers.

Transféré par

Josué Nelson
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

I.

Système de fichiers sous Unix


Par Hugo ETIEVANT

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 :

 MonProg.c et monprog.c ne représentent pas les mêmes fichiers


 a.b... est un nom de fichier valide sous Unix
 tp6-31/03/2001.c est valide
 _Z_ l'est aussi

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.

Chemin d'un fichier


Tous ces éléments sont hérarchisés les uns par rapport aux autres. Cette contrainte est
représentée par la notion de chemin d'un fichier. En effet, un fichier est localisable sans
ambiguité (de façon exacte et unique) par son chemin. Ce dernier représente la
succession des répertoires à parcourir pour accéder au fichier (navigation dans l'arbre).
Les répertoires sont séparés par un slash noté / dans l'écriture du chemin (attention,
c'est le même symbole qui représente la racine).

Répertoire parent

Le répertoire parent est celui hiérarchiquement immédiatement supérieure à celui


courant. Il est noté deux points ..

Répertoire courant

On appelle répertoire courant celui dans lequel on se trouve à un instant donné


durant la navigation dans le système de fichiers. Il est noté point .

Chemin absolu

Le chemin absolu désigne la succession des répertoires à parcourir depuis la


racine pour accéder au fichier spécifié.

Exemple : /home/h-etie00/tpC/tp3.c pour accéder au fichier tp3.c du système


de fichier ou qu'on se trouve dans le système (représenté dans le schéma plus-
haut).

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é.

Exemple: ../monprog.c pour accéder au fichier monprog.c lorsqu'on se trouve


dans le répertoire tpC. La présence du répertoire parent dans ce chemin relatif
permet de remonter dans l'arbre.

Types de fichiers
Sous Unix, les fichiers peuvent être de 5 types différents :

Exécutable

Les fichiers exécutables correspondent à des programmes (écrits en langage C


généralement). Il n'est pas conseillé de tenter de les éditer à l'aide d'un éditeur
de texte traditionnel : il n'apparaîtra que des caractères bizarres et
incomprehensibles. Seules les chaînes de caractères stockées en constantes dans
l'exécutable seront visibles. Mais en général la taille d'un exécutable devrait vous
en dissuader.

Répertoire

Les répertoires, nous l'avons vu plus haut, sont des ensembles de fichiers et de
répertoires.

Un répertoire peut ne contenir aucun fichier. Mais en revanche, un répertoire


contient toujours un répertoire parent .. et un répertoire courant . .

Les liens (ln)

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.

Les liens peuvent êtres de deux types :

Lien symbolique

Un lien symbolique est un simple pointeur vers un autre fichier bien réel.

La commande ln -s permet de créer un lien symbolique sur un fichier. Ce


lien sera présent sous la forme d'un fichier dont le nom sera affiché après
le symbole @.

-3-
Syntaxe : ln -s nom-du-fichier-à-pointer nom-du-lien-symbolique

Lien physique

Un lien physique sur un fichier est un fichier qui occupe exactement le


même espace disque que le fichier vers lequel il pointe.

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.

Syntaxe : ln nom-du-fichier-à-pointer nom-du-lien-symbolique

Vous aurez remarquer ici l'absence de l'attribut -s réservé aux liens


symboliques.

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

cd . Se déplace vers le répertoire courant c'est-à-dire ne change pas


de place!
cd .. Va dans le réperoire parent.

cd / Saute vers le réperoire racine, à la base de tout le système.

cd /home Se déplace vers le répertoire home fils de la racine.

Parcours l'arbre jusqu'au répertoire h-etie00 en passant par la


cd /home/h-etie00
racine, puis par home.

cd ../Mail Remonte l'arbre d'un cran, puis va dans le répertoire Mail

cd ../.. Remonte de deux crans.

-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.

mkdir Crée un réperoire.

rmdir Supprime un répertoire.

cp Copie un fichier ou un répertoire.


pwd Affiche le chemin du répertoire courant.

cd Se déplace dans le système de fichier.

ls Affiche la liste des fichiers et répertoires.


ln Crée un lien vers un fichier.

Aux commandes sur les fichiers (rm, mv, cp) vous pouvez spécifier plusieurs arguments et
utiliser les méta-caractères.

Lister les fichiers (ls)


Une commande essentielle de tout système d'exploitation est le listage des fichiers et
sous-répertoires du répertoire courant.

L'équivalent sous Unix de la commande dir du Dos est ls.

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 -l Liste les fichiers en ligne avec toutes les informations connexes.

ls -a Liste en plus les fichiers cachés.

ls -m Sépare les fichiers par une virgule.

ls -t Tri par date.

ls -lu Tri par date de dernier accès et affiche cette date.

ls -F Affiche les types de fichiers i.e. en rajoutant le symbôle correspondant


: / (répertoire), * (exécutable), @ (lien).

ls -S Tri par ordre de taille décroissante.


ls -X Tri par type d'extention.

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.

Afficher le contenu d'un fichier (cat)

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.

Syntaxe : cat fichier

Exemple : cat [Link]

L'exemple précédent affiche à l'écran le contenu du fichier [Link]. Si le fichier


avait été binaire, l'affichage des caractères spéciaux aurait provoqué un grave
disfonctionnement du terminal d'affichage.

Exemple : cat -v /bin/ls

L'ajout de l'option v permet de transformer les caractères de contrôle en


caractères affichables à l'écran. Ceci est très utile pour rechercher des chaînes de
caractères à l'intérieur d'un programme.

A l'origine, cat permet de concaténer des fichiers et d'en renvoyer le résultat sur
la sortie standard.

Syntaxe : cat fichier_1 fichier_2 fichier_3

Exemple : cat [Link] [Link] [Link]

L'exemple précédent affiche à l'écran le contenu des fichiers [Link], [Link]


et [Link].

Au lieu d'afficher sur la sortie standard le résultat de cette concaténation, on peut


la rediriger vers un fichier.

Syntaxe : cat fichier_1 fichier_2 fichier_3 > fichier_4

Exemple : cat [Link] [Link] [Link] > [Link]

Ainsi le fichier [Link] aura pour contenu la concaténation des fichiers


[Link], [Link] et [Link].

Affichage inverse (tac)

La commande tac est homologue à cat mais affiche le contenu d'un fichier en
partant de la dernière ligne vers la première.

Afficher l'entête (head)

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.

Syntaxe : head fichier

-9-
Exemple : head [Link]

Dans cet exemple, il s'affiche les 10 premières lignes du fichier [Link], si ce


dernier en contient moins de 10, il sera affiché dans sa totalité.

Exemple : head -n5 [Link]

Affichage des 5 premières lignes.

Exemple : head -vc20 [Link]

Affichage des 20 permiers caractères après le nom du fichier.

Afficher la fin (tail)

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.

Syntaxe : tail fichier

Exemple : tail [Link]

Dans cet exemple, il s'affiche les 10 dernières lignes du fichier [Link], si ce


dernier en contient moins de 10, il sera affiché dans sa totalité.

Exemple : tail -n5 [Link]

Affichage des 5 dernières lignes.

Exemple : tail -vc20 [Link]

Affichage des 20 derniers caractères après le nom du fichier.

Afficher écran par écran (more et less)

Les commandes more et less permettent d'afficher page par page des fichiers
volumineux sur la sortie stantard.

Pour passer à la page suivante : les touches fléchées. Pour effectuer un


défilement vertical : touche ENTREE. Pour quitter : touche q.

Numérotation des lignes (nl)

La commande nl permet l'affichage du contenu d'un fichier et en numérote les


lignes. En voici les options :
- bt numérote les lignes non-vides (par défaut)
- ba numérote toutes les lignes
- bpXXX numérote seulement les lignes qui contiennent la chaîne de caractères
XXX
- sX supprime le décalage du à la numérotation et utilise le séparateur X
- s'XXX' supprime le décalage du à la numérotation et utilise la chaîne 'XXX'

- 10 -
Syntaxe : nl fichier

Exemple : nl [Link]

Affiche le contenu du

[Link] en insérant le numéro de chaque ligne en début de ligne avec un


espace comme séparateur entre le numéro et le premier caractère de chaque
ligne. Ne numérote que les lignes non vides. Les lignes vides sont affichées.

Exemple : nl -ba [Link]

Numérote et affiche toutes les lignes du fichier.


Synonyme de cat -n [Link]. Affichage sans doublon (uniq)

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

Syntaxe : uniq fichier

Exemple : uniq [Link]

Affiche le contenu du fichier [Link] sur la sortie standard en ométant les


duplications de lignes lorsqu'elles sont contigues.

Affichage avec tri (sort)

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.

Syntaxe : sort fichier

Exemple : sort -bdf [Link]

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

Syntaxe : split fichier

Exemple : split -b 135000 [Link]

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.

Exemple : wc -l 100 /var/log/httpd/[Link] [Link].

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.

Etude d'un cas d'école : on dispose du fichier cours_de_c.pdf qu'on souhaite


sauvegarder sur disquette. Or la commande ls (voir Système de fichiers sous
Unix > Lister les fichiers) nous apprend qu'il fait 5.7 Mo, ce qui est trop grand
pour le copier directement sur disquette.
On va dont le compresser avec l'utilitaire gzip (voir Compression > Le
compresseur gzip) afin d'en réduire la taille. Le fichier résultant cours_de_c.[Link]
fait tout de même 2.8 Mo, ce qui reste encore trop.
On va donc utiliser notre recours ultime : le saucissonage de notre fichier en
plusieurs plus petits de taille 1.3 Mo pour être sûr qu'ils rentreront dans les
disquettes dont on dispose.

Commande : split -b 130000 cours_de_c.[Link] cours_de_c.[Link].

Ce qui nous crée les fichiers suivants :


cours_de_c.[Link] (1.3 Mo)
cours_de_c.[Link] (1.3 Mo)
cours_de_c.[Link] (200 Ko)
que l'on va copier chacun dans une disquette.

Pour retrouver le fichier de départ, on concatène et on décompresse.

Commandes :
cat cours_de_c.[Link].* > cours_de_c.[Link]
gunzip cours_de_c.[Link]
acroread cours_de_c.pdf

- 12 -
Différences (diff)

La commande diff permet de comparer le contenu de deux fichiers pour en


conaître les différences. Ceci est très pratique pour savoir si deux fichiers ont le
même contenu. En voici quelques options :
- b ignore les différences du à des espaces blancs
- B ignore les différences du à des lignes blanches
- i ignore les différences minuscules/MAJUSCULES
- q indiquer seulement si les fichiers sont différents et ne pas afficher les
différences elles-mêmes
- s indiquer lorsque deux fichiers sont identiques
- r comparaison récursive des fichiers d'un répertoire, sous répertoires...

Syntaxe : diff [options] fichier_1 fichier_2

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)

La commande wc permet de compter le nombre de caractères, de mots et de


lignes d'un fichier. Ses options sont :
- l (Lignes) compte le nombre de lignes
- w (Words) compte le nombre de mots
- c (Chars) compte le nombre de caractères
- L (Length max ligne) affiche la longueur de la ligne la plus longue

Syntaxe : wc fichier

Exemple : wc [Link]

Sans options, wc renvoie atomatiquement le nombre de de lignes (l), de mots (w)


et de caractères (c).

Exemple : wc -lL [Link]

Renvoie le nombre de lignes (l) et la taille maximale d'une ligne (L).

- 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.

Type de fichier (file)


La commande file permet de connaître le type d'un fichier.

Syntaxe : file fichier

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.

La précision de la commande dépend du fichier magic qu'elle appelle.

Création d'un fichier (touch)


La commande touch permet de créer un nouveau fichier vide.

Syntaxe : touch fichier

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.

Calcul d'un condensat (md5sum)

- 14 -
Présentation

Un condensat est une somme de vérification permettant de s'assurer de l'intégrité


des données. Un condensat est calculé à partir d'une fonction de hachage. Ici la
fonction utilisée implémente l'algorithme MD5.

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

La fonction md5sum calcul le condensat d'un fichier selon l'algorithme MD5. En


voici les options :
- b voit le fichier en binaire et pas en texte brut
- v mode verbeux
- c fichier compare le condensat avec celui enregistré dans le fichier

Syntaxe : md5sum [options] fichier

Exemple :
$ md5sum [Link]
607cdbaeef8f20be5dcb428f007c9696 [Link]

La commande md5sum affiche le condensat


(607cdbaeef8f20be5dcb428f007c9696) et le nom du fichier ([Link]).

Pour transmettre ce condensat, on fait une redirection de l'affichage vers un


fichier.

Syntaxe : md5sum fichier > condensat

Exemple : md5sum [Link] > [Link].md5

On va générer un nouveau condensat qu'on va comparer avec celui enregistré


dans un fichier.

Syntaxe : md5sum -c condensat fichier

Exemple : md5sum -c [Link].md5 [Link]

En cas d'erreur, il s'affiche : md5sum: MD5 check failed for '[Link]'.

Exemple :
$ md5sum -c upload.md5 -v

- 15 -
[Link] FAILED
md5sum: 1 of 1 file(s) failed MD5 check

Recherche de fichiers (find)


La commande find est ultra puissante, elle permet de faire une recherche sur le système
de fichier et d'afficher la liste des fichiers satisfaisant à une combinaison de critères très
variés.

Introduction

Syntaxe : find répertoire critères [-print]

Exemple : find . -name "*.c" -print

L'exemple précédent lance la recherche depuis le répertoire courant (.) et affiche


le résultat de la recherche (print). Le critère de recherche porte sur le nom
(name) et doit satisfaire le motif (expression régulière) suivant : "*.c" c'est-à-dire
tous les fichiers d'extention .c (autrement dit les programmes sources écris en
langage C).

Exemple : find . -mtime +7 -print

Cet exemple recherche et affiche (print) les fichiers dont la date de dernière
modification (mtime : Modify Time) remonte à plus de 7 jours (+7).

On aurait pu spécifier mtime -5 pour les fichiers dont la date de dernière


modification date au plus de 5 jours. Ou encore mtime 10 pour les fichiers
modifiés exactement il y a 10 jours.

Liste des critères de recherche

Le tableau suivant récapitule les principales options de la commande find.


Chacune de ces options (sauf la première print) sont des critères de recherche
qui renvoient un bouléen vrai si le critère est satisfait, faux sinon. Si exactement
tous les critères sont satisfaits, alors le fichier est considéré comme « trouvé » et
est passé en paramètre à l'option print (si celle-ci est elle aussi spécifiée).

Option Description
print affiche le résultat

name motif nom du fichier

iname motif idem mais sans tenir compte de la casse

mtime +n|-n|n nombre de jours depuis la date de dernière modification

ctime +n|-n|n nombre de jours depuis la date de création

- 16 -
atime +n|-n|n nombre de jours depuis la date de dernier accès

mmin +n|-n|n nombre de minutes depuis la date de dernière modification

cmim +n|-n|n nombre de minutes depuis la date de création

amin +n|-n|n nombre de minutes depuis la date de dernier accès

type du fichier b (fichier spécial en mode bloc), c (fichier


type type special en mode caractère), d (répertoire), p (tube nommé), f
(fichier normal), l (lien symbolique), s (socket)

uid n le fichier porte le numéro de propriétaire spécifié


gid n idem pour numéro de groupe

size n le fichier est de taille spécifiée dont il faut préciser l'unité : b


(bloc de 512 octets, par défaut), c (octet), k (Ko)

used n nombre de jours entre la création et le dernier accès au


fichier

perm +n|-n|n valeur numérique des droits d'accès au fichier

user nom le propriétaire du fichier a pour nom celui passé en paramètre


group nom idem pour le groupe

inum n numéro d'inode du fichier

links n nombre de liens du fichier

newer fichier le fichier est plus récent que celui passé en paramètre

anewer fichier on a accédé au fichier plus récemment qu'on a modifié celui


passé en paramètre

on a accédé au fichier plus récemment qu'on a créé celui


cnewer fichier
passé en paramètre

nouser aucun utilisateur dans le système ne correspond au UID du


fichier

nogroup aucun groupe ne correspond au GID du fichier

empty le fichier est vide et il est soit un fichier normal soit un


répertoire

false renvoie toujours faux

true renvoie toujours vrai

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).

Combinatoire des tests

- 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.

Les opérateurs suivants sont présentés dans l'ordre de priorité décroissante.

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.

Exemple : find . -not -name ".c" -print

Cet exemple affiche sur la sortie standard la liste des fichiers qui ne portent pas
l'extention ".c".

Combinatoire des commandes précédentes


Exemple :

$ tac [Link] | nl | head -n5 | tail -n3 | tac


5 then if [ -f "/bin/$1" ]
4 then echo "Commande externe."
3 else echo "N'est pas une commande externe."

Dans l'exemple précédent, on renvoie successivement le résultat des commandes aux


suivantes par l'intermédiaire des tubes (|). On lit à l'envers le fichier [Link], on
numérote le résultat, on en prend que les 5 premières lignes. De ces 5 premières lignes,
en ne prend que les 3 dernières (c'est-à-dire en fin de compte les lignes 3 à 5). On
renverse une nouvelle fois le résultat!

- 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éroulement d'une session SMTP


Connexion (telnet)

Avant de saisir les commandes spécifiques au protocol SMTP, il faut se connecter


sur la machine reliée au réseau pour pouvoir transférer au réseau TCP/IP
(transfert control protocol / internet protocol) les données.

Syntaxe : telnet machine port

Exemple : telnet lhpca 25

Démarrer

Premièrement, il faut démarrer la session par la commande HELO en spécifiant en


paramètre un identifiant.

- 19 -
Syntaxe : HELO identifiant

Exemple : HELO moi

Destinateur

Ensuite, indiquer l'email du destinateur (c'est-à-dire votre adresse électronique)


par la commande MAIL FROM.

Syntaxe : MAIL FROM: <email>

Exemple : MAIL FROM: <cyberzoide@[Link]>

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].

Cela peut vous permettre d'envoyer des messages de façon anonyme.

Destinataire

Puis, renseigner le destinataire du message par son email grâce à la commande


RCPT TO.

Syntaxe : RCPT TO: <email>

Exemple : RCPT TO: <[Link]@[Link]>

Début du message

Pour indiquer au protocol qu'on s'apprète à écrire le message proprement dit, il


faut utiliser la commande DATA.

Syntaxe : DATA

Et ensuite on écrit le contenu du message sur plusieurs lignes.

Fin du message

La fin du message s'indique par le caractère . (point) seul sur la dernière ligne du
message.

Syntaxe : .

Quitter

Et enfin, on met fin à la session par la commande QUIT.

Syntaxe : QUIT

- 20 -
Dialogue

Tout au long de la session, chaque commande du protocol SMTP (en mode


client/serveur) envoyée fait l'objet d'une confirmation automatique (ou d'un
message d'erreur) de la part serveur sur lequel vous êtes connectés.

Exemple typique de session


$ telnet miage 25
Trying [Link]...
Connected to [Link].
Escape character is '^]'.
220 [Link] ESMTP Sendmail 8.9.3/8.9.3/Debian 8.9.3-21; Mon, 23 Apr
2001 [Link] +0200
HELO cyberzoide
250 [Link] Hello h-etie00@[Link] [[Link]],
pleased to meet you
MAIL FROM: <[Link]@[Link]>
250 <[Link]@[Link]>... Sender ok
RCPT TO: <pere-noel@[Link]>
250 <pere-noel@[Link]>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
salut mon pote

viens bouffer a la maison ce soir....


.
250 JAA29061 Message accepted for delivery
QUIT
221 [Link] closing connection
Connection closed by foreign host.
$

Résumé des commandes

Syntaxe Description

telnet machine port Connection à la machine sur le port afin d'entrer sur le protocol
SMTP.

HELO identifiant Débute la session sous l'identifiant.

MAIL FROM: <email> Spécifie l'email du destinateur.

RCPT TO: <email> Spécifie l'email du destinataire.

DATA Signifie le début de la frappe du message.

. Signifie la fin du message.

QUIT Ferme la connection au protocol SMPT.

- 21 -
Format MIME
Introduction

Le format MIME (multiperpose internet mail extension) est un format universel de


codage des données pour le mail. C'est ce format qui est utilisé par les logiciels de
messagerie électronique.

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

Le format MIME permet de résoudre ce problème et d'intégrer à un mail n'importe


quel type de données (fichier image, fichier son, exécutable...).

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.

Syntaxe : Champs: valeur

Exemple : From: cyberzoide@[Link]

Réécrivons l'exemple de session précédent en intégrant des champs au format


MIME :

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

Evidement, c'est pas très pratique à écrire, vive Netscape Messenger!

Résumé des champs

Voici quelques champs MIME :

- 22 -
Champs Description
email du destinateur, pend la valeur de syntaxe
From
login@serveur ou alias <login@serveur>

To email du destinataire

Cc email d'autres destinataires

email d'autres destinataires qui n'apparaîtrons pas dans le


Bcc
logiciels de messagerie

Subject sujet du message

Organization organisation à laquelle appartient le destinateur

Sender alias ou email du destinateur

Received liste des intermédiaires techniques

Return-Path

date et heure d'envoie, exemple : Wed, 15 Nov 2000


Date
[Link] +0100 (MET)

Reply-To email de réponse

identifiant du message de syntaxe


Message-Id
<listedecaractères@serveur>

In-Reply-To

identifiants des messages successifs auxquels celui-ci fait


References
réponse

Keywords mots clés du message

format du message text/plain ou text/richtext ou


Content-Type
multipart/alternative ou...

Content-Transfert-
format du transfert SMTP, 8bit en général
Encoding

MIME-Version version du format MIME utilisé, 1.0 en général

- 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.

Exemple typique de session ftp (ftp)


Voici maintenant la démarche à suivre pour faire du FTP sous Unix.

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.

Exemple : ftp [Link]

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.

Exemple réel de session :

$ 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
$

Résumé des commandes

Commande Description

open Etablit une connection avec un serveur ftp.


open [Link]

user Identifie le login.


user cyberzoide

pass Envoye le mot de passe.


pass ********

cd Change de répertoire dans la machine distante.


cd data

lcd Change de répertoire dans la machine locale.


lcd unix/images

mkdir Crée un répertoire dans la machine distante.


mkdir doc

rmdir Supprime un répertoire dans la machine distante.


rm doc

ascii Sélectionne le mode de transfert Ascii (par défaut).


ascii

bin Sélectionne le mode de transfert binaire.


bin

binary Synonyme de bin.


binary

image Synonyme de bin.


image

get Télécharge un fichier de la machine distante vers la machine locale.


get unix.php3l ../[Link]

mget Même chose que get mais interprète les méta-caractères.


mget *.gif

recv Synonyme de get.

- 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.

Equivalent à get mais télécharge le fichier seulement s'il est plus


newer récent que celui sur la machine locale.
newer index.php3l

put Envoye un fichier de la machine locale vers la machine distante.


put index.php3l

send Synonyme de la commande put.

mput Même chose que put mais interprète les méta-caractères.


mput *.php3

delete Supprime un fichier de la machine distante.


delete emploi/[Link]

mdelete Même chose que delete mais interprète les méta-caractères.


mdelete images/*.jpg

rename Renomme un fichier distant.


rename tp6.c chess.c

size Affiche la taille d'un fichier distant.


size [Link]

Affiche les informations sur le système d'exploitation du serveur


system distant.
system

Active le type de transfet spécifié (ascii/binary). Si aucun n'est


type passé en paramètre, affiche celui actif.
type binary

verbose Active le mode verbeux.


verbose

bell Active le signal sonor marquant la fin de tout transfert de fichiers.


bell

help Affiche l'aide de la commande ftp.


help

ls Affiche la liste des fichiers et répertoires distants.


ls

pwd Affiche le répertoire distant courant.


pwd

Modifie le temps de mort autorisé par le serveur distant (en secondes).


Si aucun paramètre n'est passé, affiche la valeur précédemment
idle active. Passé ce temps mort d'inactivité, le serveur distant met fin
automatiquement à la connection.
idle 60

remotehelp Affiche l'aide du serveur sur la commande passée en paramètre ou un

- 27 -
message d'information si aucun paramètre n'est spécifié.
remotehelp recv

status Affiche l'état actuel de la commande ftp.


status

quit Met fin à la connection et quitte la commande ftp.


quit

bye Synonyme de quit.


bye

close Met fin à la connection ftp.


close

disconnect Synonyme de close.


disconnect

- 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.

Attributs de fichiers (mattrib)

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.

Spécifiez en paramètre le nom du fichier et le code attribut précédé du signe - ou


+ respectivement pour supprimer ou ajouter l'atribut spécifié.

Code attribut Description


a archive

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.

Copie de fichiers (mcopy)

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.

Exemple : mcopy a:[Link] a:[Link]

Ou bien sauvegarder des fichiers de votre compte Unix vers une disquette.

Exemple : mcopy *.c a:

Et inversement, copier des fichiers d'une disquette vers votre compte Unix.

Exemple : mcopy a:\data\images\*.gif ../clipart

Lorsqu'aucun chemin n'est spécifié, c'est dans le répertoire courant . du système


Unix que les fichiers à copier sont recherchés ou c'est dans ce dernier qu'ils sont
copiés. Si dans la spécification de chemin a: il manque celle de fichier alors tous
les fichiers du volume inséré dans lecteur de disquette seront automatiquement
copiés.

Les exemples suivants sont donc équivalents :


mcopy a:* .
mcopy a: .
mcopy a:

- 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).

Exemple : mcopy a: -/ -v pour copier tous ce que contient la disquette dans le


répertoire courant et en forçant l'affichage des noms et chemins de fichiers
copiés.

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.

Exemple : mcopy *.c a: -t

Problème de la convertion des noms de fichier dans le sens Unix vers Dos :

 Le système de fichier Dos n'admet pas comme valide un certain nombre de


caractères illégaux qui pourtant sont acceptés par le système Unix, ceux-ci
sont alors convertis en soulignement (_).
 Les points (.) qui ne peuvent être interpétés comme des séparateurs de
nom/extention de fichier Dos sont supprimés.
 Les noms de fichiers sont convertis au format 8.3
 Un nombre après tilde (~nombre) est inclu dans le nom dans le cas où sa
longueur excède le format 8.3

Nom de fichier Nom de fichier


sous système Unix sous Dos
toto.c TOTO.C

.[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)

La commande mdel permet de supprimer un ou des fichier(s) Dos. Elle ne peut


pas supprimer de fichiers du système Unix.

Elle demande confirmation pour les fichiers qui possèdent l'attribut lecture seule.

Pour afficher le détail des fichiers supprimer, spécifiez l'attribut v. Il est


grandement conseillé de ne jamais l'omettre afin de toujours savoir quels sont les
fichiers qui seront perdus !

Exemple : mdel a:*.doc -v.

Listage de répertoire (mdir)

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.

Cette commande affiche à l'écran la liste des fichiers et sous-répertoires d'un


réperoire Dos ainsi que des informations additionnelles telles que la taille, la date
et l'heure de dernière modification de chaque fichier. Mais aussi le nombre de
fichiers et de réperoires et la quantité de mémoire libre sur la disquette. Tout
comme la commande dir de MS-Dos.

Exemple : mdir a:\ pour afficher la liste des fichiers du réperoire racine de la
disquette.

Pour lister de façon récursive les sous-réperoires, rajouter l'attribut -/.

Il est possible de n'afficher que les fichiers cachés : -a.

Pour ne pas encombrer l'affichage des informations additionnelles grace à


l'attribut -w.

Résumé des commandes

Commande Description
Change les attributs de fichiers Dos.
mattrib [+a/-a](archive) [+h/-h](hidden) [+r/-r](read only) [+s/-s](system)
[-/](recurse forder)

mcd Change de répertoire dans l'arboraissance Dos.

mcopy Copie de fichiers entre Linux et Dos et inversement. [-v] (verbose) [-


p] (preserve) [-t] (translate) [-/] (recurse)

mdel Supression de fichiers Dos. [-v] (verbose)

- 32 -
mdir Affiche le contenu d'un répertoire Dos. [-a] (hidden files) [-w] (wide
output) [-/] (recurse)

mformat Format un lecteur au format Dos.

mlabel Affecte un nom de volume Dos.


mmd Création d'un répertoire dans le système de fichier Dos.

mrd Supression d'un répertoire.

mren Renommer un fichier.

mtype Affiche le contenu d'un fichier Dos.


mmove Déplace un fichier.

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

1. Notion de droits (permissions)


2. Affichage des droits (ls)
3. Droits d'accès
a. Lecture
b. Ecriture
c. Exécution
4. Catégories d'utilisateurs
a. Propriétaire (UID)
b. Groupe (GID)
c. Autre
5. Modèle concentrique des droits d'accès
6. Identification des droits
a. Identification globale
b. Combinaisons des droits
7. Changement des droits (chmod)
a. Notation symbolique
b. Notation numérique
8. Remarques importantes
a. Exécutable
b. Répertoire
c. Fichier
9. Masque de protection des fichiers (umask)
a. Manipulation
b. Remarque
10. Droits étendus
a. SUID
i. Définition
ii. Exemple
iii. Manipulation
 Notation symbolique
 Notation numérique
b. SGID
i. Exécutable
ii. Répertoire
iii. Manipulation
 Notation symbolique
 Notation numérique
c. Sticky bit

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.

Affichage des droits (ls)


Pour afficher à l'écran les droits alloués à un fichier, il faut utiliser la commande ls -l
qui permet de lister les fichiers d'un répertoire avec toutes les informations connexes
possibles dont les droits du 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

L'accès en lecture autorise la lecture du fichier, c'est-à-dire qu'il est possible


d'éditer ce fichier avec une application quelconque pour en voir le contenu. Cet
accès est désigné par la lettre r (read).

Alloué à un répertoire, ce droit permet de lister les fichiers qu'il contient.

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).

Alloué à un répertoire, il autorise la modification et la suppression des fichiers qu'il


contient quelques soient les droits d'accès des fichiers de ce répertoire (mêmes
s'ils ne possèdent pas eux-même le droit en écriture). Donc attention!

Exécution

L'accès en exécution permet à un fichier exécutable d'être lancé et à un répertoire


d'être ouvert. Il est désigné par la lettre x (execute).

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).

Le UID désigne par un identificateur numérique unique le propriétaire d'un fichier.

Groupe

Un groupe d'utilisateur est un ensemble d'utilisateurs privilégiés ayant en général


des permissions moindre que le propriétaire d'un fichier mais plus grandes que la
catégorie qui suit. Cette catégorie est désignée par la lettre g (group).

Le GID désigne par un identificateur numérique unique le groupe auquel


appartient le propriétaire d'un fichier.

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

Le schéma ci-haut montre qu'un ensemble de propriétaires forme un groupe, qu'un


ensemble de groupes forme la catégorie "autres" (qui sont tous ceux qui prétendent à
accéder aux données).

L'accès à un sous ensemble concentrique suppose a priori d'obtenir des droits


supplémentaires.

Identification des droits


Identification globale

A chaque catégorie d'utilisateur on associe un triplet de droits : lecture, écriture et


exécution. Au total 9 droits (3*3) sont affectés à chaque fichier.

Lorsqu'un droit est alloué, on voit la lettre correspondante (r, w ou x). Si le droit
est refusé, on voit un tiret (-).

Dans l'exemple ci-contre, le propriétaire dispose des droits de lecture et


d'écriture. Tandit que le groupe ainsi que les autres ne disposent que du droit de

- 37 -
lecture.

Combinaisons des droits

A chacune des 3 catégories d'utilisateur, on associe d'une des 8 combinaisons


différentes possibles pour l'allocation des droits que le tableau ci-dessous
récapitule.

Triplet Droits correspondants


--- aucun

--x exécution

-w- écriture

-wx écriture et exécution

r-- lecture

r-x lecture et exécution

rw- lecture et écriture


rwx lecture, écriture et exécution

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.

Le propriétaire a tous les droits, et le groupe ainsi que les autres


rwxr--r--
n'ont accès qu'en lecture.

rwxr-x--- Le propriétaire a tous les droits, le groupe possède les droits de


lecture et d'exécution alors que les autres n'ont aucun droit.

rwx------ Le propriétaire a tous les droits mais le groupe et les autres aucun.

rw-r--r-- Le propriétaire possède les droits de lecture, écriture mais pas


exécution. Et le groupe et les autres ont le droit en lecture.

Le propriétaire et le groupe ont le droit en lecture et écriture mais


rw-rw----
les autres n'ont aucun droit.

Changement des droits (chmod)


Il est offert au propriétaire d'un fichier (et seulement à lui seul) de modifier les droits du
fichier. C'est-à-dire qu'il peut supprimer des droits ou bien en rajouter de nouveaux à

- 38 -
chacune des trois catégories d'utilisateur.

Pour cela, on utilise la commande chmod (change mode) selon la syntaxe suivante :

chmod droits fichier.

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 :

chmod catégorie+opération+liste-des-droits fichier

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

Comme le montre le tableau ci-dessous, la commande chmod lorsqu'elle est


utilisée en notation symbolique ne permet de modifier les droits que pour une
catégorie d'utilisateurs à la fois.

On peut retirer, ajouter ou définir un ou plusieurs droits en même temps.

Exemple Description
chmod g=rwx [Link] Alloue au groupe tous les droits.

chmod g-w [Link] Retire au groupe le droit d'écriture.

- 39 -
chmod a-rwx [Link] Retire aux autres tous les droits.

chmod u=rw [Link] Alloue au propriétaire les droits en lecture et en


écriture.

chmod a+r [Link] Rajoute aux autres le droit en lecture.

Notation numérique

L'avantage de la notation numérique sur la précédente est de permettre sur un


fichier la définition absolue des droits de toutes les catégories en même temps
selon la syntaxe :

chmod serie-de-3-chiffres fichier

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.

Le tableau ci-après permet de faire la convertion entre les différentes triplets


possibles et leur notation octale (nombre en base 8).

Triplet Nombre binaire Nombre octal


--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx 111 7

L'emploi de cette numérotion suppose de connaître ou de savoir retrouver


aisément le nombre octal associé à chaque triplet. Ce qui est assez simple,
puisque cette numérotation est la convertion en octal de la représentation binaire
du triplet. Considérez la présence d'un droit comme un booléen valant 1 et son
absence comme 0, vous obtenez alors un nombre binaire qu'il est aisé de
convertir en octal (ce qui revient à du décimal car on ne passe pas aux dizaines
dans la base 8).

Exemple Droits globaux associés


chmod 640 [Link] rw-r-----

chmod 700 [Link] rwx------

chmod 661 [Link] rw-rw-r--

- 40 -
chmod 761 [Link] rwxrw-r--

chmod 610 [Link] rw-r-----

Remarques importantes
Exécutable

Un programme ne peut être exécuté que si le fichier exécutable coorespondant


possède le droit d'exécution dans la catégorie à laquelle appartient l'utilisateur.

Répertoire

On ne peut accèder à un fichier que si les répertoires successifs constitutifs du


chemin absolu de ce fichier possèdent le droit en exécution.

Pour pouvoir lister les fichiers d'un répertoire, ce dernier doit être accessible en
lecture.

Fichier

Le droit en exécution n'a aucune incidence sur un fichier non exécutable.

Par contre, un script (c'est-à-dire un fichier texte contenant des commandes du


Shell) doit avoir les droits en lecture et en exécution pour pouvoir être interprété
et exécuté par le Shell.

Masque de protection des fichiers (umask)


Le masque de protection de fichier permet de définir les droits par défaut de tout fichier
créé.

Manipulation

Ce masque se comporte comme un filtre et utilise la notation numérique. On parle


de filtre car il ne contient pas la série des 3 chiffres octaux correspondants aux
droits à allouer aux fichiers, mais celle correspondant aux droits à ne pas allouer.

Le système Unix affecte à un fichier les droits globaux résultant de la soustraction


des droits maxima 777 par le masque de protection.

Exemple : si le masque de protection vaut 037 alors 740 (=777-037) seront les
droits alloués à tout nouveau fichier.

La commande permettant de définir un nouveau masque de protection est umask.

Syntaxe : umask droits

- 41 -
Exemple : umask 037

777 = rwx rwx rwx = 111 111 111


- 037 = --- -wx rwx = 000 011 111
= 740 = rwx r-- --- = 111 100 000

D'après cet exemple, tout nouveau fichier aura les droits 740 (rwxr-----) car le
masque de protection vaudra 037 (----wxrwx).

Pour connaître la valeur du masque de protection, tapez umask sans attribut.

Remarque

Lors de la création d'un fichier, même si le masque de protection spécifie le droit


en exécution, ce dernier ne sera pas affecté au fichier nouvellement créé mais
seulement à un répertoire. Donc, si vous créez un fichier exécutable ou un script il
faudra lui rajouter manuellement le droit en exécution.

Droits étendus
SUID

Définition

Nous avons vu plus haut que chaque catégorie d'utlisateurs dispose de


droits différenciés sur les fichiers. Et seul le propriétaire d'un fichier a le
pouvoir de céder des droits à d'autres utilisateurs.

Lorsqu'un utilisateur lance un programme, ce programme s'approprie les


droits de l'utilisateur pour la manipulation des fichiers et non pas ceux du
propriétaire du fichier (sinon quel souk!).

Mais il est quelque fois nécessaire de permettre à d'autres utilisateurs


l'accès à des données normalement protégées. Ce droit SUID permet de
préter à un utilisateur de façon temporaire, des droits suplémentaires par
l'intermédiaire d'un programme (fichier exécutable).

En exécutant un programme possédant un droit SUID, un utilisateur


s'appropie les droits du propriétaire du fichier exécutable durant le temps
d'exécution du programme. Ces droits supplémentaires ne sont valables
que sur les fichiers appelés par le programme et les opérations effectuées
par le programme et que durant le temps d'exécution du programme.

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

Pour ajouter un droit SUID à un programme, utiliser la commande chmod


de la même manière que vous procéderiez pour un droit normal.

Notation symbolique

Syntaxe : chmod u+s fichier-exécutable.

Exemple : chmod u+s data/hotprog.

Notation numérique

La valeur numérique d'un SIUD est 4000 et s'ajoute à la valeur de la


série numérique globale.

Syntaxe : chmod 4+droits fichier-exécutable.

Exemple : chmod 4755 monprog.

Dans cet exemple on donne les droits rwsr-xr-x au fichier


monprog. Ne pas oublier que le droit SUID s'affiche à la place du
droit en exécution du propriétaire sans que ce dernier soit
supprimé!

Nota : la présence du droit SUID suppose la présence du droit en


exécution qui permet de lancer le fichier exécutable.

SGID

Le droit SGID fonctionne différemment selon qu'il est affecté à un fichier


exécutable ou à un répertoire.

Exécutable

Sur un fichier exécutable, le SGID est similaire au droit SUID vu


précédemment sauf qu'il donne à un utilisateur les droits du groupe auquel

- 43 -
appartient le propriétaire de l'exécutable et non plus les droits du
propriétaire.

Répertoire

Tout fichier créé porte les droits du masque de protection de son


propriétaire. De plus, tout fichier porte un UID (identificateur de
propriétaire) et un GID (identificateur de groupe). C'est-à-dire qu'un fichier
est toujours identifié par le nom de son propriétaire ainsi que par le nom
du groupe auquel appartient le propriétaire.

Le droit SGID, lorsqu'il est affecté à un répertoire, casse cette logique.


Puisque tout nouveau fichier créé dans un répertoire marqué par le SGID
sera de groupe non pas celui du propriétaire du fichier mais celui du
propriétaire du répertoire.

Ainsi, tout fichier créé dans un répertoire portant le SGID, héritera du


groupe du propriétaire du 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

Syntaxe : chmod g+s fichier-exécutable|répertoire.

Exemple : chmod g+s data/.

Notation numérique

Syntaxe : chmod 2+droits fichier-exécutable|répertoire.

Exemple : chmod 2755 monprog.

Dans cet exemple on donne les droits rwxr-sr-x au fichier


monprog. Ne pas oublier que le droit GUID s'affiche à la place du
droit en exécution du groupe sans que ce dernier soit supprimé!

Sticky Bit

Le droit Sticky Bit (appellé aussi bit collant) est alloué à la catégorie autres d'un
répertoire.

Il permet d'interdire à tout utilisateur (sauf le root) de supprimer un fichier dont il


n'est pas le propriétaire, quelque soient ses droits.

Si le répertoire en question est accessible en écriture par n'importe quel


utilisateur (rwxrwxrwx), n'importe qui peut poser ce bit collant qui protège tous
les fichiers d'une suppression ou modification de la part d'un utilisateur autre que
son propriétaire.

- 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.

Sa valeur numérique est 1000 et est représenté symboliquement par t.

Exemple : chmod 1755 tmp/.

Exemple : chmod a+t tmp/.

Ce droit s'affiche en lieu et place du droit en exécution de la catégorie autres.

- 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.

Le programme archiveur tar

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

Syntaxe : tar cvf [Link] motif

Exemple : tar cvf [Link] *.c

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.

Les fichiers archives doivent porter l'extention .tar.

- 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.

Syntaxe : tar xvf [Link]

Exemple : tar xvf [Link]

On peut n'extraire de l'archive que les fichiers satisfaisant un motif (encore une
expression régulière).

Syntaxe : tar xvf [Link] motif

Exemple : tar xvf [Link] poly*

Dans l'exemple précédent, on extrait de l'archive [Link] seulement les fichiers


dont le nom commence par poly.

Archive et compression automatique

Pour compresser automatiquement le fichier archive pendant sa création, on


utilise l'option z (gzip).

Syntaxe : tar zcvf [Link] motif

Exemple : tar zcvf [Link] *.c

Et de façon similaire, pour décompresser une archive et en extraire les fichiers :

Syntaxe : tar zxvf [Link]

Exemple : tar zxvf [Link]

Les options v et f sont facultatives, on aurait plus écrire :


- tar c [Link] motif pour archiver
- tar x [Link] pour dé-archiver
- tar cz [Link] motif pour archiver et compresser
- tar xz [Link] pour décompresser et extraire.

L'ordre des options n'a pas d'importance, en revenche, celui de fichier et motif
en a.

Les fichiers compressés avec gzip ont .gz pour extention.

Contenu d'une archive

Pour visualiser la liste des noms des fichiers contenus dans une archive, on utilise
l'option t.

- 47 -
Syntaxe : tar t [Link]

Exemple : tar t [Link]

Si le fichier est compressé avec gzip, on rajoute l'option z.

Syntaxe : tar zt [Link]

Exemple : tar zt [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

Le programme compress compresse un ou des fichiers en lui rajoutant


l'extention Z. Ces options sont :
- c (Cat) pour écrire sur la sortie standart sans changer les fichiers
- f (Force) pour forcer l'opération sans demander de confirmation
- r (Recurse) pour décompresser le contenu de répertoires, c'est-à-dire
remplacer tout fichier compressé par le fichier original correspondant de
manière à ne pas avoir dans une archive d'autres archives qu'il faudrait
encore décompresser
- v (Verbose) pour afficher le taux de compression des fichiers.

Syntaxe : compress fichier

Exemple : compress [Link]

L'exemple précédent remplace le fichier [Link] par le fichier


[Link].Z de plus faible taille. De plus, il affiche le taux de
compression du ou des fichiers et force le remplacement des archives déjà
existantes.

Exemple : compress -vf *.doc

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.

Exemple : compress [Link]

Cet exemple compresse le fichier archive [Link] et le remplace par


[Link].Z.

Décompression

Le programme uncompress décompresse un fichier en lui supprimant


l'extention Z. Ces options sont :
- c (Cat) pour écrire sur la sortie standard (sans changer les fichiers)
- f (Force) pour forcer l'opération sans demander de confirmation
- l (List) pour afficher des informations sur les fichiers compressés.

Syntaxe : uncompress fichier.Z

Exemple : compress [Link].Z

L'exemple précédent remplace le fichier [Link].Z par le fichier original


[Link].

Le compresseur gzip et le décompresseur gunzip

Le programme gzip, plus performant que le précédant, compresse un ou


plusieurs fichier(s) en lui rajoutant l'extention par défaut .gz.

Ces options sont :


- c (stdout) pour afficher le résultat de la compression sur la sortie standart sans
modifier les fichiers originaux
- d (decompress) pour decompress le(s) fichier(s)
- f (force) pour forcer l'écrasement sans demander confirmation
- h (help) pour obtenir l'aide
- l (list) pour afficher des informations sur les fichiers
- L (license) pour afficher la licence d'utilisation du programme
- q (quiet) pour ne afficher les messages d'erreurs éventuels
- r (recursive) pour opérer sur les fichiers des sous-réperoires
- S .xxx (suffix) pour modifier en .xxx l'extention des fichiers compressés
- t (test) pour tester l'intégrité des fichiers compressés
- v (verbose) pour activer le mode verbeux
- V (version) pour afficher la version du programme
- [1-9] (fast) nombre entre 1 et 9 pour choisir le taux de compression (1:faible,
9:maximum).

Syntaxe : gzip fichier

Exemple : gzip [Link]

L'exemple précédent compresse le fichier [Link] en [Link].

- 49 -
Syntaxe : gzip -d [Link]

Exemple : gzip -d [Link]

L'exemple précédent décompresse le fichier [Link] en [Link].

Syntaxe : gunzip [Link]

Exemple : gunzip [Link]

L'exemple précédent décompresse le fichier [Link] en [Link].

Le programme gunzip possède les mêmes options que gzip.

Exemple : gzip -9rvf *.tar

L'exemple présédent compresse tous les fichiers *.tar du répertoire courant et de


ses sous-réperoires (r) en degré de compression maximal (9). Il affiche aussi la
liste des fichiers traités (v) et remplace automatiquemnt les fichiers *.[Link] si
jamais ils existaient déjà (f).

- 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.

Le Shell est homologue à l'invite MS-DOS puisqu'il permet d'exécuter :

 des commandes internes,


 des commandes externes,
 des commandes complexes,
 des fichiers de commandes.

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.

Exemples : pwd, cd.

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.

Exemples : ls, gzip.

Commandes complexes

Les commandes complexes résultent de la combinaison de plusieurs commandes


par l'intermédiaires de tubes.

Exemple :

$ ls -a1 | head -n5 | nl


1 .bashrc
2 .XAutority
3 bin
4 [Link]
5 tp6.c

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

Les flux de données


Les flux de données du Shell sont transportés par trois voies différentes :

 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.

Sortie d'erreur 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

Il est possible de changer temporairement les entrées et sorties standard lors de


l'exécution d'une commande.

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]

Si on affiche à l'écran le contenu du fichier [Link] à l’aide de la commande cat,


on vera qu'il contient ce que la commande aurait du afficher à l'écran.

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é.

Pour conserver le contenu du fichier intact et écrire à sa suite, on utilise le


caractère spécial >>.

Exemple :

echo "Liste de mon répertoire" >> [Link]

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.

Le tableau suivant récapitule les caractères spéciaux de redirection.

Caractère Description
> Redirige la sortie standard.

>> Redirige la sortie standard sans écrasement.

< Redirige l'entrée standard.

2> Redirige la sortie d'erreur standard.

2>> Redirige la sortie d'erreur standard sans écrasement.

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.

Permet de séparer plusieurs commandes écrites sur une même ligne.


Exemple :
; cp *.c DATA; tar cvf [Link] DATA copie tous les fichiers
d'extention .c
dans le répertoire DATA et les archive dans le fichier [Link].

Regroupe des commandes.


Exemple :
( ) (echo "Liste :"; ls ) > [Link]
écrit la chaîne Liste : et la liste des fichiers du répertoire courant dans le
fichier [Link].

Permet le lancement d'un processus en arrière plan. Cela permet


& d'exécuter d'autres commandes pendant qu'un processus est en marche.
Exemple : netscape&.

Permet la communication par tube entre deux commandes.


Exemple : ls -1 | file la commande de listage des fichiers du
|
répertoire (ls) envoie chacun d'eux à la commande qui permet de
connaître le type d'un fichier (file).

Introduit un commentaire. Donc tout ce qui suit ce caractère dans une


# ligne est ignoré par le Shell.
Exemple : # ceci est un commentaire.

Déspécialise le caractère qui suit. C'est-à-dire que si le caractère qui suit


\ celui là est un caractère spécial alors le Shell l'ignorera.
Exemple : echo Bon\*jour affiche bon*jour à l'écran.

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.

Défini une chaîne de caractères qui sera interprétée comme une


commande et remplacée par la chaîne qui serait renvoyée sur la sortie
standard à l'exécution de la dite commande.
`...`
Exemple : echo `pwd` >> [Link] écrit à la fin du fichier le chemin
et le nom du répertoire courant. Le caractère spécial utilisé s'obtient par
la combinaison de touche : AltGr + 7 (c'est l'accent grave).

Les variables du Shell


Les variables d'environnement

Le Shell possède comme MS-DOS des variables d'environnement qui permettent


de garder en mémoire des informations importantes telles que le login de
l'utilisateur (stocké dans la variable $USER) ainsi que son répertoire de connexion

- 55 -
($HOME), la liste des répertoires dans lequels aller chercher les exécutables des
commandes externes ($PATH), et bien d'autres encore...

La commande env affiche la liste de toutes les variables d'environnement du Shell


avec leurs valeurs.

Le tableau suivant résume quelques variables affichée par env.

Variable=Valeur Description
PWD=/home/hugo Stocke le chemin et le nom du répertoire courant.
HOSTNAME=
[Link] Nom du serveur.

Taille de l'historique. L'historique garde en mémoire


HISTSIZE=1000 les dernières commandes passées au Shell. Ces
dernières sont accessibles successivement par la
touche fléchée vers le haut.

LANGUAGE=fr Suffixe de la langue du système.

PS1=[\u@\h \W]\$ Chaîne apparaissant à l'invite du Shell.

USER=hugo Nom de l'utilisateur.

DISPLAY=unix:0.0 Adresse du terminal d'affichage.

SHELL=/bin/bash Chemin et nom du programme Shell (il en existe


plusieurs différents).

HOME=/home/hugo Chemin du répertoire de connexion.


PATH=:/usr/local/bin:
/bin:/usr/bin: Liste des répertoires où chercher les exécutables des
/usr/X11R6/bin commandes externes.

Autres variables

Variable Description
$$ PID du processus Shell en cours.

$! PID du dernier processu lancé en background.

$? Code erreur de retour de la dernière commande (0:vrai; sinon


faux).

Déclaration

L'utilisateur peut déclarer facilement de nouvelles variables par l'affectation


directe d'une valeur.

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.

Exemple : EMAIL=cyberzoide@[Link] Manipulation

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]

$ echo "Mon mail : $EMAIL"


Mon mail : cyberzoide@[Link]

$ echo 'Mon mail : $EMAIL'


Mon mail : $EMAIL

Dans le premier exemple, la variable EMAIL est passé directement en paramètre à


la commande echo qui l'affiche après que le Shell en ait évalué la valeur.

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 :

$ moi=CyberZoïde; echo $moi


CyberZoïde

$ phrase="Bonjour $moi"; echo $phrase


Bonjour CyberZoïde

$ rep=`pwd`; echo $rep


/home/hugo/data

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

Pour exécuter un script, plusieurs solutions :

 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.

Le tableau suivant résume les variables accessibles à un script :

Variable Description
$# Nombre d'arguments.

$* Liste des arguments.

$0 Nom de la commande.

$1 Valeur du premier paramètre.

$i Valeur du ième paramètre si i compris entre 1 et 9.

$9 Valeur du neuvième paramètre.

Structures
if then else

Structure conditionnelle binaire : suivant qu'une condition est vrai ou fausse on


exécute un bloc ou on ne l'exécute pas.

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

Structure conditionnelle à choix multiples : suivant la valeur de l'expression


chaine, on peut faire exécuter un large panel d'instructions.

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

Structure répétitive bornée : boucle dont on connait avant le premier passage le


nombre total d'itérations.

for variable in ensemble


do
instructions
done

On fait donc varier la variable en lui faisant prendre successivement toutes les
valeurs de l'ensemble.

- 59 -
while

Structure répétitive tant que la condition est vraie.

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.

test chaine_1 = chaine_2


Renvoie vrai si les deux chaînes sont égales.

test chaine_1 != chaine_2


Renvoie vrai si les deux chaînes ne sont pas égales.

Chaînes numériques

test chaine_1 opérateur chaine_2


Renvoie vrai si les chaînes chaine_1 et chaine_2 sont dans l'ordre relationnel
défini par l'opérateur qui peut être l'un parmi ceux du tableau ci-après.

- 60 -
Opérateur Signification
-eq =

-ne <>

-lt <

-le <=

-gt >

-ge >=

Fichiers

test condition fichier


Renvoie vrai si le fichier vérifie la condition qui peut être l'une parmi celles
décrites dans le tableau ci-après.
Opérateur Renvoie vrai si
-p c'est un tube nommé

-f fichier ordinaire

-d Répertoire

-c fichier spécial en mode caractère

-b fichier spécial en mode bloc

-r accès en lecture

-w accès en écriture

-x accès en exécution

-s fichier non vide

Autres opérateurs

Il est possible de combiner des tests grâce au parenthésage et à l'utilisation des


opérateurs booléens du tableau suivant :

Opérateur Signification
! négation

-a conjonction (et)

-o disjonction (ou)

- 61 -
IX. Exemples de scripts et commandes
Par Hugo ETIEVANT

Nombre de fichiers exécutables dans le répertoire


courant [nbrexe]
La commande file permet de connaître le type des fichiers qui correspondent au motif
*[^ch] c'est-à-dire ceux qui ne se terminent pas par les lettres c et h (réservées au
codes sources du language C). Le filtre grep ne transmet au tube que les lignes envoyées
par file qui contiennent le mot clé executable (qui veut dire fichier exécutable). Quant
au filtre wc d'option -l, il renvoie le nombre de lignes des données provenant du tube.
Au final, ce script renvoie le nombre de fichiers exécutables du répertoire courant (en
comptant les sous-répertoires).

Archivage des fichiers sources C d'un répertoire [tarc]


Ce script prend en paramètre le nom du répertoire dont les fichiers sources de language
C (.h, .c et makefile) seront inclu dans une nouvelle archive compressée de même nom
que le répertoire mais d'extention .[Link].

Suppression automatique des processus Netscape


[killnet]
Ce script va tuer (commande kill -9 PID-du-processus) tous les processus Netscape.
La commande ps affiche la liste des processus en mémoire. Et le filtre grep netscape
permet de ne retenir que les lignes de la commande ps concernant Netscape. On fait une
boucle dans laquelle on crée une variable d'environnement pour chacune des
informations de la ligne correspondant à un processus, la première étant le PID. Il ne
reste plus qu'à le tuer avec kill.

Copie de sources C dans un répertoire [sauve]


Syntaxe: sauve repertoire [-v|f|h]
Sauvegarde dans le répertoire $rep, tous les fichiers .c et .h du répertoire passé en
paramètre au script.
Options:
-v : (verbose) affiche le détail des copies sur la sortie standard
-f : (file) affiche le détail des copies sur le fichier $rapport
-h : (help) affiche l'aide
Exemples:

- 62 -
sauve tp/algo/ -v
sauve programs -f
sauve DATA

- 63 -

Vous aimerez peut-être aussi