On-line Guides

How To Guides






Advanced Bash-Scripting Guide:
Prev Chapter 13. System and Administrative CommandsNext

13.1. Analyzing a System Script

Using our knowledge of administrative commands, let us examine a system script. One of the shortest and simplest to understand scripts is killall, used to suspend running processes at system shutdown.

Example 13-11. killall, from /etc/rc.d/init.d

#!/bin/sh
# --> Comments added by the author of this document marked by "# -->".
# --> This is part of the 'rc' script package
# --> by Miquel van Smoorenburg, <[email protected]>.
# --> This particular script seems to be Red Hat / FC specific
# --> (may not be present in other distributions).
# Bring down all unneeded services that are still running
#+ (there shouldn't be any, so this is just a sanity check)
for i in /var/lock/subsys/*; do
 # --> Standard for/in loop, but since "do" is on same line,
 # --> it is necessary to add ";".
 # Check if the script is there.
 [ ! -f $i ] && continue
 # --> This is a clever use of an "and list", equivalent to:
 # --> if [ ! -f "$i" ]; then continue
 # Get the subsystem name.
 subsys=${i#/var/lock/subsys/}
 # --> Match variable name, which, in this case, is the file name.
 # --> This is the exact equivalent of subsys=`basename $i`.
	
 # --> It gets it from the lock file name
 # -->+ (if there is a lock file,
 # -->+ that's proof the process has been running).
 # --> See the "lockfile" entry, above.
 # Bring the subsystem down.
 if [ -f /etc/rc.d/init.d/$subsys.init ]; then
 /etc/rc.d/init.d/$subsys.init stop
 else
 /etc/rc.d/init.d/$subsys stop
 # --> Suspend running jobs and daemons.
 # --> Note that "stop" is a positional parameter,
 # -->+ not a shell builtin.
 fi
done

That wasn't so bad. Aside from a little fancy footwork with variable matching, there is no new material there.

Exercise 1. In /etc/rc.d/init.d, analyze the halt script. It is a bit longer than killall, but similar in concept. Make a copy of this script somewhere in your home directory and experiment with it (do not run it as root). Do a simulated run with the -vn flags (sh -vn scriptname). Add extensive comments. Change the "action" commands to "echos".

Exercise 2. Look at some of the more complex scripts in /etc/rc.d/init.d. See if you can understand parts of them. Follow the above procedure to analyze them. For some additional insight, you might also examine the file sysvinitfiles in /usr/share/doc/initscripts-?.??, which is part of the "initscripts" documentation.


Prev Home Next
System and Administrative CommandsUp Command Substitution
Published under the terms of the GNU General Public License Design by Interspire

AltStyle によって変換されたページ (->オリジナル) /