-   Linux - Software (
-   -   When to use hard or softlinks (

JosephS 06-18-2008 12:53 AM

When to use hard or softlinks
I would like to know the advantages of hard and symbolic links,
and when to use each.

If I make a backup of a directory, with more than 1 hard link to a file, will the contents of the file be copied more than once?
I use mostly rsync for backing up to another drive; sometimes K3b and cp to backup up some things to a cd.

Thanks for advice.

lwasserm 06-18-2008 11:22 AM

Someone may correct me here, but a hardlink points directly to a file and is indistinguishable from any other directory listing for that file. Hardlinks can only exist on the same filesystem (for most purposes equivalent to a disk partition) Say you have a file named "example" and create a hard link to it:

$ ln example examplelink

If example is, say a text file, the "file" command will report something like:

$ file example
example: ASCII text

$ file examplelink
example: ASCII text

If you "rm example", "examplelink" will still exist and refer to exactly the same file; The same data within the file is still all there and can be accessed using the name "examplelink" It can even be renamed back to the original name "example" or a new hardlink named "example" can be made.

A symbolic link (symlink) is more like an indirect pointer. It can be thought of as pointing to a directory entry for another file, rather than the file itself. A symlink can point to a file on another filesystem. If you create a symbolic link using the names above,

$ ln -s example examplelink

and then "rm example", then the file has really been removed. "examplelink" is now a broken link. If you use the "file" command now

$ file examplelink
examplelink: broken symbolic link to `example'

Trying to access the file now using "examplelink" will generate an error, since the file does not actually exist anymore.

Most of the time a symbolic link will be what is desired. There is a lot of flexiblility in using them, look up the /etc/alternatives system for an example. It is also used extensively in system startup scripts. To answer your 2nd question, yes, it would be copied twice, so could a symlink; there are options to the handle links in different ways for different copying commands.

rajwinder 06-18-2008 09:03 PM

qq .. then what is diff between hardlink and a copy ?

rajwinder 06-18-2008 09:13 PM

one i can think of is that inode will be same in case of hardlink but not in a copy

pinniped 06-18-2008 09:40 PM

A hardlink is magic - it behaves exactly like the file linked to. A file will NOT be deleted until all hardlinks are deleted. In contrast, you can delete the file which a softlink points to.

So with a hardlink you can do something like this:

mkdir orig
mkdir notorig

echo "Hello World" > orig/blahblah
ln orig/blahblah notorig/halbhalb
rm orig/blahblah

cat notorig/halbhalb
> Hello World

Try that with a soft link and you get:
> cat: notorig/halbhalb: No such file or directory

Mr. C. 06-18-2008 09:59 PM

There is no "magic" to a hardlink. Any file (a bucket of bits) my be referenced by any number of (hard) links. When the last link is removed, storage for the referenced file is removed as well, freeing up disk space.

A symbolic (aka: soft) link is a named reference to a file. When the file referenced is removed, as above, storage is freed, leaving a dangling symbolic link.

Think of (hard) links as named references to a given file in the file system, each indistinguishable from the other.
Think of symbolic links as files that *contain the name of* some other file, and the OS hides this from you the user.

Use a hard link when you want an alternate name for the same bucket of bits within the same file system.
Use a soft link when you want to refer to another file *anywhere* in the directory tree by some given name.

You cannot create hard links to directories - this creates cycles when traversing the directory tree, and was forbidden long ago.

jschiwal 06-18-2008 11:02 PM

A directory entry contains the file name and a link to the inode structure for the file. A hard link creates another directory entry. The first directory entry is also a link. In other words, hard link <=> directory entry.

Create a hard link to a file and look at "ls -l". One of the fields is the number of links to a file.
Did you ever notice that a directory has at least two links? That is because the first one is the directory entry of the parent directory. The second is the "." entry in the directory itself. Since the parent directory contains a subdirectory, it will have a link count of at least 3. One for it's own "." entry. One for it's parents directory entry. One for the subdirectories ".." entry.

Look at the inode yourself for:
cd ~/Documents
ls -ilad .

cd ~
ls -ild Documents

The inode number will be the same.

All times are GMT -5. The time now is 02:31 AM.