GNU/Linux >> Linux Esercitazione >  >> Linux

Comprendere le basi di UNIX / Linux Inodes con esempi

Diversi paesi forniscono un numero di identificazione univoco (ad esempio il numero di previdenza sociale negli Stati Uniti) alle persone che vivono in quel paese. Questo rende più facile identificare un individuo in modo univoco. Ciò semplifica la gestione di tutte le pratiche burocratiche necessarie per un individuo da parte di varie agenzie governative e istituzioni finanziarie.

Simile al numero di previdenza sociale, esiste un concetto di numeri Inode che esistono in modo univoco per tutti i file su sistemi Linux o *nix.

Nozioni di base sugli inode

Un numero di Inode punta a un Inode. Un Inode è una struttura di dati che memorizza le seguenti informazioni su un file:

  • Dimensione del file
  • ID dispositivo
  • ID utente del file
  • ID gruppo del file
  • Le informazioni sulla modalità file e i privilegi di accesso per proprietario, gruppo e altri
  • Flag di protezione dei file
  • I timestamp per la creazione, la modifica dei file, ecc.
  • contatore link per determinare il numero di collegamenti reali
  • Puntatori ai blocchi che memorizzano il contenuto del file

Si prega di notare che l'elenco di cui sopra non è esaustivo. Inoltre, il nome del file non è memorizzato in Inodes (ci parleremo più avanti).

Quando un file viene creato all'interno di una directory, al file vengono assegnati il ​​nome del file e il numero di Inode. Queste due voci sono associate a ogni file in una directory. L'utente potrebbe pensare che la directory contenga il file completo e tutte le informazioni aggiuntive ad esso correlate, ma potrebbe non essere sempre così. Quindi vediamo che una directory associa un nome di file al suo numero di Inode.

Quando un utente tenta di accedere al file oa qualsiasi informazione relativa al file, utilizza il nome del file per farlo, ma internamente il nome del file viene prima mappato con il suo numero di Inode memorizzato in una tabella. Quindi attraverso quel numero di Inode si accede all'Inode corrispondente. Esiste una tabella (tabella Inode) in cui viene fornita questa mappatura dei numeri di Inode con i rispettivi Inode.

Perché nessun nome file nelle informazioni Inode?

Come sottolineato in precedenza, non c'è una voce per il nome del file nell'Inode, piuttosto il nome del file viene mantenuto come una voce separata parallela al numero dell'Inode. Il motivo per separare il nome del file dalle altre informazioni relative allo stesso file è per mantenere i collegamenti fisici ai file. Ciò significa che una volta che tutte le altre informazioni sono state separate dal nome del file, possiamo avere vari nomi di file che puntano allo stesso Inode.

Ad esempio :

$ touch a

$ ln a a1

$ ls -al
drwxr-xr-x 48 himanshu himanshu 4096 2012-01-14 16:30 .
drwxr-xr-x 3 root root 4096 2011-03-12 06:24 ..
-rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a
-rw-r--r-- 2 himanshu family 0 2012-01-14 16:29 a1

Nell'output sopra, abbiamo creato un file "a" e quindi un collegamento fisico a1. Ora, quando viene eseguito il comando 'ls -al', possiamo vedere i dettagli sia di 'a' che di 'a1'. Vediamo che entrambi i file sono indistinguibili. Guarda la seconda voce nell'output. Questa voce specifica il numero di collegamenti reali al file. In questo caso la voce ha valore '2' per entrambi i file.

Nota che gli hard link non possono essere creati su file system diversi e inoltre non possono essere creati per le directory.

Quando vengono creati gli Inode?

Come ormai tutti sappiamo, Inode è una struttura dati che contiene le informazioni di un file. Poiché le strutture di dati occupano spazio di archiviazione, sorge una domanda ovvia su quando gli Inode vengono creati in un sistema? Bene, lo spazio per Inodes viene allocato quando viene installato il sistema operativo o un nuovo file system e quando esegue la sua strutturazione iniziale. Quindi in questo modo possiamo vedere che in un file system viene impostato il numero massimo di Inode e quindi il numero massimo di file.

Ora, il concetto di cui sopra fa emergere un altro fatto interessante. Un file system può esaurire lo spazio in due modi:

  • Non è rimasto spazio per aggiungere nuovi dati
  • Tutti gli Inode vengono consumati.

Bene, il primo modo è abbastanza ovvio, ma dobbiamo guardare al secondo modo. Sì, è possibile che si verifichi un caso in cui abbiamo spazio di archiviazione libero ma non possiamo ancora aggiungere nuovi dati nel file system perché tutti gli Inode sono consumati. Ciò può verificarsi nel caso in cui il file system contenga un numero molto elevato di file di dimensioni molto ridotte. Ciò consumerà tutti gli Inode e sebbene ci sia spazio libero dal punto di vista dell'unità disco rigido, ma dal punto di vista del file system nessun Inode disponibile per archiviare nuovi file.

Il caso d'uso di cui sopra è possibile ma meno riscontrato perché su un sistema tipico la dimensione media del file è superiore a 2 KB, il che lo rende più incline a esaurire prima lo spazio sul disco rigido. Tuttavia, esiste un algoritmo che viene utilizzato per creare il numero di Inode in un file system. Questo algoritmo prende in considerazione la dimensione del file system e la dimensione media del file. L'utente può modificare il numero di Inode durante la creazione del file system.

Comandi per accedere ai numeri di Inode

Di seguito sono riportati alcuni comandi per accedere ai numeri di Inode per i file:

1) Comando Ls -i

Come spiegato in precedenza nel nostro articolo Unix LS Command:15 Practical Examples, il flag -i viene utilizzato per stampare il numero di Inode per ogni file.

$ ls -i
1448240 a 1441807 Desktop 1447344 mydata 1441813 Pictures 1442737 testfile 1448145 worm
1448240 a1 1441811 Documents 1442707 my_ls 1442445 practice 1442739 test.py
1447139 alpha 1441808 Downloads 1447278 my_ls_alpha.c 1441810 Public 1447099 Unsaved Document 1
1447478 article_function_pointer.txt 1575132 google 1447274 my_ls.c 1441809 Templates 1441814 Videos
1442390 chmodOctal.txt 1441812 Music 1442363 output.log 1448800 testdisk.log 1575133 vlc

Nota che il numero di Inode per 'a' e 'a1' è lo stesso che abbiamo creato 'a1' come hard link.

2) Comando Df -i

Il comando df -i mostra le informazioni sull'inode del file system.

$ df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            1875968  293264 1582704   16% /
none                  210613     764  209849    1% /dev
none                  213415       9  213406    1% /dev/shm
none                  213415      63  213352    1% /var/run
none                  213415       1  213414    1% /var/lock
/dev/sda2            7643136  156663 7486473    3% /home

Il flag -i viene utilizzato per visualizzare le informazioni sull'inode.

3) Comando Statistico

Il comando Stat viene utilizzato per visualizzare le statistiche sui file che mostrano anche il numero di inode di un file

$ stat a
File: `a'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 1448240 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 1000/himanshu) Gid: ( 1001/ family)
Access: 2012-01-14 16:30:04.871719357 +0530
Modify: 2012-01-14 16:29:50.918267873 +0530
Change: 2012-01-14 16:30:03.858251514 +0530

Esempio di scenario di utilizzo di un numero di inode

  1. Supponiamo che esista un nome file con qualche carattere speciale al suo interno. Ad esempio: "ab*
  2. Cerca di rimuoverlo normalmente usando il comando rm, non sarai in grado di rimuoverlo.
  3. Tuttavia, utilizzando il numero di inode di questo file puoi rimuoverlo.

Vediamo questi passaggi in questo esempio:

1) Verifica se il file esiste:

$ ls -i
1448240 a 1447274 my_ls.c
1448240 a1 1442363 output.log
1448239 "ab* 1441813 Pictures
1447139 alpha

Quindi abbiamo un file con nome “ab* in questa directory

2) Prova a rimuoverlo normalmente:

$ rm "ab*
> ^C
$ rm "ab*
> ^C
$

Vedi che ho provato un paio di volte a rimuovere il file ma non ci sono riuscito.

3) Rimuovere il file utilizzando il numero Inode:

Come discusso in precedenza nel nostro articolo sugli esempi di comando trova, puoi cercare un file utilizzando il numero di inode ed eliminarlo.

$ find . -inum 1448239 -exec rm -i {} \;
rm: remove regular empty file `./"ab*'? y
$ ls -i
1448240 a 1447274 my_ls.c
1448240 a1 1442363 output.log
1447139 alpha 1441813 Pictures

Quindi abbiamo usato il comando find specificando il numero di Inode del file che dobbiamo eliminare. Il file è stato cancellato. Anche se avremmo potuto eliminare il file altrimenti anche usando il comando rm \”ab* invece di usare il complicato esempio di comando trova sopra, ma l'ho comunque usato per dimostrare uno degli usi dei numeri di Inode per gli utenti.


Linux
  1. 10 Comando rapido di coda di Linux con esempi

  2. Ordina il comando in Linux con esempi

  3. Oltre 10 comandi VI Linux con esempi

  4. comando chattr in Linux con esempi

  5. esempi di comandi tail in UNIX/Linux

Timestamp dei file Linux spiegati con esempi

Utilizzo del comando Linux mv con esempi

Cosa sono gli inode in Linux?

Comando di montaggio Linux con esempi

Comando gawk Linux con esempi

Linux make Command con esempi