The file utilities include programs you can use to work with files and directories in your Red Hat Linux system. Table 8-3 briefly describes each of these programs. You can copy and delete files, create new directories, and change file permissions and ownerships. You can also list directories and see the amount of disk space the files use.
Because you need to use the file utilities often, the next few sections show you how to use some of them. Also provided is a brief introduction to the find command, which enables you to locate all files that meet specified criteria.
Program |
Description |
---|---|
chgrp |
Changes group ownership of files |
chmod |
Changes the permissions of files |
chown |
Changes the ownership of files |
cp |
Copies files |
dd |
Converts a file according to a specified format and then copies the file |
df |
Shows storage space (hard disk, CD-ROM, floppy, and so on) usage for the file systems |
dir |
Prints a brief directory listing |
dircolors |
Prints the command to set the LS_COLORS environment variable, used by the color version of the GNU ls program |
du |
Shows disk space used by files and directories |
install |
Copies files and sets permissions |
ln |
Creates links between files |
ls |
Lists the contents of a directory |
mkdir |
Creates directories, if they do not already exist |
mkfifo |
Creates named pipes, used for data transfer between programs (FIFO stands for first-in first-out, which is how the named pipes transfer data) |
mknod |
Creates special block or character device files (usually located in the /dev directory) |
mv |
Renames files |
rm |
Deletes files |
rmdir |
Deletes empty directories |
shred |
Deletes a file securely by first overwriting it to make it harder to recover the data |
sync |
Flushes file system buffers to disk, thereby synchronizing memory and disk |
touch |
Changes the timestamps of files |
vdir |
Prints detailed directory listings (similar to ls -l) |
Often, you may copy files from one directory to another. Use the cp command to perform this task. To copy the file /usr/X11R6/lib/X11/xinit/Xclients to the Xclients.sample file in the current directory (such as your home directory), type the following:
cp /usr/X11R6/lib/X11/xinit/Xclients Xclients.sample
If you want to copy a file to the current directory and retain the same name, use a period (.) as the second argument of the cp command. Thus, the following command copies the XF86Config file from the /etc/X11 directory to the current directory (denoted by a single period):
cp /etc/X11/XF86Config .
The cp command makes a new copy of a file and leaves the original intact.
Another common file operation is deleting a file. Use the rm command to delete a file named old.list, for example, by typing the following command:
rm old.list
Caution |
Be careful with the rm command—in particular, when you log in as root. Inadvertently deleting important files with rm is very common. One way to avoid problems is to add the command alias rm='rm -i' to the .bash_profile file in your home directory. With that in place, whenever you use the rm command to delete a file, the command first asks for confirmation. |
To organize files in your home directory, you have to create new directories. Use the mkdir command to create a directory. For example, to create a directory named images in the current directory, type the following:
mkdir images
After you create the directory, you can type the cd images command to change to that directory.
You can create an entire directory tree by using the -p option of the mkdir command. For example, suppose that your system has a /usr/src directory and you want to create the directory tree /usr/src/book/java/examples/applets. You can create this directory hierarchy by typing the following command:
mkdir -p /usr/src/book/java/examples/applets
When you no longer need a directory, use the rmdir command to delete it. You can delete a directory only when the directory is empty.
To remove an empty directory tree, you can use the –p option, like this:
rmdir -p /usr/src/book/java/examples/applets
This command removes the empty parent directories of applets. The command stops when it encounters a directory that’s not empty.
The dd command is useful for copying binary data to a floppy disk (or to other devices, such as tape). For example, if you want to make a Red Hat boot disk on a Linux system, you can use the dd command to prepare the boot disk before you install Red Hat Linux from this book’s companion CD-ROMs. Perform the following steps to prepare the boot disk:
Log in as root and mount the first CD from this book’s companion CD-ROMs on /mnt/cdrom (type mount /mnt/cdrom). Change to the directory with the boot images as follows:
cd /mnt/cdrom/images
Place a formatted floppy disk in the floppy drive, then type the following command to copy the bootdisk.img file to the floppy disk:
dd if=bootdisk.img of=/dev/fd0 bs=1440k
If you want to copy another boot image to the floppy, replace bootdisk.img with that file’s name.
Two programs in the GNU file utilities—df and du—enable you to check disk-space usage. These commands are simple to use. The df command shows you a summary of disk-space usage for all mounted devices, as shown in the following example:
df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda5 7392428 3412688 3604224 49% / /dev/hda3 101107 8865 87021 10% /boot none 127328 0 127328 0% /dev/shm /dev/cdrom 75322 75322 0 100% /mnt/cdrom
The output is a table that shows the device, the total kilobytes of storage, how much is in use, how much is available, the percentage being used, and the mount point. For example, on my system, the /dev/hda5 device (a disk partition) is mounted on the Linux file system’s root directory; it has about 7.4GB of space, of which 3.4GB (or 49 percent) is being used, and 3.6GB is available. Similarly, you can see from the last line that the CD-ROM has about 75MB of storage in use.
The other command, du, is useful for finding out how much space a directory is using. For example, type the following command to view the contents of all the subdirectories in the /var/log directory (this directory contains various error logs):
du /var/log 4 /var/log/vbox 12528 /var/log/cups 4 /var/log/samba 4 /var/log/news/OLD 8 /var/log/news 60 /var/log/httpd 4 /var/log/squid 36 /var/log/gdm 14764 /var/log
Each directory name is preceded by a number—that number denotes the number of kilobytes of disk space that directory uses. Thus, the /var/log directory, as a whole, uses 14764KB, or about 14.7MB, of disk space, whereas the /var/log/httpd subdirectory uses 60KB.
You can use the -h option with the du command to view the disk-space usage in human-readable format. For example, here’s what you get when you type du -h /var/log to view the disk space used by the /var/log directory and its contents:
du -h /var/log 4.0K /var/log/vbox 13M /var/log/cups 4.0K /var/log/samba 4.0K /var/log/news/OLD 8.0K /var/log/news 60K /var/log/httpd 4.0K /var/log/squid 36K /var/log/gdm 15M /var/log
If you simply want the total disk space a directory uses (including all the files and subdirectories contained in that directory), use the -s option together with the -h option, as follows:
du -sh /var/log 15M /var/log
Notice that the -s option causes du to print just the summary information for the /var/log directory.
The find command is very useful for locating files (and directories) that meet specified search criteria. The Linux version of the find command also comes from GNU, and it has more extensive options than the standard UNIX version. I show the syntax for the standard UNIX find command, however, because it syntax works in GNU find, and you can use the same format on other UNIX systems.
I must admit that when I began using UNIX many years ago (Berkeley UNIX in the early 1980s), I was confounded by the find command. I stayed with one basic syntax of find for a long time before graduating to more complex forms. The basic syntax I learned first was for finding a file anywhere in the file system.
Suppose that you want to find any file or directory with a name that starts with gnome. You can use find to perform this search, as follows:
find / -name "gnome*" -print
This command tells find to start looking at the root directory (/), to look for filenames that match gnome*, and to display the full pathname of any matching file.
You can use variations of this simple form of find to locate a file in any directory (as well as any subdirectories contained in the directory). If you forget where in your home directory you have stored all files named report* (names that start with the text string report), you can search for the files by using the following command:
find ~ -name "report*" -print
When you become comfortable with this syntax of find, you can use other options of find. For example, to find only specific types of files (such as directories), use the -type option. The following command displays all top-level directory names in your Linux system:
find / -type d -maxdepth 1 -print
To find all files that exceed 20,000KB (20MB) in size, you can use the following find command:
find / -size +20000k -print
You probably do not have to use the complex forms of find very often in a typical Linux system, but you can look up the rest of the find options by using the following command:
man find