我的机器上有一个命令l
,但似乎什么都没做, which l
也没有输出。这是一个真正的命令吗?它真的能做任何事情吗?
答案1
-C
-C
ls
以列形式进行打印输出。当标准输出是终端(而不是重定向到文件或非终端设备,或通过管道传输到另一个命令),-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
)。|
表示条目是先进先出设备(记住,类 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 章和附录 M在《高级 Bash 脚本指南》中,以及如何永久保存我的“别名”条目。
有关的: ls 中不同的颜色代表什么意思?
答案2
实际上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$