Chapitre 3. Utilisation du shell

Table des matières

3.1. Mise en route du shell Bash
3.2. Utilisateurs et autorisations d'accès
3.3. Commandes Linux importantes
3.4. L'éditeur vi

Résumé

Lorsque vous démarrez votre système Linux, vous êtes généralement dirigé vers une interface utilisateur graphique qui vous guide dans le processus de login et les interactions suivantes avec le système. Bien que les interfaces utilisateur graphiques soient devenues très importantes et conviviales, leur utilisation n'est pas le seul mode de communication avec votre système. Vous pouvez également utiliser une communication de type texte telle qu'un interpréteur de ligne de commande, généralement nommé shell, dans lequel vous pouvez entrer des commandes. Du fait que Linux fournit des options pour démarrer des fenêtres de shell à partir de l'interface utilisateur graphique, vous pouvez facilement utiliser les deux méthodes.

Avec l'administration, les applications à base de texte sont particulièrement importantes pour contrôler les ordinateurs sur des liaisons réseau lentes ou si vous souhaitez exécuter des tâches en tant qu'utilisateur root sur la ligne de commande. Pour les « débutants » en Linux, il est probablement assez inhabituel d'entrer des commandes dans un shell, mais vous vous apercevrez vite que cela n'est pas réservé aux administrateurs. Son utilisation est en fait souvent la méthode la plus simple et la plus rapide pour effectuer certaines tâches quotidiennes.

Il y a plusieurs shells pour UNIX ou Linux. Le shell par défaut dans SUSE Linux est Bash (GNU Bourne-Again Shell).

Ce chapitre aborde quelques notions de base que vous devez connaître pour utiliser le shell. Elles comprennent les points suivants : comment entrer des commandes, la structure de répertoires de Linux, comment travailler avec les fichiers et les répertoires et comment utiliser certaines fonctions de base, le concept d'utilisateur et d'autorisation de Linux, une présentation des commandes shell importantes, et une brève introduction à l'éditeur vi, un éditeur par défaut toujours disponible dans les systèmes Unix et Linux.


3.1. Mise en route du shell Bash

Dans Linux, vous pouvez utiliser la ligne de commande en parallèle à l'interface utilisateur graphique et passer facilement de l'un à l'autre. Pour démarrer une fenêtre de terminal à partir de l'interface utilisateur graphique dans KDE, cliquez sur l'icône Konsole du tableau de bord. Dans GNOME, cliquez sur l'icône Terminal de GNOME du tableau de bord.

La Konsole ou la fenêtre Terminal de GNOME apparaît, et affiche l'invite sur la première ligne, comme dans la Figure 3.1, « Exemple de fenêtre de terminal Bash ». L'invite affiche en général votre nom de login (dans cet exemple, tux), le nom d'hôte de votre ordinateur (ici, knox) et le chemin actuel (dans ce cas, votre répertoire personnel, indiqué par le symbole tilde, ~). Lorsque vous êtes logué sur un ordinateur distant, ces informations indiquent toujours sur quel système vous travaillez. Lorsque le curseur se trouve après cette invite, vous pouvez directement envoyer des commandes vers votre système informatique.

Figure 3.1. Exemple de fenêtre de terminal Bash

Exemple de fenêtre de terminal Bash

3.1.1. Saisie des commandes

Une commande se compose de plusieurs éléments. Le premier élément est toujours la commande réelle, suivie des paramètres ou des options. Vous pouvez saisir une commande et la modifier en utilisant , , <—, Suppr et Space. Vous pouvez également ajouter des options ou corriger des fautes de frappe. La commande est exécutée lorsque vous appuyez sur Entrée.

[Important]Pas de nouvelles bonne nouvelle

Le shell n'est pas détaillé : contrairement à certaines interfaces utilisateur graphiques, il ne fournit généralement pas de messages de confirmation lorsque des commandes ont été exécutées. Les messages n'apparaissent qu'en cas de problèmes ou d'erreurs.

N'oubliez jamais cela pour les commandes qui suppriment les objets. Avant d'entrer une commande telle que rm destinée à supprimer un fichier, vous devez être sûr de vouloir vous débarrasser de l'objet : il sera supprimé définitivement, sans autre forme d'avertissement.

3.1.1.1. Utilisation des commandes sans option

Observez la structure des commandes avec un simple exemple : la commande ls, utilisée pour afficher le contenu d'un répertoire. Cette commande peut être utilisée avec ou sans option. L'entrée de la simple commande ls affiche le contenu du répertoire actuel :

Figure 3.2. La commande ls

La commande ls

Contrairement à Microsoft Windows, dans Linux, les fichiers peuvent avoir une extension, telle que .txt, mais ce n'est pas obligatoire. Cela rend délicate la différentiation entre les fichiers et des dossiers dans ce résultat de la commande ls. Par défaut, les couleurs peuvent vous donner une indication : les répertoires s'affichent généralement en bleu et les fichiers en noir.

3.1.1.2. Utilisation des commandes avec options

Une meilleure méthode pour obtenir plus de détails concernant le contenu d'un répertoire consiste à utiliser la commande ls avec une chaîne d'options. Les options modifient la manière dont une commande fonctionne afin que vous puissiez lui faire accomplir certaines tâches. Les options sont séparées de la commande par un espace et précédées d'un trait d'union. La commande ls -l affiche le contenu du même répertoire en détail (format de liste long) :

Figure 3.3. La commande ls -l

La commande ls -l

À gauche de chaque nom d'objet, des informations qui le concernent s'affichent dans plusieurs colonnes. Les plus importantes sont les suivantes : La première colonne affiche le type de fichier de l'objet (dans cet exemple, d pour répertoire ou - pour des fichiers normaux). Les neuf colonnes suivantes affichent les autorisations utilisateur concernant l'objet. Les colonnes 11 et 12 affichent le nom du propriétaire du fichier et le groupe (dans ce cas, tux et users). Vous trouverez des informations concernant les autorisations utilisateur et le concept d'utilisateur de Linux à la Section 3.2, « Utilisateurs et autorisations d'accès ». La colonne suivante indique la taille en octets du fichier. Puis la date et l'heure de la dernière modification sont affichées. La dernière colonne affiche le nom de l'objet.

Si vous voulez en voir davantage, vous pouvez combiner deux options de la commande ls et entrer ls -la. Le shell affiche également les fichiers cachés dans le répertoire, indiqués par un point au départ (par exemple, .hiddenfile).

3.1.1.3. Affichage de l'aide

Personne n'est sensé connaître par cœur toutes les options de toutes les commandes. Si vous vous rappelez du nom de la commande mais n'êtes pas sûr des options, vous pouvez entrer la commande suivie d'un espace et de --help. Cette option --help existe avec une grand nombre de commandes. Lorsque vous entrez ls --help, toutes les options de la commandels s'affichent.

3.1.2. Structure de répertoires de Linux

Du fait que le shell n'offre pas de présentation graphique des répertoires et des fichiers telle que la vue de l'arborescence d'un gestionnaire de fichiers, il est utile d'avoir une connaissance de base de la structure de répertoires par défaut d'un système Linux. Vous pouvez envisager les répertoires comme des dossiers électroniques dans lesquels sont stockés les fichiers, les programmes et les sous-répertoires. Le dossier en haut de la hiérarchie est le répertoire racine, désigné par /. C'est l'emplacement à partir duquel vous pouvez accéder à l'ensemble des autres répertoires.

Figure 3.4, « Extrait d'une arborescence de répertoires standard » affiche l'arborescence standard de Linux, avec les répertoires maison des exemples d'utilisateurs xyz, linux et tux. Le répertoire /home contient les répertoires dans lesquels chaque utilisateur peut stocker ses fichiers personnels.

[Note]Répertoire personnel dans un environnement réseau

Si vous travaillez dans un environnement réseau, votre répertoire personnel ne s'appelle peut-être pas /home. Il peut être assigné à n'importe quel répertoire du système de fichiers.

La liste suivante offre une brève description des répertoires standard de Linux.

Figure 3.4. Extrait d'une arborescence de répertoires standard

Extrait d'une arborescence de répertoires standard
/

Répertoire racine, point de départ de l'arborescence

/home

Répertoires privés des utilisateurs

/dev

Périphériques qui représentent les composants matériels

/etc

Fichiers importants pour la configuration du système

/etc/init.d

Commandes de démarrage

/usr/bin

Programmes généralement accessibles

/bin

Programmes requis au début du processus de démarrage

/usr/sbin

Programmes réservés à l'administrateur système

/sbin

Programmes réservés à l'administrateur système et nécessaires au démarrage

/usr/include

Fichiers d'en-tête pour le compilateur C

/usr/include/g++

Fichiers d'en-tête pour le compilateur C++

/usr/share/doc

Divers fichiers de documentation

/usr/share/man

Pages de manuel du système

/usr/src

Code source du système logiciel

/usr/src/linux

Code source du kernel

/tmp, /var/tmp

Fichiers temporaires

/usr

Tous les programmes d'applications

/var

Fichiers de configuration (par exemple, ceux liés à /usr)

/var/log

Fichiers journaux du système

/var/adm

Données d'administration du système

/lib

Librairies partagées (pour les programmes à lien dynamique)

/proc

Système de fichiers de processus

/sys

Système de fichiers du système dans lequel toutes les informations de périphérique du kernel sont recueillies

/usr/local

Extensions locales indépendantes de la distribution

/opt

Logiciel optionnel, paquetages logiciels supplémentaires (tels que KDE, GNOME et Netscape)

3.1.3. Utilisation des répertoires et des fichiers

Pour rechercher un fichier ou un répertoire en particulier, vous devez spécifier le chemin qui y mène. Vous pouvez spécifier le chemin de deux manières :

  • Le chemin entier (absolu) depuis le répertoire racine jusqu'au fichier respectif.

  • Un chemin qui part du répertoire actuel (chemin relatif)

Les chemins absolus doivent toujours commencer par une barre oblique (/). Les chemins relatifs ne sont pas précédés par une barre oblique.

[Note]Linux est sensible à la casse

Linux fait la différence entre les majuscules et les minuscules dans le système de fichiers. Par exemple, Linux fait la différence entre test.txt et Test.txt. N'oubliez pas ce point lorsque vous entrez des noms de fichiers ou des chemins.

Pour changer de répertoire, utilisez la commande cd. Entrez le répertoire auquel vous voulez accéder comme option de la commande. Le répertoire actuel est marqué par un point (.). Le niveau supérieur suivant de l'arborescence est représenté par deux points (..). Pour accéder au répertoire parent de votre répertoire actuel, entrez cd ... N'oubliez pas d'entrer un espace après la commande cd pour séparer la commande des options. Votre invite affiche maintenant le chemin vers le parent du répertoire dans lequel vous avez exécuté la commande. Pour accéder à un répertoire situé deux niveaux au-dessus du répertoire actuel, entrez cd ../... ls -l ../.. affiche le contenu du répertoire situé deux niveaux au-dessus.

3.1.3.1. Exemples d'adressage d'un fichier

Les commandes cd de la Section 3.1.3, « Utilisation des répertoires et des fichiers » utilisaient des chemins relatifs. Vous pouvez également utiliser des chemins absolus. Par exemple, supposons que vous vouliez copier un fichier de votre répertoire personnel vers un sous-répertoire de /tmp :

  1. À partir de votre répertoire personnel, commencez par créer un sous-répertoire dans /tmp :

    1. Si le répertoire actuel n'est pas votre répertoire personnel, entrez cd ~ pour y accéder. Depuis n'importe où dans le système de fichiers, vous pouvez atteindre votre répertoire personnel en entrant cd ~.

    2. Dans votre répertoire personnel, entrez mkdir /tmp/test. mkdir signifie « make directory ». Cette commande crée un nouveau répertoire nommé test dans le répertoire /tmp. Dans ce cas, utilisez un chemin absolu pour créer le répertoire.

    3. Pour vérifier ce qui s'est produit, entrez maintenant ls -l /tmp. Le nouveau répertoire test doit apparaître dans la liste de contenu du répertoire /tmp.

  2. Créez à présent un nouveau fichier dans votre répertoire personnel et copiez-le dans le répertoire /tmp/test en utilisant un chemin relatif.

    1. Entrez touch monfichier.txt. La commande touch avec l'option monfichier.txt créer un nouveau fichier vide nommé monfichier.txt dans votre répertoire actuel.

    2. Pour vérifier, entrez ls -l. Le nouveau fichier doit apparaître dans la liste de contenu.

    3. Entrez cp monfichier.txt ../tmp/test. Cela copie monfichier.txt dans le répertoire /tmp/test sans changer le nom du fichier.

    4. Pour vérifier, entrez ls -l /tmp/test. Le fichier monfichier.txt doit apparaître dans la liste de contenu de /tmp/test.

Pour lister le contenu des répertoires maison d'autres utilisateurs, entrez ls ~username. Dans l'exemple d'arborescence de la Figure 3.4, « Extrait d'une arborescence de répertoires standard », l'un des utilisateurs exemples est tux. Dans ce cas, ls ~tux listerait le contenu du dossier personnel de tux.

[Note]Gestion des espaces dans les noms de fichiers et de répertoires

Si un nom de fichier contient un espace, ignorez l'espace en utilisant une barre oblique inverse (\) devant l'espace ou entourez le nom du fichier de guillemets simples ou doubles. Sinon, Bash interprète un nom tel que Mes documents comme les noms de deux fichiers ou de deux répertoires. La différence entre des guillemets simples ou doubles est la suivante : l'expansion de variable se produit avec les guillemets doubles. Les guillemets simples assurent que le shell voit littéralement la chaîne entre guillemets.

3.1.4. Fonctions utiles du shell

La saisie de commandes dans Bash peut nécessiter un grand nombre de frappes. Dans ce qui suit, vous découvrirez certaines fonctions de Bash qui peuvent simplifier grandement votre travail et économiser un grand nombre de frappes.

3.1.4.1. Historique et saisie automatique

Par défaut, Bash « se souvient » des commandes que vous avez entrées. On appelle cette fonction l'historique. Pour répéter une commande entrée précédemment, appuyez sur jusqu'à ce que la commande précédente apparaisse à l'invite. Vous pouvez également parcourir la liste des commandes entrées précédemment en appuyant sur . Vous avez toujours la possibilité de modifier cette commande, par exemple, en changeant le nom d'un fichier, avant de l'exécuter en appuyant sur Entrée. Pour modifier la ligne de commande, il vous suffit de déplacer le curseur jusqu'à la position souhaitée en utilisant les touches fléchées et de commencer à saisir. Pour effectuer une recherche dans l'historique, appuyez sur Ctrl-R.

La possibilité de compléter le nom d'un fichier ou d'un répertoire après la saisie de ses premières lettres est une autre fonction pratique de Bash. Pour ce faire, saisissez les premières lettres, puis appuyez sur →|. Si le nom du fichier ou du répertoire peut être identifié de manière univoque, il est complété dès que le curseur atteint la fin du nom de fichier. Vous pouvez ensuite entrer l'option suivante de la commande, le cas échéant. Si le nom du fichier ou du répertoire ne peut pas être identifié de manière univoque (par exemple parce que plusieurs noms de fichiers commencent par les mêmes lettres), le nom du fichier ou du répertoire n'est complété que jusqu'au point où plusieurs nouvelles options sont possibles. Vous pouvez en obtenir la liste en appuyant sur →| une seconde fois. Après cela, vous pouvez entrer les lettres suivantes du fichier ou du répertoire, puis retenter la saisie automatique en appuyant sur →|. Lorsque vous complétez des noms de fichiers et des répertoires à l'aide de →|, vous pouvez vérifier simultanément que le fichier ou le répertoire que vous voulez entrer existe réellement (et être sûr que son orthographe est correcte).

3.1.4.2. Caractères jokers

Le shell propose encore un autre avantage, à savoir les caractères jokers pour l'expansion du nom de chemin. Les jokers sont des caractères qui en remplacement d'autres. Il en existe trois types différents dans Bash :

?

Correspond précisément à un caractère arbitraire

*

Correspond à un nombre quelconque de caractères

[set]

Correspond à l'un des caractères du groupe spécifié à l'intérieur des crochets, qui est représenté ici par la chaîne set. Dans set vous pouvez également spécifier des classes de caractères utilisant la syntaxe [:class:], où une classe est un alnum, alpha, ascii, etc.

L'utilisation de ! ou de ^ au début du groupe ([!set]) correspond à un caractère autre que celui identifié par set.

En supposant que votre répertoire test contienne les fichiers Testfile, Testfile1, Testfile2 et datafile, la commande ls Testfile? liste les fichiers Testfile1 et Testfile2. Avec ls Test*, la liste inclut également Testfile. ls *fil* affiche tous les fichiers exemples. Enfin, vous pouvez utiliser le caractère joker set pour accéder à tous les fichiers exemples dont le dernier caractère est un nombre : ls Testfile[1-9] ou, en utilisant des classes, ls Testfile[[:digit:]].

Sur les quatre types de caractères jokers, le plus inclusif est l'astérisque. Il peut servir à copier tous les fichiers contenus dans un répertoire vers un autre ou supprimer tous les fichiers à l'aide d'une commande. La commande rm *fil*, par exemple, supprimerait tous les fichiers du répertoire actuel dont le nom comprend la chaîne fil.

3.1.4.3. Affichage des fichiers avec less et more

Linux comprend deux petits programmes permettant d'afficher des fichiers texte directement dans le shell : less et more. Au lieu de lancer un éditeur pour lire un fichier tel que Lisezmoi.txt, il vous suffit d'entrer less Lisezmoi.txt pour afficher le texte dans la fenêtre de console. Utilisez la barre d'espace pour faire défiler une page vers le bas. Utilisez les touches Page suivante et Page précédente pour avancer ou reculer dans le texte. Pour quitter less, appuyez sur Q.

Au lieu de less, vous pouvez également utiliser l'ancien programme more. Il est toutefois moins pratique car il ne permet pas de faire défiler en arrière.

Le programme less tire son nom du précepte selon lequel moins vaut plus et peut servir également à afficher la sortie des commandes de façon appropriée. Pour comprendre son fonctionnement, reportez-vous à Section 3.1.4.4, « Redirection et tuyaux ».

3.1.4.4. Redirection et tuyaux

En principe, la sortie standard du shell est votre écran ou la fenêtre de console, et l'entrée standard le clavier. Toutefois, le shell fournit des fonctions qui permettent de rediriger l'entrée ou la sortie vers un autre objet, par exemple un fichier ou une autre commande. Grâce aux symboles > et <, par exemple, vous pouvez envoyer la sortie d'une commande vers un fichier (redirection de sortie) ou utiliser un fichier comme entrée pour une commande (redirection d'entrée). Par exemple, si vous voulez écrire la sortie d'une commande telle que ls dans un fichier, entrez ls -l > file.txt. Cela crée un fichier nommé file.txt contenant la liste de contenu de votre répertoire actuel généré par la commande ls. Toutefois, s'il existe déjà un fichier nommé file.txt, cette commande le remplace. Pour éviter ce problème, utilisez >>. Lorsque vous entrez ls -l >> file.txt, la sortie de la commande ls est simplement ajoutée à un fichier existant nommé file.txt. Si ce fichier n'existe pas, il est créé.

Il est parfois pratique d'utiliser un fichier comme entrée d'une commande. Par exemple, la commande tr permet de remplacer des caractères redirigés à partir d'un fichier et d'écrire le résultat sur la sortie standard, votre écran. Supposons que vous vouliez remplace tous les caractères t de votre fichier file.txt de l'exemple ci-dessus par des x et l'envoyer à l'écran. Faites-le en entrant tr t x < file.txt.

Tout comme la sortie standard, le message d'erreur standard est envoyé vers la console. Pour rediriger le message d'erreur standard vers un fichier appelé errors, vous devez ajouter 2> errors à la commande correspondante. La sortie et le message d'erreur standard sont tous deux enregistrés dans un fichier appelé alloutput si vous ajoutez >& alloutput.

L'utilisation de tuyaux est également une sorte de redirection, bien que l'utilisation d'un tuyau n'est pas limitée aux fichiers. Avec un tuyau (|), vous pouvez combiner plusieurs commandes, en utilisant la sortie d'une commande comme entrée de la suivante. Par exemple, pour voir le contenu de votre répertoire actuel, dans less, entrez ls | less. Cela est utile uniquement si la sortie normale avec ls est trop longue. Par exemple, si vous affichez le contenu du répertoire dev avec la commande ls /dev, vous ne voyez qu'une petite partie de la fenêtre. Pour voir la liste entière, saisissez ls /dev | less.

3.1.5. Archives et compression des données

Maintenant que vous avez créé plusieurs fichiers et répertoires, vous pouvez aborder le thème des archives et de la compression de données. Supposez que vous voulez avoir le répertoire test complet compacté dans un fichier que vous pouvez enregistrer sur une clé USB comme copie de sauvegarde ou envoyer par courrier électronique. Pour ce faire, utilisez la commande tar (pour tape archiver). A l'aide de la commande tar --help, affichez ensuite toutes les options de la commande tar. Les options les plus importantes sont expliquées ici :

-c

(pour create) Crée une nouvelle archive.

-t

(pour table) Affiche le contenu d'une archive.

-x

(pour extract) Décompacte l'archive.

-v

(pour verbose) Affiche tous les fichiers à l'écran pendant la création de l'archive.

-f

(pour file) Choisit un nom de fichier pour le fichier de l'archive. Lorsque vous créez une archive, cette option doit toujours être indiquée en dernière.

Pour compacter le répertoire test avec tous ses fichiers et sous-répertoires dans une archive appelée testarchive.tar, utilisez les options -c et -f. Aux fins de test, ajoutez également -v pour suivre la progression de l'archivage, même si cette option n'est pas obligatoire. Après avoir utilisé cd pour accéder à votre répertoire maison dans lequel se trouve le répertoire test, entrez tar -cvf testarchive.tar test. Après cela, affichez le contenu du fichier d'archive à l'aide de la commande tar -tf testarchive.tar. Le répertoire test et tous ses fichiers et répertoires restent inchangés sur votre disque dur. Pour décompacter l'archive, il vous suffit d'entrer tar -xvf testarchive.tar, mais ne le faites pas encore.

Pour la compression des fichiers, le choix évident est gzip ou, pour un rapport de compression encore meilleur, bzip2. Il suffit de saisir gzip testarchive.tar (ou bzip2 testarchive.tar, mais c'est gzip qui est utilisé dans cet exemple). Grâce à la commande ls, vous voyez à présent que le fichier testarchive.tar n'est plus là et que le fichier testarchive.tar.gz a été créé à sa place. Ce fichier est beaucoup plus petit et, par conséquent, convient beaucoup mieux au transfert par courrier électronique ou au stockage sur clé USB.

À présent, décompactez ce fichier dans le répertoire test2 créé précédemment. Pour ce faire, saisissez cp testarchive.tar.gz test2 afin de copier le fichier dans ce répertoire. Accédez au répertoire à l'aide de la commande cd test2. Une archive compactée portant l'extension .tar.gz peut être dézippée à l'aide de la commande gunzip. Entrez gunzip testarchive.tar.gz, qui a pour résultat le fichier testarchive.tar, lequel doit ensuite être extrait ou décompacté à l'aide de la commande tar -xvf testarchive.tar. Vous pouvez également dézipper et extraire une archive compactée en une seule opération avec tar -xvf testarchive.tar.gz (l'ajout de l'option -z n'est plus nécessaire). La commande ls permet de constater qu'un nouveau répertoire test a été créé avec le même contenu que votre répertoire test dans votre répertoire maison.

3.1.6. Nettoyage

Après ce cours intensif, vous devriez être habitué aux basiques du shell ou de la ligne de commande Linux. Si vous le souhaitez, vous pouvez nettoyer votre répertoire maison en supprimant les différents fichiers et répertoires test grâce aux commandes rm et rmdir. Dans la Section 3.3, « Commandes Linux importantes », vous trouverez une liste des commandes les plus importantes, ainsi qu'une brève description de leurs fonctions.