programmation unix 1 – cours n - lsis.org · examen final : droit aux notes de cm/td/tp ... v2 :...

35
Programmation Unix 1 – cours n 1 Edouard THIEL Facult´ e des Sciences Universit´ e d’Aix-Marseille (AMU) Septembre 2014 Les transparents de ce cours sont t´ el´ echargeables ici : http://pageperso.lif.univ-mrs.fr/ ~ edouard.thiel/ens/unix/ Lien court : http://j.mp/progunix [email protected] Programmation Unix 1 – cours n 1 CC BY-NC 1/35

Upload: ngotruc

Post on 10-Sep-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Programmation Unix 1 – cours n°1

Edouard THIEL

Faculte des Sciences

Universite d’Aix-Marseille (AMU)

Septembre 2014

Les transparents de ce cours sont telechargeables ici :http://pageperso.lif.univ-mrs.fr/~edouard.thiel/ens/unix/

Lien court : http://j.mp/progunix

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 1/35

Page 2: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Presentation de l’UE

◮ 5 seances C/TD/TP

◮ Pas de controle continu

◮ Examen final : droit aux notes de CM/TD/TP

◮ Contenu :◮ Langage de script bash◮ Utilisation, organisation systeme Unix

◮ Objectifs :◮ Maıtriser bash

◮ Sur la page web du cours : transparents, annales corrigees,liens, etc.

◮ Prise de notes : noter ce qui semble important, renvoyer aunumero de transparent quand beaucoup d’informations.

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 2/35

Page 3: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Plan du cours n°1

1. Systeme d’exploitation

2. Le shell

3. Commandes Unix

4. Redirections et tubes

5. Les scripts

6. Elements du langage bash

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 3/35

Page 4: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

1 - Systeme d’exploitation

Un systeme d’exploitation est un ensemble de logiciels qui

◮ prend le controle de la machine apres le boot ;

◮ partage et gere les ressources de la machine pour les autreslogiciels : processeur, memoire, disque, reseau, ecran, etc ;

◮ rend transparent les entrees-sorties pour les autres logiciels.

Unix designe une famille de SE. Quelques proprietes :

◮ Multi-utilisateur, phase d’identification, droits.

◮ Manipulation du systeme via un interpreteur de commande :un ”shell”.

◮ Unite elementaire de gestion des ressources = le fichier.

◮ Unite elementaire de gestion des traitements = le processus.

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 4/35

Page 5: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Historique Unix

1964 Projet ”Multics” de S.E. multi-tache (MIT, General Electric,Bell Labs d’AT&T)

1969 Ken Thompson et Denis Ritchie (Bell Labs) ecrivent 1 S.E.multi-tache sur un ordi. de recuperation (DEC PDP 7 de 1964)

Brian Kernigham (Bell Labs) l’appelle ”Unix” par opposition aMultics ; Multics abandonne

1970-71 V1 : Reecriture sur PDP11 (16 bits, 24K Ram, 512K DD)

Ken Thomson cree langage B (inspire de BCPL) ; reecrit Unix

1972-73 Denis Ritchie cree langage C (inspire de B)

V2 : Ken Thomson reecrit entierement Unix en C

Les sources sont fournis a : Bell ; AT& T ; Univ. Californie aBerkeley → 3 branches principales de developpement.

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 5/35

Page 6: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Branches principales de developpement Unix

Bell

AT&T

BSD

73

V3

77

1.0

81

SysIII

88

SysVR4

89

V10

90

OSF1 : Dec, HP, IBM

AT&T, Sun, HP, SGI

stop.

00

MacOSX4.4

Historique complet et documents : www.levenez.com

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 6/35

Page 7: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Normalisation

POSIX (IEEE, depuis 1988)

◮ 3 normes, 17 documents

◮ API ; commandes et utilitaires Unix ; tests de conformite

◮ documents et certifications couteux

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 7/35

Page 8: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Logiciels libres

Systemes proprietaires, et souvent tres chers

→ Emergence Logiciels Libres : Richard Stallman

◮ FSF (Free Software Foundation),

◮ Projet GNU (Gnu is Not Unix) = reecrire Unix

◮ Licences GPL, CC, etc

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 8/35

Page 9: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

GNU/Linux

Linux : Linus Torvalds

Etudiant Finlandais, etudie systeme MINIX (auteur: Tanenbaum)ecrit 1 noyau pour projet Master 1, puis appel a contribution surinternet.

0.01

94

1.0

96

2.0

01

2.4

03

2.6 3.0

99

2.2

07

2.6.20

20111991

Distributions = noyau Linux + utilitaires GNU + logiciels libres +documentation + installeur + utilitaires :

Ubuntu, Debian, Redhat, Fedora, Suse, Slackware, etc

94% Top 500 supercalculateurs, serveurs, Android, liseuses,box internet, TV, voitures, etc

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 9/35

Page 10: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

2 - Le shell

L’interpreteur de commande est tres important sous Unix.Il permet de manipuler des fichiers et des processus avec descommandes.

Lit une commande au clavier

Interprete la commande

Lit une ligne dans le script

Execute la commande

• Mode script (fichier de commandes) :

Interprete la commande

Execute la commande

• Mode interactif : dans un terminal

Affiche un prompt $

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 10/35

Page 11: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Shells Unix et langages de script

◮ Le ”Bourne-shell” : langage sh◮ cree par Steeve Bourne en 1977,◮ le plus ancien, le shell par defaut◮ syntaxe puissante mais rugueuse

◮ Le ”C-shell” : langage csh◮ syntaxe se rapprochant du C◮ pas de fonctions ; moins expressif◮ Document pourquoi preferer sh a csh

◮ Le ”Korn-shell” : langage ksh◮ sur-ensemble de sh, plus recent

◮ etc

◮ Clones libres :◮ csh → tcsh : turbo-csh◮ sh → bash : Bourne-again shell

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 11/35

Page 12: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Bash

◮ 1988 Brian Fox, pour le projet GNU

◮ devenu le shell de reference, le plus utilise (Unix libres,proprietaires, MacOSX, Cygwin).

◮ sur-ensemble de sh, incluant des possibilites de ksh et csh

Langage bash : puissant et expressif

◮ interprete, base sur les substitutions

◮ fonctions, recursivite

◮ types simples : chaınes, entiers, tableaux

◮ controle de flux : redirections, tubes

◮ execution sequentielle ou parallele

◮ permet d’augmenter le systeme.

Langage oriente commandes : la syntaxe privilegie la gestion descommandes sur les autres aspects.

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 12/35

Page 13: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

3 - Commandes Unix

Certaines commandes sont integrees a bash : les ”builtins”

echo "message" affiche le message a l’ecran

read toto lit une ligne au clavier, puis lamemorise dans la variable toto

Exemple :

$ echo "Quel est votre nom ?"

Quel est votre nom ?

$ read nom

Thiel

$ echo "Votre nom est $nom"

Votre nom est Thiel

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 13/35

Page 14: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Commandes Unix de base (1)

La plupart des commandes sont des programmes externes : aumoins 800 (dans /bin, /usr/bin, etc)

cat fichier affiche le fichiermore fichier idem + pause apres chaque ecran

ls liste le repertoire courantls rep liste le repertoire rep

cd rep change le repertoire courantcd .. va dans le repertoire parentpwd affiche le repertoire courant

mkdir rep1 cree le sous-repertoire rep1

rmdir rep1 detruit le sous-repertoire rep1 si vide

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 14/35

Page 15: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Commandes Unix de base (2)

cp f1 f2 copie fichier f1 en fichier f2cp f1 f2 ...fn rep copie les fichiers dans rep

mv f1 f2 renomme fichier f1 en fichier f2mv f1 f2 ...fn rep deplace les fichiers dans rep

rm f1 ...fn detruit les fichiers

vi f1 ouvre f1 avec editeur vi

touch f1 change date de modification de f1ou cree un fichier vide

chmod droits f1 ...fn change les droits des fichierschown propri f1 ...fn change le proprietaire des fichierschgrp groupe f1 ...fn change le groupe des fichiers

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 15/35

Page 16: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Documentation

La plupart des commandes sont documentees.

• Pour les commandes builtin : helphelp echo

• Pour les commandes externes : man ou info

man ls

info gcc

• Les commandes d’aide sont elles-memes auto-documentees :help help

man man

info info

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 16/35

Page 17: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Arguments

• La plupart des commandes ont des arguments :

ls -l -a rep affiche infos sur chaque fichier de rep

cp -f f1 f2 force copie si f2 existe deja

• Dans certaines commandes les options peuvent etre regroupees :ls -la rep

• Dans certaines commandes les options existent au format longou court :

ls --recursive --all

ls -R -a

ls -Ra

• Dans la documentation : indication des options entre [ ]

ls [option] ... [file] ...

cp [option] ... source ... directory

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 17/35

Page 18: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

4 - Redirections et tubes

• Le shell permet de rediriger facilement l’entree standard depuis 1fichier (sans que le programme appele ne le sache)

commande arguments < fichier

→ Lecture depuis fichier, ecriture a l’ecran

• De meme pour la sortie standard :

commande arguments > fichier

→ Lecture au clavier, ecriture dans fichier

• On peut combiner :

commande arguments < f1 > f2

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 18/35

Page 19: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Variantes

> cree le fichier si n’existe pas ; sinon ecrase ou echoue,selon la configuration (set -o noclobber)

>| cree ou ecrase (force)>> ajoute a la fin d’un fichier existant ou echoue (append)

0< 1> synonymes de < et >2> redirige la sortie d’erreurs

<< <<< ”here document”, vus plus loin

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 19/35

Page 20: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Tubes

• Les tubes sont des canaux de communications tres efficacesfournis par le systeme.

Ils permettent de relier la sortie d’une commande sur l’entree d’uneautre commande, via une memoire tampon geree par le systeme.

com1 arguments | com2 arguments

Ceci revient a faire (en nettement moins efficace) :

com1 arguments > tmp & & = en tache de fondcom2 arguments < tmp com1 et com2 sont doncrm -f tmp executes en parallele

• On peut combiner :

ls -l | sort -r | head -5

cat < f1 | sort -r | head -20 > f2

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 20/35

Page 21: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Filtres

Certaines commandes sont des filtres :

◮ elles lisent sur l’entree standard (le clavier par defaut)

◮ elles affichent sur la sortie standard (l’ecran par defaut)

cat (sans nom de fichier).. recopie chaque ligne tapee apres RC..

^D fin de fichier

Autres exemples de filtres : sort, uniq, tr, head, tail, cut,paste, join

→ Les filtres sont specialement concus pour etre relies par destubes

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 21/35

Page 22: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

5 - Les scripts

Script = fichier de commandes, execute par un shell

Il faut dire au systeme quel shell utiliser :premiere ligne avec mot magique #! ”shebang”

#! /chemin/interpreteur

Exemple : /bin/bash ou /bin/csh ou /usr/bin/python

Le script doit etre rendu executable : chmod +x fichier

Un script est une commande :en ecrivant des scripts on ”augmente le systeme”.

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 22/35

Page 23: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Script bash

Exemple : script hello.sh

#! /bin/bash

# Mon premier script

echo "Hello world!"

exit 0 # Le script a reussi

• Execution :

$ chmod +x hello.sh # une seule fois

$ ./hello.sh

Hello world!

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 23/35

Page 24: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Nature d’un fichier

• Commande file : reconnaıt la nature d’un fichier d’apres soncontenu ; mots magiques recenses dans /etc/magic

$ file hello.sh

hello.sh: Bourne-Again shell script, text executable

• Chercher les scripts dans le repertoire courant :

$ file * | grep script

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 24/35

Page 25: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Code de terminaison

• Lorsqu’une commande ou un script se termine, elle donne uncode de terminaison :

exit [n] en C : exit (n);

Signification : 0 succes1 . . . 255 echec

• On peut recuperer ce code avec $? :

$ ./hello.sh

Hello world!

$ echo $?

0

$ false

$ echo $?

1

$ true

$ echo $?

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 25/35

Page 26: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

6 - Elements du langage bash

◮ Branchement if

◮ Boucle while

◮ Commande test

◮ Variables

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 26/35

Page 27: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Le branchement if

if commande arguments

then

echo "succes"

else

echo "echec"

fi

Il faut un ; ou un RC avant then, else et fi

→ La commande est executee. A sa terminaison, branchementselon $?.

Variantes :

if .. ; then .. ; fi

if .. ; then .. ; else .. ; fi

if .. ; then .. ; elif .. ; then .. ; else .. ; fi

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 27/35

Page 28: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

La boucle while

while commande arguments

do

echo "une iteration"

done

Il faut un ; ou un RC avant do et done

→ La commande est executee. A sa terminaison, si $? est 0(succes), le bloc do .. done est execute, puis iteration.

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 28/35

Page 29: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Commande test

• Existe en builtin et en commande externe.

• Nombreuses options pour tester : fichiers, chaınes, entiers

• Evalue une expression par arguments, puis reussie ou echoue→ appele par if ou while

if test -f "hello.sh" ; then

echo "Le fichier existe"

fi

• Variante : [ est un lien sur /bin/test

if [ -f "hello.sh" ]; then

→ attention aux espaces !

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 29/35

Page 30: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Inversion de resultat

On peut inverser le resultat d’une commande avec ! :

! commande arguments

Exemple :

$ false ; echo $?

1

$ ! false ; echo $?

0

Utilisation classique :

if ! commande arguments ; then ... ; fi

if ! test ... ; then ... ; fi

if ! [ ... ]; then ... ; fi

while ! commande arguments ; do ... ; done

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 30/35

Page 31: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Variables

Variables de type chaıne de caracteres par defaut ; gestionmemoire automatique.

Creer une variable vide :nom_var=

Creer une variable et lui affecter une valeur :nom_var=valeur accole, pas d’espace autour du =

Si la valeur comporte des blancs, proteger avec "" ou ’’

message="Bonjour les amis"

Lire une ligne au clavier et la stocker dans une variableread nom_var

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 31/35

Page 32: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Substitution

Acceder a la valeur d’une variable : $nom_var ou ${nom_var}

→ le shell substitue $nom_var par sa valeur

echo "Valeur de message : $message"

↓ substitution

echo "Valeur de message : Bonjour les amis"

↓ affichage

Valeur de message : Bonjour les amis

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 32/35

Page 33: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Protections

• Que se passe-t’il si on remplace "" par ’’ ?→ La substitution n’est pas faite

• Afficher " → \"

\ → \\

$ → \$

echo "Valeur de message : \"$message\""

↓ substitution

echo "Valeur de message : \"Bonjour les amis\""

↓ affichage

Valeur de message : "Bonjour les amis"

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 33/35

Page 34: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Concatenation

On peut concatener par substitution :

numero=17

rue="rue du midi"

adresse="$numero $rue"

On peut concatener a la fin :

chemin="/usr"

chemin+="/bin"

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 34/35

Page 35: Programmation Unix 1 – cours n - lsis.org · Examen final : droit aux notes de CM/TD/TP ... V2 : Ken Thomson r´e´ecrit enti`erement Unix en C Les sources sont fournis `a : Bell

Instrospection

Demander a bash la valeur d’une variable :

declare -p nom_var

Exemple :$ foo="*"

$ declare -p foo

declare -- foo="*"

Detruire une variable :

unset nom_var

[email protected] Programmation Unix 1 – cours n°1 CC BY-NC 35/35