Inode
Inode
Inode Basics
For example :
$ touch a
$ ln a a1
$ ls -al
drwxr-xr-x
drwxr-xr-x
-rw-r--r-- 2
-rw-r--r-- 2
In the above output, we created a file a and then created a hard link a1. Now
when the command ls -al is run, we can see the details of both a and a1.
We see that both the files are indistinguishable. Look at the second entry in the
output. This entry specifies number of hard links to the file. In this case the
entry has value 2 for both the files.
Note that Hard links cannot be created on different file systems and also they
cannot be created for directories.
As we all now know that Inode is a data structure that contains information of a
file. Since data structures occupy storage then an obvious question arises
about when the Inodes are created in a system? Well, space for Inodes is
allocated when the operating system or a new file system is installed and when
it does its initial structuring. So this way we can see that in a file system,
maximum number of Inodes and hence maximum number of files are set.
Now, the above concept brings up another interesting fact. A file system can
run out of space in two ways :
No space for adding new data is left
All the Inodes are consumed.
Well, the first way is pretty obvious but we need to look at the second way. Yes,
its possible that a case arises where we have free storage space but still we
cannot add any new data in file system because all the Inodes are consumed.
This may happen in a case where file system contains very large number of
very small sized files. This will consume all the Inodes and though there would
be free space from a Hard-disk-drive point of view but from file system point of
view no Inode available to store any new file.
The above use-case is possible but less encountered because on a typical
system the average file size is more than 2KB which makes it more prone to
running out of hard disk space first. But, nevertheless there exists an algorithm
which is used to create number of Inodes in a file system. This algorithm takes
into consideration the size of the file system and average file size. The user can
tweak the number of Inodes while creating the file system.
Following are some commands to access the Inode numbers for files :
1) Ls -i Command
$ 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
See that the Inode number for a and a1 are same as we created a1 as hard
link.
2) Df -i Command
3) Stat Command
Stat command is used to display file statistics that also displays inode number
of a 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
a 1447274 my_ls.c
a1 1442363 output.log
"ab* 1441813 Pictures
alpha
See that I tried couple of times to remove the file but could not.
3) Remove the file using Inode number:
As we discussed earlier in our find command examples article, you can search
for a file using inode number and delete it.
$ 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
So we used the find command specifying the Inode number of the file we need
to delete. The file got deleted. Though we could have deleted the file otherwise
also by using the command rm \ab* instead of using the complicated find
command example above but still I used it to demonstrate one of the use of
Inode numbers for users.
The inode (index node) is a fundamental concept in the Linux and UNIX filesystem. Each object in the
filesystem is represented by an inode. But what are the objects? Let us try to understand it in simple
words. Each and every file under Linux (and UNIX) has following attributes:
=> File type (executable, block special etc)
=> Permissions (read, write etc)
=> Owner
=> Group
=> File Size
=> File access, change and modification time (remember UNIX or Linux never stores file creation time,
this is favorite question asked in UNIX/Linux sys admin job interview)
=> File deletion time
=> Number of links (soft/hard)
=> Extended attribute such as append only or no one can delete file including root user (immutability)
=> Access Control List (ACLs)
All the above information stored in an inode. In short the inode identifies the file and its attributes (as
above) . Each inode is identified by a unique inode number within the file system. Inode is also know as
index number.
inode definition
An inode is a data structure on a traditional Unix-style file system such as UFS or ext3. An inode stores
basic information about a regular file, directory, or other file system object.
Inode application
Many commands used by system administrators in UNIX / Linux operating systems often give inode
numbers to designate a file. Let us see he practical application of inode number. Type the following
commands:
$ cd /tmp
$ touch \"la*
$ ls -l
Now try to remove file "la*
You can't, to remove files having created with control characters or characters which are unable to be
input on a keyboard or special character such as ?, * ^ etc. You have to use inode number to
remove file. This is fourth part of "Understanding UNIX/Linux file system, continue reading rest of the
Understanding Linux file system series (this is part IV):