Answers:
-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
...
相反,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*
...
这里:
/
表示该条目是目录。*
表示该条目是一个普通文件,并且是可执行文件(即具有可执行权限)。还有其他几个指标:
@
表示该条目是符号链接(另请参见man symlink
)。|
表示该条目是FIFO设备(请记住,类Unix操作系统中的许多资源都由文件系统条目表示)。=
表示该条目是一个套接字。>
表示入口是一扇门。该--classify
标志和--indicator-style=classify
相当于-F
。
来源:GNU Coreutils手册,第10.1.5节常规输出格式
l
(ls -CF
)相似,但不一样的ls
。请记住:
这通常用于指定被广泛认为是非常有用且无害的选项,例如自动着色(在stdout
未重定向或终端的情况下应用颜色,因此实际上可以保证指定颜色的转义码不会被误解)。
ls
本身就是别名。ek@Kip:/$ alias ls
alias ls='ls --color=auto'
那么,什么命令在运行时真正被执行l
?这个:
/bin/ls --color=auto -CF
bash
)将不包含的命令解析/
为出现的第一个匹配PATH
,在Ubuntu中的匹配ls
为/bin/ls
。所以l
解析为ls -CF
解析为ls --color=auto -CF
。
这些别名的存在是因为它们默认情况下是通过这种方式设置的,但是每个用户都可以更改其别名。见man alias
,第25章及附录N的高级Bash脚本编程指南,以及如何保存我的“别名”条目永远。
实际上,这两个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$
l
和滑动ls
是不一样的-它们只是发生以产生用于这些特定文件相同的输出,因为没有一个是目录,可执行文件,符号连接,或设备节点(和标准输出是一个端子)。
alias l='ls -CF'
所以不一样。另外,如果要获得更简洁的输出,可以运行alias l
。