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"