Hi, I know that inode for each file is unique, but is it the for the directory? So far I found different directories has the same inode nubmer when you do ls -i, could some one explain why? Thanks a lot.
A directory is essentially a file, one that is written in a very specific manner. And for all files, the only data structure that will give out complete information about the file is the inode. So, for all files there is only one inode, unless the file is a link. In that case, you have two or more files referring to the same inode.
Of course, the inode number is unique only on the filesystem where the file exists. Files across different filesystems can have the same inode number.
The directories that you saw were probably across different filesystems.
Links to directories happen a lot. Example:
$ mkdir tmp
$ cd tmp
$ mkdir a b c
$ ls -li .
total 0
278623 drwxr-xr-x 2 user users 96 May 22 07:39 a
278624 drwxr-xr-x 2 user users 96 May 22 07:39 b
278625 drwxr-xr-x 2 user users 96 May 22 07:39 c
$ ls -lid .
278622 drwxr-xr-x 5 user users 96 May 22 07:39 .
I just made this directory seconds ago, but it has 5 links. Why?
$ ls -lid ../tmp . a/.. b/.. c/..
278622 drwxr-xr-x 5 user users 96 May 22 07:39 .
278622 drwxr-xr-x 5 user users 96 May 22 07:39 ../tmp
278622 drwxr-xr-x 5 user users 96 May 22 07:39 a/..
278622 drwxr-xr-x 5 user users 96 May 22 07:39 b/..
278622 drwxr-xr-x 5 user users 96 May 22 07:39 c/..
$
However . and .. should be the only hard links to directories. The ln command will not hardlink directories. But the link() system call will if it is invoked by root. Doing this can ruin the tree structure of a filesystem.
Thank you all for replying. I understand the link to directories has the same inode number, and yes,if it is a different file system, it may have the same inode number also. But here is what I found out from Solaris 10 (SPARCS) file system . Below you would find that /usr, /usr/bin, /var/sadm all of them have the same inode nubmer 4, and they are under the same file system and no links between them...Could someone help to explain why the inode number is not unique? Thanks a lot.
rose-{5} ls -i /
22728 TT_DB/ 316 kernel/ 115 sbin/
9 bin@ 112 lib/ 120 tmp/
11104 cdrom/ 3 lost+found/ 4 usr/
2455 core 113 mnt/ 22049 usr2/
10 dev/ 11097 net/ 5 var/
1118 devices/ 8 opt/ 22035 vol/
11 etc/ 519 platform/ 22058 www/
6 export/ 114 proc/
11098 home/ 22036 root/
rose-{6} ls -i /usr/
28497 4lib/ 24146 j2se/ 116 preserve@
5047 5bin@ 3876 java@ 7511 proc/
17802 SUNWale/ 8613 jdk/ 117 pub@
3668 X@ 25 kernel/ 118 sadm/
20168 adm@ 40 kvm/ 125 sbin/
79500 apache/ 41 lib/ 3203 sfw/
102302 appserver/ 197202 local/ 161 share/
129684 aset/ 3 lost+found/ 11395 snadm/
4 bin/ 106 mail@ 201 spool@
21 ccs/ 5464 man@ 202 src@
23 demo/ 107 net/ 203 tmp@
3763 dict@ 112 news@ 28362 ucb/
7541 dt/ 141483 oasys/ 157748 ucbinclude/
24 games/ 113 old/ 28411 ucblib/
84764 gnome/ 114 openwin/ 141489 vmsys/
5640 include/ 6032 perl5/ 204 xpg4/
73687 iplanet/ 115 platform/ 73440 xpg6/
rose-{7} ls -i /var/
119 adm/ 1018 krb5/ 135 preserve/
13281 apache/ 126 ld/ 136 run/
14974 appserver/ 1443 ldap/ 4 sadm/
123 audit/ 130 log/ 137 saf/
4570 crash/ 3 lost+found/ 11664 samba/
124 cron/ 7644 lp/ 4529 sma_snmp/
7430 dmi/ 131 mail/ 7434 snmp/
28095 ds5/ 133 news/ 139 spool/
5682 dt/ 1315 nfs/ 4578 statmon/
329 fm/ 1444 nis/ 144 tmp/
11323 gnome/ 7790 ntp/ 15615 uucp/
13716 imq/ 134 opt/ 1445 yp/
125 inet/ 17832 patchsvr/
rose-{8}
I doubt that on any well-configured *nix box /usr and /var are going to be on the same filesystem. They will both be mounted under the root filesystem (here is where the various definitions of "filesystem" become blurred between physical filesystems, mounted filesystems, the root filesystem, etc)
Please post the output of df -k and cat /etc/vfstab for starters...
Cheers
ZB
/, /usr/, /var are different physical filesystems. Is it why inode number can be the same across them?...
The reason I am asking all these questions is that I want to find out if there is a way, through inode number (inode.st_ino), I can fnd out file directory path, and file name, or directory path and directory name? Any system functions that I can call to find out? Thank s a lot.
rose-qwang{1} df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c0t0d0s0 943718 703028 184067 80% /
/devices 0 0 0 0% /devices
/dev/dsk/c0t0d0s6 5040814 3163874 1826532 64% /usr
proc 0 0 0 0% /proc
mnttab 0 0 0 0% /etc/mnttab
fd 0 0 0 0% /dev/fd
/dev/dsk/c0t0d0s1 1984564 322282 1602746 17% /var
swap 3339016 88 3338928 1% /var/run
swap 3339936 1008 3338928 1% /tmp
/dev/dsk/c0t0d0s5 4737456 3429900 1260182 74% /opt
/dev/dsk/c0t1d0s0 35009161 8089514 26569556 24% /usr2
/dev/dsk/c0t0d0s7 20160418 4535470 15423344 23% /export/home
rose-qwang{2} cat /etc/vfstab
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/dsk/c0t0d0s3 - - swap - no -
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -
/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /usr ufs 1 no -
/dev/dsk/c0t0d0s1 /dev/rdsk/c0t0d0s1 /var ufs 1 no -
/dev/dsk/c0t0d0s7 /dev/rdsk/c0t0d0s7 /export/home ufs 2 yes -
/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /opt ufs 2 yes -
/devices - /devices devfs - no -
swap - /tmp tmpfs - yes -
/dev/dsk/c0t1d0s0 /dev/rdsk/c0t1d0s0 /usr2 ufs 3 yes -
Yes. bin has inode number 4 on the /usr filesystem. On /var, sadm has inode number 4 on the /var filesystem. /usr can therefore have inode number 4 on the / filesystem.
Cheers
ZB
Since directory can have same inode number under different physical file system, what about files? Can they have the same inode number across them? Thanks.
This should summarise it for you. It's for Linux so just think Solaris devices instead of /dev/hda ![]()
Edit: I should probably add the following to this. Hard links will share an inode number - soft links (unless you're soft linking across physical filesystems and are *very* lucky) will not.
Cheers
ZB
Thank you. But regardless of any soft link or hard link. I am asking
across different pysical file sytems, for our case, directories can have same inode number as we see that /var/sadmbin has inode number 4 on the /usr filesystem. On /var, sadm has inode number 4, on the /var filesystem. /usr can therefore have inode number 4. Can file have the same inode number? Again, assume, I have no hard link or soft link. So far I did not find any same inode number for files across /, /usr, and /var, but is it for all the cases? Thanks a lot.