Cédric Temple

Administrateur système en logiciels libres

ls, commande pour lister les fichiers et dossiers

2020-01-18 » notes pour plus tard

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 :

  1. d’abord la première colonne, de haut en bas
  2. ensuite la seconde colonne, de haut en bas
  3. 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