637

I am installing p4v in /opt, but /usr/bin is on my path. Is it possible to create a soft or symbolic link for p4v from /opt to /usr/bin, so I can just type "p4v" since /usr/bin is in my path?

2

8 Answers 8

930

See man ln.

To create a symlink at /usr/bin/bar which references the original file /opt/foo, use:

ln -s /opt/foo /usr/bin/bar

You would need to apply the above command as root (i.e. with sudo).

12
  • 2
    I am using: sudo ln –s /etc/apache2/sites-available/redmine /etc/apache2/sites-enabled/000-redmine getting error: ln: target '/etc/apache2/sites-enabled/000-redmine' is not a directory
    – RAJ ...
    Aug 4, 2012 at 7:29
  • 1
    The Ubuntu documentation says " Creates hard links by default, symbolic links with --symbolic." Will the above solution create a symbolic link as asked by OP?
    – dev
    May 26, 2015 at 5:27
  • 5
    I though César wanted to put his files in the /opt and /usr/bin to have the symbolic link, not other way around.
    – mishap
    Nov 26, 2015 at 23:41
  • 5
    @mishap is right as far as I'm concerned. It's the other way around. Dec 18, 2015 at 17:05
  • 2
    @kevinmicke after your explanation finally realized that the explanation of the answer was stated in reverse order from the command, making my brain (and others') read it backwards
    – Andrew
    Mar 7, 2018 at 21:00
62

The error is that you are writing the command wrong. The correct way is

ln -s /<full>/<path>/<to>/<file> /usr/local/bin

http://ubuntuforums.org/showthread.php?t=2001697

2
  • Note the leading foreslash /
    – mace
    Mar 5, 2019 at 7:50
  • Thanks, I totally missed that I needed the absolute path to the linked file.
    – Andy R
    Jun 14, 2019 at 8:58
24

If the 'p4v' executable is at /opt/bin/p4v, you can simply run:

sudo ln -s /opt/bin/p4v /usr/bin/p4v
sudo chmod ugo+x /usr/bin/p4v

It would be better to add /opt/bin (or wherever the executable is) to your path:

echo "export PATH=\$PATH:/opt/bin" >> ~/.profile
reset
2
  • ~/.profile would be better for setting $PATH.
    – Lekensteyn
    Aug 8, 2011 at 19:30
  • you can edit /etc/environment to modify PATH system wide. Aug 8, 2011 at 19:44
6

Check the software location by this.

which application-name #replace for the application you are looking for

for example

which skype

output will be this.

/usr/bin/skype 

To create the soft link. for example you want to create the soft link for skype on your desktop

ln -s /usr/bin/skype ~/Desktop/

For more information about ln.

man ln

or

ln --help
5

This template was more helpful for me than the above answers. Probably not more correct, just less obfuscated:

ln -s <path/to/real/file-or-folder> <symlink path>

Just replace the parts in <>'s

0
4
ln -s -n ./TargetDirectory ./Nickname

Note, this works if you both nodes are below you in the same tree. You can use relative notation

  • -s command makes it a symbolic link
  • -n makes it possible de create a folder-type symlink
1
  • 1
    Welcome to askubuntu.com. In this case the $ to indicate a command line prompt is a style choice, and not likely to be a problem. However bear in mind that including things in a code block other than the code and its output can cause confusion.
    – J. Starnes
    Dec 12, 2017 at 0:42
0

If it is saying target is not a folder, it means there are spaces in your folder names eg: New Folder has a space

You need to edit the path and add a backslash \ after every space in the paths

eg:

ln -s /opt/bin /usr/var/New\ Folder
1
  • 3
    This is not an answer to the OPs question. Please wait until you have enough reputation to add comments.
    – derHugo
    Nov 9, 2017 at 5:59
0

I have found that it is easier to go to where you want the link to be and then create the link using sudo ln -s /path/to/source/file, than doing ln -s target source.

So in your case I would do cd /usr/bin then sudo ln -s /opt/bin/pv4. The other way has not been working in my case.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .