Corso Linux / Tipi di file e metadati con ls, file, stat e readlink
In Linux il nome e l'estensione di un file non bastano a determinarne il tipo. ls -l mostra il tipo di voce e gli attributi essenziali, file esamina il contenuto per riconoscerne il formato e stat visualizza metadati come dimensione, permessi, orari e inode. Questa lezione spiega come distinguere le informazioni fornite dai diversi comandi.
Dopo aver imparato a leggere questi attributi, puoi confrontare nomi, inode e destinazioni nell'esercitazione sui collegamenti fisici e simbolici, in inglese.
Che cosa significa tipo di file in Linux
Il file system rappresenta come voci anche directory, collegamenti simbolici e dispositivi. Il primo carattere di una riga prodotta da ls -l indica il tipo della voce. Le estensioni .txt e .jpg fanno parte del nome: non forniscono la stessa informazione di questo carattere.
| Primo carattere | Tipo | Esempio |
|---|---|---|
- |
File regolare | Documento o programma eseguibile |
d |
Directory | Voce che contiene altri nomi di file |
l |
Collegamento simbolico | Voce che rimanda a un altro percorso |
c, b |
Dispositivo a caratteri o a blocchi | Voci di dispositivo in /dev |
p, s |
FIFO, cioè pipe con nome, o socket | Voci per la comunicazione tra processi |
Per esaminare la voce indicata, usa ls -ld. Se specifichi una directory con il solo ls -l, puoi ottenere l'elenco del suo contenuto invece degli attributi della directory stessa.
ls -ld /etc /etc/passwd
In un sistema Linux in cui questi percorsi esistono, la riga di /etc inizia normalmente con d e quella di /etc/passwd con -. Seguono permessi, numero di collegamenti, proprietario, gruppo, dimensione, data di modifica e nome. Valori e dettagli di visualizzazione dipendono dal sistema.
Gli esempi richiedono una shell e i comandi indicati; la formattazione di stat -c è quella GNU. Non serve sudo. Se un percorso manca o non è accessibile, leggi il messaggio di errore: puoi esaminare un file ordinario che possiedi sostituendo il percorso nei comandi, senza creare o modificare /etc/passwd.
Riconoscere il formato del contenuto con file
file controlla informazioni del file system e caratteristiche del contenuto, poi restituisce una descrizione leggibile. Per esempio, /etc/passwd può essere riconosciuto come testo anche senza un'estensione.
file /etc/passwd
Il risultato può assomigliare a questo; la descrizione effettiva dipende anche dalla codifica e dall'implementazione.
/etc/passwd: ASCII text
Si tratta di una classificazione ottenuta mediante esame, non di una certificazione infallibile del contenuto. Regole di riconoscimento diverse possono produrre descrizioni diverse. Il riconoscimento del formato non dimostra neppure che sia sicuro eseguire un file.
Per un collegamento simbolico, specifica che cosa vuoi esaminare: file -h nome-link esamina il collegamento, mentre file -L nome-link ne segue la destinazione. Nel manuale di file consultato, il comportamento predefinito dipende anche dalla variabile POSIXLY_CORRECT; le opzioni esplicite evitano questa ambiguità. Sostituisci nome-link con un collegamento realmente esistente.
Leggere i metadati con stat
stat mostra informazioni gestite dal file system, anziché il testo o gli altri dati contenuti nel file: dimensione, permessi, proprietario, numero di inode, numero di collegamenti e diversi orari. Un inode è una struttura con cui il file system gestisce i metadati di un oggetto; il nome è distinto da questa struttura. Il numero di inode va interpretato nel relativo file system, non come identificatore universale.
stat /etc/passwd
Per limitare l'output, GNU stat accetta -c seguito da una stringa di formato. Qui %F indica il tipo, %s la dimensione in byte e %n il nome.
stat -c '%F | %s bytes | %n' /etc/passwd
Il risultato occupa una riga come questa. 1234 è una dimensione inventata per illustrare il formato, non una misura del tuo file; dimensione effettiva e lingua della descrizione possono cambiare.
regular file | 1234 bytes | /etc/passwd
Il primo campo identifica un file regolare, il secondo ne esprime la dimensione in byte e l'ultimo riporta il percorso esaminato. Nel risultato completo, Access riguarda l'accesso, Modify la modifica dei dati, Change il cambiamento dello stato e Birth la creazione. Change non è la data di creazione: può cambiare anche quando vengono modificati i dati del file, oltre che i suoi attributi.
Birth può non essere disponibile attraverso il file system o lo strumento utilizzato. Anche l'aggiornamento del tempo di accesso dipende dalle condizioni del sistema: questi campi non costituiscono una cronologia completa delle operazioni svolte sul file.
Quando incontri un collegamento simbolico
Un collegamento simbolico è una voce separata che rimanda a un altro percorso. ls -l lo presenta comunemente nella forma nome-link -> destinazione. readlink nome-link stampa la stringa memorizzata nel collegamento. Se è relativa, interpretala dalla directory che contiene il collegamento, non dalla directory corrente della shell.
Per esempio, se /home/anna/link contiene documenti/appunti.txt, la destinazione si cerca relativamente a /home/anna. Questo è un esempio di interpretazione del percorso, non la dichiarazione che tali file esistano sul tuo computer.
I metadati del collegamento e quelli della sua destinazione sono distinti. GNU stat nome-link esamina normalmente il collegamento; stat -L nome-link segue la destinazione. Se questa manca, l'esame che la segue può fallire. Il solo readlink può comunque mostrare la stringa conservata in un collegamento interrotto: un percorso stampato non prova l'esistenza della destinazione.
Su un file regolare, readlink senza opzioni non restituisce una destinazione e termina senza successo; GNU può farlo senza un messaggio. La creazione dei collegamenti viene trattata nell'esercitazione dedicata.
Quale comando scegliere?
- Tipo e attributi essenziali in un elenco:
ls -l, oppurels -ldper la voce indicata. - Probabile formato del contenuto:
file. - Dimensione, orari, inode e attributi dettagliati:
stat. - Stringa della destinazione memorizzata in un collegamento:
readlink.
Trovi altri esempi nelle guide a file e al riconoscimento dei formati, a stat e alla lettura dei metadati e a readlink e alle destinazioni dei collegamenti.
Documentazione ufficiale
Il manuale di file(1) descrive le regole di riconoscimento e le opzioni per i collegamenti. I manuali GNU distribuiti da Debian per stat e i suoi campi di formato, readlink e le sue modalità e ls e le opzioni di visualizzazione specificano opzioni ed eccezioni. Consulta anche man o --help nella tua installazione quando conta il comportamento della versione effettiva.




