l命令有什么作用?

我的机器上有一个命令l似乎什么都不做。 which l也没有输出。 这是一个真正的命令,它实际上做了什么吗?

lls -CF的别名 ,其行为与普通ls不同

-C

-C以列forms生成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 ... 

相反, ls -C (或-l )以列forms输出,而不管stdout是什么类型的设备。 ls -C | less 看起来不像最高输出(但当然是less了一页)。

-F

lsl之间的主要可见区别是由于-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* ... 

这里:

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

还有其他几个指标:

  • @表示条目是符号链接 (另请参见man symlink )。
  • | 表示条目是FIFO设备(请记住, 类Unix操作系统中的许多资源由文件系统条目表示 )。
  • =表示条目是套接字 。
  • >意味着入口是一扇门 。

--classify标志和--indicator-style=classify等效于-F

来源: GNU Coreutils手册 , 第10.1.5节一般输出格式

总之, lls -CF )与ls -CF相似但不相同

记住这一点也很好:

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

这通常用于指定被广泛认为非常有用且无害的选项,例如自动着色(当stdout未被重定向或者是终端时应用颜色,因此实际上保证指定颜色的转义码不会被误解)。

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

 ek@Kip:/$ alias ls alias ls='ls --color=auto' 

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

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

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

别名可以更改。

存在这些别名是因为默认情况下它们是以这种方式设置的,但每个用户都可以更改其别名。 请参阅高级Bash-Scripting Guide中的man alias , 第25章和 附录M ,以及如何永久保存我的“别名”条目 。

相关: ls中不同颜色的含义是什么?

实际上, 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 

为什么意味着有一个内置的系统别名导致这种情况。 如果你想看到,打开你的终端并输入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$ 

如有疑问,请type l

 l is aliased to `ls -alF' 

(另请参阅la命令执行的操作 )