ls (Unix)

comando dei sistemi operativi Unix e Unix-like

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 modifica

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. Due implementazioni particolarmente popolari sono:

Sintassi modifica

La sintassi generale di ls è la seguente:

ls [opzioni] [--] [file_o_directory1 …]

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:
  1. i permessi
  2. il numero di collegamenti fisici al particolare file o directory
  3. il proprietario
  4. il gruppo assegnato
  5. 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
  6. la data di ultima modifica in forma compatta
  7. il nome
  8. 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:

 brw-r--r--    1 unixguy staff 64,  64 Jan 27 05:52 block         
 crw-r--r--    1 unixguy staff 64, 255 Jan 26 13:57 character     
 -rw-r--r--    1 unixguy staff     290 Jan 26 14:08 compressed.gz 
 -rw-r--r--    1 unixguy staff  331836 Jan 26 14:06 data.ppm      
 drwxrwx—x     2 unixguy staff      48 Jan 26 11:28 directory     
 -rwxrwx—x     1 unixguy staff      29 Jan 26 14:03 executable    
 prw-r--r--    1 unixguy staff       0 Jan 26 11:50 fifo          
 lrwxrwxrwx    1 unixguy staff       3 Jan 26 11:44 link -> dir   
 -rw-rw----    1 unixguy staff     217 Jan 26 14:08 regularfile   

Visualizzazione dei file nascosti modifica

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 modifica

Elenca il contenuto della directory corrente con il formato esteso:

$ ls -l
totale 44
drwxr—r-- 2 fred fred    48 25 mag 22:11 drafts
-r-xr-xr-x 1 fred fred  8460 25 mag 22:12 edit
-rw-r--r-- 1 fred fred 30405 25 mag 22:12 edition-32
lrwxrwxrwx 1 fred fred     4 25 mag 22:16 editor -> edit

Elenca il contenuto della directory corrente con il formato esteso visualizzando anche i file nascosti:

$ ls -la
totale 60
drwxr-xr-x  4 fred fred    312 25 mag 22:19 .
drwxrwsr-x 10 root staff   248 25 mag 22:11 ..
-rw-r--r--  1 fred fred    220 25 mag 22:11 .bash_logout
-rw-r--r--  1 fred fred    414 25 mag 22:11 .bash_profile
-rw-r--r--  1 fred fred   2227 25 mag 22:11 .bashrc
drwxr-xr-x  2 fred fred     48 25 mag 22:19 .directory_nascosta
drwxr—r--  2 fred fred     48 25 mag 22:19 drafts
-r-xr-xr-x  1 fred fred   8460 25 mag 22:12 edit
-rw-r--r--  1 fred fred  30405 25 mag 22:12 edition-32
lrwxrwxrwx  1 fred fred      4 25 mag 22:16 editor -> edit
-rw-r--r--  1 fred fred      6 25 mag 22:19 .file_nascosto

Elenca il contenuto della directory corrente con il formato compatto e con i caratteri che indicano il tipo di file:

$ ls -F
drafts/  edit*	edition-32  editor@

Elenca il contenuto della subdirectory drafts col formato esteso:

$ ls -l drafts
totale 12
-rw-r--r-- 1 fred fred  8 25 mag 22:21 doc1.txt
-rw-r--r-- 1 fred fred 19 25 mag 22:21 doc2.txt
-rw-r--r-- 1 fred fred 34 25 mag 22:22 doc3.txt

Elenca la directory drafts in sé invece del suo contenuto:

$ ls -ld drafts
drwxr—r-- 2 fred fred 120 25 mag 22:22 drafts/

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:

$ ls -lrt /usr/lib | tail
-rw-r--r--  1 root root  1379652  8 mag 20:40 libcrypto.so.0.9.8
-rw-r--r--  1 root root  2200134  8 mag 20:40 libcrypto.a
lrwxrwxrwx  1 root root       15 18 mag 10:18 libssl.so -> libssl.so.0.9.8
lrwxrwxrwx  1 root root       18 18 mag 10:18 libcrypto.so -> libcrypto.so.0.9.8
drwxr-xr-x  4 root root     3280 18 mag 10:18 pkgconfig
drwxr-xr-x  2 root root      192 18 mag 10:18 i586
drwxr-xr-x  2 root root      192 18 mag 10:18 i486
lrwxrwxrwx  1 root root       19 18 mag 10:18 sftp-server -> openssh/sftp-server
drwxr-xr-x  2 root root      112 18 mag 10:18 openssh
drwxr-xr-x  3 root root      136  1 giu 11:14 squeak

Abbreviazioni ed aliases modifica

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.

Note modifica


Voci correlate modifica

Altri progetti modifica

Collegamenti esterni modifica