Nei sistemi operativi Unix-like (Linux, macOS, BSD), il comando ls (list) rappresenta lo strumento fondamentale per l’esplorazione del file system. Nonostante la sua apparente semplicità, la sua versatilità lo rende indispensabile sia per compiti di amministrazione quotidiana che per l’automazione tramite script complessi.
Il comando ls interagisce con le chiamate di sistema per leggere il contenuto delle directory e restituire i metadati associati a file e cartelle. Vediamo la sintassi standard
ls [OPZIONI] [PERCORSO]e approfondiamo con alcuni esempi le potenzialità del comando.
Visualizzazione dettagliata (Long Format)
L’opzione -l è lo standard per l’analisi dei permessi e delle proprietà
ls -l
total 18304
[...]
-rw------- 1 root root 125046 Jan 10 23:59 cron-20260111
-rw------- 1 root root 123955 Jan 17 23:59 cron-20260118
-rw-r--r-- 1 root root 491235 Jan 24 00:45 dnf.librepo.log
-rw-r--r-- 1 root root 1048470 Jan 1 20:59 dnf.librepo.log.1
-rw-r--r-- 1 root root 1048477 Nov 15 14:25 dnf.librepo.log.2
[...]L’output restituirà sette colonne: i permessi (es. -rw-r–r–), il numero di link, il proprietario, il gruppo, la dimensione in byte, la data di modifica e il nome.
Visualizzare i file nascosti e dimensioni leggibili
Per visualizzare i file nascosti (che iniziano con .) e ottenere dimensioni in KB o MB
ls -lah
total 19M
drwxr-xr-x. 11 root root 4.0K Jan 20 07:23 .
drwxr-xr-x. 21 root root 4.0K Dec 12 2024 ..
-rw------- 1 root root 123K Jan 10 23:59 cron-20260111
-rw------- 1 root root 122K Jan 17 23:59 cron-20260118
-rw-r--r-- 1 root root 480K Jan 24 00:45 dnf.librepo.log
-rw-r--r-- 1 root root 1.0M Jan 1 20:59 dnf.librepo.log.1
-rw-r--r-- 1 root root 1.0M Nov 15 14:25 dnf.librepo.log.2dove -a mostra tutto il contenuto (inclusi . e ..) mentre -h converte i byte in formato leggibile dall’uomo (Human-readable)
Visualizzare i file ordinati per data o dimensione
In contesti di troubleshooting, è spesso necessario identificare gli ultimi file modificati (es. file di log) o i file più pesanti che saturano il disco
ls -ltpermette di visualizzare i file ordinati per data visualizzando i file partendo dal più recente
ls -ltrAggiungendo r, i file più recenti appariranno in fondo alla lista, posizione ideale per terminali con output lungo
Tramite il comando
ls -lSpossiamo ordine i file per dimensione partendo dal più grande al più piccolo. Anche in questo caso aggiungendo r possiamo invertire l’ordinamento.
Visualizzare i file in modo ricorsivo
Il seguente comando è utilizzato per eseguire una visualizzazione ricorsiva
ls -R
.:
ProgettoA
ProgettoB
./ProgettoA:
codice.py
docs
./ProgettoA/docs:
README.md
./ProgettoB:
dati.csvil comando non si limita a mostrare il contenuto della directory corrente, ma entra in ogni singola sottodirectory e nelle loro sottodirectory e così via, listando l’intero albero di file e cartelle a partire dal punto in cui ci si trova
Utilizzo delle Wildcards
L’uso delle wildcards è una funzionalità della shell che espande i pattern prima che il comando ls venga eseguito
- * (Asterisco): rappresenta più caratteri di qualsiasi tipo
- ls *.pdf: visualizza tutti i file pdf
- ls a*b: visualizza i file che iniziano con ‘a’ e finiscono con ‘b’
- ? (Punto interrogativo): rappresenta esattamente un solo carattere
- ls file?.txt: visualizza i file con nome file1.txt, fileA.txt, ma non file10.txt
- [ ] (Parentesi quadre): rappresenta un set di caratteri o un intervallo
- ls [abc]*: visualizza i file che iniziano con a, b o c
- ls [0-9]*: visualizza i file che iniziano con un numero
Se ad esempio vogliamo visualizzare file che hanno come schema ” TST + due lettere + due numeri + estensione .log ” il comando corretto è
ls -l TST[a-zA-Z][a-zA-Z][0-9][0-9].logInserendo il carattere ! all’interno delle quadre vengono esclusi determinati caratteri
- ls [!0-9]*: visualizza tutti i file che non iniziano con un numero
- ls .[!txt]: visualizza file che non hanno estensione .txt
A differenza delle wildcards classiche, le graffe non cercano file esistenti, ma generano stringhe. Sono utilissime per combinare ricerche
- ls *.{jpg,png,gif}: elenca tutti i file che sono immagini di questi tre tipi
- ls Progetto_{A,B,C}_v[0-9].log: cerca versioni specifiche per i tre progetti (A, B o C)
Visualizzare gli inode
Ogni file su un file system *nix ha un numero identificativo unico chiamato inode. È fondamentale per diagnosticare problemi di file system o identificare “hard link”
ls -li
[...]
134219791 -rw------- 1 root root 125046 Jan 10 23:59 cron-20260111
134219810 -rw------- 1 root root 123955 Jan 17 23:59 cron-20260118
134219799 -rw-r--r-- 1 root root 491235 Jan 24 00:45 dnf.librepo.log
134219470 -rw-r--r-- 1 root root 1048470 Jan 1 20:59 dnf.librepo.log.1
134219734 -rw-r--r-- 1 root root 1048477 Nov 15 14:25 dnf.librepo.log.2
[...]l’opzione -i mostra l’indice dell’inode nella prima colonna.
Visualizzare i file escludendo pattern specifici
È possibile utilizzare ls facendo in modo che nasconda determinati file che corrispondono a un pattern
ls --hide="*.tmp" --hide="*.bak"visualizzando tutti i file presenti nella directory tranne quelli con estensione tmp o bak
Visualizzazione del contesto di sicurezza SELinux
Sui sistemi Linux dove è presente SELinux è possibile vedere il contesto di sicurezza
ls -lZ
[...]
-rw------- 1 root root ? 195 Oct 30 16:32 vmware-network.9.log
-rw------- 1 root root ? 195 Nov 14 11:24 vmware-network.log
-rw-------. 1 root root system_u:object_r:vmware_log_t:s0 124466 Jan 24 00:25 vmware-vgauthsvc.log.0
-rw-------. 1 root root system_u:object_r:vmware_log_t:s0 222363 Jan 24 00:25 vmware-vmsvc-root.log
-rw-------. 1 root root system_u:object_r:vmware_log_t:s0 52058 Jan 23 23:25 vmware-vmtoolsd-root.log
[...]mostrando l’etichetta di sicurezza (utente, ruolo, tipo e livello) associata a ogni file
Ordinamento per estensione
Se si ha una cartella con molti file con varie estensioni e si vuole raggrupparli per tipo
ls -lX
[...]
-rw-r--r-- 1 root root 0 Jan 24 02:14 g.csv
-rw-r--r-- 1 root root 0 Jan 24 02:14 h.csv
-rw-r--r-- 1 root root 0 Jan 24 02:12 c.log
-rw-r--r-- 1 root root 0 Jan 24 02:12 d.log
-rw-r--r-- 1 root root 0 Jan 24 02:12 e.tmp
-rw-r--r-- 1 root root 0 Jan 24 02:12 f.tmp
-rw-r--r-- 1 root root 0 Jan 24 02:12 a.txt
-rw-r--r-- 1 root root 0 Jan 24 02:12 b.txt
[...]il parametro -X ordina i file alfabeticamente in base all’estensione
Gestione dei file con spazi
Se occorre passare l’output del comando ls a un altro comando, i nomi con spazi possono creare problemi.
ls -lQ
[...]
-rw------- 1 root root 125046 Jan 10 23:59 "cron-20260111"
-rw------- 1 root root 123955 Jan 17 23:59 "cron-20260118"
-rw-r--r-- 1 root root 491467 Jan 24 02:07 "dnf.librepo.log"
-rw-r--r-- 1 root root 1048470 Jan 1 20:59 "dnf.librepo.log.1"
-rw-r--r-- 1 root root 1048477 Nov 15 14:25 "dnf.librepo.log.2"
[...]il parametro -Q inserisce i nomi tra virgolette doppie, permettendo ad altri comandi di trattarli come argomenti singoli anche se contengono spazi. Ad esempio
ls -Q | xargs -n 1 cp -v --target-directory=/backup/è una pipeline utilizzata per copiare file in modo sicuro, gestendo nomi con spazi o caratteri speciali eseguendo il comando cp una volta per ogni singolo file
Trovare i file più grandi in una directory
Per trovare i file più grandi in una directory e visualizzarli con dettagli in una singola riga
ls -lSh | head -n 6
total 19M
-rw------- 1 root root 1.6M Jan 3 23:59 messages-20260104
-rw------- 1 root root 1.5M Jan 11 00:00 messages-20260111
-rw------- 1 root root 1.4M Dec 28 00:00 messages-20251228
-rw------- 1 root root 1.3M Jan 17 23:59 messages-20260118
-rw------- 1 root root 1.3M Jan 24 02:29 messages
[...]L’uso di head -n 6 include la riga “total” prodotta da ls e i primi 5 file ordinati per dimensione
Conclusione
Nonostante l’evoluzione delle interfacce grafiche, il comando ls rimane molto importante. La sua capacità di interagire direttamente con il kernel per estrarre metadati lo rende molto più di un semplice visualizzatore di file: è uno strumento di diagnostica, sicurezza e automazione.
