symbolic link and hard link

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..
kuntilanakAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Kent OlsenDBACommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
kuntilanakAuthor Commented:
hmm...but from what I understand hard links points to the same i-nodes... I don't get what that really means
0
Kent OlsenDBACommented:

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
Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

kuntilanakAuthor Commented:
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
Kent OlsenDBACommented:
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
kuntilanakAuthor Commented:
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
ozoCommented:
the directory entry has a flag indicating the file type
0
kuntilanakAuthor Commented:
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
ozoCommented:
    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
kuntilanakAuthor Commented:
and which flags shows it's a directory and which one tells that it's a file
0
omarfaridCommented:
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Unix OS

From novice to tech pro — start learning today.