Comment utiliser la commande ls pour répertorier les fichiers et les répertoires sous Linux



La commande Linux ls est tellement courante qu’on l’utilise souvent sans y prêter attention. C’est une erreur car elle regorge d’options très utiles, que tout utilisateur de la ligne de commande devrait connaître.

ls : un outil pour lister fichiers et répertoires

La commande ls est souvent la première que découvrent les utilisateurs de Linux. Ceux qui sont habitués au terminal l’utilisent quotidiennement, presque par réflexe. C’est peut-être pourquoi on sous-estime sa richesse. On l’emploie pour afficher le contenu d’un répertoire ou pour examiner les permissions d’un fichier, mais on s’arrête souvent là.

La commande ls offre une multitude d’options, ce qui peut sembler déroutant. Comment s’y retrouver parmi toutes ces possibilités pour identifier celles qui sont réellement utiles ? Et surtout, comment les mémoriser ?

Les combinaisons d’options et de paramètres utiles de ls sont parfaites pour des alias. En fait, dans la plupart des distributions, la commande ls que vous utilisez au quotidien est souvent un alias. La commande type permet de visualiser la définition d’un alias. Voici par exemple la définition de ls :

type ls

Les paramètres --color=auto sont automatiquement ajoutés à chaque utilisation de ls. C’est ce qui permet l’affichage coloré des différents types de fichiers.

Listages simples avec ls

Tout utilisateur du terminal Linux sait que, par défaut, ls liste les fichiers et répertoires du répertoire courant.

ls

Pour un affichage en une seule colonne, utilisez l’option -1 (un fichier par ligne) :

ls -1

Nous reviendrons sur ce nom de fichier étrange en haut de la liste dans un instant.

ls et les différents répertoires

Pour que ls affiche les fichiers d’un répertoire autre que le répertoire courant, il suffit de spécifier son chemin d’accès comme argument. Vous pouvez également lister plusieurs répertoires à la suite. Ici, ls affiche les fichiers de deux répertoires : « Help » et « gc_help ».

ls Help gc_help

ls liste le contenu du premier répertoire, puis celui du second. Le nom de chaque répertoire est affiché avant son contenu:

Utilisation de motifs avec ls

Pour sélectionner les fichiers à lister, utilisez les motifs de correspondance. Le point d’interrogation « ? » remplace n’importe quel caractère unique et l’astérisque « * » remplace n’importe quelle chaîne de caractères. Voici comment lister tous les fichiers ou répertoires dont le nom commence par « ip_ » :

ls ip_*

Pour lister tous les fichiers ayant l’extension « .c », voici la commande :

ls *.c

Vous pouvez aussi combiner ls avec grep pour exploiter ses capacités de correspondance de motifs. Par exemple, pour rechercher tous les fichiers dont le nom contient « _pin_ » :

ls | grep _pin_

C’est presque équivalent à utiliser ls seul avec deux caractères génériques :

ls | grep _pin_
ls *_pin_*

Pourquoi « presque » ? Notez la différence d’affichage. grep affiche un seul nom de fichier par ligne.

Caractères non imprimables

Il est possible qu’un nom de fichier contienne un caractère de contrôle non imprimable. Cela se produit souvent lors de la décompression d’archives téléchargées ou de la récupération de dépôts Git où l’auteur a commis une erreur lors de la création d’un fichier.

Notre fichier étrange en est un exemple :

Si vous essayez de renommer ce fichier depuis l’explorateur de fichiers en utilisant la touche « F2 », le caractère non imprimable est représenté par un symbole étrange.

L’option -b (échappement) permet de révéler le contenu réel du nom de fichier. Cette option force ls à utiliser les séquences d’échappement du langage de programmation C pour représenter les caractères de contrôle.

ls -b a*

Le caractère mystérieux s’avère être un caractère de nouvelle ligne, représenté par « \n » en C.

Ignorer des fichiers

Pour exclure certains fichiers d’un listage, utilisez l’option --hide. Supposons que vous ne souhaitiez pas voir les fichiers de sauvegarde « .bak » dans la liste :

ls
ls --hide=*.bak

Les fichiers « .bak » ne figurent pas dans la deuxième liste.

Listage au format long

L’option -l (liste longue) force ls à afficher des informations détaillées sur chaque fichier.

ls -l

Ce listage contient de nombreuses informations, que nous allons examiner en détail.

ls affiche d’abord la taille totale de tous les fichiers listés. Ensuite, chaque fichier ou répertoire est affiché sur une ligne séparée.

La première série de dix lettres et tirets représente le type de fichier ainsi que les permissions du propriétaire, du groupe et des autres utilisateurs.

Le tout premier caractère indique le type de fichier :

– : un fichier normal.
b : un fichier spécial de bloc.
c : un fichier spécial de caractère.
d : un répertoire.
l : un lien symbolique.
n : un fichier réseau.
p : un tube nommé.
s : un socket.

Les neuf caractères suivants sont divisés en trois groupes de trois. Chaque groupe indique les permissions de lecture (r), d’écriture (w) et d’exécution (x), dans cet ordre. Si une permission est accordée, la lettre correspondante apparaît ; sinon, un tiret (-) s’affiche.

Le premier groupe de trois caractères concerne le propriétaire du fichier. Le second, les membres du groupe, et le dernier, les autres utilisateurs.

Parfois, l’autorisation d’exécution du propriétaire est représentée par un s. Il s’agit du bit setuid. S’il est présent, le fichier est exécuté avec les privilèges du propriétaire et non de l’utilisateur qui l’exécute.

De même, l’autorisation d’exécution du groupe peut être représentée par un s. C’est le bit setgid. Pour un fichier, cela signifie qu’il sera exécuté avec les privilèges du groupe du propriétaire. Pour un répertoire, les fichiers créés à l’intérieur hériteront des permissions de groupe du répertoire et non de l’utilisateur qui les crée.

L’autorisation d’exécution pour les autres peut parfois être un t. C’est le bit collant, généralement appliqué aux répertoires. S’il est activé, seuls le propriétaire du fichier, le propriétaire du répertoire ou l’utilisateur root peuvent renommer ou supprimer des fichiers, quels que soient les privilèges d’écriture et d’exécution définis.

Le bit collant est souvent utilisé pour les dossiers comme « /tmp », accessibles en écriture à tous les utilisateurs. Ce bit garantit que les utilisateurs ne peuvent modifier ou supprimer que leurs propres fichiers temporaires.

Voici l’exemple du répertoire « /tmp ». Notez l’utilisation de l’option -d (répertoire), qui permet d’afficher les détails du répertoire lui-même, et non ceux des fichiers qu’il contient.

ls -l -d /tmp

Le nombre suivant les autorisations est le nombre de liens physiques vers le fichier ou le répertoire. Pour un fichier, c’est généralement un. Un répertoire a généralement au moins deux liens physiques : un vers lui-même et un vers son entrée dans le répertoire parent.

Viennent ensuite le nom du propriétaire et du groupe, puis la taille du fichier, sa date de dernière modification et enfin le nom du fichier lui-même.

Affichage des tailles de fichier lisibles

Afficher la taille des fichiers en octets n’est pas toujours pratique. Pour afficher les tailles dans les unités appropriées (kilo-octets, mégaoctets, etc.), utilisez l’option -h (lisible) :

ls -l -h

Affichage des fichiers cachés

Pour afficher les fichiers cachés, utilisez l’option -a (all) :

ls -l -a

Les entrées « . » et « .. » représentent respectivement le répertoire courant et le répertoire parent. Un fichier nommé « .base_settings » est désormais visible.

Omettre les entrées « . » et « .. »

Si vous souhaitez voir les fichiers cachés sans les entrées « . » et « .. », utilisez l’option -A (presque tout) :

ls -l -A

Le fichier caché est toujours listé, mais les entrées « . » et « .. » sont omises.

Listage récursif

Pour que ls affiche les fichiers de tous les sous-répertoires, utilisez l’option -R (récursive) :

ls -l -R

ls parcourt toute l’arborescence à partir du répertoire de départ et liste les fichiers de chaque sous-répertoire.

Affichage des UID et GID

Pour afficher les identifiants (UID) d’utilisateur et de groupe (GID) au lieu de leurs noms, utilisez l’option -n (UID et GID numériques) :

ls -n

Tri des listes

Vous pouvez trier le listage par extension, taille de fichier ou heure de modification. Il est souvent judicieux de combiner ces options avec le format de liste longue, notamment pour l’affichage des tailles.

Pour trier par extension, utilisez l’option -X (trier par extension) :

ls -X -1

Les répertoires sont affichés en premier (sans extension), puis les autres, classés par ordre alphabétique des extensions.

Pour trier par taille de fichier, utilisez l’option -S (trier par taille) :

ls -l -h -S

Le tri se fait du plus grand au plus petit fichier.

Pour trier par date de dernière modification, utilisez l’option -t (trier par date) :

ls -l -t

Le listage est trié par date de dernière modification.

Si la date de modification se situe dans l’année en cours, les informations affichées sont le mois, le jour et l’heure. Sinon, ce seront le mois, le jour et l’année.

Un moyen rapide d’obtenir les fichiers les plus récents ou les plus anciens d’un répertoire est d’utiliser ls avec les commandes head et tail. Voici la commande pour obtenir le fichier ou le répertoire le plus récent :

ls -t | head -1

Et pour obtenir le fichier ou répertoire le plus ancien :

ls -t | tail -1

Inverser l’ordre de tri

Pour inverser un ordre de tri, utilisez l’option -r (inverse) :

ls -l -h -S -r

Le listage est désormais trié du plus petit au plus grand fichier.

Et ce n’est pas tout

La page de manuel de ls révèle encore de nombreuses options pour des cas d’utilisation plus spécifiques. Vous serez ravi de les connaître le jour où vous en aurez besoin.

Par exemple, avez-vous besoin d’une précision maximale sur les horodatages des fichiers ? Utilisez l’option --full-time :

ls --full-time

Vous souhaitez afficher le numéro d’inode des fichiers ? Utilisez l’option -i :

ls -i

Vous travaillez sur un écran monochrome et vous souhaitez éviter toute confusion entre les fichiers, répertoires et liens ? Utilisez l’option --classify ou -F. ls ajoutera l’un des symboles suivants à chaque entrée :

/ : Un répertoire.
@ : Un lien symbolique.
| : Un tube nommé.
= : Un socket.
* : Un fichier exécutable.

ls -F

Explorez ces options ! Vous découvrirez que ls est un outil incroyablement riche, dont vous ne cesserez de tirer profit.