Я пытался найти разницу между использованием команд dir
и ls
в терминале. Я знаю, что ls - это традиционный UNIX-метод просмотра файлов в каталоге, и что dir
является эквивалентом командной строки Windows, но обе команды работают в терминале.
Если я печатаю dir
, он отображает файлы и папки в каталоге, а если я печатаю ls
, он делает то же самое, за исключением выделения содержимого. Обе команды принимают опции (т. Е. ls -a
и dir -a
возвращают все файлы, папки и скрытые файлы.
. Итак, кто-нибудь знает, в чем разница, и почему используются dir
и ls
?
dir
и ls
являются частью coreutils
, а dir
почти такой же, как ls
, только с другими параметрами по умолчанию.
Утилиты ядра GNU - это базовые утилиты для работы с файлами, оболочкой и текстом операционной системы GNU. Это основные утилиты, которые, как ожидается, будут существовать в каждой операционной системе.
info dir
говорит:
dir
эквивалентноls -C -b
; то есть по умолчанию файлы перечислены в столбцах, отсортированных по вертикали, и специальные символы представлены с помощью escape-последовательностей с обратной косой чертой.
Да, еще есть vdir
! info vdir
говорит:
vdir
эквивалентноls -l -b
; то есть по умолчанию файлы перечислены в длинном формате, а специальные символы представлены escape-последовательности с обратной косой чертой.
Скорее всего, dir
существует для обратной совместимости или по историческим причинам.
Краткий ответ: Нет,
dir
- это тот же исходный код, что и ls
, ls
двоичный файл по умолчанию имеет - color
. (1 строка кода, разница)
Хэрэв эргэлзээтэй байгаа бол type ls
vs type dir
(мөн -г үзнэ үү. Ls ба 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
] Ялгаа нь өөр өөр хувилбарууд руу шилжиж ls
, миний хувьд - color = tty
хамгийн тод харагдах болно, таны систем өөр байж магадгүй юм.
Мне кажется, что
dir
есть только для обратного хода. совместимость.Из GNU Coreutils:
dir эквивалентен ls -C -b; то есть по умолчанию файлы перечислены в столбцах, отсортированы по вертикали, и представлены специальные символы. с помощью экранирующих последовательностей обратного слеша.
Кстати,
ls
по умолчанию не раскрашивает вывод: это потому что большинство дистрибутивов под псевдонимомls
-ls --color=auto
in/etc/profile.d
. Для теста, введитеunalias ls
и попробуйтеls
: он будет быть бесцветным.
Источник: Ответ Ренана на Какая разница между "dir" и "ls" ?
ls
and dir
ls
и dir
- это отдельные программы, которые ведут себя подобным образом. Как объясняется и упоминается ниже, целью dir
является предоставление команды типа ls
, выход которой не изменяется в зависимости от того, поступает ли она на терминал. Чтобы достичь этого, dir
должен отформатировать вывод таким образом, чтобы он был разумным и полезным как для просмотра в терминале, так и для записи в файл или канал.
Существует два распространенных ошибочных представления о dir
:
dir
- это псевдоним ls
, но это не так. Ни одна из команд не является псевдонимом другой, и по умолчанию в Убунту dir
вообще не является псевдонимом. ls
и dir
предоставляются отдельными, неидентичными исполняемыми файлами.dir
существует по непонятным историческим причинам или для обеспечения совместимости с каким-либо стандартом или другой операционной системой. Это тоже не так. ls
ведет себя так же, как и для совместимости. dir
, которая не обязательно должна быть совместима, так как это не стандартная Unix команда, ведет себя альтернативно, что разработчики считают ценным само по себе и, возможно, даже предпочтительным. ls
и dir
? Оба ls
и dir
перечисляют содержимое каталогов. Их отличают два специфических различия в поведении по умолчанию.
Когда его стандартный вывод является терминалом, ls
перечисляет имена файлов в вертикально отсортированных столбцах (как ls -C
). Если стандартный вывод не является терминалом (например, файл или труба), в ls
перечисляются имена файлов по одному в строке (как ls -1
).
Независимо от того, является ли стандартный вывод терминалом или нет, в dir
перечисляются имена файлов в вертикально отсортированных столбцах (как ls -C
).
Для обоих ls
и dir
эти значения по умолчанию могут быть переопределены флагом -формата=
и -1
, -C
, -m
и -x
флаги, которые сокращают отдельные опции -формата=
. Подробнее см. 10.1.4 Общее форматирование вывода в справочном руководстве GNU coreutils .
Если стандартным выводом является терминал, а имя файла, который должен быть указан, содержит управляющие символы , то ls
печатает ?
вместо каждого управляющего символа (как ls -q
). Когда его стандартный выход не является клеммой, ls
печатает управляющие символы как есть (как ls - show control-chars
).
Независимо от того, является ли его стандартный вывод терминалом или нет, когда dir
встречает управляющий символ или любой другой символ, который был бы специально интерпретирован, если бы он был введен в оболочку, он печатает последовательности обратного слеша для этих символов. Это включает в себя даже относительно общие символы, такие как пробелы. Например, dir
перечислит запись под названием Document backups
как Documents\ backups
. Это как ls -b
.
Для обоих ls
и dir
эти значения по умолчанию могут быть переопределены флагами, перечисленными в 10.1.7 Форматирование имен файлов в справочном руководстве GNU coreutils GNU . Это включает в себя -b
, -q
, --quoting-style=
и некоторые другие.
Sources: ls invocation и dir invocation, в справочном руководстве GNU coreutils .
dir
? Обоснование отдельной утилиты dir
приведено в 4.5 Стандартах интерфейсов в целом стандартов кодирования GNU . Я рекомендую прочитать этот раздел целиком, чтобы понять рассуждения разработчиков, но вот основные моменты, относящиеся к утилите ls
/dir
:
Пожалуйста, не делайте так, чтобы поведение утилиты зависело от имени, используемого для вызовите его....
Вместо этого используйте опцию времени выполнения или переключатель компиляции или оба для выбирайте среди альтернативных вариантов поведения....
Точно так же, пожалуйста, не делайте поведение программы из командной строки. зависит от типа выходного устройства....
Совместимость требует, чтобы определенные программы зависели от типа выходное устройство. Было бы катастрофическим, если бы
ls
илиsh
не сделали этого в как и ожидают все пользователи. В некоторых из этих случаев мы дополняем программа с предпочтительной альтернативной версией, не зависящей от тип выходного устройства. Например, мы предоставляем программуdir
, очень похожую наls
за исключением того, что его выходной формат по умолчанию всегда многостолбцовый. Формат.
Проект GNU считает нежелательным, с технической точки зрения, чтобы утилита выдавала различные результаты в зависимости от того, на каком устройстве она пишет (по крайней мере, в конфигурации утилиты по умолчанию). Для некоторых утилит, включая ls
, вывод, зависящий от устройства, необходим для совместимости, поэтому он работает так, как ожидают пользователи. Некоторые пользователи также предпочитают такое поведение, зависящее от устройства.
Хотя ls
нельзя было записать для независимого поведения устройства, для этого была создана отдельная утилита dir
. Таким образом, dir
не является той утилитой, которая ведет себя странно по причинам исторической совместимости -ls
is. Посмотреть, как ls
, dir
и связанная с ним vdir
утилита реализованы в исходном коде coreutils без лишнего дублирования кода, можно в ls-dir. c
, ls.c
, ls.vdir.c
, ls.h
и ls.c
.
dir
полезен? Если вы когда-либо хотели, чтобы ls
выдавали многоколоночный вывод, даже если вы передали его в меньше
(ls | меньше
) или перенаправили его в файл (ls > out.txt
), вы можете использовать dir
или ls -C
.
Если Вы когда-либо хотели непосредственно скопировать имя файла, показанное в команде ls
и использовать его как часть команды, не беспокоясь о цитировании , Вы можете использовать dir
или ls -b
.
dir
эквивалентен ls -b
, поэтому в этом смысле вам не нужен dir
. Но dir
предоставляет комбинацию опций, которая на практике часто бывает полезной (хотя и малоизвестной).
ls
(даже ls -Cb
), а не от dir
?! У большинства пользователей Ubuntu есть псевдоним под названием ls
, который работает ls --color=auto
. Когда ls
существует и как псевдоним, и как внешняя команда, псевдоним имеет приоритет в простых интерактивных командах.
Определения псевдонима не расширяются рекурсивно - это внешняя команда ls
, которая вызывает псевдоним ls
с помощью --color=auto
. См. 6.6 Псевдонимы в Bash справочном руководстве для получения дополнительной информации о том, как работают псевдонимы.
При передаче в ls
, dir
или vdir
(и некоторые другие команды, например grep
), -- --.color=auto
использует цвет, когда его вывод является терминалом, но не иначе.
По умолчанию в Ubuntu, пользовательские аккаунты создаются с этим в ~/. 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
Вы заметите, что псевдоним ls
(alias ls='ls --color=auto'
) не комментируется, а псевдоним для dir
и vdir
прокомментированы с помощью #
, так что они не вступают в силу. То есть , в то время как dir
не является псевдонимом, ls
является (но не dir
) .
dir
тоже производил цветной выход? Чтобы включить цветной вывод с помощью dir
, просто отредактируйте .bashrc
в вашем домашнем каталоге и прокомментируйте строку #alias dir='dir --color=auto'
, удалив ведущий #
. В оболочках, запущенных после изменения, dir
будет псевдонимом.
Если вы хотите изменить текущую оболочку, вы можете запустить определение псевдонима в виде команды, или вы можете исходить из .bashrc
, запустив . ~/.bashrc
.
Это, вероятно, противоречит главному пункту dir
-что он должен выдавать один и тот же тип вывода независимо от выходного устройства. Однако:
dir
, то вы, конечно, должны это сделать.\dir
или команду dir
, то dir
все равно будет выдавать независимый от устройства вывод. Это означает, что наложение псевдонима dir
на dir --color=auto
на самом деле не нарушает dir
.