O que o comando l faz?


19

Existe um comando ldisponível na minha máquina que parece não fazer nada. which ltambém não produz saída. Este é um comando real e realmente faz alguma coisa?

Respostas:


20

lé um apelido para ls -CF, que se comporta de maneira diferente da planíciels .

-C

-Cfaz lsa 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), -Cestá implícito. Portanto, correr ls -Cé o mesmo que correr ls. Mas eles não são equivalentes quando lssã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 | lessparece com a saída principal (mas paginada por less, é claro).

-F

A principal diferença visível entre lse lé devida ao -Fsinalizador, que faz lscom 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 lscomando 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 ).
  • A ausência de qualquer indicador significa que a entrada é um arquivo normal que não é executável.

Existem vários outros indicadores:

A --classifybandeira e --indicator-style=classifysão equivalentes a -F.

Fonte: Manual GNU Coreutils , Seção 10.1.5. Formatação geral de saída

Em conclusão, l( ls -CF) é semelhante, mas não é o mesmo que ls.

Também é bom ter em mente:

O mesmo texto pode ser um comando regular e um alias.

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).

Por esse princípio, lsele 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
  1. O shell ( bash) resolve comandos que não contêm um /para a primeira correspondência que aparece PATH, o que no Ubuntu lsé /bin/ls.
  2. Aliases podem conter aliases. A resolução do alias não é recursiva (um alias não pode se chamar, embora possa chamar um comando regular com o mesmo nome). Mas suporta aninhamento .

Então lresolve para ls -CFqual resolve ls --color=auto -CF.

Aliases podem ser alterados.

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?


6

Na verdade, ambos lse lsã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, aliasentã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$ 

Mistério resolvido :)
— Armand

6
@Alison le simples lssã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).
— Eliah Kagan

Você pode ver, alias l='ls -CF'então não é o mesmo. Além disso, se você deseja obter uma saída mais sucinta, pode executar alias l.
— wjandrea

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.