GNU/Linux >> Tutoriales Linux >  >> Linux

Comprender los conceptos básicos de los inodos de UNIX/Linux con ejemplos

Varios países proporcionan un número de identificación único (por ejemplo, número de seguridad social en los EE. UU.) a las personas que viven en ese país. Esto hace que sea más fácil identificar a un individuo de forma única. Esto facilita el manejo de todo el papeleo necesario para un individuo por parte de varias agencias gubernamentales e instituciones financieras.

Similar al número de seguridad social, existe un concepto de números de Inode que existe únicamente para todos los archivos en los sistemas Linux o *nix.

Conceptos básicos de inodos

Un número de Inodo apunta a un Inodo. Un Inodo es una estructura de datos que almacena la siguiente información sobre un archivo:

  • Tamaño del archivo
  • ID del dispositivo
  • ID de usuario del archivo
  • ID de grupo del archivo
  • La información del modo de archivo y los privilegios de acceso para el propietario, el grupo y otros
  • Indicadores de protección de archivos
  • Las marcas de tiempo para la creación, modificación, etc. de archivos
  • contador de enlaces para determinar el número de enlaces duros
  • Puntero a los bloques que almacenan el contenido del archivo

Tenga en cuenta que la lista anterior no es exhaustiva. Además, el nombre del archivo no se almacena en Inodes (lo abordaremos más adelante).

Cuando se crea un archivo dentro de un directorio, el nombre del archivo y el número de inodo se asignan al archivo. Estas dos entradas están asociadas con cada archivo en un directorio. El usuario puede pensar que el directorio contiene el archivo completo y toda la información adicional relacionada con él, pero no siempre es así. Entonces vemos que un directorio asocia un nombre de archivo con su número de Inodo.

Cuando un usuario intenta acceder al archivo o a cualquier información relacionada con el archivo, utiliza el nombre del archivo para hacerlo, pero internamente el nombre del archivo primero se asigna con su número de Inodo almacenado en una tabla. Luego a través de ese número de Inodo se accede al Inodo correspondiente. Hay una tabla (tabla de inodos) donde se proporciona este mapeo de números de inodos con los respectivos inodos.

¿Por qué no hay nombre de archivo en la información de Inode?

Como se señaló anteriormente, no hay una entrada para el nombre de archivo en el Inodo, sino que el nombre del archivo se mantiene como una entrada separada paralela al número de Inodo. La razón para separar el nombre del archivo de la otra información relacionada con el mismo archivo es mantener vínculos físicos a los archivos. Esto significa que una vez que toda la otra información se separa del nombre del archivo, podemos tener varios nombres de archivo que apunten al mismo Inodo.

Por ejemplo:

$ 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

En el resultado anterior, creamos un archivo 'a' y luego creamos un enlace duro a1. Ahora, cuando se ejecuta el comando 'ls -al', podemos ver los detalles de 'a' y 'a1'. Vemos que ambos archivos son indistinguibles. Mire la segunda entrada en la salida. Esta entrada especifica el número de enlaces duros al archivo. En este caso, la entrada tiene el valor '2' para ambos archivos.

Tenga en cuenta que los enlaces duros no se pueden crear en diferentes sistemas de archivos y tampoco se pueden crear para directorios.

¿Cuándo se crean los Inodos?

Como todos sabemos, Inode es una estructura de datos que contiene información de un archivo. Dado que las estructuras de datos ocupan almacenamiento, surge una pregunta obvia sobre cuándo se crean los Inodos en un sistema. Bueno, el espacio para Inodes se asigna cuando se instala el sistema operativo o un nuevo sistema de archivos y cuando se realiza su estructuración inicial. Entonces, de esta manera, podemos ver que en un sistema de archivos, se establece la cantidad máxima de Inodes y, por lo tanto, la cantidad máxima de archivos.

Ahora, el concepto anterior trae a colación otro hecho interesante. Un sistema de archivos puede quedarse sin espacio de dos maneras:

  • No queda espacio para agregar nuevos datos
  • Todos los Inodos se consumen.

Bueno, la primera forma es bastante obvia, pero debemos ver la segunda forma. Sí, es posible que surja un caso en el que tengamos espacio de almacenamiento libre pero aún así no podamos agregar ningún dato nuevo en el sistema de archivos porque se consumen todos los Inodos. Esto puede suceder en el caso de que el sistema de archivos contenga una gran cantidad de archivos de tamaño muy pequeño. Esto consumirá todos los Inodos y aunque habría espacio libre desde el punto de vista de la unidad de disco duro, pero desde el punto de vista del sistema de archivos no hay ningún Inodo disponible para almacenar ningún archivo nuevo.

El caso de uso anterior es posible, pero se encuentra menos porque en un sistema típico, el tamaño de archivo promedio es de más de 2 KB, lo que lo hace más propenso a quedarse sin espacio en el disco duro primero. Pero, sin embargo, existe un algoritmo que se usa para crear una cantidad de Inodos en un sistema de archivos. Este algoritmo tiene en cuenta el tamaño del sistema de archivos y el tamaño medio de los archivos. El usuario puede modificar la cantidad de Inodos mientras crea el sistema de archivos.

Comandos para acceder a los números de Inode

Los siguientes son algunos comandos para acceder a los números de Inode para archivos:

1) Comando Ls -i

Como explicamos anteriormente en nuestro artículo Comando Unix LS:15 ejemplos prácticos, el indicador -i se usa para imprimir el número de Inodo para cada archivo.

$ 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

Vea que el número de Inodo para 'a' y 'a1' es el mismo que creamos 'a1' como enlace fijo.

2) Comando Df -i

El comando df -i muestra la información del inodo del sistema de archivos.

$ 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

La bandera -i se usa para mostrar información de Inode.

3) Comando de estadísticas

El comando Stat se usa para mostrar estadísticas de archivos que también muestran el número de inodo de un archivo

$ 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

Ejemplo de escenario de uso de un número de inodo

  1. Supongamos que existe un nombre de archivo con algún carácter especial. Por ejemplo: “ab*
  2. Intente eliminarlo normalmente usando el comando rm, no podrá eliminarlo.
  3. Sin embargo, utilizando el número de inodo de este archivo, puede eliminarlo.

Veamos estos pasos en este ejemplo:

1) Comprobar si el archivo existe:

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

Así que tenemos un archivo con el nombre "ab* en este directorio

2) Intenta eliminarlo normalmente:

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

Vea que intenté un par de veces eliminar el archivo pero no pude.

3) Eliminar el archivo usando el número de Inode:

Como discutimos anteriormente en nuestro artículo de ejemplos de comandos de búsqueda, puede buscar un archivo usando el número de inodo y 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

Así que usamos el comando de búsqueda especificando el número de Inodo del archivo que necesitamos eliminar. El archivo se borró. Aunque podríamos haber eliminado el archivo de otra manera también usando el comando rm \”ab* en lugar de usar el complicado ejemplo de comando de búsqueda anterior, pero aún así lo usé para demostrar uno de los usos de los números de Inode para los usuarios.


Linux
  1. 10 comandos de cola rápidos de Linux con ejemplos

  2. Ordenar comando en Linux con ejemplos

  3. Más de 10 comandos de Linux VI con ejemplos

  4. Comando chattr en Linux con ejemplos

  5. ejemplos de comandos tail en UNIX/Linux

Marcas de tiempo de archivos de Linux explicadas con ejemplos

Uso del comando Linux mv con ejemplos

¿Qué son los inodos en Linux?

Comando de montaje de Linux con ejemplos

Comando gawk de Linux con ejemplos

Comando make de Linux con ejemplos