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 vraie commande et fait-elle réellement quelque chose?
l
est un alias pour ls -CF
, qui se comporte différemment de plainls
.
-C
-C
rend ls
la sortie d'impression 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 redirigé vers une autre commande), cela -C
est implicite. La course ls -C
est donc la même chose que la course ls
. Mais ils ne sont pas équivalents lorsqu'ils ls
sont redirigés ou redirigés. 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
) sort 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 au -F
drapeau, qui provoque l' ls
ajout de suffixes symboliques (appelés indicateurs) aux entrées qu'il affiche. Ces indicateurs identifient de quel type de fichier ou de répertoire il s'agit.
Comparez cela à la sortie de la première ls
commande 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 est exécutable (c.-à-d. possède des autorisations exécutables ).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 périphérique 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 une prise .>
signifie que l'entrée est une porte .Le --classify
drapeau et --indicator-style=classify
sont équivalents à -F
.
Source: Manuel GNU Coreutils , Section 10.1.5 Formatage général des sorties
l
( ls -CF
) est similaire mais pas identique à ls
.Il est également bon de garder à l'esprit:
Ceci est couramment utilisé pour spécifier des options qui sont largement considérées à la fois comme très utiles et sans danger, telles que la colorisation automatique (où la couleur est appliquée lorsqu'elle stdout
n'est pas redirigée ou est un terminal, de sorte que les codes d'échappement spécifiant les couleurs sont pratiquement garantis pour ne pas être mal interprétés).
ls
est lui-même un alias.ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Alors, quelle commande est vraiment exécutée lorsque vous exécutez l
? Celui-là:
/bin/ls --color=auto -CF
bash
) résout les commandes qui ne contiennent pas /
de la première correspondance apparaissant dans PATH
, ce qui dans Ubuntu for ls
est /bin/ls
.l
Résout donc à ls -CF
qui se résout ls --color=auto -CF
.
Ces alias existent parce qu'ils sont configurés de cette façon par défaut, mais chaque utilisateur peut modifier ses alias. Reportez man alias
-vous au chapitre 25 et à l' annexe M du Guide de script de script avancé et à la façon de sauvegarder à jamais mes entrées "d'alias" .
En relation: Que signifient les différentes couleurs dans ls?
En fait les deux 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é à l'origine de cela. 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$
l
et plainels
sont pas les mêmes - ils ne se sont passées pour produire la même sortie pour les fichiers particuliers, car il n'y en avait des répertoires, des exécutables, des liens symboliques ou des noeuds de périphériques (et la sortie standard est un terminal).alias l='ls -CF'
donc ce n'est pas pareil. De plus, si vous souhaitez obtenir une sortie plus succincte, vous pouvez exécuteralias l
.En cas de doute,
type l
:(voir aussi Que fait la commande la )
la source