From dbca998ce52d78ce5e525e0d799adc83d580f66a Mon Sep 17 00:00:00 2001 From: Alan Hicks Date: Sat, 1 May 2010 14:17:18 -0400 Subject: Making room for new chapter and a few minor modifications. --- chapter_11.xml | 669 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 418 insertions(+), 251 deletions(-) (limited to 'chapter_11.xml') diff --git a/chapter_11.xml b/chapter_11.xml index 7a507f0..a721dfa 100644 --- a/chapter_11.xml +++ b/chapter_11.xml @@ -3,331 +3,498 @@ "/usr/share/xml/docbook/xml-dtd-4.5/docbookx.dtd"> -<application>vi</application> +Working with Filesystems
-What is <application>vi</application>? +The Filesystem Hierarchy -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 -cat and less 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 -vi is up to the task. +Slackware Linux stores all of its files and directories under a single +/ 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 +/, 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 /mnt/cd-rw. +Here are a few common directories present on nearly all Slackware Linux +installations, and what you can expect to find there. - -In short, vi 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 -vi; only the next chapter on -emacs was written with that editor. - + +Filesystem Layout + + + Directory + Explaination + + + + / + The root directory, under which all others exist + + + /bin + Minimal set of binary programs for all users + + + /boot + The kernel, initrd, and other requirements for booting Slackware + + + /etc/ + System configuration files + + + /dev + Collection of special files allowing direct access to hardware + + + /home + User directories where personal files and settings are stored + + + /media + Directory for auto-mounting features in DBUS/HAL + + + /mnt + Places to temporarily mount removable media + + + /opt + Directory where some (typicaly proprietary) software may be installed + + + /proc + Kernel exported filesystem for process information + + + /root + The root user's home directory + + + /sbin + Minimal set of system or superuser binaries + + + /srv + Site-specific data such as web pages served by this system + + + /sys + Special kernel implimentation details + + + /tmp + Directory reserved for temporary files for all users + + + /usr + All non-essential programs, libraries, and shared files + + + /var + Regularly changing data such as log files + + + +
+ +
+ +
+Local Filesystem Types -A little further explanation is needed to learn exactly what -vi is today though, as Slackware Linux -technically doesn't include vi. Rather, -Slackware includes two vi "clones", elvis(1) -and vim(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 vi on Slackware -Linux, you'll be using elvis, 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 vim. If so, you might wish to change -the symlink for /usr/bin/vi to point to -/usr/bin/vim, or add an alias to your shell's -startup scripts. vim is generally considered -to be more feature-rich than elvis, but -elvis is a much smaller program and contains -more features than most users will ever need. +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. +
+ext2 + -vi is very powerful, but also somewhat -cumbersome and challening for a new user to learn. However, mastering -vi is an important skill for any -self-respecting system administrator to learn, as -vi 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 vi, you'll not have to -learn another text editor to work on any of these systems. In fact, -vi clones have even been ported to Microsoft Windows -systems, so you can use it there too. +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.
-The Different Modes of <application>vi</application> - +ext3 -New users are often frustrated when using vi -for the first time. When invoked without any arguments, -vi will display a screen something like -this. +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. +
- -~ -~ -~ -~ -~ -~ -~ -~ -~ -~ -~ - Command - - +
+reiserfs -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. vi -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. +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. +
+
+XFS + +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. + +
+
+JFS + +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. +
-Opening, Saving, and Quitting +iso9660 + +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 +mkisofs(8) or +growisofs(8). + +
+
+vfat -Ok, so you've decided that you want to learn how to use -vi. 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 -vi will happily load it for you. For -example, vi chapter_11.xml will open the file -chapter_11.xml 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 : 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 ex application -which we will not document here.) The command to save your current work -is :w. Once this is done, vi 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 vi 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 vi can be "forced" by adding -! to them. This tells vi -that you want to abandon any changes you've made to the buffer and open -the other document immediately. +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. +
+
+swap -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 vi 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. +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. +
-Moving Around +Using <application>mount</application> + + +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 +mount(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 / +and others are always located in subdirectories of +/. /mnt/hd 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. + + +darkstar:~# mount -t ext3 /dev/hda3 /mnt/hd -o ro + -Moving around in vi is perhaps the hardest -thing for a new user to learn. vi 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. vi 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 -h, j, k, and -l were chosen. These keys will move the cursor about -whenever vi is in command mode. Here's a -short table to help you remember how they work. +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 /mnt/hd. Additionally, +we have mounted it read-only so no changes can be made to these +contents. The -t ext3 argument tells +mount +what type of filesystem we are using, +in this case it is ext3. This lets the kernel know which driver to use. +Often mount can determine this for itself, +but it never hurts to explicitly declare it. Second, we tell +mount +where to locate the filesystem's contents. Here we've chosen +/mnt/hd. +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. -vi cursor movement +Common mount options - - Command - Result - + Option + Description - h - Move the cursor one character left. + ro + read-only + + + rw + read-write (default) + + + uid + user to own the contents of the filesystem - j - Move the cursor one line down + gid + group to own the contents of the filesystem - k - Move the cursor one line up + noexec + prevent execution of any files on the filesystem - l - Move the cursor one character right + defaults + sane defaults for most filesystems
-Moving around is a little more powerful than that though. Like many -command keys, these movement keys accept numerical arguments. For -example, 10j will move the cursor down 10 lines. You -can also move to the end or beginning of the current line with -$ and ^, respectively. +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. + + +darkstar:~# mount -t vfat /dev/hda4 /mnt/hd -o uid=alan + + + +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 /etc/fstab +file contains all this information for filesystems that the installer +sets up for you, and you can make additions to it as well. +fstab(5) looks like a simple table containing the +device to mount along with its filesystem type and optional arguments. +Let's take a look. + + +darkstar:~# cat /etc/fstab +/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 + + + +If you have an entry in fstab for your filesystem, you +need only tell mount the device node or the mount location. + + +darkstar:~# mount /dev/cdrom +darkstar:~# mount /home + + + +One final use for +mount +is to tell you what filesystems are currently mounted and with what +options. Simply run +mount +without any arguments to display these.
-Editing A Document +Network Filesystems -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 i or -a 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 ESC key. +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. + + +
+NFS + + +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 /etc/rc.d/rc.rpc file +executable and telling it to start. Once it has been set executable, it +will run automatically every time you boot into Slackware. + + +darkstar:~# chmod +x /etc/rc.d/rc.rpc +darkstar:~# /etc/rc.d/rc.rpc start + + + +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. + + +darkstar:~# mount -t nfs darkstar.example.com:/home /home + + + +Running an NFS server is a little bit different. First, you must configure +each directory to be exported in the /etc/exports +file. exports(5) contains information about what +directories will be shared, who they will be shared with, and what special +permissions to grant or deny. + + + +# 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) + + + +The first column in +exports +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. + + + +You'll also need to run the NFS daemon. Starting and stopping NFS server +support is done with the /etc/rc.d/rc.nfsd rc script. +Set it executable and run it just like we did for +rc.rpc and you are ready to go.
-<application>vi</application> Cheat Sheet +SMB -Since vi 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. +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 smb.conf(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. - -vi Cheat Sheet - - - - Command - Result - - - - - h - Move the cursor one character left. - - - j - Move the cursor one line down - - - k - Move the cursor one line up - - - l - Move the cursor one character right - - - 10j - Move the cursor ten lines down - - - G - Move to the end of the file - - - ^ - Move to the beginning of the line - - - $ - Move to the end of the line - - - dd - Remove a line - - - 5dd - Remove 5 lines - - - r - Replace a single character - - - R - Replace multiple characters - - - x - Delete a character - - - X - Delete the previous character - - - u - Undo the last action - - - :s'old'new'g - Replace all occurances of 'old' with 'new' - - - /asdf - Locate next occurance of asdf - - - :q - Quit (without saving) - - - :w - Save the current document - - - :w file - Save the current document as 'file' - - - :x - Save and quit - - - -
+ +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. + + +darkstar:~# mount -t cifs //darkstar/home /home -o username=alan,password=secret + + + +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. + + + +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. + + +darkstar:~# echo "username=alan" > /etc/creds-home +darkstar:~# echo "password=secret" >> /etc/creds-home +darkstar:~# mount -t cifs //darkstar/home -o credentials=/etc/creds-home + + + + + +
+ + + + + + + + +
-- cgit v1.2.3