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?
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 ).Il existe plusieurs autres indicateurs:
@
_ signifie que l'entrée est un lien symbolique (voir aussi man symlink
).|
_ signifie que l'entrée est un FIFO (rappelez-vous, de nombreuses ressources dans les systèmes d'exploitation de type Unix sont représentées par des entrées de système de fichiers ).=
_ signifie que l'entrée est un socket .>
_ signifie que l'entrée est une porte .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
l
(_ls -CF
_) est similaire à mais n'est pas identique à ls
.Il est également bon de garder à l'esprit:
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).
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
_
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
_.Donc l
résout en _ls -CF
_ qui résout en _ls --color=auto -CF
_.
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 .
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$