## 9.24. Finding the (Hard) Links to a File

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.