What do these two commands mean?
I am ending up in two directories upwards the tree on the first command and in the root directory from the second command. Why does that happen?
/ 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.
cd ../ is equivalent to
Paths that don't start with a
/ are relative paths; they are resolved relative to the current directory.
Every directory has two special entries:
.that resolves to the directory itself
..that resolves to the directory's parent (i.e., the directory that contains that directory)
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
/.. 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.)
.. 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
/ is an exception. Since no directory contains it, we say that
/'s parent is itself. Therefore, in
/.. 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)
A single dot (.) represents the current directory. In fact, if you executed a
cd . it would put you in your current directory (which would appear to do nothing). If you were to copy something from /dir1 to your current dir, you could do it like this:
cp /dir1/somefile.txt .
cd .. brings you up one directory level. A
cd ../ does the same. If you wanted to go up two levels, you would add two more dots on the end, like this:
To return to the root directory, you can execute a
cd /. Now let's say I executed the following:
That puts me in the /dir1/dir2 directory, because (as we established above) the
.. tells it to go up one level. So it goes to dir3, and then goes up.
By invoking a
cd /.. you are telling it to go to the root directory
/ and then up one level, which it cannot do. So it is effectively leaving you at the root dir, instead.