Why doesn't `sudo cd /var/named` work?

The reason you can't do this is simple and two fold

1

cd is not a program but an in-built command and sudo only applies to programs.

sudo foo means run the program foo as root

sudo cd /path returns

sudo: cd: command not found

because cd is not a program.

2

If it were possible to use sudo to cd to a protected directory then having run the command sudo cd /var/named you would be in that directory as a normal user but normal users are not allowed to be in that directory.

This is not possible.

Workaround:

You can use sudo -i to elevate yourself to super user. For example:

sudo -i
cd /var/named 

You are now logged on as root and can use whatever commands you wish. When finished type exit and you are back to being logged on as a normal user.


That's because cd is not an executable, it's a shell function to change directory.

If you run:

type cd

your will get:

cd is a shell function

You can use sudo -s to open an interactive shell and then cd to to your desired directory:

sudo -s
cd /var/named

To return back to your normal shell simply hit Ctrl+D.


All of the answers above are correct; here's a workaround though

sudo sh -c "cd restricted-dir; some_command"