≡ Menu

How to: Linux / UNIX create soft link with ln command

Q. How do I create a soft link (symbolic link) under UNIX or Linux operating system?

A. To make links between files you need to use ln command. A symbolic link (also known as a soft link or symlink) consists of a special type of file that serves as a reference to another file or directory. Unix/Linux like operating systems often uses symbolic links.

Two types of links

There are two types of links

  • symbolic links: Refer to a symbolic path indicating the abstract location of another file
  • hard links : Refer to the specific location of physical data.

How do I create soft link / symbolic link?

To create a symbolic link in Unix or Linux, at the shell prompt, enter the following command:
ln -s {target-filename} {symbolic-filename}

For example create softlink for /webroot/home/httpd/test.com/index.php as /home/vivek/index.php, enter the following command:
ln -s /webroot/home/httpd/test.com/index.php /home/vivek/index.php
ls -l


lrwxrwxrwx 1 vivek  vivek    16 2007-09-25 22:53 index.php -> /webroot/home/httpd/test.com/index.php
Share this tutorial on:

Like this? Follow us on Twitter OR support us by using Patreon

{ 61 comments… add one }
  • Dominic June 13, 2008, 11:22 am

    I executed this comment successfully and created a soft link. When I tried browsing to “/home/vivek.index.php” it shows “403 Forbidden error is thrown. Is there is any possibility to browse on the same?

    • Cameron April 14, 2012, 3:29 pm

      You need to run
      chmod -R 777 /var/www
      to set the server root to the right permissions so that pages are viewable.

      You may need administrator privileges.

      • Chris October 12, 2012, 1:58 pm

        Please don’t ever do: chmod -R 777 /var/www or chmod 777 anywhere in your web accessible directories. I won’t bother telling what security risks this will open up. You can google it.

        You should be giving the least permission needed to your directories and files on a web server. If you’re not sure what permissions are needed than learn more about how *nix permissions work and how your server works. here is a good place to start: http://en.wikipedia.org/wiki/File_system_permissions#Traditional_Unix_permissions

        • Alex September 30, 2015, 5:04 am

          I run a server on LAN, therefore I don’t give a (“naughty-word”) about it, I do chmod 7777. Just saying, ha ha ha.

          • Kal January 21, 2016, 3:56 pm

            wow, lol.. I hope you never become a sysadmin

          • Ben Yanke May 5, 2016, 2:46 am

            Because there’s no possible reason to follow good practice when nobody’s watching, right?

            [ / sarcasm ]

  • Anil Kumar Jena June 23, 2008, 11:03 pm

    This error 403 access forbidden, means that a request for a “bare” directory path has been made, no default directory index page is present and the site manager does not want a file listing displayed in its place.
    If you have problems accessing a particular file or directory, ensure that the Web server has permission to read those files. Usually, the Web server will operate under a special user account, so make sure that user has read permission.

    In this case, either create an index for that directory or change the settings to permit directory listings. For Apache, use the Options +Indexes directive in the .htaccess file for the directory.

  • asif October 4, 2008, 2:06 pm

    how do you create a symbolic link to directories…

    • santosh July 22, 2010, 12:11 pm

      u cannot create symbolic link to directories.

      • bbithead September 15, 2010, 4:12 am

        sure you can:
        ln -s /existing/directory /sym/link/to/that/dir

        • Flavian October 22, 2014, 6:28 am

          U missed -d
          ln -sd /existing/directory /sym/link/to/that/dir

          • joe schmoe June 23, 2015, 3:49 pm

            No he didn’t. where in the question did he specify he needed a hard link?

        • Malcolm September 27, 2015, 9:27 pm

          There are a lot of conflicting comments here.

          1. Generally speaking, a directory *is a file* for the purposes of a symbolic link, i.e., you don’t need to do anything different.

          2. The LINK points to the TARGET.

          3. The TARGET is relative to the LINK.

          4. The syntax is ln -s TARGET LINK

          So suppose you have the following hard directory:
          and you want to create a symlink to it in your webroot located at

          Then do:

          ln -s /var/www/App/Vendor/VendorPublicDir /var/www/App/Webroot/VendorPublicDirLink

          … this creates a LINK in /var/www/App/Webroot named VendorPublicDirLink that points to the TARGET /var/www/App/Vendor/VendorPublicDir

          – or –

          ln -s ../Vendor/VendorPublicDir /var/www/App/Webroot/

          … this creates a LINK in /var/www/App/Webroot named VendorPublicDir (it defaulted to the TARGET name here because the LINK is an existing directory). The LINK points to the TARGET ../Vendor/VendorPublicDir (which is relative to /var/www/App/Webroot; where you run the command from doesn’t matter).

      • joe schmoe June 23, 2015, 3:49 pm

        Bunch of mental midgets on this board.


  • Vishal December 12, 2008, 5:59 am

    I want to know that how to preserve these softlinks while copying the files on Solaris???

  • samir December 22, 2008, 5:05 am

    Hi All
    If any one saw my msz.
    Write me the advantage of soft link(symbolic link) only.

    • darthvader November 3, 2016, 11:49 pm

      hey samir, i’m not doing your homework

  • anusha February 10, 2009, 8:15 am

    How can we know about the various options under link command.

    • tango charlie April 27, 2011, 12:38 am

      you can search on google

    • Akash May 7, 2012, 3:06 am

      using man command……………….

  • a11an June 15, 2009, 11:46 am


    Wanted to confirm the information I had. Great info, it worked.

    Created a soft link for apache-tomcat


    Soft Link
    ln -s /directory/of/application/ /directory/and/softlink

    e.g. ln -s /usr/local/apache-tomcat /usr/local/apache
    This created an ‘apache’ softlink to apache-tomcat directory

    ls -l
    apache -> /usr/local/apache-tomcat

    To use hard link, just remove the -s option

    Hope this helps.

  • Debashis Mohapatra July 24, 2009, 10:22 am


    Pla tell me ,in what scenario,we can use soft link and hard link.

  • jesse July 24, 2009, 6:51 pm

    “Pla tell me ,in what scenario,we can use soft link and hard link.”

    I am trying to use a symbolic link (soft link) to allow multiple websites to share a css style that is beyond each sites root directory.

  • varunreddy August 28, 2009, 2:43 pm

    how can we send our file information to another user using ln command

  • Deandre October 13, 2009, 6:13 pm

    Create an additional name (hard link) for the file ‘cars’. The link should
    be called ‘autos’ and should be in your home directory:

  • Deandre October 13, 2009, 6:13 pm

    How do you do that??

  • Hi SUNIL October 22, 2009, 7:54 am

    whats the advantage of soft link over Hard link?

  • Hi SUNIL(IEET BADDI) October 22, 2009, 7:58 am

    How we can make more the Effective the Hardlink And Softlink?

  • darshan October 26, 2009, 2:47 am

    My soft links are not visible through http:
    how do I make sure that web server has access to those folder.
    Please give the exact set of commands.


  • chepas January 3, 2010, 6:27 pm

    darshan 10.26.09 at 2:47 am
    My soft links are not visible through http:
    how do I make sure that web server has access to those folder.
    Please give the exact set of commands.

    that depends on your webserver, for apache:

    Options Indexes FollowSymLinks

  • links management October 3, 2010, 10:59 am

    You can use .htaccess rules to create it

  • Devadas April 4, 2011, 10:18 am

    hi all..pls solve this issue…
    why my link size immediately goes to zerosize occasionally?

  • nikesh June 13, 2011, 7:56 pm

    Please make sure that the file which you are accessing is having a read access for web server.

    If you are accessing a file under the home directory of a user there might not be read access for home directorates.

    means /home/user folder will be with 700 (drwx——) permission. So you would need to set 755 permission for /home/user folder if you need to access the file through URL.

  • Ndamu July 5, 2011, 7:09 am

    Please help me,when i create symbolic links they always come up broken

  • indir July 15, 2011, 3:27 am

    Thanks chepas, it’s worked!

  • shivani July 23, 2011, 9:48 am

    hiiiiiiiiii how to write the code in file……..

  • mansi July 23, 2011, 9:50 am

    how to make folder in unix…………

    • Manish August 4, 2011, 12:58 pm

      @Shivani and @ Mansi

      1st ask wat is UNIX?
      u guys are kidding, right? :)

  • C Pimento August 7, 2011, 11:18 pm

    Thank you !

  • nsu123 September 26, 2011, 10:16 pm

    I have a couple symboliclink questions:

    1. How can I create a symboliclink between two filesystems?
    Do I need to have a mount point to the second filesystem first then create a link to it?

    2. If I copy a file with that has a symboliclink to another filesystem, will it lose the link?


  • Gopikant September 27, 2011, 7:22 am

    What is the basic use of a soft link or sym link?

    • chandra sekhar October 1, 2011, 6:00 am

      soft link maintains duplicate data in two files.
      if you link one file with another,change in one file reflected to another file also.

  • seafangs January 17, 2012, 9:54 pm

    Thanks, this was the info I needed

  • Bharath February 10, 2012, 5:54 am

    Really thanks guyz…. I created link successfully.

    CASE: Actually user PC “/” is completely filled, so that user is unable to login. But he is able to login as super user. “/” is 100%.

    SOLUTION: I find that /usr and /var is occupying more space, so wat i did is I moved content of /usr directory to /work directory (free space) and did ln -s /usr/include /work/name of the link . Thats it all files are physically in /work direcory but logically it is pointing to /usr/include place.

    After rebooting user is able to work with his login, gained space in “/”.


  • sachin W March 7, 2012, 10:13 am

    nice support

  • adhishesh May 17, 2012, 12:59 pm

    One more thing we need to consider as a security treat, some softwares have default UserID and Password like phpmyadmin and other softwares, after installation of this kind of software’s we need to take care of userID and Password.

  • Andrew June 22, 2012, 10:20 pm

    I was having some trouble creating a symlink to a directory, and I discovered that it was caused by my using a relative path for the target (e.g. “..”). When I used an absolute path, it worked like a charm!

  • laxman February 1, 2013, 12:59 am

    Hi All,
    i am getting the below output in file
    get_history(): getting history
    2068, 2986, 6408, 7546, 7555, 7893, 7963, 8219, 8270, 8313, 8410, 8479, 8581, 8607, 8724, 8783, 8804, 8992, 9018, 9018, 9100, 9127, 9157, 9232, 9236, 9269, 9291, 9388, 9565, 9661, 9668, 9850, 9862, 10004, 10004, 10031, 10063, 10834, 12087, 13444
    … got 40 historical records
    lower: 11354 ? 3000 < 9018 = 0
    upper: 11354 ? 9018 < 7000 = -215

    9018 is todays number….i want to compaire this number with all above list of number one by one…..please solution mail me on laxmanbyadav@gmail.com


  • laxman February 1, 2013, 12:59 am

    sorry forgot to mension i want this in unix shell or perl…

  • laxman February 1, 2013, 1:01 am

    Hi All,
    I am new with unix, could you please provide some information with example for symbolic link or hardlink …..why and how its use….


    • Ndukaku Onyekachi July 12, 2015, 5:30 pm

      symbolic link is use to share file between two people. For example, Mr A hired Mr B and what Mr.B to work in his file, instaed of giving him his system, he linked his file to Mr.B with New file name. Name whatever work Mr.B do will update to Mr.A file. and you can do that with this command,
      ln -s /home/Mr.A/Mr-file.txt /home/Mr.B/newfile.txt

      hope this helps

  • Vignesh July 16, 2013, 11:17 am

    Hi All,

    Currently my application is running on the local HDD partition. The path of application is /usr/local/app.Kindly suggest how we can change the default path to shared storage volume as we are plan to do OS linux clustering.

  • mike January 20, 2014, 6:05 pm

    why dont u dinks try searching the internet for your dumb questions

  • Jeremy September 10, 2014, 2:28 pm

    ^—- Mike, I think i like you …lol seriously people 1-800-534RCH-G00Gl3

  • aby December 17, 2014, 5:06 am

    i creted ldap users. now i want to share some directories to each ldap users with different permissions from server. how will i do that?

  • serg September 17, 2015, 5:46 pm

    It dind’t worked
    I use Ubuntu 14.10
    I have solved that running sublime from the startup and calling again for each file I edit

  • jason November 20, 2015, 3:34 pm

    Your current directory is sample_dir. Create a hard link to cars2, called cars3 within sample_dir?

  • Tank December 15, 2015, 7:48 pm

    This is the hugest pet peeve when people try to explain *Nix stuff. You’re explaining it to people who already understand what ln does. Your use of “target-filename” “symbolic-filename” don’t make sense for someone who doesn’t understand ln to begin with.

    Your description doesn’t make sense either

    “For example create softlink for /webroot/home/httpd/test.com/index.php as /home/vivek/index.php, enter the following command:”

    Should read something like “To symbolicly link an existing file ‘/webroot/home/httpd/test.com/index.php’ to this location ‘/home/vivek/index.php'”

    Nothing is explicitly indicating what is symbolic and what actually exists. Either that or use terminology like source / destination. As both arguments here can be interpreted as targets per how other *nix commands are used and documented.

  • lost_at_sea April 26, 2016, 4:05 pm

    I am a complete newbie to this so can anyone tell me where exactly the symlink code goes?
    Does it go in .htaccess or some other place?

  • Baha July 27, 2016, 8:25 pm

    Hi, everyone! This is so far what did I achieve. Can someone help with symbolic links? I couldn’t create a symbolic link between diretories.
    [root@localhost folder2]# cd /root/folder
    [root@localhost folder]# ll
    total 8
    -rw-r–r–. 1 root root 19 Jul 27 13:07 file1
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file2
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file3
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file4
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file5
    -rw-r–r–. 1 root root 0 Jul 27 12:20 kgt
    -rw-r–r–. 1 root root 11 Jul 27 12:56 kgz
    [root@localhost folder]# ln -s kgz /root/kgz.link
    [root@localhost folder]# ls -l
    total 8
    -rw-r–r–. 1 root root 19 Jul 27 13:07 file1
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file2
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file3
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file4
    -rw-r–r–. 1 root root 0 Jul 27 12:20 file5
    -rw-r–r–. 1 root root 0 Jul 27 12:20 kgt
    -rw-r–r–. 1 root root 11 Jul 27 12:56 kgz
    [root@localhost folder]# cd
    [root@localhost ~]# ls
    1 Desktop Downloads folder2 install.log.syslog Music Pictures Templates
    anaconda-ks.cfg Documents folder install.log kgz.link passwd Public Videos
    [root@localhost ~]# cd folder
    [root@localhost folder]# ls
    file1 file2 file3 file4 file5 kgt kgz
    [root@localhost folder]# cat kgz
    [root@localhost folder]# cd
    [root@localhost ~]# cat kgz.link
    cat: kgz.link: No such file or directory
    [root@localhost ~]#

  • siddu December 28, 2016, 5:56 pm

    Before executing the command, should i change my directory to the parent directory so that the the file(target file name) which i intended to point to an another one(symbolic file name) points out in every other child directories present inside the parent directory?? OR can i just execute the command irrespective of which directory i am in??

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , ,