summaryrefslogtreecommitdiffstats
path: root/slackbook/html/book.html
diff options
context:
space:
mode:
Diffstat (limited to 'slackbook/html/book.html')
-rw-r--r--slackbook/html/book.html13511
1 files changed, 13511 insertions, 0 deletions
diff --git a/slackbook/html/book.html b/slackbook/html/book.html
new file mode 100644
index 000000000..c0803a78e
--- /dev/null
+++ b/slackbook/html/book.html
@@ -0,0 +1,13511 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta name="generator" content="HTML Tidy, see www.w3.org" />
+<title>Slackware Linux Essentials</title>
+<meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" />
+<link rel="STYLESHEET" type="text/css" href="docbook.css" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+</head>
+<body class="BOOK" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"
+alink="#0000FF">
+<div class="BOOK"><a id="AEN1" name="AEN1"></a>
+<div class="TITLEPAGE">
+<h1 class="TITLE"><a id="AEN2" name="AEN2">Slackware Linux Essentials</a></h1>
+
+<p><img src="slackware_logo.png" align="CENTER" /></p>
+
+<h3 class="AUTHOR"><a id="AEN30" name="AEN30"></a>Alan Hicks</h3>
+
+<h3 class="AUTHOR"><a id="AEN43" name="AEN43"></a>Chris Lumens</h3>
+
+<h3 class="AUTHOR"><a id="AEN47" name="AEN47"></a>David Cantrell</h3>
+
+<h3 class="AUTHOR"><a id="AEN50" name="AEN50"></a>Logan Johnson</h3>
+
+<p class="COPYRIGHT">Copyright &copy; 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Slackware Linux, Inc.</p>
+
+<div class="LEGALNOTICE"><a id="TRADEMARKS" name="TRADEMARKS"></a>
+<p>Slackware Linux is a registered trademark of Patrick Volkerding and Slackware Linux,
+Inc.</p>
+
+<p>Linux is a registered trademark of Linus Torvalds.</p>
+
+<p>America Online and AOL are registered trademarks of America Online, Inc. in the United
+States and/or other countries.</p>
+
+<p>Apple, FireWire, Mac, Macintosh, Mac OS, Quicktime, and TrueType are trademarks of
+Apple Computer, Inc., registered in the United States and other countries.</p>
+
+<p>IBM, AIX, EtherJet, Netfinity, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks
+of International Business Machines Corporation in the United States, other countries, or
+both.</p>
+
+<p>IEEE, POSIX, and 802 are registered trademarks of Institute of Electrical and
+Electronics Engineers, Inc. in the United States.</p>
+
+<p>Intel, Celeron, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or
+registered trademarks of Intel Corporation or its subsidiaries in the United States and
+other countries.</p>
+
+<p>Microsoft, IntelliMouse, MS-DOS, Outlook, Windows, Windows Media and Windows NT are
+either registered trademarks or trademarks of Microsoft Corporation in the United States
+and/or other countries.</p>
+
+<p>Netscape and the Netscape Navigator are registered trademarks of Netscape
+Communications Corporation in the U.S. and other countries.</p>
+
+<p>Red Hat, RPM, are trademarks or registered trademarks of Red Hat, Inc. in the United
+States and other countries.</p>
+
+<p>XFree86 is a trademark of The XFree86 Project, Inc.</p>
+
+<p>Many of the designations used by manufacturers and sellers to distinguish their
+products are claimed as trademarks. Where those designations appear in this document, and
+Slackware Linux, Inc. was aware of the trademark claim, the designations have been
+followed by the &#8220;&trade;&#8221; or the &#8220;&reg;&#8221; symbol.</p>
+</div>
+
+<span class="ISBN">1-57176-338-4<br />
+</span>
+<div class="DOCFORAMTNAVI">[ <a href="./index.html">Split HTML</a> / <a
+href="./book.html">Single HTML</a> ]</div>
+
+<hr />
+</div>
+
+<div class="TOC">
+<dl>
+<dt><b>Table of Contents</b></dt>
+
+<dt><a href="#BOOK-PREFACE">Preface</a></dt>
+
+<dt>1 <a href="#INTRODUCTION">An Introduction to Slackware Linux</a></dt>
+
+<dd>
+<dl>
+<dt>1.1 <a href="#INTRODUCTION-LINUX">What is Linux?</a></dt>
+
+<dd>
+<dl>
+<dt>1.1.1 <a href="#INTRODUCTION-LINUX-GNU">A Word on GNU</a></dt>
+</dl>
+</dd>
+
+<dt>1.2 <a href="#INTRODUCTION-SLACKWARE">What is Slackware?</a></dt>
+
+<dt>1.3 <a href="#INTRODUCTION-OPENSOURCE">Open Source and Free Software</a></dt>
+</dl>
+</dd>
+
+<dt>2 <a href="#HELP">Help</a></dt>
+
+<dd>
+<dl>
+<dt>2.1 <a href="#HELP-SYSTEM">System Help</a></dt>
+
+<dd>
+<dl>
+<dt>2.1.1 <a href="#HELP-SYSTEM-MAN"><tt class="COMMAND">man</tt></a></dt>
+
+<dt>2.1.2 <a href="#HELP-SYSTEM-DOC">The <tt class="FILENAME">/usr/doc</tt>
+Directory</a></dt>
+
+<dt>2.1.3 <a href="#HELP-SYSTEM-HOWTO">HOWTOs and mini-HOWTOs</a></dt>
+</dl>
+</dd>
+
+<dt>2.2 <a href="#HELP-ONLINE">Online Help</a></dt>
+
+<dd>
+<dl>
+<dt>2.2.1 <a href="#HELP-ONLINE-OFFICIAL">The Official Website and Help Forums</a></dt>
+
+<dt>2.2.2 <a href="#HELP-ONLINE-EMAIL">E-mail Support</a></dt>
+
+<dt>2.2.3 <a href="#HELP-ONLINE-NONOFFICIAL">Non-Official Websites and Help
+Forums</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>3 <a href="#INSTALLATION">Installation</a></dt>
+
+<dd>
+<dl>
+<dt>3.1 <a href="#INSTALLATION-GETTING">Getting Slackware</a></dt>
+
+<dd>
+<dl>
+<dt>3.1.1 <a href="#AEN641">The Official Disc and Box Sets</a></dt>
+
+<dt>3.1.2 <a href="#AEN683">Via the Internet</a></dt>
+</dl>
+</dd>
+
+<dt>3.2 <a href="#INSTALLATION-REQUIREMENTS">System Requirements</a></dt>
+
+<dd>
+<dl>
+<dt>3.2.1 <a href="#INSTALLATION-SOFTWARE-SERIES">The Software Series</a></dt>
+
+<dt>3.2.2 <a href="#INSTALLATION-METHODS">Installation Methods</a></dt>
+
+<dt>3.2.3 <a href="#INSTALLATION-INSTALLATION-METHODS-BOOTDISK">Boot Disk</a></dt>
+
+<dt>3.2.4 <a href="#INSTALLATION-INSTALLATION-METHODS-ROOTDISK">Root Disk</a></dt>
+
+<dt>3.2.5 <a href="#INSTALLATION-SUPPLEMENTAL-DISK">Supplemental Disk</a></dt>
+
+<dt>3.2.6 <a href="#INSTALLATION-MAKING-THE-DISKS">Making the Disks</a></dt>
+</dl>
+</dd>
+
+<dt>3.3 <a href="#INSTALLATION-PARTITIONING">Partitioning</a></dt>
+
+<dt>3.4 <a href="#INSTALLATION-SETUP">The <tt class="COMMAND">setup</tt> Program</a></dt>
+
+<dd>
+<dl>
+<dt>3.4.1 <a href="#AEN993">HELP</a></dt>
+
+<dt>3.4.2 <a href="#AEN1001">KEYMAP</a></dt>
+
+<dt>3.4.3 <a href="#AEN1013">ADDSWAP</a></dt>
+
+<dt>3.4.4 <a href="#AEN1023">TARGET</a></dt>
+
+<dt>3.4.5 <a href="#AEN1035">SOURCE</a></dt>
+
+<dt>3.4.6 <a href="#AEN1054">SELECT</a></dt>
+
+<dt>3.4.7 <a href="#AEN1062">INSTALL</a></dt>
+
+<dt>3.4.8 <a href="#AEN1100">CONFIGURE</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>4 <a href="#SYSTEM-CONFIGURATION">System Configuration</a></dt>
+
+<dd>
+<dl>
+<dt>4.1 <a href="#SYSTEM-CONFIGURATION-OVERVIEW">System Overview</a></dt>
+
+<dd>
+<dl>
+<dt>4.1.1 <a href="#SYSTEM-CONFIGURATION-LAYOUT">File System Layout</a></dt>
+
+<dt>4.1.2 <a href="#SYSTEM-CONFIGURATION-FINDING">Finding Files</a></dt>
+
+<dt>4.1.3 <a href="#SYSTEM-CONFIGURATION-RCD">The <tt class="FILENAME">/etc/rc.d</tt>
+Directory</a></dt>
+</dl>
+</dd>
+
+<dt>4.2 <a href="#SYSTEM-CONFIGURATION-KERNEL">Selecting a Kernel</a></dt>
+
+<dd>
+<dl>
+<dt>4.2.1 <a href="#AEN1581">The <tt class="FILENAME">/kernels</tt> Directory on the
+Slackware CD-ROM</a></dt>
+
+<dt>4.2.2 <a href="#SYSTEM-CONFIGURATION-KERNEL-COMPILE">Compiling a Kernel from
+Source</a></dt>
+
+<dt>4.2.3 <a href="#SYSTEM-CONFIGURATION-KERNEL-MODULES">Using Kernel Modules</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>5 <a href="#NETWORK-CONFIGURATION">Network Configuration</a></dt>
+
+<dd>
+<dl>
+<dt>5.1 <a href="#NETWORK-CONFIGURATION-NETCONFIG">Introduction: netconfig is your
+friend.</a></dt>
+
+<dt>5.2 <a href="#NETWORK-CONFIGURATION-HARDWARE">Network Hardware Configuration</a></dt>
+
+<dd>
+<dl>
+<dt>5.2.1 <a href="#NETWORK-CONFIGURATION-HARDWARE-MODULES">Loading Network
+Modules</a></dt>
+
+<dt>5.2.2 <a href="#NETWORK-CONFIGURATION-HARDWARE-LAN">LAN (10/100/1000Base-T and
+Base-2) cards</a></dt>
+
+<dt>5.2.3 <a href="#NETWORK-CONFIGURATION-HARDWARE-MODEMS">Modems</a></dt>
+
+<dt>5.2.4 <a href="#NETWORK-CONFIGURATION-HARDWARE-PCMCIA">PCMCIA</a></dt>
+</dl>
+</dd>
+
+<dt>5.3 <a href="#NETWORK-CONFIGURATION-TCPIP">TCP/IP Configuration</a></dt>
+
+<dd>
+<dl>
+<dt>5.3.1 <a href="#NETWORK-CONFIGURATION-TCPIP-DHCP">DHCP</a></dt>
+
+<dt>5.3.2 <a href="#NETWORK-CONFIGURATION-TCPIP-STATIC">Static IP</a></dt>
+
+<dt>5.3.3 <a href="#NETWORK-CONFIGURATION-TCPIP-CONF"><tt
+class="FILENAME">/etc/rc.d/rc.inet1.conf</tt></a></dt>
+
+<dt>5.3.4 <a href="#NETWORK-CONFIGURATION-TCPIP-RESOLVER"><tt
+class="FILENAME">/etc/resolv.conf</tt></a></dt>
+
+<dt>5.3.5 <a href="#NETWORK-CONFIGURATION-TCPIP-HOSTS"><tt
+class="FILENAME">/etc/hosts</tt></a></dt>
+</dl>
+</dd>
+
+<dt>5.4 <a href="#NETWORK-CONFIGURATION-PPP">PPP</a></dt>
+
+<dd>
+<dl>
+<dt>5.4.1 <a href="#AEN1954"><tt class="COMMAND">pppsetup</tt></a></dt>
+
+<dt>5.4.2 <a href="#AEN1969"><tt class="FILENAME">/etc/ppp</tt></a></dt>
+</dl>
+</dd>
+
+<dt>5.5 <a href="#NETWORK-CONFIGURATION-WIRELESS">Wireless</a></dt>
+
+<dd>
+<dl>
+<dt>5.5.1 <a href="#AEN2033">Hardware Support</a></dt>
+
+<dt>5.5.2 <a href="#AEN2044">Configure the Wireless Settings</a></dt>
+
+<dt>5.5.3 <a href="#AEN2101">Configure the Network</a></dt>
+</dl>
+</dd>
+
+<dt>5.6 <a href="#NETWORK-CONFIGURATION-NFS">Network File Systems</a></dt>
+
+<dd>
+<dl>
+<dt>5.6.1 <a href="#NETWORK-CONFIGURATION-NSF-SMB">SMB/Samba/CIFS</a></dt>
+
+<dt>5.6.2 <a href="#NETWORK-CONFIGURATION-NFS-NFS">Network File System (NFS)</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>6 <a href="#X-WINDOW-SYSTEM">X Configuration</a></dt>
+
+<dd>
+<dl>
+<dt>6.1 <a href="#X-WINDOW-SYSTEM-XORGCONFIG"><tt
+class="COMMAND">xorgconfig</tt></a></dt>
+
+<dt>6.2 <a href="#X-WINDOW-SYSTEM-XORGSETUP"><tt class="COMMAND">xorgsetup</tt></a></dt>
+
+<dt>6.3 <a href="#X-WINDOW-SYSTEM-XINITRC">xinitrc</a></dt>
+
+<dt>6.4 <a href="#X-WINDOW-SYSTEM-XWMCONFIG"><tt class="COMMAND">xwmconfig</tt></a></dt>
+
+<dt>6.5 <a href="#X-WINDOW-SYSTEM-XDM"><tt class="COMMAND">xdm</tt></a></dt>
+</dl>
+</dd>
+
+<dt>7 <a href="#BOOTING">Booting</a></dt>
+
+<dd>
+<dl>
+<dt>7.1 <a href="#BOOTING-LILO">LILO</a></dt>
+
+<dt>7.2 <a href="#BOOTING-LOADLIN">LOADLIN</a></dt>
+
+<dt>7.3 <a href="#BOOTING-DUAL">Dual Booting</a></dt>
+
+<dd>
+<dl>
+<dt>7.3.1 <a href="#BOOTING-DUAL-WINDOWS">Windows</a></dt>
+
+<dt>7.3.2 <a href="#BOOTING-DUAL-LINUX">Linux</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>8 <a href="#SHELL">The Shell</a></dt>
+
+<dd>
+<dl>
+<dt>8.1 <a href="#SHELL-USERS">Users</a></dt>
+
+<dd>
+<dl>
+<dt>8.1.1 <a href="#AEN2678">Logging In</a></dt>
+
+<dt>8.1.2 <a href="#AEN2693">Root: The Superuser</a></dt>
+</dl>
+</dd>
+
+<dt>8.2 <a href="#SHELL-COMMAND-LINE">The Command Line</a></dt>
+
+<dd>
+<dl>
+<dt>8.2.1 <a href="#SHELL-COMMAND-LINE-RUNNING">Running Programs</a></dt>
+
+<dt>8.2.2 <a href="#SHELL-COMMAND-LINE-WILDCARD">Wildcard Matching</a></dt>
+
+<dt>8.2.3 <a href="#SHELL-COMMAND-LINE-PIPING">Input/Output Redirection and
+Piping</a></dt>
+</dl>
+</dd>
+
+<dt>8.3 <a href="#SHELL-BASH">The Bourne Again Shell (bash)</a></dt>
+
+<dd>
+<dl>
+<dt>8.3.1 <a href="#SHELL-BASH-ENVIRONMENT">Environment Variables</a></dt>
+
+<dt>8.3.2 <a href="#SHELL-BASH-TAB">Tab Completion</a></dt>
+</dl>
+</dd>
+
+<dt>8.4 <a href="#SHELL-VT">Virtual Terminals</a></dt>
+
+<dd>
+<dl>
+<dt>8.4.1 <a href="#AEN3024">Screen</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>9 <a href="#FILESYSTEM-STRUCTURE">Filesystem Structure</a></dt>
+
+<dd>
+<dl>
+<dt>9.1 <a href="#FILESYSTEM-STRUCTURE-OWNERSHIP">Ownership</a></dt>
+
+<dt>9.2 <a href="#FILESYSTEM-STRUCTURE-PERMISSIONS">Permissions</a></dt>
+
+<dt>9.3 <a href="#FILESYSTEM-STRUCTURE-LINKS">Links</a></dt>
+
+<dt>9.4 <a href="#FILESYSTEM-STRUCTURE-MOUNTING">Mounting Devices</a></dt>
+
+<dd>
+<dl>
+<dt>9.4.1 <a href="#AEN3319"><tt class="FILENAME">fstab</tt></a></dt>
+
+<dt>9.4.2 <a href="#AEN3340"><tt class="COMMAND">mount</tt> and <tt
+class="COMMAND">umount</tt></a></dt>
+</dl>
+</dd>
+
+<dt>9.5 <a href="#FILESYSTEM-STRUCTURE-NFS">NFS Mounts</a></dt>
+</dl>
+</dd>
+
+<dt>10 <a href="#FILE-COMMANDS">Handling Files and Directories</a></dt>
+
+<dd>
+<dl>
+<dt>10.1 <a href="#FILE-COMMANDS-NAVIGATION">Navigation : <tt class="COMMAND">ls</tt>,
+<tt class="COMMAND">cd</tt>, and <tt class="COMMAND">pwd</tt></a></dt>
+
+<dd>
+<dl>
+<dt>10.1.1 <a href="#AEN3398"><tt class="COMMAND">ls</tt></a></dt>
+
+<dt>10.1.2 <a href="#AEN3436"><tt class="COMMAND">cd</tt></a></dt>
+
+<dt>10.1.3 <a href="#AEN3463"><tt class="COMMAND">pwd</tt></a></dt>
+</dl>
+</dd>
+
+<dt>10.2 <a href="#FILE-COMMANDS-PAGERS">Pagers: <tt class="COMMAND">more</tt>, <tt
+class="COMMAND">less</tt>, and <tt class="COMMAND">most</tt></a></dt>
+
+<dd>
+<dl>
+<dt>10.2.1 <a href="#AEN3491"><tt class="COMMAND">more</tt></a></dt>
+
+<dt>10.2.2 <a href="#AEN3518"><tt class="COMMAND">less</tt></a></dt>
+
+<dt>10.2.3 <a href="#AEN3539"><tt class="COMMAND">most</tt></a></dt>
+</dl>
+</dd>
+
+<dt>10.3 <a href="#FILE-COMMANDS-OUTPUT">Simple Output: <tt class="COMMAND">cat</tt> and
+<tt class="COMMAND">echo</tt></a></dt>
+
+<dd>
+<dl>
+<dt>10.3.1 <a href="#AEN3559"><tt class="COMMAND">cat</tt></a></dt>
+
+<dt>10.3.2 <a href="#AEN3603"><tt class="COMMAND">echo</tt></a></dt>
+</dl>
+</dd>
+
+<dt>10.4 <a href="#FILE-COMMANDS-CREATION">Creation: <tt class="COMMAND">touch</tt> and
+<tt class="COMMAND">mkdir</tt></a></dt>
+
+<dd>
+<dl>
+<dt>10.4.1 <a href="#AEN3619"><tt class="COMMAND">touch</tt></a></dt>
+
+<dt>10.4.2 <a href="#AEN3639"><tt class="COMMAND">mkdir</tt></a></dt>
+</dl>
+</dd>
+
+<dt>10.5 <a href="#FILE-COMMANDS-COPYMOVE">Copy and Move</a></dt>
+
+<dd>
+<dl>
+<dt>10.5.1 <a href="#FILE-COMMANDS-COPYMOVE-CP"><tt class="COMMAND">cp</tt></a></dt>
+
+<dt>10.5.2 <a href="#AEN3712"><tt class="COMMAND">mv</tt></a></dt>
+</dl>
+</dd>
+
+<dt>10.6 <a href="#FILE-COMMANDS-DELETION">Deletion: <tt class="COMMAND">rm</tt> and <tt
+class="COMMAND">rmdir</tt></a></dt>
+
+<dd>
+<dl>
+<dt>10.6.1 <a href="#AEN3733"><tt class="COMMAND">rm</tt></a></dt>
+
+<dt>10.6.2 <a href="#AEN3764"><tt class="COMMAND">rmdir</tt></a></dt>
+</dl>
+</dd>
+
+<dt>10.7 <a href="#FILE-COMMANDS-LINK">Aliasing files with <tt
+class="COMMAND">ln</tt></a></dt>
+</dl>
+</dd>
+
+<dt>11 <a href="#PROCESS-CONTROL">Process Control</a></dt>
+
+<dd>
+<dl>
+<dt>11.1 <a href="#PROCESS-CONTROL-BACKGROUNDING">Backgrounding</a></dt>
+
+<dt>11.2 <a href="#PROCESS-CONTROL-FOREGROUNDING">Foregrounding</a></dt>
+
+<dt>11.3 <a href="#PROCESS-CONTROL-PS"><tt class="COMMAND">ps</tt></a></dt>
+
+<dt>11.4 <a href="#PROCESS-CONTROL-KILL"><tt class="COMMAND">kill</tt></a></dt>
+
+<dt>11.5 <a href="#PROCESS-CONTROL-TOP"><tt class="COMMAND">top</tt></a></dt>
+</dl>
+</dd>
+
+<dt>12 <a href="#ESSENTIAL-SYSADMIN">Essential System Administration</a></dt>
+
+<dd>
+<dl>
+<dt>12.1 <a href="#ESSENTIAL-SYSADMIN-USERS">Users and Groups</a></dt>
+
+<dd>
+<dl>
+<dt>12.1.1 <a href="#ESSENTIAL-SYSADMIN-USERS-SCRIPTS">Supplied Scripts</a></dt>
+
+<dt>12.1.2 <a href="#ESSENTIAL-SYSADMIN-USERS-PASSWDS">Changing Passwords</a></dt>
+
+<dt>12.1.3 <a href="#ESSENTIAL-SYSADMIN-USERS-CHANGING">Changing User
+Information</a></dt>
+</dl>
+</dd>
+
+<dt>12.2 <a href="#ESSENTIAL-SYSADMIN-HARDUSERS">Users and Groups, the Hard Way</a></dt>
+
+<dt>12.3 <a href="#ESSENTIAL-SYSADMIN-SHUTDOWN">Shutting Down Properly</a></dt>
+</dl>
+</dd>
+
+<dt>13 <a href="#BASIC-NETWORK-COMMANDS">Basic Network Commands</a></dt>
+
+<dd>
+<dl>
+<dt>13.1 <a href="#BASIC-NETWORK-COMMANDS-PING"><tt class="COMMAND">ping</tt></a></dt>
+
+<dt>13.2 <a href="#BASIC-NETWORK-COMMANDS-TRACEROUTE"><tt
+class="COMMAND">traceroute</tt></a></dt>
+
+<dt>13.3 <a href="#BASIC-NETWORK-COMMANDS-DNS">DNS Tools</a></dt>
+
+<dd>
+<dl>
+<dt>13.3.1 <a href="#AEN4475"><tt class="COMMAND">host</tt></a></dt>
+
+<dt>13.3.2 <a href="#AEN4487"><tt class="COMMAND">nslookup</tt></a></dt>
+
+<dt>13.3.3 <a href="#AEN4496"><tt class="COMMAND">dig</tt></a></dt>
+</dl>
+</dd>
+
+<dt>13.4 <a href="#BASIC-NETWORK-COMMANDS-FINGER"><tt
+class="COMMAND">finger</tt></a></dt>
+
+<dt>13.5 <a href="#BASIC-NETWORK-COMMANDS-TELNET"><tt
+class="COMMAND">telnet</tt></a></dt>
+
+<dd>
+<dl>
+<dt>13.5.1 <a href="#AEN4593">The other use of telnet</a></dt>
+</dl>
+</dd>
+
+<dt>13.6 <a href="#BASIC-NETWORK-COMMANDS-SSH">The Secure shell</a></dt>
+
+<dt>13.7 <a href="#BASIC-NETWORK-COMMANDS-EMAIL">email</a></dt>
+
+<dd>
+<dl>
+<dt>13.7.1 <a href="#BASIC-NETWORK-COMMANDS-EMAIL-PINE"><tt
+class="COMMAND">pine</tt></a></dt>
+
+<dt>13.7.2 <a href="#BASIC-NETWORK-COMMANDS-EMAIL-ELM"><tt
+class="COMMAND">elm</tt></a></dt>
+
+<dt>13.7.3 <a href="#BASIC-NETWORK-COMMANDS-EMAIL-MUTT"><tt
+class="COMMAND">mutt</tt></a></dt>
+
+<dt>13.7.4 <a href="#BASIC-NETWORK-COMMANDS-EMAIL-NAIL"><tt
+class="COMMAND">nail</tt></a></dt>
+</dl>
+</dd>
+
+<dt>13.8 <a href="#BASIC-NETWORK-COMMANDS-WEB">Browsers</a></dt>
+
+<dd>
+<dl>
+<dt>13.8.1 <a href="#AEN4776"><tt class="COMMAND">lynx</tt></a></dt>
+
+<dt>13.8.2 <a href="#AEN4813"><tt class="COMMAND">links</tt></a></dt>
+
+<dt>13.8.3 <a href="#AEN4831"><tt class="COMMAND">wget</tt></a></dt>
+</dl>
+</dd>
+
+<dt>13.9 <a href="#BASIC-NETWORK-COMMANDS-FTP">FTP Clients</a></dt>
+
+<dd>
+<dl>
+<dt>13.9.1 <a href="#AEN4871"><tt class="COMMAND">ftp</tt></a></dt>
+
+<dt>13.9.2 <a href="#BASIC-NETWORK-COMMANDS-FTP-NCFTP"><tt
+class="COMMAND">ncftp</tt></a></dt>
+</dl>
+</dd>
+
+<dt>13.10 <a href="#BASIC-NETWORK-COMMANDS-TALK">Talking to Other People</a></dt>
+
+<dd>
+<dl>
+<dt>13.10.1 <a href="#AEN4989"><tt class="COMMAND">wall</tt></a></dt>
+
+<dt>13.10.2 <a href="#AEN5006"><tt class="COMMAND">talk</tt></a></dt>
+
+<dt>13.10.3 <a href="#AEN5033"><tt class="COMMAND">ytalk</tt></a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>14 <a href="#SECURITY">Security</a></dt>
+
+<dd>
+<dl>
+<dt>14.1 <a href="#SECURITY-DISABLE">Disabling Services</a></dt>
+
+<dd>
+<dl>
+<dt>14.1.1 <a href="#AEN5081">Services started from <tt
+class="COMMAND">inetd</tt></a></dt>
+
+<dt>14.1.2 <a href="#AEN5102">Services started from init scripts</a></dt>
+</dl>
+</dd>
+
+<dt>14.2 <a href="#SECURITY-HOST">Host Access Control</a></dt>
+
+<dd>
+<dl>
+<dt>14.2.1 <a href="#SECURITY-HOST-IPTABLES"><tt class="COMMAND">iptables</tt></a></dt>
+
+<dt>14.2.2 <a href="#SECURITY-HOST-TCPWRAPPERS"><tt
+class="COMMAND">tcpwrappers</tt></a></dt>
+</dl>
+</dd>
+
+<dt>14.3 <a href="#SECURITY-CURRENT">Keeping Current</a></dt>
+
+<dd>
+<dl>
+<dt>14.3.1 <a href="#SECURITY-CURRENT-LIST"><var class="LITERAL">slackware-security</var>
+mailing list</a></dt>
+
+<dt>14.3.2 <a href="#SECURITY-CURRENT-PATCHES">The <tt class="FILENAME">/patches</tt>
+directory</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>15 <a href="#ARCHIVE-FILES">Archive Files</a></dt>
+
+<dd>
+<dl>
+<dt>15.1 <a href="#ARCHIVE-FILES-GZIP"><tt class="COMMAND">gzip</tt></a></dt>
+
+<dt>15.2 <a href="#ARCHIVE-FILES-BZIP2"><tt class="COMMAND">bzip2</tt></a></dt>
+
+<dt>15.3 <a href="#ARCHIVE-FILES-TAR"><tt class="COMMAND">tar</tt></a></dt>
+
+<dt>15.4 <a href="#ARCHIVE-FILES-ZIP"><tt class="COMMAND">zip</tt></a></dt>
+</dl>
+</dd>
+
+<dt>16 <a href="#VI">Vi</a></dt>
+
+<dd>
+<dl>
+<dt>16.1 <a href="#VI-STARTING">Starting vi</a></dt>
+
+<dt>16.2 <a href="#VI-MODES">Modes</a></dt>
+
+<dd>
+<dl>
+<dt>16.2.1 <a href="#VI-MODES-COMMAND-MODE">Command Mode</a></dt>
+
+<dt>16.2.2 <a href="#VI-MODES-INSET-MODE">Insert Mode</a></dt>
+</dl>
+</dd>
+
+<dt>16.3 <a href="#VI-OPENING-FILES">Opening Files</a></dt>
+
+<dt>16.4 <a href="#VI-SAVING-FILES">Saving Files</a></dt>
+
+<dt>16.5 <a href="#VI-QUITTING-VI">Quitting vi</a></dt>
+
+<dt>16.6 <a href="#VI-CONFIGURATION">vi Configuration</a></dt>
+
+<dt>16.7 <a href="#VI-KEYS">Vi Keys</a></dt>
+</dl>
+</dd>
+
+<dt>17 <a href="#EMACS">Emacs</a></dt>
+
+<dd>
+<dl>
+<dt>17.1 <a href="#EMACS-STARTING">Starting emacs</a></dt>
+
+<dd>
+<dl>
+<dt>17.1.1 <a href="#EMACS-COMMAND-KEYS">Command Keys</a></dt>
+</dl>
+</dd>
+
+<dt>17.2 <a href="#EMACS-BUFFERS">Buffers</a></dt>
+
+<dt>17.3 <a href="#EMACS-MODES">Modes</a></dt>
+
+<dd>
+<dl>
+<dt>17.3.1 <a href="#EMACS-OPENING-FILES">Opening files</a></dt>
+</dl>
+</dd>
+
+<dt>17.4 <a href="#EMACS-BASIC-EDITING">Basic Editing</a></dt>
+
+<dt>17.5 <a href="#EMACS-SAVING-FILES">Saving Files</a></dt>
+
+<dd>
+<dl>
+<dt>17.5.1 <a href="#EMACS-QUITING">Quitting Emacs</a></dt>
+</dl>
+</dd>
+</dl>
+</dd>
+
+<dt>18 <a href="#PACKAGE-MANAGEMENT">Slackware Package Management</a></dt>
+
+<dd>
+<dl>
+<dt>18.1 <a href="#PACKAGE-MANAGEMENT-OVERVIEW">Overview of Package Format</a></dt>
+
+<dt>18.2 <a href="#PACKAGE-MANAGEMENT-PACKAGE-UTILITIES">Package Utilities</a></dt>
+
+<dd>
+<dl>
+<dt>18.2.1 <a href="#PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-PKGTOOL">pkgtool</a></dt>
+
+<dt>18.2.2 <a href="#PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-INSTALLPKG">installpkg</a></dt>
+
+<dt>18.2.3 <a href="#PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-REMOVEPKG">removepkg</a></dt>
+
+<dt>18.2.4 <a href="#PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-UPGRADEPKG">upgradepkg</a></dt>
+
+<dt>18.2.5 <a href="#PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-RPM"><tt
+class="COMMAND">rpm2tgz</tt>/<tt class="COMMAND">rpm2targz</tt></a></dt>
+</dl>
+</dd>
+
+<dt>18.3 <a href="#PACKAGE-MANAGEMENT-MAKING-PACKAGES">Making Packages</a></dt>
+
+<dd>
+<dl>
+<dt>18.3.1 <a href="#PACKAGE-MANAGEMENT-EXPLODEPKG"><tt
+class="COMMAND">explodepkg</tt></a></dt>
+
+<dt>18.3.2 <a href="#PACKAGE-MANAGEMENT-MAKEPKG"><tt
+class="COMMAND">makepkg</tt></a></dt>
+
+<dt>18.3.3 <a href="#PACKAGE-MANAGEMENT-SLACKBUILD-SCRIPTS">SlackBuild Scripts</a></dt>
+</dl>
+</dd>
+
+<dt>18.4 <a href="#PACKAGE-MANAGEMENT-MAKING-TAGS-AND-TAGFILES">Making Tags and Tagfiles
+(for setup)</a></dt>
+</dl>
+</dd>
+
+<dt>19 <a href="#ZIPSLACK">ZipSlack</a></dt>
+
+<dd>
+<dl>
+<dt>19.1 <a href="#ZIPSLACK-WHAT">What is ZipSlack?</a></dt>
+
+<dd>
+<dl>
+<dt>19.1.1 <a href="#ZIPSLACK-ADVANTAGES">Advantages</a></dt>
+
+<dt>19.1.2 <a href="#ZIPSLACK-DISADVANTAGES">Disadvantages</a></dt>
+</dl>
+</dd>
+
+<dt>19.2 <a href="#ZIPSLACK-GETTING">Getting ZipSlack</a></dt>
+
+<dd>
+<dl>
+<dt>19.2.1 <a href="#ZIPSLACK-INSTALLATION">Installation</a></dt>
+</dl>
+</dd>
+
+<dt>19.3 <a href="#ZIPSLACK-BOOTING">Booting ZipSlack</a></dt>
+</dl>
+</dd>
+
+<dt><a href="#GLOSSARY">Glossary</a></dt>
+
+<dt>A. <a href="#GPL">The GNU General Public License</a></dt>
+
+<dd>
+<dl>
+<dt>A.1. <a href="#AEN7088">Preamble</a></dt>
+
+<dt>A.2. <a href="#AEN7098">TERMS AND CONDITIONS</a></dt>
+
+<dt>A.3. <a href="#AEN7162">How to Apply These Terms to Your New Programs</a></dt>
+</dl>
+</dd>
+</dl>
+</div>
+
+<div class="LOT">
+<dl class="LOT">
+<dt><b>List of Tables</b></dt>
+
+<dt>2-1. <a href="#AEN409">Man Page Sections</a></dt>
+
+<dt>3-1. <a href="#AEN661">Slackware Linux, Inc. Contact Information</a></dt>
+
+<dt>3-2. <a href="#AEN706">System Requirements</a></dt>
+
+<dt>3-3. <a href="#AEN746">Software Series</a></dt>
+
+<dt>9-1. <a href="#AEN3142">Octal Permission Values</a></dt>
+
+<dt>13-1. <a href="#AEN4883"><tt class="COMMAND">ftp</tt> commands</a></dt>
+
+<dt>16-1. <a href="#AEN5773">Movement</a></dt>
+
+<dt>16-2. <a href="#AEN5808">Editing</a></dt>
+
+<dt>16-3. <a href="#AEN5848">Searching</a></dt>
+
+<dt>16-4. <a href="#AEN5882">Saving and Quitting</a></dt>
+
+<dt>17-1. <a href="#TABLE-EMACS-BASIC-EDITING">Basic Emacs Editing Commands</a></dt>
+
+<dt>18-1. <a href="#AEN6446"><tt class="COMMAND">installpkg</tt> Options</a></dt>
+
+<dt>18-2. <a href="#AEN6491"><tt class="COMMAND">removepkg</tt> Options</a></dt>
+
+<dt>18-3. <a href="#AEN6621">Tagfile Status Options</a></dt>
+</dl>
+</div>
+
+<div class="LOT">
+<dl class="LOT">
+<dt><b>List of Figures</b></dt>
+
+<dt>4-1. <a href="#SYSTEM-CONFIGURATION-MAKE-MENUCONFIG">Kernel Configuration
+Menu</a></dt>
+
+<dt>6-1. <a href="#X-WINDOW-SYSTEM-1"><tt class="COMMAND">xorgconfig</tt> Mouse
+Configuration</a></dt>
+
+<dt>6-2. <a href="#X-WINDOW-SYSTEM-2"><tt class="COMMAND">xorgconfig</tt> Horizontal
+Sync</a></dt>
+
+<dt>6-3. <a href="#X-WINDOW-SYSTEM-3"><tt class="COMMAND">xorgconfig</tt> Vertical
+Sync</a></dt>
+
+<dt>6-4. <a href="#X-WINDOW-SYSTEM-4"><tt class="COMMAND">xorgconfig</tt> Video
+Card</a></dt>
+
+<dt>6-5. <a href="#FIG-X-WINDOW-SYSTEM-XWMCONFIG">Desktop Configuration with <tt
+class="COMMAND">xorgconfig</tt></a></dt>
+
+<dt>7-1. <a href="#BOOTING-SETUP-LILO"><tt class="COMMAND">liloconfig</tt></a></dt>
+
+<dt>7-2. <a href="#BOOTING-LILO-EXPERT"><tt class="COMMAND">liloconfig</tt> Expert
+Menu</a></dt>
+
+<dt>11-1. <a href="#FIG-PROCESS-CONTROL-PS-SHORT">Basic <tt class="COMMAND">ps</tt>
+output</a></dt>
+
+<dt>13-1. <a href="#FIG-BASIC-NETWORK-COMMANDS-TELNET-WEB">Telnetting to a
+webserver</a></dt>
+
+<dt>13-2. <a href="#FIG-BASIC-NETWORK-COMMANDS-EMAIL-PINE">The Pine main menu</a></dt>
+
+<dt>13-3. <a href="#FIG-BASIC-NETWORK-COMMANDS-EMAIL-ELM">Elm main screen</a></dt>
+
+<dt>13-4. <a href="#FIG-BASIC-NETWORK-COMMANDS-EMAIL-MUTT">Mutt main screen</a></dt>
+
+<dt>13-5. <a href="#FIG-BASIC-NETWORK-COMMANDS-WEB-LYNX">Lynx default start page</a></dt>
+
+<dt>13-6. <a href="#FIG-BASIC-NETWORK-COMMANDS-WEB-LINKS">Links, with the file menu
+open</a></dt>
+
+<dt>13-7. <a href="#FIG-BASIC-NETWORK-COMMANDS-TALK-TALK">Two users in a <tt
+class="COMMAND">talk</tt> session</a></dt>
+
+<dt>13-8. <a href="#FIG-BASIC-NETWORK-COMMANDS-TALK-YTALK">Two users in a <tt
+class="COMMAND">ytalk</tt> session</a></dt>
+
+<dt>16-1. <a href="#FIG-VI-VIM-SPLITEDIT">A vi session.</a></dt>
+
+<dt>18-1. <a href="#PKGTOOL-MAIN-MENU">Pkgtool's main menu.</a></dt>
+
+<dt>18-2. <a href="#PKGTOOL-VIEW-MODE">Pkgtool view mode</a></dt>
+</dl>
+</div>
+
+<div class="LOT">
+<dl class="LOT">
+<dt><b>List of Examples</b></dt>
+
+<dt>8-1. <a href="#EX-SHELL-BASH-ENVIRONMENT">Listing Environment Variables with <tt
+class="COMMAND">set</tt></a></dt>
+</dl>
+</div>
+
+<div class="PREFACE">
+<hr />
+<h1><a id="BOOK-PREFACE" name="BOOK-PREFACE"></a>Preface</h1>
+
+<h2 class="BRIDGEHEAD"><a id="PREFACE-AUDIENCE" name="PREFACE-AUDIENCE"></a>Intended
+Audience</h2>
+
+<p>The Slackware Linux operating system is a powerful platform for Intel-based computers.
+It is designed to be stable, secure, and functional as both a high-end server and
+powerful workstation.</p>
+
+<p>This book is designed to get you started with the Slackware Linux operating system.
+It's not meant to cover every single aspect of the distribution, but rather to show what
+it is capable of and give you a basic working knowledge of the system.</p>
+
+<p>As you gain experience with Slackware Linux, we hope you find this book to be a handy
+reference. We also hope you'll lend it to all of your friends when they come asking about
+that cool Slackware Linux operating system you're running.</p>
+
+<p>While this book may not an edge-of-your-seat novel, we certainly tried to make it as
+entertaining as possible. With any luck, we'll get a movie deal. Of course, we also hope
+you are able to learn from it and find it useful.</p>
+
+<p>And now, on with the show.</p>
+
+<h2 class="BRIDGEHEAD"><a id="PREFACE-CHANGES" name="PREFACE-CHANGES"></a>Changes from
+the First Edition</h2>
+
+<p>This second edition is the culmination of years of hard work by the dedicated members
+of the Slackware Documentation Project. The following are the major changes in this new
+edition:</p>
+
+<ul>
+<li>
+<p><a href="#INSTALLATION">Chapter 3</a>, Installation, has been modified with new
+screenshots of the installer, and reflects changes in disk-sets, and CD installation.</p>
+</li>
+
+<li>
+<p><a href="#SYSTEM-CONFIGURATION">Chapter 4</a>, System Configuration, has been updated
+with new information about Linux 2.6.x kernels.</p>
+</li>
+
+<li>
+<p><a href="#NETWORK-CONFIGURATION">Chapter 5</a>, Network Configuration, has been
+expanded with further explanation of Samba, NFS, and DHCP. A section on wireless
+networking has also been added. This chapter now reflects major changes in how Slackware
+handles network setup.</p>
+</li>
+
+<li>
+<p><a href="#X-WINDOW-SYSTEM">Chapter 6</a>, X Window System, has been substantially
+rewritten for Xorg based systems. This chapter now also covers the xdm graphical login
+manager.</p>
+</li>
+
+<li>
+<p><a href="#BASIC-NETWORK-COMMANDS">Chapter 13</a>, Basic Network Commands, has been
+enhanced with information about additional network utilities.</p>
+</li>
+
+<li>
+<p><a href="#SECURITY">Chapter 14</a>, Security, is a new chapter with this edition. It
+explains how to keep a Slackware Linux system secure.</p>
+</li>
+
+<li>
+<p><a href="#EMACS">Chapter 17</a>, Emacs, is a new chapter with this edition. It
+describes how to use Emacs, a powerful editor for Unix.</p>
+</li>
+
+<li>
+<p><a href="#PACKAGE-MANAGEMENT">Chapter 18</a>, Package Management, has been updated
+with information about SlackBuild scripts.</p>
+</li>
+
+<li>
+<p>There are many other changes, both minor and major, to reflect changes in Slackware as
+it has matured.</p>
+</li>
+</ul>
+
+<h2 class="BRIDGEHEAD"><a id="PREFACE-ORGANIZATION"
+name="PREFACE-ORGANIZATION"></a>Organization of this Book</h2>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><a href="#INTRODUCTION">Chapter 1</a>, Introduction</dt>
+
+<dd>
+<p>Provides introductory material on Linux, Slackware, and the Open Source and Free
+Software Movements.</p>
+</dd>
+
+<dt><a href="#HELP">Chapter 2</a>, Help</dt>
+
+<dd>
+<p>Describes the help resources available on a Slackware Linux system and online.</p>
+</dd>
+
+<dt><a href="#INSTALLATION">Chapter 3</a>, Installation</dt>
+
+<dd>
+<p>Describes the installation process step-by-step with screenshots to provide an
+illustrative walk-through.</p>
+</dd>
+
+<dt><a href="#SYSTEM-CONFIGURATION">Chapter 4</a>, System Configuration</dt>
+
+<dd>
+<p>Describes the important configuration files and covers kernel recompilation.</p>
+</dd>
+
+<dt><a href="#NETWORK-CONFIGURATION">Chapter 5</a>, Network Configuration</dt>
+
+<dd>
+<p>Describes how to connect a Slackware Linux machine to a network. Covers TCP/IP,
+PPP/dial-up, wireless networking, and more.</p>
+</dd>
+
+<dt><a href="#X-WINDOW-SYSTEM">Chapter 6</a>, The X Window System</dt>
+
+<dd>
+<p>Describes how to setup and use the graphical X Window System in Slackware.</p>
+</dd>
+
+<dt><a href="#BOOTING">Chapter 7</a>, Booting</dt>
+
+<dd>
+<p>Describes the process by which a computer boots into Slackware Linux. Also covers
+dual-booting with Microsoft Windows operating systems.</p>
+</dd>
+
+<dt><a href="#SHELL">Chapter 8</a>, The Shell</dt>
+
+<dd>
+<p>Describes the powerful command line interface for Linux.</p>
+</dd>
+
+<dt><a href="#FILESYSTEM-STRUCTURE">Chapter 9</a>, Filesystem Structure</dt>
+
+<dd>
+<p>Describes the filesystem structure, including file ownership, permission, and
+linking.</p>
+</dd>
+
+<dt><a href="#FILE-COMMANDS">Chapter 10</a>, Handling Files and Directories</dt>
+
+<dd>
+<p>Describes the commands used to manipulate files and directories from the command line
+interface.</p>
+</dd>
+
+<dt><a href="#PROCESS-CONTROL">Chapter 11</a>, Process Control</dt>
+
+<dd>
+<p>Describes the powerful Linux process management commands used to manage multiple
+running applications.</p>
+</dd>
+
+<dt><a href="#ESSENTIAL-SYSADMIN">Chapter 12</a>, Essential System Administration</dt>
+
+<dd>
+<p>Describes basic system administration tasks such as adding and removing users,
+shutting down the system properly, and more.</p>
+</dd>
+
+<dt><a href="#BASIC-NETWORK-COMMANDS">Chapter 13</a>, Basic Network Commands</dt>
+
+<dd>
+<p>Describes the collection of network clients included with Slackware.</p>
+</dd>
+
+<dt><a href="#SECURITY">Chapter 14</a>, Security</dt>
+
+<dd>
+<p>Describes many different tools available to help keep your Slackware system secure,
+including <tt class="COMMAND">iptables</tt> and <tt class="COMMAND">tcpwrappers</tt>.</p>
+</dd>
+
+<dt><a href="#ARCHIVE-FILES">Chapter 15</a>, Archive Files</dt>
+
+<dd>
+<p>Describes the different compression and archive utilities available for Linux.</p>
+</dd>
+
+<dt><a href="#VI">Chapter 16</a>, vi</dt>
+
+<dd>
+<p>Describes the powerful <tt class="COMMAND">vi</tt> text editor.</p>
+</dd>
+
+<dt><a href="#EMACS">Chapter 17</a>, Emacs</dt>
+
+<dd>
+<p>Describes the powerful <tt class="COMMAND">Emacs</tt> text editor.</p>
+</dd>
+
+<dt><a href="#PACKAGE-MANAGEMENT">Chapter 18</a>, Slackware Package Management</dt>
+
+<dd>
+<p>Describes the Slackware package utilities and the process used to create custom
+packages and tagfiles.</p>
+</dd>
+
+<dt><a href="#ZIPSLACK">Chapter 19</a>, ZipSlack</dt>
+
+<dd>
+<p>Describes the ZipSlack version of Linux that can be used from Windows without
+requiring an installation.</p>
+</dd>
+
+<dt><a href="#GPL">Appendix A</a>, The GNU General Public License</dt>
+
+<dd>
+<p>Describes the license terms under which Slackware Linux and this book can be copied
+and distributed.</p>
+</dd>
+</dl>
+</div>
+
+<h2 class="BRIDGEHEAD"><a id="PREFACE-CONV" name="PREFACE-CONV"></a>Conventions used in
+this book</h2>
+
+<p>To provide a consistent and easy to read text, several conventions are followed
+throughout the book.</p>
+
+<h3 class="BRIDGEHEAD"><a id="PREFACE-CONV-TYPOGRAPHIC"
+name="PREFACE-CONV-TYPOGRAPHIC"></a>Typographic Conventions</h3>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><span class="emphasis"><i class="EMPHASIS">Italic</i></span></dt>
+
+<dd>
+<p>An <span class="emphasis"><i class="EMPHASIS">italic</i></span> font is used for
+commands, emphasized text, and the first usage of technical terms.</p>
+</dd>
+
+<dt><var class="VARNAME">Monospace</var></dt>
+
+<dd>
+<p>A <var class="VARNAME">monospaced</var> font is used for error messages, commands,
+environment variables, names of ports, hostnames, user names, group names, device names,
+variables, and code fragments.</p>
+</dd>
+
+<dt><b class="APPLICATION">Bold</b></dt>
+
+<dd>
+<p>A <b class="APPLICATION">bold</b> font is used for user input in examples.</p>
+</dd>
+</dl>
+</div>
+
+<h3 class="BRIDGEHEAD"><a id="PREFACE-CONV-COMMANDS"
+name="PREFACE-CONV-COMMANDS"></a>User Input</h3>
+
+<p>Keys are shown in <b class="KEYCAP">bold</b> to stand out from other text. Key
+combinations that are meant to be typed simultaneously are shown with `<var
+class="LITERAL">+</var>' between the keys, such as:</p>
+
+<p><b class="KEYCAP">Ctrl</b>+<b class="KEYCAP">Alt</b>+<b class="KEYCAP">Del</b></p>
+
+<p>Meaning the user should type the <b class="KEYCAP">Ctrl</b>, <b
+class="KEYCAP">Alt</b>, and <b class="KEYCAP">Del</b> keys at the same time.</p>
+
+<p>Keys that are meant to be typed in sequence will be separated with commas, for
+example:</p>
+
+<p><b class="KEYCAP">Ctrl</b>+<b class="KEYCAP">X</b>, <b class="KEYCAP">Ctrl</b>+<b
+class="KEYCAP">S</b></p>
+
+<p>Would mean that the user is expected to type the <b class="KEYCAP">Ctrl</b> and <b
+class="KEYCAP">X</b> keys simultaneously and then to type the <b class="KEYCAP">Ctrl</b>
+and <b class="KEYCAP">S</b> keys simultaneously.</p>
+
+<h3 class="BRIDGEHEAD"><a id="PREFACE-CONV-EXAMPLES"
+name="PREFACE-CONV-EXAMPLES"></a>Examples</h3>
+
+<p>Examples starting with <tt class="DEVICENAME">E:\&gt;</tt> indicate a <span
+class="TRADEMARK">MS-DOS</span>&reg; command. Unless otherwise noted, these commands may
+be executed from a &#8220;Command Prompt&#8221; window in a modern <span
+class="TRADEMARK">Microsoft</span>&reg;&nbsp;<span class="TRADEMARK">Windows</span>&reg;
+environment.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">D:\&gt;</samp> <kbd class="USERINPUT">rawrite a: bare.i</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Examples starting with <samp class="PROMPT">#</samp> indicate a command that must be
+invoked as the superuser in Slackware. You can login as <tt class="USERNAME">root</tt> to
+type the command, or login as your normal account and use <span
+class="CITEREFENTRY"><span class="REFENTRYTITLE">su</span>(1)</span> to gain superuser
+privileges.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">dd if=bare.i of=/dev/fd0</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Examples starting with <samp class="PROMPT">%</samp> indicate a command that should be
+invoked from a normal user account. Unless otherwise noted, C-shell syntax is used for
+setting environment variables and other shell commands.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">top</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<h2 class="BRIDGEHEAD"><a id="PREFACE-ACKNOWLEDGEMENTS"
+name="PREFACE-ACKNOWLEDGEMENTS"></a>Acknowledgments</h2>
+
+<p>This project is the accumulation of months of work by many dedicated individuals. It
+would not have been possible for me to produce this work in a vacuum. Many people deserve
+our thanks for their selfless acts: Keith Keller for his work on wireless networking,
+Joost Kremers for his great work in single-handedly writing the emacs section, Simon
+Williams for the security chapter, Jurgen Phillippaerts for basic networking commands,
+Cibao Cu Ali G Colibri for the inspiration and a good kick in the pants. Countless others
+have sent in suggestions and fixes. An incomplete list includes: Jacob Anhoej, John Yast,
+Sally Welch, Morgan Landry, and Charlie Law. I'd also like to thank Keith Keller for
+hosting the mailing list for this project, as well as Carl Inglis for the initial web
+hosting. Last but not least, I'd like to thank Patrick J. Volkerding for Slackware Linux,
+and David Cantrell, Logan Johnson, and Chris Lumens for Slackware Linux Essentials 1st
+Edition. Without their initial framework, none of this would have ever happened. Many
+others have contributed in small and large ways to this project and have not been listed.
+I hope they will forgive me for a poor memory.</p>
+
+<p>Alan Hicks, May 2005</p>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="INTRODUCTION" name="INTRODUCTION"></a>Chapter 1 An Introduction to Slackware
+Linux</h1>
+
+<div class="SECT1">
+<h2 class="SECT1"><a id="INTRODUCTION-LINUX" name="INTRODUCTION-LINUX">1.1 What is
+Linux?</a></h2>
+
+<p>Linus Torvalds started Linux, an operating system kernel, as a personal project in
+1991. He started the project because he wanted to run a Unix-based operating system
+without spending a lot of money. In addition, he wanted to learn the ins and outs of the
+386 processor. Linux was released free of charge to the public so that anyone could study
+it and make improvements under the General Public License. (See <a
+href="#INTRODUCTION-OPENSOURCE">Section 1.3</a> and <a href="#GPL">Appendix A</a> for an
+explanation of the license.) Today, Linux has grown into a major player in the operating
+system market. It has been ported to run on a variety of system architectures, including
+HP/Compaq's Alpha, Sun's SPARC and UltraSPARC, and Motorola's PowerPC chips (through
+Apple Macintosh and IBM RS/6000 computers.) Hundreds, if not thousands, of programmers
+all over the world now develop Linux. It runs programs like Sendmail, Apache, and BIND,
+which are very popular software used to run Internet servers. It's important to remember
+that the term &#8220;Linux&#8221; really refers to the kernel - the core of the operating
+system. This core is responsible for controlling your computer's processor, memory, hard
+drives, and peripherals. That's all Linux really does: It controls the operations of your
+computer and makes sure that all of its programs behave. Various companies and
+individuals bundle the kernel and various programs together to make an operating system.
+We call each bundle a Linux distribution.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INTRODUCTION-LINUX-GNU" name="INTRODUCTION-LINUX-GNU">1.1.1 A
+Word on GNU</a></h3>
+
+<p>The Linux kernel project began as a solo endeavor by Linus Torvalds in 1991, but as
+Isaac Newton once said, &#8220;If I have seen further, it is by standing on the shoulders
+of giants.&#8221; When Linus Torvalds began the kernel the Free Software Foundation had
+already established the idea of collaborative software. They entitled their effort GNU, a
+recursive acronym that means simply &#8220;GNU's Not Unix&#8221;. GNU software ran atop
+the Linux kernel from day 1. Their compiler <tt class="COMMAND">gcc</tt> was used to
+compile the kernel. Today many GNU tools from <tt class="COMMAND">gcc</tt> to <tt
+class="COMMAND">gnutar</tt> are still at the basis of every major Linux distribution. For
+this reason many of the Free Software Foundation's proponents fervently state that their
+work should be given the same credit as the Linux kernel. They strongly suggest that all
+Linux distributions should refer to themselves as GNU/Linux distributions.</p>
+
+<p>This is the topic of many flamewars, surpassed only by the ancient vi versus emacs
+holy war. The purpose of this book is not to fan the fires of this heated discussion, but
+rather to clarify the terminology for neophytes. When one sees GNU/Linux it means a Linux
+distribution. When one sees Linux they can either be referring to the kernel, or to a
+distribution. It can be rather confusing. Typically the term GNU/Linux isn't used because
+it's a mouth full.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="INTRODUCTION-SLACKWARE" name="INTRODUCTION-SLACKWARE">1.2 What
+is Slackware?</a></h2>
+
+<p>Slackware, started by Patrick Volkerding in late 1992, and initially released to the
+world on July 17, 1993, was the first Linux distribution to achieve widespread use.
+Volkerding first learned of Linux when he needed an inexpensive LISP interpreter for a
+project. One of the few distributions available at the time was SLS Linux from Soft
+Landing Systems. Volkerding used SLS Linux, fixing bugs as he found them. Eventually, he
+decided to merge all of these bugfixes into his own private distribution that he and his
+friends could use. This private distribution quickly gained popularity, so Volkerding
+decided to name it Slackware and make it publicly available. Along the way, Patrick added
+new things to Slackware; a user friendly installation program based on a menuing system,
+as well as the concept of package management, which allows users to easily add, remove,
+or upgrade software packages on their systems.</p>
+
+<p>There are many reasons why Slackware is Linux's oldest living distribution. It does
+not try to emulate Windows, it tries to be as Unix-like as possible. It does not try to
+cover up processes with fancy, point-and-click GUIs (Graphical User Interfaces). Instead,
+it puts users in control by letting them see exactly what's going on. Its development is
+not rushed to meet deadlines-each version comes out when it is ready.</p>
+
+<p>Slackware is for people who enjoy learning and tweaking their system to do exactly
+what they want. Slackware's stability and simplicity are why people will continue to use
+it for years to come. Slackware currently enjoys a reputation as a solid server and a
+no-nonsense workstation. You can find Slackware desktops running nearly any window
+manager or desktop environment, or none at all. Slackware servers power businesses,
+acting in every capacity that a server can be used in. Slackware users are among the most
+satisfied Linux users. Of course, we'd say that. :^)</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="INTRODUCTION-OPENSOURCE" name="INTRODUCTION-OPENSOURCE">1.3 Open
+Source and Free Software</a></h2>
+
+<p>Within the Linux community, there are two major ideological movements at work. The
+Free Software movement (which we'll get into in a moment) is working toward the goal of
+making all software free of intellectual property restrictions. Followers of this
+movement believe these restrictions hamper technical improvement and work against the
+good of the community. The Open Source movement is working toward most of the same goals,
+but takes a more pragmatic approach to them. Followers of this movement prefer to base
+their arguments on the economic and technical merits of making source code freely
+available, rather than the moral and ethical principles that drive the Free Software
+Movement.</p>
+
+<p>At the other end of the spectrum are groups that wish to maintain tighter controls
+over their software.</p>
+
+<p>The Free Software movement is headed by the Free Software Foundation, a fund-raising
+organization for the GNU project. Free software is more of an ideology. The oft-used
+expression is &#8220;free as in speech, not free as in beer&#8221;. In essence, free
+software is an attempt to guarantee certain rights for both users and developers. These
+freedoms include the freedom to run the program for any reason, to study and modify the
+source code, to redistribute the source, and to share any modifications you make. In
+order to guarantee these freedoms, the GNU General Public License (GPL) was created. The
+GPL, in brief, provides that anyone distributing a compiled program which is licensed
+under the GPL must also provide source code, and is free to make modifications to the
+program as long as those modifications are also made available in source code form. This
+guarantees that once a program is &#8220;opened&#8221; to the community, it cannot be
+&#8220;closed&#8221; except by consent of every author of every piece of code (even the
+modifications) within it. Most Linux programs are licensed under the GPL.</p>
+
+<p>It is important to note that the GPL does not say anything about price. As odd as it
+may sound, you can charge for free software. The &#8220;free&#8221; part is in the
+liberties you have with the source code, not in the price you pay for the software.
+(However, once someone has sold you, or even given you, a compiled program licensed under
+the GPL they are obligated to provide its source code as well.)</p>
+
+<p>Another popular license is the BSD license. In contrast to the GPL, the BSD license
+gives no requirement for the release of a program's source code. Software released under
+the BSD license allows redistribution in source or binary form provided only a few
+conditions are met. The author's credentials cannot be used as a sort of advertisement
+for the program. It also indemnifies the author from liability for damages that may arise
+from the use of the software. Much of the software included in Slackware Linux is BSD
+licensed.</p>
+
+<p>At the forefront of the younger Open Source movement, the Open Source Initiative is an
+organization that solely exists to gain support for open source software, that is,
+software that has the source code available as well as the ready-to-run program. They do
+not offer a specific license, but instead they support the various types of open source
+licenses available.</p>
+
+<p>The idea behind the OSI is to get more companies behind open source by allowing them
+to write their own open source licenses and have those licenses certified by the Open
+Source Initiative. Many companies want to release source code, but do not want to use the
+GPL. Since they cannot radically change the GPL, they are offered the opportunity to
+provide their own license and have it certified by this organization.</p>
+
+<p>While the Free Software Foundation and the Open Source Initiative work to help each
+other, they are not the same thing. The Free Software Foundation uses a specific license
+and provides software under that license. The Open Source Initiative seeks support for
+all open source licenses, including the one from the Free Software Foundation. The
+grounds on which each argues for making source code freely available sometimes divides
+the two movements, but the fact that two ideologically diverse groups are working toward
+the same goal lends credence to the efforts of each.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="HELP" name="HELP"></a>Chapter 2 Help</h1>
+
+<p>Often there are times when you might need help with a specific command, setting up a
+program, or getting a piece of hardware to work. Maybe you simply want to understand a
+given command better, or see what other options are available to use with it. Luckily,
+there are a variety of ways that you can get the help you're looking for. When you
+install Slackware you have the option of installing packages from the &#8220;F&#8221;
+series which includes FAQs and HOWTOs. Programs also come with help about their options,
+configuration files, and usage.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="HELP-SYSTEM" name="HELP-SYSTEM">2.1 System Help</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="HELP-SYSTEM-MAN" name="HELP-SYSTEM-MAN">2.1.1 <tt
+class="COMMAND">man</tt></a></h3>
+
+<p>The <tt class="COMMAND">man</tt> command (short for &#8220;manual&#8221;) is the
+traditional form of online documentation in Unix and Linux operating systems. Comprised
+of specially formatted files, the &#8220;man pages&#8221;, are written for the vast
+majority of commands and are distributed with the software itself. Executing <tt
+class="COMMAND">man somecommand</tt> will display the man page for (naturally) the
+command specified, in our example this would be the imaginary program <tt
+class="COMMAND">somecommand</tt>.</p>
+
+<p>As you might imagine, the amount of man pages can quickly add up, becoming overly
+confusing and seriously complicated, even for an advanced user. So, for this reason, man
+pages are grouped into enumerated sections. This system has been around for a very long
+time; enough so that you will often see commands, programs, and even programming library
+functions referred to with their man section number.</p>
+
+<p>For example:</p>
+
+<p>You might see a reference to <tt class="COMMAND">man</tt>(1). The numbering tells you
+that &#8220;<tt class="COMMAND">man</tt>&#8221; is documented in section 1 (user
+commands); you can specify that you want the section 1 man page for &#8220;man&#8221;
+with the command <tt class="COMMAND">man 1 man</tt>. Specifying the section that man
+should look in is useful in the case of multiple items with the same name.</p>
+
+<div class="TABLE"><a id="AEN409" name="AEN409"></a>
+<p><b>Table 2-1. Man Page Sections</b></p>
+
+<table border="0" frame="void" width="100%" class="CALSTABLE">
+<col width="25%" />
+<col width="75%" />
+<thead>
+<tr>
+<th>Section</th>
+<th>Contents</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>Section 1</td>
+<td>user commands (intro only)</td>
+</tr>
+
+<tr>
+<td>Section 2</td>
+<td>system calls</td>
+</tr>
+
+<tr>
+<td>Section 3</td>
+<td>C library calls</td>
+</tr>
+
+<tr>
+<td>Section 4</td>
+<td>devices (e.g., <tt class="FILENAME">hd</tt>, <tt class="FILENAME">sd</tt>)</td>
+</tr>
+
+<tr>
+<td>Section 5</td>
+<td>file formats and protocols (e.g., wtmp, <tt class="FILENAME">/etc/passwd</tt>,
+nfs)</td>
+</tr>
+
+<tr>
+<td>Section 6</td>
+<td>games (intro only)</td>
+</tr>
+
+<tr>
+<td>Section 7</td>
+<td>conventions, macro packages, etc. (e.g., nroff, ascii)</td>
+</tr>
+
+<tr>
+<td>Section 8</td>
+<td>system administration (intro only)</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>In addition to <tt class="COMMAND">man</tt>(1), there are the commands <tt
+class="COMMAND">whatis</tt>(1) and <tt class="COMMAND">apropos</tt>(1) available to you,
+whose shared purpose is to make it easier to find information in the man system.</p>
+
+<p>The command <tt class="COMMAND">whatis</tt> gives a very brief description of system
+commands, somewhat in the style of a pocket command reference.</p>
+
+<p>Example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">whatis whatis</kbd>
+whatis (1) - search the whatis database for complete words
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The command <tt class="COMMAND">apropos</tt> is used to search for a man page
+containing a given keyword.</p>
+
+<p>Example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">apropos wav</kbd>
+cdda2wav (1) - a sampling utility that dumps CD audio data into wav sound files
+netwave_cs (4) - Xircom Creditcard Netwave device driver
+oggdec (1) - simple decoder, Ogg Vorbis file to PCM audio file (WAV or RAW)
+wavelan (4) - AT&amp;T GIS WaveLAN ISA device driver
+wavelan_cs (4) - AT&amp;T GIS WaveLAN PCMCIA device driver
+wvlan_cs (4) - Lucent WaveLAN/IEEE 802.11 device driver
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If you'd like further information on any of these commands, read their man pages for
+the details. ;)</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="HELP-SYSTEM-DOC" name="HELP-SYSTEM-DOC">2.1.2 The <tt
+class="FILENAME">/usr/doc</tt> Directory</a></h3>
+
+<p>The source for most packages that we build comes with some sort of documentation:
+README files, usage instructions, license files, etc. Any sort of documentation that
+comes with the source is included and installed on your system in the <tt
+class="FILENAME">/usr/doc</tt> directory. Each program will (usually) install its own
+documentation in the order of:</p>
+
+<p><tt class="FILENAME">/usr/doc/<var
+class="REPLACEABLE">$program-$version</var></tt></p>
+
+<p>Where <var class="REPLACEABLE">$program</var> is the name of the program you are
+wanting to read about, and <var class="REPLACEABLE">$version</var> is (obviously) the
+appropriate version of software package installed on your system.</p>
+
+<p>For example, to read the documentation for the command <tt class="COMMAND">man</tt>(1)
+you would want to <tt class="COMMAND">cd</tt> to:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd /usr/doc/man-<var
+class="REPLACEABLE">$version</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If reading the appropriate man page(s) doesn't provide you with enough information, or
+address what you're looking for in particular, the <tt class="FILENAME">/usr/doc</tt>
+directory should be your next stop.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="HELP-SYSTEM-HOWTO" name="HELP-SYSTEM-HOWTO">2.1.3 HOWTOs and
+mini-HOWTOs</a></h3>
+
+<p>It is in the truest spirit of the Open Source community that brings us to the
+HOWTO/mini-HOWTO collection. These files are exactly what they sound like - documents and
+guides describing how to do stuff. If you installed the HOWTO collection, the HOWTOs will
+be installed to <tt class="FILENAME">/usr/doc/Linux-HOWTOs</tt> and the mini-HOWTOs to
+<tt class="FILENAME">/usr/doc/Linux-mini-HOWTOs</tt>.</p>
+
+<p>Also included in the same package series is a collection of FAQs, which is an acronym
+which stands for</p>
+
+<div class="INFORMALTABLE"><a id="AEN497" name="AEN497"></a>
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<tbody>
+<tr>
+<td><span class="emphasis"><i class="EMPHASIS">F</i></span>requently</td>
+</tr>
+
+<tr>
+<td><span class="emphasis"><i class="EMPHASIS">A</i></span>sked</td>
+</tr>
+
+<tr>
+<td><span class="emphasis"><i class="EMPHASIS">Q</i></span>uestions</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>These documents are written in a &#8220;Question and answer&#8221; style for
+(surprise) Frequently Asked Questions. The FAQs can often be a very useful place to look
+if you're just looking for a &#8220;Quick Fix&#8221; to something. If you decide to
+install the FAQs during setup, you will find them installed to the <tt
+class="FILENAME">/usr/doc/Linux-FAQs</tt> directory.</p>
+
+<p>These files are well worth reading whenever you're not quite sure how to proceed with
+something. They cover an amazing range of topics, more often than not in a surprisingly
+detailed manner. Good stuff!</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="HELP-ONLINE" name="HELP-ONLINE">2.2 Online Help</a></h2>
+
+<p>In addition to the documentation provided and installable with the Slackware Linux
+Operating System, there are a vast multitude of online resources available for you to
+learn from as well.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="HELP-ONLINE-OFFICIAL" name="HELP-ONLINE-OFFICIAL">2.2.1 The
+Official Website and Help Forums</a></h3>
+
+<p><a href="http://www.slackware.com" target="_top">The Official Slackware
+Website</a></p>
+
+<p>The Official Slackware Linux website is sometimes out of date, but still contains
+information relevant to the latest Slackware versions. At one time an active help forum
+existed there before a horde of trolls, troublemakers, and whiners descended on the
+forum. Maintaining the forum was beginning to be too much work, and so Pat shut it down.
+One can find that old forum back up and running complete with searchable archives of the
+old data at <a href="http://www.userlocal.com/phorum/"
+target="_top">http://www.userlocal.com/phorum/</a>.</p>
+
+<p>After the forums were taken down on <a href="http://slackware.com"
+target="_top">http://slackware.com</a>, several other sites sprang up that offered forum
+support for Slackware. After much thought, Pat chose to endorse <a
+href="www.linuxquestions.org" target="_top">www.linuxquestions.org</a> as the official
+forum for Slackware Linux.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="HELP-ONLINE-EMAIL" name="HELP-ONLINE-EMAIL">2.2.2 E-mail
+Support</a></h3>
+
+<p>Everyone who purchases an official CD set is entitled to free installation support via
+e-mail from the developer. That having been said, please keep in mind that we, the
+developers, (and a vast majority of users) of Slackware are of &#8220;The Old
+School&#8221;. That means that we prefer to help those who have a sincere interest and
+are willing to help themselves in the process. We will always do our best to help
+everyone who emails us with support questions. However, Please check your documentation
+and the website (especially the FAQs and maybe some of the forums listed below) before
+e-mailing. You may get a faster answer that way, and the less e-mail we have to answer,
+obviously the sooner we will be of assistance to those that need it.</p>
+
+<p>The e-mail address for technical support is: <var
+class="LITERAL">support@slackware.com</var>. Other e-mail addresses and contact
+information are listed on the website.</p>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN535" name="AEN535">2.2.2.1 Slackware Linux Project Mailing
+Lists</a></h4>
+
+<p>We have several mailing lists, available in digest and normal forms. Check the
+instructions for how to subscribe.</p>
+
+<p>To subscribe to a mailing list, email:</p>
+
+<p><var class="LITERAL">majordomo@slackware.com</var></p>
+
+<p>with the phrase &#8220;<var class="LITERAL">subscribe <var class="REPLACEABLE">[name
+of list]</var></var>&#8221; in the body of the email. The list choices are described
+below (use one the names below for the name of the list).</p>
+
+<p>Archives of the mailing list can be found on Slackware's website at:</p>
+
+<p><var class="LITERAL">http://slackware.com/lists/archive/</var></p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><var class="LITERAL">slackware-announce</var></dt>
+
+<dd>
+<p>The <var class="LITERAL">slackware-announce</var> mailing list is for announcements of
+new versions, major updates and other general information.</p>
+</dd>
+
+<dt><var class="LITERAL">slackware-security</var></dt>
+
+<dd>
+<p>The <var class="LITERAL">slackware-security</var> mailing list is for announcements
+relating to security issues. Any exploits or other vulnerabilities directly pertaining to
+Slackware will get posted to this list immediately.</p>
+</dd>
+</dl>
+</div>
+
+<p>These lists are also available in digest format. This means that you get one large
+message per day instead of several messages throughout the day. Since the slackware
+mailing lists do not allow users to post, and the lists are such low traffic, most users
+find little advantage in the digest lists. Still, they are available if you want them by
+subscribing to <var class="LITERAL">slackware-announce-digest</var> or <var
+class="LITERAL">slackware-security-digest</var>.</p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="HELP-ONLINE-NONOFFICIAL" name="HELP-ONLINE-NONOFFICIAL">2.2.3
+Non-Official Websites and Help Forums</a></h3>
+
+<div class="SECT3">
+<h4 class="SECT3"><a id="AEN571" name="AEN571">2.2.3.1 Websites</a></h4>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><a href="http://www.google.com" target="_top">Google</a></dt>
+
+<dd>
+<p>The Kung-Fu Master of Search Engines. When you absolutely, positively gotta find every
+last kernel of information on a subject: Accept no substitutes.</p>
+</dd>
+
+<dt><a href="http://www.google.com/linux" target="_top">Google:Linux</a></dt>
+
+<dd>
+<p>Linux-Specific searches</p>
+</dd>
+
+<dt><a href="http://www.google.com/bsd" target="_top">Google:BSD</a></dt>
+
+<dd>
+<p>BSD-Specific searches. Slackware is so generic as a Unix work-a-like operating system
+that one can as often as not find very detailed information that is almost 100% relevant
+to Slackware here. Many times a BSD search reveals far more technical information than
+the often PR-related Linux searches.</p>
+</dd>
+
+<dt><a href="http://groups.google.com" target="_top">Google:Groups</a></dt>
+
+<dd>
+<p>Search through decades of Usenet posts for your pearls of wisdom.</p>
+</dd>
+
+<dt><a href="http://userlocal.com" target="_top">http://userlocal.com</a></dt>
+
+<dd>
+<p>A virtual treasure-trove of knowledge, good advice, first-hand experience and
+interesting articles. Often the first place you'll hear about new developments in the
+world of Slackware.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN601" name="AEN601">2.2.3.2 Web-based Resources</a></h4>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><a href="http://www.linuxquestions.org/questions/forumdisplay.php?forumid=14"
+target="_top">linuxquestions.org</a></dt>
+
+<dd>
+<p>The officially sanctioned web-forum for Slackware users.</p>
+</dd>
+
+<dt><a href="http://forums.linuxiso.org/viewforum.php?f=25" target="_top">LinuxISO.org
+Slackware Forum</a></dt>
+
+<dd>
+<p>&#8220;A place to download and get help with Linux.&#8221;</p>
+</dd>
+
+<dt><a href="http://wombat.san-francisco.ca.us/perl/fom"
+target="_top">alt.os.linux.slackware FAQ</a></dt>
+
+<dd>
+<p>Another FAQ</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN620" name="AEN620">2.2.3.3 Usenet Groups (NNTP)</a></h4>
+
+<p>Usenet has long been a place for geeks to gather and help one another. There are few
+newsgroups dedicated to Slackware Linux, but they tend to be filled with very
+knowledgeable people.</p>
+
+<p><var class="LITERAL">alt.os.linux.slackware</var></p>
+
+<p><var class="LITERAL">alt.os.linux.slackware</var>, better known as aols (not to be
+confused with <span class="TRADEMARK">AOL</span>&reg;!) is one of the most active places
+to find technical help with Slackware problems. Like every Usenet newsgroup, a few
+unhelpful participants (&#8220;trolls&#8221;) can mar the experience with constant
+arguing. Learning to ignore the trolls and identifying the truly helpful people is key to
+making the most of this resource.</p>
+</div>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="INSTALLATION" name="INSTALLATION"></a>Chapter 3 Installation</h1>
+
+<p>Before you can use Slackware Linux, you'll have to obtain and install it. Getting
+Slackware is as easy as purchasing it or downloading it for free over the Internet.
+Installing it is also easy as long as you have some basic knowledge about your computer
+and are willing to learn a few other things. The installation program itself is very much
+a step-by-step process. Because of this, you can be up and running very quickly. In fact,
+Slackware boasts one of the lowest installation times of any full-featured Linux
+distribution.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="INSTALLATION-GETTING" name="INSTALLATION-GETTING">3.1 Getting
+Slackware</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN641" name="AEN641">3.1.1 The Official Disc and Box
+Sets</a></h3>
+
+<p>The official Slackware Linux CD set is available from Slackware Linux, Inc. The CD set
+consists of 4 discs. The first disk contains all the software needed for a basic server
+install, and the X window system. The second cd is a &#8220;live&#8221; cd; that is, a
+bootable cd that installs into RAM and gives you a temporary installation to play around
+with or do a data or machine rescue. This cd also contains a few packages such as the KDE
+and GNOME desktop environments. A few other goodies are included on the second cd
+including many non-vital packages in the &#8220;extra&#8221; folder. The third and fourth
+CDs contain the source code to all of Slackware, along with the original edition of this
+book.</p>
+
+<p>One may also purchase a boxed set that includes the 4 discs and a copy of this book,
+as well as lots of neat Slackware gear to show off your geek pride. CD subscriptions are
+available at a reduced rate also.</p>
+
+<p>The preferred method for shopping for Slackware merchandise is online at the Slackware
+store.</p>
+
+<p><a href="http://store.slackware.com" target="_top">http://store.slackware.com</a></p>
+
+<p>You can also call or e-mail your order in.</p>
+
+<div class="TABLE"><a id="AEN661" name="AEN661"></a>
+<p><b>Table 3-1. Slackware Linux, Inc. Contact Information</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col width="1*" />
+<col width="2*" />
+<thead>
+<tr>
+<th>Method</th>
+<th>Contact Details</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>Telephone</td>
+<td>1-(925) 674-0783</td>
+</tr>
+
+<tr>
+<td>Website</td>
+<td>http://store.slackware.com</td>
+</tr>
+
+<tr>
+<td>Email</td>
+<td>orders@slackware.com</td>
+</tr>
+
+<tr>
+<td>Postal</td>
+<td>1164 Claremont Drive, Brentwood, CA 94513</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN683" name="AEN683">3.1.2 Via the Internet</a></h3>
+
+<p>Slackware Linux is also freely available over the Internet. You may email in your
+support questions, but higher priority will be given to those who have purchased the
+official CD set. With that said, we get a lot of e-mails and our time is rather limited.
+Before e-mailing for support consider reading <a href="#HELP">Chapter 2</a> first.</p>
+
+<p>The official Slackware Linux Project website is located at:</p>
+
+<p><a href="http://www.slackware.com/" target="_top">http://www.slackware.com/</a></p>
+
+<p>The primary FTP location for Slackware Linux is:</p>
+
+<p><a href="ftp://ftp.slackware.com/pub/slackware/"
+target="_top">ftp://ftp.slackware.com/pub/slackware/</a></p>
+
+<p>Bear in mind that our ftp site, while open for general use, does not have unlimited
+bandwidth. Please consider using a mirror near you to download Slackware. An incomplete
+list of mirrors can be found on our site at <a href="http://www.slackware.com/getslack"
+target="_top">http://www.slackware.com/getslack</a>.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="INSTALLATION-REQUIREMENTS" name="INSTALLATION-REQUIREMENTS">3.2
+System Requirements</a></h2>
+
+<p>An easy Slackware installation requires, at minimum, the following:</p>
+
+<div class="TABLE"><a id="AEN706" name="AEN706"></a>
+<p><b>Table 3-2. System Requirements</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<col />
+<thead>
+<tr>
+<th>Hardware</th>
+<th>Requirement</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>Processor</td>
+<td>586</td>
+</tr>
+
+<tr>
+<td>RAM</td>
+<td>32 MB</td>
+</tr>
+
+<tr>
+<td>Disk Space</td>
+<td>1GB</td>
+</tr>
+
+<tr>
+<td>Media Drive</td>
+<td>4x CD-ROM</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>If you have the bootable CD, you will probably not need a floppy drive. Of course, it
+stands to reason that if you don't possess a CD-ROM drive, you will need a floppy drive
+to do a network install. A network card is required for an NFS install. See the section
+called NFS for more information.</p>
+
+<p>The disk space requirement is somewhat tricky. The 1GB recommendation is usually safe
+for a minimal install, but if you do a full install, you will need around two gigabytes
+of available hard disk space plus additional space for personal files.. Most users don't
+do a full install. In fact, many run Slackware on as little as 100MB of hard disk
+space.</p>
+
+<p>Slackware can be installed to systems with less RAM, smaller hard drives, and weaker
+CPUs, but doing so will require a little elbow grease. If you're up for a little work,
+take a look at the <tt class="FILENAME">LOWMEM.TXT</tt> file in the distribution tree for
+a few helpful hints.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INSTALLATION-SOFTWARE-SERIES"
+name="INSTALLATION-SOFTWARE-SERIES">3.2.1 The Software Series</a></h3>
+
+<p>For reasons of simplicity, Slackware has historically been divided into software
+series. Once called &#8220;disk sets&#8221; because they were designed for floppy-based
+installation, the software series are now used primarily to categorize the packages
+included in Slackware. Today, floppy installation is no longer possible.</p>
+
+<p>The following is a brief description of each software series.</p>
+
+<div class="TABLE"><a id="AEN746" name="AEN746"></a>
+<p><b>Table 3-3. Software Series</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col width="1*" />
+<col width="4*" />
+<thead>
+<tr>
+<th>Series</th>
+<th>Contents</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>A</td>
+<td>The base system. Contains enough software to get up and running and have a text
+editor and basic communication program.</td>
+</tr>
+
+<tr>
+<td>AP</td>
+<td>Various applications that do not require the X Window System.</td>
+</tr>
+
+<tr>
+<td>D</td>
+<td>Program development tools. Compilers, debuggers, interpreters, and man pages are all
+here.</td>
+</tr>
+
+<tr>
+<td>E</td>
+<td>GNU Emacs.</td>
+</tr>
+
+<tr>
+<td>F</td>
+<td>FAQs, HOWTOs, and other miscellaneous documentation.</td>
+</tr>
+
+<tr>
+<td>GNOME</td>
+<td>The GNOME desktop environment.</td>
+</tr>
+
+<tr>
+<td>K</td>
+<td>The source code for the Linux kernel.</td>
+</tr>
+
+<tr>
+<td>KDE</td>
+<td>The K Desktop Environment. An X environment which shares a lot of look-and-feel
+features with MacOS and Windows. The Qt library, which KDE requires, is also in this
+series.</td>
+</tr>
+
+<tr>
+<td>KDEI</td>
+<td>Internationalization packages for the KDE desktop.</td>
+</tr>
+
+<tr>
+<td>L</td>
+<td>Libraries. Dynamically linked libraries required by many other programs.</td>
+</tr>
+
+<tr>
+<td>N</td>
+<td>Networking programs. Daemons, mail programs, telnet, news readers, and so on.</td>
+</tr>
+
+<tr>
+<td>T</td>
+<td>teTeX document formatting system.</td>
+</tr>
+
+<tr>
+<td>TCL</td>
+<td>The Tool Command Language. Tk, TclX, and TkDesk.</td>
+</tr>
+
+<tr>
+<td>X</td>
+<td>The base X Window System.</td>
+</tr>
+
+<tr>
+<td>XAP</td>
+<td>X Applications that are not part of a major desktop environment (for example,
+Ghostscript and Netscape).</td>
+</tr>
+
+<tr>
+<td>Y</td>
+<td>BSD Console games</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INSTALLATION-METHODS" name="INSTALLATION-METHODS">3.2.2
+Installation Methods</a></h3>
+
+<div class="SECT3">
+<h4 class="SECT3"><a id="INSTALLATION-INSTALLATION-METHODS-FLOPPY"
+name="INSTALLATION-INSTALLATION-METHODS-FLOPPY">3.2.2.1 Floppy</a></h4>
+
+<p>While it was once possible to install all of Slackware Linux from floppy disks, the
+increasing size of software packages (indeed, of some individual programs) has forced the
+abandonment of the floppy install. As late as Slackware version 7.1 a partial install was
+possible using floppy disks. The A and N series could be nearly entirely installed,
+providing a base system from which to install the rest of the distribution. If you are
+considering a floppy install (typically on older hardware), it is typically recommended
+to find another way, or use an older release. Slackware 4.0 is still very popular for
+this reason, as is 7.0.</p>
+
+<p>Please note that floppy disks are still required for a CD-ROM install if you do not
+have a bootable CD, as well as for an NFS install.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="INSTALLATION-INSTALLLATION-METHODS-CDROM"
+name="INSTALLATION-INSTALLLATION-METHODS-CDROM">3.2.2.2 CD-ROM</a></h4>
+
+<p>If you have the bootable CD, available in the official disc set published by Slackware
+Linux, Inc. (see the section called Getting Slackware), a CD-based installation will be a
+bit simpler for you. If not, you will need to boot from floppies. Also, if you have
+special hardware that makes usage of the kernel on the bootable CD problematic, you may
+need to use specialized floppies.</p>
+
+<p>As of Slackware version 8.1, a new method is used for creating the bootable CDs, which
+does not work as well with certain flaky BIOS chips (it is worth noting that most all
+Linux CDs suffer from this these days). If that is the case, we recommend booting from a
+floppy disk.</p>
+
+<p><a href="#INSTALLATION-INSTALLATION-METHODS-BOOTDISK">Section 3.2.3</a> and <a
+href="#INSTALLATION-SUPPLEMENTAL-DISK">Section 3.2.5</a> provide information on choosing
+and creating floppies from which to boot, should this be necessary.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN823" name="AEN823">3.2.2.3 NFS</a></h4>
+
+<p>NFS (the Network File System) is a way of making filesystems available to remote
+machines. An NFS install allows you to install Slackware from another computer on your
+network. The machine from which you are installing needs to be configured to export the
+Slackware distribution tree to the machine to which you're installing. This, of course,
+involves some knowledge of NFS, which is covered in <a
+href="#NETWORK-CONFIGURATION-NFS">Section 5.6</a>.</p>
+
+<p>It is possible to perform an NFS install via such methods as PLIP (over a parallel
+port), SLIP, and PPP (though not over a modem connection). However, we recommend the use
+of a network card if available. After all, installing an operating system through your
+printer port is going to be a very, very slow process.</p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INSTALLATION-INSTALLATION-METHODS-BOOTDISK"
+name="INSTALLATION-INSTALLATION-METHODS-BOOTDISK">3.2.3 Boot Disk</a></h3>
+
+<p>The boot disk is the floppy you actually boot from to begin the installation. It
+contains a compressed kernel image which is used to control the hardware during
+installation. Therefore, it is very much required (unless you're booting from CD, as is
+discussed in the section called CD-ROM). The boot disks are located in the <tt
+class="FILENAME">bootdisks/</tt> directory in the distribution tree.</p>
+
+<p>There are more Slackware boot disks than you can shake a stick at (which is to say
+about 16). A complete list of boot disks, with a description of each, is available in the
+Slackware distribution tree in the file <tt class="FILENAME">bootdisks/README.TXT</tt>.
+However, most people are able to use the <tt class="FILENAME">bare.i</tt> (for IDE
+devices) or <tt class="FILENAME">scsi.s</tt> (for SCSI devices) boot disk image.</p>
+
+<p>See <a href="#INSTALLATION-MAKING-THE-DISKS">Section 3.2.6</a> for instructions on
+making a disk from an image.</p>
+
+<p>After booting, you will be prompted to insert the root disk. We recommend that you
+just humor the boot disk and play along.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INSTALLATION-INSTALLATION-METHODS-ROOTDISK"
+name="INSTALLATION-INSTALLATION-METHODS-ROOTDISK">3.2.4 Root Disk</a></h3>
+
+<p>The root disks contain the setup program and a filesystem which is used during
+installation. They are also required. The root disk images are located in the directory
+rootdisks in the distribution tree. You'll have to make two root disks from the <tt
+class="FILENAME">install.1</tt> and <tt class="FILENAME">install.2</tt> images. Here you
+can also find the <tt class="FILENAME">network.dsk</tt>, <tt
+class="FILENAME">pcmcia.dsk</tt>, <tt class="FILENAME">rescue.dsk</tt>, and <tt
+class="FILENAME">sbootmgr.dsk</tt> disks.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INSTALLATION-SUPPLEMENTAL-DISK"
+name="INSTALLATION-SUPPLEMENTAL-DISK">3.2.5 Supplemental Disk</a></h3>
+
+<p>A supplemental disk is needed if you are performing an NFS install or installing to a
+system with PCMCIA devices. Supplemental disks are in the rootdsks directory in the
+distribution tree, with the filenames <tt class="FILENAME">network.dsk</tt> and <tt
+class="FILENAME">pcmcia.dsk</tt>. Recently other supplemental disks such as <tt
+class="FILENAME">rescue.dsk</tt> and <tt class="FILENAME">sbootmgr.dsk</tt> have been
+added. The rescue disk is a small floppy root image that runs in a 4MB RAM drive. It
+includes some basic networking utilities and the vi editor for quick fixes on busted
+machines. The <tt class="FILENAME">sbootmgr.dsk</tt> disk is used to boot other devices.
+Boot off this disk if your bootable CD-ROM drive doesn't want to boot the Slackware CDs.
+It will prompt you for different things to boot and may offer a convenient way to work
+around a buggy BIOS.</p>
+
+<p>The root disk will instruct you on the use of supplemental disks when it is
+loaded.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="INSTALLATION-MAKING-THE-DISKS"
+name="INSTALLATION-MAKING-THE-DISKS">3.2.6 Making the Disks</a></h3>
+
+<p>Once you've selected a boot disk image, you need to put it on a floppy. The process is
+slightly different depending on which operating system you're using to make the disks. If
+you're running Linux (or pretty much any Unix-like OS) you'll need to use the <tt
+class="COMMAND">dd</tt>(1) command. Assuming <tt class="FILENAME">bare.i</tt> is your
+disk image file and your floppy drive is <tt class="FILENAME">/dev/fd0</tt>, the command
+to make a <tt class="FILENAME">bare.i</tt> floppy is:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">dd if=bare.i of=/dev/fd0</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If you're running a Microsoft OS, you'll need to use the <tt
+class="FILENAME">RAWRITE.EXE</tt> program, which is included in the distribution tree in
+the same directories as the floppy images. Again assuming that <tt
+class="FILENAME">bare.i</tt> is your disk image file and your floppy drive is <tt
+class="FILENAME">A:</tt>, open a DOS prompt and type the following:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+C:\ <kbd class="USERINPUT">rawrite a: bare.i</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="INSTALLATION-PARTITIONING" name="INSTALLATION-PARTITIONING">3.3
+Partitioning</a></h2>
+
+<p>After booting from your preferred media, you will need to partition your hard disk.
+The disk partition is where the Linux filesystem will be created and is where Slackware
+will be installed. At the very minimum we recommend creating two partitions; one for your
+root filesystem (<tt class="FILENAME">/</tt>) and one for swap space.</p>
+
+<p>After the root disk finishes loading, it will present you with a login prompt. Log in
+as root (there is no password). At the shell prompt, run either <tt
+class="COMMAND">cfdisk</tt>(8) or <tt class="COMMAND">fdisk</tt>(8). The <tt
+class="COMMAND">cfdisk</tt> program provides a more user-friendly interface than the
+regular <tt class="COMMAND">fdisk</tt> program, but does lack some features. We will
+briefly explain the <tt class="COMMAND">fdisk</tt> program below.</p>
+
+<p>Begin by running <tt class="COMMAND">fdisk</tt> for your hard disk. In Linux, the hard
+disks do not have drive letters, but are represented by a file. The first IDE hard disk
+(primary master) is <tt class="FILENAME">/dev/hda</tt>, the primary slave is <tt
+class="FILENAME">/dev/hdb</tt>, and so on. SCSI disks follow the same type system, but
+are in the form of <tt class="FILENAME">/dev/sd<var class="REPLACEABLE">X</var></tt>. You
+will need to start <tt class="COMMAND">fdisk</tt> and pass it your hard disk:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">fdisk /dev/hda</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Like all good Unix programs, <tt class="COMMAND">fdisk</tt> gives you a prompt
+(thought you were getting a menu, right?). The first thing you should do is examine your
+current partitions. We do that by typing <kbd class="USERINPUT">p</kbd> at the <tt
+class="COMMAND">fdisk</tt> prompt:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Command (m for help): <kbd class="USERINPUT">p</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will display all sorts of information about your current partitions. Most people
+pick a free drive to install to and then remove any existing partitions on it to create
+room for the Linux partitions.</p>
+
+<div class="WARNING">
+<table class="WARNING" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/warning.png"
+hspace="5" alt="Warning" /></td>
+<td align="LEFT" valign="TOP">
+<p>IT IS VERY IMPORTANT THAT YOU BACK UP ANY INFORMATION YOU WANT TO SAVE BEFORE
+DESTROYING THE PARTITION IT LIVES ON.</p>
+</td>
+</tr>
+</table>
+</div>
+
+<p>There is no easy way to recover from deleting a partition, so always back up before
+playing with them.</p>
+
+<p>Looking at the table of partition information you should see a partition number, the
+size of the partition, and its type. There's more information, but don't worry about that
+for now. We are going to delete all of the partitions on this drive to create the Linux
+ones. We run the <kbd class="USERINPUT">d</kbd> command to delete those:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Command (m for help): <kbd class="USERINPUT">d</kbd>
+Partition number (1-4): <kbd class="USERINPUT">1</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This process should be continued for each of the partitions. After deleting the
+partitions we are ready to create the Linux ones. We have decided to create one partition
+for our root filesystem and one for swap. It is worth noting that Unix partitioning
+schemes are the subject of many flame wars, and that most users will tell you the best
+way to do it. At a minimum, you should create one partition for <tt
+class="FILENAME">/</tt> and one for swap. Over time, you'll develop a method that works
+well for you.</p>
+
+<p>I use two basic partition schemes. The first is for a desktop. I make 4 partitions,
+<tt class="FILENAME">/</tt>, <tt class="FILENAME">/home</tt>, <tt
+class="FILENAME">/usr/local</tt>, and swap. This lets me re-install or upgrade the entire
+installation under <tt class="FILENAME">/</tt> without wiping out my data files under
+/home or my custom compiled applications under <tt class="FILENAME">/usr/local</tt>. For
+servers, I often replace the <tt class="FILENAME">/usr/local</tt> partition with a <tt
+class="FILENAME">/var</tt> partition. Many different servers store information on that
+partition and having it kept separate from <tt class="FILENAME">/</tt> has certain
+performance benefits. For now, we're sticking with just two partitions: <tt
+class="FILENAME">/</tt> and swap.</p>
+
+<p>Now we create the partitions with the <kbd class="USERINPUT">n</kbd> command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Command (m for help): <kbd class="USERINPUT">n</kbd>
+Command action
+ e extended
+ p primary partition (1-4)
+<kbd class="USERINPUT">p</kbd>
+Partition number (1-4):<kbd class="USERINPUT">1</kbd>
+First cylinder (0-1060, default 0):<kbd class="USERINPUT">0</kbd>
+ Last cylinder or +size or +sizeM or +sizeK (0-1060, default 1060):<kbd
+class="USERINPUT">+64M</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You need to make sure you create primary partitions. The first partition is going to
+be our swap partition. We tell fdisk to make partition number 1 a primary partition. We
+start it at cylinder 0 and for the ending cylinder we type +64M. This will give us a 64
+megabyte partition for swap. (The size of the swap partition you need actually depends on
+the amount of RAM you have. It is conventional wisdom that a swap space double the size
+of your RAM should be created.) Then we define primary partition number 2 starting at the
+first available cylinder and going all the way to the end of the drive.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Command (m for help):<kbd class="USERINPUT">n</kbd>
+Command action
+ e extended
+ p primary partition (1-4)
+<kbd class="USERINPUT">p</kbd>
+Partition number (1-4):<kbd class="USERINPUT">2</kbd>
+First cylinder (124-1060, default 124):<kbd class="USERINPUT">124</kbd>
+Last cylinder or +size or +sizeM or +sizeK (124-1060, default 1060):<kbd
+class="USERINPUT">1060</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We are almost done. We need to change the type of the first partition to type 82
+(Linux swap). Type <kbd class="USERINPUT">t</kbd> to change the type, select the first
+partition, and type <var class="LITERAL">82</var>. Before writing your changes to the
+disk, you should look at the new partition table one last time. Use the <kbd
+class="USERINPUT">p</kbd> in <tt class="COMMAND">fdisk</tt> to display the partition
+table. If everything looks good, type <kbd class="USERINPUT">w</kbd> to write your
+changes to the disk and quit <tt class="COMMAND">fdisk</tt>.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="INSTALLATION-SETUP" name="INSTALLATION-SETUP">3.4 The <tt
+class="COMMAND">setup</tt> Program</a></h2>
+
+<p>Once you have created your partitions, you are ready to install Slackware. The next
+step in the installation process is running the <tt class="COMMAND">setup</tt>(8)
+program. To do so, simply type <tt class="COMMAND">setup</tt> at the shell prompt. <tt
+class="COMMAND">setup</tt> is a menu-driven system for actually installing the Slackware
+packages and configuring your system.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN981" name="AEN981"></a>
+<p><img src="installation/setup-program-w.png" /></p>
+</div>
+
+<p>The setup process goes something like this: You step through each option in the <tt
+class="COMMAND">setup</tt> program, in the order they are listed. (Of course, you are
+free to do things in almost any order you choose, but chances are it isn't going to work
+out very well.) Menu items are selected using the up and down arrow keys, and the
+&#8220;Okay&#8221; and &#8220;Cancel&#8221; buttons can be chosen by using the left and
+right arrow keys. Alternatively, each option has a corresponding key, which is
+highlighted in the option name. Options which are flaggable (those indicated with a <var
+class="LITERAL">[X]</var>) are toggled using the spacebar.</p>
+
+<p>Of course, all of that is described in the &#8220;help&#8221; section of <tt
+class="COMMAND">setup</tt>, but we believe in giving our readers their money's worth.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN993" name="AEN993">3.4.1 HELP</a></h3>
+
+<p>If this is your first time installing Slackware, you might want to take a look at the
+help screen. It will give a description of each part of <tt class="COMMAND">setup</tt>
+(much like the one we're writing now, but less involved) and instructions for navigating
+the rest of the install.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN997" name="AEN997"></a>
+<p><img src="installation/setup-help-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1001" name="AEN1001">3.4.2 KEYMAP</a></h3>
+
+<p>If you require a keymap other than the United States &#8220;qwerty&#8221; layout, you
+may want to take a look at this section. It offers a number of alternate layouts for your
+keyboarding enjoyment.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1009" name="AEN1009"></a>
+<p><img src="installation/setup-keymap-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1013" name="AEN1013">3.4.3 ADDSWAP</a></h3>
+
+<div class="INFORMALFIGURE"><a id="AEN1015" name="AEN1015"></a>
+<p><img src="installation/setup-swap-w.png" /></p>
+</div>
+
+<p>If you created a swap partition (back in <a href="#INSTALLATION-PARTITIONING">Section
+3.3</a>), this section will allow you to enable it. It will autodetect and display the
+swap partitions on your hard drive, allowing you to select one to format and enable.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1023" name="AEN1023">3.4.4 TARGET</a></h3>
+
+<div class="INFORMALFIGURE"><a id="AEN1025" name="AEN1025"></a>
+<p><img src="installation/setup-target-w.png" /></p>
+</div>
+
+<p>The target section is where your other (non-swap) partitions are formatted and mapped
+to filesystem mount points. A list of the partitions on your hard disk will be displayed.
+For each partition, you will be given the option of whether to format that partition or
+not. Depending on the kernel used, you can choose between reiserfs (the default), ext3,
+ext2, jfs, and xfs. Most people use either reiserfs or ext3. In the near future we may
+see support for reiserfs4 slip in.</p>
+
+<p>The first option in the target section is the selection of a partition on which to
+install your root (<tt class="FILENAME">/</tt>) filesystem. After that, you will be able
+to map other partitions to filesystems as you choose. (For instance, you may want your
+third partition, say <tt class="FILENAME">/dev/hda3</tt>, to be your home filesystem.
+This is just an example; map the partitions as you see fit.)</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1035" name="AEN1035">3.4.5 SOURCE</a></h3>
+
+<p>The source section is where you select the source media from which you are installing
+Slackware. Currently there are four sources to choose from. These are CD-ROM, NFS, or a
+premounted directory.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1038" name="AEN1038"></a>
+<p><img src="installation/setup-source-w.png" /></p>
+</div>
+
+<p>The CD-ROM selection enables a CD-ROM based installation. It will offer the option of
+scanning for a CD-ROM drive or displaying a list from which you can pick your drive type.
+Make sure you have the Slackware CD in your drive before allowing it to scan.</p>
+
+<p>The NFS selection prompts for your network information and the network information for
+your NFS server. The NFS server must be set up in advance. Also note that you cannot use
+hostnames, you must use the IP addresses for both your machine and the NFS server (there
+is no name resolver on the setup disk). Naturally you must have used the <tt
+class="FILENAME">network.dsk</tt> floppy to add support for your network controller.</p>
+
+<p>The premounted directory offers the most flexibility. You can use this method to
+install from things such as Jaz disks, NFS mounts over PLIP, and FAT filesystems. Mount
+the filesystem to a location of your choosing before running setup, then specify that
+location here.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1054" name="AEN1054">3.4.6 SELECT</a></h3>
+
+<p>The select option allows you to select the software series that you wish to install.
+These series are described in <a href="#INSTALLATION-SOFTWARE-SERIES">Section 3.2.1</a>.
+Please note that you must install the A series to have a working base system. All other
+series are optional.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1058" name="AEN1058"></a>
+<p><img src="installation/setup-select-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1062" name="AEN1062">3.4.7 INSTALL</a></h3>
+
+<p>Assuming that you have gone through the &#8220;target&#8221;, &#8220;source&#8221;,
+and &#8220;select&#8221; options, the <var class="OPTION">install</var> option will allow
+you to select packages from your chosen software series. If not, it will prompt you to go
+back and complete the other sections of the setup program. This option allows you to
+select from six different installation methods: <var class="OPTION">full</var>, <var
+class="OPTION">newbie</var>, <var class="OPTION">menu</var>, <var
+class="OPTION">expert</var>, <var class="OPTION">custom</var>, and <var
+class="OPTION">tag path</var>.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1077" name="AEN1077"></a>
+<p><img src="installation/setup-install-w.png" /></p>
+</div>
+
+<p>The <var class="OPTION">full</var> option will install every package from all the
+software series that you chose in the &#8220;select&#8221; section. There is no further
+prompting. This is the easiest installation method, since you do not need to make any
+decisions on the actual packages to install. Of course, this option also takes up the
+most hard drive space.</p>
+
+<p>The next option is <var class="OPTION">newbie</var>. This option installs all of the
+required packages in the selected series. For all other packages, it offers a prompt
+where you can select &#8220;Yes&#8221;, &#8220;No&#8221;, or &#8220;Skip&#8221;. Yes and
+No do the obvious, while Skip will go ahead to the next software series. Additionally,
+you will see a description and size requirement for each package to help you decide if
+you need it. We recommend this option for new users, as it ensures that you get all the
+required packages installed. However, it is a little slow because of the prompting.</p>
+
+<p><var class="OPTION">Menu</var> is a faster and more advanced version of the newbie
+option. For each series, a menu is displayed, from which you can select all the
+non-required packages you want to install. Required packages are not displayed on this
+menu.</p>
+
+<p>For the more advanced user, install offers the <var class="OPTION">expert</var>
+option. This allows you complete control over what packages get installed. You can
+deselect packages that are absolutely required, resulting in a broken system. On the
+other hand, you can control exactly what goes onto your system. Simply select the
+packages from each series that you want installed. This is not recommended for the new
+user, as it is quite easy to shoot yourself in the foot.</p>
+
+<p>The <var class="OPTION">custom</var> and <var class="OPTION">tag path</var> options
+are also for advanced users. These options allow you to install based upon custom tag
+files that you created in the distribution tree. This is useful for installing to large
+numbers of machines fairly quickly. For more information on using tag files, see <a
+href="#PACKAGE-MANAGEMENT-MAKING-TAGS-AND-TAGFILES">Section 18.4</a>.</p>
+
+<p>After selecting your installation method, one of a few things will happen. If you
+selected full or menu, a menu screen will appear, allowing you to select the packages to
+be installed. If you selected full, packages will immediately start getting installed to
+the target. If you selected newbie, packages will be installed until an optional package
+is reached.</p>
+
+<p>Note that it is possible to run out of space while installing. If you selected too
+many packages for the amount of free space on the target device, you will have problems.
+The safest thing to do is to select some software and add more later, if you need it.
+This can easily be done using Slackware's package management tools. For this information,
+see <a href="#PACKAGE-MANAGEMENT">Chapter 18</a>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1100" name="AEN1100">3.4.8 CONFIGURE</a></h3>
+
+<p>The configure section allows you to do some basic system configuration, now that the
+packages have been installed. What you see here depends in large part upon which software
+you have installed. You will, however, always see the following:</p>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1103" name="AEN1103">3.4.8.1 Kernel selection</a></h4>
+
+<p>Here you will be asked to select a kernel to install. You can install the kernel from
+the boot disk you used to install, the Slackware CD-ROM, or from another floppy which you
+(always thinking ahead) have prepared. Or you can elect to skip, in which case the
+default kernel will be installed and play will continue to the dealer's left.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1106" name="AEN1106"></a>
+<p><img src="installation/setup-kernel-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1110" name="AEN1110">3.4.8.2 Make a boot disk</a></h4>
+
+<p>Making a boot disk for future use is probably a good idea. You will have the option of
+formatting a floppy and then creating one of two types of boot disk. The first type, <var
+class="OPTION">simple</var>, simply (go figure) writes a kernel to the floppy. A more
+flexible (and highly recommended) option is <var class="OPTION">lilo</var>, which will of
+course create a lilo boot disk. See LILO in <a href="#BOOTING-LILO">Section 7.1</a> for
+more information. Of course, you may also choose to simply <var
+class="LITERAL">continue</var>, in which case no boot disk will be made.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1119" name="AEN1119"></a>
+<p><img src="installation/setup-bootdisk-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1123" name="AEN1123">3.4.8.3 Modem</a></h4>
+
+<p>You will be prompted for modem information. More specifically, you will be asked
+whether you have a modem, and if so, what serial port it is on.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1128" name="AEN1128"></a>
+<p><img src="installation/setup-modem-w.png" /></p>
+</div>
+
+<p>These next configuration subsections may or may not appear, depending on whether or
+not you installed their corresponding packages.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1133" name="AEN1133">3.4.8.4 Timezone</a></h4>
+
+<p>This one's pretty straightforward: you will be asked what time zone you are in. If you
+operate on Zulu time, we are very sorry; the (extremely long) list is alphabetically
+ordered, and you're at the bottom.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1138" name="AEN1138"></a>
+<p><img src="installation/setup-timezone-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1142" name="AEN1142">3.4.8.5 Mouse</a></h4>
+
+<p>This subsection simply asks what kind of mouse you have, and whether you want <tt
+class="COMMAND">gpm</tt>(8) console mouse support enabled on bootup.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1148" name="AEN1148"></a>
+<p><img src="installation/setup-mouse-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1152" name="AEN1152">3.4.8.6 Hardware clock</a></h4>
+
+<p>This subsection asks if your computer's hardware clock is set to Coordinated Universal
+Time (UTC or GMT). Most PCs are not, so you should probably say no.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1155" name="AEN1155"></a>
+<p><img src="installation/setup-hardware-clock-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1159" name="AEN1159">3.4.8.7 Font</a></h4>
+
+<p>The font subsection allows you to choose from a list of custom console fonts.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1164" name="AEN1164"></a>
+<p><img src="installation/setup-font-w.png" /></p>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1168" name="AEN1168">3.4.8.8 LILO</a></h4>
+
+<p>Here you are prompted for installation of LILO (the LInux LOader; see <a
+href="#BOOTING-LILO">Section 7.1</a> for more information).</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1174" name="AEN1174"></a>
+<p><img src="installation/setup-lilo-w.png" /></p>
+</div>
+
+<p>If Slackware is to be the only operating system on your computer, <var
+class="OPTION">simple</var> should work just fine for you. If you are dual-booting, the
+<var class="OPTION">expert</var> option is a better choice. See <a
+href="#BOOTING-DUAL">Section 7.3</a> for more information on dual-booting. The third
+option, <var class="OPTION">do not install</var>, is not recommended unless you know what
+you're doing and have a very good reason for not installing LILO. If you are performing
+an expert install, you will be given a choice as to where LILO will be put. You may place
+LILO in the MBR (Master Boot Record) of your hard drive, in the superblock of your root
+Linux partition, or on a floppy disk.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1183" name="AEN1183">3.4.8.9 Network</a></h4>
+
+<p>The network configuration subsection is actually <tt class="COMMAND">netconfig</tt>.
+See <a href="#NETWORK-CONFIGURATION-NETCONFIG">Section 5.1</a> for more information.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1190" name="AEN1190">3.4.8.10 X Window Manager</a></h4>
+
+<p>This subsection will allow you to choose a default window manager for X. See <a
+href="#X-WINDOW-SYSTEM">Chapter 6</a> for more details on X and window managers.</p>
+
+<div class="INFORMALFIGURE"><a id="AEN1198" name="AEN1198"></a>
+<p><img src="installation/setup-xwmconfig-w.png" /></p>
+</div>
+
+<p>No matter which packages you installed, the last thing configure will do is ask you
+whether you want to go ahead and set a <tt class="USERNAME">root</tt> password. For
+security reasons, this is probably a good idea; however, like almost everything else in
+Slackware, this is your call.</p>
+</div>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="SYSTEM-CONFIGURATION" name="SYSTEM-CONFIGURATION"></a>Chapter 4 System
+Configuration</h1>
+
+<p>Before you can configure the more advanced parts of your system, it's a good idea to
+learn how the system is organized and what commands can be used to search for files and
+programs. It's also good to know if you need to compile a custom kernel and what the
+steps for doing that are. This chapter will familiarize you with system organization and
+configuration files. Then, you can move on to configuring the more advanced parts of the
+system.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SYSTEM-CONFIGURATION-OVERVIEW"
+name="SYSTEM-CONFIGURATION-OVERVIEW">4.1 System Overview</a></h2>
+
+<p>It's important to understand how a Linux system is put together before diving into the
+various configuration aspects. A Linux system is significantly different from a DOS,
+Windows, or Macintosh system (with the exception of the Unix-based Mac OS X), but these
+sections will help you get acquainted with the layout so that you can easily configure
+your system to meet your needs.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SYSTEM-CONFIGURATION-LAYOUT"
+name="SYSTEM-CONFIGURATION-LAYOUT">4.1.1 File System Layout</a></h3>
+
+<p>The first noticeable difference between Slackware Linux and a DOS or Windows system is
+the filesystem. For starters, we do not use drive letters to denote different partitions.
+Under Linux, there is one main directory. You can relate this to the <tt
+class="DEVICENAME">C:</tt> drive under DOS. Each partition on your system is mounted to a
+directory on the main directory. It's kind of like an ever-expanding hard disk.</p>
+
+<p>We call the main directory the root directory, and it's denoted with a single slash
+(<tt class="FILENAME">/</tt>). This concept may seem strange, but it actually makes life
+easy for you when you want to add more space. For example, let's say you run out of space
+on the drive that has <tt class="FILENAME">/home</tt> on it. Most people install
+Slackware and make one big root drive. Well, since a partition can be mounted to any
+directory, you can simply go to the store and pick up a new hard drive and mount it to
+<tt class="FILENAME">/home</tt>. You've now grafted on some more space to your system.
+And all without having to move many things around.</p>
+
+<p>Below, you will find descriptions of the major top level directories under
+Slackware.</p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><tt class="FILENAME">bin</tt></dt>
+
+<dd>
+<p>Essential user programs are stored here. These represent the bare minimum set of
+programs required for a user to use the system. Things like the shell and the filesystem
+commands (<tt class="COMMAND">ls</tt>, <tt class="COMMAND">cp</tt>, and so on) are stored
+here. The <tt class="FILENAME">/bin</tt> directory usually doesn't receive modification
+after installation. If it does, it's usually in the form of package upgrades that we
+provide.</p>
+</dd>
+
+<dt><tt class="FILENAME">boot</tt></dt>
+
+<dd>
+<p>Files that are used by the Linux Loader (LILO). This directory also receives little
+modification after an installation. The kernel is stored here as of Slackware 8.1. In
+earlier releases of Slackware, the kernel was simply stored under <tt
+class="FILENAME">/</tt> , but common practice is to put the kernel and related files here
+to facilitate dual-booting.</p>
+</dd>
+
+<dt><tt class="FILENAME">dev</tt></dt>
+
+<dd>
+<p>Everything in Linux is treated as a file, even hardware devices like serial ports,
+hard disks, and scanners. In order to access these devices, a special file called a
+device node has to be present. All device nodes are stored in the <tt
+class="FILENAME">/dev</tt> directory. You will find this to be true across many Unix-like
+operating systems.</p>
+</dd>
+
+<dt><tt class="FILENAME">etc</tt></dt>
+
+<dd>
+<p>This directory holds system configuration files. Everything from the X Window
+configuration file, the user database, to the system startup scripts. The system
+administrator will become quite familiar with this directory over time.</p>
+</dd>
+
+<dt><tt class="FILENAME">home</tt></dt>
+
+<dd>
+<p>Linux is a multiuser operating system. Each user on the system is given an account and
+a unique directory for personal files. This directory is called the user's home
+directory. The <tt class="FILENAME">/home</tt> directory is provided as the default
+location for user home directories.</p>
+</dd>
+
+<dt><tt class="FILENAME">lib</tt></dt>
+
+<dd>
+<p>System libraries that are required for basic operation are stored here. The C library,
+the dynamic loader, the ncurses library, and kernel modules are among the things stored
+here.</p>
+</dd>
+
+<dt><tt class="FILENAME">mnt</tt></dt>
+
+<dd>
+<p>This directory contains temporary mount points for working on hard disks or removable
+drives. Here you'll find mount points for your CD-ROM and floppy drives.</p>
+</dd>
+
+<dt><tt class="FILENAME">opt</tt></dt>
+
+<dd>
+<p>Optional software packages. The idea behind <tt class="FILENAME">/opt</tt> is that
+each software package installs to <tt class="FILENAME">/opt/<var
+class="REPLACEABLE">software-package</var></tt>, which makes it easy to remove later.
+Slackware distributes some things in <tt class="FILENAME">/opt</tt> (such as KDE in <tt
+class="FILENAME">/opt/kde</tt>), but you are free to add anything you want to <tt
+class="FILENAME">/opt</tt>.</p>
+</dd>
+
+<dt><tt class="FILENAME">proc</tt></dt>
+
+<dd>
+<p>This is a unique directory. It's not really part of the filesystem, but a virtual
+filesystem that provides access to kernel information. Various pieces of information that
+the kernel wants you to know are conveyed to you through files in the <tt
+class="FILENAME">/proc</tt> directory. You can also send information to the kernel
+through some of these files. Try doing <tt class="COMMAND">cat /proc/cpuinfo</tt>.</p>
+</dd>
+
+<dt><tt class="FILENAME">root</tt></dt>
+
+<dd>
+<p>The system administrator is known as <tt class="USERNAME">root</tt> on the system. <tt
+class="USERNAME">root</tt>'s home directory is kept in <tt class="FILENAME">/root</tt>
+instead of <tt class="FILENAME">/home/root</tt>. The reason is simple. What if <tt
+class="FILENAME">/home</tt> was a different partition from <tt class="FILENAME">/</tt>
+and it could not be mounted? <tt class="USERNAME">root</tt> would naturally want to log
+in and repair the problem. If his home directory was on the damaged filesystem, it would
+make it difficult for him to log in.</p>
+</dd>
+
+<dt><tt class="FILENAME">sbin</tt></dt>
+
+<dd>
+<p>Essential programs that are run by <tt class="USERNAME">root</tt> and during the
+system bootup process are kept here. Normal users will not run programs in this
+directory.</p>
+</dd>
+
+<dt><tt class="FILENAME">tmp</tt></dt>
+
+<dd>
+<p>The temporary storage location. All users have read and write access to this
+directory.</p>
+</dd>
+
+<dt><tt class="FILENAME">usr</tt></dt>
+
+<dd>
+<p>This is the big directory on a Linux system. Everything else pretty much goes here,
+programs, documentation, the kernel source code, and the X Window system. This is the
+directory to which you will most likely be installing programs.</p>
+</dd>
+
+<dt><tt class="FILENAME">var</tt></dt>
+
+<dd>
+<p>System log files, cache data, and program lock files are stored here. This is the
+directory for frequently-changing data.</p>
+</dd>
+</dl>
+</div>
+
+<p>You should now have a good feel for which directories contain what on the filesystem.
+More detailed information about the filesystem layout is available in the hier(7) man
+page. The next section will help you find specific files easily, so you don't have to do
+it by hand.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SYSTEM-CONFIGURATION-FINDING"
+name="SYSTEM-CONFIGURATION-FINDING">4.1.2 Finding Files</a></h3>
+
+<p>You now know what each major directory holds, but it still doesn't really help you
+find things. I mean, you could go looking through directories, but there are quicker
+ways. There are four main file search commands available in Slackware.</p>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1329" name="AEN1329">4.1.2.1 <tt
+class="COMMAND">which</tt></a></h4>
+
+<p>The first is the <tt class="COMMAND">which</tt>(1) command. <tt
+class="COMMAND">which</tt> is usually used to locate a program quickly. It just searches
+your <tt class="ENVAR">PATH</tt> and returns the first instance it finds and the
+directory path to it. Take this example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">which bash</kbd>
+/bin/bash
+</pre>
+</td>
+</tr>
+</table>
+
+<p>From that you see that <tt class="COMMAND">bash</tt> is in the <tt
+class="FILENAME">/bin</tt> directory. This is a very limited command for searching, since
+it only searches your <tt class="ENVAR">PATH</tt>.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1347" name="AEN1347">4.1.2.2 <tt
+class="COMMAND">whereis</tt></a></h4>
+
+<p>The <tt class="COMMAND">whereis</tt>(1) command works similar to <tt
+class="COMMAND">which</tt>, but can also search for man pages and source files. A <tt
+class="COMMAND">whereis</tt> search for <tt class="COMMAND">bash</tt> should return
+this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">whereis bash</kbd>
+bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This command not only told us where the actual program is located, but also where the
+online documentation is stored. Still, this command is limited. What if you wanted to
+search for a specific configuration file? You can't use <tt class="COMMAND">which</tt> or
+<tt class="COMMAND">whereis</tt> for that.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1363" name="AEN1363">4.1.2.3 <tt
+class="COMMAND">find</tt></a></h4>
+
+<p>The <tt class="COMMAND">find</tt>(1) command allows the user to search the filesystem
+with a rich collection of search predicates. Users may specify a search with filename
+wildcards, ranges of modification or creation times, or other advanced properties. For
+example, to search for the default <tt class="FILENAME">xinitrc</tt> file on the system,
+the following command could be used.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">find / -name xinitrc</kbd>
+/var/X11R6/lib/xinit/xinitrc
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">find</tt> will take a while to run, since it has to traverse the
+entire root directory tree. And if this command is run as a normal user, there will be
+permission denied error messages for directories that only <tt class="USERNAME">root</tt>
+can see. But <tt class="COMMAND">find</tt> found our file, so that's good. If only it
+could be a bit faster...</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1378" name="AEN1378">4.1.2.4 <tt
+class="COMMAND">slocate</tt></a></h4>
+
+<p>The <tt class="COMMAND">slocate</tt>(1) command searches the entire filesystem, just
+like the find command can do, but it searches a database instead of the actual
+filesystem. The database is set to automatically update every morning, so you have a
+somewhat fresh listing of files on your system. You can manually run <tt
+class="COMMAND">updatedb</tt>(1) to update the slocate database (before running <tt
+class="COMMAND">updatedb</tt> by hand, you must first <tt class="COMMAND">su</tt> to the
+<tt class="USERNAME">root</tt> user). Here's an example of <tt
+class="COMMAND">slocate</tt> in action:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">slocate xinitrc</kbd> # we don't have to go to the root
+/var/X11R6/lib/xinit/xinitrc
+/var/X11R6/lib/xinit/xinitrc.fvwm2
+/var/X11R6/lib/xinit/xinitrc.openwin
+/var/X11R6/lib/xinit/xinitrc.twm
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We got more than what we were looking for, and quickly too. With these commands, you
+should be able to find whatever you're looking for on your Linux system.</p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SYSTEM-CONFIGURATION-RCD" name="SYSTEM-CONFIGURATION-RCD">4.1.3
+The <tt class="FILENAME">/etc/rc.d</tt> Directory</a></h3>
+
+<p>The system initialization files are stored in the <tt class="FILENAME">/etc/rc.d</tt>
+directory. Slackware uses the BSD-style layout for its initialization files as opposed to
+System V init scripts, which tend to make configuration changes much more difficult
+without using a program specifically designed for that purpose. In BSD-init scripts, each
+runlevel is given a single rc file. In System V, each runlevel is given its own
+directory, each containing numerous init scripts. This provides an organized structure
+that is easy to maintain.</p>
+
+<p>There are several categories of initialization files. These are system startup,
+runlevels, network initialization, and System V compatibility. As per tradition, we'll
+lump everything else into another category.</p>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1406" name="AEN1406">4.1.3.1 System Startup</a></h4>
+
+<p>The first program to run under Slackware besides the Linux kernel is <tt
+class="COMMAND">init</tt>(8). This program reads the <tt
+class="FILENAME">/etc/inittab</tt>(5) file to see how to run the system. It runs the <tt
+class="FILENAME">/etc/rc.d/rc.S</tt> script to prepare the system before going into your
+desired runlevel. The <tt class="FILENAME">rc.S</tt> file enables your virtual memory,
+mounts your filesystems, cleans up certain log directories, initializes Plug and Play
+devices, loads kernel modules, configures PCMCIA devices, sets up serial ports, and runs
+System V init scripts (if found). Obviously <tt class="FILENAME">rc.S</tt> has a lot on
+its plate, but here are some scripts in <tt class="FILENAME">/etc/rc.d</tt> that <tt
+class="FILENAME">rc.S</tt> will call on to complete its work:</p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><tt class="FILENAME">rc.S</tt></dt>
+
+<dd>
+<p>This is the actual system initialization script.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.modules</tt></dt>
+
+<dd>
+<p>Loads kernel modules. Things like your network card, PPP support, and other things are
+loaded here. If this script finds <tt class="FILENAME">rc.netdevice</tt>, it will run
+that as well.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.pcmcia</tt></dt>
+
+<dd>
+<p>Probes for and configures any PCMCIA devices that you might have on your system. This
+is most useful for laptop users, who probably have a PCMCIA modem or network card.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.serial</tt></dt>
+
+<dd>
+<p>Configures your serial ports by running the appropriate <tt
+class="COMMAND">setserial</tt> commands.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.sysvinit</tt></dt>
+
+<dd>
+<p>Looks for System V init scripts for the desired runlevel and runs them. This is
+discussed in more detail below.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1454" name="AEN1454">4.1.3.2 Runlevel Initialization
+Scripts</a></h4>
+
+<p>After system initialization is complete, <tt class="COMMAND">init</tt> moves on to
+runlevel initialization. A runlevel describes the state that your machine will be running
+in. Sound redundant? Well, the runlevel tells <tt class="COMMAND">init</tt> if you will
+be accepting multiuser logins or just a single user, whether or not you want network
+services, and if you will be using the X Window System or <tt
+class="COMMAND">agetty</tt>(8) to handle logins. The files below define the different
+runlevels in Slackware Linux.</p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><tt class="FILENAME">rc.0</tt></dt>
+
+<dd>
+<p>Halt the system (runlevel 0). By default, this is symlinked to <tt
+class="FILENAME">rc.6</tt>.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.4</tt></dt>
+
+<dd>
+<p>Multiuser startup (runlevel 4), but in X11 with KDM, GDM, or XDM as the login
+manager.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.6</tt></dt>
+
+<dd>
+<p>Reboot the system (runlevel 6).</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.K</tt></dt>
+
+<dd>
+<p>Startup in single user mode (runlevel 1).</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.M</tt></dt>
+
+<dd>
+<p>Multiuser mode (runlevels 2 and 3), but with the standard text-based login. This is
+the default runlevel in Slackware.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1493" name="AEN1493">4.1.3.3 Network Initialization</a></h4>
+
+<p>Runlevels 2, 3, and 4 will start up the network services. The following files are
+responsible for the network initialization:</p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><tt class="FILENAME">rc.inet1</tt></dt>
+
+<dd>
+<p>Created by <tt class="COMMAND">netconfig</tt>, this file is responsible for
+configuring the actual network interface.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.inet2</tt></dt>
+
+<dd>
+<p>Runs after <tt class="FILENAME">rc.inet1</tt> and starts up basic network
+services.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.atalk</tt></dt>
+
+<dd>
+<p>Starts up AppleTalk services.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.httpd</tt></dt>
+
+<dd>
+<p>Starts up the Apache web server. Like a few other rc scripts, this one can also be
+used to stop and restart a service. <tt class="FILENAME">rc.httpd</tt> takes arguments of
+stop, start, or restart. &#13;</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.news</tt></dt>
+
+<dd>
+<p>Starts up the news server.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1534" name="AEN1534">4.1.3.4 System V Compatibility</a></h4>
+
+<p>System V init compatibility was introduced in Slackware 7.0. Many other Linux
+distributions make use of this style instead of the BSD style. Basically each runlevel is
+given a subdirectory for init scripts, whereas BSD style gives one init script to each
+runlevel.</p>
+
+<p>The <tt class="FILENAME">rc.sysvinit</tt> script will search for any System V init
+scripts you have in <tt class="FILENAME">/etc/rc.d</tt> and run them, if the runlevel is
+appropriate. This is useful for certain commercial software packages that install System
+V init scripts</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1546" name="AEN1546">4.1.3.5 Other Files</a></h4>
+
+<p>The scripts described below are the other system initialization scripts. They are
+typically run from one of the major scripts above, so all you need to do is edit the
+contents.</p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><tt class="FILENAME">rc.gpm</tt></dt>
+
+<dd>
+<p>Starts up general purpose mouse services. Allows you to copy and paste at the Linux
+console. Occasionally, gpm will cause problems with the mouse when it is used under X
+windows. If you experience problems with the mouse under X, try taking away the
+executable permission from this file and stopping the gpm server.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.font</tt></dt>
+
+<dd>
+<p>Loads the custom screen font for the console.</p>
+</dd>
+
+<dt><tt class="FILENAME">rc.local</tt></dt>
+
+<dd>
+<p>Contains any specific startup commands for your system. This is empty after a fresh
+install, as it is reserved for local administrators. This script is run after all other
+initialization has taken place.</p>
+</dd>
+</dl>
+</div>
+
+<p>To enable a script, all you need to do is add the execute permissions to it with the
+<tt class="COMMAND">chmod</tt> command. To disable a script, remove the execute
+permissions from it. For more information about <tt class="COMMAND">chmod</tt>, see <a
+href="#FILESYSTEM-STRUCTURE-PERMISSIONS">Section 9.2</a>.</p>
+</div>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SYSTEM-CONFIGURATION-KERNEL"
+name="SYSTEM-CONFIGURATION-KERNEL">4.2 Selecting a Kernel</a></h2>
+
+<p>The kernel is the part of the operating system that provides hardware access, process
+control, and overall system control. The kernel contains support for your hardware
+devices, so picking one for your system is an important setup step.</p>
+
+<p>Slackware provides more than a dozen precompiled kernels that you can pick from, each
+with a standard set of drivers and additional specific drivers. You can run one of the
+precompiled kernels or you can build your own kernel from source. Either way, you need to
+make sure that your kernel has the hardware support your system needs.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1581" name="AEN1581">4.2.1 The <tt
+class="FILENAME">/kernels</tt> Directory on the Slackware CD-ROM</a></h3>
+
+<p>The precompiled Slackware kernels are available in the <tt
+class="FILENAME">/kernels</tt> directory on the Slackware CD-ROM or on the FTP site in
+the main Slackware directory. The available kernels change as new releases are made, so
+the documentation in that directory is always the authoritative source. The <tt
+class="FILENAME">/kernels</tt> directory has subdirectories for each kernel available.
+The subdirectories have the same name as their accompanying boot disk. In each
+subdirectory you will find the following files:</p>
+
+<div class="INFORMALTABLE"><a id="AEN1587" name="AEN1587"></a>
+<table border="0" frame="void" width="100%" class="CALSTABLE">
+<col width="33%" />
+<col width="67%" />
+<thead>
+<tr>
+<th>File</th>
+<th>Purpose</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td><tt class="FILENAME">System.map</tt></td>
+<td>The system map file for this kernel</td>
+</tr>
+
+<tr>
+<td><tt class="FILENAME">bzImage</tt></td>
+<td>The actual kernel image</td>
+</tr>
+
+<tr>
+<td><tt class="FILENAME">config</tt></td>
+<td>The source configuration file for this kernel</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>To use a kernel, copy the <tt class="FILENAME">System.map</tt> and <tt
+class="FILENAME">config</tt> files to your <tt class="FILENAME">/boot</tt> directory and
+copy the kernel image to <tt class="FILENAME">/boot/vmlinuz</tt>. Run <tt
+class="COMMAND">/sbin/lilo</tt>(8) to install LILO for the new kernel, and then reboot
+your system. That's all there is to installing a new kernel.</p>
+
+<p>The kernels that end with a .i are IDE kernels. That is, they include no SCSI support
+in the base kernel. The kernels that end with .s are SCSI kernels. They include all the
+IDE support in .i kernels, plus SCSI support.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SYSTEM-CONFIGURATION-KERNEL-COMPILE"
+name="SYSTEM-CONFIGURATION-KERNEL-COMPILE">4.2.2 Compiling a Kernel from Source</a></h3>
+
+<p>The question &#8220;Should I compile a kernel for my system?&#8221; is often asked by
+new users. The answer is a definite maybe. There are few instances where you will need to
+compile a kernel specific to your system. Most users can use a precompiled kernel and the
+loadable kernel modules to achieve a fully working system. You will want to compile a
+kernel for your system if you are upgrading kernel versions to one that we do not
+currently offer in Slackware, or if you have patched the kernel source to get special
+device support that is not in the native kernel source. Anyone with an SMP system will
+definitely want to compile a kernel with SMP support. Also, many users find a custom
+compiled kernel runs much faster on their machine. You may find it useful to compile the
+kernel with optimizations for the specific processor in your machine.</p>
+
+<p>Building your own kernel is not that hard. The first step is to make sure you have the
+kernel source installed on your system. Make sure that you installed the packages from
+the K series during the installation. You will also want to make sure you have the D
+series installed, specifically the C compiler, GNU make, and GNU binutils. In general,
+it's a good idea to have the entire D series installed if you plan on doing any kind of
+development. You can also download the latest kernel source from <a
+href="http://www.kernel.org/mirrors" target="_top">http://www.kernel.org/mirrors</a>.</p>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1624" name="AEN1624">4.2.2.1 Linux Kernel version 2.4.x
+Compilation</a></h4>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">su -</kbd>
+Password:
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /usr/src/linux</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The first step is to bring the kernel source into its base state. We issue this
+command to do that (note, you may wish to back-up the <tt class="FILENAME">.config</tt>
+file as this command will delete it without warning):</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make mrproper</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now you can configure the kernel for your system. The current kernel offers three ways
+of doing this. The first is the original text-based question and answer system. It asks a
+bunch of questions and then builds a configuration file. The problem with this method is
+that if you mess up, you must start over. The method that most people prefer is the menu
+driven one. Lastly, there is an X-based kernel configuration tool. Pick the one you want
+and issue the appropriate command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">make config</kbd> (text-based Q&amp;A version)
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">make menuconfig</kbd> (menu driven, text-based version)
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">make xconfig</kbd> (X-based version, make sure you are in X first)
+</pre>
+</td>
+</tr>
+</table>
+
+<div class="FIGURE"><a id="SYSTEM-CONFIGURATION-MAKE-MENUCONFIG"
+name="SYSTEM-CONFIGURATION-MAKE-MENUCONFIG"></a>
+<p><b>Figure 4-1. Kernel Configuration Menu</b></p>
+
+<p><img src="system-configuration/make-menuconfig-w.png" /></p>
+</div>
+
+<p>New users will probably find <tt class="COMMAND">menuconfig</tt> to be the easiest to
+use. Help screens are provided that explain the various parts of the kernel. After
+configuring your kernel, exit the configuration program. It will write the necessary
+configuration files. Now we can prepare the source tree for a build:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make dep</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make clean</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The next step is to compile the kernel. First try issuing the <tt
+class="COMMAND">bzImage</tt> command below.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make bzImage</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This may take a while, depending on your CPU speed. During the build process, you will
+see the compiler messages. After building the kernel image, you will want to build any
+parts of the kernel that you flagged as modular.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make modules</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We can now install the kernel and modules that you compiled. To install the kernel on
+a Slackware system, these commands should be issued:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">mv /boot/vmlinuz /boot/vmlinuz.old</kbd>
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">cat arch/i386/boot/bzImage &#62; /vmlinuz</kbd>
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">mv /boot/System.map /boot/System.map.old</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cp System.map /boot/System.map</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make modules_install</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You will want to edit <tt class="FILENAME">/etc/lilo.conf</tt> and add a section to
+boot your old kernel in case your new one does not work. After doing that, run <tt
+class="COMMAND">/sbin/lilo</tt> to install the new boot block. You can now reboot with
+your new kernel.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN1686" name="AEN1686">4.2.2.2 Linux Kernel Version
+2.6.x</a></h4>
+
+<p>The compilation of a 2.6 kernel is only slightly different from a 2.4 or a 2.2 kernel,
+but it is important that you understand the differences before delving in. It's no longer
+necessary to run <tt class="COMMAND">make dep</tt> and <tt class="COMMAND">make
+clean</tt>. Also, the kernel compilation process is not as verbose in the 2.6 kernel
+series. This results in a build process that is easier to understand, but has some short
+comings as well. If you have trouble building the kernel, it's highly recommended that
+you turn verbosity back up. You do this simply by appending <var class="OPTION">V=1</var>
+to the build. This allows you to log more information that could help a kernel developer
+or other friendly geek aid you in resolving the issue.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">make bzImage V=1</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SYSTEM-CONFIGURATION-KERNEL-MODULES"
+name="SYSTEM-CONFIGURATION-KERNEL-MODULES">4.2.3 Using Kernel Modules</a></h3>
+
+<p>Kernel modules are another name for device drivers that can be inserted into a running
+kernel. They allow you to extend the hardware supported by your kernel without needing to
+pick another kernel or compile one yourself.</p>
+
+<p>Modules can also be loaded and unloaded at any time, even when the system is running.
+This makes upgrading specific drivers easy for system administrators. A new module can be
+compiled, the old one removed, and the new one loaded, all without rebooting the
+machine.</p>
+
+<p>Modules are stored in the <tt class="FILENAME">/lib/modules/<var
+class="REPLACEABLE">kernel version</var></tt> directory on your system. They can be
+loaded at boot time through the <tt class="FILENAME">rc.modules</tt> file. This file is
+very well commented and offers examples for major hardware components. To see a list of
+modules that are currently active, use the <tt class="COMMAND">lsmod</tt>(1) command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">lsmod</kbd>
+Module Size Used by
+parport_pc 7220 0
+parport 7844 0 [parport_pc]
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You can see here that I only have the parallel port module loaded. To remove a module,
+you use the <tt class="COMMAND">rmmod</tt>(1) command. Modules can be loaded by the <tt
+class="COMMAND">modprobe</tt>(1) or <tt class="COMMAND">insmod</tt>(1) command. <tt
+class="COMMAND">modprobe</tt> is usually safer because it will load any modules that the
+one you're trying to load depends on.</p>
+
+<p>A lot of users never have to load or unload modules by hand. They use the kernel
+autoloader for module management. By default, Slackware includes <var
+class="OPTION">kmod</var> in its kernels. <var class="OPTION">kmod</var> is a kernel
+option that enables the kernel to automatically load modules as they are requested. For
+more information on <var class="OPTION">kmod</var> and how it is configured, see <tt
+class="FILENAME">/usr/src/linux/Documentation/kmod.txt</tt>. You'll have needed to have
+the kernel source package, or downloaded kernel source from <a href="http://kernel.org"
+target="_top">http://kernel.org</a>.</p>
+
+<p>More information can be found in the man pages for each of these commands, plus the
+<tt class="FILENAME">rc.modules</tt> file.</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="NETWORK-CONFIGURATION" name="NETWORK-CONFIGURATION"></a>Chapter 5 Network
+Configuration</h1>
+
+<div class="SECT1">
+<h2 class="SECT1"><a id="NETWORK-CONFIGURATION-NETCONFIG"
+name="NETWORK-CONFIGURATION-NETCONFIG">5.1 Introduction: netconfig is your
+friend.</a></h2>
+
+<p>When you initially installed Slackware, the setup program invoked the <tt
+class="COMMAND">netconfig</tt> program. <tt class="COMMAND">netconfig</tt> attempted to
+perform the following functions for you:</p>
+
+<ul>
+<li>
+<p>It asked you for the name of your computer, and the domain name for your computer.</p>
+</li>
+
+<li>
+<p>It gave a brief explanation of the various types of addressing schemes, told when they
+should be used, and asked you which IP addressing scheme you wished to use to configure
+your network card:</p>
+
+<ul>
+<li>
+<p>Static-IP</p>
+</li>
+
+<li>
+<p>DHCP</p>
+</li>
+
+<li>
+<p>Loopback</p>
+</li>
+</ul>
+
+<br />
+<br />
+</li>
+
+<li>
+<p>It then offered to probe for a network card to configure.</p>
+</li>
+</ul>
+
+<p><tt class="COMMAND">netconfig</tt> will generally take care of about 80% of the work
+of configuring your LAN network connection if you will let it. Note that I would strongly
+suggest that you review your config file for a couple of reasons:</p>
+
+<ol type="1">
+<li>
+<p>You should never trust a setup program to properly configure your computer. If you use
+a setup program, you should review the configuration yourself.</p>
+</li>
+
+<li>
+<p>If you are still learning Slackware and Linux system management, viewing a working
+configuration can be helpful. You'll at least know what the configuration should look
+like. This will allow you to correct problems due to misconfiguration of the system at a
+later date.</p>
+</li>
+</ol>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="NETWORK-CONFIGURATION-HARDWARE"
+name="NETWORK-CONFIGURATION-HARDWARE">5.2 Network Hardware Configuration</a></h2>
+
+<p>Having decided that you wish to bring your Slackware machine on to some form of
+network, the first thing you'll need is a Linux-compatible network card. You will need to
+take a little care to ensure that the card is truly Linux-compatible (please refer to the
+Linux Documentation Project and/or the kernel documentation for information on the
+current status of your proposed network card). As a general rule, you will most likely be
+pleasantly surprised by the number of networking cards that are supported under the more
+modern kernels. Having said that, I'd still suggest referring to any of the various Linux
+hardware compatibility lists (such as <a
+href="http://www.eskimo.com/%7Elo/linux/hardwarelinks.html" target="_top">The GNU/Linux
+Beginners Group Hardware Compatibility Links</a> and <a
+href="http://www.linux.org/docs/ldp/howto/Hardware-HOWTO/" target="_top">The Linux
+Documentation Project Hardware HOWTO</a>) that are available on the Internet before
+purchasing your card. A little extra time spent in research can save days or even weeks
+trying to troubleshoot a card that isn't compatible with Linux at all.</p>
+
+<p>When you visit the Linux Hardware Compatibility lists available on the Internet, or
+when you refer to the kernel documentation installed on your machine, it would be wise to
+note which kernel module you'll need to use to support your network card.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-HARDWARE-MODULES"
+name="NETWORK-CONFIGURATION-HARDWARE-MODULES">5.2.1 Loading Network Modules</a></h3>
+
+<p>Kernel modules that are to be loaded on boot-up are loaded from the <tt
+class="FILENAME">rc.modules</tt> file in <tt class="FILENAME">/etc/rc.d</tt> or by the
+kernel's auto module loading started by <tt class="FILENAME">/etc/rc.d/rc.hotplug</tt>.
+The default <tt class="FILENAME">rc.modules</tt> file includes a Network device support
+section. If you open <tt class="FILENAME">rc.modules</tt> and look for that section,
+you'll notice that it first checks for an executable <tt
+class="FILENAME">rc.netdevice</tt> file in <tt class="FILENAME">/etc/rc.d/</tt>. This
+script is created if <tt class="COMMAND">setup</tt> successfully autoprobes your network
+device during installation.</p>
+
+<p>Below that &#8220;if&#8221; block is a list of network devices and modprobe lines,
+each commented out. Find your device and uncomment the corresponding modprobe line, then
+save the file. Running <tt class="FILENAME">rc.modules</tt> as <tt
+class="USERNAME">root</tt> should now load your network device driver (as well as any
+other modules that are listed and uncommented). Note that some modules (such as the
+ne2000 driver) require parameters; make sure you select the correct line.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-HARDWARE-LAN"
+name="NETWORK-CONFIGURATION-HARDWARE-LAN">5.2.2 LAN (10/100/1000Base-T and Base-2)
+cards</a></h3>
+
+<p>This heading encompasses all of the internal PCI and ISA networking cards. Drivers for
+these cards are provided via loadable kernel modules as covered in the previous
+paragraph. <tt class="FILENAME">/sbin/netconfig</tt> should have probed for your card and
+successfully set up your <tt class="FILENAME">rc.netdevice</tt> file. If this did not
+occur, the most likely problem would be that the module that you're attempting to load
+for a given card is incorrect (it is not unheard of for different generations of the same
+brand of card from the same manufacturer to require different modules). If you are
+certain that the module that you're attempting to load is the correct one, your next best
+bet would be to refer to the documentation for the module in an attempt to discover
+whether or not specific parameters are required during when the module is
+initialized.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-HARDWARE-MODEMS"
+name="NETWORK-CONFIGURATION-HARDWARE-MODEMS">5.2.3 Modems</a></h3>
+
+<p>Like LAN cards, modems can come with various bus support options. Until recently, most
+modems were 8 or 16 bit ISA cards. With the efforts of Intel and motherboard
+manufacturers everywhere to finally kill off the ISA bus completely, it is common now to
+find that most modems are either external modems that connect to a serial or USB port or
+are internal PCI modems. If you wish for your modem to work with Linux, it is <span
+class="emphasis"><i class="EMPHASIS">VITALLY</i></span> important to research your
+prospective modem purchase, particularly if you are considering purchasing a PCI modem.
+Many, if not most, PCI modems available on store shelves these days are WinModems.
+WinModems lack some basic hardware on the modem card itself: the functions performed by
+this hardware are typically offloaded onto the CPU by the modem driver and the Windows
+operating system. This means that they do not have the standard serial interface that
+PPPD will be expecting to see when you try to dial out to your Internet Service
+Provider.</p>
+
+<p>If you want to be absolutely sure that the modem you're purchasing will work with
+Linux, purchase an external hardware modem that connects to the serial port on your PC.
+These are guaranteed to work better and be less trouble to install and maintain, though
+they require external power and tend to cost more.</p>
+
+<p>There are several web sites that provide drivers and assistance for configuring
+WinModem based devices. Some users have reported success configuring and installing
+drivers for the various winmodems, including Lucent, Conexant, and Rockwell chipsets. As
+the required software for these devices is not an included part of Slackware, and varies
+from driver to driver, we will not go into detail on them.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-HARDWARE-PCMCIA"
+name="NETWORK-CONFIGURATION-HARDWARE-PCMCIA">5.2.4 PCMCIA</a></h3>
+
+<p>As part of your Slackware install, you are given the opportunity to install the pcmcia
+package (in the &#8220;A&#8221; series of packages). This package contains the
+applications and setup files required to work with PCMCIA cards under Slackware. It is
+important to note that the pcmcia package only installs the generic software required to
+work with PCMCIA cards under Slackware. It does NOT install any drivers or modules. The
+available modules and drivers will be in the <tt class="FILENAME">/lib/modules/`uname
+-r`/pcmcia</tt> directory. You may need to do some experimentation to find a module that
+will work with your network card.</p>
+
+<p>You will need to edit <tt class="FILENAME">/etc/pcmcia/network.opts</tt> (for an
+Ethernet card) or <tt class="FILENAME">/etc/pcmcia/wireless.opts</tt> (if you have a
+wireless networking card). Like most Slackware configuration files, these two files are
+very well commented and it should be easy to determine which modifications need to be
+made.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="NETWORK-CONFIGURATION-TCPIP"
+name="NETWORK-CONFIGURATION-TCPIP">5.3 TCP/IP Configuration</a></h2>
+
+<p>At this point, your network card should be physically installed in your computer, and
+the relevant kernel modules should be loaded. You will not yet be able to communicate
+over your network card, but information about the network device can be obtained with <tt
+class="COMMAND">ifconfig -a</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">ifconfig -a</kbd>
+eth0 Link encap:Ethernet HWaddr 00:A0:CC:3C:60:A4
+UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
+RX packets:110081 errors:1 dropped:0 overruns:0 frame:0
+TX packets:84931 errors:0 dropped:0 overruns:0 carrier:0
+collisions:0 txqueuelen:100
+RX bytes:114824506 (109.5 Mb) TX bytes:9337924 (8.9 Mb)
+Interrupt:5 Base address:0x8400
+
+lo Link encap:Local Loopback
+inet addr:127.0.0.1 Mask:255.0.0.0
+UP LOOPBACK RUNNING MTU:16436 Metric:1
+RX packets:2234 errors:0 dropped:0 overruns:0 frame:0
+TX packets:2234 errors:0 dropped:0 overruns:0 carrier:0
+collisions:0 txqueuelen:0
+RX bytes:168758 (164.8 Kb) TX bytes:168758 (164.8 Kb)
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If you just typed <tt class="COMMAND">/sbin/ifconfig</tt> without the <var
+class="OPTION">-a</var> suffix, you would not see the <tt class="FILENAME">eth0</tt>
+interface, as your network card does not yet have a valid IP address or route.</p>
+
+<p>While there are many different ways to setup and subnet a network, all of them can be
+broken down into two types: Static and Dynamic. Static networks are setup such that each
+node (geek lingo for thing with an IP address) always has the same IP address. Dynamic
+networks are setup in such a way that the IP addresses for the nodes are controlled by a
+single server called the DHCP server.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-TCPIP-DHCP"
+name="NETWORK-CONFIGURATION-TCPIP-DHCP">5.3.1 DHCP</a></h3>
+
+<p>DHCP (or Dynamic Host Configuration Protocol), is a means by which an IP address may
+be assigned to a computer on boot. When the DHCP <span class="emphasis"><i
+class="EMPHASIS">client</i></span> boots, it puts out a request on the Local Area Network
+for a DHCP <span class="emphasis"><i class="EMPHASIS">server</i></span> to assign it an
+IP address. The DHCP server has a pool (or <span class="emphasis"><i
+class="EMPHASIS">scope</i></span>) of IP addresses available. The server will respond to
+this request with an IP address from the pool, along with a <span class="emphasis"><i
+class="EMPHASIS">lease time</i></span>. Once the lease time for a given IP address lease
+has expired, the client must contact the server again and repeat the negotiation.</p>
+
+<p>The client will then accept the IP address from the server and will configure the
+requested interface with the IP address. There is one more handy trick that DHCP clients
+use for negotiating the IP address that they will be assigned, however. The client will
+remember it's last assigned IP address, and will request that the server re-assign that
+IP address to the client again upon next negotiation. If possible, the server will do so,
+but if not, a new address is assigned. So, the negotiation resembles the following:</p>
+
+<p class="LITERALLAYOUT">&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Client</i></span>:&nbsp;Is&nbsp;there&nbsp;a&nbsp;DHCP&nbsp;server&nbsp;available&nbsp;on&nbsp;the&nbsp;LAN?<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Server</i></span>:&nbsp;Yes,&nbsp;there&nbsp;is.&nbsp;Here&nbsp;I&nbsp;am.<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Client</i></span>:&nbsp;I&nbsp;need&nbsp;an&nbsp;IP&nbsp;address.<br />
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Server</i></span>:&nbsp;You&nbsp;may&nbsp;take&nbsp;192.168.10.10&nbsp;for&nbsp;19200&nbsp;seconds.<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Client</i></span>:&nbsp;Thank&nbsp;you.</p>
+
+<p class="LITERALLAYOUT">&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Client</i></span>:&nbsp;Is&nbsp;there&nbsp;a&nbsp;DHCP&nbsp;server&nbsp;available&nbsp;on&nbsp;the&nbsp;LAN?<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Server</i></span>:Yes,&nbsp;there&nbsp;is.&nbsp;Here&nbsp;I&nbsp;am.<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Client</i></span>:I&nbsp;need&nbsp;an&nbsp;IP&nbsp;address.&nbsp;The&nbsp;last&nbsp;time&nbsp;we<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;talked,&nbsp;I&nbsp;had&nbsp;192.168.10.10;<br />
+&nbsp;&nbsp;&nbsp;&nbsp;May&nbsp;I&nbsp;have&nbsp;it&nbsp;again?<br />
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Server</i></span>:Yes,&nbsp;you&nbsp;may&nbsp;(or&nbsp;No,&nbsp;you&nbsp;may&nbsp;not:&nbsp;take&nbsp;192.168.10.12&nbsp;instead).<br />
+
+&nbsp;&nbsp;&nbsp;&nbsp;<span class="emphasis"><i
+class="EMPHASIS">Client</i></span>:&nbsp;Thank&nbsp;you.</p>
+
+<p>The DHCP client in Linux is <tt class="COMMAND">/sbin/dhcpcd</tt>. If you load <tt
+class="FILENAME">/etc/rc.d/rc.inet1</tt> in your favorite text editor, you will notice
+that <tt class="COMMAND">/sbin/dhcpcd</tt> is called about midway through the script.
+This will force the conversation shown above. <tt class="COMMAND">dhcpcd</tt> will also
+track the amount of time left on the lease for the current IP address, and will
+automatically contact the DHCP server with a request to renew the lease when necessary.
+DHCP can also control related information, such as what ntp server to use, what route to
+take, etc.</p>
+
+<p>Setting up DHCP on Slackware is simple. Just run <tt class="COMMAND">netconfig</tt>
+and select DHCP when offered. If you have more than one NIC and do not wish <tt
+class="FILENAME">eth0</tt> to be configured by DHCP, just edit the <tt
+class="FILENAME">/etc/rc.d/rc.inet1.conf</tt> file and change the related variable for
+your NIC to &#8220;<var class="LITERAL">YES</var>&#8221;.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-TCPIP-STATIC"
+name="NETWORK-CONFIGURATION-TCPIP-STATIC">5.3.2 Static IP</a></h3>
+
+<p>Static IP addresses are fixed addresses that only change if manually told to. These
+are used in any case where an administrator doesn't want the IP information to change,
+such for internal servers on a LAN, any server connected to the Internet, and networked
+routers. With static IP addressing, you assign an address and leave it at that. Other
+machines know that you are always at that certain IP address and can contact you at that
+address always.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-TCPIP-CONF"
+name="NETWORK-CONFIGURATION-TCPIP-CONF">5.3.3 <tt
+class="FILENAME">/etc/rc.d/rc.inet1.conf</tt></a></h3>
+
+<p>If you plan on assigning an IP address to your new Slackware box, you may do so either
+through the <tt class="FILENAME">netconfig</tt> script, or you may edit <tt
+class="FILENAME">/etc/rc.d/rc.inet1.conf</tt>. In <tt
+class="FILENAME">/etc/rc.d/rc.inet1.conf</tt> , you will notice:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ # Primary network interface card (eth0)
+ IPADDR[0]=""
+ NETMASK[0]=""
+ USE_DHCP[0]=""
+ DHCP_HOSTNAME[0]=""
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Then further at the bottom:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ GATEWAY=""
+</pre>
+</td>
+</tr>
+</table>
+
+<p>In this case, our task is merely to place the correct information between the
+double-quotes. These variables are called by <tt class="FILENAME">/etc/rc.d/rc.inet1</tt>
+at boot time to setup the nics. For each NIC, just enter the correct IP information, or
+put &#8220;<var class="LITERAL">YES</var>&#8221; for <var class="LITERAL">USE_DHCP</var>.
+Slackware will startup the interfaces with the information placed here in the order they
+are found.</p>
+
+<p>The <var class="LITERAL">DEFAULT_GW</var> variable sets up the default route for
+Slackware. All communications between your computer and other computers on the Internet
+must pass through that gateway if no other route is specified for them. If you are using
+DHCP, you will usually not need to enter anything here, as the DHCP server will specify
+what gateway to use.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-TCPIP-RESOLVER"
+name="NETWORK-CONFIGURATION-TCPIP-RESOLVER">5.3.4 <tt
+class="FILENAME">/etc/resolv.conf</tt></a></h3>
+
+<p>Ok, so you've got an IP address, you've got a default gateway, you may even have ten
+million dollars (give us some), but what good is that if you can't resolve names to IP
+addresses? No one wants to type in <tt class="HOSTID">72.9.234.112</tt> into their web
+browser to reach <tt class="HOSTID">www.slackbook.org</tt>. After all, who other than the
+authors would memorize that IP address? We need to setup DNS, but how? That's where <tt
+class="FILENAME">/etc/resolv.conf</tt> comes into play.</p>
+
+<p>Chances are you already have the proper options in <tt
+class="FILENAME">/etc/resolv.conf</tt>. If you setup your network connection using DHCP,
+the DHCP server should handle updating this file for you. (Technically the DHCP server
+just tells <tt class="COMMAND">dhcpcd</tt> what to put here, and it obeys.) If you need
+to manually update your DNS server list though, you'll need to hand edit <tt
+class="FILENAME">/etc/resolv.conf</tt>. Below is an example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cat /etc/resolv.conf</kbd>
+nameserver 192.168.1.254
+search lizella.net
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The first line is simple. The nameserver directive tells us what DNS servers to query.
+By necessity these are always IP addresses. You may have as many listed there as you
+like. Slackware will happily check one after the other until one returns a match.</p>
+
+<p>The second line is a little more interesting. The search directive gives us a list of
+domain names to assume whenever a DNS request is made. This allows you to contact a
+machine by only the first part of its FQDN (Fully Qualified Domain Name). For example, if
+&#8220;slackware.com&#8221; were in your search path, you could reach <tt
+class="HOSTID">http://store.slackware.com</tt> by just pointing your web browser at <tt
+class="HOSTID">http://store</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">ping -c 1 store</kbd>
+PING store.slackware.com (69.50.233.153): 56 data bytes
+64 bytes from 69.50.233.153 : icmp_seq=0 ttl=64 time=0.251 ms
+1 packets transmitted, 1 packets received, 0% packet loss
+round-trip min/avg/max = 0.251/0.251/0.251 ms
+</pre>
+</td>
+</tr>
+</table>
+
+<br />
+<br />
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-TCPIP-HOSTS"
+name="NETWORK-CONFIGURATION-TCPIP-HOSTS">5.3.5 <tt
+class="FILENAME">/etc/hosts</tt></a></h3>
+
+<p>Now that we've got DNS working fine, what if we want to bypass our DNS server, or add
+a DNS entry for a machine that isn't in DNS? Slackware includes the oft-loved <tt
+class="FILENAME">/etc/hosts</tt> file which contains a local list of DNS names and IP
+addresses they should match to.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cat /etc/hosts</kbd>
+127.0.0.1 localhost locahost.localdomain
+192.168.1.101 redtail
+172.14.66.32 foobar.slackware.com
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Here you can see that localhost has an IP address of <tt class="HOSTID">127.0.0.1</tt>
+(always reserved for localhost), redtail can be reached at <tt
+class="HOSTID">192.168.1.101</tt>, and <tt class="HOSTID">foobar.slackware.com</tt> is
+<tt class="HOSTID">172.14.66.32</tt>.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="NETWORK-CONFIGURATION-PPP" name="NETWORK-CONFIGURATION-PPP">5.4
+PPP</a></h2>
+
+<p>Many people still connect to the Internet through some kind of dialup connection. The
+most common method is PPP, though SLIP is still occasionally used. Setting up your system
+to speak PPP to a remote server is pretty easy. We've included a few tools to help you in
+setting it up.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1954" name="AEN1954">5.4.1 <tt
+class="COMMAND">pppsetup</tt></a></h3>
+
+<p>Slackware includes a program called <tt class="COMMAND">pppsetup</tt> to configure
+your system to use your dialup account. It shares a look and feel similar to our <tt
+class="COMMAND">netconfig</tt> program. To run the program, make sure you are logged in
+as root. Then type <tt class="COMMAND">pppsetup</tt> to run it. You should see a screen
+like this:</p>
+
+<p>The program will present a series of questions, to which you will feed it appropriate
+answers. Things like your modem device, the modem initialization string, and the ISP
+phone number. Some items will have a default, which you can accept in most cases.</p>
+
+<p>After the program runs, it will create a <tt class="COMMAND">ppp-go</tt> program and a
+<tt class="COMMAND">ppp-off</tt> program. These are used to start and stop, respectively,
+the PPP connection. The two programs are located in <tt class="FILENAME">/usr/sbin</tt>
+and need root privileges to run.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN1969" name="AEN1969">5.4.2 <tt
+class="FILENAME">/etc/ppp</tt></a></h3>
+
+<p>For most users, running <tt class="COMMAND">pppsetup</tt> will be sufficient. However,
+there may be an instance where you want to tweak some of the values used by the PPP
+daemon. All of the configuration information is kept in <tt
+class="FILENAME">/etc/ppp</tt>. Here is a list of what the different files are for:</p>
+
+<div class="INFORMALTABLE"><a id="AEN1975" name="AEN1975"></a>
+<table border="0" frame="void" class="CALSTABLE">
+<col width="1*" />
+<col width="3*" />
+<tbody>
+<tr>
+<td><tt class="COMMAND">ip-down</tt></td>
+<td>
+<p>This script is run by <tt class="COMMAND">pppd</tt> after the PPP connection is
+ended.</p>
+</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">ip-up</tt></td>
+<td>
+<p>This script is run by <tt class="COMMAND">pppd</tt> when there's a successful ppp
+connection. Put any commands you want run after a successful connection in this file.</p>
+</td>
+</tr>
+
+<tr>
+<td><tt class="FILENAME">options</tt></td>
+<td>
+<p>General configuration options for <tt class="COMMAND">pppd</tt>.</p>
+</td>
+</tr>
+
+<tr>
+<td><tt class="FILENAME">options.demand</tt></td>
+<td>
+<p>General configuration options for <tt class="COMMAND">pppd</tt> when run in demand
+dialing mode.</p>
+</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">pppscript</tt></td>
+<td>
+<p>The commands sent to the modem.</p>
+</td>
+</tr>
+
+<tr>
+<td><tt class="FILENAME">pppsetup.txt</tt></td>
+<td>
+<p>A log of what you entered when you ran <tt class="COMMAND">pppsetup</tt>.</p>
+</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<div class="NOTE">
+<table class="NOTE" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/note.png"
+hspace="5" alt="Note" /></td>
+<td align="LEFT" valign="TOP">
+<p>Most of these files won't be there until after you run <tt
+class="COMMAND">pppsetup</tt>.</p>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="NETWORK-CONFIGURATION-WIRELESS"
+name="NETWORK-CONFIGURATION-WIRELESS">5.5 Wireless</a></h2>
+
+<p>Wireless networking is still a relatively new thing in the world of computers, yet is
+quickly catching on as more people begin to purchase laptops and want networking on the
+go, without having to fool with some old twisted pair cable. This trend doesn't appear to
+be slowing down. Unfortunately, wireless networking isn't yet as strongly supported in
+Linux as traditional wired networking.</p>
+
+<p>There are three basic steps to configuring an 802.11 wireless Ethernet card:</p>
+
+<ol type="1">
+<li>
+<p>Hardware support for the wireless card</p>
+</li>
+
+<li>
+<p>Configure the card to connect to a wireless access point</p>
+</li>
+
+<li>
+<p>Configure the network</p>
+</li>
+</ol>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN2033" name="AEN2033">5.5.1 Hardware Support</a></h3>
+
+<p>Hardware support for a wireless card is provided through the kernel, either with a
+module or built in to the kernel. Generally, most newer Ethernet cards are provided
+through kernel modules, so you'll want to determine the appropriate kernel module and
+load it through <tt class="FILENAME">/etc/rc.d/rc.modules</tt>. <tt
+class="COMMAND">netconfig</tt> may not detect your wireless card, so you'll probably need
+to determine the card yourself. See <a
+href="http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/"
+target="_top">http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/</a> for more
+information on kernel drivers for various wireless cards.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN2044" name="AEN2044">5.5.2 Configure the Wireless
+Settings</a></h3>
+
+<p>The vast majority of this work is done by <tt class="COMMAND">iwconfig</tt>, so as
+always read the man page for <tt class="COMMAND">iwconfig</tt> if you need more
+information.</p>
+
+<p>First, you'll want to configure your wireless access point. Wireless access points
+vary quite a bit in their terminology, and how to configure them, so you may need to
+adjust a bit to accommodate your hardware. In general, you'll need at least the following
+information:</p>
+
+<ul>
+<li>
+<p>The domain ID, or name of the network (called the ESSID by <tt
+class="COMMAND">iwconfig</tt>)</p>
+</li>
+
+<li>
+<p>The channel the WAP uses</p>
+</li>
+
+<li>
+<p>The encryption settings, including any keys used (preferably in hexadecimal)</p>
+</li>
+</ul>
+
+<div class="WARNING">
+<table class="WARNING" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/warning.png"
+hspace="5" alt="Warning" /></td>
+<td align="LEFT" valign="TOP">
+<p>A NOTE ABOUT WEP. WEP is quit flawed, but it's much better than nothing. If you wish a
+greater degree of security on your wireless network, you should investigate VPNs or
+IPSec, both of which are beyond the scope of this document. You might also configure your
+WAP not to advertise its domain ID/ ESSID. A thorough discussion of wireless policy is
+beyond the scope of this section, but a quick Google search will turn up more than you
+ever wanted to know.</p>
+</td>
+</tr>
+</table>
+</div>
+
+<p>Once you've gathered the above information, and assuming you've used <tt
+class="COMMAND">modprobe</tt> to load the appropriate kernel driver, you can edit <tt
+class="FILENAME">rc.wireless.conf</tt> and add your settings. The <tt
+class="FILENAME">rc.wireless.conf</tt> file is a bit untidy. The least effort is to
+modify the generic section with your ESSID and KEY, and CHANNEL if required by your card.
+(Try not setting CHANNEL, and if it works, great; if not, set the CHANNEL as
+appropriate.) If you're daring, you can modify the file so that only the necessary
+variables are set. The variable names in <tt class="FILENAME">rc.wireless.conf</tt>
+correspond to the <tt class="COMMAND">iwconfig</tt> parameters, and are read by <tt
+class="FILENAME">rc.wireless</tt> and used in the appropriate <tt
+class="COMMAND">iwconfig</tt> commands.</p>
+
+<p>If you have your key in hexadecimal, that's ideal, since you can be fairly confident
+that your WAP and <tt class="COMMAND">iwconfig</tt> will agree on the key. If you only
+have a string, you can't be sure how your WAP will translate that into a hexadecimal key,
+so some guesswork may be needed (or get your WAP's key in hex).</p>
+
+<p>Once you've modified <tt class="FILENAME">rc.wireless.conf</tt>, run <tt
+class="FILENAME">rc.wireless</tt> as <tt class="USERNAME">root</tt>, then run <tt
+class="FILENAME">rc.inet1</tt>, again as <tt class="USERNAME">root</tt>. You can test
+your wireless networking with standard testing tools such as <tt
+class="COMMAND">ping</tt>, along with <tt class="COMMAND">iwconfig</tt>. If you have a
+wired interface you may wish to use <tt class="COMMAND">ifconfig</tt> to turn those
+interfaces off while you test your wireless networking to ensure there's no interference.
+You may also want to test your changes through a reboot.</p>
+
+<p>Now that you've seen how to edit <tt class="FILENAME">/etc/rc.d/rc.wireless</tt> for
+you default network, let's take a closer look at iwconfig and see how it all works. This
+will teach you the quick and dirty way of setting up wifi for those times when you find
+yourself at an Internet cafe, coffee shop, or any other wifi hot spot and wish to get
+online.</p>
+
+<p>The first step is to tell your wireless NIC what network to join. Make sure you
+replace &#8220;<tt class="FILENAME">eth0</tt>&#8221; with whatever network interface your
+wireless card uses and change &#8220;<var class="REPLACEABLE">mynetwork</var>&#8221; to
+the essid you wish to use. Yes, we know you're smarter than that. Next you'll have to
+specify the encryption key (if any) used on your wireless network. Finally specify the
+channel to use (if needed).</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">iwconfig eth0 essid "<var
+class="REPLACEABLE">mynetwork</var>"</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">iwconfig eth0 key <var
+class="REPLACEABLE">XXXXXXXXXXXXXXXXXXXXXXXXXXX</var></kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">iwconfig eth0 channel n</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That should be all on the wireless end of things.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN2101" name="AEN2101">5.5.3 Configure the Network</a></h3>
+
+<p>This is done in the exact same way as wired networks. Simply refer to earlier sections
+of this chapter.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="NETWORK-CONFIGURATION-NFS" name="NETWORK-CONFIGURATION-NFS">5.6
+Network File Systems</a></h2>
+
+<p>At this point, you should have a working TCP/IP connection to your network. You should
+be able to ping other computers on your internal network and, if you have configured an
+appropriate gateway, you should also be able to ping computers on the Internet itself. As
+we know, the whole point in bringing a computer onto a network is to access information.
+While some people might bring a computer up on a network just for the fun of it, most
+people wish to be able to share files and printers. They wish to be able to access
+documents on the Internet or play an online game. Having TCP/IP installed and functional
+on your new Slackware system is a means to that end, but with just TCP/IP installed,
+functionality will be very rudimentary. To share files, we will have to transfer them
+back and forth using either FTP or SCP. We cannot browse files on our new Slackware
+computer from the Network Neighborhood or My Network Places icons on Windows computers.
+We'd like to be able to access files on other Unix machines seamlessly.</p>
+
+<p>Ideally, we'd like to be able to use a <span class="emphasis"><i
+class="EMPHASIS">network file system</i></span> to allow us transparent access to our
+files on other computers. The programs that we use to interact with information stored on
+our computers really do not need to know on what computer a given file is stored; they
+just need to know that it exists and how to get to it. It is then the responsibility of
+the operating system to manage access to that file through the available file systems and
+network file systems. The two most commonly used network file systems are SMB (as
+implemented by Samba) and NFS.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-NSF-SMB"
+name="NETWORK-CONFIGURATION-NSF-SMB">5.6.1 SMB/Samba/CIFS</a></h3>
+
+<p>SMB (for Server Message Block) is a descendant of the older NetBIOS protocol that was
+initially used by IBM in their LAN Manager product. Microsoft has always been fairly
+interested in NetBIOS and it's successors (NetBEUI, SMB and CIFS). The Samba project has
+existed since 1991, when it was originally written to link an IBM PC running NetBIOS with
+a Unix server. These days, SMB is the preferred method for sharing file and print
+services over a network for virtually the entire civilized world because Windows supports
+it.</p>
+
+<p>Samba's configuration file is <tt class="FILENAME">/etc/samba/smb.conf</tt>; one of
+the most well commented and documented configuration files you will find anywhere. Sample
+shares have been setup for you to view and modify for your needs. If you need even
+tighter control the man page for smb.conf is indispensable. Since Samba is documented so
+well in the places I've mentioned above, we will not rewrite the documentation here. We
+will, however, quickly cover the basics.</p>
+
+<p><tt class="FILENAME">smb.conf</tt> is broken down into multiple sections: one section
+per share, and a global section for setting options that are to be used everywhere. Some
+options are only valid in the global section; some are only valid outside the global
+section. Remember that the global section can be over-ridden by any other section. Refer
+to the man pages for more information.</p>
+
+<p>You will most likely wish to edit your <tt class="FILENAME">smb.conf</tt> file to
+reflect the network settings in your LAN. I would suggest modifying the items listed
+below:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+[global]
+# workgroup = NT-Domain-Name or Workgroup-Name, eg: LINUX2
+workgroup = MYGROUP
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Change the workgroup name to reflect the workgroup or domain name that you are using
+locally.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# server string is the equivalent of the NT Description field
+server string = Samba Server
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will be the name of your Slackware computer displayed in the Network Neighborhood
+(or My Network Places) folder.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# Security mode. Most people will want user level security. See
+# security_level.txt for details. NOTE: To get the behaviour of
+# Samba-1.9.18, you'll need to use "security = share".
+security = user
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You'll almost certainly wish to implement user level security on your Slackware
+system.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# You may wish to use password encryption. Please read
+# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba
+# documentation.
+# Do not enable this option unless you have read those documents
+encrypt passwords = yes
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If encrypt passwords is not enabled, you will not be able to use Samba with NT4.0,
+Win2k, WinXP, and Win2003. Earlier Windows operating systems did not require encryption
+to share files.</p>
+
+<p>SMB is an authenticated protocol, meaning you must supply a correct username and
+password in order to use this service. We tell the samba server what usernames and
+passwords are valid with the <tt class="COMMAND">smbpasswd</tt> command. <tt
+class="COMMAND">smbpasswd</tt> takes a couple of common switches to tell it to either add
+traditional users, or add machine users (SMB requires that you add the computers' NETBIOS
+names as machine users, restricting what computers one can authenticate from).</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Adding a user to the <tt class="FILENAME">/etc/samba/private/smbpasswd</tt> file.
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">smbpasswd -a user</kbd>
+Adding a machine name to the /etc/samba/private/smbpasswd file.
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">smbpasswd -a -m machine</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>It's important to note that a given username or machine name must already exist in the
+<tt class="FILENAME">/etc/passwd</tt> file. You can accomplish this simply with the <tt
+class="COMMAND">adduser</tt> command. Note that when using the <tt
+class="COMMAND">adduser</tt> command to add a machine name one must append a dollar sign
+(&#8220;<var class="LITERAL">$</var>&#8221;) to the machine name. This should <span
+class="emphasis"><i class="EMPHASIS">not</i></span> however, be done with <tt
+class="COMMAND">smbpasswd</tt>. <tt class="COMMAND">smbpasswd</tt> appends the dollar
+sign on its own. Failing to mangle the machine name this way with <tt
+class="COMMAND">adduser</tt> will result in an error when adding the machine name to
+samba.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">adduser machine$</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="NETWORK-CONFIGURATION-NFS-NFS"
+name="NETWORK-CONFIGURATION-NFS-NFS">5.6.2 Network File System (NFS)</a></h3>
+
+<p>NFS (or Network File System) was originally written by Sun for their Solaris
+implementation of Unix. While it is significantly easier to get up and running when
+compared to SMB, it is also significantly less secure. The primary insecurity in NFS is
+that it is easy to spoof user and group id's from one machine to another. NFS is an
+unauthenticated protocol. Future versions of the NFS protocol are being devised that
+enhance security, but these are not common at the time of this writing.</p>
+
+<p>NFS configuration is governed by the <tt class="FILENAME">/etc/exports</tt> file. When
+you load the default <tt class="FILENAME">/etc/exports</tt> file into an editor, you'll
+see a blank file with a two line comment on top. We'll need to add a line to the exports
+file for each directory that we wish to export, with a listing of client workstations
+that will be allowed to access that file. For instance, if we wished to export directory
+<tt class="FILENAME">/home/foo</tt> to workstation Bar, we would simply add the line:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+/home/foo Bar(rw)
+</pre>
+</td>
+</tr>
+</table>
+
+<p>to our <tt class="FILENAME">/etc/exports</tt>. Below, you'll find the example from the
+man page for the <tt class="FILENAME">exports</tt> file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# sample /etc/exports file
+/ master(rw) trusty(rw,no_root_squash)
+/projects proj*.local.domain(rw)
+/usr *.local.domain(ro) @trusted(rw)
+/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
+/pub (ro,insecure,all_squash)
+</pre>
+</td>
+</tr>
+</table>
+
+<p>As you can see, there are various options available, but most should be fairly clear
+from this example.</p>
+
+<p>NFS works under the assumption that a given user on one machine in a network has the
+same user ID on all machines across the network. When an attempt is made to read or write
+from a NFS client to an NFS server, a UID is passed as part of the read/write request.
+This UID is treated the same as if the read/write request originated on the local
+machine. As you can see, if one could arbitrarily specify a given UID when accessing
+resources on a remote system, Bad Things (tm) could and would happen. As a partial hedge
+against this, each directory is mounted with the <var class="OPTION">root_squash</var>
+option. This maps the UID for any user claiming to be root to a different UID, thus
+preventing root access to the files or folders in the exported directory. <var
+class="OPTION">root_squash</var> seems to be enabled by default as a security measure,
+but the authors recommend specifying it anyway in your <tt
+class="FILENAME">/etc/exports</tt> file.</p>
+
+<p>You can also export a directory directly from the command line on the server by using
+the <tt class="COMMAND">exportfs</tt> command as follows:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">exportfs -o rw,no_root_squash Bar:/home/foo</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This line exports the <tt class="FILENAME">/home/foo</tt> directory to the computer
+&#8220;<tt class="HOSTID">Bar</tt>&#8221; and grants <tt class="HOSTID">Bar</tt>
+read/write access. Additionally, the NFS server will not invoke <var
+class="OPTION">root_squash</var>, which means any user on Bar with a UID of
+&#8220;0&#8221; (root's UID) will have the same privileges as root on the server. The
+syntax does look strange (usually when a directory is specified in <var
+class="LITERAL">computer:/directory/file</var> syntax, you are referring to a file in a
+directory on a given computer).</p>
+
+<p>You'll find more information on the man page for the exports file.</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="X-WINDOW-SYSTEM" name="X-WINDOW-SYSTEM"></a>Chapter 6 X Configuration</h1>
+
+<p>Starting with Slackware-10.0, the X Window environment in Slackware is provided by
+Xorg. X is responsible for providing a graphical user interface. It is independent from
+the operating system, unlike Windows or the MacOS.</p>
+
+<p>The X Window System is implemented through many programs that run in userland. The two
+main components are the server and the window manager. The server provides the lowlevel
+functions for interacting with your video hardware, thus it is system specific. The
+window manager sits on top of the server and provides the user interface. The advantage
+to this is you can have many different graphical interfaces by simply changing the window
+manager you use.</p>
+
+<p>Configuring X can be a complex task. The reason for this is the vast numbers of video
+cards available for the PC architecture, most of which use different programming
+interfaces. Luckily, most cards today support basic video standards known as VESA, and if
+your card is among them you'll be able to start X using the <tt
+class="COMMAND">startx</tt> command right out of the box.</p>
+
+<p>If this doesn't work with your card, or if you'd like to take advantage of the
+high-performance features of your video card such as hardware acceleration or 3-D
+hardware rendering, then you'll need to reconfigure X.</p>
+
+<p>To configure X, you'll need to make an <tt class="FILENAME">/etc/X11/xorg.conf</tt>
+file. This file contains lots of details about your video hardware, mouse, and monitor.
+It's a very complex configuration file, but fortunately there are several programs to
+help create one for you. We'll mention a few of them here.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="X-WINDOW-SYSTEM-XORGCONFIG"
+name="X-WINDOW-SYSTEM-XORGCONFIG">6.1 <tt class="COMMAND">xorgconfig</tt></a></h2>
+
+<p>This is a simple menu driven frontend that's similar in feel to the Slackware
+installer. It simply tells the X server to take a look at the card, and then set up the
+best initial configuration file it can make based on the information it gathers. The
+generated <tt class="FILENAME">/etc/X11/xorg.conf</tt> file should be a good starting
+point for most systems (and should work without modification).</p>
+
+<p>This is a text-based X configuration program that's designed for the advanced system
+administrator. Here's a sample walkthrough using <tt class="COMMAND">xorgconfig</tt>.
+First, start the program:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">xorgconfig</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will present a screenful of information about <tt
+class="COMMAND">xorgconfig</tt>. To continue, press <kbd class="USERINPUT">ENTER</kbd>.
+<tt class="COMMAND">xorgconfig</tt> will ask you to verify you have set your <tt
+class="ENVAR">PATH</tt> correctly. It should be fine, so go ahead and hit <kbd
+class="USERINPUT">ENTER</kbd>.</p>
+
+<div class="FIGURE"><a id="X-WINDOW-SYSTEM-1" name="X-WINDOW-SYSTEM-1"></a>
+<p><b>Figure 6-1. <tt class="COMMAND">xorgconfig</tt> Mouse Configuration</b></p>
+
+<p><img src="x-window-system/xorgconfig1-w.png" /></p>
+</div>
+
+<p>Select your mouse from the menu presented. If you don't see your serial mouse listed,
+pick the Microsoft protocol -- it's the most common and will probably work. Next <tt
+class="COMMAND">xorgconfig</tt> will ask you about using <var
+class="OPTION">ChordMiddle</var> and <var class="OPTION">Emulate3Buttons</var>. You'll
+see these options described in detail on the screen. Use them if the middle button on
+your mouse doesn't work under X, or if your mouse only has two buttons (<var
+class="OPTION">Emulate3Buttons</var> lets you simulate the middle button by pressing both
+buttons simultaneously). Then, enter the name of your mouse device. The default choice,
+<tt class="FILENAME">/dev/mouse</tt>, should work since the link was configured during
+Slackware setup. If you're running GPM (the Linux mouse server) in repeater mode, you can
+set your mouse type to <tt class="FILENAME">/dev/gpmdata</tt> to have X get information
+about the mouse through <tt class="COMMAND">gpm</tt>. In some cases (with busmice
+especially) this can work better, but most users shouldn't do this.</p>
+
+<p><tt class="COMMAND">xorgconfig</tt> will ask you about enabling special key bindings.
+If you need this say &#8220;<kbd class="USERINPUT">y</kbd>&#8221;. Most users can say
+&#8220;<kbd class="USERINPUT">n</kbd>&#8221; -- enter this if you're not sure.</p>
+
+<div class="FIGURE"><a id="X-WINDOW-SYSTEM-2" name="X-WINDOW-SYSTEM-2"></a>
+<p><b>Figure 6-2. <tt class="COMMAND">xorgconfig</tt> Horizontal Sync</b></p>
+
+<p><img src="x-window-system/xorgconfig2-w.png" /></p>
+</div>
+
+<p>In the next section you enter the sync range for your monitor. To start configuring
+your monitor, press <kbd class="USERINPUT">ENTER</kbd>. You will see a list of monitor
+types -- choose one of them. Be careful not to exceed the specifications of your monitor.
+Doing so could damage your hardware.</p>
+
+<div class="FIGURE"><a id="X-WINDOW-SYSTEM-3" name="X-WINDOW-SYSTEM-3"></a>
+<p><b>Figure 6-3. <tt class="COMMAND">xorgconfig</tt> Vertical Sync</b></p>
+
+<p><img src="x-window-system/xorgconfig3-w.png" /></p>
+</div>
+
+<p>Specify the vertical sync range for your monitor (you should find this in the manual
+for the monitor). xorgconfig will ask you to enter strings to identify the monitor type
+in the <tt class="FILENAME">xorg.conf</tt> file. Enter anything you like on these 3 lines
+(including nothing at all).</p>
+
+<div class="FIGURE"><a id="X-WINDOW-SYSTEM-4" name="X-WINDOW-SYSTEM-4"></a>
+<p><b>Figure 6-4. <tt class="COMMAND">xorgconfig</tt> Video Card</b></p>
+
+<p><img src="x-window-system/xorgconfig4-w.png" /></p>
+</div>
+
+<p>Now you have the opportunity to look at the database of video card types. You'll want
+to do this, so say &#8220;<kbd class="USERINPUT">y</kbd>&#8221;, and select a card from
+the list shown. If you don't see your exact card, try selecting one that uses the same
+chipset and it will probably work fine.</p>
+
+<p>Next, tell <tt class="COMMAND">xorgconfig</tt> how much RAM you have on your video
+card. <tt class="COMMAND">xorgconfig</tt> will want you to enter some more descriptive
+text about your video card. If you like, you can enter descriptions on these three
+lines.</p>
+
+<p>You'll then be asked which display resolutions you want to use. Again, going with the
+provided defaults should be fine to start with. Later on, you can edit the <tt
+class="FILENAME">/etc/X11/xorg.conf</tt> file and rearrange the modes so 1024x768 (or
+whatever mode you like) is the default.</p>
+
+<p>At this point, the <tt class="COMMAND">xorgconfig</tt> program will ask if you'd like
+to save the current configuration file. Answer yes, and the X configuration file is
+saved, completing the setup process. You can start X now with the <tt
+class="COMMAND">startx</tt> command.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="X-WINDOW-SYSTEM-XORGSETUP" name="X-WINDOW-SYSTEM-XORGSETUP">6.2
+<tt class="COMMAND">xorgsetup</tt></a></h2>
+
+<p>The second way to configure X is to use <tt class="COMMAND">xorgsetup</tt>, an
+automagical configuration program that comes with Slackware.</p>
+
+<p>To run <tt class="COMMAND">xorgsetup</tt>, log in as root and type:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">xorgsetup</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If you've already got an <tt class="FILENAME">/etc/X11/xorg.conf</tt> file (because
+you've already configured X), you'll be asked if you want to backup the existing config
+file before continuing. The original file will be renamed to <tt
+class="FILENAME">/etc/X11/xorg.conf.backup</tt>.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="X-WINDOW-SYSTEM-XINITRC" name="X-WINDOW-SYSTEM-XINITRC">6.3
+xinitrc</a></h2>
+
+<p><tt class="COMMAND">xinit</tt>(1) is the program that actually starts X; it is called
+by <tt class="COMMAND">startx</tt>(1), so you may not have noticed it (and probably don't
+really need to). Its configuration file, however, determines which programs (including
+and especially the window manager) are run when X starts up. <tt
+class="COMMAND">xinit</tt> first checks your home directory for a <tt
+class="FILENAME">.xinitrc</tt> file. If the file is found, it gets run; otherwise, <tt
+class="FILENAME">/var/X11R6/lib/xinit/xinitrc</tt> (the systemwide default) is used.
+Here's a simple <tt class="FILENAME">xinitrc</tt> file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+#!/bin/sh
+# $XConsortium: xinitrc.cpp,v 1.4 91/08/22 11:41:34 rws Exp $
+
+userresources=$HOME/.Xresources
+usermodmap=$HOME/.Xmodmap
+sysresources=/usr/X11R6/lib/X11/xinit/.Xresources
+sysmodmap=/usr/X11R6/lib/X11/xinit/.Xmodmap
+
+# merge in defaults and keymaps
+
+if [ -f $sysresources ]; then
+ xrdb -merge $sysresources
+fi
+
+if [ -f $sysmodmap ]; then
+ xmodmap $sysmodmap
+fi
+
+if [ -f $userresources ]; then
+ xrdb -merge $userresources
+fi
+
+if [ -f $usermodmap ]; then
+ xmodmap $usermodmap
+fi
+
+# start some nice programs
+
+twm &#38;
+xclock -geometry 50x50-1+1 &#38;
+xterm -geometry 80x50+494+51 &#38;
+xterm -geometry 80x20+494-0 &#38;
+exec xterm -geometry 80x66+0+0 -name login
+</pre>
+</td>
+</tr>
+</table>
+
+<p>All of those &#8220;if&#8221; blocks are there to merge in various configuration
+settings from other files. The interesting part of the file is toward the end, where
+various programs are run. This X session will begin with the <tt
+class="COMMAND">twm</tt>(1) window manager, a clock, and three terminals. Note the <tt
+class="COMMAND">exec</tt> before the last <tt class="COMMAND">xterm</tt>. What that does
+is replace the currently running shell (the one that's executing this <tt
+class="FILENAME">xinitrc</tt> script) with that <tt class="COMMAND">xterm</tt>(1)
+command. When the user quits that <tt class="COMMAND">xterm</tt>, the X session will
+end.</p>
+
+<p>To customize your X startup, copy the default <tt
+class="FILENAME">/var/X11R6/lib/xinit/xinitrc</tt> to <tt
+class="FILENAME">~/.xinitrc</tt> and edit it, replacing those program lines with whatever
+you like. The end of mine is simply:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# Start the window manager:
+exec startkde
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Note that there are several <tt class="FILENAME">xinitrc.*</tt> files in <tt
+class="FILENAME">/var/X11R6/lib/xinit</tt> that correspond to various window managers and
+GUIs. You can use any of those, if you like.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="X-WINDOW-SYSTEM-XWMCONFIG" name="X-WINDOW-SYSTEM-XWMCONFIG">6.4
+<tt class="COMMAND">xwmconfig</tt></a></h2>
+
+<p>For years, Unix was used almost exclusively as the operating system for servers, with
+the exception of high-powered professional workstations. Only the technically inclined
+were likely to use a Unix-like operating system, and the user interface reflected this
+fact. GUIs tended to be fairly bare-bones, designed to run a few necessarily graphical
+applications like CAD programs and image renderers. Most file and system management was
+conducted at the command line. Various vendors (Sun Microsystems, Silicon Graphics, etc)
+were selling workstations with an attempt to provide a cohesive &#8220;look and
+feel&#8221;, but the wide variety of GUI toolkits in use by developers led inevitably to
+the dissolution of the desktop's uniformity. A scrollbar might not look the same in two
+different applications. Menus might appear in different places. Programs would have
+different buttons and checkboxes. Colors ranged widely, and were generally hard-coded in
+each toolkit. As long as the users were primarily technical professionals, none of this
+mattered much.</p>
+
+<p>With the advent of free Unix-like operating systems and the growing number and variety
+of graphical applications, X has recently gained a wide desktop user base. Most users, of
+course, are accustomed to the consistent look and feel provided by Microsoft's Windows or
+Apple's MacOS; the lack of such consistency in X-based applications became a barrier to
+its wider acceptance. In response, two open source projects have been undertaken: The K
+Desktop Environment, or KDE, and the GNU Network Object Model Environment, known as
+GNOME. Each has a wide variety of applications, from taskbars and file managers to games
+and office suites, written with the same GUI toolkit and tightly integrated to provide a
+uniform, consistent desktop.</p>
+
+<p>The differences in KDE and GNOME are generally fairly subtle. They each look different
+from the other, because each uses a different GUI toolkit. KDE is based on the Qt library
+from Troll Tech AS, while GNOME uses GTK, a toolkit originally developed for The GNU
+Image Manipulation Program (or The GIMP, for short). As separate projects, KDE and GNOME
+each have their own designers and programmers, with different development styles and
+philosophies. The result in each case, however, has been fundamentally the same: a
+consistent, tightly integrated desktop environment and application collection. The
+functionality, usability, and sheer prettiness of both KDE and GNOME rival anything
+available on other operating systems.</p>
+
+<p>The best part, though, is that these advanced desktops are free. This means you can
+have either or both (yes, at the same time). The choice is yours.</p>
+
+<p>In addition to the GNOME and KDE desktops, Slackware includes a large collection of
+window managers. Some are designed to emulate other operating systems, some for
+customization, others for speed. There's quite a variety. Of course you can install as
+many as you want, play with them all, and decide which you like the most.</p>
+
+<p>To make desktop selection easy, Slackware also includes a program called <tt
+class="COMMAND">xwmconfig</tt> that can be used to select a desktop or window manager. It
+is run like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">xwmconfig</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<div class="FIGURE"><a id="FIG-X-WINDOW-SYSTEM-XWMCONFIG"
+name="FIG-X-WINDOW-SYSTEM-XWMCONFIG"></a>
+<p><b>Figure 6-5. Desktop Configuration with <tt class="COMMAND">xorgconfig</tt></b></p>
+
+<p><img src="x-window-system/xwmconfig-w.png" /></p>
+</div>
+
+<p>You'll be given a list of all the desktops and window managers installed. Just select
+the one you want from the list. Each user on your system will need to run this program,
+since different users can use different desktops, and not everyone will want the default
+one you selected at installation.</p>
+
+<p>Then just start up X, and you're good to go.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="X-WINDOW-SYSTEM-XDM" name="X-WINDOW-SYSTEM-XDM">6.5 <tt
+class="COMMAND">xdm</tt></a></h2>
+
+<p>As Linux becomes more and more useful as a desktop operating system, many users find
+it desirable for the machine to boot straight into a graphical environment. For this, you
+will need to tell Slackware to boot straight into X, and assign a graphical login
+manager. Slackware ships with three graphical login tools, <tt
+class="COMMAND">xdm</tt>(1), <tt class="COMMAND">kdm</tt>, and <tt
+class="COMMAND">gdm</tt>(1).</p>
+
+<p><tt class="COMMAND">xdm</tt> is the graphical login manager shipped with the X.org
+system. It's ubiquitous, but not as fully features as alternatives. <tt
+class="COMMAND">kdm</tt> is the graphical login manager shipped with KDE, The K Desktop
+Environment. Finally, <tt class="COMMAND">gdm</tt> is the login manager shipped with
+GNOME. Any of the choices will allow you to log in as any user, and choose what desktop
+you wish to use.</p>
+
+<p>Unfortunately, Slackware doesn't include a nice program like <tt
+class="COMMAND">xwmconfig</tt> for choosing what login manager to use, so if all three
+are installed you may have to do some editing to choose your preference. But first, we'll
+discuss how to boot into a graphical environment.</p>
+
+<p>In order to start X at boot, you need to boot into run-level 4. Run-levels are just a
+way of telling <tt class="COMMAND">init</tt>(8) to do something different when it starts
+the OS. We do this by editing the config file for <tt class="COMMAND">init</tt>, <tt
+class="FILENAME">/etc/inittab</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# These are the default runlevels in Slackware:
+# 0 = halt
+# 1 = single user mode
+# 2 = unused (but configured the same as runlevel 3)
+# 3 = multiuser mode (default Slackware runlevel)
+# 4 = X11 with KDM/GDM/XDM (session managers)
+# 5 = unused (but configured the same as runlevel 3)
+# 6 = reboot
+
+# Default runlevel. (Do not set to 0 or 6)
+id:3:initdefault:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>In order to make Slackware boot to a graphical environment, we just change the 3 to a
+4.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ # Default runlevel. (Do not set to 0 or 6)
+ id:4:initdefault:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now Slackware will boot into runlevel 4 and execute <tt
+class="FILENAME">/etc/rc.d/rc.4</tt>. This file starts up X and calls whatever login
+manager you've chosen. So, how do we choose login managers? There are a few ways to do
+this, and I'll explain them after we look at <tt class="FILENAME">rc.4</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ # Try to use GNOME's gdm session manager:
+ if [ -x /usr/bin/gdm ]; then
+ exec /usr/bin/gdm -nodaemon
+ fi
+
+ # Not there? OK, try to use KDE's kdm session manager:
+ if [ -x /opt/kde/bin/kdm ]; then
+ exec /opt/kde/bin/kdm -nodaemon
+ fi
+
+ # If all you have is XDM, I guess it will have to do:
+ if [ -x /usr/X11R6/bin/xdm ]; then
+ exec /usr/X11R6/bin/xdm -nodaemon
+ fi
+</pre>
+</td>
+</tr>
+</table>
+
+<p>As you can see here, <tt class="FILENAME">rc.4</tt> first checks to see if <tt
+class="COMMAND">gdm</tt> is executable, and if so runs it. Second on the list is <tt
+class="COMMAND">kdm</tt>, and finally <tt class="COMMAND">xdm</tt>. One way of choosing a
+login manager is to simply remove the ones you don't wish to use using <tt
+class="COMMAND">removepkg</tt>. You can find out more about <tt
+class="COMMAND">removepkg</tt> in <a href="#PACKAGE-MANAGEMENT">Chapter 18</a>.</p>
+
+<p>Optionally, you can remove the executable permission from those files that you don't
+want to use. We discuss <tt class="COMMAND">chmod</tt> in <a
+href="#FILESYSTEM-STRUCTURE">Chapter 9</a>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">chmod -x /usr/bin/gdm</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Finally, you can just comment out the lines for the login manager you don't want to
+use.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ # Try to use GNOME's gdm session manager:
+ # if [ -x /usr/bin/gdm ]; then
+ # exec /usr/bin/gdm -nodaemon
+ # fi
+
+ # Not there? OK, try to use KDE's kdm session manager:
+ if [ -x /opt/kde/bin/kdm ]; then
+ exec /opt/kde/bin/kdm -nodaemon
+ fi
+
+ # If all you have is XDM, I guess it will have to do:
+ if [ -x /usr/X11R6/bin/xdm ]; then
+ exec /usr/X11R6/bin/xdm -nodaemon
+ fi
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Any lines preceded by the hash mark (<var class="LITERAL">#</var>) are considered
+comments and the shell silently passes them. Thus, even if <tt class="COMMAND">gdm</tt>
+is installed and executable, the shell (in this case <tt class="COMMAND">bash</tt>) won't
+bother checking for it.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="BOOTING" name="BOOTING"></a>Chapter 7 Booting</h1>
+
+<p>The process of booting your Linux system can sometimes be easy and sometimes be
+difficult. Many users install Slackware on their computer and that's it. They just turn
+it on and it's ready to use. Othertimes, simply booting the machine can be a chore. For
+most users, LILO works best. Slackware includes LILO and Loadlin for booting Slackware
+Linux. LILO will work from a hard drive partition, a hard drive's master boot record, or
+a floppy disk, making it a very versatile tool. Loadlin works from a DOS command line,
+killing DOS and invoking Linux.</p>
+
+<p>Another popular utility for booting Linux is GRUB. GRUB is not included or officially
+supported by Slackware. Slackware holds to the &#8220;tried and true&#8221; standard for
+what gets included inside the distribution. While GRUB works well and includes some
+features that LILO does not, LILO handles all the essential tasks of a boot loader
+reliably with a proven track record. Being younger, GRUB hasn't quite lived up to that
+legacy yet. As it is not included with Slackware, we do not discuss it here. If you wish
+to use GRUB (perhaps it came with another Linux OS and you want to use it to dual-boot)
+consult GRUB's documentation.</p>
+
+<p>This section covers using LILO and Loadlin, the two booters included with Slackware.
+It also explains some typical dual booting scenarios and how you could go about setting
+it up.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BOOTING-LILO" name="BOOTING-LILO">7.1 LILO</a></h2>
+
+<p>The Linux Loader, or LILO, is the most popular booter in use on Linux systems. It is
+quite configurable and can easily be used to boot other operating systems.</p>
+
+<p>Slackware Linux comes with a menu-driven configuration utility called <tt
+class="COMMAND">liloconfig</tt>. This program is first run during the setup process, but
+you can invoke it later by typing <tt class="COMMAND">liloconfig</tt> at the prompt.</p>
+
+<p>LILO reads its settings from the <tt class="COMMAND">/etc/lilo.conf</tt>(5) file. It
+is not read each time you boot up, but instead is read each time you install LILO. LILO
+must be reinstalled to the boot sector each time you make a configuration change. Many
+LILO errors come from making changes to the <tt class="FILENAME">lilo.conf</tt> file, but
+failing to re-run lilo to install these changes. <tt class="COMMAND">liloconfig</tt> will
+help you build the configuration file so that you can install LILO for your system. If
+you prefer to edit <tt class="FILENAME">/etc/lilo.conf</tt> by hand, then reinstalling
+LILO just involves typing <tt class="COMMAND">/sbin/lilo</tt> (as <tt
+class="USERNAME">root</tt>) at the prompt.</p>
+
+<p>When you first invoke <tt class="COMMAND">liloconfig</tt>, it will look like this:</p>
+
+<div class="FIGURE"><a id="BOOTING-SETUP-LILO" name="BOOTING-SETUP-LILO"></a>
+<p><b>Figure 7-1. <tt class="COMMAND">liloconfig</tt></b></p>
+
+<p><img src="booting/setup-lilo-w.png" /></p>
+</div>
+
+<p>If this is your first time setting up LILO, you should pick simple. Otherwise, you
+might find expert to be faster if you are familiar with LILO and Linux. Selecting simple
+will begin the LILO configuration.</p>
+
+<p>If kernel frame buffer support is compiled into your kernel, <tt
+class="COMMAND">liloconfig</tt> will ask which video resolution you would like to use.
+This is the resolution that is also used by the XFree86 frame buffer server. If you do
+not want the console to run in a special video mode, selecting normal will keep the
+standard 80x25 text mode in use.</p>
+
+<p>The next part of the LILO configuration is selecting where you want it installed. This
+is probably the most important step. The list below explains the installation places:</p>
+
+<div class="VARIABLELIST">
+<dl>
+<dt><var class="OPTION">Root</var></dt>
+
+<dd>
+<p>This option installs LILO to the beginning of your Linux root partition. This is the
+safest option if you have other operating systems on your computer. It ensures that any
+other booters are not overwritten. The disadvantage is that LILO will only load from here
+if your Linux drive is the first drive on your system. This is why many people chose to
+create a very small <tt class="FILENAME">/boot</tt> partition as the first drive on their
+system. This allows the kernel and LILO to be installed at the beginning of the drive
+where LILO can find them. Previous versions of LILO contained an infamous flaw known as
+the &#8220;1024 cylinder limit&#8221;. LILO was unable to boot kernels on partitions past
+the 1024th cylinder. Recent editions of LILO have eliminated this problem.</p>
+</dd>
+
+<dt><var class="OPTION">Floppy</var></dt>
+
+<dd>
+<p>This method is even safer than the previous one. It creates a boot floppy that you can
+use to boot your Linux system. This keeps the booter off the hard disk entirely, so you
+only boot this floppy when you want to use Slackware. The flaws with this method are
+obvious. Floppies are notoriously fickle, prone to failures. Secondly, the boot loader is
+no longer self-contained within the computer. If you loose your floppy disk, you'll have
+to make another to boot your system.</p>
+</dd>
+
+<dt><var class="OPTION">MBR</var></dt>
+
+<dd>
+<p>You will want to use this method if Slackware is the only operating system on your
+computer, or if you will be using LILO to choose between multiple operating systems on
+your computer. This is the most preferred method for installing LILO and will work with
+almost any computer system.</p>
+
+<div class="WARNING">
+<table class="WARNING" width="90%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/warning.png"
+hspace="5" alt="Warning" /></td>
+<td align="LEFT" valign="TOP">
+<p>This option will overwrite any other booter you have in the MBR.</p>
+</td>
+</tr>
+</table>
+</div>
+</dd>
+</dl>
+</div>
+
+<p>After selecting the installation location, <tt class="COMMAND">liloconfig</tt> will
+write the configuration file and install LILO. That's it. If you select the expert mode
+you will receive a special menu. This menu allows you to tweak the <tt
+class="FILENAME">/etc/lilo.conf</tt> file, add other operating systems to your boot menu,
+and set LILO to pass special kernel parameters at boot time. The expert menu looks like
+this:</p>
+
+<div class="FIGURE"><a id="BOOTING-LILO-EXPERT" name="BOOTING-LILO-EXPERT"></a>
+<p><b>Figure 7-2. <tt class="COMMAND">liloconfig</tt> Expert Menu</b></p>
+
+<p><img src="booting/setup-lilo-expert-w.png" /></p>
+</div>
+
+<p>Whatever your system configuration is, setting up a working boot loader is easy. <tt
+class="COMMAND">liloconfig</tt> makes setting it up a cinch.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BOOTING-LOADLIN" name="BOOTING-LOADLIN">7.2 LOADLIN</a></h2>
+
+<p>The other booting option that comes with Slackware Linux is LOADLIN. LOADLIN is a DOS
+executable that can be used to start Linux from a running DOS system. It requires the
+Linux kernel to be on the DOS partition so that LOADLIN can load it and properly boot the
+system.</p>
+
+<p>During the installation process, LOADLIN will be copied to root's home directory as a
+.ZIP file. There is no automatic setup process for LOADLIN. You will need to copy the
+Linux kernel (typically <tt class="FILENAME">/boot/vmlinuz</tt>) and the LOADLIN file
+from root's home directory to the DOS partition.</p>
+
+<p>LOADLIN is useful if you would like to make a boot menu on your DOS partition. A menu
+could be added to your <tt class="FILENAME">AUTOEXEC.BAT</tt> file that would allow you
+to pick between Linux or DOS. A choice of Linux would run LOADLIN, thus booting your
+Slackware system. This <tt class="FILENAME">AUTOEXEC.BAT</tt> file under Windows 95 will
+provide a sufficient boot menu:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ @ECHO OFF
+ SET PROMPT=$P$G
+ SET PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\
+ CLS
+ ECHO Please Select Your Operating System:
+ ECHO.
+ ECHO [1] Slackware Linux
+ ECHO [2] Windows 95
+ ECHO.
+ CHOICE /C:12 "Selection? -&gt; "
+ IF ERRORLEVEL 2 GOTO WIN
+ IF ERRORLEVEL 1 GOTO LINUX
+ :WIN
+ CLS
+ ECHO Starting Windows 95...
+ WIN
+ GOTO END
+ :LINUX
+ ECHO Starting Slackware Linux...
+ CD \LINUX
+ LOADLIN C:\LINUX\VMLINUZ ROOT=&lt;root partition device&gt; RO
+ GOTO END
+ :END
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You will want to specify your root partition as a Linux device name, like <tt
+class="FILENAME">/dev/hda2</tt> or something else. You can always use LOADLIN at the
+command line. You simply use it in the same manner as it is in the example above. The
+LOADLIN documentation comes with many examples on how to use it.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BOOTING-DUAL" name="BOOTING-DUAL">7.3 Dual Booting</a></h2>
+
+<p>Many users set up their computers to boot Slackware Linux and another operating
+system. We've described several typical dual boot scenarios below, in case you are having
+difficulty setting up your system.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BOOTING-DUAL-WINDOWS" name="BOOTING-DUAL-WINDOWS">7.3.1
+Windows</a></h3>
+
+<p>Setting up a computer with both MS Windows and Linux is probably the most common dual
+boot scenario. There are numerous ways you can setup the booting, but this section will
+cover two.</p>
+
+<p>Often times when setting up a dual boot system, a person will devise a perfect plan
+for where everything should go but mess up the installation order. It is very important
+to understand that operating systems need to be installed in a certain order for a dual
+boot setup to work. Linux always offers control over what, if anything, gets written to
+the Master Boot Record. Therefore, it's always advisable to install Linux last. Windows
+should be installed first, since it will always write its booter to the Master Boot
+Record, overwriting any entry Linux may have put there.</p>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN2577" name="AEN2577">7.3.1.1 Using LILO</a></h4>
+
+<p>Most people will want to use LILO to chose between Linux and Windows. As stated above,
+you should install Windows first, then Linux.</p>
+
+<p>Let's say you have a 40GB IDE hard disk as the only drive in your system. Let's also
+say that you want to give half of that space to Windows and half of that space to Linux.
+This will present a problem when trying to boot Linux.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ 20GB Windows boot (C:)
+ 1GB Linux root (/)
+ 19GB Linux /usr (/usr)
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You would also want to set aside an adequate amount of space for a Linux swap
+partition. The unwritten rule is to use twice the amount of RAM you have in disk space. A
+64MB system would have 128MB of swap, and so on. Adequate swap space is the discussion of
+many flames on IRC and Usenet. There's no truly &#8220;right&#8221; way to do it, but
+sticking with the rule above should be sufficient.</p>
+
+<p>With your partitions laid out, you should proceed to install Windows. After that is
+set up and working, you should install Linux. The LILO installation needs special
+attention. You will want to select the expert mode for installing LILO.</p>
+
+<p>Begin a new LILO configuration. You will want to install it to Master Boot Record so
+that it can be used to choose between the two operating systems. From the menu, add your
+Linux partition and add your Windows (or DOS) partition. Once that's complete, you can
+install LILO.</p>
+
+<p>Reboot the computer. LILO should load and will display a menu letting you select
+between the operating systems you have installed. Select the name of the OS you wish to
+load (these names were selected when you setup LILO).</p>
+
+<p>LILO is quite a configurable boot loader. It's not just limited to booting Linux or
+DOS. It can boot just about anything. The man pages for <tt class="COMMAND">lilo</tt>(8)
+and <tt class="FILENAME">lilo.conf</tt>(5) provide more detailed information.</p>
+
+<p>What if LILO doesn't work? There are instances where LILO just won't work on a
+particular machine. Fortunately, there is another way to dual boot Linux and Windows.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN2591" name="AEN2591">7.3.1.2 Using LOADLIN</a></h4>
+
+<p>This method can be used if LILO doesn't work on your system, or if you just don't want
+to set up LILO. This method is also ideal for the user that reinstalls Windows often.
+Each time you reinstall Windows, it will overwrite the Master Boot Record, thus
+destroying any LILO installation. With LOADLIN, you are not subject to that problem. The
+biggest disadvantage is that you can only use LOADLIN to boot Linux.</p>
+
+<p>With LOADLIN, you can install the operating systems in any order desired. Be careful
+about installing things to the Master Boot Record, you do not want to do that. LOADLIN
+relies on the Windows partition being bootable. So during the Slackware installation,
+make sure you skip the LILO setup.</p>
+
+<p>After installing the operating systems, copy the <tt class="FILENAME">loadlin<var
+class="REPLACEABLE">X</var>.zip</tt> (where <var class="REPLACEABLE">X</var> is a version
+number, such as <var class="LITERAL">16a</var>) file from root's home directory to your
+Windows partition. Also copy your kernel image to the Windows partition. You will need to
+be in Linux for this to work. This example shows how to do this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">mkdir /win</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">mount -t vfat /dev/hda1 /win</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">mkdir /win/linux</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /root</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cp loadlin* /win/linux</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cp /boot/vmlinuz /win/linux</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">cd /win/linuz</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">unzip loadlin16a.zip</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That will create a <tt class="FILENAME">C:\LINUX</tt> directory on your Windows
+partition (assuming it's <tt class="FILENAME">/dev/hda1</tt>) and copy over the necessary
+stuff for LOADLIN. After doing this, you will need to reboot into Windows to setup a boot
+menu.</p>
+
+<p>Once in Windows, get to a DOS prompt. First, we need to make sure the system is set to
+not boot into the graphical interface.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+C:\&#62; <kbd class="USERINPUT">cd \</kbd>
+C:\&#62; <kbd class="USERINPUT">attrib -r -a -s -h MSDOS.SYS</kbd>
+C:\&#62; <kbd class="USERINPUT">edit MSDOS.SYS</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Add this line to the file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+BootGUI=0
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now save the file and exit the editor. Now edit <tt
+class="FILENAME">C:\AUTOEXEC.BAT</tt> so we can add a boot menu. The following provides
+an example of what a boot menu block in <tt class="FILENAME">AUTOEXEC.BAT</tt> would look
+like:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+cls
+echo System Boot Menu
+echo.
+echo 1 - Linux
+echo 2 - Windows
+echo.
+choice /c:12 "Selection? -&#62; "
+if errorlevel 2 goto WIN
+if errorlevel 1 goto LINUX
+:LINUX
+cls
+echo "Starting Linux..."
+cd \linux
+loadlin c:\linux\vmlinuz root=/dev/hda2 ro
+goto END
+:WIN
+cls
+echo "Starting Windows..."
+win
+goto END
+:END
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The key line is the one that runs LOADLIN. We tell it the kernel to load, the Linux
+root partition, and that we want it mounted read-only initially.</p>
+
+<p>The tools for these two methods are provided with Slackware Linux. There are numerous
+other booters on the market, but these should work for most dual boot setups.</p>
+</div>
+
+<div class="SECT3">
+<hr />
+<h4 class="SECT3"><a id="AEN2633" name="AEN2633">7.3.1.3 Deprecated Windows NT
+Hack</a></h4>
+
+<p>This is the least common dual booting situation. In the days of old, LILO was unable
+to boot Windows NT, requiring Linux users to hack NTLDR, which presented several more
+problems than dual booting between Windows 9x and Linux. Understand that the following
+instructions are deprecated. LILO has been able to boot Windows NT/2000/XP/2003 for many
+years now. If you are using a legacy machine though, you may need to use just such a
+hack.</p>
+
+<ol type="1">
+<li>
+<p>Install Windows NT</p>
+</li>
+
+<li>
+<p>Install Linux, making sure LILO is installed to the superblock of the Linux
+partition</p>
+</li>
+
+<li>
+<p>Get the first 512 bytes of the Linux root partition and store it on the Windows NT
+partition</p>
+</li>
+
+<li>
+<p>Edit <tt class="FILENAME">C:\BOOT.INI</tt> under Windows NT to add a Linux option</p>
+</li>
+</ol>
+
+<p>Installing Windows NT should be fairly straightforward, as should installing Linux.
+From there, it gets a little more tricky. Grabbing the first 512 bytes of the Linux
+partition is easier than it sounds. You will need to be in Linux to accomplish this.
+Assuming your Linux partition is <tt class="FILENAME">/dev/hda2</tt>, issue this
+command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">dd if=/dev/hda2 of=/tmp/bootsect.lnx bs=1 count=512</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That's it. Now you need to copy bootsect.lnx to the Windows NT partition. Here's where
+we run into another problem. Linux does not have stable write support for the NTFS
+filesystem. If you installed Windows NT and formatted your drive as NTFS, you will need
+to copy this file to a FAT floppy and then read from it under Windows NT. If you
+formatted the Windows NT drive as FAT, you can simply mount it under Linux and copy the
+file over. Either way, you will want to get <tt class="FILENAME">/tmp/bootsect.lnx</tt>
+from the Linux drive to <tt class="FILENAME">C:\BOOTSECT.LNX</tt> on the Windows NT
+drive.</p>
+
+<p>The last step is adding a menu option to the Windows NT boot menu. Under Windows NT
+open a command prompt.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+C:\WINNT&#62; <kbd class="USERINPUT">cd \</kbd>
+C:\&#62; <kbd class="USERINPUT">attrib -r -a -s -h boot.ini</kbd>
+C:\&#62; <kbd class="USERINPUT">edit boot.ini</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Add this line to the end of the file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+C:\bootsect.lnx="Slackware Linux"
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Save the changes and exit the editor. When you reboot Windows NT, you will have a
+Linux option on the menu. Choosing it will boot into Linux.</p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BOOTING-DUAL-LINUX" name="BOOTING-DUAL-LINUX">7.3.2
+Linux</a></h3>
+
+<p>Yes, people really do this. This is definitely the easiest dual boot scenario. You can
+simply use LILO and add more entries to the <tt class="FILENAME">/etc/lilo.conf</tt>
+file. That's all there is to it.</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="SHELL" name="SHELL"></a>Chapter 8 The Shell</h1>
+
+<p>In a graphical environment, the interface is provided by a program that creates
+windows, scrollbars, menus, etc. In a commandline environment, the user interface is
+provided by a shell, which interprets commands and generally makes things useable.
+Immediately after logging in (which is covered in this chapter), users are put into a
+shell and allowed to go about their business. This chapter serves as an introduction to
+the shell, and to the most common shell among Linux users-- the Bourne Again Shell
+(bash). For more detailed information on anything in this chapter, check out the <tt
+class="COMMAND">bash</tt>(1) man page.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SHELL-USERS" name="SHELL-USERS">8.1 Users</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN2678" name="AEN2678">8.1.1 Logging In</a></h3>
+
+<p>So you've booted, and you're looking at something that looks like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Welcome to Linux 2.4.18
+Last login: Wed Jan 1 15:59:14 -0500 2005 on tty6.
+darkstar login:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Hmm.. nobody said anything about a login. And what's a darkstar? Don't worry; you
+probably didn't accidentally fire up a hyperspace comm-link to the Empire's artificial
+moon. (I'm afraid the hyperspace comm-link protocol isn't currently supported by the
+Linux kernel. Maybe the 2.8 kernel branch will at last provide this oft looked-for
+support.) No, darkstar is just the name of one of our computers, and its name gets
+stamped on as the default. If you specified a name for your computer during setup, you
+should see it instead of darkstar.</p>
+
+<p>As for the login... If this is your first time, you'll want to log in as <tt
+class="USERNAME">root</tt>. You'll be prompted for a password; if you set one during the
+setup process, that's what it's looking for. If not, just hit enter. That's it-- you're
+in!</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN2693" name="AEN2693">8.1.2 Root: The Superuser</a></h3>
+
+<p>Okay, who or <span class="emphasis"><i class="EMPHASIS">what</i></span> is <tt
+class="USERNAME">root</tt>? And what's it doing with an account on <span
+class="emphasis"><i class="EMPHASIS">your</i></span> system?</p>
+
+<p>Well, in the world of Unix and similar operating systems (like Linux), there are users
+and then there are users. We'll go into this in more detail later, but the important
+thing to know now is that <tt class="USERNAME">root</tt> is the user above all users; <tt
+class="USERNAME">root</tt> is all-powerful and all-knowing, and <span class="emphasis"><i
+class="EMPHASIS">nobody</i></span> disobeys <tt class="USERNAME">root</tt>. It just isn't
+allowed. <tt class="USERNAME">root</tt> is what we call a &#8220;superuser&#8221;, and
+rightly so. And best of all, <tt class="USERNAME">root</tt> is <span class="emphasis"><i
+class="EMPHASIS">you</i></span>.</p>
+
+<p>Cool, huh?</p>
+
+<p>If you're not sure: yes, that's very cool. The catch is, though, that root is
+inherently allowed to break anything it so desires. You might want to skip ahead to <a
+href="#ESSENTIAL-SYSADMIN-USERS-SCRIPTS">Section 12.1.1</a> and see about adding a user;
+then login as that user and work from there. The traditional wisdom is that it's best to
+only become the superuser when absolutely necessary, so as to minimize the possibility of
+accidentally breaking something.</p>
+
+<p>By the way, if you decide you want to be root while you're logged in as someone else,
+no problem. Just use the <tt class="COMMAND">su</tt>(1) command. You'll be asked for <tt
+class="USERNAME">root's</tt> password and then it will make you <tt
+class="USERNAME">root</tt> until you <tt class="COMMAND">exit</tt> or <tt
+class="COMMAND">logout</tt>. You can also become any other user using <tt
+class="COMMAND">su</tt>, provided you know that user's password: <tt class="COMMAND">su
+logan</tt>, for instance, would make you me.</p>
+
+<div class="NOTE">
+<table class="NOTE" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/note.png"
+hspace="5" alt="Note" /></td>
+<td align="LEFT" valign="TOP">
+<p><tt class="USERNAME">root</tt> is allowed to su to any user, without requiring their
+password.</p>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SHELL-COMMAND-LINE" name="SHELL-COMMAND-LINE">8.2 The Command
+Line</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="SHELL-COMMAND-LINE-RUNNING"
+name="SHELL-COMMAND-LINE-RUNNING">8.2.1 Running Programs</a></h3>
+
+<p>It's hard to get much accomplished without running a program; you might be able to
+prop something up with your computer or hold a door open, and some will make the most
+lovely humming noise when running, but that's really about it. And I think we can all
+agree that its use as a humming doorstop isn't what brought the personal computer the
+popularity it now enjoys.</p>
+
+<p>So, remember how almost everything in Linux is a file? Well, that goes for programs,
+too. Every command you run (that isn't built into the shell) resides as a file somewhere.
+You run a program simply by specifying the full path to it.</p>
+
+<p>For instance, remember that <tt class="COMMAND">su</tt> command from the last section?
+Well, it's actually in the <tt class="FILENAME">/bin</tt> directory: <tt
+class="COMMAND">/bin/su</tt> would run it nicely.</p>
+
+<p>So why, then, does just typing <tt class="COMMAND">su</tt> work? After all, you didn't
+say it was in <tt class="FILENAME">/bin</tt>. It could just as easily have been in <tt
+class="FILENAME">/usr/local/share</tt>, right? How did it <span class="emphasis"><i
+class="EMPHASIS">know</i></span>? The answer to that lies in the <tt
+class="ENVAR">PATH</tt> environment variable; most shells have either <tt
+class="ENVAR">PATH</tt> or something very much like <tt class="ENVAR">PATH</tt>. It
+basically contains a list of directories to look in for programs you try to run. So when
+you ran <tt class="COMMAND">su</tt>, your shell ran through its list of directories,
+checking each one for an executable file called <tt class="COMMAND">su</tt> that it could
+run; the first one it came to, it ran. This happens whenever you run a program without
+specifying a full path to it; if you get a &#8220;&#8220;<tt class="ERRORNAME">Command
+not found</tt>&#8221;&#8221; error, that only means that the program you tried to run
+isn't in your <tt class="ENVAR">PATH</tt>. (Of course, this would be true if the program
+doesn't exist at all...) We'll discuss environment variables in more depth in <a
+href="#SHELL-BASH-ENVIRONMENT">Section 8.3.1</a>.</p>
+
+<p>Remember also that &#8220;<tt class="FILENAME">.</tt>&#8221; is shorthand for the
+current directory, so if you happened to be in <tt class="FILENAME">/bin</tt>, <tt
+class="FILENAME">./su</tt> would have worked as an explicit full path.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SHELL-COMMAND-LINE-WILDCARD"
+name="SHELL-COMMAND-LINE-WILDCARD">8.2.2 Wildcard Matching</a></h3>
+
+<p>Nearly every shell recognizes some characters as being substitutes or abbreviations
+that mean anything goes here. Such characters are aptly named wildcards; the most common
+are <var class="LITERAL">*</var> and <var class="LITERAL">?</var>. By convention, <var
+class="LITERAL">?</var> usually matches any single character. For instance, suppose
+you're in a directory with three files: <tt class="FILENAME">ex1.txt</tt>, <tt
+class="FILENAME">ex2.txt</tt>, and <tt class="FILENAME">ex3.txt</tt>. You want to copy
+all of those files (using the <tt class="COMMAND">cp</tt> command we cover in <a
+href="#FILE-COMMANDS-COPYMOVE-CP">Section 10.5.1</a>) to another directory, say <tt
+class="FILENAME">/tmp</tt>. Well, typing <tt class="COMMAND">cp ex1.txt ex2.txt ex3.txt
+/tmp</tt> is entirely too much work. It's much easier to type <tt class="COMMAND">cp
+ex?.txt /tmp</tt>; the <var class="LITERAL">?</var> will match each of the characters
+&#8220;1&#8221;, &#8220;2&#8221;, and &#8220;3&#8221;, and each in turn will be
+substituted in.</p>
+
+<p>What's that you say? That's <span class="emphasis"><i
+class="EMPHASIS">still</i></span> too much work? You're right. It's appalling; we have
+labor laws to protect us from that sort of thing. Fortunately, we also have <var
+class="LITERAL">*</var>. As was already mentioned, <var class="LITERAL">*</var> matches
+&#8220;any number of characters&#8221;, including 0. So if those three files were the
+only ones in the directory, we could have simply said <tt class="COMMAND">cp * /tmp</tt>
+and gotten them all in one fell swoop. Suppose, though, that there is also a file called
+<tt class="FILENAME">ex.txt</tt> and one called <tt class="FILENAME">hejaz.txt</tt>. We
+want to copy <tt class="FILENAME">ex.txt</tt> but not <tt
+class="FILENAME">hejaz.txt</tt>; <tt class="COMMAND">cp ex* /tmp</tt> will do that for
+us.</p>
+
+<p><tt class="COMMAND">cp ex?.txt /tmp</tt>, would, of course, only get our original
+three files; there's no character in <tt class="FILENAME">ex.txt</tt> to match that <var
+class="LITERAL">?</var>, so it would be left out.</p>
+
+<p>Another common wildcard is the bracket pair <var class="LITERAL">[ ]</var>. Any
+characters inside the brackets will be substituted in place of the <var class="LITERAL">[
+]</var> to find matches. Sound confusing? It's not too bad. Suppose for instance, we have
+a directory containing the following 8 files: <tt class="FILENAME">a1</tt>, <tt
+class="FILENAME">a2</tt>, <tt class="FILENAME">a3</tt>, <tt class="FILENAME">a4</tt>, <tt
+class="FILENAME">aA</tt>, <tt class="FILENAME">aB</tt>, <tt class="FILENAME">aC</tt>, and
+<tt class="FILENAME">aD</tt> . We want to only find the files ending in numbers; <var
+class="LITERAL">[ ]</var> will do this for us.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls a[1-4]</kbd>
+a1 a2 a3 a4
+</pre>
+</td>
+</tr>
+</table>
+
+<p>But what we really want is just <tt class="FILENAME">a1</tt>, <tt
+class="FILENAME">a2</tt>, and <tt class="FILENAME">a4</tt>? In the previous example we
+used - to mean all values between 1 and 4. We can also separate individual entries with
+commas.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls a[1,2,4]</kbd>
+a1 a2 a4
+</pre>
+</td>
+</tr>
+</table>
+
+<p>I know what you're thinking now, &#8220;Well what about letters?&#8221; Linux is
+case-sensitive, meaning that <var class="LITERAL">a</var> and <var
+class="LITERAL">A</var> are different characters and are only related in your mind.
+Capitals always come before lowercase letters, so <var class="LITERAL">A</var> and <var
+class="LITERAL">B</var> come before <var class="LITERAL">a</var> and <var
+class="LITERAL">b</var>. Continuing with our earlier example, if we wanted files <tt
+class="FILENAME">a1</tt>, and <tt class="FILENAME">A1</tt>, we can find these quickly
+with <var class="LITERAL">[ ]</var>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls [A,a]1</kbd>
+A1 a1
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Note, that if we had included a hyphen instead of a comma, we would have gotten
+incorrect results.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls [A-a]1</kbd>
+A1 B1 C1 D1 a1
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You can also combine hyphen and comma strings.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls [A,a-d]</kbd>
+A1 a1 b1 c1 d1
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SHELL-COMMAND-LINE-PIPING"
+name="SHELL-COMMAND-LINE-PIPING">8.2.3 Input/Output Redirection and Piping</a></h3>
+
+<p>(Here comes something cool.)</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps &#62; blargh</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Y'know what that is? That's me running <tt class="COMMAND">ps</tt> to see which
+processes are running; <tt class="COMMAND">ps</tt> is covered in <a
+href="#PROCESS-CONTROL-PS">Section 11.3</a>. That's not the cool part. The cool part is
+<var class="LITERAL">&gt; blargh</var>, which means, roughly, take the output from <tt
+class="COMMAND">ps</tt> and write it to a file called <tt class="FILENAME">blargh</tt>.
+But wait, it gets cooler.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps | less</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That one takes the output from <tt class="COMMAND">ps</tt> and pipes it through <tt
+class="COMMAND">less</tt>, so I can scroll through it at my leisure.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps &gt;&gt; blargh</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This is the third most commonly used redirector; it does the same thing as
+&#8220;&gt;&#8221;, except that &#8220;&gt;&gt;&#8221; will append output from <tt
+class="COMMAND">ps</tt> to the file <tt class="FILENAME">blargh</tt>, if said file
+exists. If not, just like &#8220;&gt;&#8221;, it will be created. (&#8220;&gt;&#8221;
+will obliterate the current contents of <tt class="FILENAME">blargh</tt>.)</p>
+
+<p>There is also a &#8220;&lt;&#8221; operator, which means take your input from the
+following, but it's not used nearly so often.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">fromdos &lt; dosfile.txt &gt; unixfile.txt</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Redirection gets really fun when you start piling it up:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps | tac &gt;&gt; blargh</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That will run <tt class="COMMAND">ps</tt>, reverse the lines of its output, and append
+those to the file <tt class="FILENAME">blargh</tt>. You can stack as many of these up as
+you want; just be careful to remember that they get interpreted from left to right.</p>
+
+<p>See the <tt class="COMMAND">bash</tt>(1) man page for more detailed information on
+redirection.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SHELL-BASH" name="SHELL-BASH">8.3 The Bourne Again Shell
+(bash)</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="SHELL-BASH-ENVIRONMENT" name="SHELL-BASH-ENVIRONMENT">8.3.1
+Environment Variables</a></h3>
+
+<p>A Linux system is a complex beast, and there's a lot to keep track of, a lot of little
+details that come into play in your normal interactions with various programs (some of
+which you might not even need to be aware of). Nobody wants to pass a bunch of options to
+every program that gets run, telling it what kind of terminal is being used, the hostname
+of the computer, how their prompt should look...</p>
+
+<p>So as a coping mechanism, users have what's called an environment. The environment
+defines the conditions in which programs run, and some of this definition is variable;
+the user can alter and play with it, as is only right in a Linux system. Pretty much any
+shell will have environment variables (if not, it's probably not a very useable shell).
+Here we will give an overview of the commands bash provides for manipulating its
+environment variables.</p>
+
+<p><tt class="COMMAND">set</tt> by itself will show you all of the environment variables
+that are currently defined, as well as their values. Like most <tt
+class="COMMAND">bash</tt> built-ins, it can also do several other things (with
+parameters); we'll leave it to the <tt class="COMMAND">bash</tt>(1) man page to cover
+that, though. <a href="#EX-SHELL-BASH-ENVIRONMENT">Example 8-1</a> shows an excerpt from
+a <tt class="COMMAND">set</tt> command run on one of the author's computers. Notice in
+this example the <tt class="ENVAR">PATH</tt> variable that was discussed earlier.
+Programs in any of those directories can be run simply by typing the base filename.</p>
+
+<div class="EXAMPLE"><a id="EX-SHELL-BASH-ENVIRONMENT"
+name="EX-SHELL-BASH-ENVIRONMENT"></a>
+<p><b>Example 8-1. Listing Environment Variables with <tt
+class="COMMAND">set</tt></b></p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">set</kbd>
+PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
+/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
+/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
+PIPESTATUS=([0]="0")
+PPID=4978
+PS1='\h:\w\$ '
+PS2='&#62; '
+PS4='+ '
+PWD=/home/logan
+QTDIR=/usr/local/lib/qt
+REMOTEHOST=ninja.tdn
+SHELL=/bin/bash
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">unset <var
+class="REPLACEABLE">VARIABLE</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">unset</tt> will remove any variables that you give it, wiping out
+both the variable and its value; <tt class="COMMAND">bash</tt> will forget that variable
+ever existed. (Don't worry. Unless it's something you explicitly defined in that shell
+session, it'll probably get redefined in any other session.)</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">export <var
+class="REPLACEABLE">VARIABLE=some_value</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now, <tt class="COMMAND">export</tt> is truly handy. Using it, you give the
+environment variable <tt class="ENVAR">VARIABLE</tt> the value &#8220;<var
+class="LITERAL">some_value</var>&#8221;; if <tt class="ENVAR">VARIABLE</tt> didn't exist,
+it does now. If <tt class="ENVAR">VARIABLE</tt> already had a value, well, it's gone.
+That's not so good, if you're just trying to add a directory to your <tt
+class="ENVAR">PATH</tt>. In that case, you probably want to do something like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">export PATH=$PATH:<var
+class="REPLACEABLE">/some/new/directory</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Note the use of <tt class="ENVAR">$PATH</tt> there: when you want <tt
+class="COMMAND">bash</tt> to interpret a variable (replace it with its value), tack a
+<var class="LITERAL">$</var> onto the beginning of the variable's name. For instance, <tt
+class="COMMAND">echo $PATH</tt> will echo the value of <tt class="ENVAR">PATH</tt>, in my
+case:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">echo $PATH</kbd>
+/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
+/usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
+/usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SHELL-BASH-TAB" name="SHELL-BASH-TAB">8.3.2 Tab
+Completion</a></h3>
+
+<p>(Here comes something cool again.)</p>
+
+<ol type="1">
+<li>
+<p>A commandline interface means lots of typing.</p>
+</li>
+
+<li>
+<p>Typing is work.</p>
+</li>
+
+<li>
+<p>Nobody likes work.</p>
+</li>
+</ol>
+
+<p>From 3 and 2, we can determine that (4) nobody likes typing. Fortunately, <tt
+class="COMMAND">bash</tt> saves us from (5) (nobody likes a commandline interface).</p>
+
+<p>How does <tt class="COMMAND">bash</tt> accomplish this wonderful feat, you ask? In
+addition to the wildcard expansion we discussed before, <tt class="COMMAND">bash</tt>
+features tab completion.</p>
+
+<p>Tab completion works something like this: You're typing the name of a file. Maybe it's
+in your <tt class="ENVAR">PATH</tt>, maybe you're typing it out explicitly. All you have
+to do is type enough of the filename to uniquely identify it. Then hit the tab key. <tt
+class="COMMAND">bash</tt> will figure out what you want and finish typing it for you!</p>
+
+<p>Example time. <tt class="FILENAME">/usr/src</tt> contains two subdirectories: <tt
+class="FILENAME">/usr/src/linux</tt> and <tt class="FILENAME">/usr/src/sendmail</tt>. I
+want to see what's in <tt class="FILENAME">/usr/src/linux</tt>. So I just type <tt
+class="COMMAND">ls /usr/src/l</tt>, hit the <kbd class="USERINPUT">TAB</kbd> key, and <tt
+class="COMMAND">bash</tt> gives me <tt class="COMMAND">ls /usr/src/linux</tt>.</p>
+
+<p>Now, suppose there are two directories <tt class="FILENAME">/usr/src/linux</tt> and
+<tt class="FILENAME">/usr/src/linux-old</tt>; If I type <tt
+class="FILENAME">/usr/src/l</tt> and hit <kbd class="USERINPUT">TAB</kbd>, <tt
+class="COMMAND">bash</tt> will fill in as much as it can, and I'll get <tt
+class="FILENAME">/usr/src/linux</tt>. I can stop there, or I can hit <kbd
+class="USERINPUT">TAB</kbd> again, and <tt class="COMMAND">bash</tt> will show a list of
+directories that match what I've typed so far.</p>
+
+<p>Hence, less typing (and hence, people can like commandline interfaces). I told you it
+was cool.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SHELL-VT" name="SHELL-VT">8.4 Virtual Terminals</a></h2>
+
+<p>So you're in the middle of working on something and you decide you need to do
+something else. You could just drop what you're doing and switch tasks, but this is a
+multi-user system, right? And you can log in as many times simultaneously as you want,
+right? So why should you have to do one thing at a time?</p>
+
+<p>You don't. We can't all have multiple keyboards, mice, and monitors for one machine;
+chances are most of us don't want them. Clearly, hardware isn't the solution. That leaves
+software, and Linux steps up on this one, providing &#8220;virtual terminals&#8221;, or
+&#8220;VTs&#8221;.</p>
+
+<p>By pressing <kbd class="USERINPUT">Alt</kbd> and a function key, you can switch
+between virtual terminals; each function key corresponds to one. Slackware has logins on
+6 VTs by default. <b class="KEYCAP">Alt</b>+<b class="KEYCAP">F2</b> will take you to the
+second one, <b class="KEYCAP">Alt</b>+<b class="KEYCAP">F3</b> to the third, etc.</p>
+
+<p>The rest of the function keys are reserved for X sessions. Each X session uses its own
+VT, beginning with the seventh (<b class="KEYCAP">Alt</b>+<b class="KEYCAP">F7</b>) and
+going up. When in X, the <b class="KEYCAP">Alt</b>+<b class="KEYCAP">Function key</b>
+combination is replaced with <b class="KEYCAP">Ctrl</b>+<b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">Function</b>; so if you are in X and want to get back to a text login
+(without exiting your X session), <b class="KEYCAP">Ctrl</b>+<b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">F3</b> will take you to the third. (<b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">F7</b> will take you back, assuming you're using the first X session.)</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3024" name="AEN3024">8.4.1 Screen</a></h3>
+
+<p>But what about situations where there are no virtual terminals? What then?
+Fortunately, slackware includes a beautiful screen manager aptly named <tt
+class="COMMAND">screen</tt>. <tt class="COMMAND">screen</tt> is a terminal emulator that
+has virtual terminal like capabilities. Executing <tt class="COMMAND">screen</tt> flashes
+a brief introduction, then dumps to a terminal. Unlike the standard virtual terminals,
+<tt class="COMMAND">screen</tt> has its own commands. All <tt class="COMMAND">screen</tt>
+commands are prefixed with a <b class="KEYCAP">Crtl</b>+<b class="KEYCAP">A</b>
+keystroke. For example, <b class="KEYCAP">Ctrl</b>+<b class="KEYCAP">A</b>+<b
+class="KEYCAP">C</b> will create a new terminal session. <b class="KEYCAP">Ctrl</b>+<b
+class="KEYCAP">A</b>+<b class="KEYCAP">N</b> will switch to the next terminal. <b
+class="KEYCAP">Ctrl</b>+<b class="KEYCAP">A</b>+<b class="KEYCAP">P</b> switches to the
+previous terminal.</p>
+
+<p><tt class="COMMAND">screen</tt> also supports detaching and re-attaching to <tt
+class="COMMAND">screen</tt> sessions which is particularly useful for remote sessions via
+<tt class="COMMAND">ssh</tt> and <tt class="COMMAND">telnet</tt>, (more on those later).
+<b class="KEYCAP">Ctrl</b>+<b class="KEYCAP">A</b>+<b class="KEYCAP">D</b> will detach
+from the currently running screen. Executing <tt class="COMMAND">screen -r</tt> will list
+all currently running screen sessions you may reattach to.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">screen -r</kbd>
+There are several suitable screens on:
+ 1212.pts-1.redtail (Detached)
+ 1195.pts-1.redtail (Detached)
+ 1225.pts-1.redtail (Detached)
+ 17146.pts-1.sanctuary (Dead ???)
+Remove dead screens with 'screen -wipe'.
+Type "screen [-d] -r [pid.]tty.host" to resume one of them.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Running <tt class="COMMAND">screen -r 1212</tt> would reattach to the first screen
+listed. I mentioned earlier how useful this was for remote sessions. If I were to login
+to a remote slackware server via <tt class="COMMAND">ssh</tt>, and my connection was
+severed by some chance occurrence such as a local power failure, whatever I was doing at
+that moment would instantly perish, which can be a horrible thing for your server. Using
+<tt class="COMMAND">screen</tt> prevents this by detaching my session if my connection is
+dropped. Once my connection is restored, I can reattach to my screen session and resume
+right where I left off.</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="FILESYSTEM-STRUCTURE" name="FILESYSTEM-STRUCTURE"></a>Chapter 9 Filesystem
+Structure</h1>
+
+<p>We have already discussed the directory structure in Slackware Linux. By this point,
+you should be able to find files and directories that you need. But there is more to the
+filesystem than just the directory structure.</p>
+
+<p>Linux is a multiuser operating system. Every aspect of the system is multiuser, even
+the filesystem. The system stores information like who owns a file and who can read it.
+There are other unique parts about the filesystems, such as links and NFS mounts. This
+section explains these, as well as the multiuser aspects of the filesystem.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILESYSTEM-STRUCTURE-OWNERSHIP"
+name="FILESYSTEM-STRUCTURE-OWNERSHIP">9.1 Ownership</a></h2>
+
+<p>The filesystem stores ownership information for each file and directory on the system.
+This includes what user and group own a particular file. The easiest way to see this
+information is with the <tt class="COMMAND">ls</tt> command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /usr/bin/wc</kbd>
+-rwxr-xr-x 1 root bin 7368 Jul 30 1999 /usr/bin/wc
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We are interested in the third and fourth columns. These contain the username and
+group name that owns this file. We see that the user &#8220;<tt
+class="USERNAME">root</tt>&#8221; and the group &#8220;<tt
+class="USERNAME">bin</tt>&#8221; own this file.</p>
+
+<p>We can easily change the file owners with the <tt class="COMMAND">chown</tt>(1) (which
+means &#8220;change owner&#8221;) and <tt class="COMMAND">chgrp</tt>(1) (which means
+&#8220;change group&#8221;) commands. To change the file owner to <tt
+class="USERNAME">daemon</tt>, we would use <tt class="COMMAND">chown</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">chown daemon /usr/bin/wc</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>To change the group owner to &#8220;<tt class="USERNAME">root</tt>&#8221;, we would
+use <tt class="COMMAND">chgrp</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">chgrp root /usr/bin/wc</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We can also use <tt class="COMMAND">chown</tt> to specify the user and group owners
+for a file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">chown daemon:root /usr/bin/wc</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>In the above example, the user could have used a period instead of a colon. The result
+would have been the same; however, the colon is considered better form. Use of the period
+is deprecated and may be removed from future versions of <tt class="COMMAND">chown</tt>
+to allow usernames with periods in them. These usernames tend to be very popular with
+Windows Exchange Servers and are encountered most commonly in email addresses such as:
+<var class="LITERAL">mr.jones@example.com</var>. In slackware, administrators are advised
+to stay away from such usernames because some scripts still use the period to indicate
+the user and group of a file or directory. In our example, <tt class="COMMAND">chmod</tt>
+would interpret <var class="LITERAL">mr.jones</var> as user &#8220;mr&#8221; and group
+&#8220;jones&#8221;.</p>
+
+<p>File ownership is a very important part of using a Linux system, even if you are the
+only user. You sometimes need to fix ownerships on files and device nodes.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILESYSTEM-STRUCTURE-PERMISSIONS"
+name="FILESYSTEM-STRUCTURE-PERMISSIONS">9.2 Permissions</a></h2>
+
+<p>Permissions are the other important part of the multiuser aspects of the filesystem.
+With these, you can change who can read, write, and execute files.</p>
+
+<p>The permission information is stored as four octal digits, each specifying a different
+set of permissions. There are owner permissions, group permissions, and world
+permissions. The fourth octal digit is used to store special information such as set user
+ID, set group ID, and the sticky bit. The octal values assigned to the permission modes
+are (they also have letters associated with them that are displayed by programs such as
+<tt class="COMMAND">ls</tt> and can be used by <tt class="COMMAND">chmod</tt>):</p>
+
+<div class="TABLE"><a id="AEN3142" name="AEN3142"></a>
+<p><b>Table 9-1. Octal Permission Values</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col width="3*" />
+<col width="1*" align="CENTER" />
+<col width="1*" align="CENTER" />
+<thead>
+<tr>
+<th>Permission Type</th>
+<th>Octal Value</th>
+<th>Letter Value</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>&#8220;sticky&#8221; bit</td>
+<td>1</td>
+<td>t</td>
+</tr>
+
+<tr>
+<td>set user ID</td>
+<td>4</td>
+<td>s</td>
+</tr>
+
+<tr>
+<td>set group ID</td>
+<td>2</td>
+<td>s</td>
+</tr>
+
+<tr>
+<td>read</td>
+<td>4</td>
+<td>r</td>
+</tr>
+
+<tr>
+<td>write</td>
+<td>2</td>
+<td>w</td>
+</tr>
+
+<tr>
+<td>execute</td>
+<td>1</td>
+<td>x</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>You add the octal values for each permission group. For example, if you want the group
+permissions to be &#8220;read&#8221; and &#8220;write&#8221;, you would use
+&#8220;6&#8221; in the group portion of the permission information.</p>
+
+<p><tt class="COMMAND">bash</tt>'s default permissions are:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /bin/bash</kbd>
+-rwxr-xr-x 1 root bin 477692 Mar 21 19:57 /bin/bash
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The first dash would be replaced with a &#8220;d&#8221; if this was a directory. The
+three permission groups (owner, group, and world) are displayed next. We see that the
+owner has read, write, and execute permissions (<var class="LITERAL">rwx</var>). The
+group has only read and execute (<var class="LITERAL">r-x</var>). And everyone else has
+only read and execute (<var class="LITERAL">r-x</var>).</p>
+
+<p>How would we set permissions on another file to resemble <tt
+class="COMMAND">bash</tt>'s? First, let's make an example file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">touch /tmp/example</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /tmp/example</kbd>
+-rw-rw-r--- 1 david users 0 Apr 19 11:21 /tmp/example
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We will use <tt class="COMMAND">chmod</tt>(1) (which means &#8220;change mode&#8221;)
+to set the permissions on the example file. Add the octal numbers for the permissions you
+want. For the owner to have read, write, and execute, we would have a value of <var
+class="LITERAL">7</var>. Read and execute would have <var class="LITERAL">5</var>. Run
+those together and pass them to <tt class="COMMAND">chmod</tt> like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chmod 755 /tmp/example</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /tmp/example</kbd>
+-rwxr-xr-x 1 david users 0 Apr 19 11:21 /tmp/example
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now you may be thinking, &#8220;Why didn't it just create a file with those
+permissions in the first place?&#8221; Well the answer is simple. <tt
+class="COMMAND">bash</tt> includes a nice little built-in called <tt
+class="COMMAND">umask</tt>. This is included with most Unix shells as well, and controls
+what file permissions are assigned to newly created files. We discussed <tt
+class="COMMAND">bash</tt> built-ins to some degree in <a
+href="#SHELL-BASH-ENVIRONMENT">Section 8.3.1</a>. <tt class="COMMAND">umask</tt> takes a
+little getting used to. It works very similar to <tt class="COMMAND">chmod</tt>, only in
+reverse. You specify the octal values you do not wish to have present in newly created
+files. The default umask value is <var class="LITERAL">0022</var>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">umask</kbd>
+0022
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">umask 0077</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">touch tempfile</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l tempfile</kbd>
+-rw-------- 1 david users 0 Apr 19 11:21 tempfile
+</pre>
+</td>
+</tr>
+</table>
+
+<p>See the man page for <tt class="COMMAND">bash</tt> for more information.</p>
+
+<p>To set special permissions with <tt class="COMMAND">chmod</tt>, add the numbers
+together and place them in the first column. For example, to make it set user ID and set
+group ID, we use 6 as the first column:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chmod 6755 /tmp/example</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /tmp/example</kbd>
+-rwsr-sr-x 1 david users 0 Apr 19 11:21 /tmp/example
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If the octal values confuse you, you can use letters with <tt
+class="COMMAND">chmod</tt>. The permission groups are represented as:</p>
+
+<div class="INFORMALTABLE"><a id="AEN3246" name="AEN3246"></a>
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<col />
+<tbody>
+<tr>
+<td>Owner</td>
+<td>u</td>
+</tr>
+
+<tr>
+<td>Group</td>
+<td>g</td>
+</tr>
+
+<tr>
+<td>World</td>
+<td>o</td>
+</tr>
+
+<tr>
+<td>All of the above</td>
+<td>a</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>To do the above, we would have to use several command lines:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chmod a+rx /tmp/example</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chmod u+w /tmp/example</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chmod ug+s /tmp/example</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Some people prefer the letters over the numbers. Either way will result in the same
+set of permissions.</p>
+
+<p>The octal format is often faster, and the one you see most often used in shell
+scripts. Sometimes the letters are more powerful however. For example, there's no easy
+way to change one group of permissions while preserving the other groups on files and
+directories when using the octal format. This is trivial with the letters.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /tmp/</kbd>
+-rwxr-xr-x 1 alan users 0 Apr 19 11:21 /tmp/example0
+-rwxr-x--- 1 alan users 0 Apr 19 11:21 /tmp/example1
+----r-xr-x 1 alan users 0 Apr 19 11:21 /tmp/example2
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chmod g-rwx /tmp/example?</kbd>
+-rwx---r-x 1 alan users 0 Apr 19 11:21 /tmp/example0
+-rwx------ 1 alan users 0 Apr 19 11:21 /tmp/example1
+-------r-x 1 alan users 0 Apr 19 11:21 /tmp/example2
+</pre>
+</td>
+</tr>
+</table>
+
+<p>We mentioned set user ID and set group ID permissions in several places above. You may
+be wondering what this is. Normally when you run a program, it is operating under your
+user account. That is, it has all the permissions that you as a user have. The same is
+true for the group. When you run a program, it executes under your current group. With
+set user ID permissions, you can force the program to always run as the program owner
+(such as &#8220;root&#8221;). Set group ID is the same, but for the group.</p>
+
+<p>Be careful with this, set user ID and set group ID programs can open major security
+holes on your system. If you frequently set user ID programs that are owned by <tt
+class="USERNAME">root</tt>, you are allowing anyone to run that program and run it as <tt
+class="USERNAME">root</tt>. Since <tt class="USERNAME">root</tt> has no restrictions on
+the system, you can see how this would pose a major security problem. In short, it's not
+bad to use set user ID and set group ID permissions, just use common sense.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILESYSTEM-STRUCTURE-LINKS"
+name="FILESYSTEM-STRUCTURE-LINKS">9.3 Links</a></h2>
+
+<p>Links are pointers between files. With links, you can have files exist in many
+locations and be accessible by many names. There are two types of links: hard and
+soft.</p>
+
+<p>Hard links are names for a particular file. They can only exist within a single
+filesystem and are only removed when the real name is removed from the system. These are
+useful in some cases, but many users find the soft link to be more versatile.</p>
+
+<p>The soft link, also called a symbolic link, can point to a file outside of its
+filesystem. It is actually a small file containing the information it needs. You can add
+and remove soft links without affecting the actual file. And since a symbolic link is
+actually a small file containing its own information, they can even point at a directory.
+It's rather common to have <tt class="FILENAME">/var/tmp</tt> actually be a symbolic link
+to <tt class="FILENAME">/tmp</tt> for example.</p>
+
+<p>Links do not have their own set of permissions or ownerships, but instead reflect
+those of the file they point to. Slackware uses mostly soft links. Here is a common
+example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /bin/sh</kbd>
+lrwxrwxrwx 1 root root 4 Apr 6 12:34 /bin/sh -&#62; bash
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The <tt class="COMMAND">sh</tt> shell under Slackware is actually <tt
+class="COMMAND">bash</tt>. Removing links is done using <tt class="COMMAND">rm</tt>. The
+<tt class="COMMAND">ln</tt> command is used to create links. These commands will be
+discussed in more depth in <a href="#FILE-COMMANDS">Chapter 10</a>.</p>
+
+<p>It's very important to be careful about symlinks in particular. Once, I was working on
+a machine that was consistently failing to back-up to tape each night. Two symlinks had
+been made to directories beneath each other. The back-up software kept appending those
+same directories to the tape until it was out of space. Normally, a set of checks will
+prevent creating a symlink in this situation, but ours was a special case.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILESYSTEM-STRUCTURE-MOUNTING"
+name="FILESYSTEM-STRUCTURE-MOUNTING">9.4 Mounting Devices</a></h2>
+
+<p>As was previously discussed in <a href="#SYSTEM-CONFIGURATION-LAYOUT">Section
+4.1.1</a>, all the drives and devices in your computer are one big filesystem. Various
+hard drive partitions, CD-ROMs, and floppies are all placed in the same tree. In order to
+attach these drives to the filesystem so that you can access them, you have to use the
+<tt class="COMMAND">mount</tt>(1) and <tt class="COMMAND">umount</tt>(1) commands.</p>
+
+<p>Some devices are automatically mounted when you boot up your computer. These are
+listed in the <tt class="FILENAME">/etc/fstab</tt> file. Anything that you want to be
+mounted automatically gets an entry in that file. For other devices, you'll have to issue
+a command every time you want to use the device.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3319" name="AEN3319">9.4.1 <tt
+class="FILENAME">fstab</tt></a></h3>
+
+<p>Let's look at an example of the <tt class="FILENAME">/etc/fstab</tt> file:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cat /etc/fstab</kbd>
+/dev/sda1 / ext2 defaults 1 1
+/dev/sda2 /usr/local ext2 defaults 1 1
+/dev/sda4 /home ext2 defaults 1 1
+/dev/sdb1 swap swap defaults 0 0
+/dev/sdb3 /export ext2 defaults 1 1
+none /dev/pts devpts gid=5,mode=620 0 0
+none /proc proc defaults 0 0
+/dev/fd0 /mnt ext2 defaults 0 0
+/dev/cdrom /mnt/cdrom iso9660 ro 0 0
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The first column is the device name. In this case, the devices are five partitions
+spread out across two SCSI hard drives, two special filesystems that don't need a device,
+a floppy, and a CD-ROM drive. The second column is where the device will be mounted. This
+needs to be a directory name, except in the case of a swap partition. The third column is
+the filesystem type of the device. For normal Linux filesystems, this will be <var
+class="LITERAL">ext2</var> (second extended filesystem). CD-ROM drives are <var
+class="LITERAL">iso9660</var>, and Windows-based devices will either be <var
+class="LITERAL">msdos</var> or <var class="LITERAL">vfat</var>.</p>
+
+<p>The fourth column is a listing of options that apply to the mounted filesystem.
+defaults is fine for just about everything. However, read-only devices should be given
+the <var class="LITERAL">ro</var> flag. There are a lot of options that can be used.
+Check the <tt class="FILENAME">fstab</tt>(5) man page for more information. The last two
+columns are used by <tt class="COMMAND">fsck</tt> and other commands that need to
+manipulate the devices. Check the man page for that information as well.</p>
+
+<p>When you install Slackware Linux, the setup program will build much of the <tt
+class="FILENAME">fstab</tt> file.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3340" name="AEN3340">9.4.2 <tt class="COMMAND">mount</tt> and
+<tt class="COMMAND">umount</tt></a></h3>
+
+<p>Attaching another device to your filesystem is easy. All you have to do is use the <tt
+class="COMMAND">mount</tt> command, along with a few options. Using <tt
+class="COMMAND">mount</tt> can simplified if the device has an entry in the <tt
+class="FILENAME">/etc/fstab</tt> file. For example, let's say that I wanted to mount my
+CD-ROM drive and that my <tt class="COMMAND">fstab</tt> file looked like the example from
+the previous section. I would call <tt class="COMMAND">mount</tt> like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">mount /cdrom</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Since there is an entry in <tt class="FILENAME">fstab</tt> for that mount point, <tt
+class="COMMAND">mount</tt> knows what options to use. If there wasn't an entry for that
+device, I would have to use several options for <tt class="COMMAND">mount</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">mount -t iso9660 -o ro /dev/cdrom /cdrom</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That command line includes the same information as the example <tt
+class="FILENAME">fstab</tt> did, but we'll go over all the parts anyways. The <var
+class="OPTION">-t iso9660</var> is the filesystem type of the device to mount. In this
+case, it would be the iso9660 filesystem which is what CD-ROM drives most commonly use.
+The <var class="OPTION">-o ro</var> tells mount to mount the device read-only. The <tt
+class="FILENAME">/dev/cdrom</tt> is the name of the device to mount, and <tt
+class="FILENAME">/cdrom</tt> is the location on the filesystem to mount the drive.</p>
+
+<p>Before you can remove a floppy, CD-ROM, or other removable device that is currently
+mounted, you'll have to unmount it. That is done using the <tt
+class="COMMAND">umount</tt> command. Don't ask where the &#8220;n&#8221; went because we
+couldn't tell you. You can use either the mounted device or the mount point as the
+argument to <tt class="COMMAND">umount</tt>. For example, if you wanted to unmount the
+CD-ROM from the previous example, either of these commands would work:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">umount /dev/cdrom</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">umount /cdrom</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILESYSTEM-STRUCTURE-NFS" name="FILESYSTEM-STRUCTURE-NFS">9.5
+NFS Mounts</a></h2>
+
+<p>NFS stands for the Network Filesystem. It is not really part of the real filesystem,
+but can be used to add parts to the mounted filesystem.</p>
+
+<p>Large Unix environments often times share the same programs, sets of home directories,
+and mail spool. The problem of getting the same copy to each machine is solved with NFS.
+We can use NFS to share one set of home directories between all of the workstations. The
+workstations then mount that NFS share as if it were on their own machines.</p>
+
+<p>See <a href="#NETWORK-CONFIGURATION-NFS-NFS">Section 5.6.2</a> and the man pages for
+<tt class="FILENAME">exports</tt>(5), <tt class="COMMAND">nfsd</tt>(8), and <tt
+class="COMMAND">mountd</tt>(8) for more information.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="FILE-COMMANDS" name="FILE-COMMANDS"></a>Chapter 10 Handling Files and
+Directories</h1>
+
+<p>Linux aims to the most Unix-like it can be. Traditionally, Unix operating systems have
+been command-line oriented. We do have a graphical user interface in Slackware, but the
+command-line is still the main level of control for the system. Therefore, it is
+important to understand some of the basic file management commands.</p>
+
+<p>The following sections explain the common file management commands and provide
+examples of how they are used. There are many other commands, but these will help you get
+started. Also, the commands are only briefly discussed here. You will find more detail in
+the accompanying man pages for each command.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-NAVIGATION" name="FILE-COMMANDS-NAVIGATION">10.1
+Navigation : <tt class="COMMAND">ls</tt>, <tt class="COMMAND">cd</tt>, and <tt
+class="COMMAND">pwd</tt></a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN3398" name="AEN3398">10.1.1 <tt
+class="COMMAND">ls</tt></a></h3>
+
+<p>This command lists files in a directory. Windows and DOS users will notice its
+similarity to the <tt class="COMMAND">dir</tt> command. By itself, <tt
+class="COMMAND">ls</tt>(1) will list the files in the current directory. To see what's in
+your root directory, you could issue these commands:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd /</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls</kbd>
+bin cdr dev home lost+found proc sbin tmp var
+boot cdrom etc lib mnt root suncd usr vmlinuz
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The problem a lot of people have with that output is that you cannot easily tell what
+is a directory and what is a file. Some users prefer that <tt class="COMMAND">ls</tt> add
+a type identifier to each listing, like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -FC</kbd>
+bin/ cdr/ dev/ home/ lost+found/ proc/ sbin/ tmp/ var/
+boot/ cdrom/ etc/ lib/ mnt/ root/ suncd/ usr/ vmlinuz
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Directories get a slash at the end of the name, executable files get an asterisk at
+the end of the name, and so on.</p>
+
+<p><tt class="COMMAND">ls</tt> can also be used to get other statistics on files. For
+example, to see the creation dates, owners, and permissions, you would look at a long
+listing:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l</kbd>
+drwxr-xr-x 2 root bin 4096 May 7 09:11 bin/
+drwxr-xr-x 2 root root 4096 Feb 24 03:55 boot/
+drwxr-xr-x 2 root root 4096 Feb 18 01:10 cdr/
+drwxr-xr-x 14 root root 6144 Oct 23 18:37 cdrom/
+drwxr-xr-x 4 root root 28672 Mar 5 18:01 dev/
+drwxr-xr-x 10 root root 4096 Mar 8 03:32 etc/
+drwxr-xr-x 8 root root 4096 Mar 8 03:31 home/
+drwxr-xr-x 3 root root 4096 Jan 23 21:29 lib/
+drwxr-xr-x 2 root root 16384 Nov 1 08:53 lost+found/
+drwxr-xr-x 2 root root 4096 Oct 6 12:47 mnt/
+dr-xr-xr-x 62 root root 0 Mar 4 15:32 proc/
+drwxr-x--x 12 root root 4096 Feb 26 02:06 root/
+drwxr-xr-x 2 root bin 4096 Feb 17 02:02 sbin/
+drwxr-xr-x 5 root root 2048 Oct 25 10:51 suncd/
+drwxrwxrwt 4 root root 487424 Mar 7 20:42 tmp/
+drwxr-xr-x 21 root root 4096 Aug 24 03:04 usr/
+drwxr-xr-x 18 root root 4096 Mar 8 03:32 var/
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Suppose you want to get a listing of the hidden files in the current directory. This
+command will do just that:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -a</kbd>
+. bin cdrom home mnt sbin usr
+.. boot dev lib proc suncd var
+.pwrchute_tmp cdr etc lost+found root tmp vmlinuz
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Files beginning with a period (called dot files) are hidden when you run <tt
+class="COMMAND">ls</tt>. You will only see them if you pass the <var
+class="OPTION">-a</var> option.</p>
+
+<p>There are many more options that can be found in the online manual page. Don't forget
+that you can combine options that you pass to <tt class="COMMAND">ls</tt>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3436" name="AEN3436">10.1.2 <tt
+class="COMMAND">cd</tt></a></h3>
+
+<p>The <tt class="COMMAND">cd</tt> command is used to change working directories. You
+simply type <tt class="COMMAND">cd</tt> followed by the path name to change to. Here are
+some examples:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+darkstar:~$ <kbd class="USERINPUT">cd /bin</kbd>
+darkstar:/bin$ <kbd class="USERINPUT">cd usr</kbd>
+bash: cd: usr: No such file or directory
+darkstar:/bin$ <kbd class="USERINPUT">cd /usr</kbd>
+darkstar:/usr$ <kbd class="USERINPUT">ls</kbd>
+bin
+darkstar:/usr$ <kbd class="USERINPUT">cd bin</kbd>
+darkstar:/usr/bin$
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Notice that without the preceding slash, it tries to change to a directory in the
+current directory. Also executing <tt class="COMMAND">cd</tt> with no options will move
+you to your home directory.</p>
+
+<p>The <tt class="COMMAND">cd</tt> command is not like the other commands. It is a
+builtin shell command. Shell builtins are discussed in <a
+href="#SHELL-BASH-ENVIRONMENT">Section 8.3.1</a>. This may not make any sense to you
+right now. Basically it means there is no man page for this command. Instead, you have to
+use the shell help. Like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">help cd</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>It will display the options for <tt class="COMMAND">cd</tt> and how to use them.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3463" name="AEN3463">10.1.3 <tt
+class="COMMAND">pwd</tt></a></h3>
+
+<p>The <tt class="COMMAND">pwd</tt> command is used to show your current location. To use
+the <tt class="COMMAND">pwd</tt> command just type <tt class="COMMAND">pwd</tt>. For
+example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd /bin</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">pwd</kbd>
+/bin
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd /usr</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd bin</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">pwd</kbd>
+/usr/bin
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-PAGERS" name="FILE-COMMANDS-PAGERS">10.2 Pagers:
+<tt class="COMMAND">more</tt>, <tt class="COMMAND">less</tt>, and <tt
+class="COMMAND">most</tt></a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN3491" name="AEN3491">10.2.1 <tt
+class="COMMAND">more</tt></a></h3>
+
+<p><tt class="COMMAND">more</tt>(1) is what we call a pager utility. Oftentimes the
+output of a particular command is too big to fit on one screen. The individual commands
+do not know how to fit their output to separate screens. They leave this job to the pager
+utility.</p>
+
+<p>The <tt class="COMMAND">more</tt> command breaks the output into individual screens
+and waits for you to press the space bar before continuing on to the next screen.
+Pressing the enter key will advance the output one line. Here is a good example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd /usr/bin</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That should scroll for a while. To break up the output screen by screen, just pipe it
+through more:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l | more</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That is the pipe character (shift backslash). The pipe is short for saying take the
+output of <tt class="COMMAND">ls</tt> and feed it into <tt class="COMMAND">more</tt>. You
+can pipe just about anything through the <tt class="COMMAND">more</tt> command, not just
+<tt class="COMMAND">ls</tt>. Piping is also covered in <a
+href="#SHELL-COMMAND-LINE-PIPING">Section 8.2.3</a>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3518" name="AEN3518">10.2.2 <tt
+class="COMMAND">less</tt></a></h3>
+
+<p>The <tt class="COMMAND">more</tt> command is quite handy, but often you will find that
+you have advanced past the screen you wanted. more does not provide a way to go back. The
+<tt class="COMMAND">less</tt>(1) command provides this functionality. It is used in the
+same way as the <tt class="COMMAND">more</tt> command, so the previous examples apply
+here too. So, <tt class="COMMAND">less</tt> is more than <tt class="COMMAND">more</tt>.
+Joost Kremers puts it this way:</p>
+
+<a id="AEN3530" name="AEN3530"></a>
+<blockquote class="BLOCKQUOTE">
+<p><tt class="COMMAND">less</tt> is more, but more <tt class="COMMAND">more</tt> than <tt
+class="COMMAND">more</tt> is, so <tt class="COMMAND">more</tt> is less <tt
+class="COMMAND">less</tt>, so use more <tt class="COMMAND">less</tt> if you want less <tt
+class="COMMAND">more</tt>.</p>
+</blockquote>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3539" name="AEN3539">10.2.3 <tt
+class="COMMAND">most</tt></a></h3>
+
+<p>Where <tt class="COMMAND">more</tt> and <tt class="COMMAND">less</tt> leave off, <tt
+class="COMMAND">most</tt>(1) picks back up. If <tt class="COMMAND">less</tt> is more than
+<tt class="COMMAND">more</tt>, <tt class="COMMAND">most</tt> is more than <tt
+class="COMMAND">less</tt>. Whereas the other pagers can only display one file at a time,
+<tt class="COMMAND">most</tt> is capable of viewing any number of files, as long as each
+file's window is at least 2 lines long. <tt class="COMMAND">most</tt> has a lot of
+options, check the man page for full details.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-OUTPUT" name="FILE-COMMANDS-OUTPUT">10.3 Simple
+Output: <tt class="COMMAND">cat</tt> and <tt class="COMMAND">echo</tt></a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN3559" name="AEN3559">10.3.1 <tt
+class="COMMAND">cat</tt></a></h3>
+
+<p><tt class="COMMAND">cat</tt>(1) is short for &#8220;concatenate&#8221;. It was
+originally designed to merge text files into one, but can be used for many other
+purposes.</p>
+
+<p>To merge two or more files into one, you simply list the files after the <tt
+class="COMMAND">cat</tt> command and then redirect the new output to a file. <tt
+class="COMMAND">cat</tt> works with standard input and standard output, so you have to
+use the shell redirection characters. For example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">cat file1 file2 file3 &gt; bigfile</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This command takes the contents of <tt class="FILENAME">file1</tt>, <tt
+class="FILENAME">file2</tt>, and <tt class="FILENAME">file3</tt> and merges it all
+together. The new output is sent to standard out.</p>
+
+<p>One can also use <tt class="COMMAND">cat</tt> to display files. Many people <tt
+class="COMMAND">cat</tt> text files through the <tt class="COMMAND">more</tt> or <tt
+class="COMMAND">less</tt> commands, like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cat file1 | more</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That will display the <tt class="FILENAME">file1</tt> file and pipe it through the <tt
+class="COMMAND">more</tt> command so that you only get one screen at a time.</p>
+
+<p>Another common use for <tt class="COMMAND">cat</tt> is copying files. You can copy any
+file around with <tt class="COMMAND">cat</tt>, like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cat /bin/bash &gt; ~/mybash</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The <tt class="COMMAND">/bin/bash</tt> program is copied to your home directory and
+named <tt class="FILENAME">mybash</tt>.</p>
+
+<p><tt class="COMMAND">cat</tt> has many uses and the ones discussed here are just a few.
+Since <tt class="COMMAND">cat</tt> makes extensive use of standard input and standard
+output, it is ideal for use in shell scripts or part of other complex commands.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3603" name="AEN3603">10.3.2 <tt
+class="COMMAND">echo</tt></a></h3>
+
+<p>The <tt class="COMMAND">echo</tt>(1) command displays the specified text on the
+screen. You specify the string to display after the <tt class="COMMAND">echo</tt>
+command. By default <tt class="COMMAND">echo</tt> will display the string and print a
+newline character after it. You can pass the <var class="OPTION">-n</var> option to
+suppress the printing of the newline. The <var class="OPTION">-e</var> option will cause
+<tt class="COMMAND">echo</tt> to search for escape characters in the string and execute
+them.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-CREATION" name="FILE-COMMANDS-CREATION">10.4
+Creation: <tt class="COMMAND">touch</tt> and <tt class="COMMAND">mkdir</tt></a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN3619" name="AEN3619">10.4.1 <tt
+class="COMMAND">touch</tt></a></h3>
+
+<p><tt class="COMMAND">touch</tt>(1) is used to change the timestamp on a file. You can
+change access timestamps and modification timestamps with this command. If the file
+specified does not exist, <tt class="COMMAND">touch</tt> will create a zero length file
+with the name specified. To mark a file with the current system time, you would issue
+this command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -al file1</kbd>
+-rw-r--r-- 1 root root 9779 Feb 7 21:41 file1
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">touch file1</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -al file1</kbd>
+-rw-r--r-- 1 root root 9779 Feb 8 09:17 file1
+</pre>
+</td>
+</tr>
+</table>
+
+<p>There are several options for <tt class="COMMAND">touch</tt>, including options to
+specify which timestamp to modify, the time to use, and many more. The online manual page
+discusses these in detail.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3639" name="AEN3639">10.4.2 <tt
+class="COMMAND">mkdir</tt></a></h3>
+
+<p><tt class="COMMAND">mkdir</tt>(1) will create a new directory. You simply specify the
+directory to create when you run mkdir. This example creates the <tt
+class="FILENAME">hejaz</tt> directory in the current directory:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">mkdir hejaz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You can also specify a path, like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">mkdir /usr/local/hejaz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The <var class="OPTION">-p</var> option will tell <tt class="COMMAND">mkdir</tt> to
+make any parent directories. The above example will fail if <tt
+class="COMMAND">/usr/local</tt> does not exist. The <var class="OPTION">-p</var> option
+will create <tt class="FILENAME">/usr/local</tt> and <tt
+class="FILENAME">/usr/local/hejaz</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">mkdir -p /usr/local/hejaz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-COPYMOVE" name="FILE-COMMANDS-COPYMOVE">10.5 Copy
+and Move</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="FILE-COMMANDS-COPYMOVE-CP"
+name="FILE-COMMANDS-COPYMOVE-CP">10.5.1 <tt class="COMMAND">cp</tt></a></h3>
+
+<p><tt class="COMMAND">cp</tt>(1) copies files. DOS users will notice its similarity to
+the <tt class="COMMAND">copy</tt> command. There are many options for <tt
+class="COMMAND">cp</tt> , so you should have a look at the man page before using it.</p>
+
+<p>A common use is to use <tt class="COMMAND">cp</tt> to copy a file from one location to
+another. For example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cp hejaz /tmp</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This copies the <tt class="FILENAME">hejaz</tt> file from the current directory to the
+<tt class="FILENAME">/tmp</tt> directory.</p>
+
+<p>Many users prefer to keep the timestamps preserved, as in this example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cp -a hejaz /tmp</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This ensures that the timestamps are not modified in the copy.</p>
+
+<p>To recursively copy the contents of a directory to another directory, you would issue
+this command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cp -R <var
+class="REPLACEABLE">mydir</var> /tmp</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That will copy the <var class="REPLACEABLE">mydir</var> directory to the <tt
+class="FILENAME">/tmp</tt> directory.</p>
+
+<p>Also if you wish to copy a directory or a file and keep all it's old permissions and
+time stamps and keep it exactly the same use <tt class="COMMAND">cp -p</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l file</kbd>
+-rw-r--r-- 1 root vlad 4 Jan 1 15:27 file
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cp -p file /tmp</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ls -l /tmp/file</kbd>
+-rw-r--r-- 1 root vlad 4 Jan 1 15:27 file
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">cp</tt> has many more options that are discussed in detail in the
+online manual page.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3712" name="AEN3712">10.5.2 <tt
+class="COMMAND">mv</tt></a></h3>
+
+<p><tt class="COMMAND">mv</tt>(1) moves files from one place to another. Sounds simple
+enough doesn't it?</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">mv oldfile /tmp/newfile</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">mv</tt> has a few useful command line options that are detailed in
+the man page. In practice, <tt class="COMMAND">mv</tt> is almost never used with
+commandline options.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-DELETION" name="FILE-COMMANDS-DELETION">10.6
+Deletion: <tt class="COMMAND">rm</tt> and <tt class="COMMAND">rmdir</tt></a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN3733" name="AEN3733">10.6.1 <tt
+class="COMMAND">rm</tt></a></h3>
+
+<p><tt class="COMMAND">rm</tt>(1) removes files and directory trees. DOS users will
+notice the similarity to both the <tt class="COMMAND">del</tt> and <tt
+class="COMMAND">deltree</tt> commands. <tt class="COMMAND">rm</tt> can be very dangerous
+if you do not watch yourself. While it is sometimes possible to retrieve a recently
+deleted file, it can be complicated (and potentially costly) and is beyond the scope of
+this book.</p>
+
+<p>To remove a single file, specify its name when you run rm:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">rm file1</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If the file has write permissions removed, you may get a permission denied error
+message. To force removal of the file no matter what, pass the <tt
+class="COMMAND">-f</tt> option, like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">rm -f file1</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>To remove an entire directory, you use the <var class="OPTION">-r</var> and <var
+class="OPTION">-f</var> options together. This is a good example of how to delete the
+entire contents of your hard drive. You really don't want to do this. But here's the
+command anyway:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">rm -rf /</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Be very careful with <tt class="COMMAND">rm</tt>; you can shoot yourself in the foot.
+There are several command line options, which are discussed in detail in the online
+manual page.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN3764" name="AEN3764">10.6.2 <tt
+class="COMMAND">rmdir</tt></a></h3>
+
+<p><tt class="COMMAND">rmdir</tt>(1) removes directories from the filesystem. The
+directory must be empty before it can be removed. The syntax is simply:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">rmdir &lt;<var
+class="REPLACEABLE">directory</var>&gt;</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This example will remove the <tt class="FILENAME">hejaz</tt> subdirectory in the
+current working directory:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">rmdir hejaz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If that directory does not exist, <tt class="COMMAND">rmdir</tt> will tell you. You
+can also specify a full path to a directory to remove, as this example shows:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">rmdir /tmp/hejaz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That example will try to remove the <tt class="FILENAME">hejaz</tt> directory inside
+the <tt class="FILENAME">/tmp</tt> directory.</p>
+
+<p>You can also remove a directory and all of its parent directories by passing the <var
+class="OPTION">-p</var> option.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">rmdir -p /tmp/hejaz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will first try to remove the <tt class="FILENAME">hejaz</tt> directory inside <tt
+class="FILENAME">/tmp</tt>. If that is successful, it will try to remove <tt
+class="FILENAME">/tmp</tt>. <tt class="COMMAND">rmdir</tt> will continue this until an
+error is encountered or the entire tree specified is removed.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="FILE-COMMANDS-LINK" name="FILE-COMMANDS-LINK">10.7 Aliasing
+files with <tt class="COMMAND">ln</tt></a></h2>
+
+<p><tt class="COMMAND">ln</tt>(1) is used to create links between files. These links can
+be either hard links or soft (symbolic) links. The differences between the two kinds of
+links were discussed in <a href="#FILESYSTEM-STRUCTURE-LINKS">Section 9.3</a>. If you
+wanted to make a symbolic link to the directory <tt class="FILENAME">/var/media/mp3</tt>
+and place the link in your home directory, you would do this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ln -s /var/media/mp3 ~/mp3</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The <var class="OPTION">-s</var> option tells <tt class="COMMAND">ln</tt> to make a
+symbolic link. The next option is the target of the link, and the final option is what to
+call the link. In this case, it will just make a file called <tt
+class="FILENAME">mp3</tt> in your home directory that points to <tt
+class="FILENAME">/var/media/mp3</tt>. You can call the link itself whatever you want by
+just changing the last option.</p>
+
+<p>Making a hard link is just as simple. All you have to do is leave off the <var
+class="OPTION">-s</var> option. Hard links may not normally refer to directories or span
+file systems, however. To create a hard link <tt class="FILENAME">/usr/bin/email</tt> to
+<tt class="FILENAME">/usr/bin/mutt</tt>, simply type the following:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">ln /usr/bin/mutt /usr/bin/email</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="PROCESS-CONTROL" name="PROCESS-CONTROL"></a>Chapter 11 Process Control</h1>
+
+<p>Every program that is running is called a process. These processes range from things
+like the X Window System to system programs (daemons) that are started when the computer
+boots. Every process runs as a particular user. Processes that are started at boot time
+usually run as <tt class="USERNAME">root</tt> or <tt class="USERNAME">nobody</tt>.
+Processes that you start will run as you. Processes started as other users will run as
+those users.</p>
+
+<p>You have control over all the processes that you start. Additionally, <tt
+class="USERNAME">root</tt> has control over all processes on the system, including those
+started by other users. Processes can be controlled and monitored through several
+programs, as well as some shell commands.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PROCESS-CONTROL-BACKGROUNDING"
+name="PROCESS-CONTROL-BACKGROUNDING">11.1 Backgrounding</a></h2>
+
+<p>Programs started from the command line start up in the foreground. This allows you to
+see all the output of the program and interact with it. However, there are several
+occasions when you'd like the program to run without taking up your terminal. This is
+called running the program in the background, and there are a few ways to do it.</p>
+
+<p>The first way to background a process is by adding an ampersand to the command line
+when you start the program. For example, assume you wanted to use the command line mp3
+player <tt class="COMMAND">amp</tt> to play a directory full of mp3s, but you needed to
+do something else on the same terminal. The following command line would start up amp in
+the background:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">amp *.mp3 &#38;</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The program will run as normal, and you are returned to a prompt.</p>
+
+<p>The other way to background a process is to do so while it is running. First, start up
+a program. While it is running, hit <b class="KEYCAP">Control</b>+<b
+class="KEYCAP">z</b>. This suspends the process. A suspended process is basically paused.
+It momentarily stops running, but can be started up again at any time. Once you have
+suspended a process, you are returned to a prompt. You can background the process by
+typing:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">bg</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now the suspended process is running in the background.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PROCESS-CONTROL-FOREGROUNDING"
+name="PROCESS-CONTROL-FOREGROUNDING">11.2 Foregrounding</a></h2>
+
+<p>If you need to interact with a backgrounded process, you can bring it back into the
+foreground. If you've only got one backgrounded process, you can bring it back by
+typing:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">fg</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If the program is not done running, the program will take control over you terminal
+and you will not be returned to a prompt. Sometimes, the program will finish running
+while backgrounded. In this instance, you'll get a message like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+[1]+ Done /bin/ls $LS_OPTIONS
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That tells you that the backgrounded process (in this case <tt class="COMMAND">ls</tt>
+- not terribly interesting) has completed.</p>
+
+<p>It is possible to have several processes backgrounded at once. When this happens,
+you'll need to know which process you want to bring back to the foreground. Just typing
+<tt class="COMMAND">fg</tt> will foreground the process that was last backgrounded. What
+if you had a whole list of processes in the background? Luckily, bash includes a command
+to list all the processes. It's called <tt class="COMMAND">jobs</tt> and gives output
+like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">jobs</kbd>
+[1] Stopped vim
+[2]- Stopped amp
+[3]+ Stopped man ps
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This shows you a list of all the processes that are backgrounded. As you can see, they
+are all stopped. This means that the processes are suspended. The number is a sort of ID
+for all the backgrounded processes. The ID with a plus sign beside it (<var
+class="LITERAL">man ps</var>) is the process that will be foregrounded if you just type
+<tt class="COMMAND">fg</tt>.</p>
+
+<p>If you wanted to foreground <tt class="COMMAND">vim</tt>, you would type:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">fg 1</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>and <tt class="COMMAND">vim</tt> would spring back up to the console. Backgrounding
+processes can be very useful if you only have one terminal open over a dialup connection.
+You can have several programs running on that one terminal, periodically switching back
+and forth between them.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PROCESS-CONTROL-PS" name="PROCESS-CONTROL-PS">11.3 <tt
+class="COMMAND">ps</tt></a></h2>
+
+<p>So now you know how to switch back and forth between several processes that you've
+started from the command line. And you also know that there are lots of processes running
+all the time. So how do you list all of these programs? Well, you make use of the <tt
+class="COMMAND">ps</tt>(1) command. This command has a lot of options, so we'll only
+cover the most important ones here. For a complete listing, see the man page for ps. Man
+pages are covered in-depth in <a href="#HELP-SYSTEM-MAN">Section 2.1.1</a>.</p>
+
+<p>Simply typing <tt class="COMMAND">ps</tt> will get you a listing of the programs
+running on your terminal. This incudes the foreground processes (which include whatever
+shell you are using, and of course, <tt class="COMMAND">ps</tt> itself). Also listed are
+backgrounded processes you may have running. Many times, that will be a very short
+listing:</p>
+
+<div class="FIGURE"><a id="FIG-PROCESS-CONTROL-PS-SHORT"
+name="FIG-PROCESS-CONTROL-PS-SHORT"></a>
+<p><b>Figure 11-1. Basic <tt class="COMMAND">ps</tt> output</b></p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps</kbd>
+ PID TTY TIME CMD
+ 7923 ttyp0 00:00:00 bash
+ 8059 ttyp0 00:00:00 ps
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<p>Even though this is not a lot of processes, the information is very typical. You'll
+get the same columns using regular ps no matter how many processes are running. So what
+does it all mean?</p>
+
+<p>Well, the <var class="LITERAL">PID</var> is the <span class="emphasis"><i
+class="EMPHASIS">process ID</i></span>. All running processes are given a unique
+identifier which ranges between 1 and 32767. Each process is assigned the next free PID.
+When a process quits (or is killed, as you will see in the next section), it gives up its
+PID. When the max PID is reached, the next free one will wrap back around to the lowest
+free one.</p>
+
+<p>The <var class="LITERAL">TTY</var> column indicates which terminal the process is
+running on. Doing a plain <tt class="COMMAND">ps</tt> will only list all the programs
+running on the current terminal, so all the processes give the same information in the
+TTY column. As you can see, both processes listed are running on <tt
+class="FILENAME">ttyp0</tt>. This indicates that they are either running remotely or from
+an X terminal of some variety.</p>
+
+<p>The <var class="LITERAL">TIME</var> column indicated how much CPU time the process has
+been running. This is different from the actual amount of time that a process runs.
+Remember that Linux is a multitasking operating system. There are many processes running
+all the time, and these processes each get a small portion of the processor's time. So,
+the TIME column should show much less time for each process than it actually takes to
+run. If you see more than several minutes in the TIME column, it could mean that
+something is wrong.</p>
+
+<p>Finally, the <var class="LITERAL">CMD</var> column shows what the program actually is.
+It only lists the base name of the program, not any command line options or similar
+information. To get that information, you'll need to use one of the many options to <tt
+class="COMMAND">ps</tt>. We'll discuss that shortly.</p>
+
+<p>You can get a complete listing of the processes running on your system using the right
+combination of options. This will probably result in a long listing of processes
+(fifty-five on my laptop as I write this sentence), so I'll abbreviate the output:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps -ax</kbd>
+ PID TTY STAT TIME COMMAND
+ 1 ? S 0:03 init [3]
+ 2 ? SW 0:13 [kflushd]
+ 3 ? SW 0:14 [kupdate]
+ 4 ? SW 0:00 [kpiod]
+ 5 ? SW 0:17 [kswapd]
+ 11 ? S 0:00 /sbin/kerneld
+ 30 ? SW 0:01 [cardmgr]
+ 50 ? S 0:00 /sbin/rpc.portmap
+ 54 ? S 0:00 /usr/sbin/syslogd
+ 57 ? S 0:00 /usr/sbin/klogd -c 3
+ 59 ? S 0:00 /usr/sbin/inetd
+ 61 ? S 0:04 /usr/local/sbin/sshd
+ 63 ? S 0:00 /usr/sbin/rpc.mountd
+ 65 ? S 0:00 /usr/sbin/rpc.nfsd
+ 67 ? S 0:00 /usr/sbin/crond -l10
+ 69 ? S 0:00 /usr/sbin/atd -b 15 -l 1
+ 77 ? S 0:00 /usr/sbin/apmd
+ 79 ? S 0:01 gpm -m /dev/mouse -t ps2
+ 94 ? S 0:00 /usr/sbin/automount /auto file /etc/auto.misc
+ 106 tty1 S 0:08 -bash
+ 108 tty3 SW 0:00 [agetty]
+ 109 tty4 SW 0:00 [agetty]
+ 110 tty5 SW 0:00 [agetty]
+ 111 tty6 SW 0:00 [agetty]
+ [output cut]
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Most of these processes are started at boot time on most systems. I've made a few
+modifications to my system, so your mileage will most likely vary. However, you will see
+most of these processes on your system too. As you can see, these options display command
+line options to the running processes. Recently, a kernel vulnerability in <tt
+class="COMMAND">ptrace</tt> facilitated a fix which no longer shows command line options
+for many running processes. These are now listed in brackets like PIDs 108 through 110.
+It also brings up a few more columns and some other interesting output.</p>
+
+<p>First, you'll notice that most of these processes are listed as running on tty
+&#8220;?&#8221;. Those are not attached to any particular terminal. This is most common
+with daemons, which are processes which run without attaching to any particular terminal.
+Common daemons are sendmail, BIND, apache, and NFS. They typically listen for some
+request from a client, and return information to it upon request.</p>
+
+<p>Second, there is a new column: <var class="LITERAL">STAT</var>. It shows the status of
+the process. <var class="LITERAL">S</var> stands for sleeping: the process is waiting for
+something to happen. <var class="LITERAL">Z</var> stands for a zombied process. A zombied
+processes is one whose parent has died, leaving the child processes behind. This is not a
+good thing. <var class="LITERAL">D</var> stands for a process that has entered an
+uninterruptible sleep. Often, these processes refuse to die even when passed a SIGKILL.
+You can read more about SIGKILL later in the next section on <tt
+class="COMMAND">kill</tt> . W stands for paging. A dead process is marked with an <var
+class="LITERAL">X</var>. A process marked <var class="LITERAL">T</var> is traced, or
+stopped. <var class="LITERAL">R</var> means that the process is runable.</p>
+
+<p>If you want to see even more information about the running processes, try this
+out:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ps -aux</kbd>
+ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
+ root 1 0.0 0.0 344 80 ? S Mar02 0:03 init [3]
+ root 2 0.0 0.0 0 0 ? SW Mar02 0:13 [kflushd]
+ root 3 0.0 0.0 0 0 ? SW Mar02 0:14 [kupdate]
+ root 4 0.0 0.0 0 0 ? SW Mar02 0:00 [kpiod]
+ root 5 0.0 0.0 0 0 ? SW Mar02 0:17 [kswapd]
+ root 11 0.0 0.0 1044 44 ? S Mar02 0:00 /sbin/kerneld
+ root 30 0.0 0.0 1160 0 ? SW Mar02 0:01 [cardmgr]
+ bin 50 0.0 0.0 1076 120 ? S Mar02 0:00 /sbin/rpc.port
+ root 54 0.0 0.1 1360 192 ? S Mar02 0:00 /usr/sbin/sysl
+ root 57 0.0 0.1 1276 152 ? S Mar02 0:00 /usr/sbin/klog
+ root 59 0.0 0.0 1332 60 ? S Mar02 0:00 /usr/sbin/inet
+ root 61 0.0 0.2 1540 312 ? S Mar02 0:04 /usr/local/sbi
+ root 63 0.0 0.0 1796 72 ? S Mar02 0:00 /usr/sbin/rpc.
+ root 65 0.0 0.0 1812 68 ? S Mar02 0:00 /usr/sbin/rpc.
+ root 67 0.0 0.2 1172 260 ? S Mar02 0:00 /usr/sbin/cron
+ root 77 0.0 0.2 1048 316 ? S Mar02 0:00 /usr/sbin/apmd
+ root 79 0.0 0.1 1100 152 ? S Mar02 0:01 gpm
+ root 94 0.0 0.2 1396 280 ? S Mar02 0:00 /usr/sbin/auto
+ chris 106 0.0 0.5 1820 680 tty1 S Mar02 0:08 -bash
+ root 108 0.0 0.0 1048 0 tty3 SW Mar02 0:00 [agetty]
+ root 109 0.0 0.0 1048 0 tty4 SW Mar02 0:00 [agetty]
+ root 110 0.0 0.0 1048 0 tty5 SW Mar02 0:00 [agetty]
+ root 111 0.0 0.0 1048 0 tty6 SW Mar02 0:00 [agetty]
+ [output cut]
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That's a whole lot of information. Basically, it adds information including what user
+started the process, how much of the system resources the process is using (the %CPU,
+%MEM, VSZ, and RSS columns), and on what date the process was started. Obviously, that's
+a lot of information that could come in handy for a system administrator. It also brings
+up another point: the information now goes off the edge of the screen so that you cannot
+see it all. The <var class="OPTION">-w</var> option will force <tt
+class="COMMAND">ps</tt> to wrap long lines.</p>
+
+<p>It's not terribly pretty, but it does the job. You've now got the complete listings
+for each process. There's even more information that you can display about each process.
+Check out the very in-depth man page for <tt class="COMMAND">ps</tt>. However, the
+options shown above are the most popular ones and will be the ones you need to use the
+most often.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PROCESS-CONTROL-KILL" name="PROCESS-CONTROL-KILL">11.4 <tt
+class="COMMAND">kill</tt></a></h2>
+
+<p>On occasion, programs misbehave and you'll need to put them back in line. The program
+for this kind of administration is called <tt class="COMMAND">kill</tt>(1), and it can be
+used for manipulating processes in several ways. The most obvious use of <tt
+class="COMMAND">kill</tt> is to kill off a process. You'll need to do this if a program
+has run away and is using up lots of system resources, or if you're just sick of it
+running.</p>
+
+<p>In order to kill off a process, you'll need to know its PID or its name. To get the
+PID, use the <tt class="COMMAND">ps</tt> command as was discussed in the last section.
+For example, to kill off process 4747, you'd issue the following:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">kill 4747</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Note that you'll have to be the owner of the process in order to kill it. This is a
+security feature. If you were allowed to kill off processes started by other users, it
+would be possible to do all sorts of malicious things. Of course, <tt
+class="USERNAME">root</tt> can kill off any process on the system.</p>
+
+<p>There's another variety of the <tt class="COMMAND">kill</tt> command called <tt
+class="COMMAND">killall</tt>(1). This program does exactly what it says: it kills all the
+running processes that have a certain name. If you wanted to kill off all the running <tt
+class="COMMAND">vim</tt> processes, you could type the following command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">killall vim</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Any and all <tt class="COMMAND">vim</tt> processes you have running will die off.
+Doing this as <tt class="USERNAME">root</tt> would kill off all the <tt
+class="COMMAND">vim</tt> processes running for all users. This brings up an interesting
+way to kick everyone (including yourself) off the system:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">killall bash</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Sometimes a regular kill doesn't get the job done. Certain processes will not die with
+a kill. You'll need to use a more potent form. If that pesky PID 4747 wasn't responding
+to your kill request, you could do the following:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">kill -9 4747</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That will almost certainly cause process 4747 to die. You can do the same thing with
+<tt class="COMMAND">killall</tt>. What this is doing is sending a different signal to the
+process. A regular <tt class="COMMAND">kill</tt> sends a <var
+class="LITERAL">SIGTERM</var> (terminate) signal to the process, which tells it to finish
+what it's doing, clean up, and exit. <tt class="COMMAND">kill -9</tt> sends a <var
+class="LITERAL">SIGKILL</var> (kill) signal to the process, which essentially drops it.
+The process is not allowed to clean-up, and sometimes bad things like data corruption
+could occur by killing something with a <var class="LITERAL">SIGKILL</var>. There's a
+whole list of signals at your disposal. You can get a listing of signals by typing the
+following:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">kill -l</kbd>
+ 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
+ 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
+ 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
+ 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
+ 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
+ 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
+ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
+ 30) SIGPWR
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The number must be used for <tt class="COMMAND">kill</tt>, while the name minus the
+leading &#8220;SIG&#8221; can be used with <tt class="COMMAND">killall</tt>. Here's
+another example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">killall -KILL vim</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>A final use of <tt class="COMMAND">kill</tt> is to restart a process. Sending a <var
+class="LITERAL">SIGHUP</var> will cause most processes to re-read their configuration
+files. This is especially helpful for telling system processes to re-read their config
+files after editing.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PROCESS-CONTROL-TOP" name="PROCESS-CONTROL-TOP">11.5 <tt
+class="COMMAND">top</tt></a></h2>
+
+<p>Finally, there's a command you can use to display updating information about the
+processes running on the system. This command is called <tt class="COMMAND">top</tt>(1),
+and is started like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">top</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will display a full screen of information about the processes running on the
+system, as well as some overall information about the system. This includes load average,
+number of processes, the CPU status, free memory information, and details about processes
+including PID, user, priority, CPU and memory usage information, running time, and
+program name.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+ 6:47pm up 1 day, 18:01, 1 user, load average: 0.02, 0.07, 0.02
+61 processes: 59 sleeping, 2 running, 0 zombie, 0 stopped
+CPU states: 2.8% user, 3.1% system, 0.0% nice, 93.9% idle
+Mem: 257992K av, 249672K used, 8320K free, 51628K shrd, 78248K buff
+Swap: 32764K av, 136K used, 32628K free, 82600K cached
+
+<span class="emphasis"><i
+class="EMPHASIS">PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND</i></span>
+ 112 root 12 0 19376 18M 2468 R 0 3.7 7.5 55:53 X
+4947 david 15 0 2136 2136 1748 S 0 2.3 0.8 0:00 screenshot
+3398 david 7 0 20544 20M 3000 S 0 1.5 7.9 0:14 gimp
+4946 root 12 0 1040 1040 836 R 0 1.5 0.4 0:00 top
+ 121 david 4 0 796 796 644 S 0 1.1 0.3 25:37 wmSMPmon
+ 115 david 3 0 2180 2180 1452 S 0 0.3 0.8 1:35 wmaker
+4948 david 16 0 776 776 648 S 0 0.3 0.3 0:00 xwd
+ 1 root 1 0 176 176 148 S 0 0.1 0.0 0:13 init
+ 189 david 1 0 6256 6156 4352 S 0 0.1 2.4 3:16 licq
+4734 david 0 0 1164 1164 916 S 0 0.1 0.4 0:00 rxvt
+ 2 root 0 0 0 0 0 SW 0 0.0 0.0 0:08 kflushd
+ 3 root 0 0 0 0 0 SW 0 0.0 0.0 0:06 kupdate
+ 4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kpiod
+ 5 root 0 0 0 0 0 SW 0 0.0 0.0 0:04 kswapd
+ 31 root 0 0 340 340 248 S 0 0.0 0.1 0:00 kerneld
+ 51 root 0 0 48 48 32 S 0 0.0 0.0 0:00 dhcpcd
+ 53 bin 0 0 316 316 236 S 0 0.0 0.1 0:00 rpc.portmap
+ 57 root 0 0 588 588 488 S 0 0.0 0.2 0:01 syslogd
+</pre>
+</td>
+</tr>
+</table>
+
+<p>It's called <tt class="COMMAND">top</tt> because the most CPU intensive programs will
+be listed at the top. An interesting note is that top will be listed first on most
+inactive (and some active) systems because of its CPU utilization. However, <tt
+class="COMMAND">top</tt> is quite useful for determining what program is misbehaving and
+needs to be killed off.</p>
+
+<p>But suppose you only want a list of your own processes, or the processes of some other
+user. The processes you want to see might not be among the most CPU intensive programs
+currently running. The <var class="OPTION">-u</var> option allows you to specify a
+username or UID and monitor only those processes owned by that UID.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">top -u alan</kbd>
+ PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
+3622 alan 13 0 11012 10m 6956 S 1.0 2.1 0:03.66 gnome-terminal
+3739 alan 13 0 1012 1012 804 R 0.3 0.2 0:00.06 top
+3518 alan 9 0 1312 1312 1032 S 0.0 0.3 0:00.09 bash
+3529 alan 9 0 984 984 848 S 0.0 0.2 0:00.00 startx
+3544 alan 9 0 640 640 568 S 0.0 0.1 0:00.00 xinit
+3548 alan 9 0 8324 8320 6044 S 0.0 1.6 0:00.30 gnome-session
+3551 alan 9 0 7084 7084 1968 S 0.0 1.4 0:00.50 gconfd-2
+3553 alan 9 0 2232 2232 380 S 0.0 0.4 0:00.05 esd
+3555 alan 9 0 2552 2552 1948 S 0.0 0.5 0:00.10 bonobo-activati
+3557 alan 9 0 2740 2740 2224 S 0.0 0.5 0:00.05 gnome-smproxy
+3559 alan 9 0 6496 6492 5004 S 0.0 1.3 0:00.31 gnome-settings-
+3565 alan 9 0 1740 1740 1440 S 0.0 0.3 0:00.28 xscreensaver
+3568 alan 9 0 7052 7052 4960 S 0.0 1.4 0:02.28 metacity
+3572 alan 9 0 11412 11m 7992 S 0.0 2.2 0:01.58 gnome-panel
+3574 alan 9 0 12148 11m 8780 S 0.0 2.4 0:00.64 nautilus
+3575 alan 9 0 12148 11m 8780 S 0.0 2.4 0:00.00 nautilus
+3576 alan 9 0 12148 11m 8780 S 0.0 2.4 0:00.00 nautilus
+</pre>
+</td>
+</tr>
+</table>
+
+<p>As you can see, I'm currently running <tt class="COMMAND">X</tt>, <tt
+class="COMMAND">top</tt>, a <tt class="COMMAND">gnome-terminal</tt> (in which I'm writing
+this) and many other X-related processes which take up the most CPU time for me. This is
+a good way to monitor how hard your users are working your system.</p>
+
+<p><tt class="COMMAND">top</tt> also supports monitoring processes by their PID, ignoring
+idle and zombied processes, and many other options. The best place to get a handle on
+these options is the man page for <tt class="COMMAND">top</tt>.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="ESSENTIAL-SYSADMIN" name="ESSENTIAL-SYSADMIN"></a>Chapter 12 Essential System
+Administration</h1>
+
+<p>Whoa whoa whoa whoa whoa.... I know what you're thinking. &#8220;I'm not a system
+administrator! I don't even want to be a system administrator!&#8221;</p>
+
+<p>Fact is, you are the administrator of any computers for which you have the <tt
+class="USERNAME">root</tt> password. This might be your desktop box with one or two
+users, or it might be a big server with several hundred. Regardless, you'll need to know
+how to manage users, and how to shut down the system safely. These tasks seem simple, but
+they have some quirks to keep in mind.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ESSENTIAL-SYSADMIN-USERS" name="ESSENTIAL-SYSADMIN-USERS">12.1
+Users and Groups</a></h2>
+
+<p>As mentioned in <a href="#SHELL">Chapter 8</a>, you shouldn't normally use your system
+logged in as <tt class="USERNAME">root</tt>. Instead, you should create a normal user
+account for everyday use, and use the root account only for system administration tasks.
+To create a user, you can either use the tools supplied with Slackware, or you can edit
+the password files by hand.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="ESSENTIAL-SYSADMIN-USERS-SCRIPTS"
+name="ESSENTIAL-SYSADMIN-USERS-SCRIPTS">12.1.1 Supplied Scripts</a></h3>
+
+<p>The easiest way to manage users and groups is with the supplied scripts and programs.
+Slackware includes the programs <tt class="COMMAND">adduser</tt>, <tt
+class="COMMAND">userdel</tt>(8), <tt class="COMMAND">chfn</tt>(1), <tt
+class="COMMAND">chsh</tt>(1), and <tt class="COMMAND">passwd</tt>(1) for dealing with
+users. The commands <tt class="COMMAND">groupadd</tt>(8), <tt
+class="COMMAND">groupdel</tt>(8), and <tt class="COMMAND">groupmod</tt>(8) are for
+dealing with groups. With the exception of <tt class="COMMAND">chfn</tt>, <tt
+class="COMMAND">chsh</tt>, and <tt class="COMMAND">passwd</tt>, these programs are
+generally only run as <tt class="USERNAME">root</tt>, and are therefore located in <tt
+class="FILENAME">/usr/sbin</tt>. <tt class="COMMAND">chfn</tt>, <tt
+class="COMMAND">chsh</tt>, and <tt class="COMMAND">passwd</tt> can be run by anyone, and
+are located in <tt class="FILENAME">/usr/bin</tt>.</p>
+
+<p>Users can be added with the <tt class="COMMAND">adduser</tt> program. We'll start out
+by going through the whole procedure, showing all the questions that are asked and a
+brief description of what everything means. The default answer is in the brackets, and
+can be chosen for almost all the questions, unless you really want to change
+something.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">adduser</kbd>
+Login name for new user []: jellyd
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This is the name that the user will use to login. Traditionally, login names are eight
+characters or fewer, and all lowercase characters. (You may use more than eight
+characters, or use digits, but avoid doing so unless you have a fairly important
+reason.)</p>
+
+<p>You can also provide the login name as an argument on the command line:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">adduser jellyd</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>In either case, after providing the login name, adduser will prompt for the user
+ID:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+User ID ('UID') [ defaults to next available ]:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The user ID (UID) is how ownerships are really determined in Linux. Each user has a
+unique number, starting at 1000 in Slackware. You can pick a UID for the new user, or you
+can just let adduser assign the user the next free one.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Initial group [users]:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>All users are placed into the <tt class="USERNAME">users</tt> group by default. You
+might want to place the new user into a different group, but it is not recommended unless
+you know what you're doing.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Additional groups (comma separated) []:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This question allows you to place the new user into additional groups. It is possible
+for a user to be in several groups at the same time. This is useful if you have
+established groups for things like modifying web site files, playing games, and so on.
+For example, some sites define group <tt class="USERNAME">wheel</tt> as the only group
+that can use the <tt class="COMMAND">su</tt> command. Or, a default Slackware
+installation uses the <tt class="USERNAME">sys</tt> group for users authorized to play
+sounds through the internal sound card.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Home directory [/home/jellyd]
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Home directories default to being placed under <tt class="FILENAME">/home</tt>. If you
+run a very large system, it's possible that you have moved the home directories to a
+different location (or to many locations). This step allows you to specify where the
+user's home directory will be.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Shell [ /bin/bash ]
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">bash</tt> is the default shell for Slackware Linux, and will be
+fine for most people. If your new user comes from a Unix background, they may be familiar
+with a different shell. You can change their shell now, or they can change it themselves
+later using the <tt class="COMMAND">chsh</tt> command.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Expiry date (YYYY-MM-DD) []:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Accounts can be set up to expire on a specified date. By default, there is no
+expiration date. You can change that, if you'd like. This option might be useful for
+people running an ISP who might want to make an account expire upon a certain date,
+unless they receive the next year's payment.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+New account will be created as follows:
+---------------------------------------
+Login name: jellyd
+UID: [ Next available ]
+Initial group: users
+Additional groups: [ None ]
+Home directory: /home/jellyd
+Shell: /bin/bash
+Expiry date: [ Never ]
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This is it... if you want to bail out, hit <b class="KEYCAP">Control</b>+<b
+class="KEYCAP">C</b>. Otherwise, press <kbd class="USERINPUT">ENTER</kbd> to go ahead and
+make the account.</p>
+
+<p>You now see all the information that you've entered about the new account and are
+given the opportunity to abort the account creation. If you entered something
+incorrectly, you should hit <b class="KEYCAP">Control</b>+<b class="KEYCAP">C</b> and
+start over. Otherwise, you can hit <kbd class="USERINPUT">enter</kbd> and the account
+will be made.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Creating new account...
+
+Changing the user information for jellyd
+Enter the new value, or press return for the default
+ Full Name []: Jeremy
+ Room Number []: Smith 130
+ Work Phone []:
+ Home Phone []:
+ Other []:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>All of this information is optional. You don't have to enter any of this if you don't
+want to, and the user can change it at any time using <tt class="COMMAND">chfn</tt>.
+However, you might find it helpful to enter at least the full name and a phone number, in
+case you need to get in touch with the person later.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Changing password for jellyd
+Enter the new password (minimum of 5, maximum of 127 characters)
+Please use a combination of upper and lower case letters and numbers.
+New password:
+Re-enter new password:
+Password changed.
+
+Account setup complete.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You'll have to enter a password for the new user. Generally, if the new user is not
+physically present at this point, you'll just pick some default password and tell the
+user to change it to something more secure.</p>
+
+<div class="NOTE">
+<table class="NOTE" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/note.png"
+hspace="5" alt="Note" /></td>
+<td align="LEFT" valign="TOP">
+<p><span class="emphasis"><i class="EMPHASIS">Choosing a Password</i></span>: Having a
+secure password is the first line of defense against getting cracked. You do not want to
+have an easily guessed password, because that makes it easier for someone to break into
+your system. Ideally, a secure password would be a random string of characters, including
+upper and lowercase letters, numbers, and random characters. (A tab character might not
+be a wise choice, depending on what kinds of computers you'll be logging in from.) There
+are many software packages that can generate random passwords for you; search the
+Internet for these utilities.</p>
+
+<p>In general, just use common sense: don't pick a password that is someone's birthday, a
+common phrase, something found on your desk, or anything that is easily associated with
+you. A password like &#8220;secure1&#8221; or any other password you see in print or
+online is also bad.</p>
+</td>
+</tr>
+</table>
+</div>
+
+<p>Removing users is not difficult at all. Just run <tt class="COMMAND">userdel</tt> with
+the name of the account to remove. You should verify that the user is not logged in, and
+that no processes are running as that user. Also, remember that once you've deleted the
+user, all of that user's password information is gone permanently.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">userdel jellyd</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This command removes that annoying <tt class="USERNAME">jellyd</tt> user from your
+system. Good riddance! :) The user is removed from the <tt
+class="FILENAME">/etc/passwd</tt>, <tt class="FILENAME">/etc/shadow</tt>, and <tt
+class="FILENAME">/etc/group</tt> files, but doesn't remove the user's home directory.</p>
+
+<p>If you'd wanted to remove the home directory as well, you would instead use this
+command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">userdel -r jellyd</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Temporarily disabling an account will be covered in the next section on passwords,
+since a temporary change involves changing the user's password. Changing other account
+information is covered in <a href="#ESSENTIAL-SYSADMIN-USERS-CHANGING">Section
+12.1.3</a>.</p>
+
+<p>The programs to add and remove groups are very simple. <tt
+class="COMMAND">groupadd</tt> will just add another entry to the <tt
+class="FILENAME">/etc/group</tt> file with a unique group ID, while <tt
+class="COMMAND">groupdel</tt> will remove the specified group. It is up to you to edit
+<tt class="FILENAME">/etc/group</tt> to add users to a specific group. For example, to
+add a group called <tt class="USERNAME">cvs</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">groupadd cvs</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>And to remove it:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">groupdel cvs</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="ESSENTIAL-SYSADMIN-USERS-PASSWDS"
+name="ESSENTIAL-SYSADMIN-USERS-PASSWDS">12.1.2 Changing Passwords</a></h3>
+
+<p>The <tt class="COMMAND">passwd</tt> program changes passwords by modifying the <tt
+class="FILENAME">/etc/shadow</tt> file. This file holds all the passwords for the system
+in an encrypted format. In order to change your own password, you would type:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">passwd</kbd>
+Changing password for chris
+Old password:
+Enter the new password (minumum of 5, maximum of 127 characters)
+Please use a combination of upper and lower case letters and numbers.
+New password:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>As you can see, you are prompted to enter your old password. It won't appear on the
+screen as you type it, just like when you log in. Then, you are prompted to enter the new
+password. <tt class="COMMAND">passwd</tt> performs a lot of checks on your new password,
+and it will complain if your new password doesn't pass its checks. You can ignore its
+warnings if you want. You will be prompted to enter your new password a second time for
+confirmation.</p>
+
+<p>If you are <tt class="USERNAME">root</tt>, you can also change another user's
+password:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">passwd ted</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You will then have to go through the same procedure as above, except that you won't
+have to enter the user's old password. (One of the many benefits of being <tt
+class="USERNAME">root</tt>...)</p>
+
+<p>If needed, you can also temporarily disable an account, and reenable it at a later
+time if needed. Both disabling an account and reenabling an account can be done with <tt
+class="COMMAND">passwd</tt>. To disable an account, do the following as <tt
+class="USERNAME">root</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">passwd -l david</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will change david's password to something that can never match any encrypted
+value. You would reenable the account by using:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">passwd -u david</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Now, david's account is back to normal. Disabling an account might be useful if the
+user doesn't play by the rules you've set up on your system, or if they've exported a
+very large copy of <tt class="COMMAND">xeyes</tt>(1) to your X desktop.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="ESSENTIAL-SYSADMIN-USERS-CHANGING"
+name="ESSENTIAL-SYSADMIN-USERS-CHANGING">12.1.3 Changing User Information</a></h3>
+
+<p>There are two pieces of information that users can change at any time: their shell and
+their finger information. Slackware Linux uses <tt class="COMMAND">chsh</tt> (change
+shell) and <tt class="COMMAND">chfn</tt> (change finger) to modify these values.</p>
+
+<p>A user can pick any shell that is listed in the <tt class="FILENAME">/etc/shells</tt>
+file. For most people, <tt class="COMMAND">/bin/bash</tt> will do just fine. Others might
+be familiar with a shell found on their system at work or school and want to use what
+they already know. To change your shell, use <tt class="COMMAND">chsh</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">chsh</kbd>
+Password:
+Changing the login shell for chris
+Enter the new value, or press return for the default
+ Login Shell [/bin/bash]:
+</pre>
+</td>
+</tr>
+</table>
+
+<p>After entering your password, enter the full path to the new shell. Make sure that
+it's listed in the <tt class="FILENAME">/etc/shells</tt>(5) file first. The <tt
+class="USERNAME">root</tt> user can also change any user's shell by running <tt
+class="COMMAND">chsh</tt> with a username as the argument.</p>
+
+<p>The finger information is the optional information such as your full name, phone
+numbers, and room number. This can be changed using <tt class="COMMAND">chfn</tt>, and
+follows the same procedure as it did during account creation. As usual, <tt
+class="USERNAME">root</tt> can change anyone's finger information.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ESSENTIAL-SYSADMIN-HARDUSERS"
+name="ESSENTIAL-SYSADMIN-HARDUSERS">12.2 Users and Groups, the Hard Way</a></h2>
+
+<p>Of course, it is possible to add, modify, and remove users and groups without using
+the scripts and programs that come with Slackware. It's not really difficult, although
+after reading this process, you'll probably find it much easier to use the scripts.
+However, it's important to know how your password information is actually stored, in case
+you ever need to recover this information and don't have the Slackware tools
+available.</p>
+
+<p>First, we'll add a new user to the <tt class="FILENAME">/etc/passwd</tt>(5), <tt
+class="FILENAME">/etc/shadow</tt>(5), and <tt class="FILENAME">/etc/group</tt>(5) files.
+The <tt class="FILENAME">passwd</tt> file holds some information about the users on your
+system, but (strangely enough) not their passwords. This was once the case, but was
+halted long ago for security reasons. The passwd file must be readable by all users, but
+you don't want encrypted passwords world-readable, as would-be intruders can use the
+encrypted passwords as a starting point for decrypting a user's password. Instead, the
+encrypted passwords are kept in the shadow file, which is only readable by root, and
+everyone's password is entered into the <tt class="FILENAME">passwd</tt> file simply as
+&#8220;<var class="LITERAL">x</var>&#8221;. The <tt class="FILENAME">group</tt> file
+lists all the groups and who is in each.</p>
+
+<p>You can use the <tt class="COMMAND">vipw</tt> command to edit the <tt
+class="FILENAME">/etc/passwd</tt> file safely, and the <tt class="COMMAND">vigr</tt>
+command to edit the <tt class="FILENAME">/etc/group</tt> file safely. Use <tt
+class="COMMAND">vipw -s</tt> to edit the <tt class="FILENAME">/etc/shadow</tt> file
+safely. (&#8220;Safely&#8221; in this context means someone else won't be able to modify
+the file you're editing at the moment. If you're the only administrator of your system,
+you're probably safe, but it's best to get into good habits from the start.)</p>
+
+<p>Let's examine the <tt class="FILENAME">/etc/passwd</tt> file and look at how to add a
+new user. A typical entry in <tt class="FILENAME">passwd</tt> looks like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+chris:x:1000:100:Chris Lumens,Room 2,,:/home/chris:/bin/bash
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Each line is an entry for one user, and fields on each line are separated by a colon.
+The fields are the login name, encrypted password (&#8220;<var
+class="LITERAL">x</var>&#8221; for everyone on a Slackware system, since Slackware uses
+shadow passwords), user ID, group ID, the optional finger information (separated by
+commas), home directory, and shell. To add a new user by hand, add a new line at the end
+of the file, filling in the appropriate information.</p>
+
+<p>The information you add needs to meet some requirements, or your new user may have
+problems logging in. First, make sure that the password field is an <var
+class="LITERAL">x</var>, and that both the user name and user ID is unique. Assign the
+user a group, either 100 (the &#8220;users&#8221; group in Slackware) or your default
+group (use its number, not its name). Give the user a valid home directory (which you'll
+create later) and shell (remember, valid shells are listed in <tt
+class="FILENAME">/etc/shells</tt>).</p>
+
+<p>Next, we'll need to add an entry in the /etc/shadow file, which holds the encrypted
+passwords. A typical entry looks like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+chris:$1$w9bsw/N9$uwLr2bRER6YyBS.CAEp7R.:11055:0:99999:7:::
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Again, each line is an entry for one person, with each field delimited by a colon. The
+fields are (in order) login name, encrypted password, days since the Epoch (January 1,
+1970) that the password was last changed, days before the password may be changed, days
+after which the password must be changed, days before password expiration that the user
+is notified, days after expiration that the account is disabled, days since the Epoch
+that the account is disabled, and a reserved field.</p>
+
+<p>As you can see, most of that is for account expiration information. If you aren't
+using expiration information, you only need to fill in a few fields with some special
+values. Otherwise, you'll need to do some calculations and decision making before you can
+fill those fields in. For a new user, just put some random garbage in the password field.
+Don't worry about what the password is right now, because you're going to change it in a
+minute. The only character you cannot include in the password field is a colon. Leave the
+&#8220;days since password was changed&#8221; field blank as well. Fill in <var
+class="LITERAL">0</var>, <var class="LITERAL">99999</var>, and <var
+class="LITERAL">7</var> just as you see in the example entry, and leave the other fields
+blank.</p>
+
+<p>(For those of you who think you see my encrypted password above and believe you've got
+a leg up on breaking into my system, go right ahead. If you can crack that password,
+you'll know the password to a firewalled test system. Now that's useful :) )</p>
+
+<p>All normal users are members of the &#8220;<tt class="USERNAME">users</tt>&#8221;
+group on a typical Slackware system. However, if you want to create a new group, or add
+the new user to additional groups, you'll need to modify the <tt
+class="FILENAME">/etc/group</tt> file. Here is a typical entry:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+cvs::102:chris,logan,david,root
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The fields are group name, group password, group ID, and group members, separated by
+commas. Creating a new group is a simple matter of adding a new line with a unique group
+ID, and listing all the users you want to be in the group. Any users that are in this new
+group and are logged in will have to log out and log back in for those changes to take
+effect.</p>
+
+<p>At this point, it might be a good idea to use the <tt class="COMMAND">pwck</tt> and
+<tt class="COMMAND">grpck</tt> commands to verify that the changes you've made are
+consistent. First, use <tt class="COMMAND">pwck -r</tt> and <tt class="COMMAND">grpck
+-r</tt>: the <var class="OPTION">-r</var> switch makes no changes, but lists the changes
+you would be asked to make if you ran the command without the switch. You can use this
+output to decide whether you need to further modify any files, to run <tt
+class="COMMAND">pwck</tt> or <tt class="COMMAND">grpck</tt> without the <var
+class="OPTION">-r</var> switch, or to simply leave your changes as they are.</p>
+
+<p>At this point, you should use the <tt class="COMMAND">passwd</tt> command to create a
+proper password for the user. Then, use <tt class="COMMAND">mkdir</tt> to create the new
+user's home directory in the location you entered into the <tt
+class="FILENAME">/etc/passwd</tt> file, and use <tt class="COMMAND">chown</tt> to change
+the owner of the new directory to the new user.</p>
+
+<p>Removing a user is a simple matter of deleting all of the entries that exist for that
+user. Remove the user's entry from <tt class="FILENAME">/etc/passwd</tt> and <tt
+class="FILENAME">/etc/shadow</tt>, and remove the login name from any groups in the <tt
+class="FILENAME">/etc/group</tt> file. If you wish, delete the user's home directory, the
+mail spool file, and his crontab entry (if they exist).</p>
+
+<p>Removing groups is similar: remove the group's entry from <tt
+class="FILENAME">/etc/group</tt>.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ESSENTIAL-SYSADMIN-SHUTDOWN"
+name="ESSENTIAL-SYSADMIN-SHUTDOWN">12.3 Shutting Down Properly</a></h2>
+
+<p>It is very important that you shut down your system properly. Simply turning the power
+off with the power switch can cause serious filesystem damage. While the system is on,
+files are in use even if you aren't doing anything. Remember that there are many
+processes running in the background all the time. These processes are managing the system
+and keep a lot of files open. When the system's power is switched off, these files are
+not closed properly and may become corrupted. Depending on what files become damaged, the
+system might be rendered completely unusable! In any case, you'll have to go through a
+long filesystem check procedure on the next reboot.</p>
+
+<div class="NOTE">
+<table class="NOTE" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/note.png"
+hspace="5" alt="Note" /></td>
+<td align="LEFT" valign="TOP">
+<p>If you configured your system with a journalling filesystem, like ext3 or reiserfs,
+you'll be partially protected from filesystem damage, and your filesystem check on reboot
+will be shorter than if you had used a filesystem without journalling, like ext2.
+However, this safety net is no excuse for improperly shutting down your system! A
+journalling FS is meant to protect your files from events beyond your control, not from
+your own laziness.</p>
+</td>
+</tr>
+</table>
+</div>
+
+<p>In any case, when you want to reboot or power down your computer, it is important to
+do so properly. There are several ways of doing so; you can pick whichever one you think
+is the most fun (or least amount of work). Since a shutdown and a reboot are similar
+procedures, most of the ways for powering off the system can also be applied to
+rebooting.</p>
+
+<p>The first method is through the <tt class="COMMAND">shutdown</tt>(8) program, and it
+is probably the most popular. <tt class="COMMAND">shutdown</tt> can be used to reboot or
+turn off the system at a given time, and can display a message to all the logged-in users
+of the system telling them that the system is going down.</p>
+
+<p>The most basic use of shutdown to power down the computer is:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">shutdown -h now</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>In this case, we are not going to send a custom message to the users; they will see
+<tt class="COMMAND">shutdown</tt>'s default message. &#8220;<var
+class="OPTION">now</var>&#8221; is the time that we want to shutdown, and the &#8220;<var
+class="OPTION">-h</var>&#8221; means to halt the system. This is not a very friendly way
+to run a multi-user system, but it works just fine on your home computer. A better method
+on a multiuser system would be to give everyone a little advance warning:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">shutdown -h +60</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This would shutdown the system in one hour (60 minutes), which would be just fine on a
+normal multiuser system. Vital systems should have their downtime scheduled far in
+advance, and you should post warnings about the downtime in any appropriate locations
+used for system notifications (email, bulletin board, <tt
+class="FILENAME">/etc/motd</tt>, whatever).</p>
+
+<p>Rebooting the system uses the same command, but substitutes &#8220;<var
+class="OPTION">-r</var>&#8221; for &#8220;<var class="OPTION">-h</var>&#8221;:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">shutdown -r now</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You can use same time notation with <tt class="COMMAND">shutdown -r</tt> that you
+could with <tt class="COMMAND">shutdown -h</tt>. There are a lot of other things that you
+can do with <tt class="COMMAND">shutdown</tt> to control when to halt or reboot the
+machine; see the man page for more details.</p>
+
+<p>The second way of shutting down or powering off the computer is to use the <tt
+class="COMMAND">halt</tt>(8) and <tt class="COMMAND">reboot</tt>(8) commands. As the
+names indicate, <tt class="COMMAND">halt</tt> will immediately halt the operating system,
+and <tt class="COMMAND">reboot</tt> will reboot the system. (<tt
+class="COMMAND">reboot</tt> is actually just a symbolic link to <tt
+class="COMMAND">halt</tt>.) They are invoked like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">halt</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">reboot</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>A lower-level way to reboot or shutdown the system is to talk directly to <tt
+class="COMMAND">init</tt>. All the other methods are simply convenient ways to talk to
+<tt class="COMMAND">init</tt>, but you can directly tell it what to do using <tt
+class="COMMAND">telinit</tt>(8) (note that it only has one &#8220;l&#8221;). Using <tt
+class="COMMAND">telinit</tt> will tell <tt class="COMMAND">init</tt> what runlevel to
+drop into, which will cause a special script to be run. This script will kill or spawn
+processes as needed for that runlevel. This works for rebooting and shutting down because
+both of those are special runlevels.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">telinit 0</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Runlevel 0 is halt mode. Telling <tt class="COMMAND">init</tt> to enter runlevel 0
+will cause all processes to be killed off, the filesystems unmounted, and the machine to
+be halted. This is a perfectly acceptable way to bring down the system. On many laptops
+and modern desktop computers, this will also cause the machine to be turned off.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">telinit 6</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Runlevel 6 is reboot mode. All processes will be killed off, the filesystems will be
+unmounted, and the machine will be rebooted. This is a perfectly acceptable method of
+rebooting the system.</p>
+
+<p>For the curious, when switching to runlevel 0 or 6, whether by using <tt
+class="COMMAND">shutdown</tt>, <tt class="COMMAND">halt</tt>, or <tt
+class="COMMAND">reboot</tt>, the script <tt class="FILENAME">/etc/rc.d/rc.6</tt> is run.
+(The script <tt class="FILENAME">/etc/rc.d/rc.0</tt> is another symbolic link, to <tt
+class="FILENAME">/etc/rc.d/rc.6</tt>.) You can customize this file to your tastes--but be
+sure to test your changes carefully!</p>
+
+<p>There is one last method of rebooting the system. All the other methods require you to
+be logged in as <tt class="USERNAME">root</tt>. However, it is possible to reboot the
+machine even if you aren't root, provided that you have physical access to the keyboard.
+Using <b class="KEYCAP">Control</b>+<b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">Delete</b> (the "three-fingered salute") will cause the machine to
+immediately reboot. (Behind the scenes, the <tt class="COMMAND">shutdown</tt> command is
+called for you when you use <b class="KEYCAP">Control</b>+<b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">Delete</b>.) The salute doesn't always work when using X Windows--you may
+need to use <b class="KEYCAP">Control</b>+<b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">F1</b> (or another Function key) to switch to a non-X Windows terminal
+before using it.</p>
+
+<p>Finally, the file that ultimately controls every aspect of startup and shutdown is the
+<tt class="FILENAME">/etc/inittab</tt>(5) file. In general, you should not need to modify
+this file, but it may give you insight into why some things work the way they do. As
+always, see the man pages for further details.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="BASIC-NETWORK-COMMANDS" name="BASIC-NETWORK-COMMANDS"></a>Chapter 13 Basic
+Network Commands</h1>
+
+<p>A network consists of several computers connected together. The network can be as
+simple as a few computers connected in your home or office, or as complicated as a large
+university network or even the entire Internet. When your computer is part of a network,
+you have access to those systems either directly or through services like mail and the
+web.</p>
+
+<p>There are a variety of networking programs that you can use. Some are handy for
+performing diagnostics to see if everything is working properly. Others (like mail
+readers and web browsers) are useful for getting your work done and staying in contact
+with other people.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-PING"
+name="BASIC-NETWORK-COMMANDS-PING">13.1 <tt class="COMMAND">ping</tt></a></h2>
+
+<p><tt class="COMMAND">ping</tt>(8) sends an ICMP <var class="LITERAL">ECHO_REQUEST</var>
+packet to the specified host. If the host responds, you get an ICMP packet back. Sound
+strange? Well, you can &#8220;ping&#8221; an IP address to see if a machine is alive. If
+there is no response, you know something is wrong. Here is an example conversation
+between two Linux users:</p>
+
+<a id="AEN4428" name="AEN4428"></a>
+<blockquote class="BLOCKQUOTE">
+<p class="LITERALLAYOUT"><span class="emphasis"><i class="EMPHASIS">User
+A</i></span>:&nbsp;Loki's&nbsp;down&nbsp;again.<br />
+<span class="emphasis"><i class="EMPHASIS">User
+B</i></span>:&nbsp;Are&nbsp;you&nbsp;sure?<br />
+<span class="emphasis"><i class="EMPHASIS">User
+A</i></span>:&nbsp;Yeah,&nbsp;I&nbsp;tried&nbsp;pinging&nbsp;it,&nbsp;but&nbsp;there's&nbsp;no&nbsp;response.</p>
+</blockquote>
+
+<p>It's instances like these that make <tt class="COMMAND">ping</tt> a very useful
+day-to-day command. It provides a very quick way to see if a machine is up and connected
+to the network. The basic syntax is:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ping www.slackware.com</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>There are, of course, several options that can be specified. Check the <tt
+class="COMMAND">ping</tt>(1) man page for more information.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-TRACEROUTE"
+name="BASIC-NETWORK-COMMANDS-TRACEROUTE">13.2 <tt
+class="COMMAND">traceroute</tt></a></h2>
+
+<p>Slackware's <tt class="COMMAND">traceroute</tt>(8) command is a very useful network
+diagnostic tool. <tt class="COMMAND">traceroute</tt> displays each host that a packet
+travels through as it tries to reach its destination. You can see how many
+&#8220;hops&#8221; from the Slackware web site you are with this command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">traceroute www.slackware.com</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Each host will be displayed, along with the response times at each host. Here is an
+example output:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">traceroute www.slackware.com</kbd>
+traceroute to www.slackware.com (204.216.27.13), 30 hops max, 40 byte packets
+1 zuul.tdn (192.168.1.1) 0.409 ms 1.032 ms 0.303 ms
+2 207.171.227.254 (207.171.227.254) 18.218 ms 32.873 ms 32.433 ms
+3 border-sf-2-0-4.sirius.com (205.134.230.254) 15.662 ms 15.731 ms 16.142 ms
+4 pb-nap.crl.net (198.32.128.20) 20.741 ms 23.672 ms 21.378 ms
+5 E0-CRL-SFO-03-E0X0.US.CRL.NET (165.113.55.3) 22.293 ms 21.532 ms 21.29 ms
+6 T1-CDROM-00-EX.US.CRL.NET (165.113.118.2) 24.544 ms 42.955 ms 58.443 ms
+7 www.slackware.com (204.216.27.13) 38.115 ms 53.033 ms 48.328 ms
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">traceroute</tt> is similar to <tt class="COMMAND">ping</tt> in
+that it uses ICMP packets. There are several options that you can specify with <tt
+class="COMMAND">traceroute</tt>. These options are explained in detail in the man
+page.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-DNS"
+name="BASIC-NETWORK-COMMANDS-DNS">13.3 DNS Tools</a></h2>
+
+<p>Domain Name Service (DNS for short) is that magical protocol that allows your computer
+to turn meaningless domain names like www.slackware.com into meaningful IP address like
+<tt class="HOSTID">64.57.102.34</tt>. Computers can't route packets to www.slackware.com,
+but they can route packets to that domain name's IP address. This gives us a convenient
+way to remember machines. Without DNS we'd have to keep a mental database of just what IP
+address belongs to what computer, and that's assuming the IP address doesn't change.
+Clearly using names for computers is better, but how do we map names to IP addresses?</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4475" name="AEN4475">13.3.1 <tt
+class="COMMAND">host</tt></a></h3>
+
+<p><tt class="COMMAND">host</tt>(1) can do this for us. <tt class="COMMAND">host</tt> is
+used to map names to IP addresses. It is a very quick and simple utility without a lot of
+functions.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">host www.slackware.com</kbd>
+www.slackware.com is an alias for slackware.com.
+slackware.com has address 64.57.102.34
+</pre>
+</td>
+</tr>
+</table>
+
+<p>But let's say for some reason we want to map an IP address to a domain name; what
+then?</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4487" name="AEN4487">13.3.2 <tt
+class="COMMAND">nslookup</tt></a></h3>
+
+<p><tt class="COMMAND">nslookup</tt> is a tried and true program that has weathered the
+ages. <tt class="COMMAND">nslookup</tt> has been deprecated and may be removed from
+future releases. There is not even a man page for this program.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">nslookup 64.57.102.34</kbd>
+Note: nslookup is deprecated and may be removed from future releases.
+Consider using the `dig' or `host' programs instead. Run nslookup with
+the `-sil[ent]' option to prevent this message from appearing.
+Server: 192.168.1.254
+Address: 192.168.1.254#53
+
+Non-authoritative answer:
+www.slackware.com canonical name = slackware.com.
+Name: slackware.com
+Address: 64.57.102.34
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4496" name="AEN4496">13.3.3 <tt
+class="COMMAND">dig</tt></a></h3>
+
+<p>The meanest dog in the pound, the domain information groper, <tt
+class="COMMAND">dig</tt>(1) for short, is the go-to program for finding DNS information.
+<tt class="COMMAND">dig</tt> can grab just about anything from a DNS server including
+reverse lookups, A, CNAME, MX, SP, and TXT records. <tt class="COMMAND">dig</tt> has many
+command line options and if you're not familiar with it you should read through it's
+extensive man page.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">dig @192.168.1.254 www.slackware.com mx</kbd>
+
+; &lt;&lt;&#62;&#62; DiG 9.2.2 &lt;&lt;&#62;&#62; @192.168.1.254 www.slackware.com mx
+;; global options: printcmd
+;; Got answer:
+;; -&#62;&#62;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 26362
+;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2
+
+;; QUESTION SECTION:
+;www.slackware.com. IN MX
+
+;; ANSWER SECTION:
+www.slackware.com. 76634 IN CNAME slackware.com.
+slackware.com. 86400 IN MX 1 mail.slackware.com.
+
+;; AUTHORITY SECTION:
+slackware.com. 86400 IN NS ns1.cwo.com.
+slackware.com. 86400 IN NS ns2.cwo.com.
+
+;; ADDITIONAL SECTION:
+ns1.cwo.com. 163033 IN A 64.57.100.2
+ns2.cwo.com. 163033 IN A 64.57.100.3
+
+;; Query time: 149 msec
+;; SERVER: 192.168.1.254#53(192.168.1.254)
+;; WHEN: Sat Nov 6 16:59:31 2004
+;; MSG SIZE rcvd: 159
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This should give you an idea how <tt class="COMMAND">dig</tt> works.
+&#8220;@192.168.1.254&#8221; specifies the dns server to use.
+&#8220;www.slackware.com&#8221; is the domain name I am performing a lookup on, and
+&#8220;mx&#8221; is the type of lookup I am performing. The above query tells me that
+e-mail to <tt class="HOSTID">www.slackware.com</tt> will instead be sent to <tt
+class="HOSTID">mail.slackware.com</tt> for delivery.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-FINGER"
+name="BASIC-NETWORK-COMMANDS-FINGER">13.4 <tt class="COMMAND">finger</tt></a></h2>
+
+<p><tt class="COMMAND">finger</tt>(1) will retrieve information about the specified user.
+You give finger a username or an email address and it will try to contact the necessary
+server and retrieve the username, office, telephone number, and other pieces of
+information. Here is an example:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">finger johnc@idsoftware.com</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">finger</tt> can return the username, mail status, phone numbers,
+and files referred to as &#8220;dot plan&#8221; and &#8220;dot project&#8221;. Of course,
+the information returned varies with each <tt class="COMMAND">finger</tt> server. The one
+included with Slackware returns the following information by default:</p>
+
+<ul>
+<li>
+<p>Username</p>
+</li>
+
+<li>
+<p>Room number</p>
+</li>
+
+<li>
+<p>Home phone number</p>
+</li>
+
+<li>
+<p>Work phone number</p>
+</li>
+
+<li>
+<p>Login status</p>
+</li>
+
+<li>
+<p>Email status</p>
+</li>
+
+<li>
+<p>Contents of the <tt class="FILENAME">.plan</tt> file in the user's home directory</p>
+</li>
+
+<li>
+<p>Contents of the <tt class="FILENAME">.project</tt> file in the user's home
+directory</p>
+</li>
+</ul>
+
+<p>The first four items can be set with the <tt class="COMMAND">chfn</tt> command. It
+stores those values in the <tt class="FILENAME">/etc/passwd</tt> file. To change the
+information in your <tt class="FILENAME">.plan</tt> or <tt class="FILENAME">.project</tt>
+file, just edit them with your favorite text editor. They must reside in your home
+directory and must be called <tt class="FILENAME">.plan</tt> and <tt
+class="FILENAME">.project</tt>.</p>
+
+<p>Many users <tt class="COMMAND">finger</tt> their own account from a remote machine to
+quickly see if they have new email. Or, you can see a user's plan or current project.</p>
+
+<p>Like many commands, <tt class="COMMAND">finger</tt> has options. Check the man page
+for more information on what special options you can use.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-TELNET"
+name="BASIC-NETWORK-COMMANDS-TELNET">13.5 <tt class="COMMAND">telnet</tt></a></h2>
+
+<p>Someone once stated that <tt class="COMMAND">telnet</tt>(1) was the coolest thing he
+had ever seen on computers. The ability to remotely log in and do stuff on another
+computer is what separates Unix and Unix-like operating systems from other operating
+systems.</p>
+
+<p><tt class="COMMAND">telnet</tt> allows you to log in to a computer, just as if you
+were sitting at the terminal. Once your username and password are verified, you are given
+a shell prompt. From here, you can do anything requiring a text console. Compose email,
+read newsgroups, move files around, and so on. If you are running X and you <tt
+class="COMMAND">telnet</tt> to another machine, you can run X programs on the remote
+computer and display them on yours.</p>
+
+<p>To login to a remote machine, use this syntax:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">telnet &lt;<var
+class="REPLACEABLE">hostname</var>&gt;</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If the host responds, you will receive a login prompt. Give it your username and
+password. That's it. You are now at a shell. To quit your telnet session, use either the
+<tt class="COMMAND">exit</tt> command or the <tt class="COMMAND">logout</tt> command.</p>
+
+<div class="WARNING">
+<table class="WARNING" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/warning.png"
+hspace="5" alt="Warning" /></td>
+<td align="LEFT" valign="TOP">
+<p><tt class="COMMAND">telnet</tt> does not encrypt the information it sends. Everything
+is sent in plain text, even passwords. It is not advisable to use <tt
+class="COMMAND">telnet</tt> over the Internet. Instead, consider the <tt
+class="COMMAND">Secure Shell</tt>. It encrypts all traffic and is available for free.</p>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4593" name="AEN4593">13.5.1 The other use of telnet</a></h3>
+
+<p>Now that we have convinced you not to use the telnet protocol anymore to log into a
+remote machine, we'll show you a couple of useful ways to use <tt
+class="COMMAND">telnet</tt>.</p>
+
+<p>You can also use the <tt class="COMMAND">telnet</tt> command to connect to a host on a
+certain port.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">telnet &lt;<var
+class="REPLACEABLE">hostname</var>&gt; [port]</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This can be quite handy when you quickly need to test a certain service, and you need
+full control over the commands, and you need to see what exactly is going on. You can
+interactively test or use an SMTP server, a POP3 server, an HTTP server, etc. this
+way.</p>
+
+<p>In the next figure you'll see how you can <tt class="COMMAND">telnet</tt> to a HTTP
+server on port 80, and get some basic information from it.</p>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-TELNET-WEB"
+name="FIG-BASIC-NETWORK-COMMANDS-TELNET-WEB"></a>
+<p><b>Figure 13-1. Telnetting to a webserver</b></p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">telnet store.slackware.com 80</kbd>
+Trying 69.50.233.153...
+Connected to store.slackware.com.
+Escape character is '^]'.
+HEAD / HTTP/1.0
+
+HTTP/1.1 200 OK
+Date: Mon, 25 Apr 2005 20:47:01 GMT
+Server: Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d
+Last-Modified: Fri, 18 Apr 2003 10:58:54 GMT
+ETag: "193424-c0-3e9fda6e"
+Accept-Ranges: bytes
+Content-Length: 192
+Connection: close
+Content-Type: text/html
+
+Connection closed by foreign host.
+<samp class="PROMPT">%</samp>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<p>You can do the same for other plain-text protocols, as long as you know what port to
+connect to, and what the commands are.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-SSH"
+name="BASIC-NETWORK-COMMANDS-SSH">13.6 The Secure shell</a></h2>
+
+<p>Today, secure shell basks in the adoration that <tt class="COMMAND">telnet</tt> once
+enjoyed. <tt class="COMMAND">ssh</tt>(1) allows one to make a connection to a remote
+machine and execute programs as if one were physically present; however, <tt
+class="COMMAND">ssh</tt> encrypts all the data travelling between the two computers so
+even if others intercept the conversation, they are unable to understand it. A typical
+secure shell connection follows.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">ssh carrier.lizella.net -l alan</kbd>
+The authenticity of host 'carrier.lizella.net (192.168.1.253)' can't be
+established.
+RSA key fingerprint is 0b:e2:5d:43:4c:39:4f:8c:b9:85:db:b2:fa:25:e9:9d.
+Are you sure you want to continue connecting (yes/no)? yes
+Warning: Permanently added 'carrier.lizella.net' (RSA) to the list of
+known hosts.
+Password: <kbd class="USERINPUT">password</kbd>
+Last login: Sat Nov 6 16:32:19 2004 from 192.168.1.102
+Linux 2.4.26-smp.
+alan@carrier:~$ <kbd class="USERINPUT">ls -l MANIFEST</kbd>
+-rw-r--r-- 1 alan users 23545276 2004-10-28 20:04 MANIFEST
+alan@carrier:~$ <kbd class="USERINPUT">exit</kbd>
+logout
+Connection to carrier.lizella.net closed.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>There you see me making an ssh connection to <tt
+class="HOSTID">carrier.lizella.net</tt>, and checking the permissions on the <tt
+class="FILENAME">MANIFEST</tt> file.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-EMAIL"
+name="BASIC-NETWORK-COMMANDS-EMAIL">13.7 email</a></h2>
+
+<p>Electronic mail is one of the most popular things one can do on the Internet. In 1998,
+it was reported that more electronic mail was sent than regular mail. It is indeed common
+and useful.</p>
+
+<p>Under Slackware, we provide a standard mail server, and several mail clients. All of
+the clients discussed below are text-based. A lot of Windows users may be against this,
+but you will find that a text based client is very convenient, especially when checking
+mail remotely. Fear not, there are many graphical e-mail clients such as KDE's Kmail. If
+you wish to use one of those check its help menu.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BASIC-NETWORK-COMMANDS-EMAIL-PINE"
+name="BASIC-NETWORK-COMMANDS-EMAIL-PINE">13.7.1 <tt class="COMMAND">pine</tt></a></h3>
+
+<p><tt class="COMMAND">pine</tt>(1) is not <tt class="COMMAND">elm</tt>. Or so the saying
+goes. The University of Washington created their program for Internet news and email out
+of a need for an easy mail reader for their students. <tt class="COMMAND">pine</tt> is
+one of the most popular email clients in use today and is available for nearly every
+flavor of Unix and even Windows.</p>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-EMAIL-PINE"
+name="FIG-BASIC-NETWORK-COMMANDS-EMAIL-PINE"></a>
+<p><b>Figure 13-2. The Pine main menu</b></p>
+
+<p><img src="basic-network-commands/pine.png" /></p>
+</div>
+
+<p>You will see a menu of commands and a row of command keys at the bottom. <tt
+class="COMMAND">pine</tt> is indeed a complex program, so we will not discuss every
+feature about it here.</p>
+
+<p>To see what's in your inbox, type <kbd class="USERINPUT">i</kbd>. Your messages are
+listed with their date, author, and subject. Highlight the message you want and press
+<kbd class="USERINPUT">enter</kbd> to view it. Pressing <kbd class="USERINPUT">r</kbd>
+will start a reply to the message. Once you have written the response, type <b
+class="KEYCAP">Ctrl</b>+<b class="KEYCAP">X</b> to send it. You can press <kbd
+class="USERINPUT">i</kbd> to get back to the message listing.</p>
+
+<p>If you want to delete a message, press <kbd class="USERINPUT">d</kbd>. It will mark
+the highlighted message for deletion. <tt class="COMMAND">pine</tt> deletes the mail when
+you exit the program. <tt class="COMMAND">pine</tt> also lets you store your mail in
+folders. You can get a listing of folders by pressing <kbd class="USERINPUT">l</kbd>. At
+the message listing, press <kbd class="USERINPUT">s</kbd> to save it to another folder.
+It will ask for the folder name to write the message to.</p>
+
+<p><tt class="COMMAND">pine</tt> offers many, many features; you should definitely have a
+look at the man page for more information. It will contain the latest information about
+the program.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BASIC-NETWORK-COMMANDS-EMAIL-ELM"
+name="BASIC-NETWORK-COMMANDS-EMAIL-ELM">13.7.2 <tt class="COMMAND">elm</tt></a></h3>
+
+<p><tt class="COMMAND">elm</tt>(1) is another popular text-based email client. Though not
+quite as user friendly as <tt class="COMMAND">pine</tt>, it's definitely been around a
+lot longer.</p>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-EMAIL-ELM"
+name="FIG-BASIC-NETWORK-COMMANDS-EMAIL-ELM"></a>
+<p><b>Figure 13-3. Elm main screen</b></p>
+
+<p><img src="basic-network-commands/elm.png" /></p>
+</div>
+
+<p>By default, you are placed in your inbox. The messages are listed with the message
+number, date, sender, and subject. Use the arrow keys to highlight the message you want.
+Press <kbd class="USERINPUT">Enter</kbd> to read the message.</p>
+
+<p>To compose a new message, type <kbd class="USERINPUT">m</kbd> at the main screen. The
+<kbd class="USERINPUT">d</kbd> key will flag a message for deletion. And the <kbd
+class="USERINPUT">r</kbd> key will reply to the current message you are reading. All of
+these keys are displayed at the bottom of the screen with a prompt.</p>
+
+<p>The man page discusses <tt class="COMMAND">elm</tt> in more detail, so you will
+probably want to consult that before using <tt class="COMMAND">elm</tt>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BASIC-NETWORK-COMMANDS-EMAIL-MUTT"
+name="BASIC-NETWORK-COMMANDS-EMAIL-MUTT">13.7.3 <tt class="COMMAND">mutt</tt></a></h3>
+
+<p>&#8220;All mail clients suck. This one just sucks less.&#8221; <tt
+class="COMMAND">mutt</tt>'s original interface was based on <tt class="COMMAND">elm</tt>
+with added features found in other popular mailclients, resulting in a hybrid mutt.</p>
+
+<p>Some of <tt class="COMMAND">mutt</tt>'s features include:</p>
+
+<ul>
+<li>
+<p>color support</p>
+</li>
+
+<li>
+<p>message threading</p>
+</li>
+
+<li>
+<p>MIME and PGP/MIME support</p>
+</li>
+
+<li>
+<p>pop3 and imap support</p>
+</li>
+
+<li>
+<p>support for multiple mailbox formats (mbox, MMDF, MH, maildir)</p>
+</li>
+
+<li>
+<p><span class="emphasis"><i class="EMPHASIS">highly</i></span> customizable</p>
+</li>
+</ul>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-EMAIL-MUTT"
+name="FIG-BASIC-NETWORK-COMMANDS-EMAIL-MUTT"></a>
+<p><b>Figure 13-4. Mutt main screen</b></p>
+
+<p><img src="basic-network-commands/mutt.png" /></p>
+</div>
+
+<p>if you're looking for a mail client that will let you be in total control over
+everything, then you will like <tt class="COMMAND">mutt</tt>. all the default settings
+can be customized, keybindings can be changed. if you like to add a macro, you can.</p>
+
+<p>you probably want to take a look at the <tt class="FILENAME">muttrc</tt> manpage,
+which will tell you how to configure everything. or take a look at the included example
+<tt class="FILENAME">muttrc</tt> file.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BASIC-NETWORK-COMMANDS-EMAIL-NAIL"
+name="BASIC-NETWORK-COMMANDS-EMAIL-NAIL">13.7.4 <tt class="COMMAND">nail</tt></a></h3>
+
+<p><tt class="COMMAND">nail</tt>(1) is a command line driven mail client. It is very
+primitive and offers pretty much nothing in the way of user interfaces. However, mailx is
+handy for times when you need to quickly mail something, scripting a bulk mailer, testing
+your MTA installation or something similar. Note that Slackware creates symbolic links to
+<tt class="COMMAND">nail</tt> at <tt class="FILENAME">/usr/bin/mail</tt> and <tt
+class="FILENAME">/usr/bin/mailx</tt>. Any of these three commands executes the same
+program. In fact, you will most likely see <tt class="COMMAND">nail</tt> referred to as
+<tt class="COMMAND">mail</tt>.</p>
+
+<p>The basic command line is:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">mailx &lt;subject&gt; &lt;to-addr&gt;</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">mailx</tt> reads the message body from standard input. So you can
+cat a file into this command to mail it, or you can just type text and hit <b
+class="KEYCAP">Ctrl</b>+<b class="KEYCAP">D</b> when finished with the message.</p>
+
+<p>Here is an example of mailing a program source file to another person.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">cat randomfunc.c | mail -s "Here's that function" asdf@example.net</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The man page explains more of what <tt class="COMMAND">nail</tt> can do, so you will
+probably want to have a look at that before using it.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-WEB"
+name="BASIC-NETWORK-COMMANDS-WEB">13.8 Browsers</a></h2>
+
+<p>The first thing that people think about when they hear the word Internet is
+&#8220;surfing the net&#8221;. Or looking at websites using a web browser. This is
+probably by far the most popular use of the Internet for the average user.</p>
+
+<p>Slackware provides popular graphical web browsers in the &#8220;XAP&#8221; series, as
+well as text mode browsers in the &#8220;N&#8221; series. We'll take a quick look at some
+of the most common options below.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4776" name="AEN4776">13.8.1 <tt
+class="COMMAND">lynx</tt></a></h3>
+
+<p><tt class="COMMAND">lynx</tt>(1) is a text-based web browser. It is a very quick way
+of looking up something on the Internet. Sometimes graphics just get in the way if you
+know exactly what you're after.</p>
+
+<p>To start <tt class="COMMAND">lynx</tt>, just type <tt class="COMMAND">lynx</tt> at the
+prompt:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">lynx</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-WEB-LYNX"
+name="FIG-BASIC-NETWORK-COMMANDS-WEB-LYNX"></a>
+<p><b>Figure 13-5. Lynx default start page</b></p>
+
+<p><img src="basic-network-commands/lynx.png" /></p>
+</div>
+
+<p>You may want to specify a site for <tt class="COMMAND">lynx</tt> to open to:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">lynx http://www.slackware.com</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">lynx</tt> prints the command keys and what they do at the bottom
+of the screen. The up and down arrow keys move around the document, <kbd
+class="USERINPUT">Enter</kbd> selects the highlighted link, and the <kbd
+class="USERINPUT">left arrow</kbd> goes back to the previous page. Typing <kbd
+class="USERINPUT">d</kbd> will download the currently selected file. The <kbd
+class="USERINPUT">g</kbd> command brings up the Go prompt, where you can give <tt
+class="COMMAND">lynx</tt> a URL to open.</p>
+
+<p>There are many other commands in <tt class="COMMAND">lynx</tt>. You can either consult
+the man page, or type <kbd class="USERINPUT">h</kbd> to get the help screen for more
+information.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4813" name="AEN4813">13.8.2 <tt
+class="COMMAND">links</tt></a></h3>
+
+<p>Just like <tt class="COMMAND">lynx</tt>, <tt class="COMMAND">links</tt> is a textmode
+web browser, where you do all the navigation using the keyboard. However, when you press
+the <kbd class="USERINPUT">Esc</kbd> key, it will activate a very convenient pulldown
+menu on the top of the screen. This makes it very easy to use, without having to learn
+all the keyboard shortcuts. People who do not use a text browser every day will
+appreciate this feature.</p>
+
+<p><tt class="COMMAND">links</tt> seems to have better support for both frames and
+tables, when compared to <tt class="COMMAND">lynx</tt>.</p>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-WEB-LINKS"
+name="FIG-BASIC-NETWORK-COMMANDS-WEB-LINKS"></a>
+<p><b>Figure 13-6. Links, with the file menu open</b></p>
+
+<p><img src="basic-network-commands/links.png" /></p>
+</div>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4831" name="AEN4831">13.8.3 <tt
+class="COMMAND">wget</tt></a></h3>
+
+<p><tt class="COMMAND">wget</tt>(1) is a command line utility that will download files
+from a specified URL. While not an actual web-browser, <tt class="COMMAND">wget</tt> is
+used primarily to grab whole or partial web sites for offline viewing, or for fast
+download of single files from HTTP or FTP servers instead. The basic syntax is:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">wget &lt;url&gt;</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You can also pass options. For example, this will download the Slackware web site:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">wget --recursive http://www.slackware.com</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">wget</tt> will create a <tt
+class="FILENAME">www.slackware.com</tt> directory and store the files in there, just as
+the site does.</p>
+
+<p><tt class="COMMAND">wget</tt> can also download files from FTP sites; just specify an
+FTP URL instead of an HTTP one.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">wget ftp://ftp.gnu.org/gnu/wget/wget-1.8.2.tar.gz</kbd>
+--12:18:16-- ftp://ftp.gnu.org/gnu/wget/wget-1.8.2.tar.gz
+ =&#62; `wget-1.8.2.tar.gz'
+Resolving ftp.gnu.org... done.
+Connecting to ftp.gnu.org[199.232.41.7]:21... connected.
+Logging in as anonymous ... Logged in!
+==&#62; SYST ... done. ==&#62; PWD ... done.
+==&#62; TYPE I ... done. ==&#62; CWD /gnu/wget ... done.
+==&#62; PORT ... done. ==&#62; RETR wget-1.8.2.tar.gz ... done.
+Length: 1,154,648 (unauthoritative)
+
+100%[==================================&#62;] 1,154,648 209.55K/s ETA 00:00
+
+12:18:23 (209.55KB/s) - `wget-1.8.2.tar.gz' saved [1154648]
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">wget</tt> has many more options, which make it nice for site
+specific scripts (web site mirroring and so forth). The man page should be consulted for
+more information.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-FTP"
+name="BASIC-NETWORK-COMMANDS-FTP">13.9 FTP Clients</a></h2>
+
+<p>FTP stands for the File Transfer Protocol. It allows you to send and receive files
+between two computers. There is the FTP server and the FTP client. We discuss the client
+in this section.</p>
+
+<p>For the curious, the &#8220;client&#8221; is you. The &#8220;server&#8221; is the
+computer that answers your FTP request and lets you login. You will download files from
+and upload files to the server. The client cannot accept FTP connections, it can only
+connect to servers.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN4871" name="AEN4871">13.9.1 <tt
+class="COMMAND">ftp</tt></a></h3>
+
+<p>To connect to an FTP server, simply run the <tt class="COMMAND">ftp</tt>(1) command
+and specify the host:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">ftp &lt;hostname&gt; [port]</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If the host is running an FTP server, it will ask for a username and password. You can
+log in as yourself or as &#8220;anonymous&#8221;. Anonymous FTP sites are very popular
+for software archives. For example, to get Slackware Linux via FTP, you must use
+anonymous FTP.</p>
+
+<p>Once connected, you will be at the <var class="LITERAL">ftp&gt;</var> prompt. There
+are special commands for FTP, but they are similar to other standard commands. The
+following shows some of the basic commands and what they do:</p>
+
+<div class="TABLE"><a id="AEN4883" name="AEN4883"></a>
+<p><b>Table 13-1. <tt class="COMMAND">ftp</tt> commands</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col width="1*" />
+<col width="3*" />
+<thead>
+<tr>
+<th>Command</th>
+<th>Purpose</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td><tt class="COMMAND">ls</tt></td>
+<td>List files</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">cd &lt;dirname&gt;</tt></td>
+<td>Change directory</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">bin</tt></td>
+<td>Set binary transfer mode</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">ascii</tt></td>
+<td>Set ASCII transfer mode</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">get &lt;filename&gt;</tt></td>
+<td>Download a file</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">put &lt;filename&gt;</tt></td>
+<td>Upload a file</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">hash</tt></td>
+<td>Toggle hash mark stats indicator</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">tick</tt></td>
+<td>Toggle byte counter indicator</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">prom</tt></td>
+<td>Toggle interactive mode for downloads</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">mget &lt;mask&gt;</tt></td>
+<td>Download a file or group of files; wildcards are allowed</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">mput &lt;mask&gt;</tt></td>
+<td>Upload a file or group of files; wildcards are allowed</td>
+</tr>
+
+<tr>
+<td><tt class="COMMAND">quit</tt></td>
+<td>Log off the FTP server</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>You can also use some of the following commands which are quite self-explanatory: <tt
+class="COMMAND">chmod</tt>, <tt class="COMMAND">delete</tt>, <tt
+class="COMMAND">rename</tt>, <tt class="COMMAND">rmdir</tt>. For a complete list of all
+commands and their meaning, just type <kbd class="USERINPUT">help</kbd> or <kbd
+class="USERINPUT">?</kbd> and you'll see a complete listing on screen.</p>
+
+<p>FTP is a fairly simple program to use, but lacks the user interface that many of us
+are used to nowadays. The man page discusses some of the command line options for <tt
+class="COMMAND">ftp</tt>(1).</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+ftp&#62; <kbd class="USERINPUT">ls *.TXT</kbd>
+200 PORT command successful.
+150 Opening ASCII mode data connection for /bin/ls.
+-rw-r--r-- 1 root 100 18606 Apr 6 2002 BOOTING.TXT
+-rw-r--r-- 1 root 100 10518 Jun 13 2002 COPYRIGHT.TXT
+-rw-r--r-- 1 root 100 602 Apr 6 2002 CRYPTO_NOTICE.TXT
+-rw-r--r-- 1 root 100 32431 Sep 29 02:56 FAQ.TXT
+-rw-r--r-- 1 root 100 499784 Mar 3 19:29 FILELIST.TXT
+-rw-r--r-- 1 root 100 241099 Mar 3 19:12 PACKAGES.TXT
+-rw-r--r-- 1 root 100 12339 Jun 19 2002 README81.TXT
+-rw-r--r-- 1 root 100 14826 Jun 17 2002 SPEAKUP_DOCS.TXT
+-rw-r--r-- 1 root 100 15434 Jun 17 2002 SPEAK_INSTALL.TXT
+-rw-r--r-- 1 root 100 2876 Jun 17 2002 UPGRADE.TXT
+226 Transfer complete.
+ftp&#62; <kbd class="USERINPUT">tick</kbd>
+Tick counter printing on (10240 bytes/tick increment).
+ftp&#62; <kbd class="USERINPUT">get README81.TXT</kbd>
+local: README81.TXT remote: README81.TXT
+200 PORT command successful.
+150 Opening BINARY mode data connection for README81.TXT (12339 bytes).
+Bytes transferred: 12339
+226 Transfer complete.
+12339 bytes received in 0.208 secs (58 Kbytes/sec)
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="BASIC-NETWORK-COMMANDS-FTP-NCFTP"
+name="BASIC-NETWORK-COMMANDS-FTP-NCFTP">13.9.2 <tt class="COMMAND">ncftp</tt></a></h3>
+
+<p><tt class="COMMAND">ncftp</tt>(1) (pronounced "Nik-F-T-P") is an alternative to the
+traditional ftp client that comes with Slackware. It is still a text-based program, but
+offers many advantages over <tt class="COMMAND">ftp</tt>, including:</p>
+
+<ul>
+<li>
+<p>Tab completion</p>
+</li>
+
+<li>
+<p>Bookmarks file</p>
+</li>
+
+<li>
+<p>More liberal wildcard uses</p>
+</li>
+
+<li>
+<p>Command history</p>
+</li>
+</ul>
+
+<p>By default, <tt class="COMMAND">ncftp</tt> will try to log in anonymously to the
+server you specify. You can force <tt class="COMMAND">ncftp</tt> to present a login
+prompt with the &#8220;<var class="OPTION">-u</var>&#8221; option. Once logged in, you
+can use the same commands as in <tt class="COMMAND">ftp</tt>, only you'll notice a nicer
+interface, one that works more like <tt class="COMMAND">bash</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+ncftp /pub/linux/slackware &#62; <kbd class="USERINPUT">cd slackware-current/</kbd>
+Please read the file README81.TXT
+ it was last modified on Wed Jun 19 16:24:21 2002 - 258 days ago
+CWD command successful.
+ncftp ...ware/slackware-current &#62; <kbd class="USERINPUT">ls</kbd>
+BOOTING.TXT FAQ.TXT bootdisks/
+CHECKSUMS FILELIST.TXT extra/
+CHECKSUMS.asc GPG-KEY isolinux/
+CHECKSUMS.md5 PACKAGES.TXT kernels/
+CHECKSUMS.md5.asc PRERELEASE_NOTES pasture/
+COPYING README81.TXT rootdisks/
+COPYRIGHT.TXT SPEEKUP_DOCS.TXT slackware/
+CRYPTO_NOTICE.TXT SPEEK_INSTALL.TXT source/
+CURRENT.WARNING Slackware-HOWTO
+ChangeLog.txt UPGRADE.TXT
+ncftp ...ware/slackware-current &#62; <kbd class="USERINPUT">get README81.TXT</kbd>
+README81.TXT: 12.29 kB 307.07 kB/s
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="BASIC-NETWORK-COMMANDS-TALK"
+name="BASIC-NETWORK-COMMANDS-TALK">13.10 Talking to Other People</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="AEN4989" name="AEN4989">13.10.1 <tt
+class="COMMAND">wall</tt></a></h3>
+
+<p><tt class="COMMAND">wall</tt>(1) is a quick way to write a message to the users on a
+system. The basic syntax is:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">wall [file]</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will result in the contents of [file] being displayed on the terminals of all
+currently logged in users. If you don't specify a file, wall will read from standard
+input, so you can just type your message, and end with <b class="KEYCAP">Ctrl</b>+<b
+class="KEYCAP">d</b>.</p>
+
+<p><tt class="COMMAND">wall</tt> doesn't have many features, and apart from letting your
+users know that you're about to do some serious maintenance to the system, or even reboot
+it, so they have time to save their work and log off :)</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN5006" name="AEN5006">13.10.2 <tt
+class="COMMAND">talk</tt></a></h3>
+
+<p><tt class="COMMAND">talk</tt>(1) allows two users to chat. It splits the screen in
+half, horizontally. To request a chat with another user, use this command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">talk &lt;person&gt; [ttyname]</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-TALK-TALK"
+name="FIG-BASIC-NETWORK-COMMANDS-TALK-TALK"></a>
+<p><b>Figure 13-7. Two users in a <tt class="COMMAND">talk</tt> session</b></p>
+
+<p><img src="basic-network-commands/talk.png" /></p>
+</div>
+
+<p>If you specify just a username, the chat request is assumed to be local, so only local
+users are queried. The ttyname is required if you want to ring a user on a specific
+terminal (if the user is logged in more than once). The required information for <tt
+class="COMMAND">talk</tt> can be obtained from the <tt class="COMMAND">w</tt>(1)
+command.</p>
+
+<p><tt class="COMMAND">talk</tt> can also ring users on remote hosts. For the username
+you simply specify an email address. <tt class="COMMAND">talk</tt> will try to contact
+that remote user on that host.</p>
+
+<p><tt class="COMMAND">talk</tt> is somewhat limited. It only supports two users and is
+half-duplex.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN5033" name="AEN5033">13.10.3 <tt
+class="COMMAND">ytalk</tt></a></h3>
+
+<p><tt class="COMMAND">ytalk</tt>(1) is a backwards compatible replacement for <tt
+class="COMMAND">talk</tt>. It comes with Slackware as the <tt class="COMMAND">ytalk</tt>
+command. The syntax is similar, but has a few differences:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">ytalk &lt;username&gt;[#ttyname]</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<div class="FIGURE"><a id="FIG-BASIC-NETWORK-COMMANDS-TALK-YTALK"
+name="FIG-BASIC-NETWORK-COMMANDS-TALK-YTALK"></a>
+<p><b>Figure 13-8. Two users in a <tt class="COMMAND">ytalk</tt> session</b></p>
+
+<p><img src="basic-network-commands/ytalk.png" /></p>
+</div>
+
+<p>The username and terminal are specified the same as under talk, except you must put
+them together with the hash mark (#).</p>
+
+<p>ytalk offers several advantages:</p>
+
+<ul>
+<li>
+<p>It supports more than two users.</p>
+</li>
+
+<li>
+<p>A menu of options that can be brought up anytime with <kbd
+class="USERINPUT">Esc</kbd>.</p>
+</li>
+
+<li>
+<p>You can shell out while still in the talk session.</p>
+</li>
+
+<li>
+<p>Plus more...</p>
+</li>
+</ul>
+
+<p>If you're a server administrator, you'll want to make sure that the <tt
+class="COMMAND">ntalk</tt> port is enabled in <tt class="FILENAME">/etc/inetd.conf</tt>.
+<tt class="COMMAND">ytalk</tt> needs that to work properly.</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="SECURITY" name="SECURITY"></a>Chapter 14 Security</h1>
+
+<p>Security on any system is important; it can prevent people launching attacks from your
+machine, as well as protect sensitive data. This chapter is all about how to start
+securing your Slackware box against script kiddies, crackers and rogue hamsters alike.
+Bear in mind that this is only the start of securing a system; security is a process, not
+a state.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SECURITY-DISABLE" name="SECURITY-DISABLE">14.1 Disabling
+Services</a></h2>
+
+<p>The first step after installing Slackware should be to disable any services you don't
+need. Any services could potentially pose a security risk, so it is important to run as
+few services as possible (i.e. only those that are needed). Services are started from two
+main places - <tt class="COMMAND">inetd</tt> and init scripts.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN5081" name="AEN5081">14.1.1 Services started from <tt
+class="COMMAND">inetd</tt></a></h3>
+
+<p>A lot of the daemons that come with Slackware are run from <tt
+class="COMMAND">inetd</tt>(8). <tt class="COMMAND">inetd</tt> is a daemon that listens on
+all of the ports used by services configured to be started by it and spawns an instance
+of the relevant daemon when a connection attempt is made. Daemons started from <tt
+class="COMMAND">inetd</tt> can be disabled by commenting out the relevant lines in <tt
+class="FILENAME">/etc/inetd.conf</tt>. To do this, open this file in your favorite editor
+(e.g. <tt class="COMMAND">vi</tt>) and you should see lines similar to this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You can disable this service, and any others you don't need, by commenting them out
+(i.e. adding a <var class="LITERAL">#</var> (hash) symbol to the beginning of the line).
+The above line would then become:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
+</pre>
+</td>
+</tr>
+</table>
+
+<p>After <tt class="COMMAND">inetd</tt> has been restarted, this service will be
+disabled. You can restart <tt class="COMMAND">inetd</tt> with the command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">kill -HUP $(cat /var/run/inetd.pid)</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="AEN5102" name="AEN5102">14.1.2 Services started from init
+scripts</a></h3>
+
+<p>The rest of the services started when the machine starts are started from the init
+scripts in <tt class="FILENAME">/etc/rc.d/</tt>. These can be disabled in two different
+ways, the first being to remove the execute permissions on the relevant init script and
+the second being to comment out the relevant lines in the init scripts.</p>
+
+<p>For example, SSH is started by its own init script at <tt
+class="FILENAME">/etc/rc.d/rc.sshd</tt>. You can disable this using:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">chmod -x /etc/rc.d/rc.sshd</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>For services that don't have their own init script, you will need to comment out the
+relevant lines in the init scripts to disable them. For example, the portmap daemon is
+started by the following lines in <tt class="FILENAME">/etc/rc.d/rc.inet2</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# This must be running in order to mount NFS volumes.
+# Start the RPC portmapper:
+if [ -x /sbin/rpc.portmap ]; then
+ echo "Starting RPC portmapper: /sbin/rpc.portmap"
+ /sbin/rpc.portmap
+fi
+# Done starting the RPC portmapper.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This can be disabled by adding <var class="LITERAL">#</var> symbols to the beginnings
+of the lines that don't already start with them, like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+# This must be running in order to mount NFS volumes.
+# Start the RPC portmapper:
+#if [ -x /sbin/rpc.portmap ]; then
+# echo "Starting RPC portmapper: /sbin/rpc.portmap"
+# /sbin/rpc.portmap
+#fi
+# Done starting the RPC portmapper.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>These changes will only take effect after either a reboot or changing from and back to
+runlevel 3 or 4. You can do this by typing the following on the console (you will need to
+log in again after changing to runlevel 1):</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">telinit 1</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">telinit 3</kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SECURITY-HOST" name="SECURITY-HOST">14.2 Host Access
+Control</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="SECURITY-HOST-IPTABLES" name="SECURITY-HOST-IPTABLES">14.2.1 <tt
+class="COMMAND">iptables</tt></a></h3>
+
+<p><tt class="COMMAND">iptables</tt> is the packet filtering configuration program for
+Linux 2.4 and above. The 2.4 kernel (2.4.5, to be exact) was first introduced into
+Slackware (as an option) in version 8.0 and was made the default in Slackware 8.1. This
+section only covers the basics of its usage and you should check <a
+href="http://www.netfilter.org/" target="_top">http://www.netfilter.org/</a> for more
+details. These commands can be entered into <tt
+class="FILENAME">/etc/rc.d/rc.firewall</tt>, which has to be set as executable for these
+rules to take effect at startup. Note that incorrect <tt class="COMMAND">iptables</tt>
+commands can essentially lock you out of your own machine. Unless you are 100% confident
+in your skills, always ensure you have local access to the machine.</p>
+
+<p>The first thing most people should do is set the default policy for each inbound chain
+to DROP:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">iptables -P INPUT DROP</kbd>
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">iptables -P FORWARD DROP</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>When everything is denied, you can start allowing things. The first thing to allow is
+any traffic for sessions which are already established:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>So as not to break any applications that communicate using the loopback address, it is
+usually wise to add a rule like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This rules allows any traffic to and from 127.0.0.0/8 (127.0.0.0 - 127.255.255.255) on
+the loopback (<tt class="FILENAME">lo</tt>) interface. When creating rules, it is a good
+idea to be as specific as possible, to make sure that your rules do not inadvertently
+allow anything evil. That said, rules that allow too little mean more rules and more
+typing.</p>
+
+<p>The next thing to do would be to allow access to specific services running on your
+machine. If, for example, you wanted to run a web server on your machine, you would use a
+rule similar to this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">iptables -A INPUT -p tcp --dport 80 -i ppp0 -j ACCEPT</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will allow access from any machine to port 80 on your machine via the <tt
+class="FILENAME">ppp0</tt> interface. You may want to restrict access to this service so
+that only certain machines can access it. This rule allows access to your web service
+from <tt class="HOSTID">64.57.102.34</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">iptables -A INPUT -p tcp -s 64.57.102.34 --dport 80 -i ppp0 -j ACCEPT</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Allowing ICMP traffic can be useful for diagnostic purposes. To do this, you would use
+a rule like this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">iptables -A INPUT -p icmp -j ACCEPT</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Most people will also want to set up Network Address Translation (NAT) on their
+gateway machine, so that other machines on their network can access the Internet through
+it. You would use the following rule to do this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You will also need to enable IP forwarding. You can do this temporarily, using the
+following command:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">echo 1 &#62; /proc/sys/net/ipv4/ip_forward</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>To enable IP forwarding on a more permanent basis (i.e. so that the change is kept
+after a reboot), you will need to open the file <tt
+class="FILENAME">/etc/rc.d/rc.inet2</tt> in your favorite editor and change the following
+line:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+IPV4_FORWARD=0
+</pre>
+</td>
+</tr>
+</table>
+
+<p>...to this:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+IPV4_FORWARD=1
+</pre>
+</td>
+</tr>
+</table>
+
+<p>For more information on NAT, see the <a
+href="http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt" target="_top">NAT
+HOWTO</a>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SECURITY-HOST-TCPWRAPPERS"
+name="SECURITY-HOST-TCPWRAPPERS">14.2.2 <tt class="COMMAND">tcpwrappers</tt></a></h3>
+
+<p><tt class="COMMAND">tcpwrappers</tt> controls access to daemons at the application
+level, rather than at the IP level. This can provide an extra layer of security at times
+when IP-level access controls (e.g. Netfilter) are not functioning correctly. For
+example, if you recompile the kernel but forget to include iptables support, your IP
+level protection will fail but tcpwrappers will still help protect your system.</p>
+
+<p>Access to services protected by tcpwrappers can be controlled using <tt
+class="FILENAME">/etc/hosts.allow</tt> and <tt class="FILENAME">/etc/hosts.deny</tt>.</p>
+
+<p>The majority of people would have a single line in their <tt
+class="FILENAME">/etc/hosts.deny</tt> file to deny access to all daemons by default. This
+line would be:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ALL : ALL
+</pre>
+</td>
+</tr>
+</table>
+
+<p>When this is done, you can concentrate on allowing access to services for specified
+hosts, domains, or IP ranges. This can be done in the <tt
+class="FILENAME">/etc/hosts.allow</tt> file, which follows the same format.</p>
+
+<p>A lot of people would start by accepting all connections from <tt
+class="HOSTID">localhost</tt>. This can be achieved using:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ALL : 127.0.0.1
+</pre>
+</td>
+</tr>
+</table>
+
+<p>To allow access to SSHd from <tt class="HOSTID">192.168.0.0/24</tt>, you could use
+either of the following rules:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+sshd : 192.168.0.0/24
+sshd : 192.168.0.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>It is also possible to restrict access to hosts in certain domains. This can be done
+using the following rule (note that this relies on the reverse DNS entry for the
+connecting host being trustworthy, so I would recommand against its use on
+Internet-connected hosts):</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+sshd : .slackware.com
+</pre>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="SECURITY-CURRENT" name="SECURITY-CURRENT">14.3 Keeping
+Current</a></h2>
+
+<div class="SECT2">
+<h3 class="SECT2"><a id="SECURITY-CURRENT-LIST" name="SECURITY-CURRENT-LIST">14.3.1 <var
+class="LITERAL">slackware-security</var> mailing list</a></h3>
+
+<p>Whenever a security problem affects Slackware, an email is sent to all subscribers to
+the <var class="LITERAL">slackware-security@slackware.com</var> mailing list. Reports are
+sent out for vulnerabilities of any part of Slackware, apart from the software in <tt
+class="FILENAME">/extra</tt> or <tt class="FILENAME">/pasture</tt>. These security
+announcement emails include details on obtaining updated versions of Slackware packages
+or work-arounds, if any.</p>
+
+<p>Subscribing to Slackware mailing lists is covered in <a
+href="#HELP-ONLINE-EMAIL">Section 2.2.2</a>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="SECURITY-CURRENT-PATCHES" name="SECURITY-CURRENT-PATCHES">14.3.2
+The <tt class="FILENAME">/patches</tt> directory</a></h3>
+
+<p>Whenever updated packages are released for a version of Slackware (usually only to fix
+a security problem, in the case of already released Slackware versions), they are placed
+in the <tt class="FILENAME">/patches</tt> directory. The full path to these patches will
+depend on the mirror you are using, but will take the form <tt
+class="FILENAME">/path/to/slackware-x.x/patches/</tt>.</p>
+
+<p>Before installing these packages, it is a good idea to verify the <tt
+class="COMMAND">md5sum</tt> of the package. <tt class="COMMAND">md5sum</tt>(1) is a
+commandline utility that creates a &#8220;unique&#8221; mathematical hash of the file. If
+a single bit of the file has been changed, it will generate a different md5sum value.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">md5sum package-&lt;ver&gt;-&lt;arch&gt;-&lt;rev&gt;.tgz</kbd>
+6341417aa1c025448b53073a1f1d287d package-&lt;ver&gt;-&lt;arch&gt;-&lt;rev&gt;.tgz
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You should then check this against the line for the new package in the <tt
+class="FILENAME">CHECKSUMS.md5</tt> file in the root of the <tt
+class="FILENAME">slackware-<var class="REPLACEABLE">$VERSION</var></tt> directory (also
+in the <tt class="FILENAME">/patches</tt> directory for patches) or in the email to the
+<var class="LITERAL">slackware-security</var> mailing list.</p>
+
+<p>If you have a file with the md5sum values in it, you can source it instead with the
+<var class="OPTION">-c</var> option to <tt class="COMMAND">md5sum</tt>.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">md5sum -c CHECKSUMS.md5</kbd>
+./ANNOUNCE.10_0: OK
+./BOOTING.TXT: OK
+./COPYING: OK
+./COPYRIGHT.TXT: OK
+./CRYPTO_NOTICE.TXT: OK
+./ChangeLog.txt: OK
+./FAQ.TXT: FAILED
+</pre>
+</td>
+</tr>
+</table>
+
+<p>As you can see, any files that <tt class="COMMAND">md5sum</tt> evaluates as correct
+are listed &#8220;<var class="LITERAL">OK</var>&#8221; while files that fail are labelled
+&#8220;<var class="LITERAL">FAILED</var>&#8221;. (Yes, this was an insult to your
+intelligence. Why do you put up with me?)</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="ARCHIVE-FILES" name="ARCHIVE-FILES"></a>Chapter 15 Archive Files</h1>
+
+<div class="SECT1">
+<h2 class="SECT1"><a id="ARCHIVE-FILES-GZIP" name="ARCHIVE-FILES-GZIP">15.1 <tt
+class="COMMAND">gzip</tt></a></h2>
+
+<p><tt class="COMMAND">gzip</tt>(1) is the GNU compression program. It takes a single
+file and compresses it. The basic usage is as follows:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">gzip <var
+class="REPLACEABLE">filename</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The resulting file will be named <tt class="FILENAME"><var
+class="REPLACEABLE">filename</var>.gz</tt> and will usually be smaller than the input
+file. Note that <tt class="FILENAME">filename.gz</tt> will replace <tt
+class="FILENAME">filename</tt>. This means that <tt class="FILENAME">filename</tt> will
+no longer exist, even though a gzipped copy will. Regular text files will compress
+nicely, while jpeg images, mp3s, and other such files will not compress too well as they
+are already compressed. This basic usage is a balance of final file size and compression
+time. The maximum compression can be achieved like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">gzip -9 <var
+class="REPLACEABLE">filename</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will take a longer time to compress the file, but the result will be as small as
+<tt class="COMMAND">gzip</tt> can make it. Using lower values for the command line option
+will cause it to compress faster, but the file will not be as compressed.</p>
+
+<p>Decompressing gzipped files can be done using two commands, which are really just the
+same program. <tt class="COMMAND">gzip</tt> will decompress any file with a recognized
+file extension. A recognized extension can be any of the following: <tt
+class="FILENAME">.gz</tt>, <tt class="FILENAME">-gz</tt>, <tt class="FILENAME">.z</tt>,
+<tt class="FILENAME">-z</tt>, <tt class="FILENAME">.Z</tt>, or <tt
+class="FILENAME">-Z</tt>. The first method is to call <tt class="COMMAND">gunzip</tt>(1)
+on a file, like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">gunzip <var
+class="REPLACEABLE">filename.gz</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will leave a decompressed version of infile in the current directory, and the <tt
+class="FILENAME">.gz</tt> extension will be stripped from the filename. <tt
+class="COMMAND">gunzip</tt> is really part of <tt class="COMMAND">gzip</tt> and is
+identical to <tt class="COMMAND">gzip -d</tt>. As such, <tt class="COMMAND">gzip</tt> is
+often pronounced <tt class="COMMAND">gunzip</tt>, as that name just sounds cooler.
+:^)</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ARCHIVE-FILES-BZIP2" name="ARCHIVE-FILES-BZIP2">15.2 <tt
+class="COMMAND">bzip2</tt></a></h2>
+
+<p><tt class="COMMAND">bzip2</tt>(1) is an alternative compression program installed on
+Slackware Linux. It uses a different compression algorithm from <tt
+class="COMMAND">gzip</tt>, which results in some advantages and some disadvantages. The
+main advantage for <tt class="COMMAND">bzip2</tt> is the compressed file size. <tt
+class="COMMAND">bzip2</tt> will almost always compress better than <tt
+class="COMMAND">gzip</tt>. In some instances, this can result in dramatically smaller
+files. This can be a great advantage for people on slower modem connections. Also
+remember, when downloading software from a public ftp server, it's generally good
+netiquette to download the <tt class="FILENAME">.bz2</tt> files instead of the <tt
+class="FILENAME">.gz</tt> files, as this results in less overhead for the generous people
+hosting the server.</p>
+
+<p>The disadvantage to <tt class="COMMAND">bzip2</tt> is that it is more CPU intensive
+than <tt class="COMMAND">gzip</tt>. This means that bzipping a file will generally take
+longer and will use more of the CPU than gzipping the file would. When considering which
+compression program to use, you must weigh this speed vs. compressed size and determine
+which is more important.</p>
+
+<p>The usage of <tt class="COMMAND">bzip2</tt> is nearly identical to <tt
+class="COMMAND">gzip</tt>, so not much time will be spent discussing it. Like <tt
+class="COMMAND">gunzip</tt>, <tt class="COMMAND">bunzip2</tt> is identical to <tt
+class="COMMAND">bzip2 -d</tt>. The primary difference in practical usage is that <tt
+class="COMMAND">bzip2</tt> uses the <tt class="FILENAME">.bz2</tt> extension.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">bzip2 <var
+class="REPLACEABLE">filename</var></kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">bunzip2 <var
+class="REPLACEABLE">filename.bz2</var></kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">bzip2 -9 <var
+class="REPLACEABLE">filename</var></kbd>
+</pre>
+</td>
+</tr>
+</table>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ARCHIVE-FILES-TAR" name="ARCHIVE-FILES-TAR">15.3 <tt
+class="COMMAND">tar</tt></a></h2>
+
+<p><tt class="COMMAND">tar</tt>(1) is the GNU tape archiver. It takes several files or
+directories and creates one large file. This allows you to compress an entire directory
+tree, which is impossible by just using <tt class="COMMAND">gzip</tt> or <tt
+class="COMMAND">bzip2</tt>. <tt class="COMMAND">tar</tt> has many command line options,
+which are explained in its man page. This section will just cover the most common uses of
+<tt class="COMMAND">tar</tt>.</p>
+
+<p>The most common use for <tt class="COMMAND">tar</tt> is to decompress and unarchive a
+package that you've downloaded from a web site or ftp site. Most files will come with a
+<tt class="FILENAME">.tar.gz</tt> extension. This is commonly known as a
+&#8220;tarball&#8221;. It means that several files were archived using <tt
+class="COMMAND">tar</tt> and then compressed using <tt class="COMMAND">gzip</tt>. You
+might also see this listed as a <tt class="FILENAME">.tar.Z</tt> file. It means the same
+thing, but this is usually encountered on older Unix systems.</p>
+
+<p>Alternatively, you might find a <tt class="FILENAME">.tar.bz2</tt> file somewhere.
+Kernel source is distributed as such because it is a smaller download. As you might have
+guessed, this is several files archived with <tt class="COMMAND">tar</tt> and then
+bzipped.</p>
+
+<p>You can get to all the files in this archive by making use of <tt
+class="COMMAND">tar</tt> and some command line arguments. Unarchiving a tarball makes use
+of the <var class="OPTION">-z</var> flag, which means to first run the file through <tt
+class="COMMAND">gunzip</tt> and decompress it. The most common way to decompress a
+tarball is like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">tar -xvzf filename.tar.gz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That's quite a few options. So what do they all mean? The <var class="OPTION">-x</var>
+means to extract. This is important, as it tells <tt class="COMMAND">tar</tt> exactly
+what to do with the input file. In this case, we'll be splitting it back up into all the
+files that it came from. <var class="OPTION">-v</var> means to be verbose. This will list
+all the files that are being unarchived. It is perfectly acceptable to leave this option
+off, if somewhat boring. Alternatively, you could use <var class="OPTION">-vv</var> to be
+very verbose and list even more information about each file being unarchived. The <var
+class="OPTION">-z</var> option tells <tt class="COMMAND">tar</tt> to run <tt
+class="FILENAME">filename.tar.gz</tt> through <tt class="COMMAND">gunzip</tt> first. And
+finally, the <var class="OPTION">-f</var> option tells <tt class="COMMAND">tar</tt> that
+the next string on the command line is the file to operate on.</p>
+
+<p>There are a few other ways to write this same command. On older systems lacking a
+decent copy of GNU <tt class="COMMAND">tar</tt>, you might see it written like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">gunzip filename.tar.gz | tar -xvf -</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This command line will uncompress the file and send the output to <tt
+class="COMMAND">tar</tt>. Since <tt class="COMMAND">gzip</tt> will write its output to
+standard out if told to do so, this command will write the decompressed file to standard
+out. The pipe then sends it to <tt class="COMMAND">tar</tt> for unarchiving. The
+&#8220;-&#8221; means to operate on standard input. It will unarchive the stream of data
+that it gets from <tt class="COMMAND">gzip</tt> and write that to the disk.</p>
+
+<p>Another way to write the first command line is to leave off the dash before the
+options, like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">tar xvzf filename.tar.gz</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>You might also encounter a bzipped archive. The version of <tt
+class="COMMAND">tar</tt> that comes with Slackware Linux can handle these the same as
+gzipped archives. Instead of the <var class="OPTION">-z</var> command line option, you'd
+use <var class="OPTION">-j</var>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">tar -xvjf filename.tar.bz2</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>It is important to note that <tt class="COMMAND">tar</tt> will place the unarchived
+files in the current directory. So, if you had an archive in <tt
+class="FILENAME">/tmp</tt> that you wanted to decompress into your home directory, there
+are a few options. First, the archive could be moved into your home directory and then
+run through <tt class="COMMAND">tar</tt>. Second, you could specify the path to the
+archive file on the command line. Third, you can use the <var class="OPTION">-C</var>
+option to &#8220;explode&#8221; the tarball in a specified directory.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd $HOME</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cp /tmp/filename.tar.gz .</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">tar -xvzf filename.tar.gz</kbd>
+
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd $HOME</kbd>
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">tar -xvzf /tmp/filename.tar.gz</kbd>
+
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">cd /</kbd>
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">tar -xvzf /tmp/filename.tar.gz -C $HOME</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>All the above statements are equivalent. In each case, the archive is unpacked inside
+your home directory and the original uncompressed archive is left in place.</p>
+
+<p>So what good is being able to uncompress these archives if you can't make them? Well,
+<tt class="COMMAND">tar</tt> handles that too. In most cases it's as easy as removing the
+&#8220;<var class="OPTION">-x</var>&#8221; option and replacing it with the &#8220;<var
+class="OPTION">-c</var>&#8221; option.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">tar -cvzf filename.tar.gz .</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>In this command line, the <var class="OPTION">-c</var> option tells <tt
+class="COMMAND">tar</tt> to create an archive, while the <var class="OPTION">-z</var>
+option runs the resulting archive file through <tt class="COMMAND">gzip</tt> to compress
+it. <tt class="FILENAME">filename.tar.gz</tt> is the file that you want to create.</p>
+
+<p>Specifying the &#8220;<var class="OPTION">-f</var>&#8221; option isn't always
+necessary, but is typically good practice anyway. Without it, <tt
+class="COMMAND">tar</tt> writes to standard output, which is usually desired for piping
+<tt class="COMMAND">tar</tt>'s output to another program, like so.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">tar -cv filename.tar . | gpg --encrypt</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>That command creates an non-compressed tar archive of the current directory, pipes the
+tarball through <tt class="COMMAND">gpg</tt> which encrypts and compresses the tarball,
+making it realistically impossible to read by anyone other than the person knowing the
+secret key.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ARCHIVE-FILES-ZIP" name="ARCHIVE-FILES-ZIP">15.4 <tt
+class="COMMAND">zip</tt></a></h2>
+
+<p>Finally, there are two utilities that can be used on zip files. These are very common
+in the Windows world, so Linux has programs to deal with them. The compression program is
+called <tt class="COMMAND">zip</tt>(1), and the decompression program is called <tt
+class="COMMAND">unzip</tt>(1).</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">zip foo *</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will create the file <tt class="FILENAME">foo.zip</tt>, which will contain all
+the files in the current directory. <tt class="COMMAND">zip</tt> will add the <tt
+class="FILENAME">.zip</tt> extension automatically, so there's no need to include that in
+the file name. You can also recurse through the current directory, zipping up any
+directories that are also laying around:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">zip -r foo *</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Decompressing files is easy, as well.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">unzip foo.zip</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will extract all the files in the file <tt class="FILENAME">foo.zip</tt>,
+including any directories in the archive.</p>
+
+<p>The <tt class="COMMAND">zip</tt> utilities have several advanced options for creating
+self-extracting archives, leaving out files, controlling compressed file size, printing
+out what will happen, and much more. See the man pages for <tt class="COMMAND">zip</tt>
+and <tt class="COMMAND">unzip</tt> to find out how to use these options.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="VI" name="VI"></a>Chapter 16 Vi</h1>
+
+<p><tt class="COMMAND">vi</tt>(1) is the standard Unix text editing program, and while
+mastering it is not as essential as it once was, is still a very rewarding goal. There
+are several versions (or clones) of <tt class="COMMAND">vi</tt> available, including <tt
+class="COMMAND">vi</tt>, <tt class="COMMAND">elvis</tt>, <tt class="COMMAND">vile</tt>,
+and <tt class="COMMAND">vim</tt>. One of these is available on just about any version of
+Unix, as well as on Linux. All of these versions include the same basic feature set and
+commands, so learning one clone should make it easy to learn another. With the variety of
+text editors included with Linux distributions and Unix variants these days, many people
+no longer use <tt class="COMMAND">vi</tt>. Still, it remains the most universal text
+editor across Unix and Unix work-alikes. Mastering <tt class="COMMAND">vi</tt> means you
+should never be sitting at a Unix machine and not be comfortable with at least one
+powerful text editor.</p>
+
+<p><tt class="COMMAND">vi</tt> includes a number of powerful features including syntax
+highlighting, code formatting, a powerful search-and-replace mechanism, macros, and more.
+These features make it especially attractive to programmers, web developers, and the
+like. System administrators will appreciate the automation and integration with the shell
+that is possible.</p>
+
+<p>On Slackware Linux, the default version of <tt class="COMMAND">vi</tt> available is
+<tt class="COMMAND">elvis</tt>. Other versions - including <tt class="COMMAND">vim</tt>
+and <tt class="COMMAND">gvim</tt> - are available if you've installed the proper
+packages. <tt class="COMMAND">gvim</tt> is an X Window version of <tt
+class="COMMAND">vim</tt> that includes toolbars, detachable menus, and dialog boxes.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-STARTING" name="VI-STARTING">16.1 Starting vi</a></h2>
+
+<p><tt class="COMMAND">vi</tt> can be started from the command line in a variety of ways.
+The simplest form is just:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">vi</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<div class="FIGURE"><a id="FIG-VI-VIM-SPLITEDIT" name="FIG-VI-VIM-SPLITEDIT"></a>
+<p><b>Figure 16-1. A vi session.</b></p>
+
+<p><img src="vi/vim-splitedit.png" /></p>
+</div>
+
+<p>This will start up <tt class="COMMAND">vi</tt> with an empty buffer. At this point,
+you'll see a mostly blank screen. It is now in &#8220;command mode&#8221;, waiting for
+you to do something. For a discussion of the various <tt class="COMMAND">vi</tt> modes,
+see the <a href="#VI-MODES">Section 16.2</a>. In order to quit out of <tt
+class="COMMAND">vi</tt>, type the following:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">:q</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Assuming that there have been no changes to the file, this will cause <tt
+class="COMMAND">vi</tt> to quit. If there have been changes made, it will warn you that
+there have been changes and tell you how to disregard them. Disregarding changes usually
+means appending an exclamation point after the &#8220;<b class="KEYCAP">q</b>&#8221; like
+so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">:q!</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The exclamation point usually means to force some action. We'll discuss it and other
+key combinations in further details later.</p>
+
+<p>You can also start <tt class="COMMAND">vi</tt> with a pre-existing file. For example,
+the file <tt class="FILENAME">/etc/resolv.conf</tt> would be opened like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">vi /etc/resolv.conf</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Finally, <tt class="COMMAND">vi</tt> can be started on a particular line of a file.
+This is especially useful for programmers when an error message includes the line their
+program bombed on. For example, you could start up <tt class="COMMAND">vi</tt> on line 47
+of <tt class="FILENAME">/usr/src/linux/init/main.c</tt> like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd
+class="USERINPUT">vi +47 /usr/src/linux/init/main.c</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">vi</tt> will display the given file and will place the cursor at
+the specified line. In the case where you specify a line that is after the end of the
+file, <tt class="COMMAND">vi</tt> will place the cursor on the last line. This is
+especially helpful for programmers, as they can jump straight to the location in the file
+that an error occurred, without having to search for it.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-MODES" name="VI-MODES">16.2 Modes</a></h2>
+
+<p><tt class="COMMAND">vi</tt> operates in various modes, which are used to accomplish
+various tasks. When you first start <tt class="COMMAND">vi</tt>, you are placed into
+command mode. From this point, you can issue various commands to manipulate text, move
+around in the file, save, quit, and change modes. Editing the text is done in insert
+mode. You can quickly move between modes with a variety of keystrokes, which are
+explained below.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="VI-MODES-COMMAND-MODE" name="VI-MODES-COMMAND-MODE">16.2.1
+Command Mode</a></h3>
+
+<p>You are first placed into command mode. From this mode, you cannot directly enter text
+or edit what is already there. However, you can manipulate the text, search, quit, save,
+load new files, and more. This is intended only to be an introduction to the command
+mode. For a description of the various commands, see <a href="#VI-KEYS">Section
+16.7</a>.</p>
+
+<p>Probably the most often used command in command mode is changing to insert mode. This
+is accomplished by hitting the <b class="KEYCAP">i</b> key. The cursor changes shapes,
+and <span class="emphasis"><i class="EMPHASIS">-- INSERT --</i></span> is displayed at
+the bottom of the screen (note that this does not happen in all clones of <tt
+class="COMMAND">vi</tt>). From there, all your keystrokes are entered into the current
+buffer and are displayed to the screen. To get back into command mode, hit the <b
+class="KEYCAP">ESCAPE</b> key.</p>
+
+<p>Command mode is also where you move around in the file. On some systems, you can use
+the arrow keys to move around. On other systems, you may need to use the more traditional
+keys of &#8220;<b class="KEYCAP">hjkl</b>&#8221;. Here is a simple listing of how these
+keys are used to move around:</p>
+
+<div class="INFORMALTABLE"><a id="AEN5604" name="AEN5604"></a>
+<table border="0" frame="void" width="100%" class="CALSTABLE">
+<col width="25%" />
+<col width="75%" />
+<tbody>
+<tr>
+<td><b class="KEYCAP">h</b></td>
+<td>move left one character</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">j</b></td>
+<td>move down one character</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">k</b></td>
+<td>move up one character</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">l</b></td>
+<td>move right one character</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>Simply press a key to move. As you will see later, these keys can be combined with a
+number to move much more efficiently.</p>
+
+<p>Many of the commands that you will use in command mode begin with a colon. For
+example, quitting is <b class="KEYCAP">:q</b>, as discussed earlier. The colon simply
+indicates that it is a command, while the &#8220;<b class="KEYCAP">q</b>&#8221; tells <tt
+class="COMMAND">vi</tt> to quit. Other commands are an optional number, followed by a
+letter. These commands do not have a colon before them, and are generally used to
+manipulate the text.</p>
+
+<p>For example, deleting one line from a file is accomplished by hitting <b
+class="KEYCAP">dd</b>. This will remove the line that the cursor is on. Issuing the
+command <b class="KEYCAP">4dd</b> would tell <tt class="COMMAND">vi</tt> to remove the
+line that the cursor is on and the three after that. In general, the number tells <tt
+class="COMMAND">vi</tt> how many times to perform the command.</p>
+
+<p>You can combine a number with the movement keys to move around several characters at a
+time. For example, <b class="KEYCAP">10k</b> would move up ten lines on the screen.</p>
+
+<p>Command mode can also be used to cut and paste, insert text, and read other files into
+the current buffer. Copying text is accomplished with the <b class="KEYCAP">y</b> key (<b
+class="KEYCAP">y</b> stands for yank). Copying the current line is done by typing <b
+class="KEYCAP">yy</b>, and this can be prefixed with a number to yank more lines. Then,
+move to the location for the copy and hit <b class="KEYCAP">p</b>. The text is pasted on
+the line after the current one.</p>
+
+<p>Cutting text is done by typing <b class="KEYCAP">dd</b>, and <b class="KEYCAP">p</b>
+can be used to paste the cut text back into the file. Reading in text from another file
+is a simple procedure. Just type <b class="KEYCAP">:r</b>, followed by a space and the
+file name that contains the text to be inserted. The file's contents will be pasted into
+the current buffer on the line after the cursor. More sophisticated <tt
+class="COMMAND">vi</tt> clones even contain filename completion similar to the
+shell's.</p>
+
+<p>The final use that will be covered is searching. Command mode allows for simple
+searching, as well as complicated search-and-replace commands that make use of a powerful
+version of regular expressions. A complete discussion of regular expressions is beyond
+the scope of this chapter, so this section will only cover simple means of searching.</p>
+
+<p>A simple search is accomplished by hitting the <b class="KEYCAP">/</b> key, followed
+by the text that you are searching for. <tt class="COMMAND">vi</tt> will search forward
+from the cursor to the end of the file for a match, stopping when it finds one. Note that
+inexact matches will cause <tt class="COMMAND">vi</tt> to stop as well. For example, a
+search for &#8220;<span class="emphasis"><i class="EMPHASIS">the</i></span>&#8221; will
+cause <tt class="COMMAND">vi</tt> to stop on &#8220;<span class="emphasis"><i
+class="EMPHASIS">then</i></span>&#8221;, &#8220;<span class="emphasis"><i
+class="EMPHASIS">therefore</i></span>&#8221;, and so on. This is because all of those
+words do match &#8220;<span class="emphasis"><i
+class="EMPHASIS">the</i></span>&#8221;.</p>
+
+<p>After <tt class="COMMAND">vi</tt> has found the first match, you can continue on to
+the next match simply by hitting the <b class="KEYCAP">/</b> key followed by enter. You
+can also search backwards through the file by replacing the slash with the <b
+class="KEYCAP">?</b> key. For example, searching backwards through the file for
+&#8220;<span class="emphasis"><i class="EMPHASIS">the</i></span>&#8221; would be
+accomplished by typing <b class="KEYCAP">?the</b>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="VI-MODES-INSET-MODE" name="VI-MODES-INSET-MODE">16.2.2 Insert
+Mode</a></h3>
+
+<p>Inserting and replacing text is accomplished in insert mode. As previously discussed,
+you can get into insert mode by hitting <b class="KEYCAP">i</b> from command mode. Then,
+all text that you type is entered into the current buffer. Hitting the <b
+class="KEYCAP">ESCAPE</b> key takes you back into command mode.</p>
+
+<p>Replacing text is accomplished in several ways. From command mode, hitting <b
+class="KEYCAP">r</b> will allow you to replace the one character underneath the cursor.
+Just type the new character and it will replace the one under the cursor. You will then
+be immediately placed back into command mode. Hitting <b class="KEYCAP">R</b> allows you
+to replace as many characters as you'd like. To get out of this replacement mode, just
+hit <b class="KEYCAP">ESCAPE</b> to go back into command mode.</p>
+
+<p>There is yet another way to toggle between insertion and replacement. Hitting the <b
+class="KEYCAP">INSERT</b> key from command mode will take you into insert mode. Once you
+are in insert mode, the keyboard's <b class="KEYCAP">INSERT</b> key serves as a toggle
+between insert and replace. Hitting it once will allow you to replace. Hitting it once
+more will once again allow you to insert text.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-OPENING-FILES" name="VI-OPENING-FILES">16.3 Opening
+Files</a></h2>
+
+<p><tt class="COMMAND">vi</tt> allows you to open files from command mode as well as
+specifying a file on the command line to open. To open the file <tt
+class="FILENAME">/etc/lilo.conf</tt>:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">:e /etc/lilo.conf</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>If you have made changes to the current buffer without saving, <tt
+class="COMMAND">vi</tt> will complain. You can still open the file without saving the
+current buffer by typing <b class="KEYCAP">:e!</b>, followed by a space and the filename.
+In general, <tt class="COMMAND">vi</tt>'s warnings can be suppressed by following the
+command with an exclamation mark.</p>
+
+<p>If you want to reopen the current file, you can do so simply by typing <b
+class="KEYCAP">e!</b>. This is particularly useful if you have somehow messed up the file
+and want to reopen it.</p>
+
+<p>Some <tt class="COMMAND">vi</tt> clones (for example, <tt class="COMMAND">vim</tt>)
+allow for multiple buffers to be open at the same time. For example, to open up the file
+<tt class="FILENAME">09-vi.sgml</tt> in my home directory while another file was open, I
+would type:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">:split ~/09-vi.sgml</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The new file is displayed on the top half of the screen, and the old file is displayed
+in the bottom half of the screen. There are a lot of commands that manipulate the split
+screen, and many of these commands start to resemble something out of <tt
+class="COMMAND">Emacs</tt> The best place to look up these commands would be the man page
+for your vi clone. Note that many clones do not support the split-screen idea, so you
+might not be able to use it at all.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-SAVING-FILES" name="VI-SAVING-FILES">16.4 Saving
+Files</a></h2>
+
+<p>There are several ways to save files in <tt class="COMMAND">vi</tt>. If you want to
+save the current buffer to the file <tt class="FILENAME">randomness</tt>, you would
+type:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">:w randomness</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Once you've saved the file once, saving it again is as simple as typing <b
+class="KEYCAP">:w</b>. Any changes will be written out to the file. After you've saved
+the file, you are dumped back into command mode. If you want to save the file and quit
+<tt class="COMMAND">vi</tt> (a very common operation), you would type <b
+class="KEYCAP">:wq</b>. That tells <tt class="COMMAND">vi</tt> to save the current file
+and quit back to the shell.</p>
+
+<p>On occasion, you want to save a file that is marked as read-only. You can do this by
+adding an exclamation point after the write command, like so:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">:w!</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>However, there will still be instances where you cannot write the file (for example,
+you are attempting to edit a file that is owned by another user). When this happens, <tt
+class="COMMAND">vi</tt> will tell you that it cannot save the file. If you really want to
+edit the file, you'll have to come back and edit it as <tt class="USERNAME">root</tt> or
+(preferably) the owner of that file.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-QUITTING-VI" name="VI-QUITTING-VI">16.5 Quitting vi</a></h2>
+
+<p>One way to quit <tt class="COMMAND">vi</tt> is through <b class="KEYCAP">:wq</b>,
+which will save the current buffer before quitting. You can also quit without saving with
+<b class="KEYCAP">:q</b> or (more commonly) <b class="KEYCAP">:q!</b>. The latter is used
+when you've modified the file but do not wish to save any changes to it.</p>
+
+<p>On occasion, your machine might crash or <tt class="COMMAND">vi</tt> might crash.
+However, both <tt class="COMMAND">elvis</tt> and <tt class="COMMAND">vim</tt> will take
+steps to minimize the damage to any open buffers. Both editors save the open buffers to a
+temporary file on occasion. This file is usually named similarly to the open file, but
+with a dot at the beginning. This makes the file hidden.</p>
+
+<p>This temporary file gets removed once the editor quits under normal conditions. This
+means that the temporary copy will still be around if something crashes. When you go back
+to edit the file again, you will be prompted for what action to take. In most cases, a
+large amount of your unsaved work can be recovered. <tt class="COMMAND">elvis</tt> will
+also send you a mail (from Graceland, oddly enough :) telling you that a backup copy
+exists.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-CONFIGURATION" name="VI-CONFIGURATION">16.6 vi
+Configuration</a></h2>
+
+<p>Your <tt class="COMMAND">vi</tt> clone of choice can be configured in several
+ways.</p>
+
+<p>A variety of commands can be entered while in command mode to set up <tt
+class="COMMAND">vi</tt> just how you like it. Depending on your editor, you can enable
+features to make programming easier (like syntax hilighting, auto-indenting, and more),
+set up macros to automake tasks, enable textual substitutions, and more.</p>
+
+<p>Almost all of these commands can be put into a configuration file in your home
+directory. <tt class="COMMAND">elvis</tt> expects a <tt class="FILENAME">.exrc</tt> file,
+while <tt class="COMMAND">vim</tt> expects a <tt class="FILENAME">.vimrc</tt> file. Most
+of the setup commands that can be entered in command mode can be placed in the
+configuration file. This includes setup information, textual substitutions, macros, and
+more.</p>
+
+<p>Discussing all these options and the differences between the editors is quite an
+involved subject. For more information, check out the man page or web site for your
+preferred <tt class="COMMAND">vi</tt> editor. Some editors (like <tt
+class="COMMAND">vim</tt>) have extensive help within the editor that can be accessed with
+the <b class="KEYCAP">:help</b> command, or something similar. You can also check out the
+O'Reilly book <i class="CITETITLE">Learning the <tt class="COMMAND">vi</tt> Editor</i> by
+Lamb and Robbins.</p>
+
+<p>Many common programs in Linux will load up a text file in <tt class="COMMAND">vi</tt>
+by default. For example, editing your crontabs will start up <tt class="COMMAND">vi</tt>
+by default. If you do not like <tt class="COMMAND">vi</tt> and would like another editor
+to be started instead, all you need to do is set the <tt class="ENVAR">VISUAL</tt>
+environment variable to the editor you prefer. For information on setting environment
+variables, see the section called Environment Variables in Chapter 8. If you want to make
+sure that your editor will be the default every time you login, add the VISUAL setting to
+your <tt class="FILENAME">.bash_profile</tt> or <tt class="FILENAME">.bashrc</tt>
+files.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="VI-KEYS" name="VI-KEYS">16.7 Vi Keys</a></h2>
+
+<p>This section is a quick reference of many common <tt class="COMMAND">vi</tt> commands.
+Some of these were discussed earlier in the chapter, while many will be new.</p>
+
+<div class="TABLE"><a id="AEN5773" name="AEN5773"></a>
+<p><b>Table 16-1. Movement</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<col />
+<thead>
+<tr>
+<th align="CENTER">Operation</th>
+<th align="CENTER">Key</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>left, down, up, right</td>
+<td align="CENTER"><b class="KEYCAP">h</b>, <b class="KEYCAP">j</b>, <b
+class="KEYCAP">k</b>, <b class="KEYCAP">l</b></td>
+</tr>
+
+<tr>
+<td>To the end of the line</td>
+<td align="CENTER"><b class="KEYCAP">$</b></td>
+</tr>
+
+<tr>
+<td>To the beginning of the line</td>
+<td align="CENTER"><b class="KEYCAP">^</b></td>
+</tr>
+
+<tr>
+<td>To the end of the file</td>
+<td align="CENTER"><b class="KEYCAP">G</b></td>
+</tr>
+
+<tr>
+<td>To the beginning of the file</td>
+<td align="CENTER"><b class="KEYCAP">:1</b></td>
+</tr>
+
+<tr>
+<td>To line 47</td>
+<td align="CENTER"><b class="KEYCAP">:47</b></td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<div class="TABLE"><a id="AEN5808" name="AEN5808"></a>
+<p><b>Table 16-2. Editing</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<col />
+<thead>
+<tr>
+<th align="CENTER">Operation</th>
+<th align="CENTER">Key</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>Removing a line</td>
+<td align="CENTER"><b class="KEYCAP">dd</b></td>
+</tr>
+
+<tr>
+<td>Removing five lines</td>
+<td align="CENTER"><b class="KEYCAP">5dd</b></td>
+</tr>
+
+<tr>
+<td>Replacing a character</td>
+<td align="CENTER"><b class="KEYCAP">r</b></td>
+</tr>
+
+<tr>
+<td>Removing a character</td>
+<td align="CENTER"><b class="KEYCAP">x</b></td>
+</tr>
+
+<tr>
+<td>Removing ten characters</td>
+<td align="CENTER"><b class="KEYCAP">10x</b></td>
+</tr>
+
+<tr>
+<td>Undo last action</td>
+<td align="CENTER"><b class="KEYCAP">u</b></td>
+</tr>
+
+<tr>
+<td>Join current and next lines</td>
+<td align="CENTER"><b class="KEYCAP">J</b></td>
+</tr>
+
+<tr>
+<td>Replace old with new, globally</td>
+<td align="CENTER"><b class="KEYCAP">%s'old'new'g</b></td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<div class="TABLE"><a id="AEN5848" name="AEN5848"></a>
+<p><b>Table 16-3. Searching</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<col />
+<thead>
+<tr>
+<th align="CENTER">Operation</th>
+<th align="CENTER">Key</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>Search for &#8220;asdf&#8221;</td>
+<td align="CENTER"><b class="KEYCAP">/asdf</b></td>
+</tr>
+
+<tr>
+<td>Search backwards for &#8220;asdf&#8221;</td>
+<td align="CENTER"><b class="KEYCAP">?asdf</b></td>
+</tr>
+
+<tr>
+<td>Repeat last search forwards</td>
+<td align="CENTER"><b class="KEYCAP">/</b></td>
+</tr>
+
+<tr>
+<td>Repeat last search backwards</td>
+<td align="CENTER"><b class="KEYCAP">?</b></td>
+</tr>
+
+<tr>
+<td>Repeat last search, same direction</td>
+<td align="CENTER"><b class="KEYCAP">n</b></td>
+</tr>
+
+<tr>
+<td>Repeat last search, opposite direction</td>
+<td align="CENTER"><b class="KEYCAP">N</b></td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<div class="TABLE"><a id="AEN5882" name="AEN5882"></a>
+<p><b>Table 16-4. Saving and Quitting</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col />
+<col />
+<thead>
+<tr>
+<th align="CENTER">Operation</th>
+<th align="CENTER">Key</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>Quit</td>
+<td align="CENTER"><b class="KEYCAP">:q</b></td>
+</tr>
+
+<tr>
+<td>Quit without saving</td>
+<td align="CENTER"><b class="KEYCAP">:q!</b></td>
+</tr>
+
+<tr>
+<td>Write and quit</td>
+<td align="CENTER"><b class="KEYCAP">:wq</b></td>
+</tr>
+
+<tr>
+<td>Write, without quitting</td>
+<td align="CENTER"><b class="KEYCAP">:w</b></td>
+</tr>
+
+<tr>
+<td>Reload currently open file</td>
+<td align="CENTER"><b class="KEYCAP">:e!</b></td>
+</tr>
+
+<tr>
+<td>Write buffer to file <tt class="FILENAME">asdf</tt></td>
+<td align="CENTER"><b class="KEYCAP">:w asdf</b></td>
+</tr>
+
+<tr>
+<td>Open file <tt class="FILENAME">hejaz</tt></td>
+<td align="CENTER"><b class="KEYCAP">:e hejaz</b></td>
+</tr>
+
+<tr>
+<td>Read file <tt class="FILENAME">asdf</tt> into buffer</td>
+<td align="CENTER"><b class="KEYCAP">:r asdf</b></td>
+</tr>
+
+<tr>
+<td>Read output of <tt class="COMMAND">ls</tt> into buffer</td>
+<td align="CENTER"><b class="KEYCAP">:r !ls</b></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="EMACS" name="EMACS"></a>Chapter 17 Emacs</h1>
+
+<p>While <tt class="COMMAND">vi</tt> (with its clones) is without a doubt the most
+ubiquitous editor on Unix-like systems, Emacs comes in a good second. Instead of using
+different &#8220;modes&#8221;, like <tt class="COMMAND">vi</tt> does, it uses <b
+class="KEYCAP">Control</b> and <b class="KEYCAP">Alt</b> key combinations to enter
+commands, in much the same way that you can use <b class="KEYCAP">Control</b> and <b
+class="KEYCAP">Alt</b> key combinations in a word processor and indeed in many other
+applications to execute certain functions. (Though it should be noted that the commands
+rarely correspond; so while many modern applications use <b class="KEYCAP">Ctrl</b>-<b
+class="KEYCAP">C</b>/ <b class="KEYCAP">X</b>/ <b class="KEYCAP">V</b> for copying,
+cutting and pasting, Emacs uses different keys and actually a somewhat different
+mechanism for this.)</p>
+
+<p>Also unlike <tt class="COMMAND">vi</tt>, which is an (excellent) editor and nothing
+more, Emacs is a program with near endless capabilities. Emacs is (for the most part)
+written in Lisp, which is a very powerful programming language that has the peculiar
+property that every program written in it is automatically a Lisp compiler of its own.
+This means that the user can extend Emacs, and in fact write completely new programs
+&#8220;in Emacs&#8221;.</p>
+
+<p>As a result, Emacs is not just an editor anymore. There are many add-on packages for
+Emacs available (many come with the program's source) that provide all sorts of
+functionality. Many of these are related to text editing, which is after all Emacs' basic
+task, but it doesn't stop there. There are for example several spreadsheet programs for
+Emacs, there are databases, games, mail and news clients (the top one being Gnus),
+etc.</p>
+
+<p>There are two main versions of Emacs: GNU Emacs (which is the version that comes with
+Slackware) and XEmacs. The latter is <span class="emphasis"><i
+class="EMPHASIS">not</i></span> a version for Emacs running under X. In fact, both Emacs
+and XEmacs run on the console as well as under X. XEmacs was once started as a project to
+tidy up the Emacs code. Currently, both versions are being actively developed, and there
+is in fact much interaction between the two development teams. For the present chapter,
+it is immaterial whether you use Emacs or XEmacs, the differences between them are not
+relevant to the normal user.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="EMACS-STARTING" name="EMACS-STARTING">17.1 Starting
+emacs</a></h2>
+
+<p>Emacs can be started from the shell by simply typing <tt class="COMMAND">emacs</tt>.
+When you are running X, Emacs will (normally) come up with its own X window, usually with
+a menu bar at the top, where you can find the most important functions. On startup, Emacs
+will first show a welcome message, and then after a few seconds will drop you in the
+*scratch* buffer. (See <a href="#EMACS-BUFFERS">Section 17.2</a>.)</p>
+
+<div class="INFORMALFIGURE"><a id="AEN5971" name="AEN5971"></a>
+<p><img src="emacs/emacs.png" /></p>
+</div>
+
+<p>You can also start Emacs on an existing file by typing</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">%</samp> <kbd class="USERINPUT">emacs /etc/resolv.conf</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This will cause Emacs to load the specified file when it starts up, skipping the
+welcome message.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="EMACS-COMMAND-KEYS" name="EMACS-COMMAND-KEYS">17.1.1 Command
+Keys</a></h3>
+
+<p>As mentioned above, Emacs uses <b class="KEYCAP">Control</b> and <b
+class="KEYCAP">Alt</b> combinations for commands. The usual convention is to write these
+with <b class="KEYCAP">C</b>-<b class="KEYCAP">letter</b> and <b class="KEYCAP">M</b>-<b
+class="KEYCAP">letter</b>, respectively. So <b class="KEYCAP">C</b>-<b
+class="KEYCAP">x</b> means <b class="KEYCAP">Control</b>+<b class="KEYCAP">x</b>, and <b
+class="KEYCAP">M</b>-<b class="KEYCAP">x</b> means <b class="KEYCAP">Alt</b>+<b
+class="KEYCAP">x</b>. (The letter <b class="KEYCAP">M</b> is used instead of A because
+originally the key was not the <b class="KEYCAP">Alt</b> key but the <b
+class="KEYCAP">Meta</b> key. The <b class="KEYCAP">Meta</b> key has all but disappeared
+from computer keyboards, and in Emacs the <b class="KEYCAP">Alt</b> key has taken over
+its function.)</p>
+
+<p>Many Emacs commands consist of sequences of keys and key combinations. For example, <b
+class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b class="KEYCAP">C</b>-<b
+class="KEYCAP">c</b> (that is <b class="KEYCAP">Control</b>-<b class="KEYCAP">x</b>
+followed by <b class="KEYCAP">Control</b>-<b class="KEYCAP">c</b> ) quits Emacs, <b
+class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b class="KEYCAP">C</b>-<b
+class="KEYCAP">s</b> saves the current file. Keep in mind that <b class="KEYCAP">C</b>-<b
+class="KEYCAP">x</b> <b class="KEYCAP">C</b>-<b class="KEYCAP">b</b> is <span
+class="emphasis"><i class="EMPHASIS">not</i></span> the same as <b
+class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b class="KEYCAP">b</b>. The former means <b
+class="KEYCAP">Control</b>-<b class="KEYCAP">x</b> followed by <b
+class="KEYCAP">Control</b>-<b class="KEYCAP">b</b>, while the latter means <b
+class="KEYCAP">Control</b>-<b class="KEYCAP">x</b> followed by just '<b
+class="KEYCAP">b</b>'.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="EMACS-BUFFERS" name="EMACS-BUFFERS">17.2 Buffers</a></h2>
+
+<p>In Emacs, the concept of &#8220;buffers&#8221; is essential. Every file that you open
+is loaded into its own buffer. Furthermore, Emacs has several special buffers, which do
+not contain a file but are used for other things. Such special buffers usually have a
+name that starts and ends with an asterisk. For example, the buffer that Emacs shows when
+it is first started, is the so-called *scratch* buffer. In the *scratch* buffer, you can
+type text in the normal way, but text that is typed there is not saved when Emacs is
+closed.</p>
+
+<p>There is one other special buffer you need to know about, and that is the minibuffer.
+This buffer consists of only one line, and is always on the screen: it is the very last
+line of the Emacs window, below the status bar for the current buffer. The minibuffer is
+where Emacs shows messages for the user, and it is also the place where commands that
+require some user input are executed. For example, when you open a file, Emacs will ask
+for its name in the minibuffer.</p>
+
+<p>Switching from one buffer to another can be done with the command <b
+class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b class="KEYCAP">b</b>. This will prompt
+you for the name of a buffer (a buffer's name is usually the name of the file you are
+editing in it), and it gives a default choice, which is normally the buffer that you were
+in before you switched to or created the current buffer. Just hitting <span
+class="emphasis"><i class="EMPHASIS">Enter</i></span> will switch to that default
+buffer.</p>
+
+<p>If you want to switch to another buffer than the default offered by Emacs, just type
+its name. Note that you can use so-called <b class="KEYCAP">Tab</b>-completion here: type
+the first few letters of the buffer's name and hit <b class="KEYCAP">Tab</b>; Emacs will
+then complete the name of the buffer. <b class="KEYCAP">Tab</b> completion works
+everywhere in Emacs where it makes sense.</p>
+
+<p>You can get a list of open buffers by hitting <b class="KEYCAP">C</b>-<b
+class="KEYCAP">x</b> <b class="KEYCAP">C</b>-<b class="KEYCAP">b</b>. This command will
+usually split the screen in two, displaying the buffer you were working in in the top
+half, and a new buffer called *Buffer List* in the bottom half. This buffer contains a
+list of all the buffers, their sizes and modes, and the files, if any, that those buffers
+are visiting (as it is called in Emacs). You can get rid of this split screen by typing
+<b class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b class="KEYCAP">1</b>.</p>
+
+<div class="NOTE">
+<table class="NOTE" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/note.png"
+hspace="5" alt="Note" /></td>
+<td align="LEFT" valign="TOP">
+<p>Under X, the list of buffers is also available in the Buffer menu in the menu bar.</p>
+</td>
+</tr>
+</table>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="EMACS-MODES" name="EMACS-MODES">17.3 Modes</a></h2>
+
+<p>Every buffer in Emacs has an associated mode. This mode is very different from the
+idea of modes in <tt class="COMMAND">vi</tt>: a mode tells you what kind of buffer you
+are in. For example, there is text-mode for normal text files, but there are also modes
+such as c-mode for editing C programs, sh-mode for editing shell scripts, latex-mode for
+editing <b class="APPLICATION">LaTeX</b> files, mail-mode for editing email and news
+messages, etc. A mode provides special customizations and functionality that is useful
+for the kind of file you are editing. It is even possible for a mode to redefine keys and
+key commands. For example, in Text mode, the Tab key simply jumps to the next tab stop,
+but in many programming language modes, the <b class="KEYCAP">Tab</b> key indents the
+current line according to the depth of the block that line is in.</p>
+
+<p>The modes mentioned above are called major modes. Each buffer has exactly one major
+mode. Additionally, a buffer can have one or more minor modes. A minor mode provides
+additional features that may be useful for certain editing tasks. For example, if you hit
+the <b class="KEYCAP">INSERT</b> key, you invoke overwrite-mode, which does what you'd
+expect. There is also an auto-fill-mode, which is handy in combination with text-mode or
+latex-mode: it causes each line that you type to be automatically wrapped once the line
+reaches a certain number of characters. Without auto-fill-mode, you have to type <b
+class="KEYCAP">M</b>-<b class="KEYCAP">q</b> to fill out a paragraph. (Which you can also
+use to reformat a paragraph after you've edited some text in it and it is no longer
+nicely filled out.)</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="EMACS-OPENING-FILES" name="EMACS-OPENING-FILES">17.3.1 Opening
+files</a></h3>
+
+<p>To open a file in Emacs, type</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">C-x C-f</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Emacs will ask you for the name of the file, filling in some default path for you
+(which is usually <tt class="FILENAME">~/</tt> ). After you type the filename (you can
+use <b class="KEYCAP">Tab</b> completion) and hit <b class="KEYCAP">ENTER</b> , Emacs
+will open the file in a new buffer and display that buffer on the screen.</p>
+
+<div class="NOTE">
+<table class="NOTE" width="100%" border="0">
+<tr>
+<td width="25" align="CENTER" valign="TOP"><img src="./imagelib/admon/note.png"
+hspace="5" alt="Note" /></td>
+<td align="LEFT" valign="TOP">
+<p>Emacs will automatically create a new buffer, it will not load the file into the
+current buffer.</p>
+</td>
+</tr>
+</table>
+</div>
+
+<p>In order to create a new file in emacs, you cannot just go typing right away. You
+first have to create a buffer for it, and come up with a filename. You do this by typing
+<b class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b class="KEYCAP">C</b>-<b
+class="KEYCAP">f</b> and typing a filename, just as if you were opening an existing file.
+Emacs will notice that the file you typed doesn't exist, and will create a new buffer and
+report &#8220;(New file)&#8221; in the minibuffer.</p>
+
+<p>When you type <b class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b
+class="KEYCAP">C</b>-<b class="KEYCAP">f</b> and then enter a directory name instead of a
+filename, Emacs will create a new buffer in which you will find a list of all the files
+in that directory. You can move the cursor to the file that you are looking for and type
+, and Emacs will open it. (There are in fact a lot more actions you can perform here,
+such as deleting, renaming and moving files, etc. Emacs is now in dired-mode, which is
+basically a simple file manager.)</p>
+
+<p>When you have typed <b class="KEYCAP">C</b>-<b class="KEYCAP">x</b> <b
+class="KEYCAP">C</b>-<b class="KEYCAP">f</b> and suddenly change your mind, you can type
+<b class="KEYCAP">C</b>-<b class="KEYCAP">g</b> to cancel the action. <b
+class="KEYCAP">C</b>-<b class="KEYCAP">g</b> works almost everywhere where you want to
+cancel an action or command that you've started but don't want to finish.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="EMACS-BASIC-EDITING" name="EMACS-BASIC-EDITING">17.4 Basic
+Editing</a></h2>
+
+<p>When you have opened a file, you can of course move around in it with the cursor. The
+<b class="KEYCAP">cursor keys</b> and <b class="KEYCAP">PgUp</b>, <b
+class="KEYCAP">PgDn</b> do what you'd expect. <b class="KEYCAP">Home</b> and <b
+class="KEYCAP">End</b> jump to the beginning and end of the line. (In older versions,
+they would actually jump to the beginning and end of the buffer.) However, there are also
+<b class="KEYCAP">Control</b> and <b class="KEYCAP">Meta</b> (<b class="KEYCAP">Alt</b>)
+key combos that move the cursor around. Because you do not need to move your hands to
+another part of the keyboard for these, they are much quicker once you get used to them.
+The most important such commands are listed in <a href="#TABLE-EMACS-BASIC-EDITING">Table
+17-1</a>.</p>
+
+<div class="TABLE"><a id="TABLE-EMACS-BASIC-EDITING"
+name="TABLE-EMACS-BASIC-EDITING"></a>
+<p><b>Table 17-1. Basic Emacs Editing Commands</b></p>
+
+<table border="0" frame="void" width="100%" class="CALSTABLE">
+<col width="25%" />
+<col width="75%" />
+<thead>
+<tr>
+<th>Command</th>
+<th>Result</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">b</b> </td>
+<td>go one character back</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">f</b> </td>
+<td>go one character forward</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">n</b> </td>
+<td>go one line down</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">p</b> </td>
+<td>go one line up</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">a</b> </td>
+<td>go to the beginning of the line</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">e</b> </td>
+<td>go to the end of the line</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">b</b> </td>
+<td>go one word back</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">f</b> </td>
+<td>go one word forward</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">}</b> </td>
+<td>go one paragraph forward</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">{</b> </td>
+<td>go one paragraph backward</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">a</b> </td>
+<td>go one sentence backward</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">e</b> </td>
+<td>go one sentence forward</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">d</b> </td>
+<td>delete the character under the cursor</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">d</b> </td>
+<td>delete until the end of the current word</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">v</b> </td>
+<td>go down one screen (i.e., PgDn)</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">v</b> </td>
+<td>go up one screen (i.e., PgUp)</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">&lt;</b> </td>
+<td>go to the beginning of the buffer</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">M</b>-<b class="KEYCAP">&gt;</b> </td>
+<td>go to the end of the buffer</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">_</b> </td>
+<td>undo the last change (can be repeated); note that you actually have to type <b
+class="KEYCAP">Shift</b>+<b class="KEYCAP">Control</b>+<b class="KEYCAP">hyphen</b> for
+this.</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">k</b> </td>
+<td>delete to end of line</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">s</b> </td>
+<td>forward search</td>
+</tr>
+
+<tr>
+<td><b class="KEYCAP">C</b>-<b class="KEYCAP">r</b> </td>
+<td>backward search</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>Note that many <b class="KEYCAP">Meta</b> commands are parallel to the <b
+class="KEYCAP">Control</b> commands except that they operate on larger units: while <b
+class="KEYCAP">C</b>-<b class="KEYCAP">f</b> goes forward one character, <b
+class="KEYCAP">M</b>-<b class="KEYCAP">f</b> goes forward an entire word, etc.</p>
+
+<p>Also note that <b class="KEYCAP">M</b>-<b class="KEYCAP">&lt;</b> and <b
+class="KEYCAP">M</b>-<b class="KEYCAP">&gt;</b> require you to type <b
+class="KEYCAP">Shift</b>+<b class="KEYCAP">Alt</b>+<b class="KEYCAP">comma</b> and <b
+class="KEYCAP">Shift</b>+<b class="KEYCAP">Alt</b>+<b class="KEYCAP">dot</b>
+respectively, since <b class="KEYCAP">&lt;</b> and <b class="KEYCAP">&gt;</b> are on <b
+class="KEYCAP">Shift</b>+<b class="KEYCAP">comma</b> and <b class="KEYCAP">Shift</b>+<b
+class="KEYCAP">dot</b>. (Unless of course you have a different keyboard layout from the
+standard US layout.)</p>
+
+<p>Note that <b class="KEYCAP">C</b>-<b class="KEYCAP">k</b> deletes (kills, as it is
+commonly called) all the text after the cursor to the end of the line, but doesn't delete
+the line itself (i.e., it doesn't delete the final newline). It only deletes the line if
+there was no text after the cursor. In other words, in order to delete a complete line,
+you have to put the cursor at the beginning of the line, and then hit <b
+class="KEYCAP">C</b>-<b class="KEYCAP">k</b> twice: once to delete the text on the line,
+once to delete the line itself.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="EMACS-SAVING-FILES" name="EMACS-SAVING-FILES">17.5 Saving
+Files</a></h2>
+
+<p>In order to save a file, you type</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">C-x C-s</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Emacs will not ask you for a filename, the buffer will just be saved to the file it
+was loaded from. If you want to save your text to another file, type</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">C-x C-w</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>When you save the file for the first time in this session, Emacs will normally save
+the old version of your file to a backup file, which has the same name appended with a
+tilde: so if you're editing a file &#8220;<tt class="FILENAME">cars.txt</tt>&#8221;,
+Emacs will create a backup &#8220;<tt class="FILENAME">cars.txt~</tt>&#8221;.</p>
+
+<p>This backup file is a copy of the file that you opened. While you are working, Emacs
+will also regularly create an auto-save copy of the work you are doing, to a file named
+with hash signs: <tt class="FILENAME">#cars.txt#</tt>. This backup is deleted when you
+save the file with C-x C-s.</p>
+
+<p>When you are done editing a file, you can kill the buffer that holds it by typing</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">C-x k</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Emacs will then ask you which buffer you want to kill, with the current buffer as
+default, which you can select by hitting <b class="KEYCAP">ENTER</b>. If you haven't
+saved your file yet, Emacs will ask you if you really want to kill the buffer.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="EMACS-QUITING" name="EMACS-QUITING">17.5.1 Quitting
+Emacs</a></h3>
+
+<p>When you are done with Emacs altogether, you can type</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<kbd class="USERINPUT">C-x C-c</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This quits Emacs. If you have any unsaved files, Emacs will tell you so, and ask if
+you want to save them each in turn. If you answer no to any of these, Emacs will ask for
+one final confirmation and then quit.</p>
+</div>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="PACKAGE-MANAGEMENT" name="PACKAGE-MANAGEMENT"></a>Chapter 18 Slackware Package
+Management</h1>
+
+<p>A software package is a bundle of related programs that are ready for you to install.
+When you download a source code archive, you have to configure, compile, and install it
+by hand. With a software package, this has already been done for you. All that you have
+to do is install the package. Another handy feature of using software packages is that it
+is very easy to remove and upgrade them, if you so desire. Slackware comes with programs
+for all your package management needs. You can install, remove, upgrade, make, and
+examine packages very easily.</p>
+
+<p>There's a myth that's been going around ever since RedHat debuted RedHat Package
+Manager, that Slackware has no package management tool. This simply couldn't be further
+from the truth. Slackware has always included a package manager, even before RedHat
+existed. While not as full-featured or as ubiquitous as rpm (or for that matter deb), <tt
+class="COMMAND">pkgtool</tt> and its associated programs are every bit as good at
+installing packages as rpm. The truth about <tt class="COMMAND">pkgtool</tt> is not that
+it doesn't exist, but that it doesn't do any dependency checking.</p>
+
+<p>Apparently many people in the Linux community think that a packager manager must by
+definition include dependency checking. Well, that simply isn't the case, as Slackware
+most certainly does not. This is not to say that Slackware packages don't have
+dependencies, but rather that its package manager doesn't check for them. Dependency
+management is left up to the sysadmin, and that's the way we like it.</p>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PACKAGE-MANAGEMENT-OVERVIEW"
+name="PACKAGE-MANAGEMENT-OVERVIEW">18.1 Overview of Package Format</a></h2>
+
+<p>Before learning the utilities, you should become familiar with the format of a
+Slackware package. In Slackware, a package is simply a tar archive file that has been
+compressed with <tt class="COMMAND">gzip</tt>. Packages are built to be extracted in the
+root directory.</p>
+
+<p>Here is a fictitious program and its example package:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+./
+usr/
+usr/bin/
+usr/bin/makehejaz
+usr/doc/
+usr/doc/makehejaz-1.0/
+usr/doc/makehejaz-1.0/COPYING
+usr/doc/makehejaz-1.0/README
+usr/man/
+usr/man/man1
+usr/man/man1/makehejaz.1.gz
+install/
+install/doinst.sh
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The package system will extract this file in the root directory to install it. An
+entry in the package database will be created that contains the contents of this package
+so that it can be upgraded or removed later.</p>
+
+<p>Notice the <tt class="FILENAME">install/</tt> subdirectory. This is a special
+directory that can contain a postinstallation script called <tt
+class="FILENAME">doinst.sh</tt>. If the package system finds this file, it will execute
+it after installing the package.</p>
+
+<p>Other scripts can be embedded in the package, but those are discussed more in detail
+in <a href="#PACKAGE-MANAGEMENT-MAKEPKG">Section 18.3.2</a> below.</p>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES"
+name="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES">18.2 Package Utilities</a></h2>
+
+<p>There are four main utilities for package management. They perform installation,
+removal, and upgrades of packages.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-PKGTOOL"
+name="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-PKGTOOL">18.2.1 pkgtool</a></h3>
+
+<p><tt class="COMMAND">pkgtool</tt>(8) is a menu-driven program that allows installation
+and removal of packages. The main menu is shown in <a href="#PKGTOOL-MAIN-MENU">Figure
+18-1</a>.</p>
+
+<div class="FIGURE"><a id="PKGTOOL-MAIN-MENU" name="PKGTOOL-MAIN-MENU"></a>
+<p><b>Figure 18-1. Pkgtool's main menu.</b></p>
+
+<p><img src="package-management/pkgtool-w.png" /></p>
+</div>
+
+<p>Installation is offered from the current directory, another directory, or from floppy
+disks. Simply select the installation method you want and pkgtool will search that
+location for valid packages to install.</p>
+
+<p>You may also view a list of installed packages, as shown in <a
+href="#PKGTOOL-VIEW-MODE">Figure 18-2</a>.</p>
+
+<div class="FIGURE"><a id="PKGTOOL-VIEW-MODE" name="PKGTOOL-VIEW-MODE"></a>
+<p><b>Figure 18-2. Pkgtool view mode</b></p>
+
+<p><img src="package-management/pkgtool-view-w.png" /></p>
+</div>
+
+<p>If you want to remove packages, select the remove option and you will be presented
+with a checklist of all the installed packages. Flag the ones you want to remove and
+select OK. <tt class="COMMAND">pkgtool</tt> will remove them.</p>
+
+<p>Some users prefer this utility to the command line utilities. However, it should be
+noted that the command line utilities offer many more options. Also, the ability to
+upgrade packages is only offered through the command line utilities.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-INSTALLPKG"
+name="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-INSTALLPKG">18.2.2 installpkg</a></h3>
+
+<p><tt class="COMMAND">installpkg</tt>(8) handles installation of new packages on the
+system. The syntax is as follows:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">installpkg option package_name</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Three options are provided for <tt class="COMMAND">installpkg</tt>. Only one option
+can be used at a time.</p>
+
+<div class="TABLE"><a id="AEN6446" name="AEN6446"></a>
+<p><b>Table 18-1. <tt class="COMMAND">installpkg</tt> Options</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col width="1*" />
+<col width="3*" />
+<thead>
+<tr>
+<th align="LEFT">Option</th>
+<th align="LEFT">Effects</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>-m</td>
+<td>Performs a makepkg operation on the current directory.</td>
+</tr>
+
+<tr>
+<td>-warn</td>
+<td>Shows what would happen if you installed the specified package. This is useful for
+production systems so you can see exactly what would happen before installing
+something.</td>
+</tr>
+
+<tr>
+<td>-r</td>
+<td>Recursively install all packages in the current directory and down. The package name
+can use wildcards, which would be used as the search mask when recursively
+installing.</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>If you pass the <tt class="ENVAR">ROOT</tt> environment variable before <tt
+class="COMMAND">installpkg</tt>, that path will be used for the root directory. This is
+useful for setting up new drives for your root directory. They will typically be mounted
+to <tt class="FILENAME">/mnt</tt> or something other than <tt
+class="FILENAME">/</tt>.</p>
+
+<p>The installed package database entry is stored in <tt
+class="FILENAME">/var/log/packages</tt>. The entry is really just a plain text file, one
+for each package. If the package has a postinstallation script, it is written to <tt
+class="FILENAME">/var/log/scripts/</tt>.</p>
+
+<p>You may specify several packages or use wildcards for the package name. Be advised
+that <tt class="COMMAND">installpkg</tt> will not tell you if you are overwriting an
+installed package. It will simply install right on top of the old one. If you want to
+ensure that old files from the previous package are safely removed, use <tt
+class="COMMAND">upgradepkg</tt>.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-REMOVEPKG"
+name="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-REMOVEPKG">18.2.3 removepkg</a></h3>
+
+<p><tt class="COMMAND">removepkg</tt>(8) handles removing installed packages from the
+system. The syntax is as follows:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">removepkg option package_name</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Four options are provided for <tt class="COMMAND">removepkg</tt>. Only one option may
+be used at a time.</p>
+
+<div class="TABLE"><a id="AEN6491" name="AEN6491"></a>
+<p><b>Table 18-2. <tt class="COMMAND">removepkg</tt> Options</b></p>
+
+<table border="0" frame="void" class="CALSTABLE">
+<col width="1*" />
+<col width="3*" />
+<thead>
+<tr>
+<th>Option</th>
+<th>Effects</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>-copy</td>
+<td>The package is copied to the preserved packages directory. This creates a tree of the
+original package without removing it.</td>
+</tr>
+
+<tr>
+<td>-keep</td>
+<td>Saves temporary files created during the removal. Really only useful for debugging
+purposes.</td>
+</tr>
+
+<tr>
+<td>-preserve</td>
+<td>The package is removed, but copied to the preserved packages directory at the same
+time.</td>
+</tr>
+
+<tr>
+<td>-warn</td>
+<td>Shows what would happen if you removed the package.</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>If you pass the <tt class="ENVAR">ROOT</tt> environment variable before <tt
+class="COMMAND">removepkg</tt>, that path will be used for the root directory. This is
+useful for setting up new drives for your root directory. They will typically be mounted
+to <tt class="FILENAME">/mnt</tt> or something other than <tt
+class="FILENAME">/</tt>.</p>
+
+<p><tt class="COMMAND">removepkg</tt> looks at the other installed packages and only
+removes files unique to the package you specify. It will also scan the postinstallation
+script for the specified package and remove any symbolic links that were created by
+it.</p>
+
+<p>During the removal process, a status report is displayed. After the removal, the
+package database entry is moved to <tt class="FILENAME">/var/log/removed_packages</tt>
+and the postinstallation script is moved to <tt
+class="FILENAME">/var/log/removed</tt>_scripts.</p>
+
+<p>Just as with <tt class="COMMAND">installpkg</tt>, you can specify several packages or
+use wildcards for the package name.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-UPGRADEPKG"
+name="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-UPGRADEPKG">18.2.4 upgradepkg</a></h3>
+
+<p><tt class="COMMAND">upgradepkg</tt>(8) will upgrade an installed Slackware package.
+The syntax is as follows:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd class="USERINPUT">upgradepkg package_name</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p>or</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+<samp class="PROMPT">#</samp> <kbd
+class="USERINPUT">upgradepkg old_package_name%new_package_name</kbd>
+</pre>
+</td>
+</tr>
+</table>
+
+<p><tt class="COMMAND">upgradepkg</tt> works by first installing the new package and then
+removing the old package so that old files are no longer around on the system. If the
+upgraded package name has changed, use the percent sign syntax to specify the old package
+(the one that is installed) and the new package (the one you are upgrading it to).</p>
+
+<p>If you pass the <tt class="ENVAR">ROOT</tt> environment variable before <tt
+class="COMMAND">upgradepkg</tt>, that path will be used for the root directory. This is
+useful for setting up new drives for your root directory. They will typically be mounted
+to <tt class="FILENAME">/mnt</tt> or something other than <tt
+class="FILENAME">/</tt>.</p>
+
+<p><tt class="COMMAND">upgradepkg</tt> is not flawless. You should always back up your
+configuration files. If they get removed or overwritten, you'll want a copy of the
+originals for any needed repair work.</p>
+
+<p>Just as with <tt class="COMMAND">installpkg</tt> and <tt
+class="COMMAND">removepkg</tt>, you can specify several packages or use wildcards for the
+package name.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-RPM"
+name="PACKAGE-MANAGEMENT-PACKAGE-UTILITIES-RPM">18.2.5 <tt
+class="COMMAND">rpm2tgz</tt>/<tt class="COMMAND">rpm2targz</tt></a></h3>
+
+<p>The Red Hat Package Manager is a popular packaging system available today. Many
+software distributors are offering their products in RPM format. Since this is not our
+native format, we do not recommend people rely on them. However, some things are only
+available as an RPM (even the source).</p>
+
+<p>We provide a program that will convert RPM packages to our native <tt
+class="FILENAME">.tgz</tt> format. This will allow you to extract the package (perhaps
+with <tt class="COMMAND">explodepkg</tt>) to a temporary directory and examine its
+contents.</p>
+
+<p>The <tt class="COMMAND">rpm2tgz</tt> program will create a Slackware package with a
+<tt class="FILENAME">.tgz</tt> extension, while <tt class="FILENAME">rpm2targz</tt>
+creates an archive with a <tt class="FILENAME">.tar.gz</tt> extension.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PACKAGE-MANAGEMENT-MAKING-PACKAGES"
+name="PACKAGE-MANAGEMENT-MAKING-PACKAGES">18.3 Making Packages</a></h2>
+
+<p>Making Slackware packages can be either easy or difficult. There is no specific method
+for building a package. The only requirement is that the package be a tar gzipped file
+and if there is a postinstallation script, it must be <tt
+class="FILENAME">/install/doinst.sh</tt>.</p>
+
+<p>If you are interested in making packages for your system or for a network that you
+manage, you should have a look at the various build scripts in the Slackware source tree.
+There are several methods we use for making packages.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-EXPLODEPKG"
+name="PACKAGE-MANAGEMENT-EXPLODEPKG">18.3.1 <tt class="COMMAND">explodepkg</tt></a></h3>
+
+<p><tt class="COMMAND">explodepkg</tt>(8) will do the same thing that <tt
+class="COMMAND">installpkg</tt> does to extract the package, but it doesn't actually
+install it and it doesn't record it in the packages database. It simply extracts it to
+the current directory.</p>
+
+<p>If you look at the Slackware source tree, you will see how we use this command for
+&#8220;framework&#8221; packages. These packages contain a skeleton of what the final
+package will look like. They hold all the necessary filenames (zero-length), permissions,
+and ownerships. The build script will cat the package contents from the source directory
+to the package build directory.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-MAKEPKG"
+name="PACKAGE-MANAGEMENT-MAKEPKG">18.3.2 <tt class="COMMAND">makepkg</tt></a></h3>
+
+<p><tt class="COMMAND">makepkg</tt>(8) will package up the current directory into a valid
+Slackware package. It will search the tree for any symbolic links and add a creation
+block to the postinstallation script for creating them during the package install. It
+also warns of any zero-length files in the package tree.</p>
+
+<p>This command is typically run after you have created your package tree.</p>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="PACKAGE-MANAGEMENT-SLACKBUILD-SCRIPTS"
+name="PACKAGE-MANAGEMENT-SLACKBUILD-SCRIPTS">18.3.3 SlackBuild Scripts</a></h3>
+
+<p>Slackware packages are built in many different ways by necessity. Not all software
+packages are written by their programmers to compile the same way. Many have compile time
+options that are not all included in the packages Slackware uses. Perhaps you need some
+of this functionality; you'll need to compile your own package then. Fortunately for many
+Slackware packages, you can find SlackBuild scripts in the package's source code.</p>
+
+<p>So what is a SlackBuild script? SlackBuild scripts are executable shell scripts that
+you run as <tt class="USERNAME">root</tt> to configure, compile, and create Slackware
+packages. You can freely modify these scripts in the source directory and run them to
+create your own versions of the default Slackware packages.</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="PACKAGE-MANAGEMENT-MAKING-TAGS-AND-TAGFILES"
+name="PACKAGE-MANAGEMENT-MAKING-TAGS-AND-TAGFILES">18.4 Making Tags and Tagfiles (for
+setup)</a></h2>
+
+<p>The Slackware setup program handles installation of the software packages on your
+system. There are files that tell the setup program which packages must be installed,
+which ones are optional, and which ones are selected by default by the setup program.</p>
+
+<p>A tagfile is in the first software series directory and is called tagfile. It lists
+the packages in that particular disk set and their status. The status can be:</p>
+
+<div class="TABLE"><a id="AEN6621" name="AEN6621"></a>
+<p><b>Table 18-3. Tagfile Status Options</b></p>
+
+<table border="0" frame="void" width="100%" class="CALSTABLE">
+<col width="25%" />
+<col width="75%" />
+<thead>
+<tr>
+<th>Option</th>
+<th>Meaning</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td>ADD</td>
+<td>The package is required for proper system operation</td>
+</tr>
+
+<tr>
+<td>SKP</td>
+<td>The package will be automatically skipped</td>
+</tr>
+
+<tr>
+<td>REC</td>
+<td>The package is not required, but recommended</td>
+</tr>
+
+<tr>
+<td>OPT</td>
+<td>The package is optional</td>
+</tr>
+</tbody>
+</table>
+</div>
+
+<p>The format is simply:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+package_name: status
+</pre>
+</td>
+</tr>
+</table>
+
+<p>One package per line. The original tagfiles for each software series are stored as
+tagfile.org. So if you mess up yours, you can restore the original one.</p>
+
+<p>Many administrators prefer writing their own tagfiles and starting the installer and
+selecting &#8220;full&#8221;. The setup program will read the tagfiles and perform the
+installation according to their contents. If you use REC or OPT, a dialog box will be
+presented to the user asking whether or not they want a particular package. Therefore, it
+is recommended that you stick with ADD and SKP when writing tagfiles for automated
+installs.</p>
+
+<p>Just make sure your tagfiles are written to the same location as the originals. Or you
+can specify a custom tagfile path if you have custom tagfiles.</p>
+</div>
+</div>
+
+<div class="CHAPTER">
+<hr />
+<h1><a id="ZIPSLACK" name="ZIPSLACK"></a>Chapter 19 ZipSlack</h1>
+
+<div class="SECT1">
+<h2 class="SECT1"><a id="ZIPSLACK-WHAT" name="ZIPSLACK-WHAT">19.1 What is
+ZipSlack?</a></h2>
+
+<p>ZipSlack is a special version of Slackware Linux. It's an already installed copy of
+Slackware that's ready to run from your DOS or Windows partition. It's a basic
+installation, you do not get everything that comes with Slackware.</p>
+
+<p>ZipSlack gets its name from the form it's distributed in, a big .ZIP file. Users of
+DOS and Windows will probably be familiar with these files. They are compressed archives.
+The ZipSlack archive contains everything you need to get up and running with
+Slackware.</p>
+
+<p>It is important to note that ZipSlack is significantly different from a regular
+installation. Even though they function the same and contain the same programs, their
+intended audiences and functions differ. Several advantages and disadvantages of ZipSlack
+are discussed below.</p>
+
+<p>One last thing, you should always review the documentation included in the actual
+ZipSlack directory. It contains the latest information regarding installation, booting,
+and general use of the product.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="ZIPSLACK-ADVANTAGES" name="ZIPSLACK-ADVANTAGES">19.1.1
+Advantages</a></h3>
+
+<ul>
+<li>
+<p>Does not require repartitioning of your hard disk.</p>
+</li>
+
+<li>
+<p>Great way to learn Slackware Linux without stumbling through the installation
+process.</p>
+</li>
+</ul>
+</div>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="ZIPSLACK-DISADVANTAGES" name="ZIPSLACK-DISADVANTAGES">19.1.2
+Disadvantages</a></h3>
+
+<ul>
+<li>
+<p>Uses the DOS filesystem, which is slower than a native Linux filesystem.</p>
+</li>
+
+<li>
+<p>Will not work with Windows NT.</p>
+</li>
+</ul>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ZIPSLACK-GETTING" name="ZIPSLACK-GETTING">19.2 Getting
+ZipSlack</a></h2>
+
+<p>Obtaining ZipSlack is easy. If you have purchased the official Slackware Linux CD set,
+then you already have ZipSlack. Just find the CD that contains the <tt
+class="FILENAME">zipslack</tt> directory and place it in your CD-ROM drive. It's usually
+the third or fourth disc, but always trust the labels over this documentation as the disk
+it resides on is prone to change.</p>
+
+<p>If you want to download ZipSlack, you should first visit our &#8220;Get Slack&#8221;
+web page for the latest download information:</p>
+
+<p><a href="http://www.slackware.com/getslack/"
+target="_top">http://www.slackware.com/getslack/</a></p>
+
+<p>ZipSlack is part of each Slackware release. Locate the release you want, and go to
+that directory on the FTP site. The latest release directory can be found at this
+location:</p>
+
+<p><a href="ftp://ftp.slackware.com/pub/slackware/slackware/"
+target="_top">ftp://ftp.slackware.com/pub/slackware/slackware/</a></p>
+
+<p>You'll find ZipSlack in the <tt class="FILENAME">/zipslack</tt> subdirectory. ZipSlack
+is offered as one big <tt class="FILENAME">.ZIP</tt> file or floppy-sized chunks. The
+chunks are in the <tt class="FILENAME">/zipslack/split</tt> directory.</p>
+
+<p>Don't stop at just the <tt class="FILENAME">.ZIP</tt> files. You should also download
+the documentation files and any boot images that appear in the directory.</p>
+
+<div class="SECT2">
+<hr />
+<h3 class="SECT2"><a id="ZIPSLACK-INSTALLATION" name="ZIPSLACK-INSTALLATION">19.2.1
+Installation</a></h3>
+
+<p>Once you've downloaded the necessary components, you'll need to extract the <tt
+class="FILENAME">.ZIP</tt> file. Be sure to use a 32-bit unzipper. The size and filenames
+in the archive are too much for a 16-bit unzipper. Examples of 32-bit unzippers include
+WinZip and PKZIP for Windows.</p>
+
+<p>ZipSlack is designed to be extracted directly to the root directory of a drive (such
+as <tt class="DEVICENAME">C:</tt> or <tt class="DEVICENAME">D:</tt>). A <tt
+class="FILENAME">\LINUX</tt> directory will be created that contains the actual Slackware
+installation. You'll also find the files necessary to booting the system in that
+directory as well.</p>
+
+<p>After you've extracted the files, you should have a <tt class="FILENAME">\LINUX</tt>
+directory on the drive of your choosing (we'll use <tt class="DEVICENAME">C:</tt> from
+here on).</p>
+</div>
+</div>
+
+<div class="SECT1">
+<hr />
+<h2 class="SECT1"><a id="ZIPSLACK-BOOTING" name="ZIPSLACK-BOOTING">19.3 Booting
+ZipSlack</a></h2>
+
+<p>There are several ways to boot ZipSlack. The most common is to use the included
+LINUX.BAT to boot the system from DOS (or from DOS mode under Windows 9x). This file must
+be edited to match your system before it will work.</p>
+
+<p>Start by opening the <tt class="FILENAME">C:\LINUX\LINUX.BAT</tt> file in your
+favorite text editor. At the top of the file you will notice a large comment. It explains
+what you need to edit in this file (and also what to do if you are booting from an
+external Zip drive). Don't worry if you don't understand the <var
+class="LITERAL">root=</var> setting. There are several examples, so feel free to pick one
+and try it. If it doesn't work, you can edit the file again, comment out the line you
+uncommented, and pick another one.</p>
+
+<p>After you uncomment the line you want by removing the &#8220;rem&#8221; at the
+beginning of the line, save the file and exit the editor. Bring your machine into DOS
+mode.</p>
+
+<p>A DOS prompt window in Windows 9x will NOT work.</p>
+
+<p>Type <tt class="COMMAND">C:\LINUX\LINUX.BAT</tt> to boot the system. If all goes well,
+you should be presented with a login prompt.</p>
+
+<p>Log in as <tt class="USERNAME">root</tt>, with no password. You'll probably want to
+set a password for root, as well as adding an account for yourself. At this point you can
+refer to the other sections in this book for general system usage.</p>
+
+<p>If using the <tt class="FILENAME">LINUX.BAT</tt> file to boot the system didn't work
+for you, you should refer to the included <tt class="FILENAME">C:\LINUX\README.1ST</tt>
+file for other ways to boot.</p>
+</div>
+</div>
+
+<div class="GLOSSARY">
+<h1><a id="GLOSSARY" name="GLOSSARY"></a>Glossary</h1>
+
+<dl>
+<dt><b>Account</b></dt>
+
+<dd>
+<p>All of the information about a user, including username, password, finger information,
+UID and GID, and home directory. To create an account is to add and define a user.</p>
+</dd>
+
+<dt><b>Background</b></dt>
+
+<dd>
+<p>Any process that is running without accepting or controlling the input of a terminal
+is said to be running in the background.</p>
+</dd>
+
+<dt><b>Boot disk</b></dt>
+
+<dd>
+<p>A floppy disk containing an operating system (in our case, the Linux kernel) from
+which a computer can be started.</p>
+</dd>
+
+<dt><b>Compile</b></dt>
+
+<dd>
+<p>To convert source code to machine-readable &#8220;binary&#8221; code.</p>
+</dd>
+
+<dt><b>Daemon</b></dt>
+
+<dd>
+<p>A program designed to run in the background and, without user intervention, perform a
+specific task (usually providing a service).</p>
+</dd>
+
+<dt><b>Darkstar</b></dt>
+
+<dd>
+<p>The default hostname in Slackware; your computer will be called darkstar if you do not
+specify some other name.</p>
+
+<p>One of Patrick Volkerding's development machines, named after &#8220;Dark Star&#8221;,
+a song by the Grateful Dead.</p>
+</dd>
+
+<dt><b>Desktop Environment</b></dt>
+
+<dd>
+<p>A graphical user interface (GUI) that runs atop the X Window System and provides such
+features as integrated applications, cohesive look-and-feel between programs and
+components, file and window management capabilities, etc. A step beyond the simple window
+manager.</p>
+</dd>
+
+<dt><b>Device driver</b></dt>
+
+<dd>
+<p>A chunk of code in the kernel that directly controls a piece of hardware.</p>
+</dd>
+
+<dt><b>Device node</b></dt>
+
+<dd>
+<p>A special type of file in the <tt class="FILENAME">/dev</tt> filesystem that
+represents a hardware component to the operating system.</p>
+</dd>
+
+<dt><b>DNS</b></dt>
+
+<dd>
+<p>Domain Name Service. A system in which networked computers are given names which
+translate to numerical addresses.</p>
+</dd>
+
+<dt><b>Domain name</b></dt>
+
+<dd>
+<p>A computer's DNS name, excluding its host name.</p>
+</dd>
+
+<dt><b>Dot file</b></dt>
+
+<dd>
+<p>In Linux, files which are to be hidden have filenames beginning with a dot ('.').</p>
+</dd>
+
+<dt><b>Dotted quad</b></dt>
+
+<dd>
+<p>The format of IP addresses, so called because it consists of four numbers (range 0-255
+decimal) separated by periods.</p>
+</dd>
+
+<dt><b>Dynamic loader</b></dt>
+
+<dd>
+<p>When programs are compiled under Linux, they usually use pieces of code (functions)
+from external libraries. When such programs are run, those libraries must be found and
+the required functions loaded into memory. This is the job of the dynamic loader.</p>
+</dd>
+
+<dt><b>Environment variable</b></dt>
+
+<dd>
+<p>A variable set in the user's shell which can be referenced by that user or programs
+run by that user within that shell. Environment variables are generally used to store
+preferences and default parameters.</p>
+</dd>
+
+<dt><b>Epoch</b></dt>
+
+<dd>
+<p>A period of history; in Unix, &#8220;The Epoch&#8221; begins at 00:00:00 UTC January
+1, 1970. This is considered the &#8220;dawn of time&#8221; by Unix and Unix-like
+operating systems, and all other time is calculated relative to this date.</p>
+</dd>
+
+<dt><b>Filesystem</b></dt>
+
+<dd>
+<p>A representation of stored data in which &#8220;files&#8221; of data are kept
+organized in &#8220;directories&#8221;. The filesystem is the nearly universal form of
+representation for data stored to disks (both fixed and removable).</p>
+</dd>
+
+<dt><b>Foreground</b></dt>
+
+<dd>
+<p>A program that is accepting or controlling a terminal's input is said to be running in
+the foreground.</p>
+</dd>
+
+<dt><b>Framebuffer</b></dt>
+
+<dd>
+<p>A type of graphics device; in Linux, this most often refers to the software
+framebuffer, which provides a standard framebuffer interface to programs while keeping
+specific hardware drivers hidden from them. This layer of abstraction frees programs of
+the need to speak to various hardware drivers.</p>
+</dd>
+
+<dt><b>FTP</b></dt>
+
+<dd>
+<p>The File Transfer Protocol. FTP is a very popular method of transferring data between
+computers.</p>
+</dd>
+
+<dt><b>Gateway</b></dt>
+
+<dd>
+<p>A computer through which data on a network is transferred to another network.</p>
+</dd>
+
+<dt><b>GID</b></dt>
+
+<dd>
+<p>Group Identifier. The GID is a unique number attributed to a group of users.</p>
+</dd>
+
+<dt><b>Group</b></dt>
+
+<dd>
+<p>Users in Unix belong to &#8220;groups&#8221;, which can contain many other users and
+are used for more general access control than the existence of users alone can easily
+allow.</p>
+</dd>
+
+<dt><b>GUI</b></dt>
+
+<dd>
+<p>Graphical User Interface. A software interface that uses rendered graphical elements
+such as buttons, scrollbars, windows, etc. rather than solely text-based input and
+output</p>
+</dd>
+
+<dt><b>Home directory</b></dt>
+
+<dd>
+<p>A user's &#8220;home directory&#8221; is the directory the user is placed in
+immediately upon logging in. Users have full permissions and more or less free reign
+within their home directories.</p>
+</dd>
+
+<dt><b>HOWTO</b></dt>
+
+<dd>
+<p>A document describing &#8220;how to&#8221; do something, such as configure a firewall
+or manage users and groups. There is a large collection of these documents available from
+the Linux Documentation Project.</p>
+</dd>
+
+<dt><b>HTTP</b></dt>
+
+<dd>
+<p>The Hypertext Transfer Protocol. HTTP is the primary protocol on which the World Wide
+Web operates.</p>
+</dd>
+
+<dt><b>ICMP</b></dt>
+
+<dd>
+<p>Internet Control Message Protocol. A very basic networking protocol, used mostly for
+pings.</p>
+</dd>
+
+<dt><b>Kernel</b></dt>
+
+<dd>
+<p>The heart of an operating system. The kernel is the part that provides basic process
+control and interfaces with the computer's hardware.</p>
+</dd>
+
+<dt><b>Kernel module</b></dt>
+
+<dd>
+<p>A piece of kernel code, usually a driver of some sort, that can be loaded and unloaded
+from memory separately from the main body of the kernel. Modules are handy when upgrading
+drivers or testing kernel settings, because they can be loaded and unloaded without
+rebooting.</p>
+</dd>
+
+<dt><b>Library</b></dt>
+
+<dd>
+<p>A collection of functions which can be shared between programs.</p>
+</dd>
+
+<dt><b>LILO</b></dt>
+
+<dd>
+<p>The LInux LOader. LILO is the most widely-used Linux boot manager.</p>
+</dd>
+
+<dt><b>LOADLIN</b></dt>
+
+<dd>
+<p>LOADLIN is a program that runs under MS DOS or Windows and boots a Linux system. It is
+most commonly used on computers with multiple operating systems (including Linux and
+DOS/Windows, of course).</p>
+</dd>
+
+<dt><b>Man section</b></dt>
+
+<dd>
+<p>Pages in the standard Unix online manual ("man") are grouped into sections for easy
+reference. All C programming pages are in section 3, system administration pages in
+section 5, etc.</p>
+</dd>
+
+<dt><b>MBR</b></dt>
+
+<dd>
+<p>The Master Boot Record. A reserved space on a hard drive where information on what to
+do when booting is stored. LILO or other boot managers can be written here.</p>
+</dd>
+
+<dt><b>Motif</b></dt>
+
+<dd>
+<p>A popular programming toolkit used in many older X programs.</p>
+</dd>
+
+<dt><b>MOTD</b></dt>
+
+<dd>
+<p>Message of the Day. The motd (stored in Linux in <tt class="FILENAME">/etc/motd</tt>
+is a text file that is displayed to all users upon logging in. Traditionally, it is used
+by the system administrator as a sort of &#8220;bulletin board&#8221; for communicating
+with users.</p>
+</dd>
+
+<dt><b>Mount point</b></dt>
+
+<dd>
+<p>An empty directory in a filesystem where another filesystem is to be
+&#8220;mounted&#8221;, or grafted on.</p>
+</dd>
+
+<dt><b>Nameserver</b></dt>
+
+<dd>
+<p>A DNS information server. Nameservers translate DNS names to numerical IP
+addresses.</p>
+</dd>
+
+<dt><b>Network interface</b></dt>
+
+<dd>
+<p>A virtual representation of a network device provided by the kernel. Network
+interfaces allow users and programs to talk to network devices.</p>
+</dd>
+
+<dt><b>NFS</b></dt>
+
+<dd>
+<p>The Network Filesystem. NFS allows the mounting of remote filesystems as if they were
+local to your computer and thus provides a transparent method of file sharing.</p>
+</dd>
+
+<dt><b>Octal</b></dt>
+
+<dd>
+<p>Base-8 number system, with digits 0-7.</p>
+</dd>
+
+<dt><b>Pager</b></dt>
+
+<dd>
+<p>An X program that allows the user to see and switch between multiple
+&#8220;desktops&#8221;.</p>
+</dd>
+
+<dt><b>Partition</b></dt>
+
+<dd>
+<p>A division of a hard drive. Filesystems exist on top of partitions.</p>
+</dd>
+
+<dt><b>PPP</b></dt>
+
+<dd>
+<p>Point-to-Point Protocol. PPP is used mainly for connecting via modem to an Internet
+Service Provider.</p>
+</dd>
+
+<dt><b>Process</b></dt>
+
+<dd>
+<p>A running program.</p>
+</dd>
+
+<dt><b>Root directory</b></dt>
+
+<dd>
+<p>Represented as &#8220;/&#8221;, the root directory exists at the top of the
+filesystem, with all other directories branching out beneath it in a &#8220;file
+tree&#8221;.</p>
+</dd>
+
+<dt><b>Root disk</b></dt>
+
+<dd>
+<p>The disk (usually fixed) on which the root directory is stored.</p>
+</dd>
+
+<dt><b>Routing table</b></dt>
+
+<dd>
+<p>The set of information the kernel uses in &#8220;routing&#8221; network data around.
+It contains such tidbits as where your default gateway is, which network interface is
+connected to which network, etc.</p>
+</dd>
+
+<dt><b>Runlevel</b></dt>
+
+<dd>
+<p>The overall system state as defined by init. Runlevel 6 is rebooting, runlevel 1 is
+&#8220;single user mode&#8221;, runlevel 4 is an X login, etc. There are 6 available
+runlevels on a Slackware system.</p>
+</dd>
+
+<dt><b>Secure shell</b></dt>
+
+<dd>
+<p>An encrypted (thus secure) method of logging in remotely to a computer. Many secure
+shell programs are available; both a client and server are needed.</p>
+</dd>
+
+<dt><b>Service</b></dt>
+
+<dd>
+<p>The sharing of information and/or data between programs and computers from a single
+&#8220;server&#8221; to multiple &#8220;clients&#8221;. HTTP, FTP, NFS, etc. are
+services.</p>
+</dd>
+
+<dt><b>Shadow password suite</b></dt>
+
+<dd>
+<p>The shadow password suite allows encrypted passwords to be hidden from users, while
+the rest of the information in the <tt class="FILENAME">/etc/passwd</tt> file remains
+visible to all. This helps prevent brute-force attempts at cracking passwords.</p>
+</dd>
+
+<dt><b>Shell</b></dt>
+
+<dd>
+<p>Shells provide a commandline interface to the user. When you're looking at a text
+prompt, you're in a shell.</p>
+</dd>
+
+<dt><b>Shell builtin</b></dt>
+
+<dd>
+<p>A command built into the shell, as opposed to being provided by an external program.
+For instance, <tt class="COMMAND">bash</tt> has a <tt class="COMMAND">cd</tt>
+builtin.</p>
+</dd>
+
+<dt><b>Signal</b></dt>
+
+<dd>
+<p>Unix programs can communicate between each other using simple &#8220;signals&#8221;,
+which are enumerated and usually have specific meanings. <tt class="COMMAND">kill -l</tt>
+will list the available signals.</p>
+</dd>
+
+<dt><b>SLIP</b></dt>
+
+<dd>
+<p>Serial Line Interface Protocol. SLIP is a similar protocol to PPP, in that it's used
+for connecting two machines via a serial interface.</p>
+</dd>
+
+<dt><b>Software package</b></dt>
+
+<dd>
+<p>A program and its associated files, archived and compressed into a single file along
+with any necessary scripts or information to aid in managing the installation, upgrade,
+and removal of those files.</p>
+</dd>
+
+<dt><b>Software series</b></dt>
+
+<dd>
+<p>A collection of related software packages in Slackware. All KDE packages are in the
+&#8220;kde&#8221; series, networking packages in the &#8220;n&#8221; series, etc.</p>
+</dd>
+
+<dt><b>Source code</b></dt>
+
+<dd>
+<p>The (more or less) human-readable code in which most programs are written. Source code
+is compiled into &#8220;binary&#8221; code.</p>
+</dd>
+
+<dt><b>Standard Error (stderr)</b></dt>
+
+<dd>
+<p>The Unix-standard output stream for errors. Programs write any error messages on
+stderr, so that they can be separated from normal output.</p>
+</dd>
+
+<dt><b>Standard Input (stdin)</b></dt>
+
+<dd>
+<p>The Unix-standard input stream. Data can be redirected or piped into a program's stdin
+from any source.</p>
+</dd>
+
+<dt><b>Standard Output (stdout)</b></dt>
+
+<dd>
+<p>The Unix-standard output stream. Normal text output from a program is written to
+stdout, which is separate from the error messages reported on stderr and can be piped or
+redirected into other programs' stdin or to a file.</p>
+</dd>
+
+<dt><b>Subnet</b></dt>
+
+<dd>
+<p>An IP address range that is part of a larger range. For instance, 192.168.1.0 is a
+subnet of 192.168.0.0 (where 0 is a mask meaning &#8220;undefined&#8221;); it is, in
+fact, the &#8220;.1&#8221; subnet.</p>
+</dd>
+
+<dt><b>Superblock</b></dt>
+
+<dd>
+<p>In Linux, partitions are discussed in terms of blocks. A block is 512 bytes. The
+superblock is the first 512 bytes of a partition.</p>
+</dd>
+
+<dt><b>Supplemental disk</b></dt>
+
+<dd>
+<p>In Slackware, a floppy disk used during installation that contains neither the kernel
+(which is on the boot disk) nor the root filesystem (which is on the root disk), but
+additional needed files such as network modules or PCMCIA support.</p>
+</dd>
+
+<dt><b>Suspended process</b></dt>
+
+<dd>
+<p>A process which has been frozen until killed or resumed.</p>
+</dd>
+
+<dt><b>Swap space</b></dt>
+
+<dd>
+<p>Disk space used by the kernel as &#8220;virtual&#8221; RAM. It is slower than RAM, but
+because disk space is cheaper, swap is usually more plentiful. Swap space is useful to
+the kernel for holding lesser-used data and as a fallback when physical RAM is
+exhausted.</p>
+</dd>
+
+<dt><b>Symbolic link</b></dt>
+
+<dd>
+<p>A special file that simply points to the location of another file. Symbolic links are
+used to avoid data duplication when a file is needed in multiple locations.</p>
+</dd>
+
+<dt><b>Tagfile</b></dt>
+
+<dd>
+<p>A file used by the Slackware <tt class="COMMAND">setup</tt> program during
+installation, which describes a set of packages to be installed.</p>
+</dd>
+
+<dt><b>Terminal</b></dt>
+
+<dd>
+<p>A human-computer interface consisting of at least a screen (or virtual screen) and
+some method of input (almost always at least a keyboard).</p>
+</dd>
+
+<dt><b>Toolkit, GUI</b></dt>
+
+<dd>
+<p>A GUI toolkit is a collection of libraries that provide a programmer with code to draw
+&#8220;widgets&#8221; such as scrollbars, checkboxes, etc. and construct a graphical
+interface. The GUI toolkit used by a program often defines its &#8220;look and
+feel&#8221;.</p>
+</dd>
+
+<dt><b>UID</b></dt>
+
+<dd>
+<p>User Identifier. A unique number that identifies a user to the system. UIDs are used
+by most programs instead of usernames because a number is easier to deal with; usernames
+are generally only used when the user has to see things happen.</p>
+</dd>
+
+<dt><b>VESA</b></dt>
+
+<dd>
+<p>Video Electronics Standards Association. The term &#8220;VESA&#8221; is often used to
+denote a standard specified by said Association. Nearly all modern video adapters are
+VESA-compliant.</p>
+</dd>
+
+<dt><b>Virtual terminal</b></dt>
+
+<dd>
+<p>The use of software to simulate multiple terminals while using only a single set of
+input/output devices (keyboard, monitor, mouse). Special keystrokes switch between
+virtual terminals at a single physical terminal.</p>
+</dd>
+
+<dt><b>Window manager</b></dt>
+
+<dd>
+<p>An X program whose purpose is to provide a graphical interface beyond the simple
+rectangle-drawing of the X Window System. Window managers generally provide titlebars,
+menus for running programs, etc.</p>
+</dd>
+
+<dt><b>Working directory</b></dt>
+
+<dd>
+<p>The directory in which a program considers itself to be while running.</p>
+</dd>
+
+<dt><b>Wrapper program</b></dt>
+
+<dd>
+<p>A program whose sole purpose is to run other programs, but change their behavior in
+some way by altering their environments or filtering their input.</p>
+</dd>
+
+<dt><b>X server</b></dt>
+
+<dd>
+<p>The program in the X Window System which interfaces with graphics hardware and handles
+the actual running of X programs.</p>
+</dd>
+
+<dt><b>X Window System</b></dt>
+
+<dd>
+<p>Network-oriented graphical interface system used on most Unix-like operating systems,
+including Linux.</p>
+</dd>
+</dl>
+</div>
+
+<div class="APPENDIX">
+<hr />
+<h1><a id="GPL" name="GPL"></a>Appendix A. The GNU General Public License</h1>
+
+<p class="LITERALLAYOUT">GNU&nbsp;GENERAL&nbsp;PUBLIC&nbsp;LICENSE<br />
+<br />
+Version&nbsp;2,&nbsp;June&nbsp;1991<br />
+Copyright&nbsp;(C)&nbsp;1989,&nbsp;1991&nbsp;Free&nbsp;Software&nbsp;Foundation,&nbsp;Inc.<br />
+
+59&nbsp;Temple&nbsp;Place,&nbsp;Suite&nbsp;330,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02111-1307&nbsp;&nbsp;USA<br />
+
+Everyone&nbsp;is&nbsp;permitted&nbsp;to&nbsp;copy&nbsp;and&nbsp;distribute&nbsp;verbatim&nbsp;copies&nbsp;of&nbsp;this<br />
+
+license&nbsp;document,&nbsp;but&nbsp;changing&nbsp;it&nbsp;is&nbsp;not&nbsp;allowed.</p>
+
+<div class="SIMPLESECT">
+<hr />
+<h4 class="SIMPLESECT"><a id="AEN7088" name="AEN7088">A.1. Preamble</a></h4>
+
+<p>The licenses for most software are designed to take away your freedom to share and
+change it. By contrast, the GNU General Public License is intended to guarantee your
+freedom to share and change free software--to make sure the software is free for all its
+users. This General Public License applies to most of the Free Software Foundation's
+software and to any other program whose authors commit to using it. (Some other Free
+Software Foundation software is covered by the GNU Library General Public License
+instead.) You can apply it to your programs, too.</p>
+
+<p>When we speak of free software, we are referring to freedom, not price. Our General
+Public Licenses are designed to make sure that you have the freedom to distribute copies
+of free software (and charge for this service if you wish), that you receive source code
+or can get it if you want it, that you can change the software or use pieces of it in new
+free programs; and that you know you can do these things.</p>
+
+<p>To protect your rights, we need to make restrictions that forbid anyone to deny you
+these rights or to ask you to surrender the rights. These restrictions translate to
+certain responsibilities for you if you distribute copies of the software, or if you
+modify it.</p>
+
+<p>For example, if you distribute copies of such a program, whether gratis or for a fee,
+you must give the recipients all the rights that you have. You must make sure that they,
+too, receive or can get the source code. And you must show them these terms so they know
+their rights.</p>
+
+<p>We protect your rights with two steps: (1) copyright the software, and (2) offer you
+this license which gives you legal permission to copy, distribute and/or modify the
+software.</p>
+
+<p>Also, for each author's protection and ours, we want to make certain that everyone
+understands that there is no warranty for this free software. If the software is modified
+by someone else and passed on, we want its recipients to know that what they have is not
+the original, so that any problems introduced by others will not reflect on the original
+authors' reputations.</p>
+
+<p>Finally, any free program is threatened constantly by software patents. We wish to
+avoid the danger that redistributors of a free program will individually obtain patent
+licenses, in effect making the program proprietary. To prevent this, we have made it
+clear that any patent must be licensed for everyone's free use or not licensed at
+all.</p>
+
+<p>The precise terms and conditions for copying, distribution and modification
+follow.</p>
+</div>
+
+<div class="SIMPLESECT">
+<hr />
+<h4 class="SIMPLESECT"><a id="AEN7098" name="AEN7098">A.2. TERMS AND CONDITIONS</a></h4>
+
+<p><span class="emphasis"><i class="EMPHASIS">TERMS AND CONDITIONS FOR COPYING,
+DISTRIBUTION AND MODIFICATION</i></span></p>
+
+<ol type="1">
+<li>
+<p>This License applies to any program or other work which contains a notice placed by
+the copyright holder saying it may be distributed under the terms of this General Public
+License. The &#8220;Program&#8221;, below, refers to any such program or work, and a
+&#8220;work based on the Program&#8221; means either the Program or any derivative work
+under copyright law: that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another language.
+(Hereinafter, translation is included without limitation in the term
+&#8220;modification&#8221;.) Each licensee is addressed as &#8220;you&#8221;.</p>
+
+<p>Activities other than copying, distribution and modification are not covered by this
+License; they are outside its scope. The act of running the Program is not restricted,
+and the output from the Program is covered only if its contents constitute a work based
+on the Program (independent of having been made by running the Program). Whether that is
+true depends on what the Program does.</p>
+</li>
+
+<li>
+<p>You may copy and distribute verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and appropriately publish on
+each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty; and give any other
+recipients of the Program a copy of this License along with the Program.</p>
+
+<p>You may charge a fee for the physical act of transferring a copy, and you may at your
+option offer warranty protection in exchange for a fee.</p>
+</li>
+
+<li>
+<p>You may modify your copy or copies of the Program or any portion of it, thus forming a
+work based on the Program, and copy and distribute such modifications or work under the
+terms of Section 1 above, provided that you also meet all of these conditions:</p>
+
+<ol type="a">
+<li>
+<p>You must cause the modified files to carry prominent notices stating that you changed
+the files and the date of any change.</p>
+</li>
+
+<li>
+<p>You must cause any work that you distribute or publish, that in whole or in part
+contains or is derived from the Program or any part thereof, to be licensed as a whole at
+no charge to all third parties under the terms of this License.</p>
+</li>
+
+<li>
+<p>If the modified program normally reads commands interactively when run, you must cause
+it, when started running for such interactive use in the most ordinary way, to print or
+display an announcement including an appropriate copyright notice and a notice that there
+is no warranty (or else, saying that you provide a warranty) and that users may
+redistribute the program under these conditions, and telling the user how to view a copy
+of this License. (Exception: if the Program itself is interactive but does not normally
+print such an announcement, your work based on the Program is not required to print an
+announcement.)</p>
+</li>
+</ol>
+
+<p>These requirements apply to the modified work as a whole. If identifiable sections of
+that work are not derived from the Program, and can be reasonably considered independent
+and separate works in themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you distribute the same
+sections as part of a whole which is a work based on the Program, the distribution of the
+whole must be on the terms of this License, whose permissions for other licensees extend
+to the entire whole, and thus to each and every part regardless of who wrote it.</p>
+
+<p>Thus, it is not the intent of this section to claim rights or contest your rights to
+work written entirely by you; rather, the intent is to exercise the right to control the
+distribution of derivative or collective works based on the Program.</p>
+
+<p>In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or distribution
+medium does not bring the other work under the scope of this License.</p>
+</li>
+
+<li>
+<p>You may copy and distribute the Program (or a work based on it, under Section 2) in
+object code or executable form under the terms of Sections 1 and 2 above provided that
+you also do one of the following:</p>
+
+<ol type="a">
+<li>
+<p>Accompany it with the complete corresponding machine-readable source code, which must
+be distributed under the terms of Sections 1 and 2 above on a medium customarily used for
+software interchange; or,</p>
+</li>
+
+<li>
+<p>Accompany it with a written offer, valid for at least three years, to give any third
+party, for a charge no more than your cost of physically performing source distribution,
+a complete machine-readable copy of the corresponding source code, to be distributed
+under the terms of Sections 1 and 2 above on a medium customarily used for software
+interchange; or,</p>
+</li>
+
+<li>
+<p>Accompany it with the information you received as to the offer to distribute
+corresponding source code. (This alternative is allowed only for noncommercial
+distribution and only if you received the program in object code or executable form with
+such an offer, in accord with Subsection b above.)</p>
+</li>
+</ol>
+
+<p>The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all the source
+code for all modules it contains, plus any associated interface definition files, plus
+the scripts used to control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major components (compiler,
+kernel, and so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.</p>
+
+<p>If distribution of executable or object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source code from the same
+place counts as distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.</p>
+</li>
+
+<li>
+<p>You may not copy, modify, sublicense, or distribute the Program except as expressly
+provided under this License. Any attempt otherwise to copy, modify, sublicense or
+distribute the Program is void, and will automatically terminate your rights under this
+License. However, parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such parties remain in full
+compliance.</p>
+</li>
+
+<li>
+<p>You are not required to accept this License, since you have not signed it. However,
+nothing else grants you permission to modify or distribute the Program or its derivative
+works. These actions are prohibited by law if you do not accept this License. Therefore,
+by modifying or distributing the Program (or any work based on the Program), you indicate
+your acceptance of this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Program or works based on it.</p>
+</li>
+
+<li>
+<p>Each time you redistribute the Program (or any work based on the Program), the
+recipient automatically receives a license from the original licensor to copy, distribute
+or modify the Program subject to these terms and conditions. You may not impose any
+further restrictions on the recipients' exercise of the rights granted herein. You are
+not responsible for enforcing compliance by third parties to this License.</p>
+</li>
+
+<li>
+<p>If, as a consequence of a court judgment or allegation of patent infringement or for
+any other reason (not limited to patent issues), conditions are imposed on you (whether
+by court order, agreement or otherwise) that contradict the conditions of this License,
+they do not excuse you from the conditions of this License. If you cannot distribute so
+as to satisfy simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all. For
+example, if a patent license would not permit royalty-free redistribution of the Program
+by all those who receive copies directly or indirectly through you, then the only way you
+could satisfy both it and this License would be to refrain entirely from distribution of
+the Program.</p>
+
+<p>If any portion of this section is held invalid or unenforceable under any particular
+circumstance, the balance of the section is intended to apply and the section as a whole
+is intended to apply in other circumstances.</p>
+
+<p>It is not the purpose of this section to induce you to infringe any patents or other
+property right claims or to contest validity of any such claims; this section has the
+sole purpose of protecting the integrity of the free software distribution system, which
+is implemented by public license practices. Many people have made generous contributions
+to the wide range of software distributed through that system in reliance on consistent
+application of that system; it is up to the author/donor to decide if he or she is
+willing to distribute software through any other system and a licensee cannot impose that
+choice.</p>
+
+<p>This section is intended to make thoroughly clear what is believed to be a consequence
+of the rest of this License.</p>
+</li>
+
+<li>
+<p>If the distribution and/or use of the Program is restricted in certain countries
+either by patents or by copyrighted interfaces, the original copyright holder who places
+the Program under this License may add an explicit geographical distribution limitation
+excluding those countries, so that distribution is permitted only in or among countries
+not thus excluded. In such case, this License incorporates the limitation as if written
+in the body of this License.</p>
+</li>
+
+<li>
+<p>The Free Software Foundation may publish revised and/or new versions of the General
+Public License from time to time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new problems or concerns.</p>
+
+<p>Each version is given a distinguishing version number. If the Program specifies a
+version number of this License which applies to it and &#8220;any later version&#8221;,
+you have the option of following the terms and conditions either of that version or of
+any later version published by the Free Software Foundation. If the Program does not
+specify a version number of this License, you may choose any version ever published by
+the Free Software Foundation.</p>
+</li>
+
+<li>
+<p>If you wish to incorporate parts of the Program into other free programs whose
+distribution conditions are different, write to the author to ask for permission. For
+software which is copyrighted by the Free Software Foundation, write to the Free Software
+Foundation; we sometimes make exceptions for this. Our decision will be guided by the two
+goals of preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.</p>
+</li>
+
+<li>
+<p>NO WARRANTY</p>
+
+<p>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM,
+TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &#8220;AS IS&#8221; WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.</p>
+</li>
+
+<li>
+<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS
+PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
+SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.</p>
+</li>
+</ol>
+
+<p>END OF TERMS AND CONDITIONS</p>
+</div>
+
+<div class="SIMPLESECT">
+<hr />
+<h4 class="SIMPLESECT"><a id="AEN7162" name="AEN7162">A.3. How to Apply These Terms to
+Your New Programs</a></h4>
+
+<p>If you develop a new program, and you want it to be of the greatest possible use to
+the public, the best way to achieve this is to make it free software which everyone can
+redistribute and change under these terms.</p>
+
+<p>To do so, attach the following notices to the program. It is safest to attach them to
+the start of each source file to most effectively convey the exclusion of warranty; and
+each file should have at least the &#8220;copyright&#8221; line and a pointer to where
+the full notice is found.</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+&lt;one line to give the program's name and a brief idea of what it does.&gt;
+ Copyright (C) &lt;year&gt; &lt;name of author&gt;
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+</pre>
+</td>
+</tr>
+</table>
+
+<p>Also add information on how to contact you by electronic and paper mail.</p>
+
+<p>If the program is interactive, make it output a short notice like this when it starts
+in an interactive mode:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="SCREEN">
+Gnomovision version 69, Copyright (C) year name of author
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type `show c' for details.
+</pre>
+</td>
+</tr>
+</table>
+
+<p>The hypothetical commands `show w' and `show c' should show the appropriate parts of
+the General Public License. Of course, the commands you use may be called something other
+than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits
+your program.</p>
+
+<p>You should also get your employer (if you work as a programmer) or your school, if
+any, to sign a &#8220;copyright disclaimer&#8221; for the program, if necessary. Here is
+a sample; alter the names:</p>
+
+<table border="0" bgcolor="#E0E0E0" width="100%">
+<tr>
+<td>
+<pre class="PROGRAMLISTING">
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ &lt;signature of Ty Coon&gt;, 1 April 1989
+ Ty Coon, President of Vice
+</pre>
+</td>
+</tr>
+</table>
+
+<p>This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may consider it more
+useful to permit linking proprietary applications with the library. If this is what you
+want to do, use the GNU Library General Public License instead of this License.</p>
+</div>
+</div>
+</div>
+
+<hr />
+</body>
+</html>
+