Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Nota :
Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Le shell, également appelé interpréteur de commandes, est l'outil le plus élémentaire, direct et immédiat pour manipuler les fichiers et lancer des programmes.
Il permet par exemple :
En pratique, le shell permet de lancer et de faire interagir entre eux tous les programmes installés sur la machine, le plus souvent regroupés dans les dossiers /usr/bin
, /bin
, /usr/sbin
et /sbin
.
Le premier interpréteur de commandes était sh dans l'UNIX original de 1971. Afin d'améliorer la productivité, plusieurs revendeurs (HP, Sun…) dans les années 1970 et 1980 ont créé (ou fait créer) d'autres interpréteurs (csh, ksh…) dont les règles de grammaire plus poussées facilitaient l'écriture de commandes complexes ou répétitives, et accéléraient l'exécution de scripts en prenant en charge certaines actions élémentaires (echo, test, [, …) autrefois déléguées à des programmes de /bin.
La majorité de ces améliorations successives ont été reprises dans bash qui est le shell utilisateur présent par défaut sur Debian. zsh est une alternative à bash également très utilisée. Enfin, dash est le shell léger utilisé par défaut par Debian pour exécuter les scripts shell.
Pour lancer un shell, il suffit d'ouvrir un émulateur de terminal, comme Gnome-Terminal, XTerm, Rxvt-Unicode, etc. Ce dernier exécutera automatiquement votre shell utilisateur.
Il est aussi possible d'ouvrir une des consoles virtuelles du système, par une combinaison de touches telle que Ctrl+Alt+F1 ou en démarrant le système en mode non graphique.
Une des commandes les plus importantes à lancer dans un shell est la commande man
qui permet d'afficher l'aide d'un programme. Par exemple, jetez un coup d'œil à
man bash
(touche Q pour quitter)
Le prompt ou invite de commande est le petit texte qui est déjà affiché quand on lance le shell et qui reste affiché quand on appuie sur la touche ↵ Entrée
Souvent, le prompt ressemble à ça : nom-d-utilisateur@nom-de-la-machine:dossier-courant$
.
~
s'il s'agit du dossier personnel (par défaut).
Pour lancer un programme, rien de plus simple, il suffit de taper son nom juste à droite du prompt, et de valider par entrée. Exemple :
pwd
Après cela, pwd
affiche le dossier courant, probablement
/home/nom-d-utilisateur
puis il termine. Et rend la main, c'est-à-dire que le prompt est à nouveau visible.
Il est possible de donner un argument à un programme. Par exemple, pour lister le contenu (ls
) du dossier /var
, on tape :
ls /var
Là encore, le programme ls
affiche le contenu du dossier et puis rend la main au shell.
Essayez donc :
ls -l /usr/bin
Vous voyez que -l
a modifié l'affichage de ls
. On dit que l'argument -l
est un paramètre, les paramètres d'un programme étant listés et expliqués dans le man
de ce programme.
Vous pouvez donc vous précipiter sur :
man ls
man
de chacun de ces programmes (sauf pour cd
qui est une commande du shell et non un programme) est une source précieuse d'information !
Voici un petit exemple pour les gens pressés :
cd /usr
cd /bin
ls
cd /tmp
mkdir coucou
mkdir coucou/hop
touch coucou/pouet
mv coucou/pouet coucou/bla
rmdir coucou/hop
rm -r /tmp/coucou
cd
Le caractère ~
permet d'indiquer le nom du répertoire d'accueil d'un utilisateur :
~
“répertoire d'accueil du propriétaire du shell”.
et :
~username
“répertoire d'accueil du compte username”.
Dans un shell, il faut penser flux. Un flux est une sorte de fichier, qui se construit au fur et à mesure et n'est présent qu'en mémoire. Par exemple,
ls
ou pwd
est un flux, affiché directement sur le terminal).
Il est possible de rediriger un flux vers un fichier. Par exemple, pour enregistrer un fichier /tmp/liste.txt
contenant la liste des fichiers et dossiers du répertoire /usr/bin
, c'est aussi simple que
ls /usr/bin > /tmp/liste.txt
Pour en savoir plus, voir les chevrons
Admettons que vous vouliez lancer un premier programme, qui fournit alors un flux de sortie, puis donner ce flux de sortie à un deuxième programme pour qu'il y fasse un second traitement.
Par exemple, vous voulez lister l'ensemble des fichiers dans /usr/bin
(via ls
) mais vous ne voulez garder seulement que les fichiers comportant term
dans leur nom. Vous utiliserez alors la commande grep
pour faire la 2e opération, qui fonctionne à la manière d'un filtre :
ls /usr/bin | grep 'term'
Magique, non ? :)
Pour comprendre son fonctionnement interne :
Parfois, vous pouvez vouloir utiliser la sortie d'un programme comme argument d'un autre programme. Pour ce faire, on utilise $( commande )
. Exemple, vous voulez écrire une commande qui affiche (la commande echo
sert à cela) :
Coucou, je suis dans le répertoire nom-du-répertoire et je m'amuse comme un fou.
Vous savez alors qu'il vous suffit de taper le code suivant :
echo 'Coucou, je suis dans le répertoire' "$(pwd)" "et je m'amuse comme un fou."
echo
: '
.$(pwd)
il doit donc donner entre guillemets doubles : “
.Lorsque vous tapez une ligne de commande compliquée assez régulièrement, il est intéressant de la rédiger une fois pour toute dans un fichier et de la rappeler ensuite rapidement via un mot-clé. C'est ce que l'on appelle un alias. Ils sont gérés de manière légèrement différentes par chacun des shells. La syntaxe générale est la suivante :
alias irc='x-terminal-emulator -title irc -name irc -e weechat'
alias cdmonproj='cd ~/projets/debian-facile/2013/mon-projet/src/www/'
Pour que les alias soient actifs dans tous les terminaux, il suffit de les placer dans le ~/.bashrc
(si vous êtes sous bash
, ou ~/.zshrc
pour zsh
, etc.
Pour plus de détails suivant les shells :
Dans un shell, il y a tout un tas de variables qui lui sont transmises par le processus l'ayant lancé. On les appelle les variables d'environnement, et elles sont listées par la commande env
:
env
Pour définir une variable, c'est facile :
NOM="Capitaine Fab"
Et pour l'afficher :
echo "$NOM"
Pour que la variable soit transmise à l'environnement des programmes qui seront lancés par le shell, il faut l'exporter :
export NOM
export NOM="Capitaine Fab"
Les possibilités sont énormes, voir le tuto dédié :
Il est possible d'automatiser les tâches avec des scripts shell. Vous apprendrez notamment à utiliser les boucles et les instructions conditionnelles, et les fonctions.
Parfois, vous lancez un programme dans le shell, mais vous voulez continuer à utiliser ce dernier pendant que le programme tourne en arrière-plan.
Pour ce faire, on utilise l'esperluette :
iceweasel &
Avec cela, iceweasel va être lancé, mais vous aurez toujours la main dans le shell (tape Entrée pour le vérifier.)
&
, comment je fais ?bg
.Pour lancer un programme en arrière-plan de sorte à ce qu'il ne se ferme pas en même temps que le shell, il faut le lancer via
iceweasel &!
!
, comment je fais ?
Il suffit de taper disown leprogramme
(faire Tab ⇆ pour voir les propositions)
On peut exécuter plusieurs commandes sur la même ligne en les séparant par un ;
On peut reprendre l'exemple Naviguer dans les fichiers et les dossiers sur une seule ligne
cd /usr ; cd bin ; ls ; cd /tmp ; mkdir coucou ; mkdir coucou/hop ; touch coucou/pouet ;
mv coucou/pouet coucou/bla ; rmdir coucou/hop ; rm -r /tmp/coucou ; cd
Il peut être parfois intéressant d'exécuter une commande en fonction de la bonne exécution ou non de la commande précédente. Cela est possible grâce au code retour des commandes.
Le code retour d'une commande permet de savoir si celle-ci a été exécutée sans problème. Dans ce cas, le code retour est 0. Sinon, elle peut prendre n'importe quel autre valeur.
echo $?
Cette ligne de commandes permet d'exécuter cmd2 si cmd1 s'est exécutée correctement (si son code retour est 0) :
cmd1 && cmd2
Cette ligne de commandes permet d'exécuter cmd2 si cmd1 ne s'est pas exécutée correctement (si son code retour est différent de 0) :
cmd1 || cmd2
Par exemple mettre à jour le système après avoir mis à jour la liste des paquets sans problème tapez :
apt-get update && apt-get upgrade
Autre exemple, pour créer le fichier coucou dans /usr/tmp si celui-ci n'existe pas tapez :
ls /usr/tmp/coucou || touch /usr/tmp/coucou
Ces opérateurs fonctionnent un peu comme des tests if. Pour plus de précision sur les tests, on peut consulter : Fonctionnalités avancées du Shell
Quelques raccourcis en shell Linux (à apprendre par cœur ) :
Raccourci clavier | Action |
---|---|
Ctrl+A | Déplace le curseur au début de la ligne |
Ctrl+E | Déplace le curseur à la fin de la ligne |
Ctrl+K | Efface du curseur à la fin de la ligne |
Ctrl+U | Efface la ligne jusqu'au curseur. Efface donc la ligne si le curseur se trouve à la fin |
Ctrl+L | Efface le terminal, équivalent ) clear |
Ctrl+W | Effacer du caractère précédent le curseur jusqu'au début du mot |
Alt+← | Comme Ctrl+W |
Alt+D | Coupe la chaîne depuis le caractère situé sous le curseur jusqu’à la findu mot (si le curseur est placé au début d’un mot, coupe le mot) |
Ctrl+Y | Colle la sélection précédemment coupée |
Ctrl+T | Inverse les deux caractères précédent le curseur |
Alt+T | Inverse deux mots précédent le curseur |
Alt+C | Met en majuscule la lettre située sous le curseur et déplace le curseur à la fin du mot |
Alt+L | Met en minuscule toutes les lettres depuis la position du curseur jusqu’à la fin du mot |
Alt+U | Met en majuscule toutes les lettres depuis la position du curseur jusqu’à la fin du mot |
Alt+_ | Annule la modification précédente |
A noter que ces raccourcis claviers sont identiques à ceux utilisés dans l'éditeur de texte emacs. Il est possible d'obtenir un comportement identique à celui de vi/vim avec
set -o vi
La ligne de commande est alors en mode insertion. Pour passer en mode normal permettant de se déplacer dans une ligne saisie avec les raccourcis habituels de vim, c'est Esc. Pour entrer en mode insertion, c'est A ou I.
Pour retrouver les raccourcis par défaut
set -o emacs
si vous utilisez zsh
Raccourci clavier | Action |
---|---|
Echap+H | Aide de la commande en cours de saisie |
Echap+Q | Efface la ligne courante, mais la ré-affichera une fois la commande courante terminée(Ma préférée ) |
SHELL | COMMENTAIRES |
---|---|
bash | Le shell utilisateur par défaut sous Débian |
dash | Le shell système par défaut sous Débian |
zsh | Un shell utilisateur très paramétrable (Le SHELL ULTIME :)) |