Solved

symbolic link and hard link

Posted on 2009-04-09
11
483 Views
Last Modified: 2012-08-13
can someone give me a brief and simple explanation what these two means? I've read lots of page in the web, but can't seem to understand it..
0
Comment
Question by:kuntilanak
  • 5
  • 3
  • 2
  • +1
11 Comments
 
LVL 45

Accepted Solution

by:
Kdo earned 500 total points
ID: 24107721
Hi kuntilanak,

Both types of links point to another object, usually a regular file. The subtle difference is in the way the link is recorded.

The recording of a symbolic (or soft) link contains a pointer to another object. A hard link contains the same file mapping as does the other object. The user calls them both links, but the hard link is really not a link. It is a duplication of the entry that describes the file. This allows just a single copy of a file to be accessed by different names. Following a sym link is a two step process -- read the sym link entry, then read the entry that it points to. Reading a hard link entry is a one step process -- read the hard link, it IS a description of the file.

Most users never have reason to create hard links. (In today's environment, creating a soft link should be the default behavior of the *ln* command.)

The reason for there even being a hard link is historical. A lot of programs have common code bases with only small changes to logic. The hard link allows a single program to be coded to perform all of the related activites. When a program is run, the file name (and full path) can be passed to the program. C does this all the time. The program can examine the name of the file that was run and determine what logic to execute.

I'm not aware of any hard links in RHEL. There probably are some, but I don't know of them so I'll make up an example.

The ls command is an executable file. The ll command is usually an alias that passes specific parameters to ls. One could also code the ll behavior into ls, create a hard link to the ls executable called ll, and have the ls/ll program determine the calling name and hence the behavior.


Hope this wasn't too confusing. :)

Kent
0
 

Author Comment

by:kuntilanak
ID: 24107800
hmm...but from what I understand hard links points to the same i-nodes... I don't get what that really means
0
 
LVL 45

Expert Comment

by:Kdo
ID: 24107990

An i-node is the entry in the catalog (directory) that describes the file.  It contains the file name, device (where applicable), starting address, length, creation date, etc.

A hard link results in two i-nodes that describe the exact same file.  A sym link is an i-node that points to the i-node that describes the file.


Kent
0
 

Author Comment

by:kuntilanak
ID: 24108146
ok.. so when creating hard links it's the i-node that are duplicated but not the actual file it self right? they still point to the same exact file and not the duplicate?
0
 
LVL 45

Expert Comment

by:Kdo
ID: 24108193
Correct.  

A hard link is an exact duplicate of the i-node, except for the file name.  Both point to the physical file.

A sym link points to the i-node that describes the file.


0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:kuntilanak
ID: 24108290
so in UNIX every file/directory has an i-node? if that's so how do you differentiate between what's a file and what's a directory?
0
 
LVL 84

Expert Comment

by:ozo
ID: 24109517
the directory entry has a flag indicating the file type
0
 

Author Comment

by:kuntilanak
ID: 24109565
so say if it's a directory the inode has a flag bit set to 1 and if it's a file it's 0,. something like that?
0
 
LVL 84

Expert Comment

by:ozo
ID: 24109610
    struct dirent {
             u_int32_t d_fileno;             /* file number of entry */
             u_int16_t d_reclen;             /* length of this record */
             u_int8_t  d_type;               /* file type, see below */
             u_int8_t  d_namlen;             /* length of string in d_name */
     #ifdef _POSIX_SOURCE
             char    d_name[255 + 1];        /* name must be no longer than this */
     #else
     #define MAXNAMLEN       255
             char    d_name[MAXNAMLEN + 1];  /* name must be no longer than this */
     #endif
     };
     /*
      * File types
      */
     #define DT_UNKNOWN       0
     #define DT_FIFO          1
     #define DT_CHR           2
     #define DT_DIR           4
     #define DT_BLK           6
     #define DT_REG           8
     #define DT_LNK          10
     #define DT_SOCK         12
     #define DT_WHT          14
0
 

Author Comment

by:kuntilanak
ID: 24109627
and which flags shows it's a directory and which one tells that it's a file
0
 
LVL 40

Expert Comment

by:omarfarid
ID: 24112375
I have a comment on Kdo comment # 24108193:

when a hard link is created the i-node is note duplicated. It is just referenced to by the new file name in the dir table

http://linuxgazette.net/105/pitcher.html
http://www.maxi-pedia.com/difference+between+symbolic+link+and+hard+link
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

I don't know if many of you have made the great mistake of using the Cisco Thin Client model with the management software VXC. If you have then you are probably more then familiar with the incredibly clunky interface, the numerous work arounds, and …
Every server (virtual or physical) needs a console: and the console can be provided through hardware directly connected, software for remote connections, local connections, through a KVM, etc. This document explains the different types of consol…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now