Table des matières

Interprète de commandes

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:

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

D’ou viennent les commandes

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 /binet 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

Exploration du système de fichier via son arborescence

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 :

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

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

Création et suppression de répertoires/fichiers

Répertoires

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

Fichiers

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.

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

Copies

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/

Premier pas avec Nano

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

Déplacements et renommages

~/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 :

image

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:

Question. Placez-vous dans le répertoire test_dir, et ramenez-vous en deux commandes à:

image

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

Personnalisation de l’environement

Bash

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

Sessions en mode texte sous linux

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.

Connexion à une machine distante

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.