[Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 542
  • Last Modified:

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..
0
kuntilanak
Asked:
kuntilanak
  • 5
  • 3
  • 2
  • +1
1 Solution
 
Kent OlsenData Warehouse Architect / DBACommented:
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
 
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 OlsenData Warehouse Architect / DBACommented:

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
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
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 OlsenData Warehouse Architect / DBACommented:
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

Featured Post

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

  • 5
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now