Le shell désigne un interpréteur de commandes. Son rôle est de faire l’interface entre l’utilisateur et le système d’exploitation Unix.
Les OS basés sur Unix disposent de deux types d’interfaces avec le système :
– une interface graphique (GUI, pour Graphical User Interface)
– et des interfaces en ligne de commande (CLI, pour Commande Line Interface).
Les interfaces en ligne de commande se présentent sous la forme d’une console (ou « terminal texte »). Il permet d’exécuter les commandes de l’utilisateur et d’afficher le résultat à l’écran. Il existe plusieurs types de shell:
le /bin/sh appelé shell Bourne
le /bin/bash appelé shell Bourne Again SHell
le /bin/csh appelé C shell
le /bin/ksh appelé Korn shell
le /bin/tcsh appelé shell amélioré
Lorsqu’on ouvre un terminal texte, une ligne s’affiche qui ressemble à cela :
jdupont@etudiants:~ $
Cette ligne est une invite de commandes (prompt en anglais) qui indique que l’interpréteur de commandes est inactif et qu’il attend que l’utilisateur lui donne des commandes à exécuter.
L’invite de commande se décompose ainsi :
Une invite de commande primaire Prompt String 1 (PS1) pour un
utilisateur débute par le caractère $
ou >
(Bourne, Bash ou Korn
shell) et %
(C shell). En mode super utilisateur (administrateur de la machine), le prompt (primaire)
commence avec le caractère #
. Un prompt secondaire Prompt String 2
(PS2) est utilisé lorsque la commande en cours a besoin de plusieurs
ligne.
Question. Ouvrez un “terminal” et testez la commande
exit
, puis réouvrez votre “terminal”.
Question. Essayez les commandes suivantes
pwd, ls, who, date, cal, echo "Hello World"
. Commentez leur fonctionnement.
Question. Essayez man cal
. La commande man
vous permet de
consulter le manuel d’un executable. Essayez man man
.
Question. Il est parfois préférable de consulter le manuel en anglais
qui peut être plus précis. Trouvez dans le manuel comment l’afficher en
anglais (man man
).
Question. Essayer les combinaisons usuelles suivantes en mode édition.
C-p
commande précédente
C-n
commande suivante
C-a
début de ligne
C-e
fin de ligne
C-b
caractère précédent
C-f
caractère suivant
C-d
supprime le caractère sous le curseur ou exit si plus de caractère
Del
caractère précédent le curseur
C-k
couper jusqu’à la fin de ligne
C-u
couper à partir du début de la ligne
C-y
coller
Return
validation de la ligne
C-c
annulation de la ligne en cours
C-c
représente l’appuye simultanné des touches Control
et c
.
Lorsque l’utilisateur saisit une commande dans le terminal texte, par exemple la commande allo
, l’interpréteur de commandes suit la procédure suivante pour l’exécuter :
(1) Si allo
est l’une de ses commandes internes, il l’exécute puis redonne la main à l’utilisateur.
Sinon, il passe à l’étape suivante.
(2) Il parcourt le contenu d’une variable d’environnement appelée PATH. Le contenu de PATH est une liste de répertoires dans lesquels il faut chercher les binaires correspondant à la commande à exécuter. Par exemple, si PATH contient les répertoires suivants (dans l’ordre) : /usr/bin
et /bin
et enfin /home/jdupont/bin
alors l’interpréteur de commandes va chercher les commandes /usr/bin/allo
,/bin/allo
ou /home/jdupont/bin/allo
.
(3) Si aucun de ces répertoires ne contient une commandes allo
, l’interpréteur de commandes affiche un message d’erreur pour indiquer à l’utilisateur qu’il ne connaît pas cette commande.
jdupont@etudiants:~ #
jdupont@etudiants:~ $ allo
allo: commande introuvable
Deux commandes essentielles sont à connaitre pour naviguer dans un système de fichier : cd
(pour ‘change directory’) et pwd
(pour ‘print working directory’).
Question. Essayez les commandes suivantes.
~/if110/ei1$ ls
~/if110/ei1$ pwd
~/if110/ei1$ cd .. # séparez la commande de ses paramètres par un espace
~/if110/ei1$ pwd
~/if110/ei1$ ls
Question Tester la commande tree
et trouver comment afficher le tree avec (1) tous les chemins absouls des fichiers, (2) les dossiers uniquement (pas les fichiers standards), (3) tous les fichiers, meme les fichiers cachés.
Chemin absolu : Tout chemin absolu commence par / (la racine) et indique tous les répertoires qu’il faut traverser à partir de la racine pour arriver jusqu’au fichier ou répertoire en question. Le répertoire absolu d’un fichier/répertoire est donc toujours le même quelle que soit la position où l’on se trouve dans l’arborescence.
Chemin relatif : C’est un chemin qui indique la position du fichier/répertoire en question par rapport à la position où l’on se trouve dans l’arborescence. Il existe donc au moins autant de chemins relatifs d’un fichier/répertoire que de positions où l’on peut se trouver dans l’arborescence.
Chaque répertoire du système contient deux fichiers spéciaux :
.
: qui référence le répertoire courant..
: qui référence le répertoire parent du répertoire courantQuestion. Exécutez la suite de commandes.
~/if110/ei1$ cd
~/if110/ei1$ cd Desktop # n’oubliez pas le mécanisme de complétion
~/if110/ei1$ pwd
Maintenant pour aller dans votre répertoire d’accueil plusieurs possibilités:
cd ..
oucd ~
ou encorecd
Pour afficher les fichiers cachés, utilisez l’option -a
(fichiers dont
le nom commence par un .
tels que .bashrc
).
Question. Exécutez, en utilisant les mécanismes d’édition de bash, les commandes
~/if110/ei1$ man ls
~/if110/ei1$ ls Desktop
~/if110/ei1$ ls -a Desktop
~/if110/ei1$ ls -l Desktop
La commande mkdir
(make directory) permet de créer un répertoire ou une arborescence. Lors
de la création d’un répertoire, deux fichiers spéciaux sont crées : .
et ..
Ces deux fichiers spéciaux sont des liens vers le répertoire
courant et le répertoire “parent” utile pour l’execution de certaine
commande prenant un répertoire en argument.
La commande rmdir
(remove directory) supprime un répertoire ou une arborescence. Prend en argument une liste d’un ou plusieurs répertoires/arborescences
Question. Créez un répertoire tmp
et un répertoire Projets
dans
son répertoire d’accueil. Plusieurs possibilités, par exemple:
~/if110/ei1$ mkdir tmp
~/if110/ei1$ cd
~/if110/ei1$ mkdir Projets
~/if110/ei1$ ls -als
~/if110/ei1$ pwd
~/if110/ei1$ cd ..
~/if110/ei1$ pwd
Si le chemin est celui d’un fichier (ou répertoire) déjà présent, cela provoque une erreur: le nom de base doit être nouveau dans le répertoire de référence.
~/if110/ei1$ mkdir eclair
~/if110/ei1$ ls -F
~/if110/ei1$ cd eclair
~/if110/ei1$ rmdir ../eclair
~/if110/ei1$ cd ..
~/if110/ei1$ rmdir eclair
~/if110/ei1$ ls -F
La commande touch
créé un nouveau fichier. Prend en argument le nom du fichier à créer.
La commande rm
(remove) supprime un fichier ou un répertoire. Prend en argument une liste d’un ou plusieurs chemins de
répertoires et/ou fichiers à supprimer.
rm -fr
avec précaution.
Regarder le manuel pour plus d’information.
Question. Essayez la suite de commandes :
~/if110/ei1$ rm /tmp/README.html
~/if110/ei1$ cd /tmp
Question Créer 5 fichiers nommés my_fileX (X de 1 à 5) dans le répertoire ~/if110/ei1 et afficher le resultats de ls
Question Supprimer les 5 fichiers créés et afficher le resultats de ls
Question. Exécuter et commentez les commandes suivantes:
~/if110/ei1$ mkdir test
~/if110/ei1$ cd test
~/if110/ei1$ touch doc1.html
~/if110/ei1$ touch doc2.html
~/if110/ei1$ ls
~/if110/ei1$ cd ~/if110/ei1
~/if110/ei1$ cd test
~/if110/ei1$ cp doc1.html doc2.html /tmp/
cp
est un chemin valide ne correspondant à aucun fichier ou répertoire, un nouveau
fichier est créé. Sinon, le fichier qui existe est écrasé.
Exécuter la commande nano
. Nano permet d’éditer simplement et rapidement
les fichiers textes:
~/if110/ei1$ nano nom_du_fichier
Il existe de nombreux raccourcis clavier qui facilite l’utilisation de l’éditeur. Voici quelques raccourcis commun:
Ctrl-o
sauver
Ctrl-x
quitter nano
Ctrl-c
annuler une action
Ctrl-k
couper une ligne
Ctrl-u
coller une ligne
Alt-A
activer le debut d’une sélection
Alt-6
copier la sélection
Ctrl-V
ou Ctrl-Y
pour naviguer plus rapidement dans le document
Ctrl-w
rechercher un texte
Alt-w
rechercher à nouveau le même texte
Question. Utiliser nano pour créer un fichier LISEZ_MOI
dans votre
répertoire principal contenant un texte de votre choix d’au minimum 50 lignes. Vous pouvez utiliser les fonctions de copier/coller de nano pour cela.
Question. Afficher le contenu de LISEZ_MOI
avec les commande cat, less, tail
. Que font ces appels ? En quoi sont-ils différents ?
Question. Dans un premier terminal, ouvrir le fichier LISEZ_MOI avec la commande tail -f
. Dans un second terminal, ajouter du texte à la fin du fichier LISEZ_MOI avec l’utilisation de » et cat, comme suit : echo "une nouvelle phrase" >> LISEZ_MOI
. Que se passe-t-il dans l’affichage avec tail -f
~/if110/ei1$ cd ∼/test
~/if110/ei1$ mv doc1.html doc1.html
~/if110/ei1$ ls -F
~/if110/ei1$ mv doc1.html ../doc1.html
~/if110/ei1$ ls -F ..
~/if110/ei1$ mv ../doc1.html .
~/if110/ei1$ ls -F ..
~/if110/ei1$ ls -F
~/if110/ei1$ mv *.html ∼/tmp
~/if110/ei1$ ls -F
~/if110/ei1$ mv ∼/tmp/*.html .
Question. Créez à partir de votre répertoire d’accueil l’arborescence :
Les cases blanches sont des répertoires, tandis que les cases grisées sont des fichiers texte à créer. La marche à suivre pour cet exercice est la suivante:
créez les répertoires;
lancez nano à partir du répertoire d’accueil;
éditez les fichiers et sauvegardez-les.
Question. Placez-vous dans le répertoire test_dir
, et ramenez-vous
en deux commandes à:
Question. Depuis test_dir
essayez cp essai textes
; commentez le
résultat. Que fait dans ce même cas cp *
Essayez avec l’option -R
.
Commentez les erreurs possibles lors de l’exercice précédent:
~/if110/ei1$ mv t* textes
~/if110/ei1$ cp t* textes
Le fichier .bashrc qui se trouve dans votre réepertoire personnel est exéecutée avant chaque lancement de bash. Il contient les informations pour configurer votre shell bash selon votre gout. Ajoutez par exemple les lignes suivantes dans votre fichier .bashrc
alias c=clear
alias m=more
alias cl=’clear; more'
Lancez un nouveau shell bash et essayez les nouvelles commandes c
, m
et cl
. Si vous voulez, par exemple, que les fichiers qui sont dans le
répertoire bin de votre réepertoire d’accueil soient directement
accessibles, ajoutez le chemin dans la variable PATH
comme suit:
export PATH=$PATH:$HOME/bin
Question Créer un repertoire ~/bin. Créer le fichier bash random-word-generator.sh dans ce repertoire commençant par le shebang #! /bin/bash
permettant de generer des mots aléatoirement. Récupérer le script suivant:
#!/bin/bash
# Random Word Generator
# linuxconfig.org
if [ $# -ne 1 ]
then
echo "Please specify how many random words would you like to generate !" 1>&2
echo "example: ./random-word-generator 3" 1>&2
echo "This will generate 3 random words" 1>&2
exit 0
fi
# Constants
X=0
ALL_NON_RANDOM_WORDS=/net/ens/jbruneauqueyreix/words
# total number of non-random words available
non_random_words=`cat $ALL_NON_RANDOM_WORDS | wc -l`
# while loop to generate random words
# number of random generated words depends on supplied argument
while [ "$X" -lt "$1" ]
do
random_number=`od -N3 -An -i /dev/urandom |
awk -v f=0 -v r="$non_random_words" '{printf "%i\n", f + r * $1 / 16777216}'`
sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS
let "X = X + 1"
done
Rendre le fichier random executable avec
chmod +x random-word-generator.sh
Ajouter à la variable d’environnement PATH le chemin vers le dossier contenant l’executable :
export PATH=$PATH:$HOME/bin
Qestion Essayer d’executer votre fichier depuis un autre répertoire. Que s’est-il passé ?
Dans certaines situations, il peut s’avérer nécessaire d’ouvrir une session linux en mode texte. Ce type de session donne accès aux mêmes outils que la console mais ne permet pas de lancer d’application graphique.
Question. Ouvrir une session en mode texte par la combinaison de touches Control-Alt-F1. Saisir son identifiant puis son mot de passe.
Question. Créer un noveau fichier dans votre répertoire principal.
Repasser en mode graphique en utilisant la combinaison de touches Control-Alt-F7. Il est possible
d’avoir plusieurs sessions en mode texte différentes en utilisant Control-Alt-F2, Control-Alt-F3, etc. Ne pas oublier
de quiter votre session en utilisant la commande exit
.
Le système unix permet de se connecter à des serveurs distants au moyen
de la commande en ligne ssh
(ou Secure Shell) qui est un protocole de
communication sécurisé. La seule machine de l’école accessible depuis
l’extérieure s’appele ssh.enseirb-matmeca.fr
Question. Ouvrir un terminal et se connecter à la machine ssh en utilisant la commande:
~/if110/ei1$ ssh login@ssh.enseirb-matmeca.fr
Utiliser la commande hostname
pour afficher le nom de la machine sur
laquelle vous êtes connecté.
Question. Il est possible de copier des fichiers entre deux machines
distantes grâce à la commande scp
qui s’utilise commme la commande
cp
. Identifier une autre machine de la salle et essayer de copier des
fichiers localement dans le répertoire /tmp de la machine distante.
Dans l’utilisation de la commande scp
, les noms de fichiers ou
répertoires source ou destination sont préfixés par le nom de la machine
distante suivie du signe :
. Par exemple, la commande :
scp foo.txt jbruneauqueyreix@ssh.enseirb-matmeca.fr:/tmp/
copie le fichier
foo.txt du répertoire courant dans le répertoire /tmp sur la machine
distante ssh de l’enseirb.