Although graphical shells such as Nautilus are easy to use, you can use them only if you have a graphical login. Sometimes, you may not have a graphical environment to run a graphical file manager. For example, you might be logged in through a text terminal, or X might not be working on your system. In those situations, you have to rely on Linux commands to work with files and directories. Of course, you can always use Linux commands, even in the graphical environment-all you have to do is open a terminal window and type the Linux commands. Click the terminal icon in the GNOME Panel (refer to Figure 7-2) to start a terminal emulation program that displays a terminal window.
In Red Hat Linux, when you log in as root, your home directory is /root. For other users, the home directory is usually in the /home directory. My home directory (when I log in as naba) is /home/naba. This information is stored in the /etc/passwd file. By default, only you (and root, of course) have permission to save files in your home directory, and only you can create subdirectories in your home directory to further organize your files.
Linux supports the concept of a current directory, which is the directory on which all file and directory commands operate. After you log in, for example, your current directory is the home directory. To see the current directory, type the pwd command.
To change the current directory, use the cd command. To change the current directory to /usr/share/doc, type the following:
Then, to change the directory to the bash-2.05b subdirectory in /usr/share/doc, type this command:
Now, if you use the pwd command, that command shows /usr/share/doc/bash-2.05b as the current directory. Therefore, you can refer to a directory's name in two ways:
An absolute pathname (such as /usr/share/doc), which specifies the exact directory in the directory tree
A relative directory name (such as bash-2.05b, which represents the bash-2.05b subdirectory of the current directory)
If you type cd bash-2.05b in /usr/share/doc, the current directory changes to /usr/share/doc/bash-2.05b; the same command in /home/naba tries to change the current directory to /home/naba/bash-2.05b.
Note that you can display the current directory in the shell prompt. The Bash shell uses the value of the environment variable PS1 as the primary prompt. Another variable, PS2, functions as the secondary prompt when a command requires further input from the user. You can view these variables with the echo command (for example, type echo $PS1 to view the setting of PS1).
Given this information, you can show the full directory name (enclosed in square brackets) in the prompt by using the following command:
If the current directory is /usr/src/linux-2.4, the prompt appears as follows:
As you move around the Linux directories, you may want to check the contents of a directory. You can get a directory listing by using the ls command. By default, the ls command-without any options-displays the contents of the current directory in a compact, multicolumn format. For example, type the following commands to see the contents of the /etc/X11 directory. (Type the commands shown in boldface; I have omitted the command prompts from the listing):
cd /etc/X11 ls applnk prefdm sysconfig XftConfig.README-OBSOLETE xserver desktop-menus proxymngr twm xinit xsm fs rstart X xkb gdm serverconfig xdm Xmodmap lbxproxy starthere XF86Config Xresources
From this listing, you cannot tell whether an entry is a file or a directory. To tell the directories and files apart, use the -F option with ls, as follows:
ls -F applnk/ prefdm* sysconfig/ XftConfig.README-OBSOLETE xserver/ desktop-menus/ proxymngr/ twm/ xinit/ xsm/ fs/ rstart/ X@ xkb@ gdm/ serverconfig/ xdm/ Xmodmap lbxproxy/ starthere/ XF86Config Xresources
Now, the directory names have a slash (/) appended to them. Plain filenames appear as is. The at sign (@) appended to the first filename indicates that that file is a link to another file (in other words, this filename simply refers to another file). An asterisk (*) is appended to executable files (see, for example, the prefdm file in the listing).
You can see even more detailed information about the files and directories with the -l option:
For the /etc/X11 directory, a typical output from ls -l looks like the following:
total 80 drwxr-xr-x 5 root root 4096 Jan 18 21:15 applnk drwxr-xr-x 2 root root 4096 Jan 18 20:47 desktop-menus drwxr-xr-x 2 root root 4096 Jan 18 21:36 fs drwxr-xr-x 6 root root 4096 Jan 18 21:33 gdm drwxr-xr-x 2 root root 4096 Jan 18 21:31 lbxproxy -rwxr-xr-x 1 root root 1419 Jan 15 22:38 prefdm drwxr-xr-x 2 root root 4096 Jan 18 21:31 proxymngr drwxr-xr-x 4 root root 4096 Jan 18 21:31 rstart drwxr-xr-x 2 root root 4096 Dec 2 12:03 serverconfig drwxr-xr-x 2 root root 4096 Dec 2 12:03 starthere drwxr-xr-x 2 root root 4096 Dec 2 12:03 sysconfig drwxr-xr-x 2 root root 4096 Jan 18 21:33 twm lrwxrwxrwx 1 root root 27 Jan 18 21:39 X ->../../usr/X11R6/bin/XFree86 drwxr-xr-x 3 root root 4096 Jan 18 21:32 xdm -rw-r--r-- 1 root root 3184 Jan 18 21:39 XF86Config ... lines deleted ...
An interesting feature of the ls command is that it does not list any file whose name begins with a period. To see these files, you must use the ls command with the -a option, as follows:
Try this command in your home directory, and compare the result with what you see when you don't use the -a option:
Type cd to change to your home directory.
Type ls -F to see the files and directories in your home directory.
Type ls -aF to see everything, including the hidden files.
Most Linux commands take single-character options, each with a minus sign (think of this sign as a hyphen) as a prefix. When you want to use several options, type a hyphen and concatenate the option letters one after another. Therefore, ls -al is equivalent to ls -a -l. However, if an option requires a value, then you have to first list the option and then its value.