La commande ls

Un article de Wiki de la communauté Mandriva.

Jump to: navigation, search

CETTE PAGE EST UNE VERSION RÉVISÉE DE LA PAGE MAINTENANT OBSOLÈTE DE L'ANCIENNE BASE DE CONNAISSANCES :
http://club.mandriva.com/xwiki/bin/view/KB/Ls-Command ptyxs 10 mars 2008 à 16:30 (CET)




Sommaire

[modifier] Le minimum minimorum à connaître pour utiliser ls

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ ls

permet de lister le contenu du répertoire de travail.

Astuce !
Un alias de Mandriva permet de gagner un caractère et de faire simplement
Image:Konsole.png
[utilisateur@ordi ~]$ l


  • La commande :


Image:Konsole.png
[utilisateur@ordi ~]$ ls -l

permet de lister le contenu du répertoire de travail en affichant diverses propriétés pour chaque élément de la liste.

Astuce !
Un alias de Mandriva permet de faire simplement
Image:Konsole.png
[utilisateur@ordi ~]$ ll


  • Les commandes :
Image:Konsole.png
[utilisateur@ordi ~]$ ls -a

ou

Image:Konsole.png
[utilisateur@ordi ~]$ ls -la


permettent de lister le contenu du répertoire de travail en incluant les fichiers cachés.

Astuce !
Un alias de Mandriva permet de faire plus brièvement
Image:Konsole.png
[utilisateur@ordi ~]$ la
ou
Image:Konsole.png
[utilisateur@ordi ~]$ la -l


  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ ls -l repertoire

permet de lister le contenu du répertoire repertoire.

Astuce !
Un alias de Mandriva permet bien sûr de faire
Image:Konsole.png
[utilisateur@ordi ~]$ ll repertoire


Pour plus de détails voir l'ensemble de la page sur La commande ls.


[modifier] Afficher les fichiers et répertoires qui sont à la racine d'un répertoire

[modifier] Afficher les fichiers et répertoires non cachés

Pour l'affichage des fichiers cachés à la sortie de ls, voir #Afficher les fichiers et répertoires cachés et non cachés et #Afficher uniquement les fichiers et répertoires cachés.

[modifier] L'affichage minimal avec ls sans option

La commande :

Image:Konsole.png
[utilisateur@ordi ~]$ ls repertoire

affichera sur plusieurs colonnes les noms de chacun des fichiers et répertoires non cachés situés à la racine du répertoire repertoire. Par exemple :

Image:Konsole.png
[utilisateur@ordi ~]$ ls /home/glin/confitures/

abricot grand_mere/ poire pomme sucre@

La barre oblique finale indique que grand-mere/ est un répertoire, et l'arobase finale (@) indique que sucre@ est un lien symbolique.

Attention !
Ces signes indicatifs ne font pas partie du nom : le nom du répertoire est ici simplement grand_mere et le nom du lien symbolique est seulement sucre.

Dans la ligne de commande qui précède, on a désigné le répertoire par son chemin absolu (le chemin complet, commençant par le répertoire racine : /home/toto/confitures/). On peut aussi utiliser un chemin relatif. Par exemple, si votre répertoire de travail est votre répertoire personnel /home/glin/, comme le montre la commande pwd :

Image:Konsole.png
[utilisateur@ordi ~]$ pwd

/home/glin

vous pouvez aussi écrire la commande ainsi :

Image:Konsole.png
[utilisateur@ordi ~]$ ls confitures/

abricot grand_mere/ poire pomme sucre@

et comme vous le voyez vous obtiendrez le même résultat dans les deux cas.


Dans les emplois de la commande ls qui précèdent, l'affichage se fait en colonnes.

ls maximise le nombre des colonnes en fonction de la longueur des noms de fichiers à afficher et de la largeur de la fenêtre de console.

Toutefois, si la sortie de ls est redirigée vers un autre programme par un tube (|) ou vers un fichier par un opérateur de redirection (> ou >>), alors chaque nom de fichier affiché par ls occupe une seule ligne de la sortie. Vous pourrez le vérifier en tapant, par exemple, des commandes comme :

Image:Konsole.png
[utilisateur@ordi ~]$ ls confitures/ | cat

ou :

Image:Konsole.png
[utilisateur@ordi ~]$ ls confitures/ > mes_confitures.txt

cat mes_confitures.txt


Vous obtiendrez une sortie de ce genre :

Image:Konsole.png
[utilisateur@ordi ~]$ ls confitures/ | cat

abricot
grand_mere/
poire
pomme
sucre@


Cette différence peut sembler mineure dans le cadre d'un usage courant, néanmoins, si vous utilisez ls dans un enchaînement complexe de commandes, dans un script, par exemple, il peut être indispensable de la garder bien présente à l'esprit.

[modifier] L'affichage des propriétés avec l'option -l

Pour obtenir un affichage ligne par ligne (un fichier ou répertoire par ligne), avec une représentation de nombreuses propriétés de chaque fichier ou sous-répertoire affiché, vous utiliserez l'option -l.

C'est là ce que vous obtiendrez, par exemple, en tapant :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -l /home/glin/confitures/

ou (si /home/glin/ est votre répertoire de travail) :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -l confitures/

ce qui pourrait donner quelque chose comme :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -l confitures/

total 20

-rw-r--r-- 1 glin glin 288 2008-03-10 09:12 abricot

drwxr-xr-x 2 glin glin 4096 2008-03-10 07:39 grand_mere/

-rw-r--r-- 1 glin glin 1741 2008-03-10 09:32 poire

-rw-r--r-- 1 glin glin 5223 2008-03-10 09:33 pomme

lrwxrwxrwx 1 glin glin 28 2008-03-10 07:37 sucre -> /home/glin/ingredients/sucre


Les propriétés affichées sont, de gauche à droite :

  • type de fichier
    • représenté par le premier caractère, les cas les plus courants sont - pour un « fichier régulier » (fichier texte ou programme) ; d pour un répertoire ; l pour un lien symbolique
  • permissions
    • représentées par les neuf caractères suivants, pour des explications voir la page Permissions du Wiki
  • nombre de liens en dur pour un fichier ou de sous-répertoires pour un répertoire
  • propriétaire
  • groupe propriétaire
  • taille (significatif seulement pour un fichier : pour un sous-répertoire la taille indiquée (très souvent : 4096 octets) ne représente pas le volume réel du contenu du sous-répertoire)
  • date de dernière modification
  • nom
  • seulement pour un lien symbolique : fichier vers lequel pointe le lien.


Reste la première ligne, celle qui commence par total. Elle n'est pas extraordinairement utile, elle indique la taille totale de l'ensemble des éléments affichés (attention, ce n'est pas la taille totale du répertoire lui-même, étant donné que le volume réel des sous-répertoires n'est pas fourni...), le tout exprimé en nombre de blocs de 512 octets. Pour obtenir la taille réelle du répertoire, il faudrait faire :

Image:Konsole.png
[utilisateur@ordi ~]$ du -s confitures/

100K confitures/

[modifier] Du plus récent au plus ancien avec l'option -t

Avec l'option -t (t comme le début du mot français temps ou du mot anglais time), les fichiers et répertoires affichés seront classés par ordre de date de dernière modification du plus récent au plus ancien. Par exemple :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -lt /home/glin/confitures/

total 20

drwxr-xr-x 2 glin glin 4096 2008-03-10 10:03 grand_mere/

-rw-r--r-- 1 glin glin 5223 2008-03-10 09:33 pomme

-rw-r--r-- 1 glin glin 1741 2008-03-10 09:32 poire

-rw-r--r-- 1 glin glin 288 2008-03-10 09:12 abricot

lrwxrwxrwx 1 glin glin 28 2008-03-10 07:37 sucre -> /home/glin/ingredients/sucre


À noter !
Pour un répertoire, la date de dernière modification correspond uniquement à la dernière opération de création, suppression ou renommage d'un élément situé à sa racine.

[modifier] Du plus ancien au plus récent avec l'option -r

En ajoutant à -t l'option -r (r de l'anglais reverse qui signifie inverser), le classement se fera par ordre de dernière modification en allant, cette fois, du plus ancien au plus récent :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -ltr /home/toto/confitures/

total 20

lrwxrwxrwx 1 glin glin 28 2008-03-10 07:37 sucre -> /home/glin/ingredients/sucre

-rw-r--r-- 1 glin glin 288 2008-03-10 09:12 abricot

-rw-r--r-- 1 glin glin 1741 2008-03-10 09:32 poire

-rw-r--r-- 1 glin glin 5223 2008-03-10 09:33 pomme

drwxr-xr-x 3 glin glin 4096 2008-03-10 10:21 grand_mere/


Attention !
Ne pas confondre cette option avec l'option -R, en majuscules... qui déclenche un affichage « récursif ».

[modifier] Afficher le contenu du répertoire courant avec ls sans argument

Rappelons enfin que si aucun répertoire n'est fourni en argument à la commande ls, tout se passe comme si l'on avait fourni à la commande votre répertoire de travail (./) en guise d'argument. Les commandes :

Image:Konsole.png
[utilisateur@ordi ~]$ ls ./

et :

Image:Konsole.png
[utilisateur@ordi ~]$ ls

donnent le même résultat : elles affichent une liste des fichiers et sous-répertoires qui se trouvent à la racine de votre répertoire de travail :

Image:Konsole.png
[utilisateur@ordi ~]$ ls ./

abricot grand_mere/ poire pomme sucre@

Image:Konsole.png
[utilisateur@ordi ~]$ ls

abricot grand_mere/ poire pomme sucre@


Tout comme :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -l ./

total 20

-rw-r--r-- 1 glin glin 288 2008-03-10 09:12 abricot

drwxr-xr-x 3 glin glin 4096 2008-03-10 10:21 grand_mere/

-rw-r--r-- 1 glin glin 1741 2008-03-10 09:32 poire

-rw-r--r-- 1 glin glin 5223 2008-03-10 09:33 pomme

lrwxrwxrwx 1 glin glin 28 2008-03-10 07:37 sucre -> /home/glin/ingredients/sucre

et :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -l

total 20

-rw-r--r-- 1 glin glin 288 2008-03-10 09:12 abricot

drwxr-xr-x 3 glin glin 4096 2008-03-10 10:21 grand_mere/

-rw-r--r-- 1 glin glin 1741 2008-03-10 09:32 poire

-rw-r--r-- 1 glin glin 5223 2008-03-10 09:33 pomme

lrwxrwxrwx 1 glin glin 28 2008-03-10 07:37 sucre -> /home/glin/ingredients/sucre

qui, grâce à l'option -l, génèrent un affichage ligne à ligne avec tout un ensemble de propriétés énumérées pour chaque élément affiché (voir plus haut la liste de ces propriétés).

[modifier] Afficher les fichiers et répertoires cachés et non cachés

Toutes les commandes qui précèdent ignorent les fichiers cachés.

Pour que les fichiers cachés soient aussi affichés, vous devrez simplement ajouter à toutes ces commandes l'option -a. Ceci fait, ce sera bien la totalité des fichiers et sous-répertoires situés à la racine du répertoire sous examen qui seront affichés par ls, qu'ils soient cachés ou non cachés.

Un alias Mandriva permet d'utiliser la au lieu de ls -a.

Pour inclure les fichiers et répertoires cachés, reconnaissables à leur point initial, dans la sortie de ls, faites donc :

Image:Konsole.png
[utilisateur@ordi ~]$ la

ou :

Image:Konsole.png
[utilisateur@ordi ~]$ la -l

[modifier] Afficher uniquement les fichiers et répertoires cachés

La ligne de commande suivante affichera la totalité des fichiers et répertoires cachés situés à la racine de votre répertoire de travail sans afficher aucun fichier ou répertoire non caché :

Image:Konsole.png
[utilisateur@ordi ~]$ [utilisateur@ordi ~]$ ls -d .*

(pour le rôle de l'option -d dans cette commande, voir #Traiter les répertoires comme des fichiers avec l'option -d).

[modifier] Représenter les types de fichiers : les options -F et --color

Les options -F et --color permettent de donner des indications « visuelles » sur le type des éléments affichés.

La distribution Mandriva active par défaut ces deux options par l'entremise d'un alias défini dans le fichier de configuration du shell /etc/profile.d/alias.sh.


[modifier] Les symboles ajoutés par l'option -F à la fin des noms affichés

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

Les fichiers réguliers non exécutables (autrement dit ceux qui ne sont pas des programmes) ne sont suivis par aucun symbole.

Vous trouverez un exemple d'utilisation de -F pour afficher uniquement des fichiers (et non pas des répertoires) cachés dans la dernière partie de Fichiers et répertoires cachés#Un exemple : l'affichage des fichiers et répertoires cachés situés à la racine d'un répertoire.

[modifier] Coloriser les types avec l'option --color

Le choix des couleurs attribuées aux noms de fichiers et de répertoires lorsque l'option --color est activée est déterminé par le fichier système /etc/DIR_COLORS ou éventuellement par le fichier utilisateur ~/.dir_colors (~ représente le répertoire personnel de l'utilisateur, comme vous le savez...). Lisez ces fichiers pour comprendre le codage de couleurs employé. Si vous souhaitez modifier ces couleurs, voyez la section Le shell sans peine#Comment modifier les couleurs des listes de fichiers affichées par ls ?.

[modifier] Traiter les répertoires comme des fichiers avec l'option -d

Pour obtenir l'affichage des sous-répertoires passés en argument à ls sans l'affichage de leur contenu vous devez employer l'option -d (de l'anglais directory, signifiant répertoire). Comparer :

Image:Konsole.png
[utilisateur@ordi ~]$ ls confitures/

abricot grand_mere/ poire pomme sucre@

avec :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d confitures/

confitures/

ainsi que :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -l confitures/

total 20

-rw-r--r-- 1 glin glin 288 2008-03-10 09:12 abricot

drwxr-xr-x 2 glin glin 4096 2008-03-10 07:39 grand_mere/

-rw-r--r-- 1 glin glin 1741 2008-03-10 09:32 poire

-rw-r--r-- 1 glin glin 5223 2008-03-10 09:33 pomme

lrwxrwxrwx 1 glin glin 28 2008-03-10 07:37 sucre -> /home/glin/ingredients/sucre

avec :


Image:Konsole.png
[utilisateur@ordi ~]$ ls -ld confitures/

drwx------ 2 toto toto 4096 fév 7 2006 confitures/


Nota : Employée avec un fichier en argument l'option -d est possible mais ne change rien à l'affichage par rapport à ce qu'on obtiendrait sans l'option. Comparer :

Image:Konsole.png
[utilisateur@ordi ~]$ ls abricots.txt

abricots.txt

et :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d abricots.txt

abricots.txt

Autrement dit, lorsqu'un fichier est passé en argument, les « formules » suivantes sont valides :

ls -d fichier = ls fichier

et

ls -ld fichier = ls -l fichier

Paresseux comme nous sommes, à quoi bon, dans ce cas, taper -d avec un fichier en argument ? En dépit des apparences, ceci est utile car cela permet de fournir à ls en argument, sur une même ligne, et des fichiers et des répertoires :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -ld fichier1 répertoire1/ fichier2

-rw-r--r-- 2 toto toto 75222 oct 8 2006 fichier1

-rw-r--r-- 2 toto toto 30998 oct 10 2006 fichier2

drwx------ 2 toto toto 4096 fév 7 2006 répertoire1/

cette ligne permet d'afficher en une seule commande les fichiers et les répertoires avec leurs propriétés, tout en évitant d'afficher les contenus des répertoires.

L'expansion des noms de fichiers permet de donner facilement comme arguments à une unique commande et des fichiers et des sous-répertoires. Il est donc compréhensible que l'option -d soit fréquemment utilisée dans ce genre de contexte.

Vous trouverez des exemples d'emploi de l'expansion des noms de fichier avec l'option -d de la commande ls plus bas et aussi à la section #Afficher uniquement les fichiers et répertoires cachés.

[modifier] Afficher les numéros d'inodes avec l'option -i

Cette option impose l'affichage du « numéro d'inode » de chaque fichier ou répertoire affiché (sous Linux, tout fichier ou répertoire est connu par le système par ce numéro, qui lui est propre). Pour une utilisation, relative aux liens en dur, voir cette section.


[modifier] Afficher le contenu des sous-répertoires avec l'option -R

Attention : il s'agit bien d'un R majuscule (l'option r existe aussi ! voir #Du plus ancien au plus récent avec l'option -r).

Par défaut, nous le savons, ls affiche la liste des fichiers ou sous-répertoires qui sont à la racine du répertoire qui lui est passé en argument (ou du répertoire de travail). L'option -R a pour effet de rendre ls « récursive » : autrement dit seront affichés aussi les contenus de tous les sous-répertoires du répertoire argument de ls. Cela pourra donner ceci :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -R confitures/

confitures/:
abricot grand_mere/ poire pomme sucre@


confitures/grand_mere:
groseille potiron truc/


confitures/grand_mere/truc:
melisse

[modifier] Autres options

Bien d'autres options existent, dont certaines peuvent modifier les comportements par défaut décrits ci-dessus : consultez au besoin man ou info (man ls, info ls) pour en avoir la liste et la description. Les options données ici devraient cependant largement suffire pour les usages courants.

[modifier] ls et l'expansion des noms de fichiers

Au lieu d'un argument ou d'un ensemble d'arguments entièrement spécifiés, on peut aussi fournir à ls des arguments qui font appel aux ressources de l'expansion des noms de fichiers. Nous donnerons deux exemples, mais toute sorte d'autres emplois sont possibles.

[modifier] Un exemple

La commande :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d ressources/[1-9]*

ressources/1123.txt ressources/234ght ressources/3choin/ ressources/5leviers.txt


affiche tous les fichiers ou sous-répertoires situés à la racine du répertoire ressources/ dont le premier caractère est un chiffre quelconque autre que zéro.

Que se serait-il passé à votre avis si l'option -d avait été absente ?? Eh bien, le contenu du répertoire ressources/3choin/ aurait été affiché aussi… (voir la section sur #Traiter les répertoires comme des fichiers avec l'option -d).

[modifier] Pour restreindre l'affichage à des sous-répertoires

Il suffit pour cela de faire usage de la barre oblique. Comme dans cet exemple :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d ressources/*.c/

ressources/japhari.c/

Grâce à la présence de la barre oblique finale, cette commande affiche (uniquement) les sous-répertoires situés à la racine du répertoire ressources/ dont les noms se terminent par un point suivi d'un c.


Astuce !
L'alias lsd de Mandriva, qui exécute la commande ls -d */, permet d'afficher la liste des sous-répertoires de votre répertoire de travail.

[modifier] Les détails de l'affichage de ls

[modifier] Une ou deux barres obliques après un nom de répertoire, ou même aucune ?

[modifier] Les faits

Lorsque vous tapez un nom de répertoire comme argument de ls en ligne de commande, vous avez la possibilité de taper une barre oblique à la fin du nom du répertoire, mais vous pouvez aussi omettre cette barre oblique. Si vous avez tapé une telle barre oblique finale, elle apparaîtra à l'affichage de la sortie de ls lorsque l' option -d ou l'option -R seront activées.

Si vous avez soigneusement tenté de vérifier sur votre système que les indications données ici, fonctionnent bien comme prévu, vous avez peut-être remarqué, que, parfois, là où nous avons mis une barre oblique finale, vous obtenez DEUX barres obliques, par exemple au lieu de ceci :

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d confitures/

confitures/

vous avez peut-être obtenu quelque chose comme ceci :

Image:Ls deux barres.png

avec une première barre oblique bleue (de la couleur du reste du nom) et une seconde barre oblique blanche...

[modifier] Bogue de Mandriva ?? Non, non...

La première barre oblique (bleue) vient de votre frappe : vous avez choisi d'écrire une barre oblique à la fin du nom du répertoire, ce qui n'est pas obligatoire, si vous l'omettez, la barre bleue disparaît et vous obtenez une unique barre oblique (blanche) :

Image:Ls une barre.png

D'où vient donc la barre oblique blanche qui subsiste ??

De l'option -F, bien sûr !! qui est présente par défaut quoiqu'invisible, à cause d'un alias de Mandriva (voir #Représenter les types de fichiers : les options -F et --color). Si vous lancez ls « à l'état pur » dans sa version non aliassée (par exemple, en tapant ls entre guillemets simples, tout en rétablissant la couleur pour y voir plus clair, grâce à l'option --color=auto...), ls sera exécutée sans l'option -F et vous obtiendrez cette fois une unique barre oblique bleue...

Image:Ls noalias une barre.png

et, bien sûr, si vous ne tapez pas la barre dans la commande, alors vous n'aurez plus aucune barre dans la sortie :

Image:ls nobarre.png

En résumé : si vous voyez deux barres obliques après un nom de répertoire :

  • la première (bleue par défaut) est celle que vous avez tapée en ligne de commande
  • la seconde (blanche) est due à l'activation de l'option -F.

[modifier] Noms de base ? chemins ?

Nous abordons ici des questions qui sont sans grande importance dans le cadre d'un usage courant de ls en console mais qu'il peut être indispensable de bien comprendre quand on souhaite utiliser ls dans le cadre d'une redirection des sorties et/ou dans un script, dans des situations où sa sortie est passée à un autre programme pour recevoir un traitement précis.

Le premier point à noter est que lorsque vous passez à ls un nom de répertoire en argument, vous obtiendrez par défaut à l'affichage des noms de base de fichiers ou de répertoires et non pas des chemins, et ceci quelle que soit la façon dont vous ayez représenté le répertoire en tapant la commande.

Par exemple, si votre répertoire de travail est un répertoire /home/toto/ contenant un sous-répertoire /home/toto/confitures/, vous obtiendrez exactement le même affichage dans les différents cas suivants :

Image:Konsole.png
[utilisateur@ordi ~]$ ls confitures/
Image:Konsole.png
[utilisateur@ordi ~]$ ls ./confitures/
Image:Konsole.png
[utilisateur@ordi ~]$ ls /home/glin/confitures/

(dans les deux premiers cas on a donné un chemin relatif du répertoire, dans le dernier cas on a donné son chemin absolu).

MAIS :

  • Si vous passez à ls un nom de fichier en argument, alors elle préfixera à sa sortie le chemin du fichier tel que vous l'aurez tapé dans la commande !
  • Et il en ira de même pour un répertoire passé en argument lorsque vous utiliserez l'option -d (option qui oblige ls à traiter un répertoire un peu comme elle traiterait un fichier).

Par exemple, si votre répertoire de travail est /home/toto/confitures/ et qu'il contient un fichier abricots.txt, vous obtiendrez, selon la commande tapée, des affichages différents comme illustré ci-dessous :


Image:Konsole.png
[utilisateur@ordi ~]$ ls abricots.txt

abricots.txt

Image:Konsole.png
[utilisateur@ordi ~]$ ls ./abricots.txt

./abricots.txt

Image:Konsole.png
[utilisateur@ordi ~]$ ls /home/toto/confitures/abricots.txt

/home/toto/confitures/abricots.txt

Et en passant comme argument un sous-répertoire confitures/ avec l'option -d :


Image:Konsole.png
[utilisateur@ordi ~]$ ls -d confitures/

confitures/

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d ./confitures/

./confitures/

Image:Konsole.png
[utilisateur@ordi ~]$ ls -d /home/toto/confitures/

/home/toto/confitures/


Nota Bene : Souvenez-vous qu'employée sans argument apparent ls se comporte comme si on avait tapé le point en guise d'argument, ce que vous pourrez vérifier aisément en exécutant ls -d ou ls -dl

  • Enfin avec l'option -R, les noms de sous-répertoires seront eux aussi préfixés par le chemin que vous aurez tapé pour le répertoire passé en argument.