203

Why typing sudo cd whatever won't change the directory?

1

6 Answers 6

128

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.

8
  • 3
    But then sudo pwd wouldn't work either? (I always figured that sudo cd does work, but you're just not seeing the result after sudo returns. But that was just a wild guess. Maybe neither cd nor pwd are actually built-in in Bash on a Mac. Running which cd does indeed give me results. Running sudo cd / does not give me an error, but indeed does not result in a changed working directory.)
    – Arjan
    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 a cd executable, but it's mostly useless. Try using type -a cd it's much more informative than which, by the way. Feb 3, 2011 at 9:06
  • 2
    Nice! type -a cd shows both cd is a shell builtin and cd is /usr/bin/cd on my Mac. And likewise for pwd and echo. And both sudo pwd and sudo echo "Hello world" do give me a result. However, type -a return only yields return is a shell builtin, and sudo return 3 shows me sudo: return: command not found. So, I guess the question is: does the OP get an error message, or does the OP not see the cd work without any error? (Or: what OS is the OP using.)
    – Arjan
    Feb 3, 2011 at 9:12
  • 4
    sudo sh -c 'cd dirname' doesn't do anything for me. 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 a cd command. Any shell that may ever be used by humans has cd, 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 the cd external command? Oct 21, 2019 at 10:35
201

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!

1
  • 6
    But: be careful, once one is root...
    – Arjan
    Feb 3, 2011 at 9:14
16

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.

2
  • 4
    On the other hand, if there is no root password, or you don't know it, sudo is the only option.
    – Liam
    Oct 20, 2015 at 18:37
  • 1
    sudo su should work if you a in the sudoers group.
    – Kemin Zhou
    Jan 10, 2021 at 6:06
13

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 /
4

There are two ways that it "won't work", depending on your OS:

  1. 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)

  2. 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 message sudo: cd: command not found.)

    So sudo cd runs with error.

0

you can typically switch to the root user bu typing "sudo sh" and cd into wherever

You must log in to answer this question.

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