Command Line - File System - Linux

La gestione dei file con il comando ls

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.2

dove -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 -lt

permette di visualizzare i file ordinati per data visualizzando i file partendo dal più recente

ls -ltr

Aggiungendo r, i file più recenti appariranno in fondo alla lista, posizione ideale per terminali con output lungo

Tramite il comando

ls -lS

possiamo 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.csv

il 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].log

Inserendo 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.