You are on page 1of 117

Stage

Linux Utilisateur

Patrick Ducrot
dp@ensicaen.fr
http://www.ducrot.org

1
Plan du document

Historique de Linux ……………………………………………………………………………………………. 3


Connexion au système ………………………………………………………………………………………..13
Présentation de kde ……………………………………………………………………………………..…… 17
Fichiers et répertoires ……………………………………………………………………………………….. 22
Notions d'identifiant et de groupe …………………………………………………………………………… 35
Les processus ………………………………………………………………………………………………… 44
Les droits d'accès …………………………………………………………………………………………….. 49
Le shell ………………………………………………………………………………………………………… 60
Gestion des entrées/sorties …………………………………………………………………………………. 63
Les commandes tee/grep/cut/split/paste/comm/sort/diff/wc/find ……………………………………….. 66
La commande sed …………………………………………………………………………………………… 79
La commande awk …………………………………………………………………………………………… 86
Les scripts shell ………………………………………………………………………………………………. 95
Les sauvegardes ………………………………………………………………………………………..……109
Automatisation de tâches ………………………………………………………………………………….. 112

-2-
Historique
de Linux
-3-
Historique de Linux

„ Version 0.0.1 créée en Août 1991 par Linus Torvalds,


étudiant à l’université d’Helsinki. Un appel à contribution
est alors lancé.

„ Version 0.0.2 permet de faire tourner des logiciels libres


GNU (compilateurs, …). Le code source de Linux passe
sous licence GPL.

„ 1991-1994, développement « anarchique » de Linux qui


devient progressivement un système Unix complet.

-4-
Historique de Linux

„ 1995, explosion d'Internet:


… Etend la communauté de développeurs.
… Système souvent choisi par les FAI pour ses qualités de
robustesse et de performances.
… Apparition de sociétés privées (RedHat, Caldera, …).

„ 1996, l'année du décollage:


… Certains logiciels sont portés sous Linux (Netscape, Corel).
… Début de la médiatisation

-5-
Historique de Linux

„ Depuis 1997
… Oracle et Sun adopte Linux
… Linux se répand dans les milieux scientifiques et
professionnels spécialisés.
… De grands comptes déploient Linux (France
Telecom, Cisco, …)
… Linux est une alternative sérieuse au système
Windows dans le domaine des serveurs.
… Certains acteurs de Linux sont côtés en bourse
(RedHat, VA Linux).

-6-
Qu'est-ce que Linux ?

„ Linux est un système d’exploitation UNIX conforme à la


norme POSIX.

„ Linux est un logiciel libre développé de manière


collaborative par des milliers de programmeurs (parfois
bénévolement) répartis dans le monde.

„ Linux est indépendant des politiques commerciales.

-7-
Comment se procurer Linux ?

„ Par téléchargement sur les sites des éditeurs.

„ Beaucoup d’éditeurs: RedHat, Mandrake, Suse,


SlackWare, Caldera, Debian, …

„ Par l’acquisition de CD d’installation (achat,


échange, fournis avec livres,…).

-8-
Utilisation de Linux

„ Serveur de fichiers et d’impression (support de NFS pour les clients UNIX,


SMB pour les clients Windows et AppleShare pour les clients MacOS).

„ Serveur Internet/Intranet.

„ Serveur d’applications client/serveur bâti sur des gestionnaire de base de


données.

„ Station de développement (beaucoup d’outils sont sous forme de logiciels


libres).

„ Station bureautique (environnements graphiques de qualité et suite


bureautique sous forme de logiciels libres).

„ Etc.

-9-
Besoin matériel pour Linux

„ Linux n’échappe pas à l’inflation de besoin matériel.

„ Un noyau 1.0 pouvait tourner avec 8 Mo de RAM et un


processeur peu puissant.

„ Aujourd’hui une distribution moderne nécessite:


„ RAM de 64 Mo (128 Mo recommandé)
„ Disque de 100 Mo (1 Go recommandé)

- 10 -
Le noyau

„ Au sens propre, le coeur de linux, constitué d'une


structure monolithique et de modules.

„ En charge de la gestion des ressources; il fonctionne en


mode privilégié.

„ Le noyau est téléchargeable sur http://www.kernel.org

„ Les numérotations sont sous la forme x.y.z; par


exemple 2.4.22 (pour connaître la version du noyau
utilisée: uname -a)

- 11 -
Les distributions

„ Linux = le noyau

„ La distribution = tout le reste (shell, compilateurs,


éditeurs, outils, jeux, ...)

„ Beaucoup de distributions existantes:


… Non commerciale (par exemple debian)
… Commerciale (RedHat, Mandrake, Suse, ...).
… Distributions spécialisées (par exemple tout un unix sur un
cdrom).

- 12 -
Connexion au
système
- 13 -
Identification d'un utilisateur

„ Sous Unix, l'identification repose sur un "login"


authentifié par un mot de passe.

„ Unix est un système multi utilisateurs, chaque personne


doit donc être clairement identifiée ainsi que les
permissions qui lui seront associées.

„ Les permissions seront fonction de l'identifiant ainsi que


du groupe d'appartenance.

- 14 -
Connexion au système

- 15 -
Présentation de kde

„ KDE ("Kool" ou "Kommon" Desktop Environment) est un bureau graphique basé sur X-Window.

„ La 1ère version du KDE a été opérationnelle en juillet 1998.

„ Il existe d'autres alternatives de bureaux graphiques comme GNOME (Gnu Network Object Model
Environment) démarré en 1997.

„ Les bureaux graphiques se sont largement inspiré de l'interface de Microsoft Windows.

„ Le KDE propose:
… Un bureau (Desktop).
… Une barre de tâches (tableau de bord, commande"kicker").
… Un gestionnaire de fichiers (commande "konqueror").
… Un gestionnaire de configuration (commande "kcontrol").

„ konqueror permet une gestion de fichiers plus convivial que les lignes de commandes et peut être
également utilisé comme navigateur internet.

- 16 -
Présentation
de KDE

- 17 -
Présentation de KDE

contenu du bureau

raccourcis bureaux fenêtres actives tableau de bord


applications virtuels
- 18 -
Centre de contrôle de KDE

- 19 -
Utilisation des lignes de commandes

„ Les commandes en ligne peuvent être tapées dans l'outil "Terminal" (souvent dans l'option
"Outils Systèmes").

- 20 -
Les commandes de base

„ Les commandes permettent de gérer les fichiers et répertoires, de gérer ses processus, …

„ Les commandes systèmes sont en minuscules (les systèmes Unix différencient les
minuscules des majuscules).

„ Changement du mot de passe: passwd

„ La forme générale d'une commande est:


cmd -option1-option2 -… argument1 argument2 …

„ Exemple:
ls –a –l –R /home/martin (ou ls –alR /home/martin)

„ Les systèmes Linux autorise des libellés d'options longs. Dans ce cas, l'option est
précédée par - -
… Exemple: ls --help

- 21 -
Les fichiers et
les
répertoires
- 22 -
La hiérarchie de l'espace disque

„ Les fichiers sont stockés dans une hiérarchie de


répertoires et de sous répertoires.

„ Le répertoire racine est noté: /

„ Indépendamment du nombre de disques ou de


périphériques (cd-rom, clé usb, …), il n'y a qu'une seule
racine (différent de Windows).

„ L'arborescence des autres périphériques sera accrochée


(montée) à un sous répertoire vide existant.

- 23 -
Présentation de l'arborescence
/ Racine du système
/bin /usr/bin /usr/local/bin Commandes du système
/boot Contient les fichiers noyaux de linux
/dev Contient les fichiers périphériques
/etc Contient les fichiers de configurations et de
démarrage du système
/home Contient les répertoires personnels des utilisateurs
/lib /usr/lib /usr/local/lib Contient les bibliothèques de développement
/mnt Répertoire de montage des périphériques amovibles
(cd-rom, disquettes, clé usb, …)
/root Répertoire personnel de l'administrateur
/tmp Contient tous les fichiers temporaires
/usr Répertoire principal des systèmes unix
(bibliothèques, manuels, etc.)
/var Partie "variable" du système (traces d'activités, spool
d'impression, boîtes à lettres, …)

- 24 -
Montage de disques

- 25 -
Les chemins

„ Pour copier, déplacer, détruire des fichiers il faut


connaître:
… Les commandes de gestion de fichiers.
… Le chemin d'accès aux fichiers.

„ Le chemin d'accès aux fichiers peut être:


… absolu (indépendant du répertoire dans lequel on se
trouve).
… relatif (dépendant du répertoire dans lequel on se
trouve).

- 26 -
Le chemin absolu

„ Le chemin absolu est constitué de la suite des noms de répertoires


nécessaires pour atteindre le fichier à partir de la racine.

„ Exemples:

Répertoire personnel de l'utilisateur /home/martin


"martin"

Fichier "exemple" dans le répertoire de /home/martin/exemple


"martin"

Répertoire des fichiers temporaires /tmp

Copie d'un fichier cp /home/martin/exemple /tmp/exemple

- 27 -
Le chemin relatif

„ Pour le chemin relatif, on tient compte du répertoire de travail (répertoire


courant).

„ Exemples:
cp exemple /tmp/exemple

„ Trois noms de répertoires particuliers:


… Le répertoire . désigne le répertoire de travail.
… Le répertoire .. désigne le répertoire père.
… Le répertoire ~ désigne le répertoire personnel

„ Exemple:
cp ../martin/exemple exemple

- 28 -
Exemples chemins relatif/chemins
absolus
„ Le répertoire de travail est /home/martin

Chemin relatif Chemin absolu

exemple /home/martin/exemple

./exemple /home/martin/exemple

essai/liste.txt /home/martin/essai/liste.txt

. /home/martin

.. /home

../../tmp /tmp

- 29 -
Commandes usuelles de gestion de
fichiers et de répertoires

Action Fichier Répertoire

Afficher le contenu cat more tail head ls

Copier cp cp -r

Changer de nom ou déplacer mv mv

Se déplacer dans l'arborescence cd

Créer un répertoire mkdir

Détruire rm rmdir rm -r

Afficher le répertoire de travail pwd

- 30 -
Les liens

„ Il est possible de définir un autre chemin


d'accès à une opération en créant des
liens.

„ Il existe 2 types de liens:


… lien "dur" (hard link)
… lien symbolique

- 31 -
Lien "dur"
home

dp pierre

fichier

„ Commandes exécutées dans /home/pierre


$ ln /home/dp/fichier monfichier
$ ll /home/pierre
-rw-r--r-- 2 root root 30 fév 1 14:32 monfichier
$ ll /home/dp
-rw-r--r-- 2 root root 30 fév 1 14:32 fichier

- 32 -
Remarques sur les liens "durs"

„ Pas de liens durs sur les répertoires

„ Pas de liens durs inter volumes

„ Détruire un fichier consiste à décrémenter le nombre de


liens. Le fichier est effectivement effacé lorsque le
nombre de liens est égal à zéro.

- 33 -
Lien symbolique

home

dp pierre

fichier LienSurFichier

„ Commandes exécutées dans /home/pierre:


$ ln -s /home/dp/fichier LienSurFichier
$ ll /home/pierre
lrwxrwxrwx 1 pierre pierre 16 fév 1 15:00 LienSurFichier -> /home/dp/fichier

- 34 -
Notions
d'identifiant et
de groupe
- 35 -
Notion d'identifiant

„ Tous les identifiants sont définis dans le fichier /etc/passwd:

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nobody:x:99:99:Nobody:/:
www:x:500:501:Serveur www:/home/www:/bin/nologin
dp:x:501:234:DUCROT Patrick:/home/dp:/bin/bash
pierre:x:502:501:DUVAL Pierre:/home/duval:/bin/bash

- 36 -
Le fichier /etc/passwd

dp:x:501:234:DUCROT Patrick:/users/dp:/bin/bash

uname

mot de passe
uid

gid
gecos
homedir

login shell
- 37 -
Le fichier mots de passe

„ Le fichier /etc/passwd doit être lisible par tous. Par mesure de sécurité, les
mots de passe sont stockés dans le fichier /etc/shadow accessible au seul
administrateur:

# cat /etc/shadow
root:$1$XnR8T7M4$sA4gQkXpxehU7AO4XV7z0/:11327:0:99999:7:-1::
bin:*:10915:0:99999:7::
daemon:*:10915:0:99999:7::
adm:*:10915:0:99999:7::
lp:*:10915:0:99999:7::
shutdown:*:10915:0:99999:7::
halt:*:10915:0:99999:7::
nobody:*:10915:0:99999:7::
dp:$1$DuNQiY7n$67tnNC2dIG3Dj/HpEj3PY/:11327:0:99999:7:-1::

- 38 -
Le fichier /etc/shadow

dp:$1$DuNQiY7n$67tnNC2dIG3Dj/HpEj3PY/:11327:0:99999:7:-1::

uname Numéro du
jour depuis
mot de passe crypté le
01/01/1970
Nombre de jours écoulés à partir
depuis le 01/01/1970 duquel le
jusqu'au dernier Nombre de compte a
changement de mot de Nombre de jours avant été
passe jours après l'expiration désactivé
lequel le mot de à partir Nombre de
passe doit être duquel jours après
l'utilisateur expiration
changé
sera averti provoquant
la
fermeture
du compte

- 39 -
Notion de groupe

„ Les systèmes Unix définissent une notion de


groupe; les groupes sont stockés dans le fichier
/etc/group permettant d'associer un nom de
groupe (gname) à un numéro de groupe (gid)
ainsi que la liste de ses membres.

„ Un utilisateur appartient à un groupe principal


(défini dans le fichier /etc/passwd) et
éventuellement à des groupes secondaires.

- 40 -
Le fichier /etc/group

$ cat /etc/group
root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
nobody::99:
prof:x:234:dp
users::501:pierre,dp

gname mot de passe gid liste des membres

- 41 -
Modifications des informations d'un
utilisateur
„ Chaque utilisateur peut modifier certaines
informations le concernant:
Information modifiable Commande

Mot de passe passwd

Etat civil (gecos) chfn

Login shell chsh

L'utilisateur actif su

Le groupe actif newgrp

- 42 -
Quelques commandes

„ Connaître son uid, son gid et ses groupes secondaires grâce à la commande id:
$ id
uid=501(dp) gid=234(prof) groups=234(prof),100(users)

„ Connaître des informations sur un utilisateur:

$ finger dp
Login: dp Name: DUCROT Patrick
Directory: /home/dp Shell: /bin/bash
On since Wed Jan 26 16:22 (CET) on pts/1 25 days 15 hours idle
On since Wed Jan 26 16:22 (CET) on pts/0
No mail.
No Plan.

- 43 -
Les processus

- 44 -
Gestion des processus

„ Pour identifier les processus, le système


d'exploitation leur attribue un numéro appelé
PID (Process IDentification).

„ Chaque processus (à l'exception du tout


premier) est créé par un autre processus; le
processus père est reperé par le PPID (Parent
Process IDentification).

„ Le tout premier processus porte le numéro 1.

- 45 -
Visualisation des processus

„ Visualisation de tous les processus:

$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jan25 ? 00:00:05 init
root 2 1 0 Jan25 ? 00:00:00 [keventd]
root 3 1 0 Jan25 ? 00:00:00 [kapmd]

root 19342 19340 0 09:13 pts/0 00:00:00 -bash
root 19385 19342 0 09:14 pts/0 00:00:00 vim ex1.awk
root 19386 19340 0 09:15 pts/1 00:00:00 -bash
root 19455 2903 0 11:29 ? 00:00:00 sshd: dp [priv]
dp 19457 19455 0 11:29 ? 00:00:00 [sshd]
dp 19458 19457 2 11:29 pts/2 00:00:00 -bash
dp 19489 19458 0 11:29 pts/2 00:00:00 ps -ef

- 46 -
Interprétation dela commande ps

UID Nom de l'utilisateur qui a lancé le processus.

PID Numéro du processus

PPID Numéro du processus père

C Facteur de priorité; plus la valeur est grande, plus le processus est


prioritaire.
STIME Heure de lancement du processus

TTY Nom du terminal associé au processus

TIME Durée du traitement du processus

CMD Nom du processus

- 47 -
Gestion de processus

„ Changer la priorité d'un processus:


… nice -valeur commande
… Exemple: nice -5 ps -ef
„ Envoyer un signal à un processus:
… kill -n PID
… Exemple: kill -9 19458
„ Stopper un processus en avant plan:
… Touches clavier: Ctrl C
„ Suspendre un processus en avant plan:
… Touches clavier: Ctrl Z
„ Reprendre l'exécution d'un processus suspendu:
… En avant plan: fg
… En arrière plan: bg
„ Lancer un processus en arrière plan
… commande &

- 48 -
Les droits
d'accès
- 49 -
Les droits d'accès

„ Tout système multi utilisateurs définit une


politique de protection des fichiers fondée
sur l'identification de l'utilisateur.

„ Chaque utilisateur dispose d'un espace


privé dont il est propriétaire et sur lequel il
possède le contrôle total.

- 50 -
Permissions d'accès aux fichiers

„ Tout fichier appartient à un utilisateur (son propriétaire) et à un


groupe. Quand il est créé, le propriétaire et le groupe sont l'uid et le
gid actifs au moment de la création.

„ Les droits d'accès sont scindés en trois catégories d'utilisateurs:


… les droits du propriétaire (user)
… les droits des membres du groupe (group)
… les droits de tous les autres (other)

„ Pour chaque catégorie, on peut attribuer les droits suivants:


… lecture (read)
… écriture (write)
… exécution (execute)

- 51 -
Exemple d'affichage de droits

$ ll
total 28
drwxrwx--- 7 bret users 1024 Sep 10 2002 bret
drwx--x--x 14 dams irc 2048 Jul 19 2001 dams
drwx------ 8 dcr irc 1024 Nov 11 2001 dcr
drwx--x--x 130 dp users 10240 Jan 5 17:28 dp
-rw-r--r-- 1 root root 10240 Jan 20 2003 hping2.tar
drwx------ 5 kortex irc 1024 Dec 14 2001 kortex
drwx------ 7 mbuna irc 1024 Feb 28 2002 mbuna
drwx--x--x 19 mdx irc 2048 Nov 8 19:19 mdx

droits groupe taille en


type droits des
de Nombre de octets date et heure de
propriétaire autres liens (hard
fichier (u) (o) dernière
link) propriétaire modification
droits des nom du fichier
membres
du groupe
(g) - 52 -
Interprétation des droits

Fichier Répertoire

r Visualisation du Possibilité de lister le


contenu du fichier contenu du répertoire

w Modification du Possibilité de créer et de


contenu du fichier détruire des fichiers

x Exécution possible Permet de traverser le


du fichier répertoire pour atteindre un
fichier

- 53 -
Le changement des droits

„ chmod –options droits fichier(s)


„ Notation symbolique des droits:
u r
g w
o + x
ug - rw
uo = rx
go wx
ugo rwx
a
- 54 -
chmod: notation symbolique

„ Exemples:
chmod g-r exemple
chmod –R g-x test
chmod u+w ess*
chmod go+r-x test
chmod a=r exemple

- 55 -
chmod: notation octale

droits binaire octal


--- 000 0
rwx r-x r--
--x 001 1
-w- 010 2 111 101 100
-wx 011 3
7 5 4
r-- 100 4
r-x 101 5 Exemples:
rw- 110 6 chmod 754 exemple
rwx 111 7 chmod 700 exemple

- 56 -
Le changement de propriétaire

„ chown –options proprietaire:groupe fichier(s)

„ Exemples:
chown pierre exemple
chown pierre:prof exemple
chown pierre *
chown –R pierre *

„ Qui peut utiliser la commande chown ?

- 57 -
Le changement de groupe

„ chgrp –options groupe fichier(s)

„ Exemple:

chgrp prof test


chgrp prof *
chgrp –R prof *

- 58 -
Les droits spéciaux

„ Les droits sont représentés par 4 octets: sst rwx rwx rwx
„ Le SUID bit (Set User ID bit ou bit s)
r-s --x --x root user prog
chmod u+s prog
chmod 4511 prog

„ Le SGID bit (Set Group ID bit)


rwx -s r-x adm mail pine

„ Le sticky bit
rwxrwxrwt root root /tmp

- 59 -
Le shell

- 60 -
Les shells sous unix

„ Au démarrage d'une session, un utilisateur peut taper et faire exécuter des


commandes lignes grâce à un shell.

„ Le shell est à la fois un interpréteur de commandes (avec possibilité de gérer des


historiques de commandes, la complétion des commandes, …) mais est également
un langage de commandes.

„ Les shells standards


… Bourne Shell (/bin/sh)
… C-Shell (/bin/csh)
… Korn Shell (/bin/ksh)
… Bourne Again Shell (/bin/bash)
… et bien d'autres …

„ On peut trouver une liste des shells autorisés sur une machine dans le fichier
/etc/shells

- 61 -
Changement de shell

„ Changement dynamique et temporaire:


$ bash # empilement un bash
$ csh # empilement d'un csh
$ sh # empilement d'un sh

„ Changement permanent:
$ chsh -s /bin/sh dp # Changement dans le fichier /etc/passwd

- 62 -
Gestion des entrées/sorties

„ A chaque commande est associée un


canal d'entrée et deux canaux de sortie.

stdout 1

stdin 0
commande

stderr 2

Par défaut: 0 = clavier 1 et 2 = écran

- 63 -
Redirection des entrées/sorties

„ L'opérateur > redirige la sortie standard.


ll > liste.txt

„ L'opérateur >> redirige la sortie standard en ajout.


ll >> liste.txt

„ L'opérateur < redirige l'entrée standard.


wc < liste.txt

„ L'opérateur 2> redirige la sortie d'erreur standard.


gcc exemple.c 2> erreurs.txt

- 64 -
Enchaînement des commandes

stdout stdin
commande1 commande2

„ L'opérateur | permet d'enchaîner les commandes: commande1 | commande2

„ Exemples:
ls | wc
ll | more

- 65 -
La commande tee

„ La commande tee fonctionne comme un "T": elle lit son


flux d'entrée standard et l'envoie sur sa sortie standard
et sur le fichier transmis en argument.

„ Syntaxe: tee -options fichier(s)

„ Exemple:
ll | tee /tmp/liste.txt

- 66 -
La commande grep

„ La commande grep filtre un flux de texte pour ne laisser passer que les
lignes contenant un critère de filtrage spécifié.

„ Syntaxe: grep -options critère fichier(s)

„ Exemples:
… grep "soleil" liste.txt
… ll | grep "exemple"

„ Exemple d'option: -v affiche les lignes ne répondant pas au critère.

„ Le critère peut utiliser les expressions régulières.

- 67 -
Les expressions régulières

„ . : correspond à un caractère, quelqu'il soit, sauf le retour chariot ;


„ * : n'importe quel nombre d'occurences du caractère précédent l'astérisque ;
„ [...] : correspond à un caractère de l'ensemble des caractères spécifiés entre crochets. Si un
caractère ^ est présent en première position à l'intérieur des crochets, alors il y a concordance
avec n'importe quel caractère sauf le retour chariot et les caractères entre crochets. Un tiret peut
être utilisé pour définir un intervalle de caractères.
„ ^ : en première position d'une expression : début de ligne ;
„ $ : en dernière position d'une expression : fin de ligne ;
„ \{n,m\} : un certain nombre de répétition du caractère qui précède immédiatement.
… \{n\} : exactement n occurrences
… \{n,\} : au moins n occurrences ;
… \{n,m\} : entre n et m occurrences ;
„ \ : protection du caractère qui suit, pour spécifier un méta-caractère comme caractère;
„ + : une occurrence ou plus de l'expression régulière ;
„ ? : zéro ou une occurrence de l'expression régulière ;
„ | : correspond soit à l'expression qui précède, soit à celle qui suit.
„ () : permet de regrouper des expressions régulières ;

- 68 -
Exemples d'expressions régulières

„ a* : rien, a, aa, aaa, aaaa, ...(nombre infini de a)


„ a(ab)+ : aab, aabab, aababab, ...
„ [a-d] : a,b,c,d
„ [a-c]-[1-3] : a,b,c,1,2,3
„ ^a(1de)+ : une ligne qui commence par a1de ou a1de1de, ...
„ abde$ : une ligne qui se termine par abde
„ toto\.txt : toto.txt
„ ab.d : abad, abbd, abcd, abdd, ...
„ [1-31]/[1-12]/[0-2000] : une date (1ère méthode)... 11/10/1972
„ ([1-9] | ( [1-2] [0-9] | [ 30 31] ) ) / ( [1-9] | [ 10-12 ] ) / [0-2000] : 2nde
méthode ... toujours 11/10/1972
„ [lL]iberté : liberté, Liberté
„ [pP]age [12-99] : page 12, Page 12, ..., page 99, Page 99

- 69 -
grep et les expressions régulières

„ Exemples:
… grep "[a-zA-Z]" exemple
… grep "^martin" exemple
… grep "martin$" exemple
… grep "dupon." exemple
… grep "dupont|durand" exemple

- 70 -
La commande cut

„ Cette commande permet de découper un fichier en


plusieurs champs.

„ Syntaxe: cut -options fichier(s)

„ Exemples d'options:
… -d définition du délimiteur de champ
… -f indique la liste des champs (par numéro) à afficher

„ Exemple:
… cut -d":" -f1,5 /etc/passwd

- 71 -
La commande split

„ Cette commande permet de découper un


fichier en plusieurs morceaux.

„ Syntaxe: split -n fichier fichiers_resultat

„ Exemple: split -10 exemple petitfichiers


Cette exemple va créer les fichiers petitfichiersaa, petitfichiersab, …
contenant le contenu du fichier exemple par tranche de 10 lignes.

- 72 -
La commande paste

„ Cette commande permet la fusion horizontale de lignes


de fichiers.

„ Syntaxe: paste -options fichier(s)

„ Quelques options:
… -d définition du séparateur
… -s regrouper toutes les lignes d'un seul fichier à la fois
plutôt qu'une ligne de chaque fichier.

„ Exemple: paste -d: /tmp/pass2 /tmp/pass1

- 73 -
La commande comm

„ La commande comm permet d'extraire les lignes communes et les lignes


uniques de 2 fichiers préalablement triés.

„ Syntaxe: comm [-123] fichier1 fichier2


„ Exemple:

fichier carnet1 fichier carnet2


marcel:13:0466342233:Marseille marcel:13:0466342233:Marseille
maurice:29:0298334432:Crozon myriam:30:0434214452:Nimes
robert:75:0144234452:Paris olivier:29:0298333242:Brest

$ comm -12 carnet1 carnet2


marcel:13:0466342233:Marseille

- 74 -
La commande sort

„ Cette commande permet d'afficher les lignes d'un fichier triées.

„ Syntaxe: sort -options fichier

„ Quelques options:
… -n le tri est numérique
… -r l'ordre de tri est inversé
… -f le tri ne différencie pas majuscules et minuscules
… -t définit le caractère séparateur
… -u n'affiche qu'une seule ligne quand plusieurs lignes sont identiques
… -k indique la position de la clé de tri (numéro à partir de 1)

„ Exemple:
… sort -n -t":" -k 3 /etc/passwd

- 75 -
La commande diff

„ Cette commande permet de rechercher des différences entre 2 fichiers.

„ Syntaxe: diff -options fichier1 fichier2

„ Exemples d'options:
… -b ne pas tenir compte des différences concernant des espaces blancs
… -B ne pas tenir compte des différences concernant des lignes blanches

„ Exemple:
$ diff carnet1 carnet2
2,3c2,3
< maurice:29:0298334432:Crozon
< robert:75:0144234452:Paris
---
> myriam:30:0434214452:Nimes
> olivier:29:0298333242:Brest

- 76 -
La commande wc

„ Cette commande permet de compter le nombre de lignes/mots/caractères


d'un fichier.

„ Syntaxe: wc -options fichier(s)

„ Exemples d'options:
… -c affiche uniquement le nombre de caractères.
… -w affiche uniquement le nombre de mots.
… -l affiche uniquement le nombre de lignes.

„ Exemple:
$ wc carnet1 carnet2
3 3 87 carnet1
3 3 86 carnet2
6 6 173 total

- 77 -
La commande find

„ La commande find permet de retrouver des fichiers à partir d'un critère donné.

„ Syntaxe: find repertoire_depart critères

„ Exemples de critère:
-name recherche sur le nom du fichier,
-perm recherche sur les droits d'accès du fichier,
-links recherche sur le nombre de liens du fichier,
-user recherche sur le propriétaire du fichier,
-group recherche sur le groupe auquel appartient le fichier,
-type recherche sur le type (d=répertoire, c=caractère, f=fichier normal),
-size recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets),
-atime recherche par date de dernier accès en lecture du fichier,
-mtime recherche par date de dernière modification du fichier,
-ctime recherche par date de création du fichier.

„ Exemples:
find / -mtime 3 -print
find / -size 2000 -print
find / -type f -user olivier -perm 755 -print
find . -type f -print | xargs grep toto

- 78 -
La commande sed

„ Stream EDitor
„ La commande sed lit l'entrée standard (ou le fichier
fourni en paramètre), exécute un ensemble de
commandes d'édition et affiche le résultat sur la sortie
standard.
„ Invocation usuelle de la commande:
sed –e 'commande1' –e 'commande2' …. fichier

stdin sed stdout

- 79 -
sed: commande de substitution de
chaîne

„ Format complet de la commande:


… [adresse1[,adresse2]]s/ancienne/nouvelle/[flags]

les flags peuvent être:


„ n remplace l'instance numéro n
„ g remplace toutes les instances
„ p affiche les instances remplacées sur stdout
„ w fichier affiche les instances remplacées dans le fichier spécifié.
„ Exemples:
… sed –e 's/soleil/lune/g' fichier
… sed –e '1,2s/soleil/lune/1' –e 's/lune/mars/g' fichier

- 80 -
sed: commande de substitution de
chaîne
„ D'autres caractères comme @%,;: peuvent également être utilisés comme
délimiteurs.
… Exemple:
$ cat url
http://www.ismra.fr
$ sed -e's@http://www.ismra.fr@http://www.ensicaen.fr@' url
http://www.ensicaen.fr
„ Le champ "adresse" peut être remplacé par une expression régulière:
… Exemple:
$ cat animaux
Le chat blanc restera blanc toute sa vie
mais le chien blanc deviendra noir
$ sed -e '/chat/s/blanc/noir/g' animaux
Le chat noir restera noir toute sa vie
mais le chien blanc deviendra noir

- 81 -
sed: commande de suppression

„ Format complet de la commande:


… [adresse1[,adresse2]]d

„ Exemple 1:
sed –e '2d' fichier

„ Exemple 2:
$ cat lignes
ligne 1 (un)
a ligne 2 (deux)
ligne 3 (trois)
$ sed -e '/^ligne/s/ligne/LIGNE/g' -e '/ligne/d' lignes
LIGNE 1 (un)
LIGNE 3 (trois)

- 82 -
sed: commande de suppression

„ Exemple 3:
$ cat delimiteurs
Bonjour Monsieur
Comment allez-vous ?
Au revoir
Cette ligne ne sera pas detruite
bonjour madame
comment allez-vous ?
$ sed -e '/[bB]onjour/,/revoir/d' delimiteurs
Cette ligne ne sera pas detruite

- 83 -
sed: insertion et modification

„ Format complet de la commande:


… [adresse]commande\
… où commande peut être:
„ a ajout (après)
„ i insertion (avant)
„ c modification d'une ligne
„ Exemples:

$ cat cde
ligne 1
ligne 2
ligne 3
$ sed 'a\test' cde
ligne 1
test
ligne 2
test
ligne 3
test

- 84 -
sed: insertion et modification

„ Suite exemples:
$ sed '2a\test' cde
ligne 1
ligne 2
test
ligne 3

$ sed 'i\test' cde


test
ligne 1
test
ligne 2
test
ligne 3

$ sed '/ligne 2/c\toto' cde


ligne 1
toto
ligne 3

- 85 -
La commande awk

„ Le nom awk provient de la contraction du nom de ses auteurs: Aho, Weinberger et Kernighan.

„ awk permet d'effectuer un traitement sur chaque ligne d'un flux de données. Une ligne peut être
décomposée en champs (le délimiteur de champs est paramétrable).

„ Le paramètre $0 désigne la ligne entière, $i désigne le ième champ de la ligne.

„ Syntaxe: awk [-F] [-v var=valeur] 'programme' fichier


awk [-F] [-v var=valeur] -f fichier-config fichier

„ awk dispose de son propre langage de programmation comportant quelques similitudes avec le
langage C (mêmes opérateurs booléens, …).

„ Exemples:

awk '{ print $1 ;}' fichier


awk -F":" '{ print $5 ;}' /etc/passwd
ps -ef | awk '{ print $2 ;}'

- 86 -
Structure d'un programme awk

„ Un programme awk est composé de 3 parties:

… Une clause "BEGIN" exécutée dès le lancement du


programme et avant de traiter le flux de données.

… Une clause "END" exécutée avant la fin du


programme et après le traitement du flux de données.

… Le corps du programme traitant le flux de données.

- 87 -
Exemple de programme awk

Fichier ex1.awk:

BEGIN {
toto = 0 ;
}

/toto/ {
toto += 1 ;
}

END {
print toto ;
}

Exécution:

$ awk -f ex1.awk fichier

- 88 -
Quelques variables systèmes utilisées
par awk
Nom variable Rôle de la variable

FS Séparateur de champs lors de la lecture de données.

OFS Séparateur de champs pour l'affichage.

NF Nombre de champs dans l'enregistrement courant.

ORS Séparateur d'enregistrements pour l'affichage.

NR Numéro de l'enregistrement courant.

FILENAME Nom du fichier de données.

FNR Numéro de l'enregistrement courant par rapport au fichier utilisé (lorsqu'on


traite plusieurs fichiers en même temps).

- 89 -
awk: Quelques éléments de syntaxe

„ Les opérateurs relationnels:


< <= == != >= >

„ Enchaînement de critères:
… "et logique": &&
… "ou logique": ||
… négation: !

„ Les tableaux:
… Ils n'ont pas besoin d'être ni déclarés, ni alloués et sont utilisables sous
la forme tableau[index]=valeur. Les éléments initiaux d'un tableau sont
soit la chaîne vide, soit zéro. La variable index n'est pas
nécessairement numérique (tableaux associatifs).
… Un exemple sera présenté plus loin.

- 90 -
Le langage awk

„ La structure conditionnelle:
if (expression)
{
instructions
}
else
{
instructions
}

„ Exemple: fichier exemple.awk:


{
if ( $5 != "")
{
print $1," ",$5 ;
}
}
awk -F: -f exemple.awk /etc/passwd

- 91 -
Le langage awk

„ La structure répétitive:

for (initialisation ; test ; incrémentation)


{
instructions
}

„ Exemple:
{
for ( i = 1 ; i <= 3 ; i++ )
{
print $i ;
}
}

- 92 -
Le langage awk

„ La structure itérative:

while (expression) do {
{ instructions ;
instructions } while (expression) ;
}

„ Exemple:
{
i=1
while (i <= 3)
{
print $i
i++
}
}

- 93 -
Exemple awk
Fichier à traiter: Fichier tableau.awk

$ cat carnet BEGIN {


nb = 0 ;
marcel:13:0466342233:Marseille
}
maurice:29:0298334432:Crozon {
robert:75:0144234452:Paris count [$1] += 1 ;
maurice:30:0298334432:Caen if (count [$1] == 1)
{
key [nb] = $1 ;
nb += 1 ;
Commande invoquée:
}
$ awk -F":" -f tableau.awk carnet }
END {
Résultat: for (i = 0 ; i != nb ; i++)
marcel : 1 {
maurice : 2 print key [i],": ",count [ key [i] ] ;
}
robert : 1
}

- 94 -
Les scripts shells

- 95 -
Les scripts shells

„ Le shell peut être utilisé pour exécuter des commandes contenues dans un fichier texte.

„ Les scripts peuvent être créés avec un éditeur de texte.

„ Il est conseillé de positionner le droit d'exécution sur les fichiers scripts.

„ Il est également conseillé de préciser sur la 1ère ligne du script sous quel shell les commandes
doivent être exécutées.
… Syntaxe: #!/bin/sh

„ La syntaxe étudiée ici pour les scripts shell sera celle du shell de Bourne (/bin/sh).

„ L'exécution d'un shell script se fait:


… en tapant son nom (si le script dispose du droit x); exemple: script
… en préfixant par le nom du shell; exemple: sh script
… en préfixant par . ; exemple: . script

- 96 -
Les variables shell

„ Une variable est identifiée par un nom commençant par une lettre et pouvant comporter lettres, chiffres et
"underscore".

„ Exemples:
… user="pierre"
… echo $user

„ Variables prédéfinies:
… $# contient le nombre de paramètres passés;
… $0 contient le nom du script lui même;
… $1 à $9 contient les neufs premiers paramètres; s'il y en a plus de neuf, il faut utiliser la commande shift qui décale sur
la droite les arguments : $1 reçoit $2, ..., $9 reçoit le dixième argument;
… $* contient les n paramètres passés en 1 chaîne de caractères;
… $? Valeur de status de la dernière commande utilisée
… $$ Valeur du numéro de processus courant

„ Une variable peut être initialisée par le résultat d'une commande:


$ jour=`date`
$ echo $jour

„ Les variables sont locales (sauf si le script est invoqué par la commande . script)

- 97 -
Variables d'environnement

„ Certaines variables sont initialisées à la connexion et font partie de l'environnement


du shell.
„ Exemples:

HOME Contient le nom du répertoire de connexion

PATH Définit les chemins de recherche des commandes

PS1 Définit l'invite de commandes

TERM Définit le type de terminal alphanumérique ou de fenêtre


terminal utilisé

DISPLAY Définit le périphérique à utiliser pour l'affichage graphique

„ Le nom des variables d'environnement est traditionnellement en majuscule.


„ Les variables d'environnement doivent être exportées (commande export).

- 98 -
Les commandes d'entrée/sortie

„ La commande echo permet d'afficher une chaîne de caractères ou


le contenu de variables sur la sortie standard.

… Exemple:
echo "La variable vaut $nom"

„ La commande read permet de lire une ligne de caractères à partir


de l'entrée standard et place les différents mots dans les variables
transmises en argument.

… Exemple:
echo -n "Saisissez votre nom prenom et age: "
read nom prenom age
echo $nom $prenom $age

- 99 -
La commande test ou [ ]

„ Cette commande permet de tester l'existence et le status d'un


fichier.

„ Test de fichier:
test -r fichier Vrai si le fichier existe et possède un droit en lecture pour
l'utilisateur
test -w fichier idem en écriture

test -x fichier idem en exécution

test -s fichier Vrai si la taille du fichier est supérieure à 0

test -d fichier Vrai si le fichier est un répertoire

test -f fichier Vrai si le fichier est un fichier ordinaire

- 100 -
La commande test

„ test de chaînes de caractères

test -z s1 Vrai si la chaîne s1 est de taille nulle


test -n s1 Vrai si la chaîne s1 est de taille non nulle

test s1 = s2 Vrai si s1 est identique à s2


test s1 != s2 Vrai si s1 est différent de s2
test s1 Vrai si s1 n'est pas la chaîne nulle

„ Ces tests peuvent être combinés:


! négation logique
-a et logique
-o ou logique

„ Exemple:
test -r essai -a -s essai

- 101 -
La structure if-then-else
„ Syntaxe:
if liste de commandes
then liste de commandes
else liste de commandes
fi
„ Remarques:
… La liste de commandes dans la clause if est une suite de commandes séparées
par des ; et interprétées de gauche à droite. La valeur de l'expression est celle
retournée par la dernière commande.
… La clause else est facultative

„ Exemples:
#!/bin/sh #!/bin/sh
if test ! -r $HOME/.signature if cmp -s $1 $2
then then echo $1 et $2 sont identiques
echo "Impossible de lire le fichier else echo $1 et $2 sont differents
signature" fi
exit 1
fi
- 102 -
La structure while

„ Syntaxe:

while liste de commandes


do
liste de commandes
done

„ Exemple:

#!/bin/sh
while test $# != 0
do
echo $*
shift
done

- 103 -
La structure for

„ Syntaxe:

for nom in liste


do
liste de commandes
done

„ Exemple:

for i in fichier.c test.awk


do
lp $i
done

- 104 -
Le branchement multiple case

„ Syntaxe:

case mot in
pattern1) liste de commandes ;;
pattern2) liste de commandes ;;

esac

„ Exemple:

case $1 in
*.c) echo fichier en langage C
*.java) echo fichier en langage java
*.awk) echo fichier de commande awk
*) echo fichier non reconnu
esac

- 105 -
Exécution conditionnelle de
commandes
„ Il est possible d'enchaîner conditionnellement l'exécution de
commandes grâce aux opérateurs:
… && (and-if)
cmd1 && cmd2
cmd2 n'est exécuté que si cmd1 a renvoyé un code = 0 (cas de succès).
… || (or-if)
cmd1 || cmd2
Si cmd1 renvoie un code différent de 0 (cas d'échec) alors cmd2 est exécuté.

„ Exemples:
grep toto /etc/passwd || echo toto non trouve
grep dp /etc/passwd > /dev/null && echo dp existe

- 106 -
Les fonctions

„ Syntaxe: function name () { commandes ; }

„ Une fonction est appelée par son nom, comme une commande normale. La valeur de
retour est le code de retour de la dernière commande exécutée dans la fonction.

„ Exemple:

#!/bin/sh
function AfficheEnv ()
{
echo "Valeurs des variables d'environnement" ;
env
}

AfficheEnv

- 107 -
Gestion des signaux

„ Un script doit savoir gérer les interruptions pour laisser le système dans un état stable et
cohérent.

„ La fonction trap permet de détourner les signaux.

„ Syntaxe: trap 'commandes du shell' numéro du signal.

„ Exemple:

#!/bin/sh
function GestionInterruption ()
{
echo "Commande interrompue"
rm /tmp/fichier_temporaire
exit 1
}

trap 'GestionInterruption' 2
… reste du script ….

- 108 -
Les sauvegardes

- 109 -
La commande tar

„ La commande tar permet de gérer des archives (sur bande, sur des fichiers,
…).

„ Syntaxe: tar clés archives fichier(s)

„ Exemples de clé:
„ c création
„ t visualisation (tape of content)
„ x extraction
„ v mode verbeux
„ f désignation du support d'archive
„ z archive compressée au format gzip
„ j archive conpressée au format gzip2

- 110 -
Exemples d'utilisation de la commande
tar
„ tar cvf /dev/st0 /home

„ tar tvf /dev/st0

„ tar xvf /dev/st0 /home/dp

„ tar cvzf dp.tar.gz /home/dp

„ tar xzvf dp.tar.gz

- 111 -
Automatisation
de tâches
- 112 -
Automatisation de tâches

„ Effectuer de tâches à des temps différés:


… De manière répétitive (commande crontab)
… Ponctuellement (commande at)

„ Ces tâches peuvent de toute nature


(sauvegarde, contrôle d'intégrité, ...) et
sont souvent décrites dans des scripts
shell.

- 113 -
Ecriture d'une crontab

„ L'utilisateur doit écrire une "crontab" pour décrire les tâches qu'il
souhaite automatiser.

„ Le format d'une "crontab" est une commande par ligne; une ligne
est composée de:
minute heure jour_mois mois jour_semaine commande
minute: 0-59
heure: 0-23
jour_mois: 1-31
mois: 1-12
jour_semaine: 0-6 (0 = dimanche)
commande ou script à exécuter

- 114 -
Manipulation d'une crontab

„ Exemple de crontab:
0 3* * * /usr/manage/clean
0 5* * * /usr/manage/save

„ Enregistrement de la crontab (dans le répertoire /var/spool/cron si


l'administrateur a autorisé l'utilisateur en effectuant les modifications
nécessaires dans les fichiers: /etc/cron.allow et cron.deny):
crontab fichier

„ Visualisation de la crontab
crontab -l

„ Destruction de la crontab
crontab -r

- 115 -
La commande at

„ Cette commande permet d'exécuter une tâche à une


date et heure précisées.

„ L'administrateur doit autoriser un utilisateur à se servir


de cette commande en effectuant les modifications
nécessaires dans les fichiers /etc/at.allow et /etc/at.deny.

„ Exemple:
$ at 1:30
Taper le nom des tâches à exécuter (1 par ligne) puis Ctrl D sur une nouvelle ligne.

- 116 -
Commandes associées à "at"

„ atq
Visualisation de ses tâches en attente ou de
toutes les tâches en attente pour
l'administrateur.

„ atrm num
Destruction d'une tâche en attente (num est le
numéro de la tâche à supprimer obtenu grâce à
la commande atq).

- 117 -