Академический Документы
Профессиональный Документы
Культура Документы
Laboratoire MAR
Linux Avanc
1. OBJECTIF
Ce laboratoire prsente l'utilisation de commandes Linux avances :
scripts Bash
2. PRREQUIS
Ce laboratoire demande des connaissances de base de Linux, en particulier des
commandes cd, ls, pwd, man, cp, rm, cat, echo. Ces connaissances peuvent tre
acquises dans le laboratoire Linux de base.
3. INTRODUCTION
Le dveloppement de systmes embarqus Linux demande une bonne connaissance des
commandes Linux. Une bonne matrise des commandes permet d'acclrer et
d'automatiser une bonne partie du travail.
Les manipulations proposes peuvent tre effectues sur dautres distributions que celle
installe au laboratoire.
Linux comporte une interface graphique assez efficace, par contre il est trs conseill de
bien matriser le mode console (ligne de commande / mode texte). Un fois lhabitude
prise, vous verrez que vous ne pourrez plus vous en passer car vous gagnerez
normment en efficacit.
Tout ce que va tre dit dans ce laboratoire est valable aussi bien dans un terminal mode
texte (tty1-6) que dans les terminaux graphique (xterm, ).
Le but de ce laboratoire est comme nous lavons dit, de se familiariser aux possibilits
offertes par ce systme (dition et manipulation de fichiers, cration de scripts,
compilation,).
Avant de poser des questions aux assistants, pensez trouver vous-mme la rponse
vos problmes laide de la commande man par exemple ou avec loption help que les
commandes UNIX utilisent dhabitudes comme aide rapide. De plus le web regorge de
documentation propos de Linux, ltudiant curieux a largement de quoi assouvir son
intrt.
Attention !
Comme dj dit les manipulations proposes peuvent tre effectues sur dautres
distributions que celle installe au laboratoire. MAIS il se peut que certaines commandes
ne fonctionnent pas. Ceci est du au fait que vous navez pas assez de privilges pour
lexcution. En cas de problmes nhsitez pas demander de laide aux assistants.
Stephan Robert, IICT, HEIG-VD
1 / 13
Modifi par A. Rubinstein le 03.12.2008
Modifi par Grgory Ruch le 25.09.2009
Modifi par A. Rubinstein le 16.09.2011, 27.09.2011, 27.09.2012
09.06.2016
IICT
4. COMMENT COMMENCER ?
Il y a deux manires de raliser les diffrentes tches de ce laboratoire. Avec la premire,
vous utilisez les machines du laboratoire. Avec la deuxime, vous installez une machine
virtuelle sur votre propre ordinateur.
4.1.
SUR
Choisissez une des machines DELL de la salle B05 et dmarrez le systme. Les
paramtres de login sont les suivants :
Login :
labo
Password : labo
4.2.
SUR
VOTRE MACHINE
Vous pouvez utiliser une machine virtuelle sur votre machine. Pour ce faire, il vous faut
tlcharger/installer un logiciel de virtualisation (virtualbox, vmware, autre), tlcharger
une distribution Linux (p.e. Ubuntu) et linstaller.
5. LABORATOIRE
A ce stade il faut ouvrir une fentre de commande ( Applications -> Accessories ->
Terminal) et nous pouvons commencer.
5.1.
LE SHELL
Voici une liste des commandes les plus utilises permettant des oprations sur des
fichiers et rpertoires. Vous avez dj utilis certaines de ces commandes lors du
laboratoire de Linux de base :
09.06.2016
IICT
Il y en a bien dautres, mais ce stade, il nest pas encore ncessaire de les voir. Nous
les dcouvrirons par la suite.
Rappelons que les noms des fichiers sont case sensitive, cest dire quils tiennent
compte des majuscules et des minuscules. Le nom dun fichier peut contenir jusqu 255
caractres.
Pour accder un fichier comportant des espaces dans son nom, deux mthodes sont
disposition :
utiliser des backslash avant les espaces (le caractre espace est considr
comme un caractre spcial)
09.06.2016
IICT
Exercice
Excuter les lignes suivantes et commenter les rsultats :
Rponse
Rponse
Notons que les fichiers ou rpertoires dont le nom commence par un point . sont
cachs, cest dire quils ne seront pas visibles avec la commande ls. Si on veut lister
les fichiers cachs, il suffit de passer largument a ls.
Question
Que font les lignes suivantes ? Commentez.
Rponse
ls
Rponse
ls a
Rponse
5.2.
TLCHARGEMENT
ET GESTION D'ARCHIVES
Souvent les fichiers sont compresss avec les outils bzip2 (suffixe .bz2 ) ou gzip
(suffixe .gz ). Pour les dcompresser, utiliser les commandes:
Stephan Robert, IICT, HEIG-VD
4 / 13
Modifi par A. Rubinstein le 03.12.2008
Modifi par Grgory Ruch le 25.09.2009
Modifi par A. Rubinstein le 16.09.2011, 27.09.2011, 27.09.2012
09.06.2016
IICT
bunzip2 fichier.bz2
ou
gunzip fichier.gz
Exercice
Aller dans le rpertoire tmp.
Tlcharger
le
noyau
(kernel)
Linux
http://ftp.linux.org.uk/pub/linux/linux-2.6/ .
version
2.6.13.3
depuis
le
miroir
5.3.
LA
Cette commande affiche toutes les lignes des fichiers qui contiennent la chane de
caractres string.
Exemple: trouver le mot linux dans les fichiers /etc/*:
grep linux /etc/*
Par dfaut, grep ne cherche que dans les fichiers de la liste donne. Pour chercher dans
toute une arborescence, on peut utiliser l'option -R pour rcursif :
grep -R linux /etc
La puissance de la commande grep vient du fait qu'on peut utiliser des expressions
rgulires dans la chane de caractres recherche.
Les caractres joker les plus souvent utiliss sont:
correspond un caractre
Les commandes grep et find peuvent tre combines pour chercher des expressions
rgulires dans un ensemble de fichiers:
grep "linu[sxz]" $(find /usr -name *.txt)
Les parenthses $(...) valuent une commande. Dans notre cas, le rsultat de cette
valuation est la liste de tous les fichiers *.txt dans /usr. Cette liste de fichiers est ensuite
cherche par grep afin de trouver les strings linus, linux ou linuz.
Exercice
Aller dans le rpertoire du code source Linux du noyau 2.6.13.3.
Stephan Robert, IICT, HEIG-VD
5 / 13
Modifi par A. Rubinstein le 03.12.2008
Modifi par Grgory Ruch le 25.09.2009
Modifi par A. Rubinstein le 16.09.2011, 27.09.2011, 27.09.2012
09.06.2016
IICT
Quelle est la commande qui permet de trouver le string USB dans tous les fichiers *.txt
dans ce rpertoire et dans ses sous-rpertoires ?
Rponse
5.4.
ls /*t?/
Rponse
ls -l /pr*c/s?s/n?t/ipv4/co*/*/forwarding
Rponse
Rponse
5.5.
TOP
09.06.2016
IICT
5.6.
VI (OPTIONNEL,
Nous allons voir maintenant l'utilisation de l'diteur de texte vi. Il existe sous Linux de
nombreux autres diteurs, partant de ed pour le plus simpliste jed ou emacs. Alors
pourquoi vi ? La rponse est simple, c'est un diteur que vous retrouverez sur 99,99%
des systmes Unix. La plupart des serveurs Linux passent par l'dition de fichiers. Il est
donc essentiel de matriser l'utilisation de vi pour tre en mesure d'agir sur n'importe
quel systme Unix, Linux compris.
Vi possde deux modes de fonctionnement, contrairement aux diteurs wysiwyg (what
you see is what you get). Une fois lanc votre futur diteur prfr ( vi) vous vous trouvez
en mode commande et vous pouvez ainsi ouvrir un nouveau fichier, quitter, effacer une
ligne, vous dplacer dans le texte, copier, coller, Cependant vous ne pouvez pas
crire ! Pour ce faire, il faut passer en mode insertion.
Une fois que vous avez termin d'crire, ne pas oublier dappuyer sur la touche ESQ pour
revenir en mode commande.
Mode insertion
Les caractres taps s'insrent dans le texte du fichier dit. Un jeu rduit de
commandes est disponible par l'intermdiaire de caractres de contrle.
Ce mode se termine en tapant <ESC>.
Mode commande
Les caractres taps sont considrs comme des commandes d'dition de texte.
Attention : Les commandes sont case sensitive.
En annexe vous trouverez un aide-mmoire des commandes de vi. Vous pouvez lutiliser
comme rfrence dans le cas de ce laboratoire.
5.7. SED
ET
AWK
Question
Quel est le rsultat des commandes ?
Rponse
09.06.2016
IICT
6. PROGRAMMATION BASH
Bash est l'interprteur de commandes par dfaut des systmes Linux. C'est l'interprteur
qui vous permet de taper une commande, trouve l'excutable correspondant et affiche le
rsultat de la commande. Mais Bash permet aussi la programmation de scripts, qui sont
trs utiles pour automatiser des tches.
Nous prsentons ici brivement les commandes essentielles de Bash. Plus d'informations
sont disponibles dans la page man de Bash.
6.1.
DFINITION
Une variable normale n'est pas visible pour les commandes excutes depuis un script.
Afin de la rendre visible, il faut l'exporter (dfinir une variable d'environnement) :
toto=Test
export toto
6.2.
BOUCLES
FOR
Typiquement, la liste des lments sont des fichiers ou des rpertoires. Les commandes
sont spares par des points-virgules ou par des retours chariot.
Exemple :
for r in /usr /home /var; do echo Rpertoire $r; ls -l $r ; done
6.3.
STRUCTURE
DE CONTRLE
IF
Vrai si
Exemple
09.06.2016
IICT
-n variable
-z variable
-d nom
-f nom
num1 -eq
num2
num1 -neq
num2
string1 =
string2
string1 !=
string2
num1 -lt num2
num1 -gt
num2
num1 -le
num2
num1 -ge
num2
-n $toto
-z $toto
-d /usr/bin
-f /etc/passwd
Contraire de -eq
$toto -neq 1
$toto = Hello
Contraire de =
$toto != Hello
$toto -lt 3
$toto -gt 3
$toto -le 3
$toto -ge 3
$toto -eq 1
Plusieurs conditions peuvent tre combines avec les oprations && (ET logique) et
|| (OU logique). L'oprateur de ngation est ! .
Exemple :
if [[ -d /usr/ ]]; then echo Existe; ls -l /usr/; else echo Pas trouv ;
fi
6.4.
CHANAGE
DE COMMANDES
La flexibilit de la programmation Bash vient du fait que les commandes peuvent tre
chanes pour effectuer des oprations complexes.
Chanage squentiel
Les commandes sont excutes de manire squentielle.
Commande1 ; commande2
Chanage conditionnel
Excuter la commande 2 seulement quand la commande 1 a russi :
Commande1 && commande2
09.06.2016
IICT
Exemple: liste rcursive de tous les rpertoires, page par page (avec la commande less):
ls -R / | less
cherche le mot tutorial dans le rsultat de la commande find, donc dans les noms de
fichiers trouvs par find. La commande
grep tutorial $(find /home -name *.txt)
par contre interprte le rsultat de la commande find comme une liste de fichiers et
cherche dans le contenu de ces fichiers.
09.06.2016
IICT
6.5.
EXERCICE
Compter le nombre total de lignes de tous les fichiers *.c . De nouveau il faut
utiliser les commandes find et wc, mais cette fois-ci avec un chanage par
argument.
Script :
Votre Script ici
Output du Script :
Votre Output ici
Dans votre script vous devez utiliser des pipes ( |) et des variables. Les commandes
suivantes affectent une variable et laffichent :
MyVar=$(Commande1 | Commande2 | Commande_n)
echo "Voici ma variable $MyVar"
09.06.2016
IICT
6.6. EXERCICE
Vous devez crer un script laide de lditeur vi.
Ce script devra afficher :
:
:
:
:
2.0.7
1725.127 MHz
516616 kB
61
Script :
Votre Script ici
Output du Script :
Votre Output ici
Aide
Vous trouverez certaines informations dans les fichiers suivants (utiliser par exemple
cat) :
/proc/version
/proc/cpuinfo
/proc/meminfo
Ces fichiers sont virtuels, leur taille est donc nulle. Ce sont des points de contact avec le
noyau ; les informations quon y retrouve sont donnes par le kernel. Vous trouverez
dautres informations avec les commandes :
top
awk
Dans votre script vous devez utiliser des pipes ( |) et des variables. Les commandes
suivantes affectent une variable et laffichent :
MyVar=$(Commande1 | Commande2 | Commande_n)
Stephan Robert, IICT, HEIG-VD
12 / 13
Modifi par A. Rubinstein le 03.12.2008
Modifi par Grgory Ruch le 25.09.2009
Modifi par A. Rubinstein le 16.09.2011, 27.09.2011, 27.09.2012
09.06.2016
IICT
echo "Voici ma variable $MyVar"
6.7.
LISTE
La variable d'environnement PATH contient la liste des rpertoires o Bash cherche les
excutables. Ainsi, quand vous tapez la commande ls, Bash trouve l'excutable /bin/ls.
On peut afficher la liste en imprimant la variable PATH :
echo $PATH
Lorsqu'on cre un script dans son rpertoire personnel, ce rpertoire ne fait normalement
pas partie de la liste PATH. Dans ce cas, il faut spcifier le chemin vers l'excutable, par
exemple :
/home/labo/tmp/mon-script
Le point signifie le rpertoire actuel dans Linux, donc cette commande indique Bash o
il peut trouver l'excutable.
Lorsqu'on installe des logiciels dans un rpertoire non standard, comme p.ex. le script
mon-script dans /home/labo/tools/bin, on aimerait viter de toujours devoir taper le
chemin complet. Dans ce cas, il suffit d'ajouter ce rpertoire la variable PATH. Quand
Bash dmarre (lorsqu'un nouveau terminal est ouvert), il lit et excute le fichier .bashrc
dans le rpertoire personnel de l'utilisateur. Une variable qui est dfinie et exporte dans
ce fichier est alors utilisable sur tous les terminaux.
09.06.2016