Risposte:
l
è un alias per ls -CF
, che si comporta diversamente dalla semplicels
.
-C
-C
effettua l' ls
output di stampa in forma di colonna. Quando stdout è un terminale (anziché essere reindirizzato a un file o dispositivo non terminale o reindirizzato a un altro comando), -C
è implicito. Quindi correre ls -C
è come correre ls
. Ma sono non equivalenti quando ls
viene ridiretti. Per esempio:
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
...
Al contrario, ls -C
(o -l
) output in forma di colonna indipendentemente dal tipo di dispositivo stdout
. ls -C | less
sembra l'output principale (ma less
, naturalmente, impaginato da ).
-F
La principale differenza visibile tra ls
e l
è dovuta al -F
flag, che provoca ls
l'aggiunta di suffissi simbolici (chiamati indicatori) alle voci visualizzate. Questi indicatori identificano il tipo di file o directory che sono.
Confronta questo con l'output del primo ls
comando sopra:
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*
...
Qui:
/
significa che la voce è una directory.*
significa che la voce è un file normale ed è eseguibile (ad esempio, ha autorizzazioni eseguibili ).Ci sono molti altri indicatori:
@
significa che la voce è un collegamento simbolico (vedi anche man symlink
).|
significa che la voce è un dispositivo FIFO (ricordate, molte risorse nei sistemi operativi simili a Unix sono rappresentate da voci del filesystem ).=
significa che la voce è un socket .>
significa che l'ingresso è una porta .La --classify
bandiera e --indicator-style=classify
sono equivalenti a -F
.
Fonte: manuale GNU Coreutils , sezione 10.1.5 Formattazione generale dell'output
l
( ls -CF
) è simile ma non uguale a ls
.È anche bene tenere a mente:
Questo è comunemente usato per specificare opzioni che sono ampiamente considerate sia estremamente utili che innocue, come la colorazione automatica (dove il colore viene applicato quando non stdout
è indirizzato o è un terminale, quindi i codici di escape che specificano i colori sono praticamente garantiti per non essere male interpretati).
ls
è esso stesso un alias.ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Quindi quale comando viene realmente eseguito quando si esegue l
? Questo:
/bin/ls --color=auto -CF
bash
) risolve i comandi che non contengono /
a alla prima corrispondenza che appare PATH
, che in Ubuntu ls
è /bin/ls
.Quindi l
risolve a ls -CF
chi si risolve ls --color=auto -CF
.
Questi alias esistono perché sono impostati in questo modo per impostazione predefinita, ma ogni utente può modificare i propri alias. Vedi man alias
, Capitolo 25 e Appendice M nella Guida avanzata di script Bash e Come salvare le mie voci "alias" per sempre .
Correlati: cosa significano i diversi colori in ls?
In realtà entrambi ls
e l
sono uguali
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
perché significa che c'è un alias di sistema integrato che causa questo. se vuoi vedere, apri il tuo terminale e digita alias
, otterrai un output in questo modo
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
e pianura ls
sono non lo stesso - hanno appena accaduto per produrre la stessa uscita per quei file particolari, dal momento che nessuno era directory, eseguibile, i collegamenti simbolici, o nodi di dispositivo (e l'output standard era un terminale).
alias l='ls -CF'
quindi non è lo stesso. Inoltre, se si desidera ottenere un output più breve, è possibile eseguire alias l
.