Cosa fa il comando l?


19

C'è un comando ldisponibile sulla mia macchina che sembra non fare nulla. which linoltre non produce alcun output. È un vero comando e fa davvero qualcosa?

Risposte:


20

lè un alias per ls -CF, che si comporta diversamente dalla semplicels .

-C

-Ceffettua l' lsoutput 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 lsviene 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 | lesssembra l'output principale (ma less, naturalmente, impaginato da ).

-F

La principale differenza visibile tra lse lè dovuta al -Fflag, che provoca lsl'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 lscomando 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 ).
  • L'assenza di qualsiasi indicatore indica che la voce è un file normale che non è eseguibile.

Ci sono molti altri indicatori:

La --classifybandiera e --indicator-style=classifysono equivalenti a -F.

Fonte: manuale GNU Coreutils , sezione 10.1.5 Formattazione generale dell'output

In conclusione, l( ls -CF) è simile ma non uguale a ls.

È anche bene tenere a mente:

Lo stesso testo può essere sia un comando normale che un alias.

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).

Con questo principio, 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
  1. La shell ( bash) risolve i comandi che non contengono /a alla prima corrispondenza che appare PATH, che in Ubuntu lsè /bin/ls.
  2. Gli alias possono contenere alias. La risoluzione dell'alias non è ricorsiva (un alias non può chiamare se stesso, sebbene possa chiamare un comando regolare con lo stesso nome). Ma supporta l' annidamento .

Quindi lrisolve a ls -CFchi si risolve ls --color=auto -CF.

Gli alias possono essere cambiati.

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?


6

In realtà entrambi lse lsono 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$ 

Il mistero è stato risolto :)
Armand,

6
@Alison le pianura lssono 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).
Eliah Kagan,

Puoi vedere, alias l='ls -CF'quindi non è lo stesso. Inoltre, se si desidera ottenere un output più breve, è possibile eseguire alias l.
wjandrea,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.