Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Occasionally I want to cd into a directory where my user does not have permission, so I resort to sudo.

The obvious command sudo cd somedir doesn't work:

$ sudo mkdir test
$ sudo chmod go-rxw test
$ ls -l
drwx------ 2 root     root  [...snip...] test
$ cd test
-bash: cd: test: Permission denied
$ sudo cd test
sudo: cd: command not found

Using sudo su works:

$ sudo su
# cd test

Is it possible to make this into a one-liner? (Not a big deal, just idle curiosity :)

The variations I tried didn't work:

$ sudo "cd test"
sudo: cd: command not found
$ sudo -i cd test
-bash: line 0: cd: test: No such file or directory
$ sudo -s cd test

The last one doesn't give an error, but it cd's within a new shell that exits by the end of the line, so it doesn't actually take me anywhere.

Can someone enlighten me as to why this happens? Why is sudo cd not found, when for example sudo ls ... works fine?

share|improve this question
    
BTW, sudo -i is preferred over sudo su, otherwise the user's env vars will be carried over. –  Sparhawk Apr 10 at 4:54

1 Answer 1

up vote 20 down vote accepted

Theoretically, the problem is that if you don't have execute rights to a directory, you shouldn't be able to read the contents of the directory. Now suppose you could do what you wanted:

user@desktop:/$ sudo cd restricted-dir
user@desktop:/restricted-dir$ ls
file1 file2

As you can see, you entered the directory using sudo privileges, then, when sudo returns, you become a user again, and you are in a directory where you normally shouldn't be.

Technically, the problem is the following.

sudo cd restricted-dir

cd is a shell built-in, not a command.

sudo cd -i restricted-dir

You are probably in /root, but it would have the same problem as with the next one.

sudo cd -s restricted-dir

You open a new root shell, cd into the directory, then exit the root shell, and return to where you began.

All in all, the only solution is to open a root shell and keep it open while you are in that directory.

share|improve this answer
    
Thanks for a nice explanation! –  j-g-faustus Jan 2 '11 at 18:53
    
Technically, cd is a "shell builtin command" (according to man bash). –  Sparhawk Apr 10 at 4:51

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.