GNU/Linux >> Tutoriels Linux >  >> Linux

Commande ls sous Linux :17 exemples utiles expliqués

Le ls La commande est l'une des premières commandes que nous apprenons lors de la découverte du shell. Et après, quel que soit votre niveau, il restera l'un des plus utilisés.

Malgré cette popularité, nous allons rarement au-delà du -l , -d et -a options. C'est dommage car un ls typique la mise en œuvre a des dizaines d'options disponibles ! Je vous propose donc de me suivre dans ma recherche du ls commander des joyaux cachés.

Exemple de hiérarchie de fichiers que nous utilisons dans ce guide de commande ls

Avant d'entrer dans le vif du sujet, nous avons besoin d'un peu de préparation :il serait difficile d'étudier les ls commande sans répertoire sur lequel travailler. Afin que vous puissiez essayer sur votre ordinateur les commandes données dans cet article, voici comment créer l'exemple de hiérarchie de fichiers que j'utiliserai dans tous mes exemples. Copiez-collez simplement cette liste de commandes sur votre terminal et vous serez prêt :

mkdir ls
cd ls
# Create a hidden file:
echo You can not see me > .hidden
# Create a couple of 2MiB files:
dd if=/dev/zero of=a bs=1M count=2
dd if=/dev/zero of=b bs=1M seek=1 count=1
# Create few sub-directories
mkdir -p dir/subdir dir/subdir2
# Create a bunch of empty files
touch c dir/{d,e,f} dir/subdir/{g,h,i} dir/subdir2/{j,k,l}
# Create few links (hard and symbolic)
ln  dir/e hardlink-to-file
ln -s dir/f symlink-to-file
ln -s dir/subdir symlink-to-subdir

Si vous rencontrez des problèmes avec ces commandes, n'hésitez pas à utiliser la section des commentaires pour demander de l'aide. En supposant que tout soit en ordre, il est temps de plonger dans notre sujet principal.

Les cas d'utilisation bien connus de la commande ls

Comme chaque voyage commence par une première étape, examinons d'abord les cas d'utilisation très basiques pour le ls commande. Bien sûr, si vous vous considérez comme un expert, n'hésitez pas à passer immédiatement aux sections les plus avancées. Mais si vous préférez rester avec moi pour l'instant, tant mieux :vous pourriez apprendre une chose ou deux !

<no option> :le comportement par défaut

Le ls La commande donne des informations sur chaque objet de type fichier pointé par les chemins indiqués sur la ligne de commande. Lorsqu'il est utilisé sans aucune option :

  • la seule information affichée est le nom de l'objet de type fichier pointé par le chemin ;
  • si ce chemin pointe vers un répertoire (ou un lien symbolique vers un répertoire), le ls la commande répertorie également le contenu de ce répertoire ;
  • si plusieurs entrées sont affichées, elles sont triées dans l'ordre alphabétique de leur nom de fichier.

Enfin, lorsqu'aucun chemin n'est donné sur la ligne de commande, le ls les commandes supposent ./ –c'est le répertoire courant.

Voyons maintenant toutes ces règles en action :

# display the content of the current directory
sh:~/ls$ ls ./
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# without any option, `ls` is equivalent
# to `ls ./`
sh:~/ls$ ls
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# entries are sorted alphabetically
# ("dir/f" starts with a "d" so it is before "e")
sh:~/ls$ ls c b e dir/f a
a  b  c  dir/f    e

# when a command line argument is a directory
# (or a symbolic link to a directory)
# displays its content
sh:~/ls$ ls a b c link-to-subdir dir
a  b  c

dir:
d  e  f  subdir  subdir2

link-to-subdir:
g  h  i

-d :ne liste pas le contenu du répertoire

Avec le -d option, ls n'affiche plus le contenu du répertoire donné sur la ligne de commande mais traite plutôt les entrées de répertoire comme des entrées de fichier. Comparons :

# Default behavior: display the content of the `dir` directory
sh:~/ls$  ls a dir b
a  b

dir:
d  e  f  subdir  subdir2

# `-d` option: directories are handled like files
sh:~/ls$  ls -d a dir b
a  b  dir

Lors de l'utilisation du -d option seule, il n'y a pas beaucoup de différence entre ls et un simple echo commande :

# In both case, the `*` glob pattern is expanded by
# the shell, which also takes care of
# sorting entries in the alphabetical order
sh:~/ls$  ls -d *
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

sh:~/ls$  echo *
a b c dir hardlink-to-file symlink-to-file symlink-to-subdir

Mais le -d l'option devient plus utile lorsqu'elle est associée à une autre option pour afficher des informations supplémentaires, comme lors de l'utilisation de -l drapeau nous allons voir maintenant.

-l :l'option format long

Dans le ls concours de popularité des options, le -l (lettre ell minuscule) serait probablement le gagnant. C'est tellement utile que de nombreux systèmes offrent un ll alias pour ls -l (ou ls -l<something> )

Le -l correspond au format long. Avec cette option, le ls La commande affichera chaque entrée sur sa propre ligne contenant les informations suivantes :* mode de fichier * nombre de liens * nom du propriétaire * nom du groupe * nombre d'octets dans le fichier * date et heure * chemin d'accès

Aussi, avec le -l option, ls ne suivra plus les liens symboliques. Ainsi, il affichera les informations (mode de fichier, nombre de liens, etc.) sur le lien lui-même, et non sur sa destination. Pour la même raison, le ls La commande n'affichera pas le contenu des répertoires pointés par des liens symboliques :

# Default behavior: displays only the filename and
# follows symbolic links:
sh:~/ls$  ls *
a  b  c  e  f  hardlink-to-file  symlink-to-file

dir:
d  e  f  subdir  subdir2

link-to-subdir:
g  h  i

symlink-to-subdir:
g  h  i

# `-l` option: displays extended informations and
# no longer follows symbolic links
sh:~/ls$  ls -l *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 19 22:18 c
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 22:18 symlink-to-subdir -> dir/subdir

dir:
total 8
-rw-r--r-- 1 sylvain sylvain    0 Sep 19 22:18 d
-rw-r--r-- 3 sylvain sylvain    0 Sep 19 22:18 e
-rw-r--r-- 1 sylvain sylvain    0 Sep 19 22:18 f
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir
drwxr-xr-x 2 sylvain sylvain 4096 Sep 19 12:09 subdir2

Pour conclure cette section, je vous laisse examiner la sortie que nous obtenons en combinant à la fois le -l et -d option :

sh:~/ls$  ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 19 22:18 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 19 12:09 dir
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 e
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 12:09 f -> dir/f
-rw-r--r-- 3 sylvain sylvain       0 Sep 19 22:18 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 12:09 link-to-subdir -> dir/subdir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 19 22:18 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 19 22:18 symlink-to-subdir -> dir/subdir

-a :affiche tous les fichiers

Avec le -a option, ls inclut les fichiers cachés lors de l'affichage du contenu d'un répertoire. Mais qu'est-ce qu'un fichier caché ?

Par convention, sur les systèmes de type Unix, un fichier dont le nom commence par un point est considéré comme caché. De plus, chaque répertoire contient également deux entrées spéciales, normalement masquées :. et ..

Dans chaque répertoire :

  • le . points d'entrée vers le répertoire lui-même. Ce genre d'auto-référence peut sembler curieux. Mais c'est parfois utile, un peu comme avoir son propre numéro de téléphone dans le répertoire de son smartphone.
  • le .. points d'entrée vers le répertoire parent. Étant donné que la hiérarchie des fichiers sur les systèmes de type Unix est strictement organisée en arborescence, chaque répertoire a un et un seul parent. Sauf le répertoire racine / peut être? Eh bien, pas vraiment :le parent du répertoire racine est… le répertoire racine lui-même.
# Default behavior: do not display hidden entries
# (including . and ..)
sh:~/ls$  ls
a  c    e  hardlink-to-file  symlink-to-file
b  dir    f  link-to-subdir    symlink-to-subdir

# `-a` option: show hidden files and directories
sh:~/ls$  ls -a
.   a  c    e  hardlink-to-file  link-to-subdir   symlink-to-subdir
..  b  dir  f  .hidden         symlink-to-file

Les options utiles de la commande ls

Après avoir passé en revue le bien connu -l , -d et -a options, tournons notre attention vers quelques options moins connues que je trouve particulièrement utiles.

-s :affiche la taille allouée

Vous vous souvenez peut-être du -l option affiche le nombre d'octets dans le fichier. Le -s L'option affiche la taille allouée en blocs. Qu'est-ce qu'un bloc ? Eh bien, un groupe d'octets dont la taille dépend de l'implémentation. Il est généralement de 512 octets sous BSD et de 1 024 octets sous Linux.

Pourquoi devrais-je m'embêter avec la taille en blocs alors que j'ai déjà accès à la taille en octets ? Eh bien, le -s les options affichent les alloués Taille. Pas la logique taille du fichier. Il peut s'agir de deux choses complètement différentes pour les fichiers fragmentés. Les fichiers fragmentés sont des fichiers qui contiennent des "trous". Lors de la lecture, ces trous se comportent comme des blocs de fichiers normaux contenant uniquement des zéros. Mais ils ne prennent pratiquement pas d'espace sur le disque. Nous pouvons utiliser le dd commande avec le seek option pour créer des fichiers clairsemés comme je l'ai fait pour le b fichier dans mon exemple de hiérarchie :

sh:~/ls$ ls -ls a b
2052 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 a
1028 -rw-r--r-- 1 sylvain sylvain 2097152 Sep 19 22:18 b

Comme vous pouvez le voir, mes deux a et b les fichiers semblent avoir une longueur de deux mébioctets. Mais le b fichier étant clairsemé, il ne prend que 1028 blocs sur le disque (environ un mébioctet).

-h afficher des tailles lisibles par l'homme

Avec le -h option, ls affichera les tailles de fichier en utilisant des suffixes d'unité pour les rendre plus conviviaux. Cette option n'a de sens que lorsqu'elle est utilisée en combinaison avec le -l (Linux, BSD) ou -s (Linux):

sh:~/ls$ ls -lsh a b
2.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.0M Sep 19 22:18 b

openbsd-6.3$ ls -lsh a b
4128 -rw-r--r--  1 sylvain  sylvain   2.0M Sep 19 23:49 a
2112 -rw-r--r--  1 sylvain  sylvain   2.0M Sep 19 23:49 b

Vous avez peut-être remarqué que les tailles sont affichées en utilisant des puissances de 1024 unités, où K représente 2^10=1024 octets, M pour 1024^2=1048576 octets et ainsi de suite. Il convient de mentionner ici le ls l'implémentation fournie dans le cadre de GNU Coreutils a un --si supplémentaire options pour utiliser la puissance 1000 au lieu des puissances de 1024 :

sh:~/ls$ ls -lsh --si a b
2.2M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 a
1.1M -rw-r--r-- 1 sylvain sylvain 2.1M Sep 19 22:18 b

-i afficher le numéro d'inode

Sur un système de fichiers de style Unix, un numéro d'inode (ou numéro de série de fichier dans la terminologie POSIX) est un nombre qui identifie de manière unique un objet du système de fichiers (un fichier, un répertoire, un tube nommé, …). Avec le -i option, le ls La commande affichera son numéro d'inode à côté de chaque chemin.

Même si cela semble quelque peu exotique, je me retrouve à utiliser le -i option de temps en temps, en particulier pour identifier les entrées de répertoire qui font référence au même objet de système de fichiers. Vous utiliserez cette option principalement lors de la recherche de liens physiques ou de montages liés. Regardez cette vidéo pour un exemple pratique :https://youtu.be/Jp58Osb1uFo?t=140

sh:~/ls$  ls -i *
8222 a    8243 b    8262 c    8264 hardlink-to-file  8272 symlink-to-file

dir:
8263 d    8264 e    8265 f    8245 subdir  8261 subdir2

symlink-to-subdir:
8266 g    8267 h    8268 i

Dans l'exemple ci-dessus, vous pouvez voir chaque nom de fichier préfixé par le numéro d'inode associé à ce chemin. Sur votre système, les chiffres seront sûrement différents. Quoi qu'il en soit, regardez de plus près le hardlink-to-file et dir/e entrées. Les deux ont le même numéro d'inode (8264 dans mon cas). Cela signifie qu'il s'agit de deux entrées faisant référence au même objet de système de fichiers sous-jacent, ce qui est, en fait, la définition exacte de ce qu'est un lien physique.

Vous vous souvenez peut-être que j'ai dit plus tôt que le parent du répertoire racine était le répertoire racine lui-même. En utilisant le -i option, il est assez facile de vérifier cette assertion :

openbsd-6$  ls -id /
2 /
openbsd-6$ ls -ia /
    2 .             25985 bin               5 dev           77954 sbin
    2 ..             1235 boot          51969 etc              10 sys
    8 .cshrc         1240 bsd               2 home              7 tmp
    9 .profile       1241 bsd.booted    77953 mnt               2 usr
51968 altroot           4 bsd.rd        26016 root          78016 var

Comme vous pouvez le voir, sur mon système, le répertoire racine est associé à l'inode numéro 2, qui est également l'inode de son parent. Cela prouve donc que le répertoire racine est son propre parent.

Les options rarement utilisées de la commande ls

J'utilise régulièrement les options décrites dans la section précédente, mais celles dont je vais parler maintenant… eh bien… je sais qu'elles existent. Cependant, je dois admettre que lorsque j'en ai besoin, je dois souvent regarder le man pour me rafraîchir la mémoire.

-L :affiche des informations sur la cible des liens symboliques

Cette option modifie le comportement du ls commande lorsqu'elle est appliquée à des liens symboliques. Avec le -L option, ls affichera les informations sur la cible du lien symbolique au lieu d'afficher ceux liés au lien symbolique lui-même. En examinant l'exemple suivant, la différence sera évidente :

# Pay special attention to the permission
# and file size for symbolic links with and without
# the `-L` option:
sh:~/ls$  ls -ld *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
lrwxrwxrwx 1 sylvain sylvain       5 Sep 20 00:09 symlink-to-file -> dir/f
lrwxrwxrwx 1 sylvain sylvain      10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
[email protected]:/tmp/ls/ls/ls$ ls -lLd *
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 a
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 symlink-to-file
drwxr-xr-x 2 sylvain sylvain    4096 Sep 20 00:09 symlink-to-subdir

-F :ajoute un caractère de classification au nom du fichier

Le -F L'option ajoute un caractère supplémentaire après le chemin d'accès de certaines catégories d'objets du système de fichiers pour les identifier. Il ajoutera :

  • un \ après chaque chemin d'accès qui est un répertoire,
  • un @ après chaque nom de chemin qui est un lien symbolique,
  • un * après chaque fichier exécutable,
  • et un | après chaque FIFO (voir mkfifo pour plus d'informations à ce sujet)

À mes débuts sous Unix, j'utilisais beaucoup cette option. Mais depuis ls peut coloriser sa sortie (et puisque nous avons des moniteurs couleur !), j'en ai rarement besoin. Mais je m'en souviens. Et de temps en temps, sur un terminal distant, je trouve une occasion de l'utiliser :

sh:~/ls$ ls -F
a  b  c  dir/  hardlink-to-file  [email protected]  [email protected]

t :trier les entrées par heure de modification

Avec le -t option, le ls commande avec les entrées du répertoire d'affichage triées par date de modification (la plus récente en premier) au lieu de les trier par leur nom :

# Default sort order (by filename)
sh:~/ls$  ls
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

# Sort by modification date
sh:~/ls$ ls -t
symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b  a

Si je modifie un fichier, il apparaîtra désormais comme la première entrée (c'est-à-dire la plus récemment modifiée) de la liste :

sh:~/ls$ echo >> a
sh:~/ls$ ls -t
a  symlink-to-subdir  symlink-to-file  c  dir  hardlink-to-file  b

-S :trier les entrées par taille

Avec le -S option, ls affichera les entrées triées par taille, le plus grand fichier en premier. En cas d'égalité, les entrées sont triées selon leur chemin :

sh:~/ls$ ls -lS
total 6244
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file

-r :ordre de tri inversé

Cette option inverse l'ordre de tri. Je le trouve plus utile lorsqu'il est associé au -t option pour afficher le fichier le moins récemment modifié en premier ou avec le -S option pour afficher le plus petit fichier en premier. Mais cela fonctionne également avec l'ordre de tri par défaut, par chemin d'accès :

# Display the least recently modified file first
sh:~/ls$ ls -rt
b  hardlink-to-file  dir  c  symlink-to-file  symlink-to-subdir  a

# Display the smallest file first
sh:~/ls$ ls -rS
hardlink-to-file  c  symlink-to-file  symlink-to-subdir  dir  b  a

# Display path names in reversed alphabetical order
sh:~/ls$ ls -r
symlink-to-subdir  symlink-to-file  hardlink-to-file  dir  c  b  a

-n :Afficher l'UID/GID numérique

Cette option est exactement la même que le -l option— sauf avec -n l'identifiant de groupe (GID) et l'identifiant utilisateur (UID) du propriétaire sont affichés sous forme de nombres plutôt que d'utiliser leur nom associé :

 sh:~/ls$ ls -ld a b c /
drwxr-xr-x 28 root    root       4096 May  6 00:28 /
-rw-r--r--  1 sylvain sylvain 2097153 Sep 20 00:45 a
-rw-r--r--  1 sylvain sylvain 2097152 Sep 20 00:09 b
-rw-r--r--  1 sylvain sylvain       0 Sep 20 00:09 c
sh:~/ls$ ls -nd a b c /
drwxr-xr-x 28    0    0    4096 May  6 00:28 /
-rw-r--r--  1 1000 1000 2097153 Sep 20 00:45 a
-rw-r--r--  1 1000 1000 2097152 Sep 20 00:09 b
-rw-r--r--  1 1000 1000       0 Sep 20 00:09 c

L'utilisation vraiment exotique de la commande ls

Personne ne peut prétendre tout savoir. Et en écrivant cet article, j'ai (re-)découvert quelques ls options. Je ne me souviens pas les avoir utilisés moi-même, mais peut-être l'avez-vous fait ? Si tel est le cas, je serais curieux de lire dans la section commentaire dans quelles circonstances vous les trouvez utiles. Quoi qu'il en soit, voici une sélection qui pourrait vous intéresser.

-R :liste récursivement les sous-répertoires

Par défaut, le ls La commande affiche uniquement le contenu des répertoires explicitement donnés sur la ligne de commande. Avec le -R option, il affichera aussi récursivement le contenu des répertoires rencontrés :

sh:~/ls$ ls -R
.:
a  b  c  dir  hardlink-to-file    symlink-to-file  symlink-to-subdir

./dir:
d  e  f  subdir  subdir2

./dir/subdir:
g  h  i

./dir/subdir2:
j  k  l

Bien qu'intéressant en théorie, je trouve (jeu de mots) la sortie produite par le find . commande plus lisible à cet effet. Mais votre kilométrage peut varier, bien sûr :

sh:~/ls$  find .
.
./c
./.hidden
./hardlink-to-file
./b
./symlink-to-subdir
./dir
./dir/d
./dir/e
./dir/subdir2
./dir/subdir2/l
./dir/subdir2/j
./dir/subdir2/k
./dir/subdir
./dir/subdir/g
./dir/subdir/i
./dir/subdir/h
./dir/f
./symlink-to-file
./a

-A :affiche presque tous les fichiers

Bien qu'il ne soit pas défini dans la norme POSIX, le -A les options apparaissent à la fois dans le monde GNU et BSD. Dans les deux cas, cela fonctionne comme -a , mais en excluant le . et .. entrées. À mentionner sur les systèmes BSD, -A est implicite pour le superutilisateur :

sh:~/ls$  ls -a
.   a  c    hardlink-to-file  symlink-to-file
..  b  dir  .hidden          symlink-to-subdir
sh:~/ls$  ls -A
a  b  c  dir  hardlink-to-file    .hidden  symlink-to-file  symlink-to-subdir

openbsd-6.3$ su root
openbsd-6.3# ls
.hidden a  b  c  dir  hardlink-to-file  symlink-to-file  symlink-to-subdir

-f :ne pas trier

Avec le -f option, ls affichera les entrées dans l'ordre dans lequel elles apparaissent dans le répertoire. Cet ordre dépend du système de fichiers sous-jacent et les fichiers de commande ont été créés, il est donc difficilement prévisible. Le -f l'option implique également le -a choix :

sh:~/ls$  ls -f
..  .hidden          b             dir          a
c   hardlink-to-file  symlink-to-subdir  symlink-to-file  .

openbsd-6$ ls -f
.                   a                   c                   symlink-to-subdir
..                  b                   hardlink-to-file
.hidden             dir                 symlink-to-file

Assez amusant, avec le GNU Coreutils 8.26 ls implémentation, vous pouvez utiliser à la fois le -l et -f options si vous l'épelez -fl –mais pas si vous écrivez -lf . Sur OpenBSD, les deux fonctionnent comme prévu :

sh:~/ls$ ls -lf
..  .hidden          b             dir          a
c   hardlink-to-file  symlink-to-subdir  symlink-to-file  .
sh:~/ls$ ls -fl
total 3100
drwxr-xr-x 3 sylvain sylvain    4096 Sep 19 12:09 ..
-rw-r--r-- 1 sylvain sylvain       0 Sep 20 00:09 c
-rw-r--r-- 1 sylvain sylvain      19 Sep 20 00:09 .hidden
-rw-r--r-- 2 sylvain sylvain       0 Sep 20 00:09 hardlink-to-file
-rw-r--r-- 1 sylvain sylvain 2097152 Sep 20 00:09 b
lrwxrwxrwx 1 sylvain sylvain      10 Sep 20 00:09 symlink-to-subdir -> dir/subdir
drwxr-xr-x 4 sylvain sylvain    4096 Sep 20 00:09 dir
lrwxrwxrwx 1 sylvain sylvain       5 Sep 20 00:09 symlink-to-file -> dir/f
-rw-r--r-- 1 sylvain sylvain 2097153 Sep 20 00:45 a
drwxr-xr-x 3 sylvain sylvain    4096 Sep 20 00:09 .

openbsd-6$ ls -lf
total 6256
drwxr-xr-x  3 sylvain  sylvain      512 Sep 19 23:49 .
drwxr-xr-x  5 sylvain  sylvain      512 Sep 19 23:49 ..
-rw-r--r--  1 sylvain  sylvain       19 Sep 19 23:49 .hidden
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir
openbsd-6$ ls -fl
total 6256
drwxr-xr-x  3 sylvain  sylvain      512 Sep 19 23:49 .
drwxr-xr-x  5 sylvain  sylvain      512 Sep 19 23:49 ..
-rw-r--r--  1 sylvain  sylvain       19 Sep 19 23:49 .hidden
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 a
-rw-r--r--  1 sylvain  sylvain  2097152 Sep 19 23:49 b
drwxr-xr-x  4 sylvain  sylvain      512 Sep 19 23:49 dir
-rw-r--r--  1 sylvain  sylvain        0 Sep 19 23:49 c
-rw-r--r--  2 sylvain  sylvain        0 Sep 19 23:49 hardlink-to-file
lrwxr-xr-x  1 sylvain  sylvain        5 Sep 19 23:49 symlink-to-file -> dir/f
lrwxr-xr-x  1 sylvain  sylvain       10 Sep 19 23:49 symlink-to-subdir -> dir/subdir

-q :affiche les caractères de nom de fichier non imprimables sous la forme ?

Sur les systèmes de fichiers de style Unix, un nom de fichier peut contenir n'importe quel caractère sauf le \ et les caractères NUL. Cela signifie qu'un nom de fichier peut contenir des caractères non imprimables ou même des séquences de contrôle qui peuvent interférer avec votre terminal. Essayons quelque chose d'amusant :

touch "$(echo -e '\x1B[7mBOO\x1B[0m')"

De toute évidence, ce nom de fichier contient des caractères non imprimables. Sur les implémentations modernes de ls , le -q L'option est implicite lorsque la sortie est un terminal, pour éviter les effets néfastes potentiels. Ainsi les caractères non imprimables seront remplacés par un point d'interrogation :

sh:~/ls$ ls *BOO*
?[7mBOO?[0m

Cependant, les choses seront différentes si vous écrivez plutôt :

# I let you try that by yourself
# to not spoil the fun;)
sh:~/ls$ ls *BOO* | cat

Le | cat est inutile, mais comme effet secondaire, le ls La commande voit maintenant un tube sur sa sortie standard au lieu d'un tty (un "terminal"). Puisque la sortie n'est plus un terminal, le -q l'option n'est plus implicite, et ls affichera le nom du fichier tel quel. Dans ce cas, si tout fonctionne comme prévu, pour présenter le nom du fichier avec un effet vidéo funky.

Utiliser explicitement le -q l'option résoudrait cela. Je vous laisse essayer par vous-même (et éventuellement jouer avec d'autres séquences d'échappement ANSI). Mais je profite de cette occasion pour vous mettre en garde contre l'utilisation du ls commande dans les scripts shell. En pratique, ls est destiné à la « consommation humaine ». Il existe de nombreux cas secondaires concernant des noms de fichiers spécialement conçus qui sont très difficiles à gérer correctement. Si vous avez besoin de parcourir une liste de fichiers, je vous encourage fortement à utiliser la commande find à la place. Dans les cas les plus simples, un simple for boucle est même suffisante, mais ce serait une autre histoire.

for f in *; do echo "$f"; done

La fin ?

Voilà qui conclut notre visite du ls options de commande. Inutile de le préciser c'était loin d'être exhaustif et j'ai essayé de me concentrer ici sur les options les plus utiles et les plus portables. Mais chaque ls l'implémentation a sa part de fonctionnalités intéressantes, donc si vous connaissez une option intéressante que j'ai manquée dans cet article, n'hésitez pas à la partager avec nous en utilisant la section des commentaires. Si nous avons suffisamment de commentaires, nous pouvons même les compiler et les publier dans un article de suivi !

En parlant de la commande ls, connaissez-vous la commande lsof ? Il n'est pas lié à ls mais il vous indique quel utilisateur accède à un certain fichier.


Linux
  1. 7 Exemples de commandes Linux df

  2. 8 Exemples de commandes Linux TR

  3. Exemples de commande rm sous Linux

  4. Exemples de commandes ps sous Linux

  5. w Exemples de commandes sous Linux

9 Exemples de commandes tactiles utiles sous Linux

Explication de la commande Linux rm pour les débutants (8 exemples)

Commande Tr sous Linux expliquée avec des exemples

w Commande expliquée avec des exemples sous Linux

12 exemples de commandes de date Linux utiles

Exemples de commandes id sous Linux