Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Ubuntu
  3. Utiliser la ligne de commandes
Extrait - Ubuntu Administration d'un système Linux (7e édition)
Extraits du livre
Ubuntu Administration d'un système Linux (7e édition) Revenir à la page d'achat du livre

Utiliser la ligne de commandes

Le shell

1. Rôle

Les concepteurs d’Ubuntu ont fait de très gros efforts afin de rendre l’utilisation de Linux la plus simple possible. La complexité de l’administration sur la version Desktop est masquée par une interface agréable et vous n’avez plus qu’à utiliser vos logiciels sans avoir à effectuer des manipulations complexes.

Il n’est pourtant pas possible de se proclamer administrateur Linux (ou Ubuntu) sans savoir utiliser la ligne de commandes via le shell. Vous avez vu qu’Ubuntu Server n’a pas d’interface graphique, le passage par la console est alors obligatoire.

La console est accessible depuis n’importe quel terminal avec les touches [F3] à [F6].

 Appuyez sur [Ctrl][Alt][F3], par exemple. La session graphique disparaît. Vous vous retrouvez devant une fenêtre de login en mode console.

images/05RI06v7.png

Elle permet de se retrouver dans un environnement semblable à celui de la version Server.

Appuyez sur [Alt][F2] pour retourner sur le terminal sur lequel l’environnement graphique a été chargé, ou sur [Alt][F1] pour retourner sur le terminal de login en mode graphique.

Il est également possible d’émuler une console depuis le menu Afficher les applications, en cliquant sur Terminal. Celui-ci s’ouvre alors :

images/05RI02v7.png

L’utilisateur a alors accès à l’interpréteur de commandes, qui permet d’exécuter des instructions saisies au clavier ou au sein d’un script, et d’en retourner les résultats. L’interpréteur est aussi appelé le shell.

Il existe plusieurs shells, chacun disposant de spécificités propres mais Ubuntu a choisi le shell le plus courant sur Linux, le bash (Bourne Again SHell).

La liste des shells actuellement présents sur votre installation Linux est présente dans le fichier...

L’éditeur vi

L’éditeur Linux/Unix par défaut se nomme vi (visual editor). Il n’est pas le plus ergonomique mais, contrairement à nano, il est disponible sur tous les Linux/Unix. Il est possible d’installer une version améliorée de vi, vim, par la commande sudo apt install vim.

vi [options] Fichier [Fichier2 ...] 

vi n’a pas de menus, pas d’interface graphique et n’est pas intuitif. Il faut connaître par cœur des raccourcis-clavier. Mais une fois maîtrisé, vi se révèle rapide et pratique, au point qu’on est plus efficace qu’avec des éditeurs texte.

La suite vous présente les commandes de base de vi, qui suffisent dans 99 % des cas.

1. Fonctionnement

Il y a trois modes de fonctionnement :

  • Mode commande : les caractères saisis représentent des commandes. On y accède en appuyant sur [Echap]. Chaque touche ou combinaison de touches déclenche une action (suppression de lignes, insertions, déplacement, copier, coller, etc.).

  • Mode saisie : c’est la saisie de texte classique.

  • Mode ligne de commande : une ligne en bas d’écran permet de saisir des commandes spéciales, validée avec la touche [Entrée]. On y accède en appuyant, en mode commande, sur la touche [:].

Quand vous lancez vi, il est par défaut en mode commande. Pour commencer à taper du texte, il faut taper une commande d’ajout ([a]) ou d’insertion ([i]) : [Echap]+[i] permet de saisir du texte (passage en mode commande + insertion). Pour quitter, passez par le mode ligne de commande : [Echap]+[:], [q] + [Entrée].

Si vous êtes perdu, dans tous les cas et quoi qu’il arrive, un appui sur [Echap] revient toujours en mode commande.

2. Commandes de base

a. Saisie

Les actions suivantes sont en mode commande. Elles...

Gestion des fichiers

1. Système de fichiers FHS

Un système de fichiers, appelé communément filesystem ou FS, définit l’organisation des données sur un support de stockage, c’est-à-dire comment sont gérés et organisés les fichiers par le système d’exploitation.

Linux est un système d’exploitation entièrement orienté fichier. Tout (ou presque) est représenté par un fichier, tant les données que les périphériques ou encore les moyens de communication (sockets, tubes nommés, etc.). Le système de fichiers est le cœur de tout système Linux/Unix.

images/05RI05v7.png

Le système de fichiers de Linux est hiérarchique. Il décrit une arborescence de répertoires et de sous-répertoires, en partant d’un élément de base appelé la racine ou root directory. La hiérarchie se nomme FHS (Filesystem Hierarchy Standard) et comprend les répertoires suivants :

Chemin

Contenu

/

Répertoire racine, base du système de fichiers.

/bin

Fichiers binaires exécutables.

/boot

Fichiers nécessaires au démarrage.

/cdrom

Répertoire de montage par défaut des CD et DVD.

/dev

Fichiers spéciaux des périphériques.

/etc

Fichiers de configuration du système et de diverses applications.

/home

Dossiers personnels des utilisateurs.

/lib

Bibliothèques du système. On trouve également les dossiers lib32, lib64 et libx32 pour les systèmes supportant plusieurs architectures binaires.

/lib64

Idem mais en 64 bits.

/lost+found

Répertoire contenant les fichiers orphelins ou endommagés trouvés lors d’une vérification du système de fichiers. Sa présence indique que le répertoire courant est la racine d’un système...

Recherche

1. Rechercher des fichiers

La commande find permet de rechercher des fichiers au sein de l’arborescence du système de fichiers à l’aide de critères et elle donne la possibilité d’agir sur les résultats retournés.

find chemin critères options 

La commande find étant récursive, il suffit d’indiquer un répertoire de base pour que toute l’arborescence depuis ce répertoire soit parcourue. La syntaxe étant très complète, seules quelques notions de base vous sont expliquées ici. Reportez-vous au manuel de la commande pour plus d’informations.

a. Critères de recherche

Les paramètres permettent de définir les critères de recherche. Ces critères, s’il y en a plusieurs, sont combinés entre eux par une conjonction ET (critère1 ET critère2).

Critère

Recherche

-name, -iname

Recherche les fichiers indiqués, selon le modèle.

-iname ne respecte pas la casse.

-type

Par type de fichiers (f : ordinaire, d : répertoire, etc.).

-user, -group

Par utilisateur ou par groupe.

-size

Par taille. Le suffixe peut être b (bloc de 512 octets), c (octets) ou k (Ko). La valeur peut être préfixée : + (plus de) ou - (moins de).

-empty

Fichiers vides.

-atime, -mtime, -ctime

Par date d’accès, de modification ou de changement, exprimée en jours, éventuellement préfixée par + ou -.

Exemple de recherche de fichiers finissant par mkv de plus de 4 Go auxquels on n’a pas accédé depuis six mois :

$ find / -iname "*.mkv" -size +4194304 -atime +180 

Pensez à exécuter la commande avec sudo...

b. Options

Outre l’option -print (induite, qui affiche les résultats), on trouve d’autres options permettant d’effectuer une action sur les fichiers...

Redirections

1. Les canaux

Tout flux de données en entrée ou en sortie de commande passe par un canal. Il est possible de dévier le cours des données vers une autre destination (un fichier par exemple) ou depuis une autre source. Un système UNIX propose par défaut trois canaux, appelés canaux standards :

  • Canal 0 ou STDIN : l’entrée, par défaut le clavier.

  • Canal 1 ou STDOUT : la sortie standard, par défaut le terminal.

  • Canal 2 ou STDERR : la sortie d’erreurs, par défaut le terminal.

2. En sortie

On se sert du caractère > pour rediriger la sortie standard (celle qui va normalement vers le terminal). On indique ensuite le nom du fichier où seront placés les résultats de la commande.

$ ls -l > resultat.txt 
$ cat resultat.txt 
total 1 
-rw-r--r--    1 Administ ssh_user        0 Jul  4 12:04 TOTO 
-rw-r--r--    1 Administ ssh_user        0 Jul 25 15:13 resultat.txt 
-rw-r--r--    1 Administ ssh_user      171 Jul 25 15:13 test.txt 

Le shell commence d’abord par créer le fichier puis exécute ensuite la commande. Si le fichier n’existe pas, il sera créé. S’il existe, son contenu sera écrasé même si la commande tapée est incorrecte.

Pour rajouter des données à la suite du fichier sans en écraser le contenu, on utilise la double redirection >>.

$ date >> resultat.txt 

3. En entrée

Les commandes qui attendent des données ou des paramètres depuis le clavier peuvent aussi en recevoir depuis un fichier, à l’aide du caractère <, par exemple la commande wc (word count), qui permet de compter...

Quelques filtres et utilitaires

Une commande filtre est un programme qui lit et écrit des données par les canaux et en modifie la sortie.

1. Les tubes ou pipes

Les tubes ou pipes permettent de rediriger directement le canal de sortie d’une commande vers le canal d’entrée d’une autre. Le caractère permettant cela est | accessible depuis la combinaison de touches [Alt Gr][6] des claviers français.

$ ls -l|wc 
    57     519    3602 

La dernière commande peut elle-même faire l’objet d’une redirection en sortie.

$ ls -l | wc > resultat.txt 

2. Rechercher des lignes

Il s’agit d’extraire des lignes d’un flux selon divers critères. Vous utiliserez la commande grep.

grep [Options] modèle [Fichier1...] 

Le modèle se compose de critères de recherche de type texte avec éventuellement des séquences de substitution. La commande suivante recherche les lignes contenant « root » dans le fichier des utilisateurs :

$ grep root /etc/passwd 
root:x:0:0:root:/root:/bin/bash 

Voici quelques options intéressantes :

Option

Rôle

-v

Effectue la recherche inverse : toutes les lignes ne correspondant pas aux critères sont affichées.

-c

Ne retourne que le nombre de lignes trouvées, sans les afficher.

-i

Ne différencie pas les majuscules et les minuscules.

-n

Indique le numéro de ligne pour chaque ligne trouvée.

Si le critère commence par un ^, la commande recherche la chaîne de caractères en tout début de ligne ; la ligne doit commencer par le critère. Et réciproquement, si le critère finit par un $, la commande recherche la chaîne de caractères en fin de ligne ; la ligne doit finir par le critère.

3. Couper des champs

La commande cut permet de sélectionner...

Variables

1. Nomenclature

Un nom de variable obéit à certaines règles :

  • Il peut être composé de lettres minuscules ou majuscules, de chiffres, et de caractères de soulignement.

  • Le premier caractère ne peut pas être un chiffre.

  • La taille d’un nom est en principe illimitée (il ne faut pas abuser non plus).

2. Déclaration et affectation

Une variable est déclarée dès qu’une valeur lui est affectée. L’affectation est effectuée avec le signe =, sans espace avant ou après le signe.

var=Bonjour 

3. Accès et affichage

Vous accédez au contenu d’une variable en plaçant le signe $ devant le nom de la variable.

$ chemin=/tmp/eni 
$ ls $chemin 

Attention car l’espace a une signification particulière. L’exemple suivant montre le problème :

$ c=Salut les copains 
les: not found 
$ echo $c 
Salut 

Pour utiliser des caractères spéciaux, il faut soit les verrouiller par un \, soit les mettre entre guillemets (") ou apostrophes (’).

c=Salut\ les\ copains      (Solution lourde) 
c="Salut les copains"      (Solution correcte) 
c='Salut les copains'      (Solution correcte) 

4. Accolades

Les accolades de base {} permettent d’identifier le nom d’une variable. Imaginez la variable fichier contenant le nom de fichier ’liste’. Vous voulez copier liste1 sous le nom liste2 à l’aide de la variable :

$ fichier=liste 
$ cp $fichier1 $fichier2 
cp: opérande fichier manquant 
Pour en savoir davantage, faites: « cp --help ». 

Cela ne fonctionne pas car ce n’est pas $fichier qui est interprété mais $fichier1 et $fichier2, lesquels n’existent...

Effectuer des tests

La commande test permet d’effectuer des tests de conditions. Le résultat est récupérable par la variable $? (code retour). Si ce résultat est 0, alors la condition est réalisée.

La commande test peut être remplacée par les crochets ouverts et fermés [...] ou [[...]]. Il faut respecter un espace après et avant les crochets. La différence entre les simples et doubles crochets était initialement la suivante : les crochets simples étaient un raccourci vers test, tandis que les crochets doubles étaient le test interne du shell. Utilisez les crochets doubles, en principe plus rapides.

1. Sur des chaînes

  • [[ -z "valeur" ]] : retourne 0 si la valeur est vide.

  • [[ -n "valeur" ]] : retourne 0 si la valeur n’est pas vide.

  • [[ "valeur1" = "valeur2" ]] : 0 si les deux chaînes sont identiques.

  • [[ "valeur1" != "valeur2" ]] : 0 si les deux chaînes sont différentes.

2. Sur des valeurs numériques

Les opérateurs sont les suivants :

Option

Rôle

-eq

Equal : Égal

-ne

Not Equal : Différent

-lt

Less than : Inférieur

-gt

Greater than : Supérieur

-le

Less ou equal : Inférieur ou égal

-ge

Greater or equal : Supérieur ou égal

Voici un exemple de test :

$ a=10 
$ b=20 
$ [[ "$a" -ne "$b" ]]; echo $? 
0 

3. Sur les fichiers

Tous les opérateurs sur les fichiers sont unaires (un seul argument possible). Voici quelques opérateurs qui retournent 0 (zéro) si le fichier est du type attendu :

Option

Rôle

-f

Fichier normal.

-d

Un répertoire.

-r

Autorisation en lecture.

-w

Autorisation en écriture.

-x

Autorisation en exécution....

Processus

La gestion des processus sera abordée de manière plus détaillée dans le chapitre Tâches d’administration. Cependant, dès maintenant, il vous est nécessaire de comprendre leur fonctionnement : comment les lancer, les lister et les arrêter.

1. Lancer des programmes

Vous lancez un programme en tapant son nom. Vous remarquez rapidement qu’il ne « rend pas la main » (l’invite reste bloquée) tant qu’il n’a pas fini ou que vous ne l’avez pas interrompu avec [Ctrl][c].

Le système est pourtant multitâche et un certain nombre de processus tournent déjà sur la machine. Quand une commande est saisie, le shell crée un nouveau processus pour l’exécuter mais rien ne l’oblige à attendre le message du processus terminé pour rendre la main : il suffit de saisir le ET commercial « & » à la fin de la ligne. On parle alors d’un « lancement en tâche de fond ».

images/chap6_02.png

Par exemple, pour enregistrer dans un fichier le résultat d’un ls récursif depuis la racine, il est nécessaire de le lancer en tâche de fond étant donné la longueur du traitement (lister le contenu de tous les répertoires du système de fichiers !). Voici la commande à utiliser :

$ ls -R / > ls.txt 2/dev/null & 
[1] 21976 

Juste après la saisie, un chiffre apparaît, c’est le PID du nouveau processus lancé. 

Quelques remarques sur l’utilisation du lancement en tâche de fond :

  • Le processus lancé ne devrait pas attendre de saisie au risque de confusion entre cette commande et l’invite du shell.

  • Le processus lancé ne devrait pas afficher de résultats sur l’écran au risque d’avoir...

Divers

1. Calculs

Le bash propose une forme simple de calculs sur les entiers, en plaçant l’opération entre $((...)) :

$ a=1 
$ a=$((a+1)) 
$ echo $a 
2 
$ b=2 
$ a=$((a*b)) 
$ echo $a 
4 

Vous n’avez pas besoin de spécifier les $ des noms des variables entre les doubles parenthèses.

2. Longueur d’une chaîne

Il est possible d’obtenir la longueur d’une chaîne avec le caractère # entre accolades. 

$ a=Jules 
$ echo "Longueur de $a : ${#a}" 
Longueur de Jules : 5 

3. Substitution de commande

Le mécanisme de substitution permet de placer le résultat de commandes simples ou complexes dans une variable. Vous placez les commandes à exécuter entre des accents graves ` (touches [Alt Gr][7]) :

$ mon_unix=`uname` 
$ echo ${mon_unix} 
Linux 
$ machine=`uname -a | cut -d" " -f5` 
echo $machine 
SMP 

Les accents graves ne sont pas toujours idéaux pour ces manipulations. En effet, si vous faites plusieurs niveaux, vous devez verrouiller ceux qui sont à l’intérieur des premiers niveaux. Aussi, le bash permet d’utiliser la syntaxe $(…) qui n’a pas ce problème.

$ mon_unix=$(uname) 
$ echo ${mon_unix} 
Linux 
$ machine=$(uname -a | cut -d" " -f5) 
echo $machine 
SMP 

Mise en pratique

1. Énoncé

 Vérifiez dans quel répertoire vous vous situez.

 Allez dans votre répertoire personnel.

 Créez un dossier nommé "Exercices" et placez-vous dans ce dossier.

 Créez un répertoire "cours" et des sous-répertoires "francais", "informatique", "histoire".

 Dans chaque sous-répertoire, créez des fichiers vides "cours1", "cours2" et "cours3".

 Renommez le répertoire "histoire" en "histoiregeo" et le répertoire "cours" en "cours2022".

 Au même niveau que le répertoire "cours2022", créez un répertoire "cours2023". Copiez l’arborescence de "cours2022" dans "cours2023".

 Créez un lien vers "cours2022/francais/cours1" dans le répertoire "cours2023/francais" en remplacement du fichier existant.

 Modifiez le contenu du fichier "cours2022/francais/cours1" et vérifier en ouvrant le lien précédemment créé que le contenu a bien été modifié.

 Supprimez le répertoire "cours2022" et son contenu en une seule commande. 

 Vérifiez que le fichier "cours1" existe toujours.

 Créez un fichier avec le contenu de l’historique.

 Éditez ce fichier avec vi.

 Copiez les 10 premières lignes et collez-les en fin de fichier.

 Recherchez la chaîne "cd" et parcourez toutes les occurrences. Fermez le fichier en sauvegardant les modifications.

 Recherchez tous les fichiers de type "png" dont la taille est supérieure à 1 Mo et copiez-les dans votre répertoire utilisateur.

 Ouvrez les terminaux...