l命令有什么作用?
我的机器上有一个命令l
似乎什么都不做。 which l
也没有输出。 这是一个真正的命令,它实际上做了什么吗?
l
是ls -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
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* ...
这里:
-
/
表示条目是目录。 -
*
表示该条目是普通文件,并且是可执行的(即具有可执行权限 )。 - 缺少任何指示符意味着该条目是不可执行的普通文件。
还有其他几个指标:
-
@
表示条目是符号链接 (另请参见man symlink
)。 -
|
表示条目是FIFO设备(请记住, 类Unix操作系统中的许多资源由文件系统条目表示 )。 -
=
表示条目是套接字 。 -
>
意味着入口是一扇门 。
--classify
标志和--indicator-style=classify
等效于-F
。
来源: GNU Coreutils手册 , 第10.1.5节一般输出格式
总之, l
( ls -CF
)与ls -CF
相似但不相同 。
记住这一点也很好:
相同的文本既可以是常规命令,也可以是别名。
这通常用于指定被广泛认为非常有用且无害的选项,例如自动着色(当stdout
未被重定向或者是终端时应用颜色,因此实际上保证指定颜色的转义码不会被误解)。
通过这个原则, ls
本身就是一个别名。
ek@Kip:/$ alias ls alias ls='ls --color=auto'
那么当你运行l
时,什么命令真正被执行? 这个:
/bin/ls --color=auto -CF
- shell(
bash
)解析了不包含/
出现在PATH
的第一个匹配的命令,在Ubuntu中,ls
是/bin/ls
。 - 别名可以包含别名。 别名解析不是递归的 (别名不能调用自身,尽管它可以调用具有相同名称的常规命令)。 但它确实支持嵌套 。
所以l
解析为ls -CF
,它解析为ls --color=auto -CF
。
别名可以更改。
存在这些别名是因为默认情况下它们是以这种方式设置的,但每个用户都可以更改其别名。 请参阅高级Bash-Scripting Guide中的man alias
, 第25章和 附录M ,以及如何永久保存我的“别名”条目 。
相关: ls中不同颜色的含义是什么?
实际上, ls
和l
都是平等的
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命令执行的操作 )