1. La ligne de commande

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
  • ...

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 : 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 si 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 ~]$

On remarque le prompt composé 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.7. 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
/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 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

2.6. Exécutions conditionnelles

&& et || sont des séparateurs de commandes conditionnels.

Opérateur &&

$ commande1 && commande2

exécute commande2 si commande1 est exécuté sans erreur. Par exemple sous Debian/Ubuntu :

# apt-get update && apt-get -y upgrade
Par exemple sous Centos :

# yum -y install epel-release && yum update

Opérateur ||

 $ commande1 || commande2

exécute commande2 si commande1 est exécuté avec erreur.

Par exemple :

# apt-get update || 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.
  • 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 : http://www.tuteurs.ens.fr/unix/editeurs/emacs.html

Historique : raccourcis bang

Par exemple :

$ ls -a
$ ^ls^ps
ps -a
$ !!
$ history
$ !2

2.8. Tabulation

  • Selon la distribution la touche de tabulation offre des possibilités d’auto-complétion.

2.9. Substitution de commandes

  • La commande uname permet de connaître la version du noyau courant. Comment la substituer ?
$ 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
$ system=$(uname -a)
$ 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.
  • 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

Commentaires