Uno dei comandi della bash maggiormente usati è ls che permette di conoscere il contenuto della cartella nella quale ci troviamo, per esempio (nel mio computer) se do il comando ls ottengo:
$ ls
Documenti Immagini Musica Scrivania
examples.desktop Modelli Pubblici Video
Ma questo comando offre molto di più della mera elencazione dei files nella directory corrente, ma ha tutta una serire di opzioni, molte delle quali le illustrerò in questo post :)

Nota: a causa della risoluzione del blog, il listato di alcuni comandi è un pò... illeggibile :P per capire bene di cosa parlo, più che guardare l'output dei comandi da me postato, provate a usare i comandi sul vostro terminale mentre leggete.

Scelta directory.

Non dobbiamo necessariamente navigare fino alla cartella di cui vogliamo conoscerne il contenuto, ma possiamo direttamente specificare il percorso, relativo (ovvero partendo dalla cartella in cui ci troviamo) oppure assoluto (partendo dal file system), ad esempio:
$ ls Documenti
chimica da_fare.txt ebay liste.txt personali uni

I nascosti.

Come sapete, la nostra /home pulula di files e cartelle nascosti (quelli preceduti da un puntino). Per comodita (siccome ne è rara la modifica) il comando ls> non li visualizza; se vogliamo fare in modo che vengano mostrati basta eseguire il comando con l'opzione -a (--all):
$ ls -a
. examples.desktop .icons .recently-used
.. .fontconfig Immagini .recently-used.xbel
.adobe .gabedit-2.1.8 .kde Scrivania
..........
.easychemrc .gvfs .pulse-cookie .xdrawchemrc
.esd_auth .ICEauthority .qt .xsession-errors
Ogni volta che eseguirete il comando con l'opzione all noterete la presenza di due directory, contrassegnate da un puntino o da due puntini: è normale, come sicuramente saprete rappresentano la directory corrente (il puntino) e la precedente (i due puntini).

Liste con la virgola

Se invece che incolonnati, preferite vedere i vostri risultati divisi da una virgola, basta dare l'opzione -m (--format=commas), come nell'esempio:
$ls -m
Documenti, examples.desktop, Immagini, Modelli, Musica, Pubblici, Scrivania, Video
E' utilissimo quando ad esempio volete scrivere un file con la lista di ciò che c'è in una cartella, basta redirigere il comando nel file desiderato, con un comando del tipo
$ls -m > lista.txt

Liste in colonna

Se invece delle virgole preferite un unica colonna, l'opzione che fa al caso vostro è -1 (--format=single-column):
$ ls -1
Documenti
examples.desktop
Immagini
Modelli
Musica
Pubblici
Scrivania
Video

Sfruttare i caratteri speciali.

In questo post ho spiegato l'utilizzo dei caratteri speciali; naturalmente sono utili anche con il comando ls, per esempio supponiamo di avere una cartella piena zeppa di musica, ma noi cerchiamo un file .ogg di cui non ricordiamo il nome, ci basterà isolare la ricerca ai files .ogg:
$ ls *.ogg
feel_the_love.ogg un_avventura.ogg
Potete sbizzarrirvi come volete sfruttando i caratteri speciali


Ricorsività

Se rendiamo il comando ricorsivo tramite l'opzione -R (--recursive) otterremo nonsolo la lista degli elementi presenti nella cartella corrente, ma anche la lista degli elementi presenti in tutte le sottodirectory della cartella attuale! Ecco un esempio:
$ ls -R
.:
battisti harder_better_faster_stronger.mp3 house

./battisti:
fiori_rosa.ogg un_avventura.ogg

./house:
feel_the_love.ogg poker_face.mp3

I dettagli

Se volete conoscere i dettagli di ogni file listato, il comando che dovete dare è ls -l (--format=long). L'interpretazione dei suoi risultati potrebbe però risultare un pò criptica per chi non sa come comprenderli, quindi vediamo adesso il significato dell'output di questo comando.
Un esempio del suo uso è il seguente
$ ls -l
totale 124
-rw-r--r-- 1 antonio antonio 1004 2009-09-12 11:54 doc.dvi
-rw-r--r-- 1 antonio antonio 557 2009-09-14 16:40 doc.tex
-rw-r--r-- 1 antonio antonio 490 2009-09-14 16:40 doc.tex~
drwxr-xr-x 6 antonio antonio 4096 2009-09-14 16:54 Documenti
-rw-r--r-- 1 antonio antonio 357 2009-09-12 03:26 examples.desktop
-rw-r--r-- 1 antonio antonio 0 2009-09-14 17:33 harder_better_faster_stronger.mp3
drwxr-xr-x 2 antonio antonio 4096 2009-09-12 03:29 Immagini
-rw-r--r-- 1 antonio antonio 7224 2009-09-12 03:49 latex_blog.txt~
-rw-r--r-- 1 antonio antonio 3507 2009-09-14 16:41 listing.sty
drwxr-xr-x 2 antonio antonio 4096 2009-09-12 03:29 Modelli
drwxr-xr-x 2 antonio antonio 4096 2009-09-14 17:36 Musica
drwxr-xr-x 2 antonio antonio 4096 2009-09-12 03:29 Pubblici
drwxr-xr-x 2 antonio antonio 4096 2009-09-14 00:58 Scrivania
-rw-r--r-- 1 antonio antonio 64514 2009-09-12 03:40 tux.png
drwxr-xr-x 2 antonio antonio 4096 2009-09-12 03:29 Video
La scritta totale 124 ci da informazioni su quanti files/cartelle sono presenti nella directory corrente (naturalmente il numero è inferirore agli elementi riportati in quanto include anche quelli nascosti).
Il nome dell'elemento che stiamo considerando è la prima scritta che troviamo sulla destra di ogni riga; spostandoci più a sinistra troviamo la data e l'ora dell'ultima modifica del file corrispondente, ed ancora più a sisnistra possiamo trovare il peso in byte. Le colonne con i due nomi utenti indicano il proprietario del file ed il gruppo cui il file appartiene.
Il numero presente nella penultima colonna (partendo da destra) indica quanti puntatori esistono per quel file o quanti elementi contiene quella directory.
Infine la colonna più ostica: quelle "r", "w" e "x" apparentemente messe a caso. Dividiamo questa strana parola in questo modo:
d rwx rwx rwx
Il primo carattere ci indica che tipo di elemento stiamo considerando:
  • - indica un file o un eseguibile
  • d una directory
  • l un link
  • s un Socket
  • b sta per Block Device
  • c per Character device
  • p per Named Pipe
Adesso analizziamo gli altri tre gruppi, tenendo a mente che:
  • r significa permesso di lettura (reading)
  • w permesso di scrittura (writing)
  • x permesso di esecuzione (executable.... o na cosa del genere :P)
  • - indica la mancanza di quel permesso
La prima parte indica i permessi del proprietario del file, la seconda i permessi del gruppo di appartenenza e la terza i permessi per gli altri utenti. Ricapitolando:
Tipo Proprietario Gruppo Utenti
Per chiarire facciamo un esempio, prendiamo la cartella Musica, la sua riga è
drwxr-xr-x
che possiamo dividere come
d rwx r-x r-x
Adesso, la prima d ci indica che è una directory, il primo rwx significa che il proprietario ha permessi di scrittura, lettura e esecuzione; il secondo r-x significa che il gruppo ha permessi di lettura e esecuzione, ma non di scrittura (manca la w sostituita da -); infine il terzo r-x significa che gli altri utenti hanno permessi di lettura e esecuzione, ma non di scrittura


Ordinare per data o estensione.

Se vogliamo ordinare i risultati secondo data e ora dell'ultima modifica, l'opzione da dare è -t (--time).
Se invece preferiamo ordinare i contenuti per estensione l'opzione che dobbiamo includere è -X, come nell'esempio
$ ls -X
Documenti Pubblici doc.dvi doc.tex
Immagini Scrivania harder_better_faster_stronger.mp3 doc.tex~
Modelli Video tux.png latex_blog.txt~
Musica examples.desktop listing.sty

That's all folks

Il comando ls ha ancora molte chicche, che potete naturalmente scoprire tramite l'onnipresente --help. Per ora è tutto gente, alla prossima!

| edit post

2 Reply to "Si fa presto a dire "ls""

  • Corsair on 15 settembre 2009 alle ore 05:35

    "La scritta totale 124 ci da informazioni su quanti files/cartelle sono presenti nelal directory corrente"

    Occhio!! per il resto, complimenti ottima guida!

     

    Mispy on 15 settembre 2009 alle ore 08:16

    Sorry per l'errore grammaticale :P Provvedo subito a rettificare... e grazie per i complimenti!

     
  • Posta un commento

    Se ti è piaciuto l'articolo, o hai domande, lascia qui un commento! Se invece vuoi essere sempre aggiornato sulle novità del blog collegati ai Feed RSS.