No-think link (redone)

When I first used ln, I expected the behavior of ln source link to work. But ln is slightly more complicated than that. While learning it from the beginning, I discovered it does not always resolve the path correctly; additionally, it doesn’t not error if the source is non-existence. I discovered that this was necessary because ln is designed to be versatile. So I understood that one would want links at times to be created that don’t exist yet, but it was unhelpful to me in the way that I felt ln should logically work, and the way that I wanted to use it.

Originally, I would do a link like this and it would be broken:

# ln -s ../dir/file dir/

I’ve attempted other links since then that too (of which I can’t remember now) would also be broken. So the way I discovered to do links correctly without doubt was to use whats called the fully-qualified or absolute path (i.e. a path defined from root [/]):

# ln -s /home/username/Document/file /home/username/Desktop/file

There’s a program called realpath that does this, so I wrote a wrapper script for it and it turned out to be pretty easy. The script resolves the absolute paths, verifies the existence of the source directory and link parent directory, and detects write permissions prompting sudo when needed. It works like this:

# lnk ~/Documents/Resumes/ ~/Desktop
‘/home/username/Documents/Resumes’ -> ‘/home/username/Desktop/Resumes’

By doing:

# lnk ~/Documents/Resumes/ ~/Desktop/Resumes-I-like
‘/home/username/Documents/Resumes’ -> ‘/home/username/Desktop/Resumes-I-like’

a specifically named link will be put on the Desktop.

# lnk /etc/fstab  ~  # or use ~/fstab-edit
‘/etc/fstab’ -> ‘/home/todd/fstab’

If trying to link to a write-protected directory:

# lnk /usr/share/vim/vim73/vimrc_example.vim /etc/vimrc
[sudo] password for $USER:
‘/usr/share/vim/vim73/vimrc_example.vim’ -> ‘/etc/vimrc’

An error message will appear if the source or link parent directory doesn’t exist:

Non-exist: .bashr


* The script will work for just about any instance with the exception of removable media where relative-paths would be better used.

About these ads

About Todd Partridge (Gently)

Good times, good people, good fun.

Posted on 2013-07-05, in Linux, Script. Bookmark the permalink. Leave a comment.

Comments are closed.


Get every new post delivered to your Inbox.

Join 52 other followers

%d bloggers like this: