Existe um comando l
disponível na minha máquina que parece não fazer nada. which l
também não produz saída. Este é um comando real e realmente faz alguma coisa?
l
é um apelido para ls -CF
, que se comporta de maneira diferente da planíciels
.
-C
-C
faz ls
a saída de impressão em forma de coluna. Quando stdout é um terminal (em vez de ser redirecionado para um arquivo ou dispositivo não terminal ou canalizado para outro comando), -C
está implícito. Portanto, correr ls -C
é o mesmo que correr ls
. Mas eles não são equivalentes quando ls
são redirecionados ou canalizados. Por exemplo:
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
...
Por outro lado, ls -C
(ou -l
) gera saídas em forma de coluna, independentemente do tipo de dispositivo stdout
. ls -C | less
parece com a saída principal (mas paginada por less
, é claro).
-F
A principal diferença visível entre ls
e l
é devida ao -F
sinalizador, que faz ls
com que os sufixos simbólicos (chamados de indicadores) sejam anexados às entradas exibidas. Esses indicadores identificam que tipo de arquivo ou diretório eles são.
Compare isso com a saída do primeiro ls
comando acima:
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*
...
Aqui:
/
significa que a entrada é um diretório.*
significa que a entrada é um arquivo normal e é executável (ou seja, possui permissões de executável ).Existem vários outros indicadores:
@
significa que a entrada é um link simbólico (veja também man symlink
).|
significa que a entrada é um dispositivo FIFO (lembre-se, muitos recursos em sistemas operacionais semelhantes ao Unix são representados por entradas do sistema de arquivos ).=
significa que a entrada é um soquete .>
significa que a entrada é uma porta .A --classify
bandeira e --indicator-style=classify
são equivalentes a -F
.
Fonte: Manual GNU Coreutils , Seção 10.1.5. Formatação geral de saída
l
( ls -CF
) é semelhante, mas não é o mesmo que ls
.Também é bom ter em mente:
Isso é comumente usado para especificar opções que são amplamente consideradas altamente úteis e inofensivas, como a colorização automática (onde a cor é aplicada quando não stdout
é redirecionada ou é um terminal, para que os códigos de escape que especificam cores sejam praticamente garantidos para não serem mal interpretados).
ls
ele próprio é um apelido.ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Então, qual comando realmente é executado quando você executa l
? Este:
/bin/ls --color=auto -CF
bash
) resolve comandos que não contêm um /
para a primeira correspondência que aparece PATH
, o que no Ubuntu ls
é /bin/ls
.Então l
resolve para ls -CF
qual resolve ls --color=auto -CF
.
Esses alias existem porque são configurados dessa maneira por padrão, mas todos os usuários podem alterar seus alias. Veja man alias
, Capítulo 25 e Apêndice M no Guia Bash-Scripting o Avançado e Como salvar minhas entradas "Alias" para sempre .
Relacionado: O que as diferentes cores significam em sl?
Na verdade, ambos ls
e l
são iguais
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
por que significa que existe um alias de sistema embutido causando isso. se você quiser ver, abra seu terminal e digite, alias
então você terá uma saída como esta
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
e simplesls
são não o mesmo - eles só aconteceu para produzir a mesma saída para esses arquivos particulares, uma vez que nenhum foram diretórios, executável, links simbólicos, ou nós de dispositivos (e saída padrão era um terminal).alias l='ls -CF'
então não é o mesmo. Além disso, se você deseja obter uma saída mais sucinta, pode executaralias l
.Em caso de dúvida
type l
:(veja também O que o comando la faz )
fonte