summaryrefslogtreecommitdiffstats
path: root/book.html
diff options
context:
space:
mode:
Diffstat (limited to 'book.html')
-rw-r--r--book.html2560
1 files changed, 2560 insertions, 0 deletions
diff --git a/book.html b/book.html
new file mode 100644
index 0000000..2b91276
--- /dev/null
+++ b/book.html
@@ -0,0 +1,2560 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>The Slack Book</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book" title="The Slack Book"><div class="titlepage"><div><div><h1 class="title"><a name="id54440"></a>The Slack Book</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#id335177">Foreward</a></span></dt><dd><dl><dt><span class="section"><a href="#id337010">Intended Audience</a></span></dt><dt><span class="section"><a href="#id316534">Why A New Slackware Book?</a></span></dt><dt><span class="section"><a href="#id330458">Conventions Used in this Book</a></span></dt><dt><span class="section"><a href="#id335728">Acknowledgements</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id317008">1. Introduction to Slackware</a></span></dt><dd><dl><dt><span class="section"><a href="#id311524">Why Use Slackware?</a></span></dt><dt><span class="section"><a href="#id311677">Differences with other Linux Distributions</a></span></dt><dt><span class="section"><a href="#id341400">Licensing</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id297229">2. Installation</a></span></dt><dd><dl><dt><span class="section"><a href="#id352319">Booting the Installer</a></span></dt><dt><span class="section"><a href="#id330240">Partitioning</a></span></dt><dt><span class="section"><a href="#id326672">The <span class="application">setup</span> Program</a></span></dt><dd><dl><dt><span class="section"><a href="#id326687">Help</a></span></dt><dt><span class="section"><a href="#id326694">Keymap</a></span></dt><dt><span class="section"><a href="#id326702">Addswap</a></span></dt><dt><span class="section"><a href="#id326709">Target</a></span></dt><dt><span class="section"><a href="#id326717">Source</a></span></dt><dt><span class="section"><a href="#id326724">Select</a></span></dt><dt><span class="section"><a href="#id326732">Install</a></span></dt><dt><span class="section"><a href="#id326739">Configure</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#id297222">3. Booting</a></span></dt><dd><dl><dt><span class="section"><a href="#id357891"><span class="application">mkinitrd</span></a></span></dt><dt><span class="section"><a href="#id326605">LILO</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id288954">4. Basic Shell Commands</a></span></dt><dd><dl><dt><span class="section"><a href="#id326497">System Documentation</a></span></dt><dt><span class="section"><a href="#id330395">Dealing with Files and Directories</a></span></dt><dd><dl><dt><span class="section"><a href="#id330401"><span class="application">Listing Files and Directory Contents</span></a></span></dt><dt><span class="section"><a href="#id351195">Moving Around the Filesystem</a></span></dt><dt><span class="section"><a href="#id354028">File and Directory Creation and Deletion</a></span></dt></dl></dd><dt><span class="section"><a href="#id354344">Reading Documents</a></span></dt><dt><span class="section"><a href="#id354528">Linking</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id336592">5. The Bourne Again Shell</a></span></dt><dd><dl><dt><span class="section"><a href="#id282479">What Is A Shell?</a></span></dt><dt><span class="section"><a href="#id314358">Environment Variables</a></span></dt><dt><span class="section"><a href="#id313824">Wildcards</a></span></dt><dt><span class="section"><a href="#id335881">Tab Completion</a></span></dt><dt><span class="section"><a href="#id354670">Input and Output Redirection</a></span></dt><dt><span class="section"><a href="#id354937">Terminals</a></span></dt><dt><span class="section"><a href="#id355019">Customization</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id325945">6. The X Window System</a></span></dt><dd><dl><dt><span class="section"><a href="#id358884">What Is (And Isn't) X</a></span></dt><dt><span class="section"><a href="#id320754">Configuring the X Server</a></span></dt><dt><span class="section"><a href="#id314642">Choosing a Window Manager</a></span></dt><dt><span class="section"><a href="#id351028">Setting Up A Graphical Login</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id292994">7. Printing</a></span></dt><dd><dl><dt><span class="section"><a href="#id337782">Choosing A Printer</a></span></dt><dt><span class="section"><a href="#id357050">Setting Up a Printer in CUPS</a></span></dt><dt><span class="section"><a href="#id322037">Commandline Printing Tools</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id337784">8. Users and Groups</a></span></dt><dd><dl><dt><span class="section"><a href="#id359209">What Are Users and Groups?</a></span></dt><dt><span class="section"><a href="#id341153">Managing Users and Groups</a></span></dt><dt><span class="section"><a href="#id359270">Other User and Group Tools</a></span></dt><dt><span class="section"><a href="#id321249">Managing Users and Groups Manually</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id290832">9. Filesystem Permissions</a></span></dt><dd><dl><dt><span class="section"><a href="#id312644">Permissions Overview</a></span></dt><dt><span class="section"><a href="#id336783"><span class="application">chmod</span>,
+<span class="application">chown</span>, and
+<span class="application">chgrp</span></a></span></dt><dt><span class="section"><a href="#id342316">SUID, SGID, and the "Sticky" Bit</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id283108">10. Working with Filesystems</a></span></dt><dd><dl><dt><span class="section"><a href="#id325517">The Filesystem Hierarchy</a></span></dt><dt><span class="section"><a href="#id318597">Local Filesystem Types</a></span></dt><dd><dl><dt><span class="section"><a href="#id318610">ext2</a></span></dt><dt><span class="section"><a href="#id318624">ext3</a></span></dt><dt><span class="section"><a href="#id318642">reiserfs</a></span></dt><dt><span class="section"><a href="#id318656">XFS</a></span></dt><dt><span class="section"><a href="#id318671">JFS</a></span></dt><dt><span class="section"><a href="#id318685">iso9660</a></span></dt><dt><span class="section"><a href="#id318711">vfat</a></span></dt><dt><span class="section"><a href="#id355976">swap</a></span></dt></dl></dd><dt><span class="section"><a href="#id355992">Using <span class="application">mount</span></a></span></dt><dt><span class="section"><a href="#id360747">Network Filesystems</a></span></dt><dd><dl><dt><span class="section"><a href="#id360758">NFS</a></span></dt><dt><span class="section"><a href="#id360899">SMB</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#id282063">11. <span class="application">vi</span></a></span></dt><dd><dl><dt><span class="section"><a href="#id352102">What is <span class="application">vi</span>?</a></span></dt><dt><span class="section"><a href="#id314220">The Different Modes of <span class="application">vi</span></a></span></dt><dt><span class="section"><a href="#id317601">Opening, Saving, and Quitting</a></span></dt><dt><span class="section"><a href="#id320876">Moving Around</a></span></dt><dt><span class="section"><a href="#id342976">Editing A Document</a></span></dt><dt><span class="section"><a href="#id343009"><span class="application">vi</span> Cheat Sheet</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id342041">12. Emacs</a></span></dt><dd><dl><dt><span class="section"><a href="#id317667">No Idea</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id289613">13. Networking</a></span></dt><dd><dl><dt><span class="section"><a href="#id328201"><span class="application">netconfig</span></a></span></dt><dt><span class="section"><a href="#id310624">Manual Configuration</a></span></dt><dt><span class="section"><a href="#id319849">Automatic Configuration with rc.inet1.conf</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id329344">14. Wireless Networking</a></span></dt><dd><dl><dt><span class="section"><a href="#id326142"><span class="application">iwconfig</span></a></span></dt><dt><span class="section"><a href="#id359178">Wired Equivilant Protection (or Lack Thereof)</a></span></dt><dt><span class="section"><a href="#id334833">WPA</a></span></dt><dt><span class="section"><a href="#id334290">rc.inet1.conf revisited</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id284408">15. Basic Networking Commands</a></span></dt><dd><dl><dt><span class="section"><a href="#id348624">Network Diagnostic Tools</a></span></dt><dt><span class="section"><a href="#id333340">Web Browsers</a></span></dt><dt><span class="section"><a href="#id351638">FTP Clients</a></span></dt><dt><span class="section"><a href="#id317884">NNTP Clients</a></span></dt><dt><span class="section"><a href="#id341101">Remote Access</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id320396">16. Package Management</a></span></dt><dd><dl><dt><span class="section"><a href="#id358328"><span class="application">pkgtool</span></a></span></dt><dt><span class="section"><a href="#id352958">Installing, Removing, and Upgrading Packages</a></span></dt><dt><span class="section"><a href="#id341343"><span class="application">pkgtool</span></a></span></dt></dl></dd><dt><span class="chapter"><a href="#id292742">17. Keeping Track of Updates</a></span></dt><dd><dl><dt><span class="section"><a href="#id314047">The -stable Branch</a></span></dt><dt><span class="section"><a href="#id324804">Upgrading Slackware Versions</a></span></dt></dl></dd><dt><span class="chapter"><a href="#id328461">18. The Linux Kernel</a></span></dt><dd><dl><dt><span class="section"><a href="#id322300">What Does the Kernel Do?</a></span></dt><dt><span class="section"><a href="#id325022">Working with Modules</a></span></dt><dt><span class="section"><a href="#id353213">Compiling A Kernel and Why to do So</a></span></dt></dl></dd></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>4.1. <a href="#id333534">Man Page Sections</a></dt><dt>9.1. <a href="#id337693">Permissions of /bin/ls</a></dt><dt>9.2. <a href="#id330724">Octal Permissions</a></dt><dt>9.3. <a href="#id342090">Alphabetic Permissions</a></dt><dt>9.4. <a href="#id342158">Alphabetic Users and Groups</a></dt><dt>9.5. <a href="#id342457">SUID, SGID, and "Sticky" Permissions</a></dt><dt>10.1. <a href="#id336627">Filesystem Layout</a></dt><dt>10.2. <a href="#id356105">Common mount options</a></dt><dt>11.1. <a href="#id348996">vi cursor movement</a></dt><dt>11.2. <a href="#id343030">vi Cheat Sheet</a></dt></dl></div><div class="preface" title="Foreward"><div class="titlepage"><div><div><h2 class="title"><a name="id335177"></a>Foreward</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id337010">Intended Audience</a></span></dt><dt><span class="section"><a href="#id316534">Why A New Slackware Book?</a></span></dt><dt><span class="section"><a href="#id330458">Conventions Used in this Book</a></span></dt><dt><span class="section"><a href="#id335728">Acknowledgements</a></span></dt></dl></div><div class="section" title="Intended Audience"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id337010"></a>Intended Audience</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Why A New Slackware Book?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id316534"></a>Why A New Slackware Book?</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Conventions Used in this Book"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id330458"></a>Conventions Used in this Book</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Acknowledgements"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id335728"></a>Acknowledgements</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div></div><div class="chapter" title="Chapter 1. Introduction to Slackware"><div class="titlepage"><div><div><h2 class="title"><a name="id317008"></a>Chapter 1. Introduction to Slackware</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id311524">Why Use Slackware?</a></span></dt><dt><span class="section"><a href="#id311677">Differences with other Linux Distributions</a></span></dt><dt><span class="section"><a href="#id341400">Licensing</a></span></dt></dl></div><div class="section" title="Why Use Slackware?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id311524"></a>Why Use Slackware?</h2></div></div></div><p>
+Slackware has a long tradition of excellence. Started in 1992 and
+first released in 1993, Slackware is the oldest surviving commercial
+Linux distribution. Slackware's focus on making a clean, simple Linux
+distribution that is as UNIX-like as possible makes it a natural choice
+for those people who really want to learn about Linux and other
+UNIX-like operating systems. Slackware's simplicity makes it ideal for
+those users who want to create their own custom systems. And of course,
+Slackware is great in its own right as a desktop, workstation, or server.
+</p></div><div class="section" title="Differences with other Linux Distributions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id311677"></a>Differences with other Linux Distributions</h2></div></div></div><p>
+There are a great number of differences between Slackware and other
+main-stream distributions such as Red Hat, Debian, and Ubuntu. Perhaps
+the greatest difference is the lack of "hand-holding" that Slackware
+will do for the administrator. Many of these other distributions ship
+with graphical configuration tools for all manner of services. In many
+cases these configuration tools are the preferred method of setting up
+applications on these systems and will over-write any changes you make
+to the config files via other means. These tools often make it easy
+(or at least possible) for a rookie with no in-depth understanding of
+his system to setup basic services; however, they also make it
+difficult to do anything too out of the ordinary. In contrast,
+Slackware expects you, the system administrator, to do these tasks on
+your own. Slackware provides no general purpose setup tools beyond
+those included with the source code published by up-stream developers.
+This means there is often a somewhat steeper learning curve associated
+with Slackware, even for those users familiar with other Linux
+distributions, but also makes it much easier to do whatever you want
+with your operating system.
+</p><p>
+Also, you may hear users of other distributions say that Slackware has
+no package management system. This is completely and obviously false.
+Slackware has always had package management (see Chapter 16 for more
+information). What it does not have is automatic dependency
+resolution. Rather, Slackware's package tools trade dependency
+management for simplicity, ease-of-use, and reliability.
+</p></div><div class="section" title="Licensing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341400"></a>Licensing</h2></div></div></div><p>
+Each piece of Slackware (indeed of all Linux distributions) is
+developed by different people or teams of people, and each group has
+their own ideas about what it means to be "free". Because of this
+there are literally dozens and dozens of different licenses granting
+you different permissions regarding their use or distribution.
+</p><p>
+Perhaps the most popular license in use within the Free Software
+community is the GNU General Public License.
+The GPL was created by the Free Software
+Foundation which actively works to create and distribute software that
+contains the basic freedoms they fill are basic rights. Indeed, this
+is the very group that coined the term "Free Software". The GPL
+imposes no restrictions on the use of software. In fact, you don't
+even have to accept the terms of the license in order to use the
+software, but you are not allowed to distribute the software or your
+changes to it without abiding by the terms of the license agreement. A
+great many software projects shipped with Slackware from the Linux
+kernel itself to the Samba project are released under the terms of the
+GPL.
+</p><p>
+Another very common license is the BSD license, which is arguably "more
+free" than the GPL, but imposes no restrictions on derivative works.
+The BSD license simply requires that the copyright remain intact, along
+with a simple disclaimer. Many of the utilities specific to Slackware
+are licensed with a BSD-style license.
+</p></div></div><div class="chapter" title="Chapter 2. Installation"><div class="titlepage"><div><div><h2 class="title"><a name="id297229"></a>Chapter 2. Installation</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id352319">Booting the Installer</a></span></dt><dt><span class="section"><a href="#id330240">Partitioning</a></span></dt><dt><span class="section"><a href="#id326672">The <span class="application">setup</span> Program</a></span></dt><dd><dl><dt><span class="section"><a href="#id326687">Help</a></span></dt><dt><span class="section"><a href="#id326694">Keymap</a></span></dt><dt><span class="section"><a href="#id326702">Addswap</a></span></dt><dt><span class="section"><a href="#id326709">Target</a></span></dt><dt><span class="section"><a href="#id326717">Source</a></span></dt><dt><span class="section"><a href="#id326724">Select</a></span></dt><dt><span class="section"><a href="#id326732">Install</a></span></dt><dt><span class="section"><a href="#id326739">Configure</a></span></dt></dl></dd></dl></div><p>
+Slackware's installation is a bit more simplistic than many other Linux
+distributions use, and is very reminiscent of installing one of the
+varieties of BSD operating systems. If you're familiar with those, you
+should feel right at home. If you've never installed Slackware or used
+a distribution that makes use of a non-graphical installer, you may
+feel a bit overwhelmed. Don't panic. The installation is very easy
+once you understand it, and works on just about any x86 platform.
+</p><p>
+The latest versions of Slackware Linux are distributed on DVD or CD
+media, but Slackware can be installed in a variety of other ways. This
+book will only focus on the most common way: installing via optical
+media. In order to install Slackware, you'll need at least an Intel
+486 or equivilant CPU, but we recommend you obtain a 586 or better CPU
+if at all possible. Slackware can be pared down to run on as little as
+32 MB of RAM (or even less), but with the size of the 2.6 kernel and
+user-space applications, you will find yourself having a much easier
+time if you have a minimum of 64 MB of RAM. If you wish to use
+anything older than these, you might want to obtain an older copy of
+Slackware which will perform better with fewer CPU Megahertz and less
+RAM.
+</p><div class="section" title="Booting the Installer"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id352319"></a>Booting the Installer</h2></div></div></div><p>
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+</p></div><div class="section" title="Partitioning"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id330240"></a>Partitioning</h2></div></div></div><p>
+Unlike many other Linux distributions, Slackware does not make use of a
+graphical disk partitioning tool in its installer. Rather, Slackware
+makes use of <span class="application">fdisk</span>(8) and
+<span class="application">cfdisk</span>(8), both console tools.
+<span class="application">cfdisk</span> is a curses-based partitioning tool
+while <span class="application">fdisk</span> is not. Whichever you choose to
+use should only rarely matter. In this book, we'll only discuss
+<span class="application">fdisk</span>.
+</p><p>
+In order to partition your hard drive, you'll first need to know how to
+identify it. In Linux, all hardware is identified by a special file
+called a device file. These are all (typically) located in the
+<code class="filename">/dev</code> directory. If your hard drive is IDE, you
+will most likely find it as <code class="filename">/dev/hda</code>; however,
+many hard drives today including SATA disks are identified as SCSI
+devices by the kernel. If you don't know what your hard drive is
+identified in Linux as, <span class="application">fdisk</span> can help you
+out.
+</p><pre class="screen"><code class="prompt">root@slackware:/# </code><strong class="userinput"><code>fdisk -l</code></strong>
+
+Disk /dev/sda: 72.7 GB, 72725037056 bytes
+255 heads, 63 sectors/track, 8841 cylinders
+Units = cylinders of 16065 * 512 = 8225280 bytes
+</pre><p>
+Here, you can see that my system has a hard drive located at
+<code class="filename">/dev/sda</code> that is 72.7 GB in size. You can also
+see some additional info about this hard drive. (In my case, this is
+actually three SCSI hard drives on a hardware RAID controller that
+makes them appear as a single drive.) The [-l] argument to
+<span class="application">fdisk</span> tells it to display the hard drives
+and all the partitions it finds on those drives, but won't make any
+changes to the disks. In order to actually partition our drives, we'll
+have to tell <span class="application">fdisk</span> what drive to operate on.
+</p><pre class="screen"><code class="prompt">root@slackware:/# </code><strong class="userinput"><code>fdisk /dev/sda</code></strong>
+
+The number of cylinders for this disk is set to 8841.
+There is nothing wrong with that, but this is larger than 1024,
+and could in certain setups cause problems with:
+1) software that runs at boot time (e.g., old versions of LILO)
+2) booting and partitioning software from other OSs
+ (e.g., DOS FDISK, OS/2 FDISK)
+
+Command (m for help):
+</pre><p>
+Now we've told fdisk what disk we wish to partition and it has dropped
+us into command mode after printing an annoying warning message. The
+1024 cylinder limit has not been a problem for some time, and
+Slackware's boot loader will have no trouble booting disks larger than
+this. Typing [m] and hitting ENTER will print out a helpful
+message telling you what to do with <span class="application">fdisk</span>.
+</p><pre class="screen">Command (m for help): <strong class="userinput"><code>m</code></strong>
+
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+FILL THIS IN! FILL THIS IN!
+
+</pre><p>
+Now that we know what commands will do what, it's time to begin to
+partition our drive. At a minimum, you will need a single
+<code class="filename">/</code> partition and should create a swap partition.
+You might also want to make a seperate <code class="filename">/home</code>
+partition for storing user files (this will make it easier to upgrade
+later, or install a different Linux operating system by keeping all of
+your users' files on a seperate partition). So, let's go ahead and
+make three partitions. The command to create a new partition is
+ [n] (which you would have noticed if you read the help).
+</p><pre class="screen">Command: (me for help): <strong class="userinput"><code>n</code></strong>
+Command action
+ e extended
+ p primary partition (1-4)
+<strong class="userinput"><code>p</code></strong>
+Partition number (1-4): <strong class="userinput"><code>1</code></strong>
+First cylinder (1-8841, default 1): <strong class="userinput"><code>1</code></strong>
+Last cylinder or +size or +sizeM or +sizeK (1-8841, default 8841): <strong class="userinput"><code>+8G</code></strong>
+
+Command (m for help): n
+Command action
+ e extended
+ p primary partition (1-4)
+<strong class="userinput"><code>p</code></strong>
+Partition number (1-4): <strong class="userinput"><code>2</code></strong>
+First cylinder (975-8841, default 975): <strong class="userinput"><code>975</code></strong>
+Last cylinder or +size or +sizeM or +sizeK (975-8841, default 8841): <strong class="userinput"><code>+1G</code></strong>
+</pre><p>
+Here we have created two partitions. The first is 8GB in size and the
+second is only 1GB. We can view our existing partitions with the
+[p] command.
+</p><pre class="screen"> Command (m for help): <strong class="userinput"><code>p</code></strong>
+
+Disk /dev/sda: 72.7 GB, 72725037056 bytes
+255 heads, 63 sectors/track, 8841 cylinders
+Units = cylinders of 16065 * 512 = 8225280 bytes
+
+ Device Boot Start End Blocks Id System
+/dev/sda1 1 974 7823623+ 83 Linux
+/dev/sda2 975 1097 987997+ 83 Linux
+
+</pre><p>
+Both of these partitions are of type "83" which is the standard Linux
+filesystem. We will need to change <code class="filename">/dev/sda2</code> to
+type "82" in order to make this a swap partition. We will do this with
+the [t] command.
+</p><pre class="screen">Command (m for help): <strong class="userinput"><code>t</code></strong>
+Partition number (1-4): <strong class="userinput"><code>2</code></strong>
+Hex code (type L to list codes): <strong class="userinput"><code>82</code></strong>
+
+Command (me for help): <strong class="userinput"><code>p</code></strong>
+
+Disk /dev/sda: 72.7 GB, 72725037056 bytes
+255 heads, 63 sectors/track, 8841 cylinders
+Units = cylinders of 16065 * 512 = 8225280 bytes
+
+ Device Boot Start End Blocks Id System
+/dev/sda1 1 974 7823623+ 83 Linux
+/dev/sda2 975 1097 987997+ 82 Linux swap
+
+</pre><p>The swap partition is a special partition that is used for
+virtual memory by the Linux kernel. If for some reason you run out of
+RAM, the kernel will move the contents of some of the RAM to swap in
+order to prevent a crash. The size of your swap partition is up to
+you. A great many people have participated have participated in a
+great many flamewars on the size of swap partitions, but a good rule of
+thumb is to make your swap partition about twice the size of your
+system's RAM. Since my machine has only 512MB of RAM, I decided to
+make my swap partition 1GB. You may wish to experiment with your swap
+partition's size and see what works best for you, but generally there
+is no harm in having "too much" swap.
+</p><p>
+At this point we can stop, write these changes to the disk, and
+continue on, but I'm going to go ahead and make a third partition which
+will be mounted at <code class="filename">/home</code>.
+</p><pre class="screen">Command: (me for help): <strong class="userinput"><code>n</code></strong>
+Command action
+ e extended
+ p primary partition (1-4)
+<strong class="userinput"><code>p</code></strong>
+Partition number (1-4): <strong class="userinput"><code>3</code></strong>
+First cylinder (1098-8841, default 1098): <strong class="userinput"><code>1098</code></strong>
+Last cylinder or +size or +sizeM or +sizeK (1098-8841, default 8841): <strong class="userinput"><code>8841</code></strong>
+</pre><p>
+Now it's time to finish up and write these changes to disk.
+</p><pre class="screen">Command: (me for help): <strong class="userinput"><code>w</code></strong>
+The partition table has been altered!
+
+Calling ioctl() to re-read partition table.
+Synching disks.
+<code class="prompt">root@slackware:/# </code>
+</pre><p>
+At this point, we are through partitioning our disks and are ready to
+begin the <span class="application">setup</span> program. However, if you
+have created any extended partitions, you may wish to reboot once to
+ensure that they are properly read by the kernel.
+</p></div><div class="section" title="The setup Program"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id326672"></a>The <span class="application">setup</span> Program</h2></div></div></div><div class="section" title="Help"><div class="titlepage"><div><div><h3 class="title"><a name="id326687"></a>Help</h3></div></div></div></div><div class="section" title="Keymap"><div class="titlepage"><div><div><h3 class="title"><a name="id326694"></a>Keymap</h3></div></div></div></div><div class="section" title="Addswap"><div class="titlepage"><div><div><h3 class="title"><a name="id326702"></a>Addswap</h3></div></div></div></div><div class="section" title="Target"><div class="titlepage"><div><div><h3 class="title"><a name="id326709"></a>Target</h3></div></div></div></div><div class="section" title="Source"><div class="titlepage"><div><div><h3 class="title"><a name="id326717"></a>Source</h3></div></div></div></div><div class="section" title="Select"><div class="titlepage"><div><div><h3 class="title"><a name="id326724"></a>Select</h3></div></div></div></div><div class="section" title="Install"><div class="titlepage"><div><div><h3 class="title"><a name="id326732"></a>Install</h3></div></div></div></div><div class="section" title="Configure"><div class="titlepage"><div><div><h3 class="title"><a name="id326739"></a>Configure</h3></div></div></div></div></div></div><div class="chapter" title="Chapter 3. Booting"><div class="titlepage"><div><div><h2 class="title"><a name="id297222"></a>Chapter 3. Booting</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id357891"><span class="application">mkinitrd</span></a></span></dt><dt><span class="section"><a href="#id326605">LILO</a></span></dt></dl></div><p>
+Ok, now that you've gotten Slackware installed on your system, you
+should learn exactly what controls the boot sequence of your machine,
+and how to fix it should you manage to break it somehow. Use Linux long
+enough, and sooner or later you will make a mistake that breaks your
+bootloader. Fortunately, this doesn't require a re-install to fix. Unlike
+many other operating systems that hide the underlying details of how they
+work, Linux (and in particular, Slackware) gives you full control over
+the boot process. Simply by editing a configuration file or two and
+re-running the boot-loader installer, you can quickly and easily change
+(or break) your system. Slackware even makes it easy to dual-boot
+between multiple operating systems such as other Linux distributions or
+Microsoft Windows.
+</p><div class="section" title="mkinitrd"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id357891"></a><span class="application">mkinitrd</span></h2></div></div></div><p>
+Before we go any further, a quick discussion on the Linux kernel is
+warranted. Slackware Linux includes several different kernels. While
+they are all compiled from the same source code, and hence are the
+"same", they are not identical. Depending on your architecture and
+Slackware version, the installer may have loaded your system with
+several kernels. There are kernels for single-processor
+systems and kernels for multi-processor systems. In the old days, there
+were tons of kernels for installing on different kinds of hard drive
+controllers. More importantly for our discussion, there are "huge"
+kernels and "generic" kernels.
+</p><p>
+If you look inside your <code class="filename">/boot</code> directory, you'll
+see the various kernels installed on your system.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /boot/vmlinuz*</code></strong>
+/boot/vmlinuz-huge-2.6.29.4 /boot/vmlinuz-generic-2.6.29.4
+</pre><p>
+Here you can see that I have two kernels installed,
+<code class="filename">vmlinuz-huge-2.6.29.4</code> and
+<code class="filename">vmlinuz-generic-2.6.29.4</code>. Each Slackware release
+includes different kernel versions and sometimes even slightly
+different names, so don't be alarmed if what you see doesn't exactly
+match what I have listed here.
+</p><p>
+Huge kernels are exactly what you might think; they're huge. These
+kernels are built to support nearly every conceivable computer
+Slackware is supported on. They most certainly contain support for
+hardware your machine does not, and never will, have. These are
+included for several reasons, but the most important perhaps is in use
+by the installer. These are the kernels the Slackware installation
+disks run. If you chose to let the installer configure your bootloader
+for you, it chooses to use these kernels due to the incredible variety
+of hardware they support. By contrast, the generic kernels support very
+little hardware without the use of external modules. If you want to use
+one of the generic kernels, you'll need to make use of something called
+an initrd, and the tool to make them,
+<span class="application">mkinitrd</span>(8).
+</p><p>
+So why should you use a generic kernel? Currently the Slackware
+development team recommends use of a generic kernel for a variety of
+reasons. Perhaps the most obvious is size. The huge kernels are
+currently about twice the size of the generic kernels before they are
+uncompressed and loaded into memory. If you are running an older
+machine, or one with some small ammount of RAM, you will appreciate the
+savings the generic kernels offer you. Other reasons are somewhat more
+difficult to quantify. Conflicts between drivers included in the huge
+kernels do appear from time-to-time, and generally speaking, the huge
+kernels do not perform as well as the generic ones. Also, by using the
+generic kernels, special arguments can be passed to hardware drivers
+seperately, rather than requiring these options be passed on the kernel
+command line. Some of the tools included with Slackware work better if
+your kernel uses some drivers as modules rather than "hard-coding" them
+into the kernel. If you're having trouble understanding this, don't be
+alarmed, just think "huge kernel: good, generic kernel: better".
+</p><p>
+Unfortunately, using the generic kernels isn't as straight-forward as
+using the huge kernels. In order for the generic kernel to boot your
+system, you must also usually include a few basic modules in an
+initird. Modules are pieces of compiled kernel code that can be
+inserted or removed from a running kernel. This makes the system
+somewhat more flexible at the cost of a tiny bit of added complexity.
+You might find it easier to think of modules as device drivers, at
+least for this section. Typically you will need to add the module for
+whatever filesystem you chose to use for your root partition during the
+installer. If your root partition is located on a SCSI disk or RAID
+controller, you'll need to load those modules as well. Finally, if
+you're using software RAID, disk encryption, or LVM, you'll also need
+to create an initrd whether you're using the generic kernel or not.
+</p><p>
+initrds are compressed <span class="application">cpio</span>(1) archives, so
+creating them isn't very straightforward. Fortunately for you,
+Slackware includes a tool that makes this very easy,
+<span class="application">mkinitrd</span>. A full discussion of
+<span class="application">mkinitrd</span> is a bit beyond the scope of this
+book, but we'll show you all the highlights. For a more complete
+explanation, check the manpage or run
+<span class="application">mkinitrd</span> with the [--help]
+argument.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mkinitrd --help</code></strong>
+mkinitrd creates an initial ramdisk (actually an initramfs cpio+gzip
+archive) used to load kernel modules that are needed to mount the
+root filesystem, or other modules that might be needed before the
+root filesystem is available. Other binaries may be added to the
+initrd, and the script is easy to modify. Be creative. :-)
+.... many more lines deleted ....
+</pre><p>
+When using <span class="application">mkinitrd</span>, you'll need to know a
+few items of information: your root partition, your root filesystem,
+any hard disk controllers you're using, and whether or not you're using
+LVM, software RAID, or disk encryption. Unless you're using some kind
+of SCSI controller (and have your root partition loaded on the SCSI
+controller), you should only need to know your root filesystem and
+partition type. Assuming you've booted into your Slackware installation
+using the huge kernel, you can easily find this information with the
+<span class="application">mount</span> command.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount</code></strong>
+/dev/sda1 on / type ext4 (rw,barrier=1,data=ordered)
+proc on /proc type proc (rw)
+sysfs on /sys type sysfs (rw)
+usbfs on /proc/bus/usb type usbfs (rw)
+/dev/sda2 on /home type jfs (rw)
+tmpfs on /dev/shm type tmpfs (rw)
+</pre><p>
+In the example provided, you can see that the root partition is located
+on <code class="filename">/dev/sda1</code> and is an ext4 type partition. If we
+want to create an initrd for this system, we simply need to tell this
+information to <span class="application">mkinird</span>.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mkinitrd -f ext4 -r /dev/sda1</code></strong>
+</pre><p>
+Note that in most cases, <span class="application">mkinitrd</span> is smart
+enough to determine this information on its own, but it never hurts to
+specify it manually. Now that we've created out initrd, we simply need
+to tell LILO where to find it. We'll focus on that in the next section.
+</p><p>
+Looking up all those different options for
+<span class="application">mkinitrd</span> or worse, memorizing them, can be a
+real pain though, especially if you try out different kernels
+consistently. This became tedious for the Slackware development team,
+so they came up with a simple configuration file,
+<code class="filename">mkinitrd.conf</code>(5). You can find a sample file that
+can be easily customized for your system under the
+<code class="filename">/etc</code> directory. Here's mine.
+</p><pre class="screen"># mkinitrd.conf.sample
+# See "man mkinitrd.conf" for details on the syntax of this file
+#
+SOURCE_TREE="/boot/initrd-tree"
+CLEAR_TREE="0"
+OUTPUT_IMAGE="/boot/initrd.gz"
+KERNEL_VERSION="$(uname -r)"
+#KEYMAP="us"
+MODULE_LIST="ext3:ext4:jfs"
+#LUKSDEV="/dev/hda1"
+ROOTDEV="/dev/raven/64root"
+ROOTFS="ext4"
+#RESUMEDEV="/dev/hda2"
+#RAID="0"
+LVM="1"
+#WAIT="1"
+</pre><p>
+For a complete description of each of these lines and what they do,
+you'll need to consulte the man page for
+<code class="filename">mkinitrd.conf</code>. Once each of these is setup, you
+need only run <span class="application">mkinitrd</span> with the
+ [-F] argument. A proper initrd file will be constructed and
+installed for you, without you having to remember all those obscure
+arguments.
+</p></div><div class="section" title="LILO"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id326605"></a>LILO</h2></div></div></div><p>
+LILO is the Linux Loader, and currently the default boot loader
+installed with Slackware Linux. If you've used other Linux
+distributions before, you may be more familiar with GRUB. If you prefer
+to use it, you can easily find it in the <code class="filename">extra/</code>
+directory on one of your Slackware CDs. Since LILO is the default
+Slackware bootloader however, we'll focus exclusively on it.
+</p><p>
+Configuring LILO can be a little daunting for new users, so Slackware
+comes with a special setup tool, <span class="application">liloconfig</span>.
+Normally, <span class="application">liloconfig</span> is first run by the
+installer, but you can run it at anytime from a terminal.
+</p><p>
+FILL THIS IN!!!! Picture of liloconfig
+</p><p>
+<span class="application">liloconfig</span> has two modes of operation:
+simple and expert. The simple mode tries to automatically configure
+lilo for you. If Slackware is the only operating system installed on
+your computer, the simple mode will almost always do the right thing
+quickly and easily. It is also very good at detecting Windows
+installations and adding them to the <code class="filename">lilo.conf</code>
+file so that you can choose which operating system to boot when you
+turn your computer on.
+</p><p>
+In order to use expert mode, you'll need to know Slackware's root
+partition. You can also setup other linux operating systems if you know
+their root partitions, but this may not work as well as you'd expect.
+<span class="application">liloconfig</span> will try to boot each linux
+operating system with Slackware's kernel, and this is probably not what
+you want. Fortunately, setting up Windows partitions in expert mode is
+trivial. One hint when using expert mode. You should almost always
+install LILO to the Master Boot Record (MBR). Once upon a time, it was
+recommended to install the boot loader onto the root partition and set
+that partition as bootable. Today, LILO has matured greatly and is safe
+to install on the MBR. In fact, you will encounter fewer problems if
+you do so.
+</p><p>
+<span class="application">liloconfig</span> is a great way to quickly setup
+your boot loader, but if you really need to know what's going on you'll
+need to look at LILO's configuration file,
+<code class="filename">lilo.conf</code>(5) under the <code class="filename">/etc</code>
+directory. The <code class="filename">lilo.conf</code> file is seperated into
+several sections. At the top you'll find a global section where you
+specify things like where to install LILO (generally the MBR), any
+special images or screens to show on boot, and the timeout after which
+LILO will boot the default operating system. Here's what the global
+section of my lilo.conf file looks like in part.
+</p><pre class="screen"># LILO configuration file
+
+boot = /dev/sda
+ bitmap = /boot/slack.bmp
+ bmp-colors = 255,0,255,0,255,0
+ bmp-table = 60,6,1,16
+ bmp-timer = 65,27,0,255
+
+append=" vt.default_utf8=0"
+prompt
+timeout = 50
+
+# VESA framebuffer console @ 1024x768x256
+vga = 773
+.... many more lines ommitted ....
+</pre><p>
+For a complete listing of all the possible LILO options, you should
+consult the man page for <code class="filename">lilo.conf</code>. In brief,
+we'll discuss the most common in this document.
+</p><p>
+The first thing that should draw your attention is the boot line. This
+determines where the bootloader is installed. In order to install the
+the MBR of your hard drive, you simply list the hard drive's device
+entry on this line. In my case, I'm using a SATA hard drive that shows
+up as SCSI device <code class="filename">/dev/sda</code>. If you're using an IDE
+drive, you will probably have to use <code class="filename">/dev/hda</code>. In
+order to install to the boot block of a partition, you'll have to list
+the partition's device entry. For example, if you are installing to the
+first partition on the only SATA hard drive in your computer, you would
+probably use <code class="filename">/dev/sda1</code>.
+</p><p>
+The prompt option simply tells LILO to ask (prompt) you for which
+operating system to boot. Operating systems are each listed in their
+own section deeper in the file. We'll get to them in a minute. The
+timeout option tells LILO how long to wait (in tenths of seconds)
+before booting the default OS. In my case, this is 5 seconds. Some
+systems seem to take a very long time to display the boot screen, so
+you may need to use a larger timeout value than I have set. This is in
+part why the simple LILO installation method utilizes a very long
+timeout (somewhere around 2 whole minutes). The append line in my case
+was setup by <span class="application">liloconfig</span>. You may (and
+probably should) see something similar when looking at your own
+<code class="filename">lilo.conf</code>. I won't go into the details of why this
+line is needed, so you're just going to have to trust me that things
+work better if it is present. :^)
+</p><p>
+Now that we've looked into the global section, let's take a look at the
+operating systems section. Each linux operating system section begins
+with an "image" line. Microsoft Windows operating systems are specified
+with an "other" line. Let's take a look at a sample
+<code class="filename">lilo.conf</code> that boots both Slackware and Microsoft
+Windows.
+</p><pre class="screen"># LILO configuration file
+... global section ommitted ....
+# Linux bootable partition config begins
+image = /boot/vmlinuz-generic-2.6.29.4
+ root = /dev/raven/64root
+ initrd = /boot/initrd.gz
+ label = Slackware64
+ read-only
+# Linux bootable partition config ends
+# Windows bootable partition config begins
+other = /dev/sda3
+ label = Windows
+ table = /dev/sda
+# Windows bootable partition config ends
+</pre><p>
+For Linux operating systems like Slackware, the image line specifies
+which kernel to boot. In this case, we're booting
+<code class="filename">/boot/vmlinuz-generic-2.6.29.4</code>. The remaining
+sections are pretty self-explainatory. The tell LILO where to find the
+root filesystem, what initrd (if any) to use, and to initially mount
+the root filesystem read-only. That initrd line is very important for
+anyone running a generic kernel, or using LVM or software RAID. It
+tells LILO (and the kernel) where to find the initrd you created using
+<span class="application">mkinitrd</span>.
+</p><p>
+Once you've gotten your <code class="filename">lilo.conf</code> setup for your
+machine, simply run <span class="application">lilo</span>(8) to install it.
+Unlike GRUB and other bootloaders, LILO requires you re-run
+<span class="application">lilo</span> anytime you make changes to its
+configuration file in order for those changes to be installed.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>lilo</code></strong>
+Warning: LBA32 addressing assumed
+Warning: '/proc/partitions' does not match '/dev' directory structure.
+ Name change: '/dev/dm-0' -&gt; '/dev/raven/swap'
+Warning: Name change: '/dev/dm-1' -&gt; '/dev/raven/root'
+Warning: Name change: '/dev/dm-2' -&gt; '/dev/raven/home'
+Warning: Name change: '/dev/dm-3' -&gt; '/dev/raven/src'
+Warning: Name change: '/dev/dm-4' -&gt; '/dev/raven/64root'
+Added Slackware *
+Added Backup
+6 warnings were issued.
+</pre><p>
+Don't be scared by many of the warnings you may see when running
+<span class="application">lilo</span>. In my case, most of these warnings are
+issued by the use of LVM. Unless you see a fatal error, things should
+be just fine.
+</p></div></div><div class="chapter" title="Chapter 4. Basic Shell Commands"><div class="titlepage"><div><div><h2 class="title"><a name="id288954"></a>Chapter 4. Basic Shell Commands</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id326497">System Documentation</a></span></dt><dt><span class="section"><a href="#id330395">Dealing with Files and Directories</a></span></dt><dd><dl><dt><span class="section"><a href="#id330401"><span class="application">Listing Files and Directory Contents</span></a></span></dt><dt><span class="section"><a href="#id351195">Moving Around the Filesystem</a></span></dt><dt><span class="section"><a href="#id354028">File and Directory Creation and Deletion</a></span></dt></dl></dd><dt><span class="section"><a href="#id354344">Reading Documents</a></span></dt><dt><span class="section"><a href="#id354528">Linking</a></span></dt></dl></div><p>
+So you've installed Slackware and you're staring at a terminal prompt,
+what now? Now would be a good time to learn about the basic command
+line tools. And since you're staring at a blinking curser, you
+probably need a little assistance in knowing how to get around, and
+that is what this chapter is all about.
+</p><div class="section" title="System Documentation"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id326497"></a>System Documentation</h2></div></div></div><p>
+Your Slackware Linux system comes with lots of built-in documentation
+for nearly every installed application. Perhaps the most common method
+of reading system documentation is by using the
+<span class="application">man</span>(1). <span class="application">man</span>
+(short for manual) will bring up the included man-page for any
+application, system call, configuration file, or library you tell it
+too. For example, <strong class="userinput"><code>man man</code></strong> will bring up the
+man-page for <span class="application">man</span> itself.
+</p><p>
+Unfortunately, you may not always know what application you need to use
+for the task at hand. Thankfully, <span class="application">man</span> has
+built-in search abilities. Using the [-k] switch
+will cause <span class="application">man</span> to search for every man-page
+that matches your search terms.
+</p><p>
+The man-pages are organized into groups or sections by their content
+type. For example, section 1 is for user applications.
+<span class="application">man</span> will search each section in order and
+display the first match it finds. Sometimes you will find that a
+man-page exists in more than one section for a given entry. In that
+case, you will need to specify the exact section to look in. In this
+book, all applications and a number of other things will have a number
+on their right-hand side in parenthesis. This number is the man page
+section where you will find information on that tool.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>man -k printf</code></strong>
+printf (1) - format and print data
+printf (3) - formatted output conversion
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>man 3 printf</code></strong>
+</pre><div class="table"><a name="id333534"></a><p class="title"><b>Table 4.1. Man Page Sections</b></p><div class="table-contents"><table summary="Man Page Sections" border="0"><colgroup><col><col></colgroup><thead><tr><th>Section</th><th align="right">Contents</th></tr></thead><tbody><tr><td>1</td><td align="right">User Commands</td></tr><tr><td>2</td><td align="right">System Calls</td></tr><tr><td>3</td><td align="right">C Library Calls</td></tr><tr><td>4</td><td align="right">Devices</td></tr><tr><td>5</td><td align="right">File Formats / Protocols</td></tr><tr><td>6</td><td align="right">Games</td></tr><tr><td>7</td><td align="right">Conventions / Macro Packages</td></tr><tr><td>8</td><td align="right">System Administration</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="Dealing with Files and Directories"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id330395"></a>Dealing with Files and Directories</h2></div></div></div><div class="section" title="Listing Files and Directory Contents"><div class="titlepage"><div><div><h3 class="title"><a name="id330401"></a><span class="application">Listing Files and Directory Contents</span></h3></div></div></div><p>
+<span class="application">ls</span>(1) is used to list files and directories,
+their permissions, size, type, inode number, owner and group, and
+plenty of additional information. For example, let's list what's in
+the <code class="filename">/</code> directory for your new Slackware Linux system.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls /</code></strong>
+bin/ dev/ home/ lost+found/ mnt/ proc/ sbin/ sys/ usr/
+boot/ etc/ lib/ media/ opt/ root/ srv/ tmp/ var/
+</pre><p>Notice that each of the listings is a directory. These are
+easily distinguished from regular files due to the trailing /; standard
+files do not have a suffix. Additionally, executable files will have an
+asterisk suffix. But <span class="application">ls</span> can do so much
+more. To get a view of the permissions of a file or directory, you'll
+need to do a "long list".
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls -l /home/alan/Desktop</code></strong>
+-rw-r--r-- 1 alan users 15624161 2007-09-21 13:02 9780596510480.pdf
+-rw-r--r-- 1 alan users 3829534 2007-09-14 12:56 imgscan.zip
+drwxr-xr-x 3 alan root 168 2007-09-17 21:01 ipod_hack/
+drwxr-xr-x 2 alan users 200 2007-12-03 22:11 libgpod/
+drwxr-xr-x 2 alan users 136 2007-09-30 03:16 playground/
+</pre><p>
+A long listing lets you view the permisions, user and group ownership,
+file size, last modified date, and of course, the file name itself.
+Notice that the first two entires are files, and the last three are
+directories. This is denoted by the very first character on the line.
+Regular files get a "-"; directories get a "d". There are several
+other file types with their own denominators. Symbolic links for
+example will have an "l".
+</p><p>
+Lastly, we'll show you how to list dot-files, or hidden files. Unlike
+other operating systems such as Microsoft Windows, there is no special
+property that differentiates "hidden" files from "unhidden" files. A
+hidden file simply begins with a dot. To display these files along
+with all the others, you just need to pass the [-a] argument to
+<span class="application">ls</span>.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls -a</code></strong>
+.xine/ .xinitrc-backup .xscreensaver .xsession-errors SBo/
+.xinitrc .xinitrc-xfce .xsession .xwmconfig/ Shared/
+</pre><p>
+You also likely noticed that your files and directories appear in
+different colors. Many of the enhanced features of
+<span class="application">ls</span> such as these colors or the trailing
+characters indicating file-type are special features of the
+<span class="application">ls</span> program that are turned on by passing
+various arguments. As a convienience, Slackware sets up
+<span class="application">ls</span> to use many of these optional arguments
+by default. These are controlled by the LS_OPTIONS and LS_COLORS
+environment variables. We will talk more about environment variables
+in chapter 5.
+</p></div><div class="section" title="Moving Around the Filesystem"><div class="titlepage"><div><div><h3 class="title"><a name="id351195"></a>Moving Around the Filesystem</h3></div></div></div><p>
+<span class="application">cd</span> is the command used to change
+directories. Unlike most other commands, <span class="application">cd</span>
+is actually not it's own program, but is a shell built-in. Basically,
+that means <span class="application">cd</span> does not have its own man
+page. You'll have to check your shell's documentation for more details
+on the <span class="application">cd</span> you may be using. For the most
+part though, they all behave the same.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cd /</code></strong>
+<code class="prompt">darkstar:/$</code><strong class="userinput"><code>ls</code></strong>
+bin/ dev/ home/ lost+found/ mnt/ proc/ sbin/ sys/ usr/
+boot/ etc/ lib/ media/ opt/ root/ srv/ tmp/ var/
+<code class="prompt">darkstar:/$</code><strong class="userinput"><code>cd /usr/local</code></strong>
+<code class="prompt">darkstar:/usr/local$</code>
+</pre><p>
+Notice how the prompt changed when we changed directories? The default
+Slackware shell does this as a quick, easy way to see your current
+directory, but this is not actually a function of
+<span class="application">cd</span>. If your shell doesn't operate in this
+way, you can easily get your current working directory with the
+<span class="application">pwd</span>(1) command. (Most UNIX shells have
+configurable prompts that can be coaxed into providing this same
+functionality. In fact, this is another convience setup in the default
+shell for you by Slackware.)
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>pwd</code></strong>
+/usr/local
+</pre></div><div class="section" title="File and Directory Creation and Deletion"><div class="titlepage"><div><div><h3 class="title"><a name="id354028"></a>File and Directory Creation and Deletion</h3></div></div></div><p>
+While most applications can and will create their own files and
+directories, you'll often want to do this on your own. Thankfully,
+it's very easy using <span class="application">touch</span>(1) and
+<span class="application">mkdir</span>(1).
+</p><p>
+<span class="application">touch</span> actually modifies the timestamp on a
+file, but if that file doesn't exist, it will be created.
+</p><pre class="screen"><code class="prompt">darkstar:~/foo$ </code><strong class="userinput"><code>ls -l</code></strong>
+-rw-r--r-- 1 alan users 0 2008-01-18 15:01 bar1
+<code class="prompt">darkstar:~/foo$ </code><strong class="userinput"><code>touch bar2</code></strong>
+-rw-r--r-- 1 alan users 0 2008-01-18 15:01 bar1
+-rw-r--r-- 1 alan users 0 2008-01-18 15:05 bar2
+<code class="prompt">darkstar:~/foo$ </code><strong class="userinput"><code>touch bar1</code></strong>
+-rw-r--r-- 1 alan users 0 2008-01-18 15:05 bar1
+-rw-r--r-- 1 alan users 0 2008-01-18 15:05 bar2
+</pre><p>
+Note how <code class="filename">bar2</code> was created in our second command,
+and the third command simpl updated the timestamp on
+<code class="filename">bar1</code>
+</p><p>
+<span class="application">mkdir</span> is used for (obviously enough) making
+directories. <strong class="userinput"><code>mkdir foo</code></strong> will create the
+directory "foo" within the current working directory. Additionally,
+you can use the [-p] argument to create any
+missing parent directories.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>mkdir foo</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>mkdir /slack/foo/bar/</code></strong>
+mkdir: cannot create directory `/slack/foo/bar/': No such file or directory
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>mkdir -p /slack/foo/bar/</code></strong>
+</pre><p>
+In the latter case, <span class="application">mkdir</span> will first create
+"/slack", then "/slack/foo", and finally "/slack/foo/bar". If you
+failed to use the [-p] argument,
+<span class="application">man</span> would fail to create "/slack/foo/bar"
+unless the first two already existed, as you saw in the example.
+</p><p>
+Removing a file is as easy as creating one. The
+<span class="application">rm</span>(1) will remove a file (assuming of course
+that you have permission to do this). There are a few very common
+arguments to <span class="application">rm</span>. The first is
+ [-f] and is used to force the removal of a file
+that you may lack explicit permission to delete. The
+ [-r] argument will remove directories and their
+contents recursively.
+</p><p>
+There is another tool to remove directories, the humble
+<span class="application">rmdir</span>(1). <span class="application">rmdir</span>
+will only remove directories that are empty, and complain noisely about
+those that contain files or sub-directories.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls</code></strong>
+foo_1/ foo_2/
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls foo_1</code></strong>
+bar_1
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>rmdir foo_1</code></strong>
+rmdir: foo/: Directory not empty
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>rm foo_1/bar</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>rmdir foo_1</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls foo_2</code></strong>
+bar_2/
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>rm -fr foo_2</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls</code></strong>
+</pre></div></div><div class="section" title="Reading Documents"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id354344"></a>Reading Documents</h2></div></div></div><p>
+Traditionally, UNIX and UNIX-like operating systems are filled with
+text files that at some point in time the system's users are going to
+want to read. Naturally, there are plenty of ways of reading these
+files, and we'll show you the most common ones.
+</p><p>
+In the early days, if you just wanted to see the contents of a file
+(any file, whether it was a text file or some binary program) you would
+use <span class="application">cat</span>(1) to view them.
+<span class="application">cat</span> is a very simple program, which takes
+one or more files, concatenates them (hence the name) and sends them to
+the standard output, which is usually your terminal screen. This was
+fine when the file was small and wouldn't scroll off the screen, but
+inadequate for larger files as it had no built-in way of moving within
+a document and reading it a paragraph at a time. Today,
+<span class="application">cat</span> is still used quite extensively, but
+predominately in scripts or for joining two or more files into one.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat /etc/slackware-version</code></strong>
+Slackware 12.0.0
+</pre><p>
+Given the limitations of <span class="application">cat</span> some very
+intelligent people sat down and began to work on an application to let
+them read documents one page at a time. Naturally, such applications
+began to be known as "pagers". One of the earliest of these was
+<span class="application">more</span>(1), named because it would let you see
+"more" of the file whenever you wanted. <span class="application">more</span>
+will display the first few lines of a text file until your screen is
+full, then pause. Once you've read through that screen, you can
+proceed down one line by pressing ENTER, or an entire screen by
+pressing SPACE. <span class="application">more</span> is also capable of
+searching through a text file for keywords. Once you've displayed a
+file in <span class="application">more</span>, simply press the / key and
+enter a keyword. Upon pressing ENTER, the text will scroll until it
+finds the next match. This is clearly a big improvement over
+<span class="application">cat</span>, but still suffers from a serious flaw:
+<span class="application">more</span> is not able to scroll back up through
+the file to allow you to read something you might have missed. Clearly
+a better solution is called for.
+</p><p>
+In order to address the short-comings of
+<span class="application">more</span>, a new pager was developed and
+ironically dubbed <span class="application">less</span>(1).
+<span class="application">less</span> is a very powerful pager that supports
+all of the functions of <span class="application">more</span> while adding
+lots of additional features. To begin with,
+<span class="application">less</span> allows you to use your arrow keys to
+controll movement within the document. Due to its popularity, many
+Linux distributions have begun to exclude
+<span class="application">more</span> in favor of
+<span class="application">less</span>. Slackware includes both. Moreover,
+Slackware also includes a handy little pre-processor for
+<span class="application">less</span> called
+<code class="filename">lesspipe.sh</code>. This allows a user to exectute
+<span class="application">less</span> on a number of non-text files.
+<code class="filename">lesspipe.sh</code> will generate text output from running
+a command on these files, and display it in
+<span class="application">less</span>.
+</p></div><div class="section" title="Linking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id354528"></a>Linking</h2></div></div></div><p>
+Links are a method of referring to one file by more than one name. By
+using the <span class="application">ln</span>(1) application, a user can
+reference one file with more than one name. The two files are not
+carbon-copies of one another, but rather are the exact same file, just
+with a different name. To remove the file entirely, all of its names
+must be deleted. (This is actually the result of the way that
+<span class="application">rm</span> and other tools like it work. Rather
+than remove the contents of the file, they simply remove the reference
+to the file, freeing that space to be re-used.
+<span class="application">ln</span> will create a second reference or "link"
+to that file.)
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ln /etc/slackware-version foo</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat foo</code></strong>
+Slackware 12.0.0
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls -l /etc/slackware-version foo</code></strong>
+-rw-r--r-- 1 root root 17 2007-06-10 02:23 /etc/slackware-version
+-rw-r--r-- 1 root root 17 2007-06-10 02:23 foo
+</pre><p>
+Another type of link exists, the symlink. Symlinks, rather than being
+another reference to the same file, are actually a special kind of file
+in their own right. These symlinks point to another file or directory.
+The primary advantage of symlinks is that they can refer to directories
+as well as files, and they can span multiple filesystems. These are
+created with the [-s] argument.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ln -s /etc/slackware-version foo</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat foo</code></strong>
+Slackware 12.0.0
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls -l /etc/slackware-version foo</code></strong>
+-rw-r--r-- 1 root root 17 2007-06-10 02:23 /etc/slackware-version
+lrwxrwxrwx 1 root root 22 2008-01-25 04:16 foo -&gt; /etc/slackware-version
+</pre><p>
+When using symlinks, remember that if the original file is deleted,
+your symlink is useless; it simply points at a file that doesn't exist
+anymore.
+</p></div></div><div class="chapter" title="Chapter 5. The Bourne Again Shell"><div class="titlepage"><div><div><h2 class="title"><a name="id336592"></a>Chapter 5. The Bourne Again Shell</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id282479">What Is A Shell?</a></span></dt><dt><span class="section"><a href="#id314358">Environment Variables</a></span></dt><dt><span class="section"><a href="#id313824">Wildcards</a></span></dt><dt><span class="section"><a href="#id335881">Tab Completion</a></span></dt><dt><span class="section"><a href="#id354670">Input and Output Redirection</a></span></dt><dt><span class="section"><a href="#id354937">Terminals</a></span></dt><dt><span class="section"><a href="#id355019">Customization</a></span></dt></dl></div><div class="section" title="What Is A Shell?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id282479"></a>What Is A Shell?</h2></div></div></div><p>
+Yeah, what exactly is a shell? Well, a shell is basically a
+command-line user environment. In essence, it is an application that
+runs when the user logs in and allows him to run additional
+applications. In some ways it is very similar to a graphical user
+interface, in that it provides a framework for executing commands and
+launching programs. There are many shells included with a full install
+of Slackware, but in this book we're only going to discuss
+<span class="application">bash</span>(1), the Bourne Again Shell. Advanced
+users might want to consider using the powerful
+<span class="application">zsh</span>(1), and users familiar with older UNIX
+systems might appreciate <span class="application">ksh</span>. The truly
+masochistic might choose the <span class="application">csh</span>, but new
+users should stick to <span class="application">bash</span>.
+</p></div><div class="section" title="Environment Variables"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id314358"></a>Environment Variables</h2></div></div></div><p>
+All shells make certain tasks easier for the user by keeping track of
+things in environment variables. An environment variable is simply a
+shorter name for some bit of information that the user wishes to store
+and make use of later. For example, the environment variable PS1 tells
+<span class="application">bash</span> how to format its prompt. Other
+variables may tell applications how to run. For example, the LESSOPEN
+variable tells <span class="application">less</span> to run that handy
+<code class="filename">lesspipe.sh</code> preprocessor we talked about, and
+LS_OPTIONS tuns on color for <span class="application">ls</span>.
+</p><p>
+Setting your own envirtonment variables is easy.
+<span class="application">bash</span> includes two built-in functions for
+handling this: <span class="application">set</span> and
+<span class="application">export</span>. Additionally, an environment
+variable can be removed by using <span class="application">unset</span>.
+(Don't panic if you accidently unset an environment variable and don't
+know what it would do. You can reset all the default variables by
+logging out of your terminal and logging back in.) You can reference a
+variable by placing a dollar sign ($) in front of it.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>set FOO=bar</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo $FOO</code></strong>
+bar
+</pre><p>
+The primary difference between <span class="application">set</span> and
+<span class="application">export</span> is that
+<span class="application">export</span> will (naturally) export the variable
+to any sub-shells. (A sub-shell is simply another shell running inside
+a parent shell.) You can easily see this behavior when working with
+the PS1 variable that controls the <span class="application">bash</span>
+prompt.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>set PS1='FOO '</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>export PS1='FOO '</code></strong>
+<code class="prompt">FOO </code>
+</pre><p>
+There are many important environment variables that
+<span class="application">bash</span> and other shells use, but one of the
+most important ones you will run across is PATH. PATH is simply a list
+of directories to search through for applications. For example,
+<span class="application">top</span> is located at
+<span class="application">/usr/bin/top</span>(1). You could run it simply by
+specifying the complete path to it, but if
+<code class="filename">/usr/bin</code> is in your PATH variable,
+<span class="application">bash</span> will check there if you don't specify a
+complete path one your own. You will most likely first notice this
+when you attempt to run a program that is not in your PATH as a normal
+user, for instance, <span class="application">ifconfig</span>(8).
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ifconfig</code></strong>
+bash: ifconfig: command not found
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo $PATH</code></strong>
+/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/opt/www/htdig/bin:.
+</pre><p>
+Above, you see a typical PATH for a mortal user. You can change it on
+your own the same as any other environment variable. If you login as
+root however, you'll see that root has a different PATH.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>su -</code></strong>
+Password:
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>echo $PATH</code></strong>
+/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/opt/www/htdig/bin
+</pre></div><div class="section" title="Wildcards"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id313824"></a>Wildcards</h2></div></div></div><p>
+Wildcards are special characters that tell the shell to match certain
+criteria. If you have experience with DOS, you'll recognize * as a
+wildcard that matches anything. <span class="application">bash</span> makes
+use of this wildcard and several others to enable you to easily define
+exactly what you want to do.
+</p><p>
+This first and most common of these is, of course, *. The asterisk
+matches any character or combination of characters, including none.
+Thus <strong class="userinput"><code>b*</code></strong> would match any files named b, ba, bab,
+babc, bcdb, and so forth. Slightly less common is the ?. This
+wildcard matches one instance of any character, so
+<strong class="userinput"><code>b?</code></strong> would match ba and bb, but not b or bab.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>touch b ba bab</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls *</code></strong>
+b ba bab
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls b?</code></strong>
+ba
+</pre><p>
+No, the fun doesn't stop there! In addition to these two we also have
+the bracket pair "[ ]" which allows us to fine tune exactly what we
+want to match. Whenever <span class="application">bash</span> see the
+bracket pair, it substitues the contents of the bracket. Any
+combination of letters or numbers may be specified in the bracket as
+long as they are comma seperacted. Additionally, ranges of numbers and
+letters may be specified as well. This is probably best shown by
+example.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls a[1-4,9]</code></strong>
+a1 a2 a3 a4 a9
+</pre><p>
+Since Linux is case-sensitive, capital and lower-case letters are
+treated differently. All capital letters come before all lower-case
+letters in "alphabetical" order, so when using ranges of capital and
+lower-case letters, make sure to get them right.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls 1[W-b]</code></strong>
+1W 1X 1Y 1Z 1a 1b
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls 1[w-B]</code></strong>
+/bin/ls: cannot access 1[b-W]: No such file or directory
+</pre><p>
+In the second example, 1[b-W] isn't a valid range, so the shell treats
+it as a filename, and since that file doesn't exist,
+<span class="application">ls</span> tells you so.
+</p></div><div class="section" title="Tab Completion"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id335881"></a>Tab Completion</h2></div></div></div><p>
+Still think there's entirely too much work involved with using
+wildcards? You're right. There's an even easier way when you're
+dealing with long filenames: tab completion. Tab completion enables
+you to type just enough of the filename to uniquely identify it, then
+by hitting the TAB key, <span class="application">bash</span> will fill in
+the rest for you. Even if you haven't typed in enough text to uniquely
+identify a filename, the shell will fill in as much as it can for you.
+Hitting TAB a second time will make it display a list of all possible
+matches for you.
+</p></div><div class="section" title="Input and Output Redirection"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id354670"></a>Input and Output Redirection</h2></div></div></div><p>
+One of the defining features of Linux and other UNIX-like operating
+systems is the number of small, relatively simple applications and the
+ability to stack them together to create complex systems. This is
+achieved by redirecting the output of one program to another, or by
+drawing input from a file or second program.
+</p><p>
+To get started, we're going to show you how to redirect the output of a
+program to a file. This is easily done with the '&gt;' character. When
+<span class="application">bash</span> sees the '&gt;' character, it redirects
+all of the standard output (also known as stdout) to whatever file name
+follows.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo foo</code></strong>
+foo
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo foo &gt; /tmp/bar</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat /tmp/bar</code></strong>
+foo
+</pre><p>
+In this example, we show you what <span class="application">echo</span> would
+do if its stdout was not redirected to a file, then we re-direct it to
+the <code class="filename">/tmp/bar</code> file. If <code class="filename">/tmp/bar</code>
+does not exist, it is created and the output from
+<span class="application">echo</span> is placed within it. If
+<code class="filename">/tmp/bar</code> did exist, then its contents are
+over-written. This might not be the best idea if you want to keep
+those contents in place. Thankfully, <span class="application">bash</span>
+supports '&gt;&gt;' which will append the output to the file.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo foo</code></strong>
+foo
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo foo &gt; /tmp/bar</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat /tmp/bar</code></strong>
+foo
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>echo foo2 &gt;&gt; /tmp/bar</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat /tmp/bar</code></strong>
+foo
+foo2
+</pre><p>
+You can also re-direct the standard error (or stderr) to a file. This
+is slightly different in that you must use '2&gt;' instead of just '&gt;'.
+(Since <span class="application">bash</span> can re-direct input, stdout, and
+stderr, each must be uniquely identifiable. 0 is input, 1 is stdout,
+and 2 is stderr. Unless one of these is specified,
+<span class="application">bash</span> will make its best guess as to what you
+actually meant, and assumed anytime you use '&gt;' you only want to
+redirect stdout. 1&gt; would have worked just as well.)
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>rm bar</code></strong>
+rm: cannot remove `bar': No such file or directory
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>rm bar 2&gt; /tmp/foo</code></strong>
+<code class="prompt">darkstar:~$ </code><strong class="userinput"><code>cat /tmp/foo</code></strong>
+rm: cannot remove `bar': No such file or directory
+</pre><p>
+You may also redirect the standard input (known as stdin) with the
+'&lt;'
+character, though it's not used very often.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>fromdos &lt; dosfile </code></strong>
+</pre><p>
+Finally, you can actually redirect the output of one program as input
+to another. This is perhaps the most useful feature of
+<span class="application">bash</span> and other shells, and is accomplished
+using the '|' character. (This character is referred to as 'pipe'.
+If you here some one talk of piping one program to another, this is
+exactly what they mean.)
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ps auxw | grep getty</code></strong>
+root 2632 0.0 0.0 1656 532 tty2 Ss+ Feb21 0:00 /sbin/agetty 38400 tty2 linux
+root 3199 0.0 0.0 1656 528 tty3 Ss+ Feb15 0:00 /sbin/agetty 38400 tty3 linux
+root 3200 0.0 0.0 1656 532 tty4 Ss+ Feb15 0:00 /sbin/agetty 38400 tty4 linux
+root 3201 0.0 0.0 1656 532 tty5 Ss+ Feb15 0:00 /sbin/agetty 38400 tty5 linux
+root 3202 0.0 0.0 1660 536 tty6 Ss+ Feb15 0:00 /sbin/agetty 38400 tty6 linux
+</pre></div><div class="section" title="Terminals"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id354937"></a>Terminals</h2></div></div></div><p>
+Slackware Linux and other UNIX-like operating systems allow users to
+interact with them in many ways, but the most common, and arguably the
+most useful, is the terminal. In the old days, terminals were keyboards
+and monitors (sometimes even mice) wired into a mainframe or server via
+serial connections. Today however, most terminals are virtual; that is,
+they exist only in software. Virtual terminals allow users to connect
+to the computer without requiring expensive and often incompatabile
+hardware. Rather, a user needs only to run the software and they are
+presented with a (usually) highly customizable virtual terminal.
+</p><p>
+The most common virtual terminals (in that every Slackware Linux machine
+is going to have at least one) are the gettys.
+<span class="application">agetty</span>(8) runs six instances by default on
+Slackware, and allows local users (those who can physically sit down in
+front of the computer and type at the keyboard) to login and run
+applications. Each of these gettys is available on different tty
+devices that are accessible seperately by pressing the
+<span class="keycap"><strong>ALT</strong></span> key and one of the function keys from
+<span class="keycap"><strong>F1</strong></span> through <span class="keycap"><strong>F6</strong></span>. Using these gettys
+allows you to login multiple times, perhaps as different users, and run
+applications in those users' shells silmutaneously. This is most
+commonly done with servers which do not have
+<span class="application">X</span> installed, but can be done on any machine.
+</p><p>
+On desktops, laptops, and other workstations where the user prefers a
+graphical interface provided by <span class="application">X</span>, most
+terminals are graphical. Slackware includes many different graphical
+terminals, but the most commonly used are KDE's
+<span class="application">konsole</span> and XFCE's
+<span class="application">Terminal</span>(1) as well as the old standby,
+xterm(1). If you are using a graphical interface, check your tool bars
+or menus. Each desktop environment or window manager has a virtual
+terminal (often called a terminal emulater), and they are all labelled
+differently. Typically though, you will find them under a "System"
+sub-menu in desktop environments. Executing any of these will give you
+a graphical terminal and automatically run your default shell.
+</p></div><div class="section" title="Customization"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id355019"></a>Customization</h2></div></div></div><p>
+By now you should be pretty familiar with
+<span class="application">bash</span> and you may have even noticed some odd
+behavior. For example, when you login at the console, you're presented
+with a prompt that looks a bit like this.
+</p><pre class="screen"><code class="prompt">alan@darkstar:~$ </code></pre><p>
+However, sometimes you'll see a much less helpful prompt like this one.
+</p><pre class="screen"><code class="prompt">bash-3.1$ </code></pre><p>
+The cause here is a special environment variable that controls the
+<span class="application">bash</span> prompt. Some shells are considered
+"login" shells and others are "interactive" shells, and both types read
+different configuration files when started. Login shells read
+<code class="filename">/etc/profile</code> and
+<code class="filename">~/.bash_profile</code> when executed. Interactive shells
+read <code class="filename">~/.bashrc</code> instead. This has some advantages
+for power users, but is a common annoyance for many new users who want
+the same environment anytime they execute
+<span class="application">bash</span> and don't care about the difference
+between login and interactive shells. If this applies to you, simply
+edit your own ~/.bashrc file and include the following lines.
+(For more information on
+the different configuration files used, read the INVOCATION section of
+the <span class="application">bash</span> man page.)
+</p><pre class="screen">
+# ~/.bashrc
+. /etc/profile
+. ~/.bash_profile
+</pre><p>
+When using the above, all your login and interactive shells will have
+the same environment settings and behave identically. Now, anytime we
+wish to customize a shell setting, we only have to edit
+<code class="filename">~/.bash_profile</code> for user-specific changes and
+<code class="filename">/etc/profile</code> for global settings. Let's start by
+configuring the prompt.
+</p><p>
+<span class="application">bash</span> prompts come in all shapes, colors, and
+sizes, and every user has their own preferances. Personally, I prefer
+short and simple prompts that take up a minimum of space, but I've seen
+and used mutli-line prompts many times. One personal friend of mine
+even included ASCII-art in his bash prompt. To change your prompt you
+need only to change your PS1 variable. By default, Slackware attempts
+to configure your PS1 variable thusly:
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code>echo $PS1
+\u@\h:\w\$ </pre><p>
+Yes, this tiny piece of funny-looking figures controls your
+<span class="application">bash</span> prompt. Basicaly, every character in
+the PS1 variable is included in the prompt, unless it is a escaped by a
+<span class="keycap"><strong>\</strong></span>, which tells <span class="application">bash</span> to
+interpret it. There are many different escape sequences and we can't
+discuss them all, but I'll explain these. The first "\u" translates to
+the username of the current user. "\h" is the hostname of the machine
+the terminal is attached to. "\w" is the current working directory, and
+"\$" displays either a <span class="keycap"><strong>#</strong></span> or a <span class="keycap"><strong>$</strong></span> sign,
+depending on whether or not the current user is root. A complete
+listing of all prompt escape sequences is listed in the
+<span class="application">bash</span> man page under the PROMPTING section.
+</p><p>
+Since we've gone through all this trouble to discuss the default
+prompt, I thought I'd take some time to show you a couple example
+prompts and the PS1 variable values needed to use them.
+</p><pre class="screen"><code class="prompt">Wed Jan 14 12:08 AM
+alan@raven:~$ </code>echo $PS1
+\d \@\n\u@\h:\w$
+<code class="prompt">HOST: raven - JOBS: 0 - TTY: 3
+alan@~/Desktop/sb_3.0:$ </code>echo $PS1
+HOST: \H - JOBS: \j - TTY: \l\n\u@\w:\$
+</pre><p>
+For even more information on configuring your bash prompt, including
+information on setting up colored prompts, refer to
+<code class="filename">/usr/doc/Linux-HOWTOs/Bash-Prompt-HOWTO</code>. After
+reading that for a short while, you'll get an idea of just how powerful
+your <span class="application">bash</span> prompts can be. I once even had a
+prompt that gave me up to date weather information such as temperature
+and barometric pressure!
+</p></div></div><div class="chapter" title="Chapter 6. The X Window System"><div class="titlepage"><div><div><h2 class="title"><a name="id325945"></a>Chapter 6. The X Window System</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id358884">What Is (And Isn't) X</a></span></dt><dt><span class="section"><a href="#id320754">Configuring the X Server</a></span></dt><dt><span class="section"><a href="#id314642">Choosing a Window Manager</a></span></dt><dt><span class="section"><a href="#id351028">Setting Up A Graphical Login</a></span></dt></dl></div><div class="section" title="What Is (And Isn't) X"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id358884"></a>What Is (And Isn't) X</h2></div></div></div><p>
+Eons ago computer terminals came with a screen and a keyboard and not
+much else. Mice hadn't come into common use and everything was menu
+driven. Then came the Graphical User Interface (GUI) and the world was
+changed. Today users are accustomed to moving a mouse around a screen,
+clicking on icons and running tasks with fancy images and animation,
+but UNIX systems predated this and so GUIs were added almost as an
+afterthought. For many years, Linux and its UNIX brethren were
+primarily used without graphics of any sort, but today it is perhaps
+more common than not for users to prefer their Linux computers come
+with shiney, flashy, clickable GUIs, and all these GUIs run on
+<span class="application">X</span>(7).
+</p><p>
+So what is X? Is it the desktop with the icons? Is it the menus? Is it
+the window manager? Does it mark the spot? The answer to all these is a
+resounding "no". There are many parts to a GUI, but X is the most
+fundamental. X is that application that receives input from the mouse,
+keyboard, and possibly other devices. X is that application that tells
+the graphics card what to do. In short, X is the application that talks
+to your computer's hardware from graphical purposes; all other
+graphical applications simply talk to X.
+</p><p>
+Let's stop for a moment and talk about nomenclature. X is just one of a
+dozen names that you may encounter. It is also called X11, the X Window
+System, X Window, X11R6, X Version 11, and several others. Whatever
+you hear it called, simply understand that the speakers are referring
+to X.
+</p></div><div class="section" title="Configuring the X Server"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id320754"></a>Configuring the X Server</h2></div></div></div><p>
+As powerful as Slackware Linux is, configuring X can be daunting and
+is often one of the first real challenges a new user faces. Don't be
+overly concerned if you find this a bit difficult. While many changes
+have been made over the years that make this much easier, there are
+still computers out there that don't properly auto-detect, or you'll
+wish to make some change to some setting and it might not be immediately
+apparent what to do. Just remember that when I started using X, it was
+far more primitive than it is today, took far more work to configure,
+and often crashed without telling the user what was wrong. If I and
+thousands of others got this working back then, you can do it today.
+Fortunately, Slackware includes a default configuration file that works
+for most computers by using the VESA standard. This offers only the
+most basic functions and may not allow your graphics card to operate at
+its full potential. You may be limited to low resolutions, fewer
+colors, and <span class="application">X</span> will be slower. Still, this is
+an option for users, particularly those who only want to occassionally
+run <span class="application">X</span>. You can try it out now simply by
+running <span class="application">startx</span>(1) from a command prompt.
+</p><p>
+There are many ways to configure <span class="application">X</span>, but the
+easiest is to use <span class="application">xorgsetup</span>. This will attempt
+to probe probe your computer's hardware and write a working xorg.conf
+file. This option is not garaunteed to work; there are some platforms
+that it is known not to work with, and there are probably others as
+well. Still, it is worth trying first as it is the quickest and least
+complicated for a new user to attempt.
+</p><p>
+The second most popular way to configure <span class="application">X</span>
+on your system is the handy <span class="application">xorgconfig</span>(1).
+This application asks you a series of questions about your computer's
+hardware and writes out a config file based on your choices. Unless you
+know exactly what your hardware is, we recommend that you try
+<span class="application">xorgsetup</span> first.
+</p><p>
+Lastly, you can manually configure your <span class="application">X</span>
+server by modifying <code class="filename">/etc/X11/xorg.conf</code> with a text
+editor. This is not normally a task for the faint of heart, but is
+often the easiest way to make minor changes.
+</p></div><div class="section" title="Choosing a Window Manager"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id314642"></a>Choosing a Window Manager</h2></div></div></div><p>
+Slackware Linux includes many different window managers and desktop
+environments. Window managers are the applications responsible for
+painting application windows on the screen, resizing these windows, and
+similar tasks. Desktop environments include a window manager, but also
+add task bars, menus, icons, and more. Slackware includes both the KDE
+and XFCE desktop environments and several additional window managers.
+Which you use is entirely your own decision, but in general, window
+managers tend to be faster than desktop environments and more suitable
+to older systems with less memory and slower processors. Desktop
+environments will be more comfortable for users accustomed to Microsoft
+Windows.
+</p><p>
+LIST OF DE'S AND WINDOW MANAGERS.
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+FILL THIS IN!!!!
+</p><p>
+The easiest way to choose a window manager is
+<span class="application">xwmconfig</span>(1), included with Slackware Linux.
+This application allows a user to choose what window manager to run
+with <span class="application">startx</span>.
+</p></div><div class="section" title="Setting Up A Graphical Login"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id351028"></a>Setting Up A Graphical Login</h2></div></div></div><p>
+By default, when you boot your Slackware Linux system you are presented
+with a login prompt on a virtual terminal. This is more than adequate
+for most people's needs. If you need to run commandline applications,
+you may login and do so right away. If you want to run X, simply executing
+<span class="application">startx</span> will do that for you nicely.
+But suppose you almost exclusively
+use your system for graphical duties like many laptop owners? Wouldn't
+it be nice for Slackware to take you straight into a GUI? Fortunately,
+there's an easy way to do just that.
+</p><p>
+Slackware uses the System V init system which allows the administrator
+to boot into or change to different runlevels, which are really just
+different "states" the computer can be in. In fact, shutting down the
+computer is really only a case of changing to a runlevel which
+accomplishes just that. Runlevels can be rather complicated, so we
+won't delve into them any further than necessary.
+</p><p>
+Runlevels are configured in <code class="filename">inittab</code>(5).
+The most common ones are
+runlevel 3 (Slackware's default) and runlevel 4 (GUI). In order to tell
+Slackware to boot to a GUI screen, simply open
+<code class="filename">/etc/inittab</code> with your
+favorite editor of choice. (You may wish to refer to one of the
+chapters on <span class="application">vi</span> or
+<span class="application">emacs</span> at this point.) Near the top, you'll
+see the relevant entries.
+</p><pre class="screen">
+# 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><p>
+In this file (along with most configuration files) anything following a
+hash symbol # is a comment and not interpreted by init(8). Don't worry
+if you don't understand everything about inittab, as many veteran users
+don't either. The only line we are interested in is the last on above.
+Simply change the 3 to a 4 and reboot.
+</p><pre class="screen">
+# 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:4:initdefault:
+</pre></div></div><div class="chapter" title="Chapter 7. Printing"><div class="titlepage"><div><div><h2 class="title"><a name="id292994"></a>Chapter 7. Printing</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id337782">Choosing A Printer</a></span></dt><dt><span class="section"><a href="#id357050">Setting Up a Printer in CUPS</a></span></dt><dt><span class="section"><a href="#id322037">Commandline Printing Tools</a></span></dt></dl></div><div class="section" title="Choosing A Printer"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id337782"></a>Choosing A Printer</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Setting Up a Printer in CUPS"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id357050"></a>Setting Up a Printer in CUPS</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Commandline Printing Tools"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id322037"></a>Commandline Printing Tools</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div></div><div class="chapter" title="Chapter 8. Users and Groups"><div class="titlepage"><div><div><h2 class="title"><a name="id337784"></a>Chapter 8. Users and Groups</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id359209">What Are Users and Groups?</a></span></dt><dt><span class="section"><a href="#id341153">Managing Users and Groups</a></span></dt><dt><span class="section"><a href="#id359270">Other User and Group Tools</a></span></dt><dt><span class="section"><a href="#id321249">Managing Users and Groups Manually</a></span></dt></dl></div><div class="section" title="What Are Users and Groups?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id359209"></a>What Are Users and Groups?</h2></div></div></div><p>
+Slackware Linux inherits a strong multi-user tradition from its UNIX
+inspiration. This means that multiple people may use the system at
+once, but it also means that each of these people may have different
+permissions. This allows users to prevent others from modifying their
+files, or lets system administrators explicitly define what users can
+and cannot do on the system. Moreover, users need not be actual people
+at all. In fact, Slackware includes several dozen pre-defined user
+and group accounts that are not typically used by regular users. Rather
+these accounts allow the system administrator to segment the system for
+security reasons. We'll see how that's done in the next chapter on
+filesystem permissions.
+</p></div><div class="section" title="Managing Users and Groups"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341153"></a>Managing Users and Groups</h2></div></div></div><p>
+The easiest way to add new users in Slackware is through the use of our
+very fine <span class="application">adduser</span> shell script.
+<span class="application">adduser</span> will prompt you to enter the details
+of the new user you wish to creature and step you through the process
+quickly and easily. It will even create a password for the new user.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>adduser</code></strong>
+
+Login name for new user []: <strong class="userinput"><code>david</code></strong>
+
+User ID ('UID') [ defaults to next available ]:
+
+Initial group [ users ]:
+Additional UNIX groups:
+
+Users can belong to additional UNIX groups on the system.
+For local users using graphical desktop login managers such
+as XDM/KDM, users may need to be members of additional groups
+to access the full functionality of removable media devices.
+
+* Security implications *
+Please be aware that by adding users to additional groups may
+potentially give access to the removable media of other users.
+
+If you are creating a new user for remote shell access only,
+users do not need to belong to any additional groups as standard,
+so you may press ENTER at the next prompt.
+
+Press ENTER to continue without adding any additional groups
+Or press the UP arrow to add/select/edit additional groups
+: <strong class="userinput"><code>audio cdrom floppy plugdev video</code></strong>
+
+Home directory [ /home/david ]
+
+Shell [ /bin/bash ]
+
+Expiry date (YYYY-MM-DD) []:
+
+New account will be created as follows:
+
+---------------------------------------
+Login name.......: david
+UID..............: [ Next available ]
+Initial group....: users
+Additional groups: audio,cdrom,floppy,plugdev,video
+Home directory...: /home/david
+Shell............: /bin/bash
+Expiry date......: [ Never ]
+
+This is it... if you want to bail out, hit Control-C. Otherwise, press
+ENTER to go ahead and make the account.
+
+
+Creating new account...
+
+
+Changing the user information for david
+Enter the new value, or press ENTER for the default
+ Full Name []:
+ Room Number []:
+ Work Phone []:
+ Home Phone []:
+ Other []:
+Changing password for david
+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><p>
+The addition of optional groups needs a little explaining. Every user
+in Slackware has a single group that it is always a member of. By
+default, this is the "users" group. However, users can belong to more
+than one group at a time and will inherit all the permissions of every
+group they belong to. Typical desktop users will need to add several
+group memberships in order to do things like play sound or access
+removeable media like cdroms or USB flash drives. You can simply press
+the up arrow key at this section and a list of default groups for
+desktop users will magically appear. You can of course, add to or
+remove groups from this listing.
+</p><p>
+Now that we've demonstrated how to use the interactive
+<span class="application">adduser</span> program, lets look at some powerful
+non-interactive tools that you may wish to use. The first is
+<span class="application">useradd</span>(8).
+<span class="application">useradd</span> is a little less friendly, but much
+faster for creating users in batches. This makes it ideal for use in
+shell scripts. In fact, <span class="application">adduser</span> is just such
+a shell script and uses <span class="application">useradd</span> for most of
+the heavy lifting. <span class="application">useradd</span> has many options
+and we can't explain them all here, so refer to its man page for the
+complete details. Now, let's make a new user.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>useradd -d /data/home/alan -s /bin/bash -g users -G audio,cdrom,floppy,plugdev,video alan</code></strong>
+</pre><p>
+Here I have added the user "alan". I specified the user's home
+directory as <code class="filename">/data/home/alan</code> and used
+<span class="application">bash</span> as my shell. Also, I specified my
+default group as "users" and added myself to a number of useful groups
+for dekstop use. You'll note that <span class="application">useradd</span>
+does not do any prompting like <span class="application">adduser</span>.
+Unless you want to accept the defaults for everything, you'll need to
+tell <span class="application">useradd</span> what to do.
+</p><p>
+Now that we know how to add users, we should learn how to add groups.
+As you might have guessed, the command for doing this is
+<span class="application">groupadd</span>(8).
+<span class="application">groupadd</span> works in the same way as
+<span class="application">useradd</span>, but with far fewer options. The
+following command adds the group "slackers" to the system.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>groupadd slackers</code></strong>
+</pre><p>
+Deleting users and groups is easy as well. Simply run the
+<span class="application">userdel</span>(8) and
+<span class="application">groupdel</span>(8) commands. By default,
+<span class="application">userdel</span> will leave the user's home directory
+on the system. You can remove this with the [-r] argument.
+</p></div><div class="section" title="Other User and Group Tools"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id359270"></a>Other User and Group Tools</h2></div></div></div><p>
+Several other tools exist for managing users and groups. Perhaps the
+most important one is <span class="application">passwd</span>(1). This
+command changes a user account's password. Normal users may change
+their own passwords only, but root can change anyone's password. Also,
+root can lock a user account with the [-l] argument. This
+doesn't actually shutout the account, but instead changes the user's
+encrypted password to a value that can't be matched.
+</p><p>
+Another useful tool is <span class="application">chsh</span>(1) which changes a
+user's default shell. Like <span class="application">passwd</span>, normal
+users can only change their own shell, but the root user can change
+anyone's.
+</p><p>
+The last tool we're going to discuss is
+<span class="application">chfn</span>(1). This is used to enter identifying
+information on the user such as his phone number and real name. This
+information is stored in the <code class="filename">passwd</code>(5) file and
+retrieved using <span class="application">finger</span>(1).
+</p></div><div class="section" title="Managing Users and Groups Manually"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id321249"></a>Managing Users and Groups Manually</h2></div></div></div><p>
+Like most things in Slackware Linux, users and groups are stored in
+plain-text files. This means that you can edit all the details of a
+user, or even create a new user or group simply by editing these files
+and doing a few other tasks like creating the user's home directory. Of
+course, after you see how this is done you'll appreciate just how
+simple the included tools make this task.
+</p><p>
+Our first stop is the <code class="filename">/etc/passwd</code> file. Here, all
+the information about a user is stored, except for (oddly enough) the
+user's password. The reason for this is rather simple.
+<code class="filename">/etc/passwd</code> must be readable by all users on the
+system, so you wouldn't want passwords stored there, even if they are
+encrypted. Let's take a quick look at my entry in this file.
+</p><pre class="screen">
+alan:x:1000:100:,,,:/home/alan:/bin/bash
+</pre><p>
+Each line in this file contains a number of fields seperated by a
+colon. They are, from left to right: username, password, UID, GUID, a
+comment field, home directory, and shell. You'll notice that the
+password field for every entry is an <span class="keycap"><strong>x</strong></span>. That is
+because Slackware uses shadow passwords, so the actual encrypted
+password is stored in <code class="filename">/etc/shadow</code>. Let's take a
+look there.
+</p><pre class="screen">
+alan:$1$HlR?M3fkL@oeJmsdLfhsLFM*4dflPh8:14197:0:99999:7:::
+</pre><p>
+The <code class="filename">shadow</code> file contains more than just the
+encrypted password as you'll notice. The fields here, again from left
+to right, are: username, encrypted password, last day the password was
+changed, days before the password may be changed again, how many days
+before the password expires, days that the account will be disabled
+after expiring, when the account was disabled, and a reserved field.
+You may notice on some accounts that the various "days" fields often
+include very large numbers. The reason for this is that Slackware
+counts time from the "Epoch" which is January 1, 1970 for historical
+reasons.
+</p><p>
+To create a new user account, you'll just need to open these files
+using <span class="application">vipw</span>(8). This will open
+<code class="filename">/etc/passwd</code> in the editor
+defined by your VISUAL variable or your EDITOR variable if VISUAL isn't
+defined. If neither is present, it will fall back to
+<span class="application">vi</span> by default. If you pass the [-s]
+argument, it will open <code class="filename">/etc/shadow</code> instead. It's
+important to use <span class="application">vipw</span> instead of using any
+other editor, because <span class="application">vipw</span> will lock the
+file and prevent other programs from editing it right underneath your feet.
+</p><p>
+That isn't all you'll need to do however; you must also create the
+user's home directory and change the user's password using
+<span class="application">passwd</span>.
+</p></div></div><div class="chapter" title="Chapter 9. Filesystem Permissions"><div class="titlepage"><div><div><h2 class="title"><a name="id290832"></a>Chapter 9. Filesystem Permissions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id312644">Permissions Overview</a></span></dt><dt><span class="section"><a href="#id336783"><span class="application">chmod</span>,
+<span class="application">chown</span>, and
+<span class="application">chgrp</span></a></span></dt><dt><span class="section"><a href="#id342316">SUID, SGID, and the "Sticky" Bit</a></span></dt></dl></div><div class="section" title="Permissions Overview"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id312644"></a>Permissions Overview</h2></div></div></div><p>
+As we've discussed, Slackware Linux is a multi-user operating system.
+Because of this, its filesystems are mutli-user as well. This means
+that every file or directory has a set of permissions that can grant or
+deny privileges to different users. There are three basic permissions
+and three sets of permissions for each file. Let's take a look at an
+example file.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls -l /bin/ls</code></strong>
+-rwxr-xr-x 1 root root 81820 2007-06-08 21:12 /bin/ls
+</pre><p>
+Recall from chapter 4 that <span class="application">ls</span> [-l]
+lists the permissions for a file or
+directory along with the user and group that "own" the file. In this
+case, the permissions are rwxr-xr-x, the user is root and the group is
+also root. The permissions section, while grouped together, is really
+three seperate pieces. The first set of three letters are the
+permissions granted to the user that owns the file. The second set of
+three are those granted to the group owner, and the final three are
+permissions for everyone else.
+</p><div class="table"><a name="id337693"></a><p class="title"><b>Table 9.1. Permissions of /bin/ls</b></p><div class="table-contents"><table summary="Permissions of /bin/ls" border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Set</th><th>Listing</th><th>Meaning</th></tr></thead><tbody><tr><td>Owner</td><td>rwx</td><td>The owner "root" may read, write, and execute</td></tr><tr><td>Group</td><td>r-x</td><td>The group "root" may read and execute</td></tr><tr><td>Others</td><td>r-x</td><td>Everyone else may read and execute</td></tr></tbody></table></div></div><br class="table-break"><p>
+The permissions are pretty self explainatory of course, at least for
+files. Read, write, and execute allow you to read a file, write to it,
+or execute it. But what do these permissions mean for directories?
+Simply put, the read permissions grants the ability to list the
+directory's contents (say with <span class="application">ls</span>). The write
+permission grants the ability to create new files in the directory as
+well as delete the entire directory, even if you otherwise wouldn't be
+able to delete some of the other files inside it. The execute
+permission grants the ability to actually enter the directory (with the
+<span class="application">bash</span> built-in command cd for example).
+</p><p>
+Let's look at the permissions on a directory now.
+</p><pre class="screen"><code class="prompt">darkstar:~$ </code><strong class="userinput"><code>ls -ld /home/alan</code></strong>
+drwxr-x--- 60 alan users 3040 2008-06-06 17:14 /home/alan/
+</pre><p>
+Here we see the permissions on my home directory and its ownership. The
+directory is owned by the user alan and the group users. The user is
+granted all rights (rwx), the group is granted only read and execute
+permissions (r-x), and everyone else is prohibited from doing anything.
+</p></div><div class="section" title="chmod, chown, and chgrp"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id336783"></a><span class="application">chmod</span>,
+<span class="application">chown</span>, and
+<span class="application">chgrp</span></h2></div></div></div><p>
+So now that we know what permissions are, how do we change them? And
+for that matter, how do we assign user and group ownership? The answer
+is right here in this section.
+</p><p>
+The first tool we'll discuss is the useful
+<span class="application">chown</span>
+(1) command. Using <span class="application">chown</span>, we can (you guessed
+it), change the ownership of a file or
+directory. <span class="application">chown</span> is historically used only
+to change the user ownership, but can change the group ownership as well.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /tmp/foo</code></strong>
+total 0
+-rw-r--r-- 1 alan users 0 2008-06-06 22:29 a
+-rw-r--r-- 1 alan users 0 2008-06-06 22:29 b
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>chown root /tmp/foo/a</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /tmp/foo</code></strong>
+total 0
+-rw-r--r-- 1 root users 0 2008-06-06 22:29 a
+-rw-r--r-- 1 alan users 0 2008-06-06 22:29 b
+</pre><p>
+By using a colon after the user account, you may also specify a new
+group account.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>chown root:root /tmp/foo/b</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code> ls -l /tmp/foo</code></strong>
+total 0
+-rw-r--r-- 1 root users 0 2008-06-06 22:29 a
+-rw-r--r-- 1 root root 0 2008-06-06 22:29 b
+</pre><p>
+<span class="application">chown</span> can also be used recursively to change
+the ownership of all files and directories below a target directory.
+The following command would change all the files under the directory
+<code class="filename">/tmp/foo</code> to have their ownership set to root:root.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>chown -R root:root /tmp/foo/b</code></strong></pre><p>
+Specifying a colon and a group name without a user name will simply
+change the group for a file and leave the user ownership intact.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>chown :wheel /tmp/foo/a</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /tmp/foo</code></strong>
+ls -l /tmp/foo
+total 0
+-rw-r--r-- 1 root wheel 0 2008-06-06 22:29 a
+-rw-r--r-- 1 root root 0 2008-06-06 22:29 b
+</pre><p>
+The younger brother of <span class="application">chown</span> is the
+slightly less useful <span class="application">chgrp</span>(1). This
+command works just like <span class="application">chown</span>, except
+it can only change the group
+ownership of a file. Since <span class="application">chown</span> can
+already do this, why bother with
+<span class="application">chgrp</span>? The answer is simple. Many other
+operating systems use a
+different version of <span class="application">chown</span> that cannot
+change the group ownership, so
+if you ever come across one of those, now you know how.
+</p><p>
+There's a reason we discussed changing ownership before changing
+permissions. The first is a much easier concept to grasp. The tool for
+changing permissions on a file or directory is
+<span class="application">chmod</span>(1). The syntax for it
+is nearly identical to that for <span class="application">chown</span>, but
+rather than
+specify a user or group, the administrator must specify either a set of
+octal permissions or a set of alphabetic permissions. Neither one is
+especially easy to grasp the first time. We'll begin with the less
+complicated octal permissions.
+</p><p>
+Octal permissions derive their name from being assigned by one of eight
+digits, namely the numbers 0 through 7. Each permissions is assigned a
+number that is a power of 2, and those numbers are added together to
+get the final permissions for one of the permission sets. If this
+sounds confusing, maybe this table will help.
+</p><div class="table"><a name="id330724"></a><p class="title"><b>Table 9.2. Octal Permissions</b></p><div class="table-contents"><table summary="Octal Permissions" border="1"><colgroup><col><col></colgroup><thead><tr><th>Permission</th><th>Meaning</th></tr></thead><tbody><tr><td>Read</td><td>4</td></tr><tr><td>Write</td><td>2</td></tr><tr><td>Execute</td><td>1</td></tr></tbody></table></div></div><br class="table-break"><p>
+By adding these values together, we can reach any number between 0 and
+7 and specify all possible permission combinations. For example, to
+grant both read and write privilages while denying execute, we would
+use the number 6. The number 3 would grant write and execute
+permissions, but deny the ability to read the file. We must specify a
+number for each of the three sets when using octal permissions. It's
+not possible to specify only a set of user or group permissions this
+way for example.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /tmp/foo/a</code></strong>
+-rw-r--r-- 1 root root 0 2008-06-06 22:29 a
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>chmod 750 /tmp/foo/a</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /tmp/foo/a</code></strong>
+-rwxr-x--- 1 root root 0 2008-06-06 22:29 a
+</pre><p>
+<span class="application">chmod</span> can also use letter values along with
+<span class="keycap"><strong>+</strong></span> or <span class="keycap"><strong>-</strong></span> to grant or deny permissions.
+While this may be easier to
+remember, it's often easier to use the octal permissions.
+</p><div class="table"><a name="id342090"></a><p class="title"><b>Table 9.3. Alphabetic Permissions</b></p><div class="table-contents"><table summary="Alphabetic Permissions" border="1"><colgroup><col><col></colgroup><thead><tr><th>Permission</th><th>Letter Value</th></tr></thead><tbody><tr><td>Read</td><td>r</td></tr><tr><td>Write</td><td>w</td></tr><tr><td>Execute</td><td>x</td></tr></tbody></table></div></div><br class="table-break"><div class="table"><a name="id342158"></a><p class="title"><b>Table 9.4. Alphabetic Users and Groups</b></p><div class="table-contents"><table summary="Alphabetic Users and Groups" border="1"><colgroup><col><col></colgroup><thead><tr><th>Accounts Affected</th><th>Letter Value</th></tr></thead><tbody><tr><td>User/Owner</td><td>u</td></tr><tr><td>Group</td><td>g</td></tr><tr><td>Others/World</td><td>o</td></tr></tbody></table></div></div><br class="table-break"><p>
+To use the letter values with <span class="application">chmod</span>, you
+must specify which set to use them with, either "u" for user, "g" for
+group, and "o" for all others. You must also specify whether you are
+adding or removing permissions with the "+" and "-" signs. Multiple
+sets can be changed at once by seperating each with a comma.
+</p><pre class="screen"><code class="prompt">darkstar:/tmp/foo# </code><strong class="userinput"><code>ls -l</code></strong>
+total 0
+-rw-r--r-- 1 alan users 0 2008-06-06 23:37 a
+-rw-r--r-- 1 alan users 0 2008-06-06 23:37 b
+-rw-r--r-- 1 alan users 0 2008-06-06 23:37 c
+-rw-r--r-- 1 alan users 0 2008-06-06 23:37 d
+<code class="prompt">darkstar:/tmp/foo# </code><strong class="userinput"><code>chmod u+x a</code></strong>
+<code class="prompt">darkstar:/tmp/foo# </code><strong class="userinput"><code>chmod g+w b</code></strong>
+<code class="prompt">darkstar:/tmp/foo# </code><strong class="userinput"><code>chmod u+x,g+x,o-r c</code></strong>
+<code class="prompt">darkstar:/tmp/foo# </code><strong class="userinput"><code>chmod u+rx-w,g+r,o-r d</code></strong>
+<code class="prompt">darkstar:/tmp/foo# </code><strong class="userinput"><code>ls -l</code></strong>
+-rwxr--r-- 1 alan users 0 2008-06-06 23:37 a*
+-rw-rw-r-- 1 alan users 0 2008-06-06 23:37 b
+-rwxr-x--- 1 alan users 0 2008-06-06 23:37 c*
+-r-xr----- 1 alan users 0 2008-06-06 23:37 d*
+</pre><p>
+Which you prefer to use is entirely up to you. There are places where
+one is better than the other, so a real Slacker will know both inside
+out.
+</p></div><div class="section" title='SUID, SGID, and the "Sticky" Bit'><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id342316"></a>SUID, SGID, and the "Sticky" Bit</h2></div></div></div><p>
+We're not quite done with permissions just yet. There are three other
+"special" permissions in addition to those mentioned above. They are
+SUID, SGID, and the sticky bit. When a file has one or more of these
+permissions set, it behaves in special ways. The SUID and SGID
+permissions change the way an application is run, while the sticky bit
+restricts deletion of files. These permissions are applied with
+<span class="application">chmod</span>
+like read, write, and execute, but with a twist.
+</p><p>
+SUID and SGID stand for "Set User ID" and "Set Group ID" respectively.
+When an application with one of these bits is set, the application runs
+with the user or group ownership permissions of that application
+regardless of what user actually
+executed it. Let's take a look at a common SUID application, the humble
+<span class="application">passwd</span> and the files it modifies.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -l /usr/bin/passwd \
+ /etc/passwd \
+ /etc/shadow</code></strong>
+-rw-r--r-- 1 root root 1106 2008-06-03 22:23 /etc/passwd
+-rw-r----- 1 root shadow 627 2008-06-03 22:22 /etc/shadow
+-rws--x--x 1 root root 34844 2008-03-24 16:11 /usr/bin/passwd*
+</pre><p>
+Notice the permissions on <span class="application">passwd</span>. Instead of
+an <span class="keycap"><strong>x</strong></span> in the user's execute slot, we have an
+<span class="keycap"><strong>s</strong></span>. This tells us that
+<span class="application">passwd</span> is a SUID program, and when we run
+it, the process will run as the user "root" rather than as the user
+that actually executed it. The reason for this is readily apparent as
+soon as you look at the two files it modifies. Neither
+<code class="filename">/etc/passwd</code> nor <code class="filename">/etc/shadow</code>
+are writeable by anyone other than root. Since users need to change
+their personal information, <span class="application">passwd</span> must be
+run as root in order to modify those files.
+</p><p>
+So what about the sticky bit? The sticky bit restricts the ability to
+move or delete files and is only ever set on directories. Non-root
+users cannot move or delete any files under a directory with the sticky
+bit set unless they are the owner of that file. Normally anyone with
+write permission to the file can do this, but the sticky bit prevents
+it for anyone but the owner (and of course, root). Let's take a look at
+a common "sticky" directory.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ls -ld /tmp</code></strong>
+drwxrwxrwt 1 root root 34844 2008-03-24 16:11 /tmp
+</pre><p>
+Naturally, being a directory for the storage of temporary files sytem
+wide, <code class="filename">/tmp</code> needs to be readable, writeable, and
+executable by anyone and everyone. Since any user is likely to have a
+file or two stored here at any time, it only makes good sense to
+prevent other users from deleting those files, so the sticky bit has
+been set. You can see it by the presence of the <span class="keycap"><strong>t</strong></span> in
+place of the <span class="keycap"><strong>x</strong></span> in the world permissions section.
+</p><div class="table"><a name="id342457"></a><p class="title"><b>Table 9.5. SUID, SGID, and "Sticky" Permissions</b></p><div class="table-contents"><table summary='SUID, SGID, and "Sticky" Permissions' border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Permission Type</th><th>Octal Value</th><th>Letter Value</th></tr></thead><tbody><tr><td>SUID</td><td>4</td><td>s</td></tr><tr><td>SGID</td><td>2</td><td>s</td></tr><tr><td>Sticky</td><td>1</td><td>t</td></tr></tbody></table></div></div><br class="table-break"><p>
+When using octal permissions, you must specify an additional leading
+octal value. For example, to recreate the permission on
+<code class="filename">/tmp</code>, we would use 1777. To recreate those
+permissions on <code class="filename">/usr/bin/passwd</code>, we would use 4711.
+Essentially, any time this leading fourth octet isn't specified,
+<span class="application">chmod</span> assumes its value to be 0.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>chmod 1777 /tmp</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>chmod 4711 /usr/bin/passwd</code></strong>
+</pre><p>
+Using the alphabetic permission values is slightly different. Assuming
+the two files above have permissions of 0000 (no permissions at all),
+here is how we would set them.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>chmod ug+rwx,o+rwt /tmp</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>chmod u+rws,go+x /usr/bin/passwd</code></strong>
+</pre></div></div><div class="chapter" title="Chapter 10. Working with Filesystems"><div class="titlepage"><div><div><h2 class="title"><a name="id283108"></a>Chapter 10. Working with Filesystems</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id325517">The Filesystem Hierarchy</a></span></dt><dt><span class="section"><a href="#id318597">Local Filesystem Types</a></span></dt><dd><dl><dt><span class="section"><a href="#id318610">ext2</a></span></dt><dt><span class="section"><a href="#id318624">ext3</a></span></dt><dt><span class="section"><a href="#id318642">reiserfs</a></span></dt><dt><span class="section"><a href="#id318656">XFS</a></span></dt><dt><span class="section"><a href="#id318671">JFS</a></span></dt><dt><span class="section"><a href="#id318685">iso9660</a></span></dt><dt><span class="section"><a href="#id318711">vfat</a></span></dt><dt><span class="section"><a href="#id355976">swap</a></span></dt></dl></dd><dt><span class="section"><a href="#id355992">Using <span class="application">mount</span></a></span></dt><dt><span class="section"><a href="#id360747">Network Filesystems</a></span></dt><dd><dl><dt><span class="section"><a href="#id360758">NFS</a></span></dt><dt><span class="section"><a href="#id360899">SMB</a></span></dt></dl></dd></dl></div><div class="section" title="The Filesystem Hierarchy"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id325517"></a>The Filesystem Hierarchy</h2></div></div></div><p>
+Slackware Linux stores all of its files and directories under a single
+<code class="filename">/</code> directory, typically referred to as "root". This
+is in stark contract to what you may be familiar with in the form of
+Microsoft Windows. Different hard disk partitions, cdroms, usb flash
+drives, and even floppy disks can all be mounted in directories under
+<code class="filename">/</code>, but do not have anything like "drive letters".
+The contents of these devices can be found almost anywhere, but there
+are some sane defaults that Slackware sets up for you. For example,
+cd-rw drives are most often found at <code class="filename">/mnt/cd-rw</code>.
+Here are a few common directories present on nearly all Slackware Linux
+installations, and what you can expect to find there.
+</p><div class="table"><a name="id336627"></a><p class="title"><b>Table 10.1. Filesystem Layout</b></p><div class="table-contents"><table summary="Filesystem Layout" border="1"><colgroup><col><col></colgroup><thead></thead><tbody><tr><td>/</td><td>The root directory, under which all others exist</td></tr><tr><td>/bin</td><td>Minimal set of binary programs for all users</td></tr><tr><td>/boot</td><td>The kernel, initrd, and other requirements for booting Slackware</td></tr><tr><td>/etc/</td><td>System configuration files</td></tr><tr><td>/dev</td><td>Collection of special files allowing direct access to hardware</td></tr><tr><td>/home</td><td>User directories where personal files and settings are stored</td></tr><tr><td>/media</td><td>Directory for auto-mounting features in DBUS/HAL</td></tr><tr><td>/mnt</td><td>Places to temporarily mount removable media</td></tr><tr><td>/opt</td><td>Directory where some (typicaly proprietary) software may be installed</td></tr><tr><td>/proc</td><td>Kernel exported filesystem for process information</td></tr><tr><td>/root</td><td>The root user's home directory</td></tr><tr><td>/sbin</td><td>Minimal set of system or superuser binaries</td></tr><tr><td>/srv</td><td>Site-specific data such as web pages served by this system</td></tr><tr><td>/sys</td><td>Special kernel implimentation details</td></tr><tr><td>/tmp</td><td>Directory reserved for temporary files for all users</td></tr><tr><td>/usr</td><td>All non-essential programs, libraries, and shared files</td></tr><tr><td>/var</td><td>Regularly changing data such as log files</td></tr></tbody></table></div></div><br class="table-break"></div><div class="section" title="Local Filesystem Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id318597"></a>Local Filesystem Types</h2></div></div></div><p>
+The Linux kernel supports a wide variety of filesystems, which allows
+you to choose from a long list of features to tailor to your particular
+need. Fortunately, most of the default filesystem types are adequate
+for any needs you may have. Some filesystems are geared towards
+particular media. For example, the iso9660 filesystem is used almost
+exclusively for CD and DVD media.
+</p><div class="section" title="ext2"><div class="titlepage"><div><div><h3 class="title"><a name="id318610"></a>ext2</h3></div></div></div><p>
+ext2 is the oldest filesystem included in Slackware Linux for storing
+data on hard disks. Compared to other filesystems, ext2 is simplistic.
+It is faster than most others for reading and writing data, but does
+not include any journaling capability. This means that after a hard
+crash, the filesystem must be exhaustively checked to discover and
+(hopefully) fix any errors.
+</p></div><div class="section" title="ext3"><div class="titlepage"><div><div><h3 class="title"><a name="id318624"></a>ext3</h3></div></div></div><p>
+ext3 is the younger cousin of ext2. It was designed to replace ext2 in
+most situations and shares much the same code-base, but adds journaling
+support. In fact, ext3 and ext2 are so much alike that it is possible
+to convert one to the other on the fly without lose of data. ext3
+enjoys a lot of popularity for these reasons. There are many tools
+available for recovering data from this filesystem in the event of
+catastrophic hardware failure as well. ext3 is a good general purpose
+filesystem with journaling support, but fails to perform as well as
+other journaling filesystems in specific cases. One pitfall to ext3 is
+that the filesystem must still go through this exhaustive check every
+so often. This is done when the filesystem is mounted, usually when the
+computer is booted, and causes an annoying delay.
+</p></div><div class="section" title="reiserfs"><div class="titlepage"><div><div><h3 class="title"><a name="id318642"></a>reiserfs</h3></div></div></div><p>
+reiserfs is one of the oldest journaling filesystems for the Linux
+kernel and has been supported by Slackware for many years. It is a very
+fast filesystem particularly well suited for storing, retrieving, and
+writing lots of small files. Unfortunately there are few tools for
+recovering data should you experience a drive failure, and reiserfs
+partitions experience corruption more often than ext3.
+</p></div><div class="section" title="XFS"><div class="titlepage"><div><div><h3 class="title"><a name="id318656"></a>XFS</h3></div></div></div><p>
+XFS was contributed to the Linux kernel by SGI and is one of the best
+filesystems for working with large volumes and large files. XFS uses
+more RAM than other filesystems, but if you need to work with large
+files its performance there is well worth the penalty in memory usage.
+XFS is not particularly ill-suited for desktop or laptop use, but
+really shines on a server that handles medium to large size files all
+day long. Like ext3, XFS is a fully journaled filesystem.
+</p></div><div class="section" title="JFS"><div class="titlepage"><div><div><h3 class="title"><a name="id318671"></a>JFS</h3></div></div></div><p>
+JFS was contributed to the Linux kernel by IBM and is well known for
+its responsiveness even under extreme conditions. It can span colossal
+volumes making it particularly well-suited for Network Attached Storage
+(NAS) devices. JFS's long history and thorough testing make it one of
+the most reliable journaling filesystems available for Linux.
+</p></div><div class="section" title="iso9660"><div class="titlepage"><div><div><h3 class="title"><a name="id318685"></a>iso9660</h3></div></div></div><p>
+iso9660 is a filesystem specifically designed for optical media such as
+CDs and DVDs. Since optical disks are read-only media, the linux kernel
+does not even include write support for this filesystem. In order to
+create an iso9660 filesystem, you must use user-land tools like
+<span class="application">mkisofs</span>(8) or
+<span class="application">growisofs</span>(8).
+</p></div><div class="section" title="vfat"><div class="titlepage"><div><div><h3 class="title"><a name="id318711"></a>vfat</h3></div></div></div><p>
+Sometimes you may need to share data between Windows and Linux
+computers, but can't transfer the files over a network. Instead you
+require a shared hard drive partition or a USB flash drive. The humble
+vfat filesystem is the best choice here since it is supported by the
+largest variety of operating systems. Unfortuantely, being a Microsoft
+designed filesystem, it does not store permissions in the same way as
+traditional Linux filesystems. This means that special options must be
+used to allow multiple users to access data on this filesystem.
+</p></div><div class="section" title="swap"><div class="titlepage"><div><div><h3 class="title"><a name="id355976"></a>swap</h3></div></div></div><p>
+Unlike other filesystems which hold files and directories, swap
+partitions hold virtual memory. This is very useful as it prevents the
+system from crashing should all your RAM be consumed. Instead, the
+kernel copies portions of the RAM into swap and frees them up for other
+applications to use. Think of it as adding virtual memory to your
+computer, very slow virtual memory. swap is typically a fail-safe and
+shouldn't be relied upon for continual use. Add more RAM to your system
+if you find yourself using lots of swap.
+</p></div></div><div class="section" title="Using mount"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id355992"></a>Using <span class="application">mount</span></h2></div></div></div><p>
+Now that we've learned what (some of) the different filesystems
+available in Linux are, it's time we looked at how to use them. In
+order to read or write data on a filesystem, that filesystem must first
+be mounted. To do this, we (naturally) use
+<span class="application">mount</span>(8). The first thing we must do is
+decide where we want the filesystem located. Recall that there are no
+such things are drive letters denoting filesystems in Linux. Instead,
+all filesystems are mounted on directories. The base filesystem on
+which you install Slackware is always located at <code class="filename">/</code>
+and others are always located in subdirectories of
+<code class="filename">/</code>. <code class="filename">/mnt/hd</code> is a common place
+to temporarily locate a partition, so we'll use that in our first
+example. In order to mount a filesystem's contents, we must tell mount
+what kind of filesystem we have, where to mount it, and any special
+options to use.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount -t ext3 /dev/hda3 /mnt/hd -o ro</code></strong>
+</pre><p>
+Let's disect this. We have an ext3 filesystem located on the third
+partition of the first IDE device, and we've decided to mount its
+contents on the directory <code class="filename">/mnt/hd</code>. Additionally,
+we have mounted it read-only so no changes can be made to these
+contents. The [-t ext3] argument tells
+<span class="application">mount</span>
+what type of filesystem we are using,
+in this case it is ext3. This lets the kernel know which driver to use.
+Often <span class="application">mount</span> can determine this for itself,
+but it never hurts to explicitly declare it. Second, we tell
+<span class="application">mount</span>
+where to locate the filesystem's contents. Here we've chosen
+<code class="filename">/mnt/hd</code>.
+Finally, we must decide what options to use if any. These are declared
+with the [-o] argument. A short-list of the most common
+options follows.
+</p><div class="table"><a name="id356105"></a><p class="title"><b>Table 10.2. Common mount options</b></p><div class="table-contents"><table summary="Common mount options" border="1"><colgroup><col><col></colgroup><thead></thead><tbody><tr><td>ro</td><td>read-only</td></tr><tr><td>rw</td><td>read-write (default)</td></tr><tr><td>uid</td><td>user to own the contents of the filesystem</td></tr><tr><td>gid</td><td>group to own the contents of the filesystem</td></tr><tr><td>noexec</td><td>prevent execution of any files on the filesystem</td></tr><tr><td>defaults</td><td>sane defaults for most filesystems</td></tr></tbody></table></div></div><br class="table-break"><p>
+If this is your first Linux installation, the only options you
+typically need to be concerned about are [ro] and
+ [rw]. The exception to this rule comes when you are dealing
+with filesystems that don't handle traditional Linux permissions such
+as vfat or NTFS. In those cases you'll need to use the [uid]
+or [gid] options to allow non-root users access to these
+filesystems.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount -t vfat /dev/hda4 /mnt/hd -o uid=alan</code></strong>
+</pre><p>
+But Alan, that's appalling! I don't want to have to tell mount what
+filesystem or options to use everytime I load a CD. It should be easier
+than that. Well thankfully, it is. The <code class="filename">/etc/fstab</code>
+file contains all this information for filesystems that the installer
+sets up for you, and you can make additions to it as well.
+<code class="filename">fstab</code>(5) looks like a simple table containing the
+device to mount along with its filesystem type and optional arguments.
+Let's take a look.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>cat /etc/fstab</code></strong>
+/dev/hda1 / reiserfs defaults 1 1
+/dev/hda2 /home reiserfs defaults 1 2
+/dev/hda3 swap swap defaults 0 0
+/dev/cdrom /mnt/cdrom auto noauto,owner,ro,users 0 0
+/dev/fd0 /mnt/floppy auto noauto,owner 0 0
+devpts /dev/pts devpts gid=5,mode=620 0 0
+proc /proc proc defaults 0 0
+</pre><p>
+If you have an entry in <code class="filename">fstab</code> for your filesystem, you
+need only tell mount the device node or the mount location.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount /dev/cdrom</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount /home</code></strong>
+</pre><p>
+One final use for
+<span class="application">mount</span>
+is to tell you what filesystems are currently mounted and with what
+options. Simply run
+<span class="application">mount</span>
+without any arguments to display these.
+</p></div><div class="section" title="Network Filesystems"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id360747"></a>Network Filesystems</h2></div></div></div><p>
+In addition to local filesystems, Slackware supports a number of network
+filesystems as both client and server. This allows you to share data
+between multiple computers transparently. We'll discuss the two most
+common: NFS and SMB.
+</p><div class="section" title="NFS"><div class="titlepage"><div><div><h3 class="title"><a name="id360758"></a>NFS</h3></div></div></div><p>
+NFS is the Network File System for Linux as well as several other common
+operating systems. It has modest performance but supports the full range of
+permissions for Slackware. In order to use NFS as either a client or a
+server, you must run the remote procedure call daemon. This is easily
+accomplished by setting the <code class="filename">/etc/rc.d/rc.rpc</code> file
+executable and telling it to start. Once it has been set executable, it
+will run automatically every time you boot into Slackware.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>chmod +x /etc/rc.d/rc.rpc</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>/etc/rc.d/rc.rpc start</code></strong>
+</pre><p>
+Mounting an NFS share is little different than mounting a local filesystem.
+Rather than specifying a local device, you must tell mount the domain name
+or IP address of the NFS server and the directory to mount with a colon
+between them.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount -t nfs darkstar.example.com:/home /home</code></strong>
+</pre><p>
+Running an NFS server is a little bit different. First, you must configure
+each directory to be exported in the <code class="filename">/etc/exports</code>
+file. <code class="filename">exports</code>(5) contains information about what
+directories will be shared, who they will be shared with, and what special
+permissions to grant or deny.
+</p><pre class="screen">
+# See exports(5) for a description.
+# This file contains a list of all directories exported to other computers.
+# It is used by rpc.nfsd and rpc.mountd.
+
+/home/backup 192.168.1.0/24(sync,rw,no_root_squash)
+</pre><p>
+The first column in
+<code class="filename">exports</code>
+is a list of the files to be exported via NFS. The second column is a list
+of what systems may access the export along with special permissions. You
+can specify hosts via domain name, IP address, or netblock address (as I
+have here). Special permissions are always a parenthetical list. For a
+complete list, you'll need to read the man page. For now, the only special
+option that matters is [no_root_squash]. Usually the root user on
+an NFS client cannot read or write an exported share. Instead, the root
+user is "squashed" and forced to act as the nobody user.
+ [no_root_squash] prevents this.
+</p><p>
+You'll also need to run the NFS daemon. Starting and stopping NFS server
+support is done with the <code class="filename">/etc/rc.d/rc.nfsd</code> rc script.
+Set it executable and run it just like we did for
+<code class="filename">rc.rpc</code> and you are ready to go.
+</p></div><div class="section" title="SMB"><div class="titlepage"><div><div><h3 class="title"><a name="id360899"></a>SMB</h3></div></div></div><p>
+SMB is the Windows network file-sharing protocol. Connecting to SMB shares
+(commonly called samba shares) is fairly straight forward. Unfortuantely,
+SMB isn't as strongly supported as NFS. Still, it offers higher performance
+and connectivity with Windows computers. For these reasons, SMB is the most
+common network file-sharing protocol deployed on local networks. Exporting
+SMB shares from Slackware is done through the samba daemon and configured
+in <code class="filename">smb.conf</code>(5). Unfortunately configuring samba as a
+service is beyond the scope of this book. Check online for additional
+documentation, and as always refer to the man page.
+</p><p>
+Thankfully mounting an SMB share is easy and works almost exactly like
+mounting an NFS share. You must tell mount where to find the server and
+what share you wish to access in exactly the same way. Additionally, you
+must specify a username and password.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount -t cifs //darkstar/home /home -o username=alan,password=secret</code></strong>
+</pre><p>
+You may be wondering why the filesystem type is cifs instead of smbfs. In
+older versions of the Linux kernel, smbfs was used. This has been
+deprecated in favor of the better performing and more secure general
+purpose cifs driver.
+</p><p>
+All SMB shares require the [username] and [password]
+arguments. This can create a security problem if you wish to place your
+samba share in fstab. You may avoid this problem by using the
+ [credentials] argument. [credentials] points to a file
+which contains the username and password information. As long as this file
+is safely guarded and readable only by root, the likelyhood that your
+authentication credentials will be compromised is lessened.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>echo "username=alan" &gt; /etc/creds-home</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>echo "password=secret" &gt;&gt; /etc/creds-home</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>mount -t cifs //darkstar/home -o credentials=/etc/creds-home</code></strong>
+</pre></div></div></div><div class="chapter" title="Chapter 11. vi"><div class="titlepage"><div><div><h2 class="title"><a name="id282063"></a>Chapter 11. <span class="application">vi</span></h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id352102">What is <span class="application">vi</span>?</a></span></dt><dt><span class="section"><a href="#id314220">The Different Modes of <span class="application">vi</span></a></span></dt><dt><span class="section"><a href="#id317601">Opening, Saving, and Quitting</a></span></dt><dt><span class="section"><a href="#id320876">Moving Around</a></span></dt><dt><span class="section"><a href="#id342976">Editing A Document</a></span></dt><dt><span class="section"><a href="#id343009"><span class="application">vi</span> Cheat Sheet</a></span></dt></dl></div><div class="section" title="What is vi?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id352102"></a>What is <span class="application">vi</span>?</h2></div></div></div><p>
+Scattered all around your computer are thousands of text files. To a
+new user, this may seem inconsequential, but almost everything in
+Slackware Linux uses a plain-text file for configuration. This allows
+users to make changes to the system quickly, easily, and intuitively.
+In chapter 5, we looked at a few commands such as
+<span class="application">cat</span> and <span class="application">less</span> that
+can be used to read these files, but what if we want to make changes to
+them? For that, we need a text editor, and
+<span class="application">vi</span> is up to the task.
+</p><p>
+In short, <span class="application">vi</span> is one of the oldest and most
+powerful text editors still used today. It's beloved by system
+administrators, programmers, hobbiests, and others the world over. In
+fact, nearly this entire book was written using
+<span class="application">vi</span>; only the next chapter on
+<span class="application">emacs</span> was written with that editor.
+</p><p>
+A little further explanation is needed to learn exactly what
+<span class="application">vi</span> is today though, as Slackware Linux
+technically doesn't include <span class="application">vi</span>. Rather,
+Slackware includes two vi "clones", <span class="application">elvis</span>(1)
+and <span class="application">vim</span>(1). These clones add many additional
+features to vi such as syntax highlighting, binary editing modes, and
+network support. We won't go too deeply into all these details. By
+default, if you execute <span class="application">vi</span> on Slackware
+Linux, you'll be using <span class="application">elvis</span>, so all
+examples in this chapter will assume that is what you are using. If
+you've used another Linux distribution before, you may be more familiar
+with <span class="application">vim</span>. If so, you might wish to change
+the symlink for <code class="filename">/usr/bin/vi</code> to point to
+<code class="filename">/usr/bin/vim</code>, or add an alias to your shell's
+startup scripts. <span class="application">vim</span> is generally considered
+to be more feature-rich than <span class="application">elvis</span>, but
+<span class="application">elvis</span> is a much smaller program and contains
+more features than most users will ever need.
+</p><p>
+<span class="application">vi</span> is very powerful, but also somewhat
+cumbersome and challening for a new user to learn. However, mastering
+<span class="application">vi</span> is an important skill for any
+self-respecting system administrator to learn, as
+<span class="application">vi</span> is included on nearly every Linux
+distribution, every BSD system, and every UNIX system in existance.
+It's even included in Mac OS X.
+Once you've learned <span class="application">vi</span>, you'll not have to
+learn another text editor to work on any of these systems. In fact,
+<span class="application">vi</span> clones have even been ported to Microsoft Windows
+systems, so you can use it there too.
+</p></div><div class="section" title="The Different Modes of vi"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id314220"></a>The Different Modes of <span class="application">vi</span></h2></div></div></div><p>
+New users are often frustrated when using <span class="application">vi</span>
+for the first time. When invoked without any arguments,
+<span class="application">vi</span> will display a screen something like
+this.
+</p><pre class="screen">
+~
+~
+~
+~
+~
+~
+~
+~
+~
+~
+~
+ Command
+</pre><p>
+At this point, the user will being typing and expect the keys he
+presses to appear in the document. Instead, something really strange
+happens. The reason for this is simple. <span class="application">vi</span>
+has different operation "modes". There is a command mode and an insert
+mode. Command mode is the default; in this mode, each keystroke
+performs a particular action such as moving the cursor around, deleting
+text, yanking (copying) text, searching, etc.
+</p></div><div class="section" title="Opening, Saving, and Quitting"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id317601"></a>Opening, Saving, and Quitting</h2></div></div></div><p>
+Ok, so you've decided that you want to learn how to use
+<span class="application">vi</span>. The first thing to do is learn how to
+open and save files. Opening files is actually pretty easy. Simply type
+the filename as an argument on the command-line and
+<span class="application">vi</span> will happily load it for you. For
+example, <strong class="userinput"><code>vi chapter_11.xml</code></strong> will open the file
+<code class="filename">chapter_11.xml</code> and load its content onto the
+screen, simple enough. But what if we've finished with one document and
+wish to save it? We can do that in command mode using the [:w]
+command. When in command mode, pressing the <span class="keycap"><strong>:</strong></span> key
+temporarily positions the cursor on the very bottom line of the window
+and allows you to enter special commands. (This is technically known as
+ex-mode after the venerable <span class="application">ex</span> application
+which we will not document here.) The command to save your current work
+is [:w]. Once this is done, <span class="application">vi</span> will
+write your changes to the buffer back into the file. If you wish to
+open another document, simply use the [:e other_document]
+command and <span class="application">vi</span> will happily open it for you.
+If you've made changes to the buffer but haven't saved it yet,
+ [:e] will fail and print a warning message on the bottom line.
+You can bypass this with the [:e!] command. Most ex-mode
+commands in <span class="application">vi</span> can be "forced" by adding
+<span class="keycap"><strong>!</strong></span> to them. This tells <span class="application">vi</span>
+that you want to abandon any changes you've made to the buffer and open
+the other document immediately.
+</p><p>
+But what if I don't like my changes and want to quit or start over?
+That's easily done as well. Executing the [:e!] command
+without any arguments will re-open the current document from the
+beginning. Quitting <span class="application">vi</span> is as simple as
+running the [:q] command if you haven't made any changes to
+the buffer, or [:q!] if you'd like to quit and abandon those
+changes.
+</p></div><div class="section" title="Moving Around"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id320876"></a>Moving Around</h2></div></div></div><p>
+Moving around in <span class="application">vi</span> is perhaps the hardest
+thing for a new user to learn. <span class="application">vi</span> does not
+traditionally use the directional arrow keys for cursor movement,
+although in Slackware Linux that is an option. Rather, movement is
+simply another command issued in command-mode. The reason for this is
+rather simple. <span class="application">vi</span> actually predates the
+inclusion of directional arrow keys on keyboards. Thus,
+movement of the cursor had to be accomplished by using the few
+keys available, so the right-hand "home row" keys of
+<span class="keycap"><strong>h</strong></span>, <span class="keycap"><strong>j</strong></span>, <span class="keycap"><strong>k</strong></span>, and
+<span class="keycap"><strong>l</strong></span> were chosen. These keys will move the cursor about
+whenever <span class="application">vi</span> is in command mode. Here's a
+short table to help you remember how they work.
+</p><div class="table"><a name="id348996"></a><p class="title"><b>Table 11.1. vi cursor movement</b></p><div class="table-contents"><table summary="vi cursor movement" border="1"><colgroup><col><col></colgroup><thead><tr><th>Command</th><th>Result</th></tr></thead><tbody><tr><td>h</td><td>Move the cursor one character left.</td></tr><tr><td>j</td><td>Move the cursor one line down</td></tr><tr><td>k</td><td>Move the cursor one line up</td></tr><tr><td>l</td><td>Move the cursor one character right</td></tr></tbody></table></div></div><br class="table-break"><p>
+Moving around is a little more powerful than that though. Like many
+command keys, these movement keys accept numerical arguments. For
+example, <span class="keycap"><strong>10j</strong></span> will move the cursor down 10 lines. You
+can also move to the end or beginning of the current line with
+<span class="keycap"><strong>$</strong></span> and <span class="keycap"><strong>^</strong></span>, respectively.
+</p></div><div class="section" title="Editing A Document"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id342976"></a>Editing A Document</h2></div></div></div><p>
+Now that we're able to open and save documents, as well as move around
+in them, it's time to learn how to edit them. The primary means of
+editing is to enter insert mode using either the <span class="keycap"><strong>i</strong></span> or
+<span class="keycap"><strong>a</strong></span> command keys. These either insert text at the
+cursor's current location, or append it after the cursor's current
+location. Once into insert mode, you can type any text normally and it
+will be placed into your document. You can return to command mode in
+order to save your changes by pressing the <span class="keycap"><strong>ESC</strong></span> key.
+</p></div><div class="section" title="vi Cheat Sheet"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id343009"></a><span class="application">vi</span> Cheat Sheet</h2></div></div></div><p>
+Since <span class="application">vi</span> can be difficult to learn, I've
+prepared a short cheat sheat that should help you with the basics until
+you begin to feel comfortable.
+</p><div class="table"><a name="id343030"></a><p class="title"><b>Table 11.2. vi Cheat Sheet</b></p><div class="table-contents"><table summary="vi Cheat Sheet" border="1"><colgroup><col><col></colgroup><thead><tr><th>Command</th><th>Result</th></tr></thead><tbody><tr><td>h</td><td>Move the cursor one character left.</td></tr><tr><td>j</td><td>Move the cursor one line down</td></tr><tr><td>k</td><td>Move the cursor one line up</td></tr><tr><td>l</td><td>Move the cursor one character right</td></tr><tr><td>10j</td><td>Move the cursor ten lines down</td></tr><tr><td>G</td><td>Move to the end of the file</td></tr><tr><td>^</td><td>Move to the beginning of the line</td></tr><tr><td>$</td><td>Move to the end of the line</td></tr><tr><td>dd</td><td>Remove a line</td></tr><tr><td>5dd</td><td>Remove 5 lines</td></tr><tr><td>r</td><td>Replace a single character</td></tr><tr><td>R</td><td>Replace multiple characters</td></tr><tr><td>x</td><td>Delete a character</td></tr><tr><td>X</td><td>Delete the previous character</td></tr><tr><td>u</td><td>Undo the last action</td></tr><tr><td>:s'old'new'g</td><td>Replace all occurances of 'old' with 'new'</td></tr><tr><td>/asdf</td><td>Locate next occurance of asdf</td></tr><tr><td>:q</td><td>Quit (without saving)</td></tr><tr><td>:w</td><td>Save the current document</td></tr><tr><td>:w file</td><td>Save the current document as 'file'</td></tr><tr><td>:x</td><td>Save and quit</td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="chapter" title="Chapter 12. Emacs"><div class="titlepage"><div><div><h2 class="title"><a name="id342041"></a>Chapter 12. Emacs</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id317667">No Idea</a></span></dt></dl></div><div class="section" title="No Idea"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id317667"></a>No Idea</h2></div></div></div></div></div><div class="chapter" title="Chapter 13. Networking"><div class="titlepage"><div><div><h2 class="title"><a name="id289613"></a>Chapter 13. Networking</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id328201"><span class="application">netconfig</span></a></span></dt><dt><span class="section"><a href="#id310624">Manual Configuration</a></span></dt><dt><span class="section"><a href="#id319849">Automatic Configuration with rc.inet1.conf</a></span></dt></dl></div><div class="section" title="netconfig"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id328201"></a><span class="application">netconfig</span></h2></div></div></div><p>
+Computers aren't very interesting on their own. Sure, you can install
+games on them, but that just turns them into glorified entertainment
+consoles. Today, computers need to be able to talk to one another; they
+need to be networked. Whether you're installing a business network with
+hundreds or thousands of computers or just setting up a single PC for
+Internet access, Slackware is simple and easy. This chapter should
+teach you how to setup typical wired networks. Common wireless setup will
+be thoroughly discussed in the next section, but much of what you read
+here will be applicable there as well.
+</p><p>
+There are many different ways to configure your computer to connect to
+a network or the Internet, but they fall into two main categories:
+static and dymanic. Static addresses are solid; they are set with the
+understanding that they will not be changed, at least not anytime soon.
+Dynamic addresses are fluid; the assumption is that the address will
+change at some time in the future. Typically any sort of network server
+requires a static address simply so other machines will know where to
+contact it when they need services. Dynamic addresses tend to be used
+for workstations, Internet clients, and any machine that doesn't
+require a static address for any reason. Dynamic addresses are more
+flexible, but present complications of their own.
+</p><p>
+There are many different kinds of network protocols that you might
+encounter, but most people will only ever need to deal with Internet
+Protocol (IP). For that reason, we'll focus exclusively on IP in this
+book.
+</p></div><div class="section" title="Manual Configuration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id310624"></a>Manual Configuration</h2></div></div></div><p>
+Ok, so you've installed Slackware, you've setup a desktop, but you
+can't get it to connect to the Internet or your business's LAN (local
+area network), what do you do? Fortunately, the answer to that question
+is simple. Slackware includes a number of tools to configure your
+network connection. The first we will look at today is the very
+powerful <span class="application">ifconfig</span>(8).
+<span class="application">ifconfig</span> is used to setup or modify the
+configuration of a Network Interface Card (NIC or Ethernet Card), the
+most common hardware for connecting to networks today.
+<span class="application">ifconfig</span> is an incredibly powerful tool
+capable of doing much more than setting IP addresses. For a complete
+introduction, you should read its man page. For now, we're just going
+to use it to display and change the network addresses of some ethernet
+controllers.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ifconfig</code></strong>
+lo Link encap:Local Loopback
+ inet addr:127.0.0.1 Mask:255.0.0.0
+ inet6 addr: ::1/128 Scope:Host
+ UP LOOPBACK RUNNING MTU:16436 Metric:1
+ RX packets:699 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:699 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:39518 (38.5 KiB) TX bytes:39518 (38.5 KiB)
+
+wlan0 Link encap:Ethernet HWaddr 00:1c:b3:ba:ad:4c
+ inet addr:192.168.1.198 Bcast:192.168.1.255 Mask:255.255.255.0
+ inet6 addr: fe80::21c:b3ff:feba:ad4c/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:1630677 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:1183224 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:1627370207 (1.5 GiB) TX bytes:163308463 (155.7 MiB)
+
+wmaster0 Link encap:UNSPEC HWaddr 00-1C-B3-BA-AD-4C-00-00-00-00-00-00-00-00-00-00
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:0 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
+</pre><p>
+As you can clearly see here, when run without any arguments,
+<span class="application">ifconfig</span> will display all the information it
+has on all the ethernet cards (and wireless ethernet cards) present on
+your system. The above represents a typical wireless connection from my
+laptop, so don't be afraid if what you see on your system doesn't
+match. If you don't see any ethX or wlanX interfaces though, the
+interface may be down. To show all currently present NICs whether they are
+"up" or "down", simply pass the [-a] argument.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ifconfig -a</code></strong>
+eth0 Link encap:Ethernet HWaddr 00:19:e3:45:90:44
+ UP BROADCAST MULTICAST MTU:1500 Metric:1
+ RX packets:122780 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:124347 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:60495452 (57.6 MiB) TX bytes:17185220 (16.3 MiB)
+ Interrupt:16
+
+lo Link encap:Local Loopback
+ inet addr:127.0.0.1 Mask:255.0.0.0
+ inet6 addr: ::1/128 Scope:Host
+ UP LOOPBACK RUNNING MTU:16436 Metric:1
+ RX packets:699 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:699 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:0
+ RX bytes:39518 (38.5 KiB) TX bytes:39518 (38.5 KiB)
+
+wlan0 Link encap:Ethernet HWaddr 00:1c:b3:ba:ad:4c
+ inet addr:192.168.1.198 Bcast:192.168.1.255 Mask:255.255.255.0
+ inet6 addr: fe80::21c:b3ff:feba:ad4c/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:1630677 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:1183224 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:1627370207 (1.5 GiB) TX bytes:163308463 (155.7 MiB)
+
+wmaster0 Link encap:UNSPEC HWaddr 00-1C-B3-BA-AD-4C-00-00-00-00-00-00-00-00-00-00
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:0 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
+</pre><p>Notice that the eth0 interface is now listed among the returns.
+<span class="application">ifconfig</span> can also change the current
+settings on a NIC. Typically, you would need to change the IP address
+and subnet mask, but you can change virtually any parameters.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>ifconfig eth0 192.168.1.1 netmask 255.255.255.0</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>ifconfig eth0</code></strong>
+eth0 Link encap:Ethernet HWaddr 00:19:e3:45:90:44
+ inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
+ UP BROADCAST MULTICAST MTU:1500 Metric:1
+ RX packets:122780 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:124347 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:60495452 (57.6 MiB) TX bytes:17185220 (16.3 MiB)
+ Interrupt:16
+</pre><p>
+If you look carefully, you'll notice that the interface now has the
+192.168.1.1 IP address and a 255.255.255.0 subnet mask. We've now setup
+the basics for connecting to our network, but we still need to setup a
+default gateway and our DNS servers. In order to do that, we'll need to
+look at a few more tools.
+</p><p>
+Next on our stop through networking land is the equally powerful
+<span class="application">route</span>(8). This tool is responsible for
+modifying the Linux kernel's routing table which affects all data
+transmission on a network. Routing tables can become immensely complex
+or they can be straight-forward and simple. Most users will only ever
+need to setup a default gateway, so we'll show you how to do that here.
+If for some reason you need a more complex routing table, you would be
+well advised to read the entire man page for
+<span class="application">route</span> as well as consulting other sources.
+For now, let's take a look at our routing table immediately after
+setting up eth0.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>route</code></strong>
+Kernel IP routing table
+Destination Gateway Genmask Flags Metric Ref Use Iface
+192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
+loopback * 255.0.0.0 U 0 0 0 lo
+</pre><p>
+I won't explain everything here, but the general information should be
+easy to pick up if you're familiar with networking at all. The
+Destination and Genmask fields specify a range of IP addresses to
+match. If a Gateway is defined, information in the form of packets will
+be sent to that host for forwarding. We also specify an interface in
+the final field that the information should traverse. Right now, we can
+only communicate with computers with addresses between 192.168.1.0 and
+192.168.1.255 and ourselves through the loopback interface, a type of
+virtual NIC that is used for routing information from this computer to
+itself. In order to reach the rest of the world, we'll need to
+setup a default gateway.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>route add default gw 192.168.1.254</code></strong>
+<code class="prompt">darkstar:~# </code><strong class="userinput"><code>route</code></strong>
+Kernel IP routing table
+Destination Gateway Genmask Flags Metric Ref Use Iface
+192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
+loopback * 255.0.0.0 U 0 0 0 lo
+default 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
+</pre><p>
+You should immediately notice the addition of a default route. This
+specifies what router should be used to reach any addresses that aren't
+specified elsewhere in our routing table. Now, when we try to connect
+to say, 64.57.102.34, the information will be sent to 192.168.1.254
+which is responsible for delivering the data for us. Unfortunately,
+we're still not quite through. We need some way of converting domain
+names like slackware.com into IP addresses that the computer can use.
+For that, we need to make use of a DNS server.
+</p><p>
+Fortunately, setting up your computer to use an external (or even an
+internal) DNS server is very easy. You'll need to use your favorite
+text editor and open the <code class="filename">/etc/resolv.conf</code> file.
+Don't ask me what happened to the <span class="keycap"><strong>e</strong></span>. On my computer,
+<code class="filename">resolv.conf</code> looks like this.
+</p><pre class="screen">
+# /etc/resolv.conf
+search lizella.net
+nameserver 192.168.1.254
+</pre><p>
+Most users won't need the "search" line. This is used to map hostnames
+to domain names. Basically, if I attempt to connect to "barnowl", the
+computer knows to look for "barnowl.lizella.net" thanks to this search
+line. We're mainly interested in the "nameserver" line. This tells
+Slackware what domain name servers (DNS) to connect to. Generally
+speaking, these should always be specified by IP address. If you know
+what DNS servers you should use, you can just add them one at a time to
+individual nameserver lines. In fact, I don't know of any practical
+limit to the number of nameservers that can be specified in
+<code class="filename">resolv.conf</code>, so add as many as you like. Once this
+is done, you should be able to communicate with other hosts via their
+fully qualified domain name.
+</p><p>
+But Alan! That's a lot of hard work! I don't want to do this time and
+again for dozens or even hundreds of machines. You're absolutely right,
+and that's why smarter people than you and me created DHCP. DHCP
+stands for Dynamic Host Control Protocol and is a method for
+automatically configuring computers with unique IP addresses, netmasks,
+gateways, and DNS servers. Most of the time, you'll want to use DHCP.
+The majority of wireless routers, DSL or cable modems, even firewalls
+all have DHCP servers to can make your life much easier. Slackware
+includes two main tools for connecting to an exising DHCP server and
+can even act as a DHCP server for other computers. For now though,
+we're just going to look at DHCP clients.
+</p><p>
+First on our list is <span class="application">dhcpcd</span>(8), part of the
+ISC DHCP utilities. Assuming your computer is physically connected to
+your network, and that you have an operating DHCP server on that
+network, you can configure your NIC in one shot.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>dhcpcd eth0</code></strong>
+</pre><p>
+If everything went according to plan, your NIC should be properly
+configured, and you should be able to communicate with other computers
+on your network, and with the Internet at large. If for some reason,
+<span class="application">dhcpcd</span> fails, you may want to try
+<span class="application">dhclient</span>(8).
+<span class="application">dhclient</span> is an alternative to
+<span class="application">dhcpcd</span> and works in basically the same way.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>dhclient eth0</code></strong>
+Listening on LPF/eth0/00:1c:b3:ba:ad:4c
+Sending on LPF/eth0/00:1c:b3:ba:ad:4c
+Sending on Socket/fallback
+DHCPREQUEST on eth0 to 255.255.255.255 port 67
+DHCPACK from 192.168.1.254
+bound to 192.168.1.198 -- renewal in 8547 seconds.
+</pre><p>
+So why does Slackware include two DHCP clients? Sometimes a particular
+DHCP server may be broken and not respond well to either
+<span class="application">dhcpcd</span> or
+<span class="application">dhclient</span>. In those cases, you can fall back
+to the other DHCP client in hopes of getting a valid response from the
+server. Traditionally, Slackware uses
+<span class="application">dhcpcd</span>, and this works in the vast majority
+of cases, but it may become necessary at some point for you to use
+<span class="application">dhclient</span> instead. Both are excellent DHCP
+clients, so use whichever you prefer.
+</p></div><div class="section" title="Automatic Configuration with rc.inet1.conf"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id319849"></a>Automatic Configuration with rc.inet1.conf</h2></div></div></div><p>
+Manually configuring interfaces is an important skill to have, but it
+can become tedious. No one wants to manually setup their Internet
+connection every time the system boots. More importantly, you may not
+always have physical access to the machine when it boots. Slackware
+makes it easy to automatically configure ethernet (and wireless) cards
+at system startup with <code class="filename">/etc/rc.d/rc.inet1.conf</code>.
+For now, we're going to focus on traditional wired ethernet networking;
+the next chapter will discuss various wireless options.
+</p><p>
+<code class="filename">rc.inet1.conf</code> is an incredibly powerful
+configuration file, capable of configuring most of your network cards
+automatically when Slackware is started. The file is filled with useful
+comments, but there is also a man page that more thoroughly discusses
+its use. To begin, we're going to look at some of the options used on
+one of my personal machines.
+</p><pre class="screen">
+# Config information for eth0:
+IPADDR[0]="192.168.1.250"
+NETMASK[0]="255.255.255.0"
+USE_DHCP[0]=""
+DHCP_HOSTNAME[0]=""
+# Some lines ommitted.
+GATEWAY="192.168.1.254"
+</pre><p>
+This represents most of the information necessary to configure a static
+IP address on a single ethernet controller.
+<span class="application">netconfig</span> will usually fill in these values
+for a single ethernet device for you. If you have multiple network
+cards in your machine and need all of them activated automatically at
+boot time, then you'll need to edit or add additional entries into this
+file in the same manner as above. First, let me go over some of the
+basics.
+</p><p>
+As you may have already guessed, IPADDR[n] is the Internet Protocol
+Address for the "n" network interface card. Typically, "n" corrosponds
+to eth0, eth1, and so on, but this isn't always the case. You can
+specify these values to pertain to a different network controller with
+the INFAME[n] variable, but we will reserve that for the next chapter
+on wireless networking, as it more commonly pertains to wireless
+network controllers. Likewise, NETMASK[n] is the subnet mask to use
+for the network controller. If these lines are left empty, then static
+IP addresses will not be automatically assigned to this network
+controller. The USE_DHCP[n] variable tells Slackware to (naturally)
+use DHCP to configure the interface. DHCP_HOSTNAME[n] is rarely used,
+but some DHCP servers may require it. In that case, it must be set to
+a valid hostname. Finally, we come to the GATEWAY variable. It is
+actually set lower in the file than it appears in my example, and it
+controls the default gateway to use. You may be wondering why there is
+no GATEWAY[n] variable. The answer to that lies in how Internet
+Protocol works. I won't go into an indepth discussion on that subject,
+but suffice it to say that there is only ever one default route that a
+computer can use no matter how many interfaces are attached to it.
+</p><p>
+If you need to use static IP addressing, you will have to obtain a
+unique static IP address and the subnet mask for the interface, as well
+as the default gateway address, and enter those here. There is no place
+to enter DNS information in <code class="filename">rc.inet1.conf</code>, so DNS
+servers will have to be manually placed into
+<code class="filename">resolv.conf</code> as we discussed above. Of course, if
+you use <span class="application">netconfig</span>, this will be handled for
+you by that program. Now let's take a look at another interface on my
+computer.
+</p><pre class="screen">
+# Config information for eth1:
+IPADDR[1]=""
+NETMASK[1]=""
+USE_DHCP[1]="yes"
+DHCP_HOSTNAME[1]=""
+</pre><p>
+Here I am telling Slackware to configure eth1 using DHCP. I do not need
+to set the IPADDR[1] or NETMASK[1] variables when using DHCP (in fact,
+if they are set, they will be ignored). Slackware will happily contact
+a DHCP server as soon as the machine begins to boot.
+</p></div></div><div class="chapter" title="Chapter 14. Wireless Networking"><div class="titlepage"><div><div><h2 class="title"><a name="id329344"></a>Chapter 14. Wireless Networking</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id326142"><span class="application">iwconfig</span></a></span></dt><dt><span class="section"><a href="#id359178">Wired Equivilant Protection (or Lack Thereof)</a></span></dt><dt><span class="section"><a href="#id334833">WPA</a></span></dt><dt><span class="section"><a href="#id334290">rc.inet1.conf revisited</a></span></dt></dl></div><div class="section" title="iwconfig"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id326142"></a><span class="application">iwconfig</span></h2></div></div></div><p>
+Wireless networking is somewhat more complicated than traditional wired
+networking, and requires additional tools for setup. Slackware includes
+a diverse collection of wireless networking tools to allow you to
+configure your wireless network interface card (WNIC) at the most basic
+level. We won't cover everything here, but should give you a solid
+foundation to get up and running quickly. The first tool we are going
+to look at is <span class="application">iwconfig</span>(8). When run without
+any argument, <span class="application">iwconfig</span> displays the current
+wireless information on any and all NICs on your computer.
+</p><pre class="screen"><code class="prompt">darkstar:~# </code><strong class="userinput"><code>iwconfig</code></strong>
+lo no wireless extensions.
+
+eth0 no wireless extensions.
+
+wmaster0 no wireless extensions.
+
+wlan0 IEEE 802.11abgn ESSID:"nest"
+ Mode:Managed Frequency:2.432 GHz Access Point:
+00:13:10:EA:4E:BD
+ Bit Rate=54 Mb/s Tx-Power=17 dBm
+ Retry min limit:7 RTS thr:off Fragment thr=2352 B
+ Encryption key:off
+ Power Management:off
+ Link Quality=100/100 Signal level:-42 dBm
+ Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
+ Tx excessive retries:0 Invalid misc:0 Missed beacon:0
+
+tun0 no wireless extensions.
+</pre><p>
+Unlike wired networks, wireless networks are "fuzzy". Their borders are
+hard to define, and multiple networks may overlap one another. In order
+to avoid confusion, each wireless network has (hopefully) unique
+identifiers. The two most basic identifiers are the Extended Service
+Set Identifier (ESSID) and the channel or frequency for radio
+transmission. The ESSID is simply a name that identifies the wireless
+network in question; you may have heard it referred to as the network
+name or something similar. Typical wireless networks operate on 11
+different frequencies. In order to connect to even the most basic
+wireless network, you will have to setup these two pieces of
+information, and possibly others, before setting up things like the
+WNIC's IP address.
+</p></div><div class="section" title="Wired Equivilant Protection (or Lack Thereof)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id359178"></a>Wired Equivilant Protection (or Lack Thereof)</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="WPA"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id334833"></a>WPA</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="rc.inet1.conf revisited"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id334290"></a>rc.inet1.conf revisited</h2></div></div></div></div></div><div class="chapter" title="Chapter 15. Basic Networking Commands"><div class="titlepage"><div><div><h2 class="title"><a name="id284408"></a>Chapter 15. Basic Networking Commands</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id348624">Network Diagnostic Tools</a></span></dt><dt><span class="section"><a href="#id333340">Web Browsers</a></span></dt><dt><span class="section"><a href="#id351638">FTP Clients</a></span></dt><dt><span class="section"><a href="#id317884">NNTP Clients</a></span></dt><dt><span class="section"><a href="#id341101">Remote Access</a></span></dt></dl></div><div class="section" title="Network Diagnostic Tools"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id348624"></a>Network Diagnostic Tools</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Web Browsers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id333340"></a>Web Browsers</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="FTP Clients"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id351638"></a>FTP Clients</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="NNTP Clients"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id317884"></a>NNTP Clients</h2></div></div></div></div><div class="section" title="Remote Access"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341101"></a>Remote Access</h2></div></div></div></div></div><div class="chapter" title="Chapter 16. Package Management"><div class="titlepage"><div><div><h2 class="title"><a name="id320396"></a>Chapter 16. Package Management</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id358328"><span class="application">pkgtool</span></a></span></dt><dt><span class="section"><a href="#id352958">Installing, Removing, and Upgrading Packages</a></span></dt><dt><span class="section"><a href="#id341343"><span class="application">pkgtool</span></a></span></dt></dl></div><div class="section" title="pkgtool"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id358328"></a><span class="application">pkgtool</span></h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Installing, Removing, and Upgrading Packages"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id352958"></a>Installing, Removing, and Upgrading Packages</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="pkgtool"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id341343"></a><span class="application">pkgtool</span></h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div></div><div class="chapter" title="Chapter 17. Keeping Track of Updates"><div class="titlepage"><div><div><h2 class="title"><a name="id292742"></a>Chapter 17. Keeping Track of Updates</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id314047">The -stable Branch</a></span></dt><dt><span class="section"><a href="#id324804">Upgrading Slackware Versions</a></span></dt></dl></div><div class="section" title="The -stable Branch"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id314047"></a>The -stable Branch</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Upgrading Slackware Versions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id324804"></a>Upgrading Slackware Versions</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div></div><div class="chapter" title="Chapter 18. The Linux Kernel"><div class="titlepage"><div><div><h2 class="title"><a name="id328461"></a>Chapter 18. The Linux Kernel</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#id322300">What Does the Kernel Do?</a></span></dt><dt><span class="section"><a href="#id325022">Working with Modules</a></span></dt><dt><span class="section"><a href="#id353213">Compiling A Kernel and Why to do So</a></span></dt></dl></div><div class="section" title="What Does the Kernel Do?"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id322300"></a>What Does the Kernel Do?</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Working with Modules"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id325022"></a>Working with Modules</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div><div class="section" title="Compiling A Kernel and Why to do So"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id353213"></a>Compiling A Kernel and Why to do So</h2></div></div></div><p>
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
+minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur.
+</p></div></div></div></body></html>