simple ln question

fredex fredex at fcshome.stoneham.ma.us
Sat Aug 25 22:56:51 UTC 2007


On Sat, Aug 25, 2007 at 09:26:46PM +0000, tony.chamberlain at lemko.com wrote:
> I have a script that occasionally does something like this
> 
>  ln file1 file2
> 
> that makes it so the contents of file1 are the same as of file2, and if you change the contents of 1, the other
> changes accordingly.

No, that's not what it does. What it does is makes TWO directory entries
both pointing to the same file. There is ONLY ONE FILE. So obviously when
you change the file it is changed regardless of which directory entry you
use to access it, again: because there is only one file.

> 
> I can slo do this
> 
>  ln -s file1 files
> 
> which is somewhat similar, but of course works over file systems and file2 is really just a symbolic link to file1.

Right. Again, there is only one file. While symbolic (aka soft) links are
not the same as "hard" links, the fact remains that there is only one
file even though there are multiple ways to access it.

> 
> Anyway, sometimes I want to undo what I did, but I can't say
> 
>  unlink file2

In the case of a hard link (your first example) you can remove either file1
or file2 and all it does is remove the extra directory entry that points
to that file. The file is untouched.

With the symbolic link, one of the items is the real file, and the other
is an "indirection" that points to it. You can remove the indirection
(i.e., the soft link) and the file remains. But if you remove the file
then the link, which remains, is a "dangling" link, i.e., the thing it
points to has gone missing.

> 
> because that will remove file2. I just want it , so that the files are still the same but if I change one, the other will
> not change (i.e., inodes are different but diff shows no differences). I can't see any flags for ln. Anyone have
> any idea? I know it can be fudged like
> 
>  sed -i 's/ / /g' file1
> 
> but this is kind of fudging, and it may not work on binary files.

If you want two copies of a file, such that you could modify one with
modifying the other, then you need to copy the original (man cp), not
link it. That's not what ln is for.

> 
> another question. If you have a file FILE1 can you find everything that is linked
> to it? say you have 
> 
>  ln -s /this/is/filesystem/1/FILE1 /filesystem/2/FILE2
> 
> given FILE1 can you find FILE2? It is pretty easy the other way around (readlink FILE2) but that does


ls -i foobar

prints the inode number for the file foobar.

ls -l foobar

will print, among other things, the number of hard links to a file. once
you know which inode the file uses, you can find all files using that
inode like this:

find . -inum 231526 -exec ls -il {} \;

where (in this example) 231526 is the inode for the file in question.

> not work for FILE1. Also if "ln" instead of "ln -s" you cannot do it.
> 
> I guess you could do ls -i /this/is/filesystem/1/FILE1, get the inum and then do a 
> 
>  find / -type f -inum x # Whatever the inum is

As shown above.

-- 
---- Fred Smith -- fredex at fcshome.stoneham.ma.us -----------------------------
  "For him who is able to keep you from falling and to present you before his 
 glorious presence without fault and with great joy--to the only God our Savior
 be glory, majesty, power and authority, through Jesus Christ our Lord, before
                     all ages, now and forevermore! Amen."
----------------------------- Jude 1:24,25 (niv) -----------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.fedoraproject.org/pipermail/users/attachments/20070825/10d77146/attachment-0002.bin 


More information about the users mailing list