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?

Armand
fonte

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?

Eliah Kagan
fonte
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$ 
rɑːdʒɑ
fonte
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