# Ls (Unix)

ls è un comando dei sistemi operativi Unix e Unix-like che elenca informazioni su file ed il contenuto delle directory.
Il comando ls è definito nelle specifiche POSIX e dalla Single UNIX Specification.

## Storia

Il comando ls è apparso nella versione originale di Unix dell'AT&T. Il suo nome deriva da un analogo comando di Multics che elencava i segmenti di memoria (in Multics file e segmenti di memoria erano tra loro sinonimi).
Al giorno d'oggi esistono varie implementazioni di ls. Tre implementazioni particolarmente popolari sono:
* la versione inclusa nel pacchetto GNU Coreutils della Free Software Foundation, disponibile come software libero;
* la versione per le varianti di BSD come FreeBSD, OpenBSD, NetBSD e Darwin per i computer Apple, disponibili come software open source.
* la versione è anche inclusa in Microsoft PowerShell nelle versione successive a Windows 7.

## Sintassi

La sintassi generale di ls è la seguente:
I parametri file_o_directory specificano i file e/o le directory da elencare. In loro assenza sono elencati i file presenti nella directory corrente (ovvero la directory corrente del processo che avvia ls, tipicamente una shell testuale).
Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.
Se non indicato diversamente, l'elenco è ordinato alfabeticamente. Se lo standard output di ls è un terminale interattivo, ls produce un elenco compatto dei soli nomi dei file distribuiti su più colonne in modo da occupare la larghezza del terminale, altrimenti (quando ad esempio usato in una pipeline software) produce un elenco dei soli nomi su un'unica colonna (un nome per linea).
Tra le opzioni significative vi sono:

### -a

    Include nell'elenco anche i file e directory il cui nome inizia per punto (che, per convenzione, non sono normalmente mostrati).

### -d

    Elenca le proprietà delle directory specificate come parametri invece di elencare il loro contenuto.

### -n

    Indica proprietario e gruppo assegnato usando rispettivamente lo User identifier ed il Group identifier numerici invece dei loro nomi.

### -l

    Produce un elenco esteso, una linea per ogni file, indicando da sinistra a destra:
   * i permessi
   * il numero di collegamenti fisici al particolare file o directory
   * il proprietario
   * il gruppo assegnato
   * le dimensioni apparenti in byte (quelle reali possono essere inferiori in caso di file sparsi), oppure il major number ed il minor number che caratterizzano un dispositivo a blocchi o un dispositivo a caratteri
   * la data di ultima modifica in forma compatta
   * il nome
   * in caso di collegamenti simbolici, "->" e la destinazione del collegamento

### -F

    Aggiunge in coda a ciascuno dei nomi dei file elencati un carattere che ne rivela la natura:
   * * – indica un file eseguibile
   * / – indica una directory
   * | – indica una named pipe
   * @ – indica un collegamento simbolico
   * = – indica un socket in dominio Unix
   * I file normali non eseguibili non hanno alcun suffisso.

### -R

    Elenca ricorsivamente anche il contenuto di eventuali subdirectory incontrate.

### -r

    Inverte il senso di ordinamento dell'elenco.

### -t

    Ordina l'elenco per data e ora di ultima modifica anziché alfabeticamente.
In alcuni sistemi l'uso dell'opzione --color (per GNU ls), o -G (FreeBSD ls) fa in modo che ls evidenzi i file con un colore diverso a seconda del loro tipo (a differenza dei caratteri usati dall'opzione -F). Per determinare il colore da usare per un file, GNU ls ne controlla il tipo, i permessi e l'estensione, mentre in FreeBSD viene controllato soltanto il tipo di file ed i permessi. Il risultato potrebbe essere simile al seguente:

## Visualizzazione dei file nascosti

Il comportamento predefinito di ls nel presentare il contenuto di una directory prevede di non elencare i file e directory il cui nome inizia per punto ("."), ad esempio ".profile" o ".emacs".
Tali file sono detti file nascosti, e per visualizzare anch'essi è necessario usare l'opzione -a.
Uno dei motivi che stanno alla base di questo comportamento deriva dalla grande quantità di file e directory di configurazione che i programmi collocano nelle home directory degli utenti per memorizzare le impostazioni utente, unitamente al fatto che, a differenza ad esempio dei sistemi MS-DOS o Microsoft Windows, non vi è un meccanismo specifico per nascondere dei file con nomi arbitrari.
Il meccanismo dei file nascosti è semplice, ben compreso e rispettato anche dalle interfacce grafiche, e permette di evitare di appesantire inutilmente gli elenchi dei file contenuti nella home directory dell'utente (o di qualsiasi altra directory).

## Esempi

Elenca il contenuto della directory corrente con il formato esteso:
Elenca il contenuto della directory corrente con il formato esteso visualizzando anche i file nascosti:
Elenca il contenuto della directory corrente con il formato compatto e con i caratteri che indicano il tipo di file:
Elenca il contenuto della subdirectory drafts col formato esteso:
Elenca la directory drafts in sé invece del suo contenuto:
Elenca gli ultimi dieci file o directory modificati più di recente in una directory molto affollata (più di duemila voci); ls produce l'elenco ordinato per data di modifica, e viene posto in pipeline software con il comando tail per visualizzare solo le ultime dieci linee dell'elenco:

## Abbreviazioni ed aliases

Su alcuni sistemi (ad esempio predefinitamente in PCLinuxOS), ls può essere abbreviato in "l". Tale comportamento può essere esteso su altri sistemi mediante la creazione di un alias nella shell testuale, di un collegamento simbolico al file eseguibile "/bin/ls", o di uno script chiamato "l" che invochi ls passandogli tutti i suoi parametri.