Ce contenu est fourni sous licence CC BY-NC-SA 4.0
Notes sur la commande ls
Introduction
La commande ls est une commande de base sur les systèmes Unix et GNU/Linux. Elle est généralement connue des utilisateurs. Est-elle pour autant maîtrisée ? Je ne le pense pas. Moi-même, je ne pourrais pas dire que je la maîtrise complètement. Cette page me sert à noter ce que je considère comme très utile.
Note : pour des raisons de simplification, je parle de “fichier ou dossier” mais “tout est fichier”. De plus, je ne préciserai tout autre chose (les liens symboliques, les périphériques en mode bloc, …) uniquement que si nécessaire.
ls fait partie du projet GNU coreutils.
Utilisation basique
Ici, je liste les options de base de la commande et leur explication. L’idée est de ne pas perdre les éventuels débutants qui viendraient consulter cette page.
# base : afficher les fichiers et dossiers du répertoire courant
cedric@portable:/$ ls
bin boot cdrom dev etc home initrd.img initrd.img.old lib lib64 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var vmlinuz vmlinuz.old
# afficher les fichiers et dossiers du répertoire passer en argument
cedric@portable:/$ ls /usr
bin games include lib libexec local sbin share src
# afficher les fichiers et dossiers mais au format long
cedric@portable:/$ ls -l
total 108
drwxr-xr-x 2 root root 4096 déc. 22 09:42 bin
drwxr-xr-x 3 root root 4096 déc. 22 11:30 boot
drwxrwxr-x 2 root root 4096 déc. 9 2016 cdrom
drwxr-xr-x 20 root root 4220 janv. 14 23:11 dev
drwxr-xr-x 166 root root 12288 janv. 8 20:24 etc
drwxr-xr-x 5 root root 4096 mai 17 2019 home
lrwxrwxrwx 1 root root 33 déc. 22 09:49 initrd.img -> boot/initrd.img-4.15.0-72-generic
lrwxrwxrwx 1 root root 33 déc. 22 09:49 initrd.img.old -> boot/initrd.img-4.4.0-170-generic
...
...
...
# 1ere colonne : les droits associés au fichier ou au dossier
# 2e colonne : le nombre de hard links sur le dossier ou le fichier
# 3e colonne : l'utilisateur propriétaire du fichier ou du dossier
# 4e colonne : le groupe propriétaire du fichier ou du dossier
# 5e colonne : date/heure de dernière modification du fichier ou du dossier
# 6e colonne : le nom du fichier ou du dossier
# l'affichage de initrd.img et initrd.img.old montre que ce sont des liens symboliques : ils "pointent" vers le fichier dont le chemin relatif est mentionné
# affichage de la taille des fichiers pour les humains
# par défaut, la taille des fichiers est en octets ; pour simplifier la lecture, on passe l'option -h
# "h" pour "human readable" :
# très utile : la taille totale est affichée sur les versions récentes de GNU coreutils
cedric@portable:/$ ls -lh $HOME/Vidéos/
total 1,7G
-rw-r--r-- 1 cedric cedric 49M août 15 2017 00046.MTS
-rw-r--r-- 1 cedric cedric 75M août 15 2017 00047.MTS
-rw-r--r-- 1 cedric cedric 66M août 15 2017 00048.MTS
-rw-r--r-- 1 cedric cedric 48M août 15 2017 00049.MTS
-rw-r--r-- 1 cedric cedric 359M août 15 2017 00050.MTS
-rw-r--r-- 1 cedric cedric 61M août 15 2017 00051.MTS
-rw-r--r-- 1 cedric cedric 16M août 15 2017 00052.MTS
...
...
...
# affichage des fichiers et dossiers "cachés"
# les fichiers et dossiers "cachés" sont ceux dont le nom commencent par un "."
# ils sont cachés pour ne pas perturber l'utilisateur
cedric@portable:/$ ls -a $HOME
. .. .audacity-data .bash_history .bash_logout .bashrc .bundle .cache .config .dbus .fonts.conf .gconf .gem
Trier l’affichage de la commande ls
# le tri par défaut, toujours actif, est le tri selon l'ordre alphabétique mais...
# ... en tenant compte u fait que les majuscules et les minuscules représentant les mêmes lettres ont la même signification pour les humains
# ... et pareil pour les caractères séparateurs : espace, - et _
# inversion d'un ordre de tri : -r
# quel que soit le tri, par -r, le tri est inversé
# trier par taille de fichier (plus grand en premier)
cedric@portable:/$ ls -lhS $HOME/Vidéos/
total 1,7G
-rw-r--r-- 1 cedric cedric 359M août 15 2017 00050.MTS
-rw-r--r-- 1 cedric cedric 75M août 15 2017 00047.MTS
-rw-r--r-- 1 cedric cedric 68M août 15 2017 00069.MTS
-rw-r--r-- 1 cedric cedric 66M août 15 2017 00048.MTS
-rw-r--r-- 1 cedric cedric 61M août 15 2017 00051.MTS
-rw-r--r-- 1 cedric cedric 59M août 15 2017 00074.MTS
-rw-r--r-- 1 cedric cedric 56M août 15 2017 00059.MTS
-rw-r--r-- 1 cedric cedric 55M août 15 2017 00072.MTS
...
...
# inverser l'ordre de tri pour avoir les plus petits en premier :
cedric@portable:/$ ls -lhSr $HOME/Vidéos/
total 1,7G
-rw-r--r-- 1 cedric cedric 13M août 15 2017 00075.MTS
-rw-r--r-- 1 cedric cedric 16M août 15 2017 00052.MTS
-rw-r--r-- 1 cedric cedric 18M août 15 2017 00058.MTS
-rw-r--r-- 1 cedric cedric 19M août 15 2017 00055.MTS
-rw-r--r-- 1 cedric cedric 20M août 15 2017 00062.MTS
-rw-r--r-- 1 cedric cedric 23M août 15 2017 00081.MTS
-rw-r--r-- 1 cedric cedric 23M août 15 2017 00064.MTS
# trier par date de modification (plus récent en premier)
cedric@portable:/$ ls -lt /var/cache/dictionaries-common/
total 36
-rw-r--r-- 1 root root 2775 janv. 12 13:27 aspell.db
-rw-r--r-- 1 root root 1802 janv. 12 13:27 emacsen-ispell-dicts.el
-rw-r--r-- 1 root root 1947 janv. 12 13:27 jed-ispell-dicts.sl
-rw-r--r-- 1 root root 655 janv. 12 13:27 sqspell.php
-rw-r--r-- 1 root root 496 déc. 22 09:51 wordlist.db
-rw-r--r-- 1 root root 27 déc. 22 09:51 wordlist-default
-rw-r--r-- 1 root root 173 déc. 22 09:51 emacsen-ispell-default.el
-rw-r--r-- 1 root root 188 déc. 22 09:51 ispell.db
-rw-r--r-- 1 root root 0 déc. 22 09:51 ispell-dicts-list.txt
-rw-r--r-- 1 root root 188 déc. 22 09:47 hunspell.db
# pour avoir les plus anciens un premier :
cedric@portable:/$ ls -ltr /var/cache/dictionaries-common/
total 36
-rw-r--r-- 1 root root 188 déc. 22 09:47 hunspell.db
-rw-r--r-- 1 root root 0 déc. 22 09:51 ispell-dicts-list.txt
-rw-r--r-- 1 root root 188 déc. 22 09:51 ispell.db
-rw-r--r-- 1 root root 173 déc. 22 09:51 emacsen-ispell-default.el
-rw-r--r-- 1 root root 27 déc. 22 09:51 wordlist-default
-rw-r--r-- 1 root root 496 déc. 22 09:51 wordlist.db
-rw-r--r-- 1 root root 655 janv. 12 13:27 sqspell.php
-rw-r--r-- 1 root root 1947 janv. 12 13:27 jed-ispell-dicts.sl
-rw-r--r-- 1 root root 1802 janv. 12 13:27 emacsen-ispell-dicts.el
-rw-r--r-- 1 root root 2775 janv. 12 13:27 aspell.db
affichage en ligne plutôt qu’en colonne
Par défaut, l’ordre de la commande ls peut être difficile à lire. Exemple de cas :
cedric@portable:/$ ls /tmp/test-ls/
aaaaaaa ccccccccccccc eeeeeeeeeeeeeeeeee
aaaaaaaaaaa ccccccccccccccccc ffffffff
aaaaaaaaaaaaaaa ddddddd ffffffffffff
bbbbbbbb ddddddddddd fffffffffffffff
bbbbbbbbbbbb dddddddddddddddd ggggggggggg
bbbbbbbbbbbbbbbb eeeeeeeeee gggggggggggggggg
ccccccccc eeeeeeeeeeeeee ggggggggggggggggggg
Ci-dessus, il faut lire les entrées de la façon suivante :
- d’abord la première colonne, de haut en bas
- ensuite la seconde colonne, de haut en bas
- enfin la troisième colonne, de haut en bas
Cela peut paraître non naturel : lorsque nous lisons un livre, nous sommes habitués à lire d’abord la première ligne de gauche à droite puis ensuite la seconde ligne de gauche à droite et ainsi de suite. Pour retrouver ce comportement, plus naturel, il suffit d’utiliser l’option -x :
cedric@portable:/$ ls -x /tmp/test-ls/
aaaaaaa aaaaaaaaaaa aaaaaaaaaaaaaaa
bbbbbbbb bbbbbbbbbbbb bbbbbbbbbbbbbbbb
ccccccccc ccccccccccccc ccccccccccccccccc
ddddddd ddddddddddd dddddddddddddddd
eeeeeeeeee eeeeeeeeeeeeee eeeeeeeeeeeeeeeeee
ffffffff ffffffffffff fffffffffffffff
ggggggggggg gggggggggggggggg ggggggggggggggggggg
C’est une option que l’on peut recommander d’ajouter à l’alias de la commande ls…
Ce contenu est fourni sous licence CC BY-NC-SA 4.0