Linux : comment afficher les fichiers et dossiers cachés ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à afficher, ou lister si vous préférez, les fichiers et dossiers cachés sous Linux, en utilisant une commande que vous connaissez tous : la commande "ls". Par défaut, lorsque l'on utilise "ls" dans un Terminal sous Linux, les fichiers et dossiers cachés ne sont pas présents dans la liste des résultats. Néanmoins, c'est bien pratique d'avoir ces éléments dans la liste, car ils sont fréquents : les fichiers .htaccess dans le répertoire d'un site web ou le répertoire .git dans un projet Git sont deux exemples parmi tant d'autres.
Qu'est-ce qui différencie un fichier ou un dossier caché d'un élément visible ? C'est simple, c'est le "." au tout début du nom qui permet de masquer l'élément, que ce soit un dossier ou un fichier.
Au-delà de la commande "ls", nous allons aussi utiliser "grep" et "find" dans cet article. J'utilise une machine sous Debian 11, mais vous pouvez utiliser une autre distribution.
II. Lister les fichiers et dossiers cachés
La commande "ls" avec l'option "-a" permet d'indiquer "all", c'est-à-dire tous les éléments, y compris ceux qui sont masqués. Il est à noter que vous pouvez utiliser également l'option "-A".
ls -a
Si l'on regarde l'image ci-dessous, on voit la différence avec ou sans cette option. Le fichier ".htaccess" situé à la racine de mon répertoire "/var/www/html" est bien visible.
III. Lister uniquement les fichiers et dossiers cachés
La commande "ls" n'intègre pas d'option pour lister uniquement les éléments masqués. Néanmoins, on sait que tous les fichiers et dossiers masqués ont un nom qui commence par "." donc on peut exploiter cette information. En couplant l'utilisation de "ls" avec "grep", on peut affiner la sortie dans le Terminal.
ls /var/www/html/ -a | grep "^\."
Ou dans le répertoire courant :
ls -a | grep "^\."
A quoi correspond la valeur "^\." ? En fait, il s'agit d'une expression régulière où "^" permet d'indiquer le début de la valeur, le "\" permet de faire un échappement sur le ".", car c'est le caractère que l'on recherche. Autrement dit, cette expression régulière permet de filtrer pour récupérer les éléments dont le nom commence par un ".". Sans ce filtre qui recherche sur le début de la valeur, on aurait la liste de tous les fichiers et dossiers avec un "." dans le nom, peu importe la position dans la valeur.
On peut voir que ce filtre avec "grep" fonctionne bien :
Au-delà du fichier, il y a deux autres valeurs dans cette liste :
. ..
Le premier avec un seul point indique le dossier courant tandis que le second avec deux points indique le dossier parent.
L'inconvénient de cette méthode, c'est que la liste ne permet pas d'identifier facilement s'il s'agit d'un fichier ou d'un dossier, car il n'y a pas d'indicateur ni de code couleur. L'alternative consiste à utiliser la commande "ls" différemment, comme ceci :
ls -ld .*
L'option "-l" permet d'avoir la liste des éléments tandis que l'option "-d" sert à avoir uniquement les noms des dossiers (au lieu de la liste du contenu). C'est important d'utiliser ces deux options conjointement dans cet exemple pour avoir le résultat attendu. Ainsi, dans la liste obtenue, on peut différencier les dossiers des fichiers grâce au code couleur, mais aussi avec la présence du caractère "d" en début de ligne quand il s'agit d'un dossier.
IV. Rechercher les fichiers et dossiers cachés avec récursivités
Pour partir à la recherche des fichiers et dossiers à partir d'un dossier racine, avec récursivité, la commande "find" est adaptée. On recherche les éléments et pour chaque occurrence, un "ls" est fait pour récupérer des informations sur l'élément. Voici la syntaxe à utiliser :
find /var/www/html/ -name ".*" -ls
Pour récupérer uniquement les fichiers cachés :
find /var/www/html/ -type f -name ".*" -ls
Pour récupérer uniquement les dossiers cachés :
find /var/www/html/ -type d -name ".*" -ls
Voilà, avec ces différentes commandes, vous êtes en mesure de rechercher les fichiers et dossiers cachés sous Linux !