## Create and view symbolic or hard links ##

[Author](authors.html): Fred Crowson openbsd@crowsons.net OpenBSD

[Reviewer](technical_reviewers.html): _name_ _[[contact]]_ _[[BSD_flavour]]_

[Reviewer](technical_reviewers.html): _name_ _[[contact]]_ _[[BSD_flavour]]_

----



### Concept ###

Know the difference between symbolic and hard links
as well as how to create, view and remove both types of links. In
addition, be able to temporarily resolve a low
disk space issue using a symbolic link.


### Introduction ###

A link allows several filenames to refer to a single file on disk.  There are two types of links: hard links (((links!hard))) and symbolic links(((links!symbolic))).  A hard link associates two or more filenames with the same inode.  Thus hard links allow different directory entries to refer to the same disk data blocks.

Symbolic, or soft links as they are sometimes known as, are pointer files that name another file elsewhere in the file system.  As symbolic links point to another pathname in the filesystem they can span physical devices, as they point to a pathname not actual disk location of the file.

Both hard and symbolic links are created with the **ln**(((ln))) command.

Changes made to either the hard linked file or the original will effect both of them since they share the same disk data blocks.  **ls**(((ls))) marks symbolic links with an 'l'.  Using the '-i' option to **ls** will list the inodes of each file which will identify the hard linked files:

""20912 -rw-r--r--   2 fred  wheel    24 Jan 31 14:00 hardlink
""20912 -rw-r--r--   2 fred  wheel    24 Jan 31 14:00 index
""20914 lrwxr-xr-x   1 fred  wheel     5 Jan 31 13:58 softlink -> index

**rm**(((rm))) will remove both hard and symbolic links, however if the symbolic link is deleted it does not affect the file referenced by the link.  Similarly, in the above example deleting index will not affect hardlink even though it is the same file. 

The stat(1)(((stat))) utility displays file status.  Using **stat -F _filename_** will highlight symbolic links with a trailing '@' and show the file to which it is linked:

""$ stat -F softlink                                    
""lrwxr-xr-x 1 fred wheel 5 Jan 31 13:58:17 2007 softlink@ -> index

The power of stat lies in its ability to format the output, as illustrated in the example taken from the man page:
""$ stat -f "%N: %HT%SY" *    
""hardlink: Regular File
""index: Regular File
""softlink: Symbolic Link -> index

### Examples ###

Create an entry in the current directory called hardlink with the same inode as index:

""$ ln index hardlink
""$ ls -la
""total 8
""drwxr-xr-x   2 fred  wheel   512 Jan 31 12:33 .
""drwxr-xr-x  29 fred  wheel  2048 Jan 31 12:33 ..
""-rw-r--r--   2 fred  wheel     0 Jan 31 12:33 hardlink
""-rw-r--r--   2 fred  wheel     0 Jan 31 12:33 index 

Create a symbolic link to index in the current directory:

""$ ln -s index softlink
""$ ls -la
""total 8
""drwxr-xr-x   2 fred  wheel   512 Jan 31 12:35 .
""drwxr-xr-x  29 fred  wheel  2048 Jan 31 12:33 ..
""-rw-r--r--   2 fred  wheel     0 Jan 31 12:33 hardlink
""-rw-r--r--   2 fred  wheel     0 Jan 31 12:33 index
""lrwxr-xr-x   1 fred  wheel     5 Jan 31 12:35 softlink -> index

### Practice Exercises ###


### More information ###

ln(1), ls(1), rm(1), stat(1)


