What's the difference between "cd ../" vs. "cd /.."?
A /
at the end of the name of a directory/folder is optional. Most of the time, including or omitting the final slash in a directory name does not change the effect of a command.
So cd ../
is equivalent to cd ..
.
Paths that don't start with a /
are relative paths; they are resolved relative to the current directory.
Every directory has two special entries:
- a directory entry called
.
that resolves to the directory itself - a directory entry called
..
that resolves to the directory's parent (i.e., the directory that contains that directory)
Therefore cd ../
and cd ..
change directory to the parent of the current directory. Thus, if you start out in /home/fazlan
and run cd ..
or cd ../
, you'll end up in /home
.
In contrast, /..
is an absolute path (albeit an unusual one). /
is the filesystem root--the directory you get to if you go up in the directory hierarchy all the way. (Using the same parent and child metaphor, we say /
is the ancestor of everything in the filesystem.)
Since ..
means "the parent directory of this directory" and /
means "the top of the filesystem," /..
means "the parent directory of the top of the filesystem."
But what does it mean to talk about the directory that contains /
? Well, /
is an exception. Since no directory contains it, we say that /
's parent is itself. Therefore, in /
, ..
is /
. Consequently, /..
is the same as /
.
This is why cd ../
brings you up one directory from where you started, while cd /..
brings you to the very top. More elegant and easily read ways to do these things are cd ..
and cd /
, respectively.
The first is a relative path. The second is an absolute path.
The .. operator in that argument means move up one.
The slash when not at the front means division of sub-directory name.
The slash when at the front means "This is an absolute path. Start at root directory." The .. is discarded since you can't back out any further. (There was a time when lots of these allowed you to break chroots)