¿Qué hace el comando l?

19

Hay un comando ldisponible en mi máquina que parece no hacer nada. which lTampoco produce salida. ¿Es este un comando real y realmente hace algo?

Armand
fuente

Respuestas:

20

les un alias para ls -CF, que se comporta de manera diferente a la simplels .

-C

-Crealiza lsla salida de impresión en forma de columna. Cuando stdout es un terminal (en lugar de ser redirigido a un archivo o dispositivo no terminal, o conectado a otro comando), -Cestá implícito. Entonces correr ls -Ces lo mismo que correr ls. Pero son no equivalentes cuando lsse redirige o hilo. Por ejemplo:

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 el contrario, ls -C(o -l) sale en forma de columna independientemente de qué tipo de dispositivo stdoutsea. ls -C | lessse ve como la salida superior (pero paginada por less, por supuesto).

-F

La principal diferencia visible entre lsy lse debe a la -Fbandera, que causals que se agreguen sufijos simbólicos (llamados indicadores) a las entradas que muestra. Estos indicadores identifican qué tipo de archivo o directorio son.

Compare esto con la salida del primer lscomando anterior:

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*

...

Aquí:

  • / significa que la entrada es un directorio.
  • *significa que la entrada es un archivo normal y es ejecutable (es decir, tiene permisos ejecutables ).
  • La ausencia de cualquier indicador significa que la entrada es un archivo normal que no es ejecutable.

Hay varios otros indicadores:

La --classifybandera y --indicator-style=classifyson equivalentes a -F.

Fuente: manual de GNU Coreutils , Sección 10.1.5 Formato de salida general

En conclusión, l( ls -CF) es similar pero no igual que ls.

También es bueno tener en cuenta:

El mismo texto puede ser tanto un comando regular como un alias.

Esto se usa comúnmente para especificar opciones que se consideran ampliamente muy útiles e inofensivas, como la coloración automática (donde el color se aplica cuando stdout se redirige o es un terminal, por lo que los códigos de escape que especifican los colores están prácticamente garantizados para no ser malinterpretados).

Por este principio, lses en sí mismo un alias.

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

Entonces, ¿qué comando realmente se ejecuta cuando ejecutas l? Éste:

/bin/ls --color=auto -CF
  1. El shell ( bash) resuelve comandos que no contienen /a la primera coincidencia que aparece PATH, que en Ubuntu lses /bin/ls.
  2. Los alias pueden contener alias. La resolución de alias no es recursiva (un alias no puede llamarse a sí mismo, aunque puede llamar a un comando regular que tiene el mismo nombre). Pero sí admite el anidamiento .

Entonces lresuelve a lo ls -CFque resuelve ls --color=auto -CF.

Los alias se pueden cambiar.

Estos alias existen porque están configurados de esa manera de manera predeterminada, pero cada usuario puede cambiar sus alias. Ver man alias, Capítulo 25 y Apéndice H en la Guía avanzada Bash-Scripting, y cómo Ahorre mis entradas "alias" para siempre .

Relacionado: ¿Qué significan los diferentes colores en ls?

Eliah Kagan
fuente
6

En realidad ambos lsy lson iguales

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 qué significa que hay un alias de sistema incorporado que causa esto. si quieres ver, abre tu terminal y escribe, aliasentonces obtendrás una salida 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ʒɑ
fuente
Mystery resuelto :)
Armand
66
@Alison ly la llanura lsson no la misma - que sólo pasó a producir la misma salida para esos archivos en particular, ya que ninguno fue directorios, enlaces simbólicos, ejecutable, o nodos de dispositivos (y la salida estándar era un terminal).
Eliah Kagan
Puedes ver, alias l='ls -CF'así que no es lo mismo. Además, si desea obtener una salida más sucinta, puede ejecutar alias l.
wjandrea