2.1 Leçon 1
Certification : |
Linux Essentials |
---|---|
Version: |
1.6 |
Thème : |
2 Trouver son Chemin sur un Système Linux |
Objectif : |
2.1 Principes de Base de la Ligne de Commande |
Leçon : |
1 sur 2 |
Introduction
Les distributions Linux modernes disposent d’un large éventail d’interfaces graphiques, mais un administrateur devra toujours savoir comment travailler avec la ligne de commande, ou shell comme on l’appelle. Le shell est un programme qui permet une communication en mode texte entre le système d’exploitation et l’utilisateur. Il s’agit généralement d’un programme en mode texte qui lit les entrées de l’utilisateur et les interprète comme des commandes du système.
Il existe différents shells sur Linux, en voici quelques-uns :
-
Bourne-again shell (Bash)
-
C shell (csh ou tcsh, the enhanced csh)
-
Korn shell (ksh)
-
Z shell (zsh)
Sous Linux, le plus courant est le shell Bash. C’est également celui qui sera utilisé ici dans les exemples ou les exercices.
Lorsqu’on utilise un shell interactif, l’utilisateur entre des commandes à une invite de commande (prompt). Pour chaque distribution Linux, l’invite par défaut peut être un peu différente, mais elle suit généralement cette structure :
username@hostname current_directory shell_type
Sur Ubuntu ou Debian GNU/Linux, l’invite pour un utilisateur régulier ressemblera probablement à ceci :
carol@mycomputer:~$
L’invite du super-utilisateur ressemblera à ceci :
root@mycomputer:~#
Sur CentOS ou Red Hat Linux, l’invite pour un utilisateur régulier ressemblera plutôt à ceci :
[dave@mycomputer ~]$
Et l’invite du super-utilisateur ressemblera à ceci :
[root@mycomputer ~]#
Expliquons chaque élément de la structure :
username
-
Nom de l’utilisateur qui exécute le shell
hostname
-
Nom de l’hôte sur lequel tourne le shell. Il existe également une commande
hostname
, avec laquelle vous pouvez afficher ou définir le nom d’hôte du système. current_directory
-
Le répertoire dans lequel le shell se trouve actuellement. Un
~
signifie que le shell se trouve dans le répertoire personnel de l’utilisateur courant. shell_type
-
$
indique que le shell est exécuté par un utilisateur régulier.#
indique que le shell est exécuté par le super-utilisateurroot
.
Comme nous n’avons pas besoin de privilèges spéciaux, nous utiliserons une invite non privilégiée dans les exemples suivants. Par souci de concision, nous utiliserons simplement le $
comme invite.
Structure de la Ligne de Commande
La plupart des lignes de commandes suivent la même structure de base :
commande [option(s)/parametre(s)...] [argument(s)...]
Prenons la commande suivante comme exemple :
$ ls -l /home
Expliquons l’objectif de chaque composante :
- commande
-
Programme que l’utilisateur va exécuter -
ls
dans l’exemple ci-dessus. - option(s)/parametre(s)
-
Un “interrupteur” qui modifie le comportement de la commande d’une manière ou d’une autre, comme
-l
dans l’exemple ci-dessus. Les options sont accessibles sous une forme courte et une forme longue. Par exemple,-l
est identique à--format=long
.Il est possible de combiner plusieurs options, pour la forme courte les lettres peuvent généralement être collées. Par exemple, les commandes suivantes font toutes la même chose :
$ ls -al $ ls -a -l $ ls --all --format=long
- argument(s)
-
Les données supplémentaires requises par le programme, comme un nom de fichier ou un chemin d’accès, comme
/home
dans l’exemple ci-dessus.
La seule partie obligatoire de cette structure est la commande elle-même. En général, tous les autres éléments sont facultatifs, mais un programme peut exiger que certaines options, paramètres ou arguments soient spécifiés.
Note
|
La plupart des commandes affichent un bref aperçu des commandes disponibles lorsqu’elles sont exécutées avec le paramètre |
Types de Comportement des commandes
Le shell supporte deux types de commandes :
- Interne
-
Ces commandes font partie du shell lui-même et ne sont pas des programmes séparés. Il existe environ 30 commandes de ce type. Leur but principal est d’exécuter des tâches à l’intérieur du shell (par exemple
cd
,set
,export
). - Externe
-
Ces commandes résident dans des fichiers individuels. Ces fichiers sont généralement des programmes ou des scripts binaires. Lorsqu’une commande qui n’est pas intégrée à un shell est exécutée, le shell utilise la variable
PATH
pour rechercher un fichier exécutable portant le même nom que la commande. En plus des programmes qui sont installés avec le gestionnaire de paquets de la distribution, les utilisateurs peuvent également créer leurs propres commandes externes.
La commande type
indique le type d’une commande spécifique :
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Insertion des guillemets (Quoting)
En tant qu’utilisateur de Linux, vous devrez créer ou manipuler des fichiers ou des variables de différentes manières. C’est facile lorsque vous travaillez avec des noms de fichiers courts et des valeurs uniques, mais cela devient plus compliqué lorsque, par exemple, des espaces, des caractères spéciaux et des variables sont impliqués. Les shells offrent une fonction appelée "quoting" qui encapsule ces données en utilisant différents types de guillemets (" ", ' '). Dans Bash, il existe trois types de guillemets :
-
Guillemets doubles
-
Guillemets simples
-
Caractères d’échappement
Par exemple, les commandes suivantes n’agissent pas de la même manière en raison des types de guillemets :
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
La ligne avec |
Guillemets doubles
Les guillemets doubles indiquent au shell de prendre le texte entre les guillemets ("...") comme des caractères normaux. Tous les caractères spéciaux perdent leur signification, sauf le $
(signe de dollar), \
(barre oblique inversée) et `
(guillemet inverse). Cela signifie que les variables, la substitution de commandes et les fonctions arithmétiques peuvent toujours être utilisées.
Par exemple, la substitution de la variable $USER
n’est pas affectée par les guillemets doubles :
$ echo Je suis $USER Je suis tom $ echo "Je suis $USER" Je suis tom
Le caractère espace, en revanche, perd sa signification en tant que séparateur d’arguments :
$ touch nouveau fichier $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 fichier -rw-rw-r-- 1 tom students 0 Oct 8 15:18 nouveau $ touch "nouveau fichier" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 nouveau fichier
Comme vous pouvez le voir, dans le premier exemple, la commande touch crée deux fichiers individuels, la commande interprète les deux chaînes de caractères comme des arguments individuels. Dans le second exemple, la commande interprète les deux chaînes comme un seul argument, elle ne crée donc qu’un seul fichier. Il est toutefois préférable d’éviter le caractère espace dans les noms de fichiers. À la place, on peut utiliser un trait de soulignement (_
) ou un point (.
).
Guillemets simples
Les guillemets simples n’ont pas les exceptions des guillemets doubles. Elles révoquent toute signification particulière de chaque caractère. Prenons l’un des premiers exemples ci-dessus :
$ echo Je suis $USER Je suis tom
En appliquant les guillemets simples, vous obtenez un résultat différent :
$ echo 'Je suis $USER' Je suis $USER
La commande affiche maintenant la chaîne exacte sans substituer la variable.
Caractères d’échappement
Nous pouvons utiliser des caractères d’échappement pour supprimer les significations spéciales des caractères de Bash. Revenons à la variable d’environnement $USER
:
$ echo $USER carol
On voit que par défaut, le contenu de la variable est affiché dans le terminal. Cependant, si nous devions faire précéder le signe du dollar d’une barre oblique inversée (\
), la signification particulière du signe du dollar serait alors annulée. Cela empêchera Bash d’étendre la valeur de la variable au nom d’utilisateur de la personne qui exécute la commande, mais interprétera le nom de la variable littéralement :
$ echo \$USER $USER
Si vous vous souvenez bien, nous pouvons obtenir des résultats similaires en utilisant les guillemets simples, qui affichent le contenu littéral de ce qui se trouve entre les guillemets simples. Cependant, le caractère d’échappement fonctionne différemment en demandant à Bash d’ignorer toute signification particulière que le caractère qu’il précède pourrait posséder.
Exercices Guidés
-
Séparez les lignes ci-dessous en composantes : commande, option(s)/paramètre(s) et argument(s) :
-
Exemple:
cat -n /etc/passwd
Commande :
cat
Option :
-n
Argument :
/etc/passwd
-
ls -l /etc
Commande :
Option :
Argument :
-
ls -l -a
Commande :
Option :
Argument :
-
cd /home/user
Commande :
Option :
Argument :
-
-
Trouvez les types de commandes suivantes :
Exemple:
pwd
Commande interne
mv
Commande Externe
cd
cat
exit
-
Résolvez les commandes suivantes qui utilisent les guillemets :
Exemple:
echo "$HOME est mon répertoire personnel"
echo /home/user est mon répertoire personnel
touch "$USER"
touch 'touch'
Exercices d’Exploration
-
Avec une seule commande et en utilisant l’expansion des accolades dans Bash (voir la page de manuel pour Bash), créez 5 fichiers numérotés de 1 à 5 avec le préfixe
jeu
(jeu1
,jeu2
, …). -
Supprimez les 5 fichiers que vous venez de créer avec une seule commande, en utilisant un caractère spécial différent (voir Pathname Expansion dans les pages de manuel Bash).
-
Existe-t-il d’autres moyens de faire interagir deux commandes entre elles ? Quels sont-ils ?
Résumé
Dans cet atelier, vous avez appris :
-
Les concepts du shell Linux
-
Qu’est-ce que le shell Bash
-
La structure de la ligne de commande
-
Une introduction à l’insertion des guillemets
Commandes utilisées dans les exercices :
bash
-
Le shell le plus populaire sur les ordinateurs Linux.
echo
-
Affichage de texte sur le terminal.
ls
-
Listage du contenu d’un répertoire.
type
-
Montrer comment une commande spécifique est exécutée.
touch
-
Créer un fichier vide ou mettre à jour la date de modification d’un fichier existant.
hostname
-
Afficher ou modifier le nom d’hôte d’un système.
Réponses aux Exercices Guidés
-
Séparez les lignes ci-dessous en composantes : commande, option(s)/paramètre(s) et argument(s) :
-
Exemple:
cat -n /etc/passwd
Commande :
cat
Option :
-n
Argument :
/etc/passwd
-
ls -l /etc
Commande :
ls
Option :
-l
Argument :
/etc
-
ls -l -a
Commande :
ls
Option :
-l -a
Argument :
-
cd /home/user
Commande :
cd
Option :
Argument :
/home/user
-
-
Trouvez les types des commandes suivantes :
cd
Commande interne
cat
Commande externe
exit
Commande interne
-
Résolvez les commandes suivantes qui utilisent des guillemets :
touch "$USER"
tom
touch 'touch'
Crée un fichier nommé
touch
Réponses aux Exercices d’Exploration
-
Avec une seule commande et en utilisant l’expansion des accolades dans Bash (voir la page de manuel pour Bash), créez 5 fichiers numérotés de 1 à 5 avec le préfixe
jeu
(jeu1
,jeu2
, …).Des plages peuvent être utilisées pour exprimer les nombres de 1 à 5 dans une même commande :
$ touch jeu{1..5} $ ls jeu1 jeu2 jeu3 jeu4 jeu5
-
Supprimez les 5 fichiers que vous venez de créer avec une seule commande, en utilisant un caractère spécial différent (voir Pathname Expansion dans les pages de manuel Bash).
Comme tous les fichiers commencent par
jeu
et se terminent par un seul caractère (un nombre de 1 à 5 dans ce cas),?
peut être utilisé comme caractère spécial pour le dernier caractère du nom de fichier :$ rm jeu?
-
Existe-t-il d’autres moyens de faire interagir deux commandes entre elles ? Quels sont-ils ?
Oui, une commande peut, par exemple, écrire des données dans un fichier qui est ensuite traité par une autre commande. Linux peut également collecter la sortie d’une commande et l’utiliser comme entrée pour une autre commande. C’est ce qu’on appelle piping et nous en apprendrons davantage à ce sujet dans une prochaine leçon.