Differences between revisions 18 and 20 (spanning 2 versions)
Revision 18 as of 2010-07-24 19:27:26
Size: 13198
Comment:
Revision 20 as of 2010-07-24 19:38:07
Size: 13786
Comment:
Deletions are marked like this. Additions are marked like this.
Line 348: Line 348:

== Autres commandes ==

=== alias ===

Vous pouvez créer des alias pour des commandes nécessitant beaucoup de paramètres. La syntaxe d''''alias''' est :


{{{
alias monprog='commande [options]{paramètres}'
}}}

'''alias''' tout seul donne la liste des alias déjà définis.

=== Auto-complètement de commandes ===

En appuyant sur '''TAB''', le shell complète les commandes que vous avez commencé à taper.

=== << est une redirection de EOF (fin de fichier) ===

Par exemple
{{{
cat << stop
}}}

accepte des entrées jusqu'à ce que "stop" soit tapé.

État : {traduc} (50% environ de fait)

Retour au document principal

La ligne de commande

Pré-requis

  • Aucun

Objectifs

  • Introduction au shell bash et aux concepts de base comme l'exécution interactive de programmes
  • Distinguer les variables locales et globales (exportées)
  • Manipuler les données à partir des tubes et des autres opérateurs de redirection
  • Comprendre les caractères de substitution

Présentation

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 $ ou un # pour l'administrateur, indique que le shell attend les commandes de l'utilisateur.

Le shell est également un langage de programmation qu'on peut utiliser pour lancer des tâches automatiquement. Les programmes shell sont appelés des scripts.

Shells les plus courants

Le Bourne shell

/bin/sh

Le "Bourne again" shell

/bin/bash

Le Korn shell

/bin/ksh

Le C shell

/bin/csh

Tom's C shell

/bin/tcsh

le programme du LPI se concentre essentiellement sur le Bash, puisque c'est l'un des shells les plus couramment utilisés.

Le shell interactif

Les commandes shell suivent généralement la syntaxe suivante :

commande [options] {paramètres}

Afficher du texte à l'écran

Le bash utilise la commande echo pour afficher du texte à l'écran :

echo “Voici une courte ligne.”

Chemins relatif et absolu

Le shell interprète le premier "mot" de toute chaîne de caractère donnée comme une commande. Si cette chaîne est un chemin relatif ou absolu vers un fichier exécutable, alors le programme est exécuté. Si ce premier mot n'est pas précédé de /, alors le shell recherchera dans les répertoires définis dans la variable PATH et tentera de lancer la première commande qui correspondra à la chaîne.

Par exemple, si la variable PATH contient les répertoires /bin et /usr/bin, alors le système ne trouvera pas la chaîne xeyes puisque xeyes se trouve dans /usr/X11R6/bin/xeyes. Dans ce cas, vous devez entrer le chemin absolu de la commande :

/usr/X11R6/bin/xeyes

Mais on peut également utiliser le chemin relatif. Par exemple, si l'utilisateur est dans le répertoire où se trouve le programme xeyes, il peut taper :

./xeyes

Variables

Les variables du shell sont équivalentes aux variables utilisées dans les langages de programmation. Les noms de variables ne doivent contenir que des caractères alphanumériques. Par exemple, CREDIT=300 assigne tout simplement la valeur 300 à la variable nommée CREDIT.

  1. initialiser une variable : Nom_Variable=valeur (sans espace !)

  2. appeler une variable : $Nom_Variable

CREDIT=300
echo $CREDIT

On peut supprimer la valeur d'une variable avec la commande unset.

export, set et env

Il y a deux types de variables : les variables locales et les variables globales (exportées).

Les variables locales ne sont accessibles que sur le shell actif. Les variables exportées ou globales sont accessibles à la fois par le shell actif et par tous les processus fils lancés à partir de ce shell.

Les commandes set et env listent les variables définies.

Les commandes set et env

set

Liste toutes les variables

env

Liste les variables exportées

Une variable globale est globale dans le sens où elle est accessible par tous les processus fils.

Variable locale

Variable locale

Parent

Fils

Parent

Fils

VAR=val

VAR=?

VAR=val

VAR=val

Exemple : exportez la variable CREDIT puis testez si elle est listée par set ou env.

export CREDIT
env | grep CREDIT

Lancez un nouveau shell (processus fils) (NdT : en tapant bash) et vérifiez que la variable CREDIT est accessible. Peut-on lancer n'importe quel SHELL et être sûr que la variable CREDIT est toujours déclarée ?

Liste de variables courantes pré-définies :

Variable pré-définie

Signification

DISPLAY

Utilisé par X pour identifié iù lancer une application cliente

HISTFILE

Chemin vers le fichier utilisateur .bash_history

HOME

Répertoire personnel de l'utilisateur

LOGNAME

Identifiant de connexion de l'utilisateur

PATH

Liste des répertoires utilisés par le shell pour exécuter des programmes quand une commande est entrée dans chemin

PWD

Répertoire de travail actuel

SHELL

Shell utilisé (bash dans la plupart des distributions Linux

TERM

 Émulation de terminal utilisée

Variables spéciales

Les variables suivantes sont relatives à la gestion des processus :

Variable

Signification

$!

PID du dernier processs fils

$$

PID du shell actif

$?

valeur de sortie de la dernière commande : 0 = succès, 1 sinon

Entrées, sorties et redirections

Les processus UNIX ouvrent trois descripteurs de fichiers standards (NdT : correspondant aux flux standards) qui permettent de traiter les entrées et sorties. Ces descripteurs standards peuvent être redéfinis pour chaque processus. Dans la plupart des cas, le descripteur stdin (entrée standard) est le clavier, et les deux descripteurs de sortie, stdout (sortie standard) et stderr (l'erreur standard), sont l'écran.

Un processus et ses 3 descripteurs de fichiers

STDIN < ------ PROCESSUS ---- >
                   |     ---- >>  STDOUT
                   |     ---- | 
                   |
                  2>
                STDERR

Valeurs numériques pour stdin, stdout et stderr

flux

Valeur numérique

stdin

0

stdout

1

stderr

2

Redirection de la sortie standard

programme > fichier

Les données vont de gauche à droite.

fdisk –l > partitions.txt  

Ceci lance fdisk et redirige la sortie vers le fichier partitions.txt. La sortie n'est pas visible a l'écran. Notez que le shell lit cette commande à partir de la droite : le fichier partitions.txt est d'abord créé s'il n'existait pas auparavant, écrasé dans le cas contraire car l'opérateur ">" est utilisé.

L'opérateur ">>" ajoute la sortie standard à un fichier.

Redirection de la sortie standard :

          ----  > ----
PROCESSUS ---- >> ---- FICHIER / PÉRIPHÉRIQUE
          ---- 1> ----

Redirection de l'entrée standard

programme < fichier

Dans ce cas, les données vont de droite à gauche. L'opérateur "<" ne peut être utilisé qu'avec stdin donc on ne peut pas l'utiliser avec les flux de sortie.

Si le fichier contient les instructions p, m et q (une instruction par ligne), alors dans l'exemple suivant fdisk affichera la table des partitions de /dev/hda, puis affichera l'aide puis quittera :

fdisk /dev/hda  < instructions 

Redirection de l'entrée standard :

PROCESSUS ---- <  ---- FICHIER / PÉRIPHÉRIQUE
          ---- 0< ----

Redirection de l'erreur standard

programme 2> fichier_erreur

stdin, stdout et stderr sont représentés respectivement par 0, 1 et 2. Cela nous permet de choisir le flux d'erreur standard :

find / 2> /dev/null

Redirection de l'erreur standard :

PROCESSUS ---- 2> ---- FICHIER / PÉRIPHÉRIQUE

Les tubes

programme1 | programme2

Les tubes sont représentés par l'opérateur "|". Les données vont de gauche à droite. La figure suivante indique comment la sortie standard su premier processus est redirigée vers l'entrée standard du second processus.

Redirection à partir d'un tube :

PROCESSUS1 (stdout) ---- | ---- (stdin) PROCESSUS2

Exemple :

cat /var/log/messages | less                       

Note : Les redirections de sortie multiples sont analysées de droite à gauche, ainsi les commandes suivantes ne sont pas équivalentes :

commande  2>&1  > fichier
commande  >fichier  2>&1

La commande tee

commande | tee FICHIER

La commande tee est utilisé après un tube et prend comme paramètre un nom de fichier. La sortie standard de la commande précédente est alors écrite dans le fichier (NdT : comme avec ">") mais tee laisse le flux vers la sortie standard. La sortie standard est dupliquée.

Méta-caractères et guillemets

Les méta-caractères ont un sens spécial pour le shell. Ils sont la plupart du temps utilisés comme jokers, pour correspondre à plusieurs noms de fichiers ou de répertoires en utilisant un minimum de lettres.

Les caractères d'entrée (<), de sortie (>) et le tube (|) sont également des caractères spéciaux ainsi que le dollar ($) utilisé pour les variables. Nous ne les listerons pas ici, mais notez que ces caractères sont rarement utilisés pour nommer des fichiers standards.

Caractères génériques ou jokers

  • Le caractère * remplace n'importe quel nombre de caractères :

ls  /usr/bin/b*

Liste tous les programmes commençant par "b".

  • Le caractère ? remplace n'importe quel caractère unique :

ls  /usr/bin/?b*

Liste tous les programmes ayant un "b" pour seconde lettre.

  • [] est utilisé pour définir une plage de valeurs :

ls  a[0-9]

liste tous les fichiers commençant par un "a" suivis d'un chiffre en seconde position.

ls  [!Aa]*

liste tous les fichiers qui ne commencent pas par un "a" ni par un "A"

  • {chaîne1,chaîne2}; même si ce n'est pas simplement un joker de nom de fichiers, on peut l'utiliser pour filtrer des noms de fichiers :

ls  index.{htm,html}

Guillemets et caractères d'échappement

On peut annuler la signification des jokers en utilisant des caractères d'échappement, qui sont également des caractères génériques.

L'antislash (\), qu'on appelle le caractère d'échappement, annule le sens de tous les caractères génériques, en forçant le shell à les interpréter littéralement.

Les guillemets simples, ou apostrophes (' ') annule le sens de tous les caractères génériques sauf l'antislash.

Les guillemets (doubles) (" ") sont les guillemets faibles mais annulent la plupart des méta-caractères entourés à l'exception du tube (|), de l'antislash (\) et des variables ($var).

Les guillemets inversés ̀`

Les guillemets inversés exécutent la commande entourée. L'exemple suivant définit la variable TIME à partir de la commande date.

TIME="La date d'aujourd'hui est le `date +%a:%d:%b`”
echo $TIME
La date d'aujourd'hui est le mar.:06:juil.

Pour exécuter des commandes, on peut également utiliser $(). La commande sera exécutée et traitée comme une variable.

TIME=$(date)

L'historique des commandes

Pour voir la liste des commandes que vous avez tapé, vous pouvez utiliser la commande interne de bash history.

history
1 ls
2 grep   500 /etc/passwd

history liste les commandes en cache ainsi que celles sauvées dans ~/.bash_history. Lorsque que l'utilisateur quitte le shell, les commandes en cache sont inscrites dans ~/.bash_history.

Vous pouvez récupérer les commandes tapées en utilisant les flèches directionnelles (haut et bas) de votre clavier. Vous pouvez également utiliser des raccourcis emacs qui vous permettent d'exécuter et même de modifier ces lignes.

Raccourcis clavier Emacs pour l'historique des commandes :

Ctrl+p

Ligne précédente (équivalent à la flèche haute)

Ctrl+n

Ligne suivante (Next) (= flèche basse)

Ctrl+b

Aller au caractère précédent sur la ligne (Back) (= flèche gauche)

Ctrl+f

Aller au caractère suivant (Forward) (=flèche droite)

Ctrl+a

Aller au début de la ligne (= touche Orig)

Ctrl+e

Aller en fin de ligne (End) (= touche Fin)

Le point d'exclamation ! peut être utilisé pour relancer une commande.

Exemple :

!x                         lance la dernière commande de l'historique commençant par un "x"
!2                         lance la commande n°2 de l'historique
!-2                        lance l'avant dernière commande
!!                         lance la dernière commande
^chaine1^chaine2           lance la dernière commande en remplaçant chaine1 par chaine2

Autres commandes

alias

Vous pouvez créer des alias pour des commandes nécessitant beaucoup de paramètres. La syntaxe d'alias est :

alias monprog='commande [options]{paramètres}'

alias tout seul donne la liste des alias déjà définis.

Auto-complètement de commandes

En appuyant sur TAB, le shell complète les commandes que vous avez commencé à taper.

<< est une redirection de EOF (fin de fichier)

Par exemple

cat << stop

accepte des entrées jusqu'à ce que "stop" soit tapé.

Heberge par Ikoula