When you type the cd command by itself, you return to your home directory. For example, if your home directory was /home/user1:
In the C shell, the tilde (~) is used as a shortcut for specifying your home directory. For example, you would type the following to change to the subdirectory music within your home directory:
You can also use this shortcut to specify another user's home directory. For example:
where username is another user's login name, would change to that user's home directory.
Note -If you are using the Bourne shell, the ~ shortcut will not work.
If you are using the Bourne shell, it may be possible that your system administrator has configured the system so that you can type $home to specify your home directory. If this is the case, then typing:
changes you to the subdirectory music in your home directory. Likewise, typing:
changes you to the specified user's home directory, where username represents another user's login name.
The directory immediately "above" a subdirectory is called the parent directory. In the preceding example, /home is the parent directory of /home/user1. The symbol .. ("dot-dot") represents the parent directory. Therefore, the command cd .. changes the working directory to the parent directory, as in this example:
$ pwd /home/user1 $ cd .. $ pwd /homeSuppose your current working directory is /home/user1 and you want to work with some files in /home/user2. Here is a useful shortcut:
$ pwd /home/user1 $ cd ../user2 $ pwd /home/user2../user2 tells the system to look in the parent directory for user2. As you can see, this is much easier than typing the entire path name /home/user2.
In this lesson, we will introduce our first three commands: pwd (print working directory), cd (change directory), and ls (list files and directories).
Those new to the command line will need to pay close attention to this lesson since the concepts will take some getting used to.
File System Organization
Like Windows, the files on a Linux system are arranged in what is called a hierarchical directory structure. This means that they are organized in a tree-like pattern of directories (called folders in other systems), which may contain files and subdirectories. The first directory in the file system is called the root directory. The root directory contains files and subdirectories, which contain more files and subdirectories and so on and so on.
Most graphical environments include a file manager program used to view and manipulate the contents of the file system. Often we will see the file system represented like this: cd0. This means from the root directory (represented by the leading slash in the pathname) there is a directory called "usr" which contains a directory called "bin".
Let's try this out:
me@linuxbox me]$ cd1 me@linuxbox bin]$ pwd /usr/bin me@linuxbox bin]$ ls '[' mshortname 2to3-2.7 mshowfat 411toppm mtools a2ps mtoolstest a2ps-lpr-wrapper mtr aa-enabled mtrace aa-exec mtr-packet aclocal mtvtoppm aclocal-1.15 mtype aconnect mutter acpi_listen mxtar add-apt-repository mzip addpart namei and many more...
Now we can see that we have changed the current working directory to cd0 and that it is full of files. Notice how the shell prompt has changed? As a convenience, it is usually set up to display the name of the working directory.
Where an absolute pathname starts from the root directory and leads to its destination, a relative pathname starts from the working directory. To do this, it uses a couple of special notations to represent relative positions in the file system tree. These special notations are "." (dot) and ".." (dot dot).
The "." notation refers to the working directory itself and the ".." notation refers to the working directory's parent directory. Here is how it works. Let's change the working directory to /usr/bin again:
me@linuxbox me]$ cd1 me@linuxbox bin]$ pwd /usr/bin
O.K., now let's say that we wanted to change the working directory to the parent of cd0 which is cd8. We could do that two different ways. First, with an absolute pathname:
me@linuxbox bin]$ cd9 me@linuxbox usr]$ pwd /usr
Or, with a relative pathname:
me@linuxbox bin]$ ls1 me@linuxbox usr]$ pwd /usr
Two different methods with identical results. Which one should we use? The one that requires the least typing!
Likewise, we can change the working directory from cd8 to cd0 in two different ways. First using an absolute pathname:
me@linuxbox usr]$ cd1 me@linuxbox bin]$ pwd /usr/bin
Or, with a relative pathname:
me@linuxbox usr]$ ls7 me@linuxbox bin]$ pwd /usr/bin
Now, there is something important that we must point out here. In most cases, we can omit the "./". It is implied. Typing:
would do the same thing. In general, if we do not specify a pathname to something, the working directory will be assumed. There is one important exception to this, but we won't get to that for a while.
A Few Shortcuts
If we type cd followed by nothing, cd will change the working directory to our home directory.
A related shortcut is to type pwd1. In this case, cd will change the working directory to the home directory of the specified user.