diff options
Diffstat (limited to 'slackbook/html/book.html')
-rw-r--r-- | slackbook/html/book.html | 13511 |
1 files changed, 0 insertions, 13511 deletions
diff --git a/slackbook/html/book.html b/slackbook/html/book.html deleted file mode 100644 index c0803a78..00000000 --- a/slackbook/html/book.html +++ /dev/null @@ -1,13511 +0,0 @@ -<!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> - |