web-dev-qa-db-fra.com

Que fait la commande l?

Il y a une commande l disponible sur ma machine qui semble ne rien faire. which l ne produit également aucune sortie. Est-ce une commande réelle et fait-il réellement quelque chose?

19
Armand

l est un alias pour _ls -CF_, qui se comporte différemment de plain ls.

_-C_

_-C_ rend ls une sortie imprimée sous forme de colonne. Lorsque stdout ​​est un terminal (plutôt que d'être redirigé vers un fichier ou un périphérique non terminal, ou dirigé vers une autre commande), _-C_ est impliqué. Donc, exécuter _ls -C_ est identique à exécuter ls. Mais ils sont pas équivalents lorsque ls est redirigé ou redirigé. Par exemple:

_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

...
_

En revanche, _ls -C_ (ou _-l_) est affiché sous forme de colonne, quel que soit le type d'appareil stdout. _ls -C | less_ ressemble à la sortie supérieure (mais paginée par less , bien sûr).

_-F_

La principale différence visible entre ls et l est due à l'indicateur _-F_, qui oblige ls à ajouter des suffixes symboliques (appelés indicateurs) aux entrées qu'il affiche. Ces indicateurs identifient quel type de fichier ou de répertoire ils sont.

Comparez ceci à la sortie de la première commande ls ci-dessus:

_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*

...
_

Ici:

  • _/_ signifie que l'entrée est un répertoire.
  • _*_ signifie que l'entrée est un fichier normal et qu'elle est exécutable (c'est-à-dire qu'elle a l'exécutable permissions ).
  • L'absence de tout indicateur signifie que l'entrée est un fichier normal qui n'est pas exécutable.

Il existe plusieurs autres indicateurs:

L'indicateur _--classify_ et _--indicator-style=classify_ sont équivalents à _-F_.

Source: Manuel GNU Coreutils , Section 10.1.5 Formatage général des résultats

En conclusion, l (_ls -CF_) est similaire à mais n'est pas identique à ls.

Il est également bon de garder à l'esprit:

Le même texte peut être à la fois une commande normale et un alias.

Ceci est couramment utilisé pour spécifier des options qui sont généralement considérées comme très utiles et inoffensives, telles que la colorisation automatique (où la couleur est appliquée lorsque stdout n'est pas redirigé ou est un terminal, de sorte que les codes d'échappement spécifiant des couleurs ne sont pratiquement pas interprétés de manière erronée).

Selon ce principe, ls est lui-même un alias.

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

Alors, quelle commande réellement est exécutée lorsque vous exécutez l? Celui-ci:

_/bin/ls --color=auto -CF
_
  1. Le shell ( bash ) résout les commandes qui ne contiennent pas de _/_ à la première correspondance apparaissant dans PATH , qui sous Ubuntu pour ls est _/bin/ls_.
  2. Les alias peuvent contenir des alias. La résolution de l’alias n’est pas récursive (un alias ne peut pas s’appeler, bien qu’il puisse appeler une commande ordinaire portant le même nom). Mais cela supporte imbrication .

Donc l résout en _ls -CF_ qui résout en _ls --color=auto -CF_.

Les alias peuvent être changés.

Ces alias existent parce qu'ils sont configurés de cette manière par défaut, mais chaque utilisateur peut modifier ses alias. Voir man alias , Chapitre 25 et Annexe M dans le Guide de script Bash avancé, et Comment sauvegarder mon " alias "entrées pour toujours .

Connexes: Que signifient les différentes couleurs dans ls?

20
Eliah Kagan

En fait, ls et l sont égaux

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

pourquoi signifie qu'il y a un alias système intégré qui en est la cause. si vous voulez voir, ouvrez votre terminal et tapez alias alors vous obtiendrez une sortie comme celle-ci

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$ 
6
rɑːdʒɑ

En cas de doute, type l:

l is aliased to `ls -alF'

(voir aussi Que fait la commande )

2
user2394284