bitlvl
IT

Spiegazione di ls -l e stat

Incolla una o più righe di ls -l, o l’output di stat file. Ogni colonna viene nominata e decodificata, compresi i marcatori che la maggior parte delle persone ignora.

I risultati e i messaggi di questo strumento sono mostrati in inglese.

Leggere ls -l

-rwxr-xr-x. 1 root root 4096 Oct 18 12:00 script.sh
│└┬┘└┬┘└┬┘│ │  │    │    │    └────┬────┘ └───┬───┘
│ │  │  │ │ │  │    │    │         │          └ nome (e -> destinazione per i symlink)
│ │  │  │ │ │  │    │    │         └ ora di modifica (anno mostrato se più vecchia di 6 mesi)
│ │  │  │ │ │  │    │    └ dimensione in byte (o major, minor per i dispositivi)
│ │  │  │ │ │  │    └ gruppo
│ │  │  │ │ │  └ proprietario
│ │  │  │ │ └ numero di hard link
│ │  │  │ └ . = contesto SELinux, + = ACL, @ = attributi estesi (macOS)
│ │  │  └ altri: r-x
│ │  └ gruppo: r-x
│ └ proprietario: rwx
└ tipo: - file, d directory, l symlink, c dispositivo a caratteri, b dispositivo a blocchi, p pipe, s socket

Cose che confondono

  • Numero di link: quante voci di directory puntano all’inode. Per una directory è 2 più il numero di sottodirectory, perché il .. di ogni sottodirectory conta. Un file con conteggio 3 ha altri due hard link da qualche parte.
  • Dimensione di una directory: la dimensione del suo elenco di voci (4096 su ext4), non il totale del contenuto. Per quello usa du -sh.
  • s, S, t, T nella stringa dei permessi sono i bit setuid, setgid e sticky; la minuscola significa che anche il bit di esecuzione sottostante è impostato, la maiuscola che non lo è (di solito un errore).
  • I permessi dei symlink sono sempre lrwxrwxrwx e vengono ignorati; contano quelli della destinazione.
  • Tempi: ls mostra mtime (contenuto modificato). stat mostra anche atime (ultima lettura, spesso disabilitata da noatime), ctime (inode modificato: chmod, chown, rename) e l’ora di creazione sui filesystem che la conservano.

stat

stat file stampa tutto ciò che contiene l’inode: il modo in forma ottale e simbolica, uid/gid con i nomi, numero di inode, dispositivo, numero di blocchi (in unità da 512 byte, quindi un file sparso mostra meno blocchi di quanti la sua dimensione richiederebbe) e i quattro timestamp. stat -c '%a %U %G %n' * stampa solo ciò che chiedi; stat -f descrive invece il filesystem.

Domande

Cosa significa il punto alla fine dei permessi?

Sul file è impostato un contesto di sicurezza SELinux (si vede su Fedora, RHEL, CentOS). ls -Z lo mostra. Un + invece significa che è presente una access control list; getfacl la mostra.

Perché una directory ha numero di link 2?

La sua voce nel padre più la sua voce «.». Ogni sottodirectory ne aggiunge una tramite il suo «..». Quindi una directory con numero di link 7 ha cinque sottodirectory.

Che differenza c’è tra mtime e ctime?

mtime cambia quando cambia il contenuto; ctime cambia quando cambia l’inode (contenuto, permessi, proprietario, numero di link). Non puoi impostare ctime con touch, il che lo rende utile per l’analisi forense.

Come vedo i file nascosti e le dimensioni in unità leggibili?

ls -lah: -a mostra i dotfile, -h stampa le dimensioni come K, M, G. Aggiungi -t per ordinare per data e -r per invertire.