l命令有什么作用?


19

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

Answers:


20

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

...

相反,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*

...

这里:

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

还有其他几个指标:

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

来源:GNU Coreutils手册第10.1.5节常规输出格式

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

请记住:

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

这通常用于指定被广泛认为是非常有用且无害的选项,例如自动着色(在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

别名可以更改。

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

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


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

为什么意味着存在一个内置系统别名导致此问题。如果要查看,请打开终端并键入,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$ 

奥秘得以解决:)
Armand 2012年

6
@Alison l和滑动ls一样的-它们只是发生以产生用于这些特定文件相同的输出,因为没有一个是目录,可执行文件,符号连接,或设备节点(和标准输出是一个端子)。
伊莱亚·卡根

您可以看到,alias l='ls -CF'所以不一样。另外,如果要获得更简洁的输出,可以运行alias l
wjandrea

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.