Il comando ls

Uno dei primi comandi che si impara ad usare su un sistema Linux/Unix è il comando ls, che serve a ottenere la lista dei file presenti all’interno di una determinata directory (normalmente quella corrente, salvo specificarne altre). E’ l’analogo del comando dir presente sui sistemi MS-DOS/Windows ma, a dispetto della sua apparente semplicità, è un comando che prevede tantissime opzioni, molte delle quali comprensibili solo se si ha una certa familiarità con il filesystem e gli attributi dei file.

Vediamo quindi come usarlo e quali sono le opzioni più utili.

La sintassi è molto semplice:

ls [OPTION]... [FILE]...

dove FILE può essere una lista di file e/o directory. Se non si specifica nessun file, viene assunta la directory corrente dalla quale si esegue il comando. Se non specificato esplicitamente, file e directory nascoste (quelli che hanno il nome che inizia col carattere . ) non vengono mostrate nell’output del programma. Vediamo un esempio:

root@localhost:/srv/writefreely# pwd
/srv/writefreely
root@localhost:/srv/writefreely# ls
config.ini  keys  pages  static  templates  writefreely

Il comando pwd serve a mostrare la directory corrente, e in questo caso informa che l’utente root si trova attualmente nella directory /srv/writefreely. Da questa directory si esegue il comando ls, che elenca file e directory in essa contenuti. Se il terminale lo supporta, e se ls viene eseguito con l’opzione --color, probabilmente si vedranno le diverse tipologie di oggetti (file normali, file eseguibili e directory) mostrate in colori differenti.

Vediamo allora quali sono alcune delle opzioni più frequenti e utili di questo comando.

  • -a: mostra anche i file nascosti, vale a dire quelli il cui nome inizia con il carattere . (punto). Sono comprese nell’elenco anche le directory . e .. che rappresentano rispettivamente la directory corrente e la directory padre
  • -A: come sopra, ma omette . e ..
  • -l (elle minuscola): mostra l’output in formato “long listing”, riportando alcuni attributi dei file (permessi, proprietario, gruppo, ecc.)
  • -p: stampa un / alla fine di un file se questo è una directory
  • -t: ordina l’output in base al tempo di modifica del file (prima i file modificati più di recente); il timestamp di ultima modifica è quello mostrato di default
  • -c: insieme a -l mostra il timestamp CTIME, ovvero il timestamp relativo all’ultima modifica degli attributi del file (ad esempio proprietario, gruppo, permessi); l’output è in ordine alfabetico; insieme a -lt, mostra sempre CTIME ma l’output è in base al tempo di modifica, con in testa il più recente
  • -g: come -l, ma non mostra il proprietario del file (ne mostra soltanto il gruppo)
  • -h: quando usato insieme a -l e/o -s, mostra la dimensione del file in formato più leggibile (specificando K, M, G per kilobytes, megabites, gigabites rispettivamente)
  • -i: stampa il numero di inode per ciascun file
  • -n: come -l, ma mostra uid/gid numerici per proprietario e gruppo
  • -r: mostra l’output in ordine inverso
  • -S: ordina l’output in base alla grandezza dei file, iniziando dal più grande
  • -u: insieme a -l, mostra il timestamp di ultimo accesso al file mostrando i file in ordine alfabetico; insieme a -lt ordina i file in base al tempo di accesso, con il più recente in testa.

Queste sono solo alcune delle opzioni disponibili, l’elenco completo si trova ovviamente nella relativa pagina di manuale. Quello che è importante sottolineare è che l’uso corretto di questo comando con le diverse opzioni non può prescindere da una seppur minima conoscenza dell’organizzazione del filesystem e degli attributi che si usano per i file. In particolare mi riferisco ai vari timestamp (MTIME, CTIME, ATIME, relativi al tempo di ultima modifica del file, ultima modifica degli attributi e ultimo accesso), al significato di proprietario e gruppo e al significato dei permessi di accesso al file. A questi temi dedicherò probabilmente degli articoli in futuro.

Ma perché così tante opzioni?

L’utilità di poter “customizzare” in maniera così dettagliata l’output di ls può non essere molto evidente all’utente comune che vuole semplicemente la lista dei file, ma risulta indispensabile quando lo si utilizza all’interno di script della shell che devono condizionare la loro esecuzione proprio in base ai dettagli forniti da ls con le diverse opzioni mostrate in questo articolo.

Leave a Reply

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.