Here is how to find hard links, as well as a brief look at the Unix filesystem from the user's viewpoint. Suppose you are given the following:
% ls -li /usr/bin/at 8041 -r-sr-xr-x 4 root wheel 19540 Apr 21 2001 /usr/bin/at*
In other words, there are four links, and /usr/bin/at is one of four names for inode 8041. You can find the full names of the other three links by using find. However, just knowing the inode number does not tell you everything. In particular, inode numbers are only unique to a given filesystem. If you do a find / -inum 8041 -print, you may find more than four files, if inode 8041 is also on another filesystem. So how do you tell which ones refer to the same file as /usr/bin/at?
The simplest way is to figure out the filesystem on which /usr/bin/at lives by using df:
% df /usr/bin/at Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1f 3360437 1644024 1447579 53% /usr
Then start your find at the top of that filesystem, and use -xdev to tell it not to search into other filesystems:
% find /usr -xdev -inum 8041 -print /usr/bin/at /usr/bin/atq /usr/bin/atrm /usr/bin/batch
Some manpages list -x as an alternative to -xdev; -xdev is generally more portable.
--DJPH and CT
Copyright © 2003 O'Reilly & Associates. All rights reserved.