Introduzione

stat è un'utilità della riga di comando che visualizza informazioni dettagliate su determinati file o file system.

Questo articolo spiega come usare il stat comando su Linux.

Usando il comando Stat

La sintassi per il comando stat è la seguente:

stat [OPTION]... FILE...

stat accetta uno o più nomi FILE di input e include una serie di opzioni che controllano il comportamento e l'output del comando.

Diamo un'occhiata al seguente esempio:

stat mylog.log

L'output sarà simile al seguente:

  File: mylog.log
  Size: 1239291         Blocks: 2424       IO Block: 512    regular file
Device: 2h/2d   Inode: 24769797950641873  Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   piero)   Gid: ( 1000/   piero)
Access: 2019-09-28 20:01:33.130738600 +0200
Modify: 2019-08-08 03:04:23.000000000 +0200
Change: 2019-09-28 20:01:33.143704400 +0200
 Birth: -

Quando viene richiamato senza alcuna opzione, vengono visualizzate le seguenti informazioni sul file:

  • File: il nome del file.
  • Dimensione: la dimensione del file in byte.
  • Blocchi: il numero di blocchi allocati acquisiti dal file.
  • IO Block - La dimensione in byte di ogni blocco.
  • Tipo di file - (es. File normale, directory, collegamento simbolico ...)
  • Dispositivo: numero del dispositivo in esadecimale e decimale.
  • Inode: numero di nodo.
  • Collegamenti: numero di collegamenti reali.
  • Accesso: autorizzazioni per i file nei metodi numerici e simbolici.
  • Uid: ID utente e nome del proprietario .
  • Gid: ID gruppo e nome del proprietario.
  • Contesto - Il contesto di sicurezza SELinux.
  • Accesso: l'ultima volta che è stato effettuato l'accesso al file.
  • Modifica: l'ultima volta che è stato modificato il contenuto del file.
  • Modifica: l'ultima volta che è stato modificato l'attributo o il contenuto del file.
  • Nascita: tempo di creazione del file (non supportato in Linux).

Visualizzazione delle informazioni sul file system

Per ottenere informazioni sul file system in cui risiede il file specificato, anziché le informazioni sul file stesso, utilizzare l' opzione -f, ( --file-system):

stat -f mylog.log

L'output del comando sarà simile al seguente:

  File: "mylog.log"
    ID: 100000000 Namelen: 255     Type: wslfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 60884223   Free: 40801995   Available: 40801995
Inodes: Total: 999        Free: 1000000

Quando statviene richiamato con l' opzione -f, mostra le seguenti informazioni:

  • File: il nome del file.
  • ID: ID file system in esadecimale.
  • Namelen - Lunghezza massima dei nomi dei file.
  • Dimensione del blocco fondamentale: la dimensione di ciascun blocco nel file system.
  • Blocchi: - Totale - numero di blocchi totali nel file system. Libero - Numero di blocchi liberi nel file system. Disponibile: numero di blocchi gratuiti disponibili per utenti non root.
  • Inodes: Totale - Numero di inode totali nel file system. Free - Numero di inode gratuiti nel file system.

Per impostazione predefinita, stat non segue i collegamenti simbolici . Se si esegue il comando su un collegamento simbolico, l'output includerà informazioni sul collegamento simbolico, non sul file a cui punta:

stat /etc/resolv.conf
  File: /etc/resolv.conf -> ../run/resolvconf/resolv.conf
  Size: 29              Blocks: 0          IO Block: 512    symbolic link
Device: 2h/2d   Inode: 562949953739123  Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-08-01 22:25:40.458719400 +0200
Modify: 2019-08-01 22:25:40.458719400 +0200
Change: 2019-08-01 22:25:40.458719400 +0200
 Birth: -

Per dereferenziare (seguire) il collegamento simbolico e visualizzare le informazioni sul file a cui punta il collegamento simbolico, utilizzare l' opzione -L, ( --dereference):

stat -L /etc/resolv.conf
  File: /etc/resolv.conf
  Size: 195             Blocks: 0          IO Block: 512    regular file
Device: 7h/7d   Inode: 1970324837678224  Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-11-07 23:52:30.624839800 +0100
Modify: 2019-11-07 23:52:30.640820100 +0100
Change: 2019-11-07 23:52:30.640820100 +0100
 Birth: -

Personalizzazione dell'output

Il comando stat ha due opzioni che ti consentono di personalizzare l'output in base alle tue esigenze:, -c( --format="format") e --printf="format".

La differenza tra queste due opzioni è che quando due o più file vengono utilizzati come operatori --format aggiunge automaticamente una nuova riga dopo l'output di ciascun operando. L'opzione --printf interpreta i backslash.

Esistono molte direttive di formato per file e file system che possono essere utilizzate con --format e --printf.

Ad esempio, per visualizzare solo il tipo di file utilizzare:

stat --format="%F" /dev/null
character special file

È possibile combinare un numero qualsiasi di direttive di formattazione e facoltativamente utilizzare separatori personalizzati tra di loro. Il separatore può essere un singolo carattere o una stringa:

stat --format="%n,%F" /dev/null
/dev/null,character special file

Per interpretare caratteri speciali come newline o tab, usa l'opzione --printf:

stat --printf='Name: %n\nPermissions: %a\n' /etc

\n stampa una nuova linea:

Name: /etc
Permissions: 755

stat può anche visualizzare le informazioni in forma di terse. Questo formato è utile per l'analisi da parte di altre utilità.

Richiamare il comando con l' opzione -t( --terse) per stampare l'output in forma concisa:

stat -t /etc
/etc 512 0 41ed 0 0 2 562949953701446 1 0 0 1558449784 1573167150 1573167150 0 512

Per un elenco completo di tutte le direttive di formato per i tipi di file e file system utilizzare i comandi man stat o stat --help nel terminale.

Conclusione

Il comando stat stampa informazioni su determinati file e file system.

In Linux, ci sono molti altri comandi che possono visualizzare informazioni su determinati file, ls è il più usato, ma mostra solo una parte delle informazioni fornite dal comando stat.