我一直试图找到在终端中使用dir和ls命令之间的区别。我知道ls是查看目录中文件的传统UNIX方法,与dirWindows命令提示符等效,但是这两个命令都在终端中工作。
如果键入,dir则显示目录中的文件和文件夹,如果键入ls,则执行相同的操作,但突出显示内容。这两个命令都接受选项(即ls -a,dir -a都返回所有文件和文件夹以及隐藏文件。
那么,有谁知道区别是什么,为什么要同时使用dir和ls?
我一直试图找到在终端中使用dir和ls命令之间的区别。我知道ls是查看目录中文件的传统UNIX方法,与dirWindows命令提示符等效,但是这两个命令都在终端中工作。
如果键入,dir则显示目录中的文件和文件夹,如果键入ls,则执行相同的操作,但突出显示内容。这两个命令都接受选项(即ls -a,dir -a都返回所有文件和文件夹以及隐藏文件。
那么,有谁知道区别是什么,为什么要同时使用dir和ls?
Answers:
dir和ls是的一部分,coreutils与dir几乎相同ls,只是具有不同的默认选项。
GNU Core实用程序是GNU操作系统的基本文件,shell和文本操作实用程序。这些是预期在每个操作系统上都存在的核心实用程序。
info dir 说:
dir等价于ls -C -b; 也就是说,默认情况下,文件在列中列出,并按垂直顺序排序,特殊字符由反斜杠转义序列表示。
哦,还有vdir!info vdir说:
vdir等价于ls -l -b; 也就是说,默认情况下,文件以长格式列出,特殊字符由反斜杠转义序列表示。
dir由于向后兼容性或由于历史原因,很可能存在。
alias dir以查看其实际内容。键入alias以查看所有别名。
type dir以查看其内容(别名,命令,bash函数...)
ls和dirls并且dir是行为相似的独立程序。如以下所解释和参考的,的目的dir是提供类似ls其输出不会根据其是否去往终端而变化的命令。为了有帮助地实现此目的,dir必须以合理且有用的方式格式化其输出,以便在终端中查看以及写入文件或管道。
关于以下两个常见的误解dir:
dir是的别名ls,但事实并非如此。这两个命令都不是另一个的别名,并且在Ubuntu中默认情况下dir根本不是一个别名。ls并且dir由单独的,不同的可执行文件提供。dir存在是由于模糊的历史原因或与某些标准或某些其他OS的兼容性。也不是这样。ls表现其兼容性的方式。 dir,因为它不是标准的Unix命令,所以不必兼容,它以另一种方式起作用,即开发人员认为自己有价值,甚至可能更可取。ls和dir不同?双方ls并dir列出目录的内容。它们在默认行为上的两个特定区别将它们区分开。
当其标准输出为终端时,ls在垂直排序的列(例如ls -C)中列出文件名。如果其标准输出不是终端(例如file或pipe),则ls每行列出一个文件名(如ls -1)。
无论其标准输出是否为终端,都dir在垂直排序的列(例如ls -C)中列出文件名。
对于这两个ls和dir,这些默认值可以由覆盖--format=标志,并且由-1,-C,-m,和-x标志,其中缩写特定--format=选项。有关详细信息,请参见GNU coreutils参考手册中的10.1.4常规输出格式。
当其标准输出是终端并且要列出的文件名包含控制字符时,将ls打印?而不是每个控制字符(如ls -q)。当其标准输出不是终端时,ls按原样打印控制字符(如ls --show-control-chars)。
无论其标准输出是否为终端,当dir遇到控制字符或任何其他特殊字符(如果将它们输入到shell中都会被特殊解释)时,它都会为字符打印反斜杠序列。这甚至包括相对常见的字符,例如空格。例如,dir将列出称为条目Documents backups的Documents\ backups。这就像ls -b。
对于ls和而言dir,这些默认值都可以被GNU coreutils参考手册中的10.1.7格式化文件名中列出的标志所覆盖。这包括,,,和其他一些人。-b-q--quoting-style=
来源:GNU coreutils参考手册中的ls调用和dir调用。
dir呢?对单独的理由dir实用中给出4.5标准接口通常的GNU编码标准。我建议阅读整个部分以了解开发人员的推理,但是这里是适用于ls/ 的要点dir:
请不要使实用程序的行为取决于用于调用它的名称...。
相反,使用运行时间选项或编译开关或两者交替行为中进行选择....
同样,请不要让命令行程序的行为取决于输出设备的类型....
兼容性要求某些程序取决于输出设备的类型。这将是灾难性的,如果
ls还是sh不中的所有用户所期望的方式这样做。在某些情况下,我们用不依赖于输出设备类型的首选替代版本来补充程序。例如,我们提供了一个与之dir类似的程序,ls只是其默认输出格式始终是多列格式。
从技术角度来看,GNU项目认为实用程序根据写入的设备类型(至少在该实用程序的默认配置中)产生不同的输出是不可取的。对于某些实用程序,包括ls,与设备相关的输出对于兼容性是必需的,因此它可以按用户期望的方式工作。一些用户确实确实更喜欢这种与设备有关的行为。
虽然ls不能合理地编写为独立地运行设备,但dir创建了一个单独的实用程序来实现此目的。因此dir,出于历史兼容性的考虑,实用程序的行为不是怪异的,ls而是。
怎么看ls,dir以及相关的vdir工具都在没有不必要的代码重复的coreutils的源代码来实现,见ls-dir.c,ls-ls.c,ls-vdir.c,ls.h,和ls.c。
dir真的有用吗?如果您ls甚至希望通过管道将其输出到less(ls | less)或将其重定向到文件(ls > out.txt)时都希望产生多列输出,则可以使用dir或ls -C。
如果您曾经希望直接复制显示的文件名ls并将其用作命令的一部分而不必担心引用,则可以使用dir或ls -b。
dir等价于此ls -Cb,因此从某种意义上讲您不需要dir。但是dir提供了在实践中通常有用的选项组合(尽管尚未广为人知)。
ls(even ls -Cb)获得彩色输出,但没有dir呢?大多数Ubuntu用户都有一个别名,名称ls为running ls --color=auto。当ls既作为别名又作为外部命令存在时,别名在简单的交互式命令中优先。
别名定义不会递归扩展-这是别名使用调用的外部ls命令。有关别名如何工作的更多信息,请参见Bash参考手册中的6.6别名。ls--color=auto
当传递给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'通过删除开头取消注释该行#。在开始更改后的Shell中,dir将是一个别名。
如果要在当前Shell中进行更改,则可以将别名定义作为命令.bashrc运行,也可以通过运行来作为源. ~/.bashrc。
可以说这有悖于主要观点,dir即无论输出设备如何,它都应产生相同类型的输出。然而:
dir别名很有用,则应该这样做。\dir或覆盖别名command dir,dir仍将生成与设备无关的输出。这是说,混叠dir到dir --color=auto不真正打破dir。我倾向于认为那
dir只是为了向后兼容。dir等效于ls -C -b; 也就是说,默认情况下,文件在列中列出,并按垂直顺序排序,特殊字符由反斜杠转义序列表示。
顺便说一句,
ls默认情况下不会为输出着色:这是因为大多数发行版别名ls为ls --color=autoin/etc/profile.d。要进行测试,请输入,unalias ls然后尝试ls:它将是无色的。
来源:雷南的回答到什么是‘目录’和‘LS’的区别?
dir是不提供向后兼容性 -并且ls居然是 -这答案(和它引用的回答)不正确状态下,两个命令之间的差异的技术,以及解释通常观察到的着色差异。所以+1。
如有疑问,请比较type lsvs 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源代码与ls,ls二进制具有相同的源代码--color。(1行代码差异)
dir是不是的别名ls。它们是独立的二进制文件,/usr/bin它们的行为不同,如Rinzwind的答案所述。您可以使用别名来实现,但这不是实现方式。在使用GNU Coreutils的所有系统上都会出现分隔符dir和ls二进制文件。如果需要证明,请运行。cmp /bin/ls /bin/dir
alias,现在为dir编译了一个新的二进制文件。您可以使用来下载其代码git clone git://git.sv.gnu.org/coreutils。ls-dir.c中只更改了一行代码,它是:int ls_mode = LS_MULTI_COL;。从技术上讲不是别名,但实际上是LS,但具有不同的默认选项(1行代码)。
dir是ls但具有不同的默认选项。dir并且ls在使用GNU Coreutils的分布一直是独立的二进制文件。一些发行版可能已经定义,也可能已经定义了一个别名dir(定义与现有命令同名的别名是很常见的)。但是它们是单独的可执行文件。区分shell别名(根本不是文件)和具有相似源代码的单独可执行文件,并不是一种琐的区分。说这dir是lsUbuntu中的别名既错误又令人误解。
alias那么当然不是别名。
dir --color;)