diff options
Diffstat (limited to 'misc/slackbook/html/book.html')
-rw-r--r-- | misc/slackbook/html/book.html | 13511 |
1 files changed, 13511 insertions, 0 deletions
diff --git a/misc/slackbook/html/book.html b/misc/slackbook/html/book.html new file mode 100644 index 00000000..c0803a78 --- /dev/null +++ b/misc/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 © 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 “™” or the “®” 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:\></tt> indicate a <span +class="TRADEMARK">MS-DOS</span>® command. Unless otherwise noted, these commands may +be executed from a “Command Prompt” window in a modern <span +class="TRADEMARK">Microsoft</span>® <span class="TRADEMARK">Windows</span>® +environment.</p> + +<table border="0" bgcolor="#E0E0E0" width="100%"> +<tr> +<td> +<pre class="SCREEN"> +<samp class="PROMPT">D:\></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 “Linux” 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, “If I have seen further, it is by standing on the shoulders +of giants.” 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 “GNU's Not Unix”. 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 “free as in speech, not free as in beer”. 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 “opened” to the community, it cannot be +“closed” 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 “free” 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 “F” +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 “manual”) is the +traditional form of online documentation in Unix and Linux operating systems. Comprised +of specially formatted files, the “man pages”, 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 “<tt class="COMMAND">man</tt>” is documented in section 1 (user +commands); you can specify that you want the section 1 man page for “man” +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&T GIS WaveLAN ISA device driver +wavelan_cs (4) - AT&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 “Question and answer” style for +(surprise) Frequently Asked Questions. The FAQs can often be a very useful place to look +if you're just looking for a “Quick Fix” 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 “The Old +School”. 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 “<var class="LITERAL">subscribe <var class="REPLACEABLE">[name +of list]</var></var>” 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>“A place to download and get help with Linux.”</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>®!) is one of the most active places +to find technical help with Slackware problems. Like every Usenet newsgroup, a few +unhelpful participants (“trolls”) 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 “live” 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 “extra” 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 “disk sets” 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 +“Okay” and “Cancel” 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 “help” 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 “qwerty” 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 “target”, “source”, +and “select” 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 “select” 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 “Yes”, “No”, or “Skip”. 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. </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 “Should I compile a kernel for my system?” 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&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 > /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 “if” 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 “A” 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"> <span class="emphasis"><i +class="EMPHASIS">Client</i></span>: Is there a DHCP server available on the LAN?<br /> + + <span class="emphasis"><i +class="EMPHASIS">Server</i></span>: Yes, there is. Here I am.<br /> + + <span class="emphasis"><i +class="EMPHASIS">Client</i></span>: I need an IP address.<br /> + <span class="emphasis"><i +class="EMPHASIS">Server</i></span>: You may take 192.168.10.10 for 19200 seconds.<br /> + + <span class="emphasis"><i +class="EMPHASIS">Client</i></span>: Thank you.</p> + +<p class="LITERALLAYOUT"> <span class="emphasis"><i +class="EMPHASIS">Client</i></span>: Is there a DHCP server available on the LAN?<br /> + + <span class="emphasis"><i +class="EMPHASIS">Server</i></span>:Yes, there is. Here I am.<br /> + + <span class="emphasis"><i +class="EMPHASIS">Client</i></span>:I need an IP address. The last time we<br /> + + talked, I had 192.168.10.10;<br /> + May I have it again?<br /> + <span class="emphasis"><i +class="EMPHASIS">Server</i></span>:Yes, you may (or No, you may not: take 192.168.10.12 instead).<br /> + + <span class="emphasis"><i +class="EMPHASIS">Client</i></span>: Thank 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 “<var class="LITERAL">YES</var>”.</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 “<var class="LITERAL">YES</var>” 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 +“slackware.com” 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 “<tt class="FILENAME">eth0</tt>” with whatever network interface your +wireless card uses and change “<var class="REPLACEABLE">mynetwork</var>” 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 +(“<var class="LITERAL">$</var>”) 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 +“<tt class="HOSTID">Bar</tt>” 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 +“0” (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 “<kbd class="USERINPUT">y</kbd>”. Most users can say +“<kbd class="USERINPUT">n</kbd>” -- 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 “<kbd class="USERINPUT">y</kbd>”, 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 & +xclock -geometry 50x50-1+1 & +xterm -geometry 80x50+494+51 & +xterm -geometry 80x20+494-0 & +exec xterm -geometry 80x66+0+0 -name login +</pre> +</td> +</tr> +</table> + +<p>All of those “if” 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 “look and +feel”, 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 “tried and true” 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 “1024 cylinder limit”. 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? -> " + 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=<root partition device> 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 “right” 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:\> <kbd class="USERINPUT">cd \</kbd> +C:\> <kbd class="USERINPUT">attrib -r -a -s -h MSDOS.SYS</kbd> +C:\> <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? -> " +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> <kbd class="USERINPUT">cd \</kbd> +C:\> <kbd class="USERINPUT">attrib -r -a -s -h boot.ini</kbd> +C:\> <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 “superuser”, 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 ““<tt class="ERRORNAME">Command +not found</tt>”” 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 “<tt class="FILENAME">.</tt>” 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 +“1”, “2”, and “3”, 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 +“any number of characters”, 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, “Well what about letters?” 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 > 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">> 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 >> blargh</kbd> +</pre> +</td> +</tr> +</table> + +<p>This is the third most commonly used redirector; it does the same thing as +“>”, except that “>>” 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 “>”, it will be created. (“>” +will obliterate the current contents of <tt class="FILENAME">blargh</tt>.)</p> + +<p>There is also a “<” 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 < dosfile.txt > 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 >> 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='> ' +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 “<var +class="LITERAL">some_value</var>”; 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 “virtual terminals”, or +“VTs”.</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 “<tt +class="USERNAME">root</tt>” and the group “<tt +class="USERNAME">bin</tt>” own this file.</p> + +<p>We can easily change the file owners with the <tt class="COMMAND">chown</tt>(1) (which +means “change owner”) and <tt class="COMMAND">chgrp</tt>(1) (which means +“change group”) 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 “<tt class="USERNAME">root</tt>”, 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 “mr” and group +“jones”.</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>“sticky” 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 “read” and “write”, you would use +“6” 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 “d” 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 “change mode”) +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, “Why didn't it just create a file with those +permissions in the first place?” 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 “root”). 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 -> 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 “n” 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 “concatenate”. 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 > 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 > ~/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 <<var +class="REPLACEABLE">directory</var>></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 &</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 +“?”. 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 “SIG” 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. “I'm not a system +administrator! I don't even want to be a system administrator!”</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 “secure1” 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 +“<var class="LITERAL">x</var>”. 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. (“Safely” 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 (“<var +class="LITERAL">x</var>” 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 “users” 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 +“days since password was changed” 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 “<tt class="USERNAME">users</tt>” +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. “<var +class="OPTION">now</var>” is the time that we want to shutdown, and the “<var +class="OPTION">-h</var>” 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 “<var +class="OPTION">-r</var>” for “<var class="OPTION">-h</var>”:</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 “l”). 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 “ping” 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>: Loki's down again.<br /> +<span class="emphasis"><i class="EMPHASIS">User +B</i></span>: Are you sure?<br /> +<span class="emphasis"><i class="EMPHASIS">User +A</i></span>: Yeah, I tried pinging it, but there's no 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 +“hops” 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> + +; <<>> DiG 9.2.2 <<>> @192.168.1.254 www.slackware.com mx +;; global options: printcmd +;; Got answer: +;; ->>HEADER<<- 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. +“@192.168.1.254” specifies the dns server to use. +“www.slackware.com” is the domain name I am performing a lookup on, and +“mx” 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 “dot plan” and “dot project”. 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 <<var +class="REPLACEABLE">hostname</var>></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 <<var +class="REPLACEABLE">hostname</var>> [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>“All mail clients suck. This one just sucks less.” <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 <subject> <to-addr></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 +“surfing the net”. 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 “XAP” series, as +well as text mode browsers in the “N” 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 <url></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 + => `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! +==> SYST ... done. ==> PWD ... done. +==> TYPE I ... done. ==> CWD /gnu/wget ... done. +==> PORT ... done. ==> RETR wget-1.8.2.tar.gz ... done. +Length: 1,154,648 (unauthoritative) + +100%[==================================>] 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 “client” is you. The “server” 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 <hostname> [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 “anonymous”. 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></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 <dirname></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 <filename></tt></td> +<td>Download a file</td> +</tr> + +<tr> +<td><tt class="COMMAND">put <filename></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 <mask></tt></td> +<td>Download a file or group of files; wildcards are allowed</td> +</tr> + +<tr> +<td><tt class="COMMAND">mput <mask></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> <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> <kbd class="USERINPUT">tick</kbd> +Tick counter printing on (10240 bytes/tick increment). +ftp> <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 “<var class="OPTION">-u</var>” 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 > <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 > <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 > <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 <person> [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 <username>[#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 > /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 “unique” 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-<ver>-<arch>-<rev>.tgz</kbd> +6341417aa1c025448b53073a1f1d287d package-<ver>-<arch>-<rev>.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 “<var class="LITERAL">OK</var>” while files that fail are labelled +“<var class="LITERAL">FAILED</var>”. (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 +“tarball”. 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 +“-” 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 “explode” 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 +“<var class="OPTION">-x</var>” option and replacing it with the “<var +class="OPTION">-c</var>” 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 “<var class="OPTION">-f</var>” 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 “command mode”, 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 “<b class="KEYCAP">q</b>” 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 “<b class="KEYCAP">hjkl</b>”. 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 “<b class="KEYCAP">q</b>” 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 “<span class="emphasis"><i class="EMPHASIS">the</i></span>” will +cause <tt class="COMMAND">vi</tt> to stop on “<span class="emphasis"><i +class="EMPHASIS">then</i></span>”, “<span class="emphasis"><i +class="EMPHASIS">therefore</i></span>”, and so on. This is because all of those +words do match “<span class="emphasis"><i +class="EMPHASIS">the</i></span>”.</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 +“<span class="emphasis"><i class="EMPHASIS">the</i></span>” 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 “asdf”</td> +<td align="CENTER"><b class="KEYCAP">/asdf</b></td> +</tr> + +<tr> +<td>Search backwards for “asdf”</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 “modes”, 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 +“in Emacs”.</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 “buffers” 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 “(New file)” 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"><</b> </td> +<td>go to the beginning of the buffer</td> +</tr> + +<tr> +<td><b class="KEYCAP">M</b>-<b class="KEYCAP">></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"><</b> and <b +class="KEYCAP">M</b>-<b class="KEYCAP">></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"><</b> and <b class="KEYCAP">></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 “<tt class="FILENAME">cars.txt</tt>”, +Emacs will create a backup “<tt class="FILENAME">cars.txt~</tt>”.</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 +“framework” 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 “full”. 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 “Get Slack” +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 “rem” 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 “binary” 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 “Dark Star”, +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, “The Epoch” begins at 00:00:00 UTC January +1, 1970. This is considered the “dawn of time” 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 “files” of data are kept +organized in “directories”. 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 “groups”, 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 “home directory” 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 “how to” 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 “bulletin board” 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 +“mounted”, 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 +“desktops”.</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 “/”, the root directory exists at the top of the +filesystem, with all other directories branching out beneath it in a “file +tree”.</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 “routing” 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 +“single user mode”, 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 +“server” to multiple “clients”. 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 “signals”, +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 +“kde” series, networking packages in the “n” 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 “binary” 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 “undefined”); it is, in +fact, the “.1” 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 “virtual” 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 +“widgets” such as scrollbars, checkboxes, etc. and construct a graphical +interface. The GUI toolkit used by a program often defines its “look and +feel”.</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 “VESA” 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 GENERAL PUBLIC LICENSE<br /> +<br /> +Version 2, June 1991<br /> +Copyright (C) 1989, 1991 Free Software Foundation, Inc.<br /> + +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA<br /> + +Everyone is permitted to copy and distribute verbatim copies of this<br /> + +license document, but changing it is not 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 “Program”, below, refers to any such program or work, and a +“work based on the Program” 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 +“modification”.) Each licensee is addressed as “you”.</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 “any later version”, +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 “AS IS” 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 “copyright” line and a pointer to where +the full notice is found.</p> + +<table border="0" bgcolor="#E0E0E0" width="100%"> +<tr> +<td> +<pre class="PROGRAMLISTING"> +<one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 “copyright disclaimer” 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. + + <signature of Ty Coon>, 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> + |