Aller au contenu

Naviguer en mode texte

Terminal

Maintenant que le travail en mode texte et le shell ne nous font plus peur, il est temps de découvrir progressivement une sélection de commandes Linux pour exploiter efficacement la console.

Afficher le contenu d'un répertoire avec ls

La commande ls (comme list) affiche la liste des fichiers dans un répertoire. Invoquée sans arguments, elle montre le contenu du répertoire courant :

[microlinux@sandbox ~]$ ls
Desktop    Images   Musique  Téléchargements
Documents  Modèles  Public   Vidéos

Comment lire ce résultat ? La commande ls nous a retourné les éléments situés dans notre répertoire personnel.

Le répertoire courant

Le répertoire courant, c'est celui dans lequel vous vous trouvez au moment où vous saisissez la commande.

Pour afficher le contenu de la racine du système de fichiers, saisissez ceci :

[microlinux@sandbox ~]$ ls /
afs  boot  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
bin  dev   home  lib64  media       opt  root  sbin  sys  usr

Et pour voir ce qu'il y a dans /usr, il suffit d'invoquer la commande suivante :

[microlinux@sandbox ~]$ ls /usr
bin    include  lib64    local  share  tmp
games  lib      libexec  sbin   src

Qu'est-ce qui est quoi là-dedans ?

Les différentes couleurs de l'affichage nous suggèrent qu'il ne s'agit peut-être pas d'éléments du même type. Essayez :

[microlinux@sandbox ~]$ ls /etc

Konsole

Revenir en arrière

Le résultat de cette commande dépassera éventuellement la taille de la fenêtre ou de l'écran. Pour revenir en arrière, maintenez la touche Shift enfoncée et utilisez les touches Up et Down pour faire défiler l'affichage en arrière et en avant.

Certains éléments apparaissent en bleu, d'autres en turquoise, d'autres en noir et blanc et il y a même un peu de rouge. Pour en avoir le cœur net, il va falloir utiliser ls avec l'option -F, qui donne des détails :

[microlinux@sandbox ~]$ ls -F /etc
accountsservice/         initial-setup/            polkit-1/
adjtime                  inittab                   popt.d/
aliases                  inputrc                   ppp/
almalinux-release        ipsec.conf                printcap
alsa/                    ipsec.d/                  profile
alternatives/            ipsec.secrets             profile.d/
anaconda/                iscsi/                    protocols
anacrontab               issue                     pulse/
anthy-unicode.conf       issue.d/                  qemu-ga/
appstream.conf           issue.net                 rc.d/
asound.conf              java/                     rc.local@
at.deny                  jvm/                      redhat-release@
...

Réinvoquez ls -F pour afficher le contenu de /etc/sddm :

[microlinux@sandbox ~]$ ls -F /etc/sddm
README.scripts  wayland-session*  Xsetup*  Xstop*

Vous constatez que certains éléments sont suivis d'une barre oblique /, d'autres d'une arobase @ ou d'un astérisque *. Le reste des éléments ne contient aucun suffixe.

  • La barre oblique / (couleur par défaut : bleu) désigne un répertoire.

  • L'absence de suffixe (couleur par défaut : noir, blanc ou gris, selon votre terminal) indique qu'il s'agit d'un fichier régulier non exécutable.

  • L'arobase @ (couleur par défaut : vert ou turquoise selon la configuration du jeu de couleurs de votre terminal) montre qu'il s'agit d'un lien symbolique, ce qui constitue l'équivalent d'un raccourci sous Windows. Nous verrons les liens symboliques un peu plus loin.

  • L'astérisque * (couleur par défaut : vert) indique qu'il s'agit d'un fichier exécutable.

Il nous en manque encore quelques-uns, mais nous nous contenterons des éléments que nous avons pour l'instant.

Afficher les informations détaillées

Ces informations paraissent un peu maigres. Nous pouvons en afficher davantage en utilisant l'option -l (comme long) :

[microlinux@sandbox ~]$ ls -l /etc/ssh
total 600
-rw-r--r--. 1 root root     578094 13 mars   2025 moduli
-rw-r--r--. 1 root root       1921 13 mars   2025 ssh_config
drwxr-xr-x. 2 root root         28 20 mai   22:14 ssh_config.d
-rw-------. 1 root root       3667 13 mars   2025 sshd_config
drwx------. 2 root root         59 10 sept. 15:45 sshd_config.d
...

L'utilisateur non averti trouvera cet affichage quelque peu énigmatique. En fait, il est facile à lire une fois que l'on sait à quoi correspond chaque terme.

Tout à fait à gauche, vous avez une série de dix caractères. Le tout premier vous indique s'il s'agit d'un fichier (tiret -) ou d'un répertoire (d comme directory). Ensuite, la série de neuf caractères (en fait, trois fois trois) indique les droits d'accès au fichier ou au répertoire. Nous traiterons la question des droits d'accès un peu plus loin. Les caractères r, w, x et - décrivent ce que l'on a le droit de faire avec le fichier ou le répertoire :

  • lire : r comme read

  • écrire (modifier) : w comme write

  • exécuter : x pour e[x]ecute

  • rien du tout : -

Je disais : ce que l'on a le droit de faire. Ce on est en fait assez bien spécifié : les trois premiers caractères de la série concernent le propriétaire du fichier, les trois suivants le groupe et les trois derniers le reste du monde. Nous y reviendrons en détail.

C'est quoi ce point après les permissions ?

Vous vous êtes peut-être demandé ce qui signifie le point . juste après les droits d'accès, c'est-à-dire la série de caractères qui ressemblent à quelque chose comme -rw-r--r--. Ne vous en préoccupez pas pour l'instant. Sachez quand-même que le point . indique que l'élément en question possède un contexte SELinux.

Security Enhanced Linux est un mécanisme de sécurité développé par la NSA et utilisé principalement sur les systèmes de la famille Red Hat Enterprise Linux. C'est une technologie assez complexe, que vous aurez l'occasion de manipuler lorsque vous serez un peu plus aguerris.

Le chiffre qui suit (ici : la série de 1 et de 2 dans la deuxième colonne) n'est pas d'une grande importance pour nous. Précisons tout de même qu'il indique le nombre de liens pointant vers le fichier ou le répertoire.

Les deux indications immédiatement après montrent le propriétaire du fichier, ainsi que le groupe auquel il appartient. Dans l'exemple, les fichiers et les répertoires appartiennent à l'utilisateur root et au groupe root.

La prochaine indication correspond à la taille du fichier. Ici, l'astuce consiste à invoquer ls avec l'option supplémentaire -h ou --human-readable. Essayez :

[microlinux@sandbox ~]$ ls -lh /etc/ssh
total 600K
-rw-r--r--. 1 root root     565K 13 mars   2025 moduli
-rw-r--r--. 1 root root     1,9K 13 mars   2025 ssh_config
drwxr-xr-x. 2 root root       28 20 mai   22:14 ssh_config.d
-rw-------. 1 root root     3,6K 13 mars   2025 sshd_config
drwx------. 2 root root       59 10 sept. 15:45 sshd_config.d
...

La taille des fichiers est tout de suite beaucoup plus lisible, car le système l'indique en kilooctets (K), mégaoctets (M) ou gigaoctets (G).

Version courte ou version longue ?

En passant, nous faisons également deux autres constats. D'une part, les options des commandes peuvent se combiner. Nous aurions donc très bien pu invoquer la commande comme ceci :

[microlinux@sandbox ~]$ ls -l -h /etc/ssh

D'autre part, de nombreuses options de commande ont une version courte et une longue. L'option -h (qui signifie « lisible par un humain », comme si les informaticiens ne faisaient pas vraiment partie de l'espèce) s'écrit donc très bien comme dans l'exemple qui suit. Je vous conseille cette option uniquement si vous avez un penchant prononcé pour la dactylographie :

[microlinux@sandbox ~]$ ls -l --human-readable /etc/ssh

Quant aux deux dernières colonnes, elles nous indiquent respectivement la date de la création ou de la dernière modification et, pour finir, le nom du fichier ou du répertoire.

Les fichiers cachés

Une autre option fréquemment utilisée est -a (ou --all : tout). Appliquez-la sur votre répertoire personnel et vous serez probablement surpris :

[microlinux@sandbox ~]$ ls -a
.              Desktop          Musique
..             Documents        Public
.bash_history  .gtkrc-2.0       .ssh
.bash_logout   .gtkrc-2.0-kde4  Téléchargements
.bash_profile  Images           Vidéos
.bashrc        .local           .viminfo
.cache         Modèles          .xsession-errors
.config        .mozilla

Cette option sert à afficher les fichiers et répertoires cachés. Dans un système Linux, les fichiers et répertoires dont le nom commence par un point . ne s'affichent pas lorsque ls est invoqué normalement. Vous ne les verrez donc qu'en utilisant l'option -a.

Les fichiers cachés en mode graphique

Pour afficher ces fichier et répertoires cachés dans le navigateur de fichiers Dolphin, cochez l'option Afficher les fichiers cachés. Vous pouvez également utiliser le raccourci clavier Ctrl+H (comme hidden) pour basculer d'un mode d'affichage à l'autre.

Les fichiers cachés dans Dolphin

À quoi servent ces fichiers et quel est l'intérêt de les dissimuler ? Les fichiers cachés ou dotfiles (de l'anglais dot : point) contiennent la configuration personnalisée de vos applications.

  • Les fichiers ~/.bash_profile, ~/.bashrc et ~/.bash_logout contiennent la configuration de votre shell Bash (qui est une application).

  • Le fichier ~/.bash_history renferme l'historique des commandes précédemment invoquées.

  • Le répertoire ~/.mozilla contient la configuration du navigateur web Mozilla Firefox, autrement dit vos préférences personnelles, vos marque-pages, votre historique de navigation, etc.

  • Le répertoire ~/.config renferme la configuration de votre bureau KDE sous forme d'un jeu de fichiers dont la plupart se terminent en rc (runtime configuration).

De façon analogue, ~/.thunderbird contiendra vos préférences personnelles pour le client de courrier électronique Thunderbird, ~/.config/GIMP celles pour le logiciel de retouche d'images GIMP et ainsi de suite. Vous comprenez maintenant pourquoi il est préférable de cacher ces données encombrantes.

Tilde ? Tilt !

Vous vous demandez certainement ce que signifie le tilde ~ que j'ai utilisé à plusieurs reprises. Sur les systèmes Linux (tout comme dans Unix), ce symbole désigne votre répertoire personnel. Le fichier ~/.bashrc de l'utilisateur microlinux sera donc /home/microlinux/.bashrc dans sa notation explicite, tandis que le fichier ~/.bashrc de nkovacs correspondra à /home/nkovacs/.bashrc. Étant donné que chaque utilisateur est libre de configurer le shell Bash à sa guise (ce que nous aurons l'occasion de voir), tout le monde aura donc son propre fichier .bashrc.

D'ailleurs, vous aurez probablement déjà noté le tilde ~ dans l'invite de commande :

[microlinux@sandbox ~]$

Comprendre l'invite de commande

Jetons un œil sur l'invite de commande telle qu'elle se présente en mode console, dans sa configuration par défaut. Elle est très simple à décrypter :

  • La première indication, c'est le nom de l'utilisateur (ici : microlinux).

  • Il est séparé par une arobase @ du nom de la machine (ici : sandbox).

  • La troisième indication, c'est le répertoire courant (ici : ~ à savoir /home/microlinux, puisque c'est l'utilisateur microlinux).

  • Et enfin, le signe dollar $ signifie par convention qu'il s'agit d'un utilisateur du « commun des mortels ». S'il s'agissait de l'utilisateur root, nous verrions ici un dièse # à la place du $.

L'aspect même de l'invite peut être paramétré à souhait, ce que nous verrons en temps et en heure.

Afficher les informations détaillées d'un répertoire

Il nous reste à voir une dernière option importante pour ls. Admettons que vous souhaitiez afficher les informations détaillées pour le répertoire /etc : les droits d'accès, le propriétaire, le groupe, etc. Vous invoquez donc hardiment ls suivie de l'option -l et de l'argument /etc et vous voyez... les informations détaillées de tout le contenu du répertoire, mais pas du répertoire lui-même :

[microlinux@sandbox ~]$ ls -l /etc
total 1420
drwxr-xr-x.  3 root root        28 20 mai   22:12 accountsservice
-rw-r--r--.  1 root root        16 10 sept. 16:37 adjtime
-rw-r--r--.  1 root root      1529 23 juin   2020 aliases
-rw-r--r--.  1 root root        36 13 mai   12:01 almalinux-release
drwxr-xr-x.  3 root root        65 20 mai   22:16 alsa
drwxr-xr-x.  2 root root      4096 11 sept. 09:12 alternatives
drwxr-xr-x.  4 root root        58 20 mai   22:15 anaconda
-rw-r--r--.  1 root root       541  5 août  08:13 anacrontab
...

Comment faire ? Tout simplement en invoquant l'option supplémentaire -d (comme directory, c'est-à-dire « répertoire »). Cette option affiche les répertoires avec la même présentation que les fichiers, sans lister leur contenu :

[microlinux@sandbox ~]$ ls -ld /etc
drwxr-xr-x. 151 root root 8192 14 sept. 07:07 /etc

pwd : « Vous êtes ici ! »

La commande pwd (print working directory) s'acquitte d'une seule tâche. Elle vous affiche (print) quel est le répertoire courant (working directory), c'est-à-dire le répertoire dans lequel vous vous situez actuellement :

[microlinux@sandbox ~]$ pwd 
/home/microlinux

Vous êtes ici !

Vous êtes ici !

Lorsque vous vous promenez dans une grande ville, il vous arrive de vous perdre. Avant la généralisation du smartphone et du GPS, il fallait avoir la chance de tomber sur un de ces grands plans de la ville, avec une flèche et un petit rond ou un autre symbole bien visible, qui vous indique : « VOUS ÊTES ICI ». C'est exactement ce que fait pwd.

Maintenant que nous savons nous repérer, apprenons à nous déplacer.

On bouge avec cd !

La commande cd (change directory) est utilisée pour changer de répertoire courant. Il suffit de taper cd puis le chemin du répertoire dans lequel on veut se placer :

[microlinux@sandbox ~]$ cd /
[microlinux@sandbox /]$ pwd
/
[microlinux@sandbox /]$ cd bin
[microlinux@sandbox bin]$ pwd
/bin
[microlinux@sandbox bin]$ cd /etc
[microlinux@sandbox etc]$ pwd
/etc
[microlinux@sandbox etc]$ cd /usr/bin
[microlinux@sandbox bin]$ pwd
/usr/bin

pwd à tire-larigot

Si vous vous demandez pourquoi j'invoque pwd à chaque changement de répertoire, c'est uniquement à des fins de démonstration, pour bien expliciter le répertoire courant.

Chemin relatif ou absolu ?

Lorsque je me trouve dans le répertoire racine / et que je souhaite me déplacer vers le répertoire /bin, je peux écrire cd bin. Cela correspond au chemin relatif, c'est-à-dire celui indiqué à partir du répertoire dans lequel je me situe, en l'occurrence /. Quant à cd /bin, c'est le chemin absolu, autrement dit l'emplacement à partir du répertoire racine.

En revanche, lorsque je me trouve dans le répertoire /etc et que je veux me placer dans le répertoire /bin, je suis obligé – pour l'instant – d'utiliser un chemin absolu. Pour saisir la distinction, je vous donne un exemple qui illustre ce qu'il ne faut pas faire :

[microlinux@sandbox bin]$ cd /etc
[microlinux@sandbox etc]$ pwd
/etc
[microlinux@sandbox etc]$ cd bin
-bash: cd: bin: Aucun fichier ou dossier de ce type

Ces deux exemples de la vie courante vous permettront peut-être de saisir la nuance :

  • Remontez la rue devant vous, tournez à gauche, continuez deux cents mètres, puis tournez à droite et encore à droite” (chemin relatif) ;

  • Partez du Vieux Port, remontez la Canebière, puis prenez le boulevard Longchamp et arrêtez-vous au Palais Longchamp” (chemin absolu).

Dans l'exemple précédent, nous nous situons dans le répertoire /etc. Si nous écrivons cd bin sans la barre oblique / qui précède, l'interpréteur de commandes cherche un répertoire inexistant /etc/bin et affiche une erreur.

À court d'arguments

Pour revenir dans votre répertoire personnel, il suffit d'invoquer cd sans arguments :

[microlinux@sandbox ~]$ cd /etc
[microlinux@sandbox etc]$ pwd
/etc
[microlinux@sandbox etc]$ cd sysconfig
[microlinux@sandbox sysconfig]$ pwd
/etc/sysconfig
[microlinux@sandbox sysconfig]$ cd
[microlinux@sandbox ~]$ pwd
/home/microlinux

« Ici » et « à l'étage »

Voyons maintenant deux répertoires un peu particuliers. Affichez la totalité du contenu de votre répertoire personnel. Vous remarquez qu'en début de liste, vous avez un répertoire nommé . et un autre nommé .. :

[microlinux@sandbox ~]$ ls -laF
total 48
drwx------. 15 microlinux microlinux 4096 15 sept. 09:28 ./
drwxr-xr-x.  3 root       root         24 10 sept. 15:45 ../
-rw-------.  1 microlinux microlinux 2563 15 sept. 09:28 .bash_history
-rw-r--r--.  1 microlinux microlinux   18 30 avril  2024 .bash_logout
-rw-r--r--.  1 microlinux microlinux  141 30 avril  2024 .bash_profile
-rw-r--r--.  1 microlinux microlinux  492 30 avril  2024 .bashrc
...

Affichez le contenu d'un autre répertoire, avec les mêmes options -laF :

[microlinux@sandbox ~]$ ls -laF /usr
total 320
drwxr-xr-x.  12 root root    144 20 mai   22:12 ./
dr-xr-xr-x.  21 root root    282 10 sept. 16:37 ../
dr-xr-xr-x.   2 root root  61440 11 sept. 09:12 bin/
drwxr-xr-x.   2 root root      6  2 oct.   2024 games/
drwxr-xr-x.   7 root root     78 20 mai   22:15 include/
dr-xr-xr-x.  50 root root   4096 11 sept. 09:10 lib/
dr-xr-xr-x. 122 root root 118784 11 sept. 09:09 lib64/
...

Si vous répétez l'opération sur d'autres répertoires au hasard, vous constaterez que chaque liste débute invariablement par ces mêmes répertoires . et .. :

  • . est le répertoire courant.

  • .. est le répertoire parent.

Là encore, la mise en pratique vous aidera à saisir le concept. Essayez ceci :

[microlinux@sandbox ~]$ cd /etc/sysconfig/network-scripts
[microlinux@sandbox network-scripts]$ pwd
/etc/sysconfig/network-scripts
[microlinux@sandbox network-scripts]$ cd ..
[microlinux@sandbox sysconfig]$ pwd
/etc/sysconfig
[microlinux@sandbox sysconfig]$ cd ..
[microlinux@sandbox etc]$ pwd
/etc
[microlinux@sandbox etc]$ cd ..
[microlinux@sandbox /]$ pwd
/

Chaque appel à cd .. nous fait ainsi remonter d'un cran dans l'arborescence, jusqu'à ce que nous nous retrouvions à la racine.

Quant au point ., il faut se le représenter comme le fameux « VOUS ÊTES ICI » sur le plan de la ville. Admettons que je me situe dans le répertoire /etc et que je veuille me rendre dans le sous-répertoire sysconfig. Je pourrais utiliser indépendamment ces deux notations, qui reviendraient au même :

[microlinux@sandbox ~]$ cd /etc
[microlinux@sandbox etc]$ cd sysconfig
[microlinux@sandbox sysconfig]$ pwd
/etc/sysconfig

Ou alors :

[microlinux@sandbox ~]$ cd /etc
[microlinux@sandbox etc]$ cd ./sysconfig
[microlinux@sandbox sysconfig]$ pwd
/etc/sysconfig

À quoi sert le point ?

L'utilité de cette notation vous apparaîtra un peu plus loin. Pour l'instant, retenez simplement que . signifie « ici ».

Notez aussi que .. peut très bien faire partie d'un chemin. Admettons que vous soyez dans le répertoire /etc/sysconfig et que vous souhaitiez vous rendre dans /etc/ssh. Vous pourriez vous y prendre comme ceci :

[microlinux@sandbox ~]$ cd /etc/sysconfig
[microlinux@sandbox sysconfig]$ pwd
/etc/sysconfig
[microlinux@sandbox sysconfig]$ cd ..
[microlinux@sandbox etc]$ cd ssh
[microlinux@sandbox ssh]$ pwd
/etc/ssh

Il y a moyen de faire plus court et plus élégant :

[microlinux@sandbox ~]$ cd /etc/sysconfig
[microlinux@sandbox sysconfig]$ pwd
/etc/sysconfig
[microlinux@sandbox sysconfig]$ cd ../ssh
[microlinux@sandbox ssh]$ pwd
/etc/ssh

Vous pouvez également monter de plusieurs crans, si cela est nécessaire. Si votre répertoire courant est /etc/sysconfig/network-scripts et si vous souhaitez vous rendre dans /etc/ssh, il va falloir que vous montiez de deux crans, pour ensuite entrer dans le répertoire ssh. En pratique, cela ressemblerait à l'exemple suivant :

[microlinux@sandbox ~]$ cd /etc/sysconfig/network-scripts
[microlinux@sandbox network-scripts]$ pwd
/etc/sysconfig/network-scripts
[microlinux@sandbox network-scripts]$ cd ../../ssh
[microlinux@sandbox ssh]$ pwd
/etc/ssh

La philosophie Unix

La philosophie Unix

Vous venez d'apprendre en tout et pour tout trois commandes et une poignée d'options. Peut-être sentez-vous monter en vous un vague sentiment de déception. C'est donc ça, Linux ? Des commandes qu'il faut taper fastidieusement dans une interface archaïque ?

Pour vous rassurer – et nous conforter dans notre démarche – je me permettrai de vous donner un exemple qui semblera familier à beaucoup d'entre vous. Imaginez que votre voiture tombe en panne un jour. Vous avez en gros deux possibilités pour la faire réparer.

  1. Vous la faites remorquer au garage Lapeau & Descouilles en ville : un endroit très high tech avec beaucoup de chrome et de carrelage blanc, sans la moindre trace de cambouis ni de poussière. Les mécaniciens ressemblent à des ingénieurs en blouse blanche. Ils sont armés jusqu'aux dents d'ordinateurs portables et ne répondent à personne. Votre voiture est le seul objet sale dans cet endroit étincelant de propreté. L'ingénieur en chef dissimule à peine son dégoût, ouvre le capot et branche un câble dans une prise dont vous ignoriez l'existence jusque-là. Il retourne devant l'écran de son portable, clique sur une série de boutons dans son logiciel de diagnostic et vous annonce qu'il ne peut pas vous fixer un rendez-vous avant le début du mois prochain, mais qu'on peut déjà établir un devis.

  2. Vous décidez d'aller voir Tony, le mécanicien du village. En guise de bonjour, Tony vous présente son avant-bras à peine moins maculé de cambouis que ses mains. Il propose de s'occuper tout de suite de votre voiture, l'objet le plus propre dans tout le garage. Il ouvre le capot et contemple le moteur en sifflotant le refrain qui vient de passer à la radio. Puis il fouille dans sa boîte à outils et en extrait une clé tubulaire, un tournevis et une pince. À peine deux minutes plus tard, il vous annonce qu'il fallait juste nettoyer les bougies et refixer une durite qui s'était défaite. Il refuse de se faire payer malgré vos protestations réitérées.

Les commandes que nous venons d'apprendre sont certes aussi peu spectaculaires qu'une clé tubulaire, un tournevis ou une clé de douze. Vous serez d'ailleurs probablement surpris d'apprendre que ce sont des commandes Unix, un système d'exploitation fondé en 1969 et dont Linux est un clone. Les principes de base d'Unix sont restés les mêmes depuis les années 1970. Douglas McIlroy, l'un des fondateurs d'Unix, a résumé la philosophie de ce système en une série de trois impératifs catégoriques :

  • Écrivez des programmes qui font une seule chose et qui la font bien.

  • Écrivez des programmes qui se combinent les uns avec les autres.

  • Écrivez des programmes pour gérer des flux de texte, car c'est une interface universelle.

Même si vous n'avez pas l'intention d'écrire des programmes Unix (ou Linux), ces trois règles sont d'une importance capitale pour tout utilisateur de systèmes de cette famille. À partir du moment où vous maîtrisez ne serait-ce qu'une poignée de commandes Unix, vous apprendrez à les combiner pour résoudre les problèmes de manière efficace. Gardez ce principe à l'esprit lors de votre apprentissage. Nous verrons bientôt comment les tâches les plus complexes peuvent être décomposées en une série d'opérations simples.