Hay un comando l
disponible en mi máquina que parece no hacer nada. which l
Tampoco produce salida. ¿Es este un comando real y realmente hace algo?
l
es un alias para ls -CF
, que se comporta de manera diferente a la simplels
.
-C
-C
realiza ls
la 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), -C
está implícito. Entonces correr ls -C
es lo mismo que correr ls
. Pero son no equivalentes cuando ls
se 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 stdout
sea. ls -C | less
se ve como la salida superior (pero paginada por less
, por supuesto).
-F
La principal diferencia visible entre ls
y l
se debe a la -F
bandera, 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 ls
comando 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 ).Hay varios otros indicadores:
@
significa que la entrada es un enlace simbólico (ver también man symlink
).|
significa que la entrada es un dispositivo FIFO (recuerde, muchos recursos en sistemas operativos tipo Unix están representados por entradas del sistema de archivos ).=
significa que la entrada es un zócalo .>
significa que la entrada es una puerta .La --classify
bandera y --indicator-style=classify
son equivalentes a -F
.
Fuente: manual de GNU Coreutils , Sección 10.1.5 Formato de salida general
l
( ls -CF
) es similar pero no igual que ls
.También es bueno tener en cuenta:
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).
ls
es 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
bash
) resuelve comandos que no contienen /
a la primera coincidencia que aparece PATH
, que en Ubuntu ls
es /bin/ls
.Entonces l
resuelve a lo ls -CF
que resuelve ls --color=auto -CF
.
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?
En realidad ambos ls
y l
son 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, alias
entonces 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$
l
y la llanurals
son 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).alias l='ls -CF'
así que no es lo mismo. Además, si desea obtener una salida más sucinta, puede ejecutaralias l
.En caso de duda
type l
:(ver también ¿Qué hace el comando la )
fuente