Why typing sudo cd whatever won't change the directory?
6 Answers
cd
is a shell builtin. sudo
only works with executables. You could do sudo sh -c 'cd dirname'
but as soon as the shell exits, you're returned to the directory you started from. If you say what it is you're trying to accomplish then I can help you find a way to do that.
-
3But then
sudo pwd
wouldn't work either? (I always figured thatsudo cd
does work, but you're just not seeing the result aftersudo
returns. But that was just a wild guess. Maybe neithercd
norpwd
are actually built-in in Bash on a Mac. Runningwhich cd
does indeed give me results. Runningsudo cd /
does not give me an error, but indeed does not result in a changed working directory.)– ArjanCommented Feb 3, 2011 at 9:00 -
2@Arjan:
pwd
is also an external executable so it will work. Note that on some systems, there is acd
executable, but it's mostly useless. Try usingtype -a cd
it's much more informative thanwhich
, by the way. Commented Feb 3, 2011 at 9:06 -
2Nice!
type -a cd
shows bothcd is a shell builtin
andcd is /usr/bin/cd
on my Mac. And likewise forpwd
andecho
. And bothsudo pwd
andsudo echo "Hello world"
do give me a result. However,type -a return
only yieldsreturn is a shell builtin
, andsudo return 3
shows mesudo: return: command not found
. So, I guess the question is: does the OP get an error message, or does the OP not see thecd
work without any error? (Or: what OS is the OP using.)– ArjanCommented Feb 3, 2011 at 9:12 -
4
sudo sh -c 'cd dirname'
doesn't do anything for me. Commented Aug 9, 2011 at 14:43 -
1@Arjan I found the explanation: It is something like a deep compatibility hack. It does not do its function, but it has come of the side effects that the real
cd
has. And it can do nothing instead of failing when the current shell does not have acd
command. Any shell that may ever be used by humans hascd
, including/bin/sh
. But a program that is, seen from the operating system kernel, a shell can be much simpler than that, even only a couple of lines of code. See What is the point of thecd
external command? Commented Oct 21, 2019 at 10:35
Instead try using sudo -s
to start a root shell and then simply cd
into the directory.
When you're done as root, press CtrlD or type exit
.
As Arjan hints at in his comment below, it is important to note that as root, one can easily do damage to essential system components. Use with care!
-
6
You can simply su
to become root and then cd
all you want... I know an answer has already been accepted, but if one is not on the sudoers list then this is the only option.
-
4On the other hand, if there is no root password, or you don't know it, sudo is the only option.– LiamCommented Oct 20, 2015 at 18:37
-
1
I had the same issue when I was attempting to navigate to the root directory in Kali Linux and:
sudo su
allowed me to execute:
cd /
There are two ways that it "won't work", depending on your OS:
If your OS follows POSIX, then running
sudo cd
will cause the external command "cd" (usually located at/usr/bin/cd
) to execute in a forked process as the root user. That process changes directories successfully. Once that process is done, you will be returned to your regular shell, which is still in the directory where it started.So
sudo cd
runs without error, but does not change the current working directory of your current shell.(reference: this answer)
Otherwise, running
sudo cd
will cause the following to happen. Your computer will look through your PATH, trying to find an executable named "cd". It will not find one. (only the shell built-in command "cd" exists, and that is not an executable file). Hence, you get an error. (On Ubuntu, I get the error messagesudo: cd: command not found
.)So
sudo cd
runs with error.
you can typically switch to the root user bu typing "sudo sh" and cd into wherever