10

On Linux, if I've cd'd around and am now in a directory, is there a way to figure out what the real path to that directory is if I had not used a symbolic link to get there?

Consider:

$ pwd
/home/dave/tmp
$ mkdir -p 1/2/3/4/5
$ ln -s 1/2/3/4/5 5
$ cd 5
$ pwd 
/home/dave/tmp/5

Or:

$ pwd
/home/dave/tmp
$ mkdir -p 1/2/3/4/5
$ ln -s 1/2/3/4 4
$ cd 4/5
$ pwd 
/home/dave/tmp/4/5

Is there any way to figure out that /home/dave/tmp/5 is really /home/dave/1/2/3/4/5 ?

3 Answers 3

13

For use with cd, use pwd -P:

$ pwd
/home/dave/tmp
$ mkdir -p 1/2/3/4/5
$ ln -s 1/2/3/4/5 5
$ cd 5
$ pwd 
/home/dave/tmp/5
$ pwd -P
/home/dave/tmp/1/2/3/4/5

For generic symbolic links, use readlink:

$ cd ..
$ readlink 5
1/2/3/4/5

Or ls -l (with -d for directories):

$ ls -ld 5
lrwxr-xr-x  1 dave  staff  9 Jul 24 10:10 5 -> 1/2/3/4/5
3
  • readlink -f file returns the non-symlinked path to that file, which is what I want. Thanks! Jul 27, 2009 at 13:40
  • 1
    huh, I'd always used /bin/pwd, since it can't know how it got where it is, unlike the pwd shell builtin. Obviously equivalent to pwd -P. Dec 10, 2009 at 20:00
  • ls -lda doesn't work for hidden sym links for some reason
    – Casebash
    Jun 11, 2010 at 12:32
2

You want either readlink -f (in coreutils, installed by default) or the more easily-remembered realpath, which you have to install.

0

An alternative method I used,

cd to the symlink
Ctrl+Shift+T #To open a new tab
pwd

New tab pwd, gives the symlink. ;)

3
  • I'm sorry, what shell, window manager, or terminal are you using here? Aug 22, 2009 at 18:06
  • I think he's talking about gnome-terminal Nov 6, 2009 at 22:01
  • Yes, I was talking about the Gnome Terminal.
    – lprsd
    Nov 10, 2009 at 6:29

You must log in to answer this question.

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