Find Hard Link


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find Hard Link
# 1  
Old 06-20-2010
Find Hard Link

Goodmorning everybody.

A question:
How can i match if a file is an hard link or not?
# 2  
Old 06-20-2010
You probably need to install a program to locate duplicate file. The bottom of
freedup - Wikipedia, the free encyclopedia

has links to several utilities that locate and/or remove duplicate filenames.
# 3  
Old 06-20-2010
You can use something like this to locate files that map to the same inode:
Code:
find . -xdev -ls 2> /dev/null |
  awk 'END {
    for (I in inum) {
      if (n = split(inum[I], files, SUBSEP) > 1) {
        print "These files map to the same inode:"
        for (i = 0; i ++ <= n;)
        print files[i]
        }
      }
    }
  { 
    i = $1; sub(/[^/]*\.?\//, "./")
    inum[i] = inum[i] ? inum[i] SUBSEP $0 : $0
    }'

# 4  
Old 06-20-2010
Code:
ls -l file

The number in the second column is the number of hard links to the inode.

Last edited by Scrutinizer; 06-20-2010 at 10:49 AM..
# 5  
Old 06-20-2010
MySQL

Code:
# ./findd
Hard Links Files-> 65379 /root/test2/test2/test3/c
Hard Links Files-> 65379 /root/test2/test2/test3/b
Hard Links Files-> 65384 /root/test2/test2/test3/test4/e1
Hard Links Files-> 65384 /root/test2/test2/test3/test4/f1
Hard Links Files-> 65384 /root/test2/test2/test3/test4/a1

Code:
# cat findd
#!/bin/bash
i=0
find `pwd` -name "*" -type f -exec ls -i {} \; >> findfiles
while read file
 do
  array[i]=$file
  ((i++))
 done<findfiles
 rm -f findfiles
count=${#array[@]}
in=0  ; inx=0
while [ $(( count -=1 )) -gt -1 ]
 do
    var=0
      for val in "${array[@]}"
        do
         valinode=`echo $val|awk '{print $1}'`
         array[inode]=`echo ${array[in]}|awk '{print $1}'`
          if [[ "$valinode" == "${array[inode]}" ]] ; then
           ((var++))
          fi
        done
   if [ $var -gt 1 ] ; then
      myval[inx]=${array[in]}
   fi
((++in))
((++inx))
 done
for val1 in "${myval[@]}"
   do
     echo "Hard Links Files->" $val1
   done

Regards
ygemici
# 6  
Old 06-21-2010
In summary. Two or more files within the same filesystem with the same inode number are "hard linked".

Scrutinizer has pointed to the link count for an ordinary file in "ls -l". Value 2 or more shows hard links.

"radolouv" has the right idea by using "find -xdev" because inode numbers are only unique within a filesystem. However to find all files hard linked to a given filename the find must be from the mountpoint.

One way of testing whether a file is a "hard link" and then listing all the files with the same inode. This script contains code to find out the mountpoint containing a file under HP-UX. Will need changing for other O/S which don't have this layout of "bdf".

Code:
#!/bin/ksh
FILENAME="${1}"
if [ "${FILENAME}""X" = "X" ]
then
        echo "Usage: ${PN} filename"
        exit
fi
if [ ! -f "${FILENAME}" ]
then
        echo "${PN}: File missing: ${FILENAME}"
        exit
fi
#
# Find mountpoint containing file (HP-UX method)
DIR=`dirname "${FILENAME}"`
MOUNTPOINT=`bdf "${DIR}" | grep -v "Filesystem" | awk '{print $6}'`
#
ls -liad "${FILENAME}" | awk '{print $1,$3}' | while read INUM LINKS
do
        if [ ${LINKS} -gt 1 ]
        then
                # File is a hard link
                find "${MOUNTPOINT}" -xdev -inum ${INUM} -print | \
                while read FILENAME2
                do
                        echo "Hard link"
                        ls -liad "${FILENAME2}" 
                done
        else
                echo "Not Hard Link"
                ls -liad "${FILENAME2}" 
        fi
done

This User Gave Thanks to methyl For This Post:
# 7  
Old 06-21-2010
Also, GNU find has the -samefile option:
Code:
# touch a b c d
# ln d e
# ln d g
# find . -samefile d
./g
./e
./d

This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Creating hard link with name

How can I create a hard link to a file, then rename the hard link to a different name? (2 Replies)
Discussion started by: fhill2
2 Replies

2. UNIX for Advanced & Expert Users

Hard link a directory

Is it possible to Hard link a directory? Some people on google say it is possible and some say it is not possible. I haven't seen a working solution though. (3 Replies)
Discussion started by: cokedude
3 Replies

3. UNIX for Advanced & Expert Users

Hard Link Examples

Hello, Please move this if I chose the wrong forum category. This question pertains to Unix and Linux I believe. I google the difference between hard and symbolic/soft links and I understand the difference. What I am trying to find is a real example of a hard link being used in a Operating... (11 Replies)
Discussion started by: jaysunn
11 Replies

4. UNIX for Dummies Questions & Answers

Difference between hard link and soft link

Hi Experts, Please help me out to find out difference between a hard link and a soft link. I am new in unix plz help me with some example commands ( for creating such links). Regards S.Kamakshi :) (2 Replies)
Discussion started by: kamakshi s
2 Replies

5. UNIX for Dummies Questions & Answers

Hard Link vs SOft Link????

Hi PLease let me know the usage of Hard Link vs Soft Link i.e what is the basic difference and what happens when one file is changed or deleted in both the cases??? thanks (3 Replies)
Discussion started by: skyineyes
3 Replies

6. UNIX for Advanced & Expert Users

Hard link

Hello, In unix, the normal user can't create a hardlink for a directory. why..? Is there any difference between creating a hard link for a file and directory? The super user can create a hard link for directories. Why we cannot create and super user can create.? Please, can anyone help... (1 Reply)
Discussion started by: nagalenoj
1 Replies

7. UNIX for Dummies Questions & Answers

need some info about symbolic link and hard link

hello folks how y'all doin well i have some questions about symbolic link and hard link hope some one answer me i open terminal and join as root and i wrote ln -s blah blah then i wrote ls i see red file called blah blah but didn't understand what is this can some one explain and... (2 Replies)
Discussion started by: detective linux
2 Replies

8. UNIX for Dummies Questions & Answers

Difference between hard link and soft link in unix

Hi All, Can any one please explain me what is the difference between hard link and soft link in UNIX. Thanks in advance Raja Chokalingam. (2 Replies)
Discussion started by: RAJACHOKALINGAM
2 Replies

9. UNIX for Dummies Questions & Answers

Why use a hard link

Someone asked me a question today about the difference between a hard link and a soft link. That got me thinking and maybe someone can answer. Why would I ever use a hard link if I can use a soft link instead? (2 Replies)
Discussion started by: dangral
2 Replies

10. UNIX for Advanced & Expert Users

Differences between hard link and soft link

Hi all! I'd like to know the differences between hard links and soft links. I've already read the ln manpage, but i'm not quite sure of what i understood. Does a hard link sort of copy the file to a new name, give it the same inode number and same rights? What exactly should I do to do this:... (3 Replies)
Discussion started by: penguin-friend
3 Replies
Login or Register to Ask a Question