190

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

sri prasanna
  • 2,003
  • 2
  • 13
  • 4

6 Answers6

188

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!

oKtosiTe
  • 9,408
  • 9
  • 46
  • 70
120

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.

Dennis Williamson
  • 106,229
  • 19
  • 167
  • 187
  • 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 03 '11 at 09: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. – Dennis Williamson Feb 03 '11 at 09: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 03 '11 at 09:12
  • 4
    `sudo sh -c 'cd dirname'` doesn't do anything for me. – Peter Niederwieser Aug 09 '11 at 14:43
  • @Peter: See the part of my answer which begins "but..." – Dennis Williamson Aug 11 '11 at 22:08
  • @Dennis: I misunderstood that part. The answer would be easier to understand if `cd dirname` was followed up with something (e.g. `; ...`). – Peter Niederwieser Aug 12 '11 at 00:50
  • @Arjan That there is an external command `cd` in `/usr/bin/cd` makes no sense, except the external `cd` does something different than the shells `cd`. But then, you would have two `cd` with different command line syntax. Very odd. The command `cd` changes the current directory of the *current process*. An external command creates a new process, by definition. So it can only change its own, and terminate with no effect to the shell that started it. – Volker Siegel Oct 21 '19 at 10:25
  • 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?](https://unix.stackexchange.com/q/50058/) – Volker Siegel Oct 21 '19 at 10:35
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.

Alex
  • 2,036
  • 4
  • 22
  • 33
11

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 /
Stephen Rauch
  • 3,091
  • 10
  • 23
  • 26
hunt67241
  • 111
  • 1
  • 3
3

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.

mareoraft
  • 250
  • 2
  • 8
0

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

Uğur Gümüşhan
  • 1,356
  • 2
  • 15
  • 32