l 命令有什么作用?

Arm*_*and 19 command-line bash alias directory ls

l我的机器上有一个命令似乎什么都不做。 which l也不会产生任何输出。这是一个真正的命令吗,它实际上有什么作用吗?

Eli*_*gan 21

l别名ls -CF,其从普通的行为不同ls

-C

-C使得ls在列的形式打印输出。当stdout是终端(而不是被重定向到文件或非终端设备,或通过管道传输到另一个命令)时,-C是隐含的。所以跑步和跑步ls -C是一样的ls。但是当被重定向或管道传输时,它们是等价的ls。例如:

ek@Kip:~/firefox$ ls
application.ini             libfreebl3.chk    libxpcom.so
blocklist.xml               libfreebl3.so     libxul.so
chrome                      libmozalloc.so    mozilla-xremote-client
chrome.manifest             libmozsqlite3.so  omni.ja
components                  libnspr4.so       platform.ini
crashreporter               libnss3.so        plugin-container

...

ek@Kip:~/firefox$ ls | less

application.ini
blocklist.xml
chrome
chrome.manifest
components
crashreporter

...
Run Code Online (Sandbox Code Playgroud)

相比之下,ls -C(或-l) 以列形式输出,而不管设备stdout是什么类型。ls -C | less看起来像顶部输出(但less当然是由 分页的)。

-F

ls和之间的主要可见差异l是由于-F标志导致ls将符号后缀(称为指示符)附加到它显示的条目。这些指示符标识它们是什么类型的文件或目录。

将此与ls上面第一个命令的输出进行比较:

ek@Kip:~/firefox$ ls -F
application.ini             libfreebl3.chk     libxpcom.so*
blocklist.xml               libfreebl3.so*     libxul.so*
chrome/                     libmozalloc.so*    mozilla-xremote-client*
chrome.manifest             libmozsqlite3.so*  omni.ja
components/                 libnspr4.so*       platform.ini
crashreporter*              libnss3.so*        plugin-container*

...
Run Code Online (Sandbox Code Playgroud)

这里:

  • / 表示该条目是一个目录。
  • *表示该条目是一个普通文件并且是可执行的(即具有可执行权限)。
  • 没有任何指示符意味着该条目是一个不可执行的普通文件。

还有其他几个指标:

--classify标志和--indicator-style=classify相当于-F

来源: GNU Coreutils 手册第 10.1.5 节通用输出格式

总之,lls -CF)相似,但不一样ls

记住:

相同的文本既可以是常规命令,也可以是别名。

这通常用于指定被广泛认为非常有用和无害的选项,例如自动着色(在stdout未重定向或终端时应用颜色,因此几乎可以保证指定颜色的转义码不会被误解)。

按这个原则,ls本身就是一个别名。

ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Run Code Online (Sandbox Code Playgroud)

那么当你运行时,什么命令真正被执行l这个:

/bin/ls --color=auto -CF
Run Code Online (Sandbox Code Playgroud)
  1. shell ( bash) 将不包含 a 的命令解析/为 中出现的第一个匹配项PATH,在 Ubuntu 中ls/bin/ls.
  2. 别名可以包含别名。别名解析不是递归的(别名不能调用自身,但它可以调用具有相同名称的常规命令)。但它确实支持嵌套

所以l解析为ls -CFwhich 解析为ls --color=auto -CF

别名可以更改。

这些别名之所以存在,是因为默认情况下它们是这样设置的,但每个用户都可以更改他们的别名。见man alias第25章附录N的高级Bash脚本编程指南,以及如何保存我的“别名”条目永远

相关: ls 中的不同颜色是什么意思?


rɑː*_*dʒɑ 6

其实两者lsl是相等的

raja@badfox:~/Pictures$ l
des.png
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
Untitled.png
raja@badfox:~/Pictures$ ls
des.png
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
Untitled.png
Run Code Online (Sandbox Code Playgroud)

为什么意味着有一个内置的系统别名导致这个。如果你想看,打开你的终端并输入alias然后你会得到这样的输出

raja@badfox:~/Pictures$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias lock='gnome-screensaver-command -l'
alias ls='ls --color=auto'
alias sms='php .sms.php'
raja@badfox:~/Pictures$ 
Run Code Online (Sandbox Code Playgroud)

  • @Alison `l` 和普通的 `ls` *不*相同——它们只是*发生*为那些特定文件产生相同的输出,因为没有目录、可执行文件、符号链接或设备节点(标准输出是一个终端)。 (7认同)

归档时间:

查看次数:

8914 次

最近记录:

8 年,1 月 前