Разница между командами терминала «dir» и «ls»?

Если у вас установлен ImageMagick, вы можете использовать его команду identify следующим образом

identify /path/to/image.gif

Вы получите детали каждого кадра.

Как было предложено steeldriver, вы можете получить количество изображений в последовательности напрямую, используя спецификатор формата выходного файла %n, однако, скорее, досадно, что он печатает один раз для каждого изображения. Чтобы получить один номер, вы могли бы сделать

identify -format "%n\n" path/to/file.gif | head -1
1
задан 30 January 2018 в 21:52

4 ответа

связь между [F2] и [Ф3]

[Ф4] и [ф5] являются отдельными программами, которые ведут себя аналогичным образом. Как описано и по ссылке ниже, цель [ф6] - обеспечить команду [ф7] производительность которых не зависит от того, или не идет к терминалу. К счастью этого нажать [F8] необходимо отформатировать его выходе таким образом, что разумно и полезно как для просмотра в терминале и для записи в файл или трубу.

существует два распространенных заблуждения о [ф9]:

многие люди считают, [ф10] - это псевдоним [ф11], но это не так. Ни одна команда является псевдонимом другого, и по умолчанию в Ubuntu, [ф12] это не псевдоним вовсе. [от f13] и [ф14] предусмотрены отдельные, номера-идентичные программы. Многие люди считают, [ф15] существует по непонятным историческим причинам или для обеспечения совместимости с некоторым стандартом или другой операционной системы. Это не так. [ф16] ведет себя так, как это делает для совместимости. [f17 в], которые не должны быть совместимы, потому что это не стандартные команды Unix, ведет себя альтернативный способ, что разработчики считают ценным в своем собственном праве и, возможно, даже предпочтительнее.

ок, но именно как [ф18] и [зг19] различаются?

обе [20 фунтов] и [клавиши f21] просматривать содержимое каталогов. Две специфические различия в их поведении по умолчанию отличить их.

, когда ее стандартный вывод является терминалом, [ф22] списки имен файлов в вертикально отсортированные столбцы (например, [ф23]). Если стандартный вывод не является терминалом (например, файл или трубы), [ф24] перечислены имена файлов по одному в строке (например, [f25 привод датчика]). Ли ее стандартный вывод является терминалом, [ф26] списки имен файлов в вертикально отсортированные столбцы (например, ls -C). Для [ф28] и dir, эти значения могут быть переопределены [ф30] флаг и [ф31], [f32 из], -m, и -x флаги, которые сокращают частности [ф35] варианты. См. 10.1.4 форматирование выход в GNU coreutils справочное руководство для деталей. Если стандартный вывод является терминалом, имени, должны быть перечислены содержит управляющие символы, [f36 в] печать [фунции f37] вместо каждого символа управления (например, ls -q). Если стандартный вывод не является терминалом, [ф39] печатает управляющие символы "как есть" (как [ф40]). Будь или не его стандартный вывод является терминалом, когда [ф41] встречает управляющий символ или любой другой символ, который будет интерпретироваться, особенно если вошел в корпус, он печатает последовательности с обратной косой чертой для персонажей. Это включает в себя даже относительно обычные символы, как пробелы. Например, dir список запись под названием Documents backups как [пулемет f44]. Это как [f45 с]. Для ls и dir, эти значения по умолчанию можно переопределить с помощью флагов, перечисленных в 10.1.7 форматирование имен файлов в GNU coreutils справочник. Это включает -b, -q, [ф50], и некоторые другие.

цель [ф6] - обеспечить команду [ф7] производительность которых не зависит от того, или не идет к терминалу: вызов команды LS и DIR вызова, в GNU coreutils справочное руководство.

почему dir?

основанием для отдельной dir утилиты приведен в вызова ЛС стандарты программирования GNU. Я рекомендую прочитать весь раздел, чтобы понять логику разработчиков, но здесь представлены основные моменты, применимые к ls/dir:

пожалуйста, не заставляй поведение утилиты зависит от имени, используемого для его вызова.... Вместо этого, используйте опцию времени выполнения или компиляции или как переключатель для выбора среди альтернативных вариантов поведения.... Кроме того, пожалуйста, не заставляй поведение командной строки программы зависит от типа устройства вывода.... Совместимость требует определенных программ в зависимости от типа выходного устройства. Было бы плохо, если [f55, которая] или sh не делать это таким образом, все пользователи ожидают. В некоторых из этих случаев, мы дополняем программу с предпочтительной альтернативной версии, которая не зависит от типа выходного устройства. К примеру, мы предоставляем гораздо программы dir как ls за исключением того, что ее Формат по умолчанию всегда многостолбцовом формате.

проект GNU считает его нежелательным, с технической точки зрения, полезной для получения различных выходных в зависимости от того, какое устройство он пишет (по крайней мере в конфигурации по умолчанию утилиты). За некоторые коммунальные услуги, в том числе ls, зависит от устройства вывода для совместимости и поэтому он работает так, как ожидают пользователи. Некоторые пользователи также предпочитают конкретно это устройство-зависимое поведение.

а [от f60] не могла быть написана, чтобы вести себя устройство самостоятельно, была создана для этой цели отдельный [ф61] утилиты. Таким образом, dir это не программа, которая ведет себя странно по причинам исторического совместимости--ls является.

посмотреть, как [64-го фокуса], [f65 в] и обзоры vdir утилиты реализованы в coreutils исходный код без лишних дублирование кода, см. ls-dir.c, [f68 не], ls-vdir.c, [р70], и ls.c.

это dir действительно полезно?

[размером d57]если вы когда-нибудь хотели ls произведен многоколонный выход даже тогда, когда вам передается его less ([f75 в Джей]) или перенаправить его в файл (ls > out.txt), вы можете использовать [f77 на английском языке] или ls -C.[!размером d57]

если вы когда-нибудь хотели вы могли бы ls это, вы можете использовать [ф80] или ls -b.

dir эквивалентно ls -Cb, так что в этом смысле вам не нужна [ф84]. Но [ф85] обеспечивает сочетание параметров, которые на практике часто бывает полезно (хотя и не широко известно).

почему я получаю раскрашенная выход из [ф86] (даже ls -Cb), но не dir?!

большинство пользователей Ubuntu есть псевдоним под названием ls, который работает [ф90]. Когда [f91 со шляпками] существует как псевдоним и внешней команды, псевдоним имеет приоритет в простой, интерактивной команды.

[d63, как]посмотреть, как [64-го фокуса], [f65 в] и обзоры vdir утилиты реализованы в coreutils исходный код без лишних дублирование кода, см. ls-dir.c, [f68 не], ls-vdir.c, [р70], и ls.c.[!d63, как]

когда перешла к ls, dir, или vdir (и некоторые другие команды, такие как grep), --color=auto использует цвет, когда его выход терминал, а не иначе.

по умолчанию в Ubuntu, учетные записи пользователей создаются с этим в [выключателей f100]:

[Ф1]

Вы заметите ls псевдоним (alias ls='ls --color=auto') это без комментариев, в то время как dir и vdir закомментированы с [dадувных подушек безопасности f105] так они не работают. То есть, в то время как dir это не псевдоним, ls (но не dir).

как сделать [то f109] производим цветную печать тоже?

, чтобы включить цветную печать с [ф110], изменение [из нержавеющей стали f111 имеет в своем домашнем каталоге и раскомментируйте строку #alias dir='dir --color=auto' на удаление #. В снаряды начали после смены, dir будет псевдоним.

если вы хотите изменить в текущей оболочке, можно выполнить определение псевдонима команды, или вы можете источник [115 этаж] под управлением . ~/.bashrc.

это, вероятно, идет против главной точки dir - что это должно производить такой же результат, не зависящий от устройства вывода. Однако:

многие люди считают, [ф10] - это псевдоним [ф11], но это не так. Ни одна команда является псевдонимом другого, и по умолчанию в Ubuntu, [ф12] это не псевдоним вовсе. [от f13] и [ф14] предусмотрены отдельные, номера-идентичные программы. при вызове в качестве внешней командой, например в скриптах или если вы переопределяете псевдоним, под управлением \dir или [f120 из натурального дерева], dir будет по-прежнему производить аппаратно-независимый вывод. Это означает, что ступенчатость dir для dir --color=auto не разбивать dir.
37
ответ дан 25 May 2018 в 14:18
  • 1
    Ответ на качество, но может использовать ToC или TL; DR; :) – Kevin 9 December 2016 в 17:36
Я был бы склонен думать, что dir существует только для обратной совместимости. Из GNU Coreutils: dir эквивалентен ls -C -b; то есть по умолчанию файлы перечислены в столбцах, отсортированы по вертикали, а специальные символы представлены escape-последовательностями обратной косой черты. Кстати, ls по умолчанию не раскрашивает вывод: это связано с тем, что большинство атрибутов distros ls - ls --color=auto в /etc/profile.d. Для теста введите unalias ls, затем попробуйте ls: он будет бесцветным.

Источник: ответ Ренана: В чем разница между «dir» и «ls»?

4
ответ дан 25 May 2018 в 14:18

Краткий ответ: Нет, dir является псевдонимом ls, поскольку @Rinzwind сказал, ls по умолчанию --color

2
ответ дан 25 May 2018 в 14:18
  • 1
    dir имеет не псевдоним ls. Они являются отдельными двоичными файлами в /usr/bin, которые ведут себя по-разному, как описано в Rinzwind answer . Вы можете достичь этого с помощью псевдонимов, но это не , как это достигается. Отдельные dir и ls двоичные файлы появляются во всех системах, которые используют GNU Coreutils . Если вам нужны доказательства, запустите cmp /bin/ls /bin/dir. – Eliah Kagan 29 May 2012 в 04:16
  • 2
    некоторое время назад это был псевдоним, и вы могли видеть его в списке псевдонимов, просто набрав alias, теперь новый бинар компилируется для dir. Вы можете загрузить его код с помощью: git clone git://git.sv.gnu.org/coreutils. В ls-dir.c изменяется только одна строка кода и это: int ls_mode = LS_MULTI_COL;. Технически это не псевдоним, но практически это LS, но с разными настройками по умолчанию (1 строка кода). – Francisco Valdez 29 May 2012 в 20:09
  • 3
    Да, dir - ls, но с разными настройками по умолчанию . dir и ls всегда были отдельными двоичными файлами в дистрибутивах, которые используют GNU Coreutils. Некоторые дистрибутивы могут или могут иметь также , определяющие псевдоним, называемый dir (определение псевдонимов, которые имеют то же имя, что и существующая команда, довольно распространены). Но они являются отдельными исполняемыми файлами. Чтобы различать псевдоним оболочки (который вообще не является файлом) и отдельный исполняемый файл с похожим исходным кодом, не является педантичным различием. Ошибочно и ложно сказать, что dir является псевдонимом ls в Ubuntu. – Eliah Kagan 29 May 2012 в 20:32
  • 4
    Да, я согласен с вами, но в этом случае не похож на исходный код, это тот же исходный код. Если мы скажем, что псевдоним - это все, что указано в alias, то, конечно, это не псевдоним. – Francisco Valdez 29 May 2012 в 20:50
  • 5
    Это не тот же исходный код. Как вы сказали, «одна строка источника изменяется». И если бы это был тот же источник, это все равно не было бы псевдонимом. Есть много вещей в Unix-подобной системе, которые похожи на псевдонимы, но которые будут очень запутывать новичков (и раздражать опытных пользователей), чтобы называть псевдонимы. Символические ссылки, жесткие ссылки, идентичные файлы, похожие файлы, сценарии оболочки, встроенные оболочки, скрывающие исполняемые файлы и синхронизированные файлы (например, с UbuntuOne), очень похожи на псевдонимы значительными способами, но они не являются псевдонимами. – Eliah Kagan 29 May 2012 в 20:55

Если вы сомневаетесь, сравните 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 будет наиболее заметным, ваша система может отличаться.

2
ответ дан 25 May 2018 в 14:18
  • 1
    Это совсем не похоже на пользовательскую конфигурацию Ubuntu по умолчанию. Я не думаю, что какие-либо из систем Ubuntu, которые я использовал, имели ls как псевдоним для функции с именем _ls - даже в качестве пропущенной строки в .bashrc. Это похоже на значение по умолчанию для (по крайней мере, некоторых версий) openSuSE, хотя, судя по этой цепочке , этот файл (связанный оттуда) и мой (возможно, возможно неправильная) память, когда я в последний раз использовал openSUSE. – Eliah Kagan 29 December 2016 в 04:58
  • 2
    @EliahKagan: Вы догадались, я использую OpenSuse! Так как я сказал, результат будет отличаться, но метод должен быть в порядке. – user2394284 9 January 2017 в 15:41

Другие вопросы по тегам:

Похожие вопросы: