O que faz o comando l?

17

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. Isso é um comando real e realmente faz alguma coisa?

    
por Armand 22.09.2012 / 16:43

3 respostas

17

l é um alias para ls -CF , que se comporta de maneira diferente da simples ls .

-C

-C faz ls imprimir saída em forma de coluna. Quando o 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, executar ls -C é o mesmo que executar ls . Mas eles não são equivalentes quando ls é redirecionado ou canalizado. 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 ) é gerado na 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 é devido à -F flag, que faz com que ls anexe sufixos simbólicos (chamados de indicadores) às entradas exibidas. Esses indicadores identificam que tipo de arquivo ou diretório eles são.

Compare isso com a saída do primeiro comando ls 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, tem permissões executáveis).
  • A ausência de qualquer indicador significa que a entrada é um arquivo normal que não é executável.

Existem vários outros indicadores:

O --classify flag e --indicator-style=classify são equivalentes a -F .

Fonte: manual do 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 de 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 amplamente consideradas altamente úteis e inofensivas, como colorização automática (onde a cor é aplicada quando stdout não é redirecionado ou é um terminal, portanto os códigos de escape que especificam cores são virtualmente garantidos, não para ser mal interpretado).

Por esse princípio, ls é um alias.

ek@Kip:/$ alias ls
alias ls='ls --color=auto'

Então, qual comando realmente é executado quando você executa l ? Este aqui:

/bin/ls --color=auto -CF
  1. O shell ( bash ) resolve comandos que não contém um / para a primeira correspondência aparecendo em PATH , que no Ubuntu por ls é /bin/ls .
  2. Os aliases podem conter aliases. A resolução de alias não é recursiva (um alias não pode se chamar, embora possa chamar um comando regular que tenha o mesmo nome). Mas suporta aninhamento .

Portanto, l resolve para ls -CF , que resolve para ls --color=auto -CF .

Os aliases podem ser alterados.

Esses aliases existem porque são configurados dessa maneira por padrão, mas todos os usuários podem alterar seus aliases. Veja man alias , Capítulo 25 e Anexo M no Advanced Bash-Scripting Guide, e Como salvar minhas entradas de "alias" para sempre .

Relacionado: O que as diferentes cores significa em sl?

    
por Eliah Kagan 22.01.2013 / 17:08
7

Na verdade, os dois 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

porque significa que há um alias de sistema embutido causando isso. se você quiser ver, abra o seu terminal e digite alias , então você terá uma saída como essa

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$ 
    
por Ten-Coin 22.09.2012 / 16:46
1

Em caso de dúvida, type l :

l is aliased to 'ls -alF'

(veja também O que o comando la faz )

    
por user2394284 22.12.2016 / 22:58