J'ai essayé de trouver la différence entre les commandes dir
et ls
dans le terminal. Je sais que ls est la méthode UNIX traditionnelle d'affichage des fichiers dans un répertoire, et que dir
correspond à l'invite de commande Windows, mais les deux commandes fonctionnent dans un terminal.
Si je tape dir
name__, il affiche les fichiers et les dossiers du répertoire. Si je tape ls
name__, il en va de même, sauf que le contenu est mis en surbrillance. Les deux commandes acceptent les options (c'est-à-dire ls -a
et dir -a
renvoient tous les fichiers, dossiers et fichiers cachés.
Alors, est-ce que quelqu'un sait quelle est la différence et pourquoi dir
et ls
sont utilisés?
dir
et ls
font partie de coreutils
NAME _ et dir
est presque identique à ls
name__, mais avec des options par défaut différentes.
Les GNU Core Utilities sont les utilitaires de base de fichiers, de shell et de manipulation de texte du système d'exploitation GNU. Ce sont les utilitaires de base qui devraient exister sur tous les systèmes d'exploitation.
info dir
dit:
dir
est équivalent àls -C -b
; c'est-à-dire que, par défaut, les fichiers sont répertoriés dans des colonnes, triés verticalement et que les caractères spéciaux sont représentés par des séquences d'échappement avec une barre oblique inversée.
Oh, et il y a aussi vdir
name__! info vdir
dit:
vdir
est équivalent àls -l -b
; c'est-à-dire que, par défaut, les fichiers sont listés au format long et les caractères spéciaux sont représentés par des séquences d'échappement avec une barre oblique inverse.
Il est fort probable que dir
existe pour des raisons de compatibilité ascendante ou pour des raisons historiques.
ls
et dir
ls
et dir
sont des programmes distincts qui se comportent de la même manière. Comme expliqué et référencé ci-dessous, dir
a pour but de fournir une commande telle que ls
dont la sortie ne varie pas selon qu’elle va ou non à un terminal . Pour y parvenir utilement, dir
doit 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 dir
:
dir
est un alias de ls
, mais ce n'est pas le cas. Aucune commande n'est un alias de l'autre, et par défaut dans Ubuntu, dir
n'est pas du tout un alias. ls
et dir
sont fournis par des exécutables distincts et 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 veut pour la compatibilité. dir
, qui n'a pas besoin d'être compatible car ce n'est pas une commande Unix standard, se comporte d'une autre manière que les développeurs jugent utile de son propre droit et peut-être même préférable.ls
et dir
diffèrent-ils exactement?ls
et dir
répertorient tous deux le contenu des répertoires. Deux différences spécifiques dans leurs comportements par défaut les distinguent.
Lorsque sortie standard est un terminal, ls
répertorie les noms de fichiers dans des colonnes triées verticalement (comme ls -C
). Lorsque sa sortie standard n'est pas un terminal (par exemple, un fichier ou pipe ), ls
répertorie les noms de fichiers un par ligne (comme ls -1
).
Que sa sortie standard soit ou non un terminal, dir
répertorie les noms de fichiers dans des colonnes triées verticalement (comme ls -C
).
Pour ls
et dir
, ces valeurs par défaut peuvent être remplacées par l'indicateur --format=
et par les indicateurs -1
, -C
, -m
et -x
, qui abrégent des options --format=
particulières. 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 caractères de contrôle , ls
imprime ?
à la place de chaque caractère de contrôle (comme ls -q
). Lorsque sa sortie standard n'est pas un terminal, ls
imprime les caractères de contrôle tels quels (comme ls --show-control-chars
).
Que sa sortie standard soit ou non un terminal, lorsque 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
répertoriera une entrée appelée Documents backups
sous la forme Documents\ backups
. Cela ressemble à ls -b
.
Pour ls
et dir
, 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 . Ceci inclut -b
, -q
, --quoting-style=
et quelques autres.
Sources : invocation de ls et invocation de répertoire , dans le manuel de référence de GNU coreutils .
dir
?La justification d'un utilitaire séparé dir
est donnée dans 4.5 Normes relatives aux interfaces en général sur Normes de codage GN . Je vous recommande de lire toute cette section pour comprendre le raisonnement des développeurs, mais voici les points saillants qui s'appliquent à ls
/dir
:
Merci de ne pas faire dépendre le comportement d’un utilitaire du nom utilisé pour l’appeler ....
À la place, utilisez une option d'exécution ou un commutateur de compilation, ou les deux, pour sélectionner l'un des comportements suivants ....
De même, veuillez ne pas associer le comportement d’un programme en ligne de commande au type de périphérique de sortie ....
La compatibilité nécessite que certains programmes dépendent du type de périphérique de sortie. Il serait désastreux que
ls
oush
ne le fasse pas comme le souhaitent tous les utilisateurs. Dans certains cas, nous complétons le programme avec une version alternative préférée, qui ne dépend pas du type de périphérique de sortie. Par exemple, nous fournissons un programmedir
très similaire àls
, à la différence que son format de sortie par défaut est toujours un format multi-colonnes.
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 l'utilitaire). Pour certains utilitaires, y compris ls
, une sortie dépendante du périphérique est nécessaire pour la compatibilité et fonctionne donc comme le souhaitent les utilisateurs. Certains utilisateurs préfèrent également spécifiquement ce comportement dépendant du périphérique.
Bien que ls
ne puisse raisonnablement pas être écrit pour se comporter de manière indépendante, un utilitaire séparé dir
a été créé à cet effet. Ainsi, dir
n'est pas l'utilitaire qui se comporte étrangement pour des raisons de compatibilité historique - ls
est .
Pour savoir comment ls
, dir
et l'utilitaire connexe vdir
sont implémentés dans le code source de coreutils sans duplication inutile du code, voir ls-dir.c
, ls-ls.c
, ls-vdir.c
=, ls.h
, et ls.c
.
dir
est vraiment utile?Si vous avez déjà souhaité que ls
produise une sortie sur plusieurs colonnes même si vous l'avez redirigé vers less
(ls | less
) ou si vous l'avez redirigé vers un fichier (ls > out.txt
), vous pouvez utiliser dir
ou ls -C
.
Si vous avez déjà souhaité pouvoir copier directement un nom de fichier affiché par ls
et l'utiliser comme partie intégrante d'une commande sans vous soucier de citer , vous pouvez utiliser dir
ou ls -b
.
dir
est équivalent à ls -Cb
, vous n'avez donc pas besoin de dir
. Mais dir
fournit une combinaison d'options qui, dans la pratique, sont souvent utiles (bien que peu connues).
ls
(même ls -Cb
) mais pas dir
?!La plupart des utilisateurs Ubuntu ont un alias appelé ls
qui exécute ls --color=auto
. Lorsque ls
existe à la fois comme alias et comme commande externe, l'alias est prioritaire dans les commandes simples et interactives.
Les définitions d'alias ne sont pas développées de manière récursive: il s'agit de la commande externe ls
que l'alias ls
appelle avec --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
ou vdir
(et à certaines autres commandes, telles que grep
), --color=auto
utilise la couleur lorsque sa sortie est un terminal, mais pas autrement.
Par défaut dans Ubuntu, les comptes d’utilisateur sont créés avec ceci dans ~/.bashrc
:
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
Vous remarquerez que l'alias ls
(alias ls='ls --color=auto'
) n'est pas commenté, alors que ceux de dir
et vdir
sont commentés avec #
, ils n'ont donc aucun effet. C'est-à-dire que alors que dir
n'est pas un alias, ls
est (mais pas à dir
) .
dir
produise une sortie en couleurs aussi?Pour activer la sortie en couleur avec dir
, éditez simplement .bashrc
dans votre répertoire personnel et décommentez la ligne #alias dir='dir --color=auto'
en supprimant le #
initial. Dans les shells commencés après le changement, dir
sera un alias.
Si vous souhaitez que la modification soit apportée au shell actuel, vous pouvez exécuter la définition d'alias en tant que commande ou vous pouvez générer .bashrc
en exécutant . ~/.bashrc
.
Cela va sans doute à l’encontre du point principal de dir
-- selon lequel il devrait produire le même type de sortie, quel que soit le périphérique de sortie. Toutefois:
dir
, vous devriez le faire.\dir
ou command dir
, dir
produira toujours une sortie indépendante du périphérique. Cela revient à dire que l'aliasing dir
avec dir --color=auto
ne rompt pas vraiment dir
.Je serais enclin à penser que
dir
est juste pour la compatibilité ascendante .De GNU Coreutils :
dir est équivalent à ls -C -b; c'est-à-dire que, par défaut, les fichiers sont répertoriés dans des colonnes, triés verticalement et que les caractères spéciaux sont représentés par des séquences d'échappement avec une barre oblique inversée.
Par ailleurs,
ls
ne colorise pas la sortie par défaut: c'est parce que la plupart des distributions aliasls
àls --color=auto
dans/etc/profile.d
. Pour un test, tapezunalias ls
puis essayezls
: il sera incolore.
Source: Renan 's réponse à Quelle est la différence entre “dir” et “ls” ?
En cas de doute, comparez type ls
et type dir
(voir aussi Différence entre ls et la ):
$ type dir
dir is aliased to `ls -l'
$ type ls
ls is aliased to `_ls'
$ type _ls
_ls is a function
_ls ()
{
local IFS=' ';
command ls $LS_OPTIONS ${1+"$@"}
}
$ echo command ls $LS_OPTIONS ${1+"$@"}
command ls -N --color=tty -T 0
La différence se résume à différentes options à ls
, dans mon cas --color=tty
serait le plus visible, votre système peut différer.
Réponse courte: None, dir
est le même code source que ls
, ls
binary a --color
par défaut. (1 ligne de code diff)