La ligne de commande
Voici une première approche de la ligne de commande du Shell Linux. On apprendra ici à manipuler les commandes du système et des alias des commandes.
1. La ligne de commande
- La ligne de commande est un moyen simple d’interagir avec un ordinateur.
- Le shell interprète les commandes tapées au clavier.
- Le prompt, ou l’invite de commande, qui se termine par un
$
pour un utilisateur standard ou un#
pour l’administrateur du système (désigné root), indique que le shell attend les commandes de l’utilisateur. - Le shell est également un langage de programmation que l’on peut utiliser pour lancer des tâches automatiquement.
- Les programmes shell sont appelés par des scripts.
1.1. Définitions
- Le terminal = l’environnement d’entrée/sortie
- La console = terminal physique
Shell =
- “Interpréteur” de commande : lancer des commandes,
- Environnement : confort de l’utilisateur, sécurité
- Langage de programmation : fonctionnalités
- Traitement du texte
- Interface avec le noyau
- …
En informatique, le shell est le moyen le plus simple d’interagir avec le système d’exploitation. Sur Microsoft Windows, selon les versions, le shell est appelé par les commandes CMD.EXE
ou COMMAND.COM
, sans oublier powershell.exe
. Sur Linux ou Unix, il existe une grande variété de shells comme sh
, bash
, ksh
, etc. Un shell accepte des commandes frappées à partir d’une invite de commandes (l’entrée standard) et les exécute, généralement en temps réel; l’affichage des résultats est rendu en général sur un écran (la sortie standard).
1.2. Types de shells
On obtient la liste des shells présents sur le système en affichant le fichier /etc/shells
:
cat /etc/shells
-
sh
: Bourn Shell, historique, standard, “portable” -
csh
/tcsh : C Shell -
ksh
: Korn Shell -
bash
: Bourn Again Shell Linux, le plus utilisé
1.3. Normes
1.4. Bourne Again SHell
Le projet GNU offre des outils pour l’administration de système de type UNIX qui sont libres et qui respectent les standards UNIX.
Bash est un Shell compatible avec sh qui incorpore des spécificités utiles du Korn Shell (ksh) et du C Shell (csh). Il est censé se conformer à la norme IEEE POSIX P1003.2/ISO 9945.2 Standards des Shell et Outils. Il offre des améliorations fonctionnelles par rapport à sh pour la programmation et l’utilisation interactive.
1.5. Le shell interactif
Quand on obtient un terminal avec une ligne de commande, on se situe dans un environnement encadré par un programme “shell” qui a créé un processus sur le système. Il permet notamment d’exécuter des commandes.
1.6. Commande echo
ECHO(1) Manuel de l'utilisateur Linux ECHO(1)
NOM
echo - Afficher une ligne de texte
SYNOPSIS
echo [-neE] [message ...]
echo {--help,--version}
DESCRIPTION
Cette page de manuel documente la version GNU de echo.
La plupart des shells ont une commande intégrée ayant le même nom et
les mêmes fonctionnalités.
echo écrit chaque message sur la sortie standard, avec une espace entre
chacun d'eux, et un saut de ligne après le dernier.
La commande echo
permet d’afficher du texte à l’écran :
[francois@c7li ~]$ echo "affiche ce texte"
affiche ce texte
[francois@c7li ~]$
1.7. Prompt, Invite de commande
[francois@c7li ~]$
On remarque le “prompt”, “l’invite de commande” composée de :
-
francois
l’utilisateur connecté -
@
séparateur -
c7li
nom de l’ordinateur -
~
“titld” qui indique le dossier utilisateur comme dossier courant -
$
qui indique le type de connexion
Cette configuration de l’environnement est chargée sous forme de script au moment de la connexion de l’utilisateur.
1.8. Commande ls
LS(1) Manuel de l'utilisateur Linux LS(1)
NOM
ls, dir, vdir - Afficher le contenu d'un répertoire
SYNOPSIS
ls [options] [fichier...]
dir [fichier...]
vdir [fichier...]
Options POSIX : [-CFRacdilqrtu1] [--]
Options GNU (forme courte) : [-1abcdfgiklmnopqrstuvwxABCDFGHLNQRSUX]
[-w cols] [-T cols] [-I motif] [--full-time] [--show-control-chars]
[--block-size=taille] [--format={long,verbose,commas,across,verti‐
cal,single-column}] [--sort={none,time,size,extension}]
[--time={atime,access,use,ctime,status}] [--color[={none,auto,always}]]
[--help] [--version] [--]
DESCRIPTION
La commande ls affiche tout d'abord l'ensemble de ses arguments
fichiers autres que des répertoires. Puis ls affiche l'ensemble des
fichiers contenus dans chaque répertoire indiqué. Si aucun argument
autre qu'une option n'est fourni, l'argument « . » (répertoire en
cours) est pris par défaut.
2. Entrer des commandes dans l’invite
Pour entrer des commandes dans le shell, il faut :
- une commande valide (dans le PATH ou précisée par un chemin)
suivie éventuellement d’une ou plusieurs options notées
- par un “dash”, le tiret, “
-
” en notation abrégée ou un double “dash”, double tiret, “--
” en notation extensive, - des arguments,
- et un retour chariot qui accepte la ligne entrée.
2.1. Syntaxe des commandes
Chaque commande dispose de sa propre syntaxe :
Sans options :
ls
Avec une option :
ls -l
Avec plusieurs options :
ls -l -a -h -t
ls -laht
2.2. Options et arguments
Options “double dash” :
ls --all
ls --help
Donner un argument :
ls -l /home
Donner plusieurs arguments :
ls -l /home /var
2.3. Commandes hors du PATH
A titre d’exemple la commande “ls
” s’exécute car elle est située dans un des chemins indiqués dans la variable d’environnment PATH. On peut afficher ces chemins par défaut pour les fichiers exécutables via cette commande :
echo $PATH
peut afficher ce résultat :
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
On peut exécuter le logiciel directement à partir de l’emplacement absolu :
/bin/ls
On peut exécuter le logiciel directement à partir de l’emplacement relatif :
cd /bin
./ls -l ls
2.4. Entrer des commandes
On peut entrer des commandes sur plusieurs lignes :
ls /var
ls /home
ls /usr
Ou on peut entrer des commandes sur une seule ligne on peut séparer les commandes par un “semicolon”, point-virgule, “;
” :
ls /var; ls /home; ls /usr
2.5. Séquences de commandes
Si les arguments diffèrent pour une même commande, on peut créer une boucle et profiter de variables :
for arg in /home /var /usr
do
echo "visualisation : " $arg
ls -a $arg
done
Ou encore en une seule ligne
for arg in /home /usr /var; do ls -la $arg; done
Mais cela était inutile :
ls /home /var /usr
2.6. Codes de retour
La variable spéciale $?
contient le code de retour d’exécution de la commande précédente.
Une commande qui s’exécute avec succès rend un retour valorisé à 0
. Par exemple la commande true
rend toujours ce code de retour :
true ; echo $?
Une commande qui s’échoue rend un retour valorisé à 1
. Par exemple la commande false
rend toujours ce code de retour :
false ; echo $?
2.7. Exécutions conditionnelles de base
&&
et ||
sont des séparateurs de commandes conditionnels.
Opérateur &&
Voyez-vous même :
true && echo la commande précédente a réussi
Ecrit le message “la commande précédente a réussi” si la première commande est exécutée sans erreur.
Par exemple sous Debian/Ubuntu :
sudo apt-get update && sudo apt-get -y upgrade
Par exemple sous Centos :
sudo yum -y install epel-release && sudo yum repolist
Opérateur ||
Voyez-vous même :
false || echo la commande précédente a échoué
commande1 || commande2
Ecrit le message “la commande précédente a échoué” si la première commande a échoué.
Par exemple :
sudo apt-get update || sudo yum -y update
2.7. Historique des commandes
Pour voir la liste des commandes que vous avez validées, vous pouvez utiliser la commande interne de bash history
:
history
La commande history
liste les commandes en cache ainsi que celles sauvées dans ~/.bash_history
. Lorsque l’utilisateur quitte le shell, les commandes en cache sont inscrites dans ce fichier.
Vous pouvez récupérer les commandes tapées en utilisant les flèches directionnelles (haut et bas) de votre clavier.
La commande history -c
efface l’historique de la session courante.
Historique : raccourcis emacs
Vous pouvez également utiliser des raccourcis emacs qui vous permettent d’exécuter et même de modifier ces lignes.
Par exemple Ctrl-p
/Ctrl-n
pour ligne précédente/ligne suivante ou Ctrl-a
/ Ctrl-e
pour début/fin de ligne.
Pour en savoir plus sur Emacs : https://www.tuteurs.ens.fr/unix/editeurs/emacs.html
Historique : raccourcis bang
Les raccourcis bang reprennent les commandes précédentes, par exemple :
ls -a
^ls^ps
!!
history
!2
2.8. Tabulation
Selon la distribution la touche de tabulation offre des possibilités d’auto-complétion.
L’auto-complétion de certains binaires non natifs demandent l’installation et la configuration de scripts ou paquets supplémentaires.
2.9. Substitution de commandes
La commande uname
permet de connaître la version du noyau courant. Comment la substituer dans une variable ?
uname -a
Linux c7li 3.10.0-327.4.5.el7.x86_64 #1 SMP Mon Jan 25 22:07:14 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Mise en variable de la sortie de la commande de deux manières :
system=$(uname -a)
ou
system=`uname -a`
Vérification.
echo $system
Linux c7li 3.10.0-327.4.5.el7.x86_64 #1 SMP Mon Jan 25 22:07:14 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
2.10. Alias
Un alias est une autre manière de substituer des commandes.
Pour obtenir la liste des alias :
alias
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
Créer un alias :
alias zozo="ls -a"
alias
zozo
Les alias se chargent dans le profil de connexion de l’utilisateur.