J'ai essayé de trouver la différence entre utiliser les commandes dir
et ls
dans le terminal. Je sais que ls est la méthode UNIX traditionnelle permettant d'afficher les fichiers d'un répertoire. Il dir
s'agit de l'équivalent d'invite de commande Windows, mais les deux commandes fonctionnent dans un terminal.
Si je tape dir
cela affiche les fichiers et les dossiers du répertoire, et si je tape, ls
il en va de même, sauf avec la mise en surbrillance du contenu. Les deux commandes acceptent les options (c.-à ls -a
- d. Et les dir -a
deux renvoient tous les fichiers, dossiers et fichiers cachés.
Alors, est-ce que quelqu'un sait quelle est la différence et pourquoi les deux dir
et ls
est utilisé?
dir --color
;)Réponses:
dir
etls
font partie decoreutils
etdir
est presque le même quels
, juste avec différentes options par défaut.info dir
dit:Oh et il y a aussi
vdir
!info vdir
dit:Il
dir
existe très probablement une compatibilité ascendante ou pour des raisons historiques.la source
alias dir
pour voir ce que c'est réellement. tapezalias
pour voir tous les alias.type dir
pour voir ce que c'est (un alias, une commande, une fonction bash ...)La relation entre
ls
etdir
ls
etdir
sont des programmes distincts qui se comportent de la même manière. Comme expliqué et référencé ci-dessous, le but dedir
est de fournir une commande du typels
dont la sortie ne varie pas selon qu’elle va ou non à un terminal . Pour y parvenir utilement, ildir
faut formater sa sortie de manière raisonnable et utile à la fois pour l'affichage dans un terminal et pour l'écriture dans un fichier ou un canal.Il existe deux idées fausses sur les points suivants
dir
:dir
c'est un pseudonymels
, mais ce n'est pas le cas. Aucune commande n'est un alias de l'autre, et par défaut dans Ubuntu, cedir
n'est pas du tout un alias.ls
etdir
sont fournis par des exécutables distincts non identiques.dir
existe pour des raisons historiques obscures ou pour assurer la compatibilité avec un système d’exploitation standard ou autre. Ce n'est pas le cas non plus.ls
se comporte comme il le fait pour la compatibilité.dir
, qui n’a pas besoin d’être compatible car ce n’est pas une commande Unix standard, se comporte de manière différente, ce que les développeurs considèrent comme précieux et peut-être même préférable.OK, mais exactement comment
ls
etdir
diffèrent?Les deux
ls
etdir
listent le contenu des répertoires. Deux différences spécifiques dans leurs comportements par défaut les distinguent.Lorsque sa sortie standard est un terminal,
ls
répertorie les noms de fichiers dans des colonnes triées verticalement (commels -C
). Lorsque sa sortie standard n'est pas un terminal (par exemple, un fichier ou un canal ),ls
liste les noms de fichiers un par ligne (commels -1
).Que sa sortie standard soit ou non un terminal,
dir
répertorie les noms de fichiers dans des colonnes triées verticalement (commels -C
).Pour les deux
ls
etdir
, ces valeurs par défaut peuvent être remplacés par le--format=
drapeau et les-1
,-C
,-m
et des-x
drapeaux, qui Abréger particulières--format=
options. Voir 10.1.4 Formatage général des sorties dans le manuel de référence de GNU coreutils pour plus de détails.Lorsque sa sortie standard est un terminal et qu'un nom de fichier à répertorier contient des caractères de contrôle , est
ls
imprimé à la?
place de chaque caractère de contrôle (commels -q
). Lorsque sa sortie standard n’est pas un terminal,ls
affiche les caractères de contrôle telsls --show-control-chars
quels.Que sa sortie standard soit ou non un terminal, lorsqu'elle
dir
rencontre un caractère de contrôle ou tout autre caractère qui serait interprété spécialement si elle était entrée dans un shell, elle imprime des séquences de barres obliques inverses pour les caractères. Cela inclut même des caractères relativement communs tels que des espaces. Par exemple,dir
listera une entrée appeléeDocuments backups
commeDocuments\ backups
. C'est commels -b
.Pour les deux
ls
etdir
, ces valeurs par défaut peuvent être remplacées par les drapeaux listés dans 10.1.7 Formater les noms de fichiers dans le manuel de référence de GNU coreutils . Cela inclut-b
,-q
,--quoting-style=
et quelques autres.Sources : ls invocation et invocation dir , dans le manuel de référence de GNU coreutils .
Pourquoi
dir
?La justification d'un
dir
utilitaire distinct est donnée dans 4.5 Normes d'interface généralement des normes de codage GNU . Je recommande de lire toute cette section pour comprendre le raisonnement des développeurs, mais voici les points saillants applicables àls
/dir
:Le projet GNU considère qu'il n'est pas souhaitable, d'un point de vue technique, qu'un utilitaire produise une sortie différente en fonction du type de périphérique sur lequel il écrit (du moins dans la configuration par défaut de cet utilitaire). Pour certains utilitaires, notamment
ls
, une sortie dépend de l'appareil est nécessaire pour la compatibilité et fonctionne donc comme prévu. Certains utilisateurs préfèrent également spécifiquement ce comportement dépendant du périphérique.Bien qu'il
ls
ne soit pas raisonnable d'écrire pour se comporter de manière indépendante, undir
utilitaire distinct a été créé à cette fin. Ainsi,dir
l’utilité qui se comporte étrangement pour des raisons de compatibilité historique ne l’ls
est pas .Pour voir comment
ls
,dir
et le connexevdir
utilitaire sont mis en œuvre dans le code source coreutils sans duplication de code inutile, voirls-dir.c
,ls-ls.c
,ls-vdir.c
,ls.h
etls.c
.Est-ce
dir
vraiment utile?Si vous avez déjà souhaité
ls
produire une sortie multi-colonne, même lorsque vous l'avez transmise àless
(ls | less
) ou redirigée vers un fichier (ls > out.txt
), vous pouvez utiliserdir
ouls -C
.Si vous avez déjà souhaité, vous pouvez directement copier un nom de fichier indiqué par
ls
et l’utiliser dans le cadre d’une commande sans vous soucier de la citer , vous pouvez utiliserdir
ouls -b
.dir
est équivalent àls -Cb
, donc dans ce sens vous n'avez pas besoindir
. Maisdir
fournit une combinaison d'options qui, dans la pratique, sont souvent utiles (bien que peu connues).Pourquoi ai-je une sortie colorisée de
ls
(mêmels -Cb
) mais pasdir
?!La plupart des utilisateurs Ubuntu ont un alias appelé
ls
qui fonctionnels --color=auto
. Lorsqu'ills
existe à la fois comme alias et comme commande externe, l'alias a la priorité dans les commandes simples et interactives.Les définitions d'alias ne sont pas développées de manière récursive - c'est la
ls
commande externe avec laquelle l'ls
alias appelle--color=auto
. Voir 6.6 Alias dans le manuel de référence Bash pour plus d'informations sur le fonctionnement des alias.Lorsque passé à
ls
,dir
ouvdir
(et à d’autres commandes, par exemplegrep
),--color=auto
utilise color lorsque son résultat est un terminal, mais pas autrement.Par défaut dans Ubuntu, les comptes d'utilisateurs sont créés avec ceci dans
~/.bashrc
:Vous remarquerez que le
ls
pseudonyme (alias ls='ls --color=auto'
) n'est pas commenté , tandis que ceux pourdir
etvdir
sont commentés#
afin qu'ils ne prennent aucun effet. Autrement dit, toutdir
n'est pas un alias,ls
est (mais pasdir
) .Comment puis-je aussi
dir
produire des sorties colorées?Pour activer la sortie en couleur avec
dir
, éditez simplement.bashrc
dans votre répertoire personnel et#alias dir='dir --color=auto'
supprimez la mise en commentaire de la ligne en supprimant l’entrée#
. Dans les obus commencés après le changement, cedir
sera un alias.Si vous souhaitez modifier le shell en cours, vous pouvez exécuter la définition d'alias en tant que commande ou vous pouvez créer une source
.bashrc
en exécutant. ~/.bashrc
.Cela va sans doute à l’encontre du point principal de
dir
- qu’il devrait produire le même type de sortie quel que soit le périphérique de sortie. Pourtant:dir
alias, vous devriez le faire.\dir
oucommand dir
,dir
produira toujours une sortie indépendante du périphérique. C'est-à-dire que l'aliasingdir
todir --color=auto
ne casse pas vraimentdir
.la source
Source: Renan de réponse à Quelle est la différence entre « dir » et « ls » ?
la source
dir
soit pas fournie - et est enls
réalité - cette réponse (et la réponse qu’elle cite) énonce correctement la différence technique entre les deux commandes et explique la différence de coloration généralement observée. Alors +1.En cas de doute, comparez
type ls
vstype dir
(voir aussi Différence entre ls et la ):La différence se résume à différentes options pour que
ls
, dans mon cas,--color=tty
ce soit la plus visible, votre système peut différer.la source
ls
comme alias pour une fonction appelée_ls
- pas même comme une entrée commentée.bashrc
. Cela semble être la valeur par défaut pour (au moins certaines versions de) openSuSE, cependant, à en juger par cette conversation , ce fichier (lié à partir de là) et ma mémoire (certes peut-être fausse) de la dernière fois que j'ai utilisé openSUSE.Réponse courte: Aucun,
dir
est le même code source quels
,ls
binaire ont--color
par défaut. (1 ligne de code diff)la source
dir
n'est pas un alias dels
. Ce sont des binaires séparés dans ce/usr/bin
qui se comportent différemment, comme décrit dans la réponse de Rinzwind . Vous pouvez y parvenir avec des alias, mais ce n’est pas comme cela que l’on obtient. Des fichiers séparés et binaires apparaissent sur tous les systèmes utilisant GNU Coreutils . Si vous avez besoin d'une preuve, courez .dir
ls
cmp /bin/ls /bin/dir
alias
, un nouveau fichier binaire est maintenant compilé pour dir. Vous pouvez télécharger son code avec:git clone git://git.sv.gnu.org/coreutils
. Une seule ligne de code est modifié dans ls-dir.c et est la suivante:int ls_mode = LS_MULTI_COL;
. Techniquement, ce n'est pas un alias, mais c'est pratiquement LS mais avec différentes options par défaut (1 ligne de code).dir
estls
mais avec différentes options par défaut .dir
etls
ont toujours été des fichiers binaires distincts dans les distributions qui utilisent GNU Coreutils. Certaines distributions peuvent, ou peuvent avoir, également défini un alias appelédir
(définir des alias qui portent le même nom qu'une commande existante est assez commun). Mais ce sont des exécutables séparés. Faire la distinction entre un alias de shell (qui n’est pas du tout un fichier) et un exécutable séparé avec un code source similaire n’est pas une distinction pédante. Il est faux et trompeur de dire qu’ildir
s’agit d’un aliasls
dans Ubuntu.alias
il ne s'agit bien sûr pas d'un alias.