Piping Data
Many Linux commands can be used in concert in a single, connected command line to transform data from one form to another. Stringing Linux commands together in this fashion is known as using or creating pipes. Pipes are created on the command line with the bar operator (|). For example, a pipe can be used to perform a complex task from a single command line like this:
$ find /d2 -name '*.txt' -print | xargs cat | \
tr ' ' '\n' | sort | uniq >output.txt
This example takes the output of the find command to feed the cat command (via xargs) the name of all text files under the /d2 command. The content of all matching files is then fed through the tr command to change each space in the data stream into a carriage return. The stream of words is then sorted, and identical adjacent lines are removed with the uniq command. The output, a raw list of words, is then saved in the file named output.txt.
Background Processing
The shell enables you to start a command and then launch it into the background as a process by using an ampersand (&) at the end of a command line. This technique is often used at the command line of an X terminal window to start a client and return to the command line. For example, to launch another terminal window using the xterm client,
$ xterm &
[3] 1437
The numbers echoed back show a number (3 in this example), which is a job number, or reference number for a shell process, and a Process ID number, or PID (1437 in this example). You can kill the xterm window session by using the shell's built-in kill command, along with the job number like this:
$ kill %3
Or the process can be killed with the kill command, along with the PID, like so:
$ kill 1437
Background processing can be used in shell scripts to start commands that take a long time, such as backups:
# tar -czf /backup/home.tgz /home &
You can use these commands and tools when using the shell or writing shell scripts:
► chsh — Command used to change one's login shell
► kibitz — Allows two-person interaction with a single shell
► mc — A visual shell named the GNU Midnight Commander
► nano — An easy-to-use text editor for the console
► system-config-users — A graphical user-management utility that can be used to change one or more user login shells
► shar — Command used to create shell archives
► vi — The vi (actually vim) text editor
Reference
► http://www.linuxgazette.com/issue70/ghosh.html — A Linux Gazette article on "Bootstrapping Linux," which includes much detail on the BIOS and MBR aspects of the boot process.
► http://www.lostcircuits.com/advice/bios2/1.shtml — the LostCircuits BIOS guide; much detail on the meaning of all those BIOS settings.
► http://www.rojakpot.com/default.aspx?location=1 — The BIOS Optimization Guide; details on tweaking those BIOS settings to your heart's content.
► http://www-106.ibm.com/developerworks/linux/library/l-slack.html — A link through IBM's website to an article on booting Slackware Linux, along with a sidebar about the history of System V versus BSD init scripts.
► /usr/src/linux/init/main.c — This file in the Linux source code is the best place to learn about how Linux boots. Fascinating reading, really. Get it from the source!
► http://sunsite.dk/linux-newbie/ — Home page for the Linux Newbie Administrator Guide — a gentle introduction to Linux System Administration.
► http://www.gnu.org/software/grub/manual/ — The still yet-to-be-completed GRUB Manual. On your Fedora system, info grub provides a plethora of information, and a sample grub.conf file (/boot/grub/menu.lst is a symbolic link to /boot/grub/grub.conf; use either name) can be found in /usr/doc/grub.
► LILO User's Guide — Werner Almesberger's definitive technical tome on the LInux LOader, or LILO, and how it works on Intel-based PCs. Look under the /usr/share/doc/lilo*/doc directory for the file User_Guide.ps, which can be viewed with the gv client. LILO has been dropped from Fedora; GRUB is now the default boot loader supported in the distribution.
► "Managing Initscripts with Red Hat's chkconfig" — by Jimmy Ball, Linux Journal, April 2001; pp. 128-132.
► "Grub, Glorious Grub" — Hoyt Duff, Linux Format, August 2001; pp. 58-61. A tutorial on the GRUB boot loader.
► http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/custom-guide/s1-services-serviceconf.html — Red Hat's guide to use the system-config-service client (then called redhat-config-service).
► http://www.linuxbase.org/spec/refspecs/LSB_1.0.0/gLSB/sysinit.html — The Linux Standard Base description of system initialization; this is the standard.
CHAPTER 12
System-Monitoring Tools
To keep your system in optimum shape, you need to keep a close eye on it. Such monitoring is imperative in a corporate environment where uptime is vital and any system failures can cost real money. Whether it is checking processes for any errant daemons or keeping a close eye on CPU and memory use, Fedora provides a wealth of utilities designed to give you as little or as much feedback as you want. This chapter looks at some of the basic monitoring tools, along with some tactics designed to keep your system up longer. Some of the monitoring tools cover network connectivity, memory, and hard drive use, but all should find a place in your sysadmin toolkit. Finally, you will learn how to manipulate active system processes, using a mixture of graphical and command-line tools.
Console-Based Monitoring
Those familiar with UNIX system administration already know about the ps or process display command commonly found on most flavors of UNIX. Because Linux is closely related to UNIX, it also benefits from this command and allows you to quickly see the current running processes on the system, as well as who owns them and how resource hungry they are.
Although the Linux kernel has its own distinct architecture and memory management, it also benefits from enhanced use of the /proc file system, the virtual file system found on many UNIX flavors. Through the /proc file system, you can communicate directly with the kernel to get a deep view of what is currently happening. Developers tend to use the /proc file system as a way of getting information out from the kernel and for their programs to manipulate it into more human-readable formats. The /proc file system is beyond the scope of this book, but if you want to get a better idea of what it contains you should head on over to http://en.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html for an excellent and in-depth guide.