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.