The Accidental Administrator: Linux Server Step By Configuration Guide

User Manual: Pdf

Open the PDF directly: View PDF PDF.
Page Count: 254

DownloadThe Accidental Administrator: Linux Server Step-by-Step Configuration Guide
Open PDF In BrowserView PDF
The Accidental
Administrator

®

The Accidental Administrator :
Linux Server
Step-by-Step
Configuration Guide
Edition 2.0
®

by Don R. Crawley, Linux+

Seattle, Washington
www.soundtraining.net

Reasonable attempts have been made to ensure the accuracy of the
information contained in this publication as of the date on which it was
written. This publication is distributed in the hope that it will be helpful,
but with no guarantees. There are no guarantees made as to the accuracy,
reliability, or applicability of this information for any task or purpose
whatsoever.
The author recommends that these procedures be used only as a guide to
configuration of computers and/or devices in a test environment prior to
usage in a production environment. Under no circumstances should these
procedures be used in a live, production environment without first being
tested in a laboratory environment to determine their suitability, their
accuracy, and any security implications.
ISBN: 978-1453689929
Copyright 2014, Don R. Crawley.
All rights reserved.
This is a copyrighted work in which all rights are retained by the author.
You may not copy this work in any form, nor change this work, nor store
this document in a retrieval system, nor distribute or otherwise transmit this
work in any form by any means, electronic, mechanical, photocopying,
recording, or otherwise, without the written prior permission of the
copyright holder. The preceding restrictions apply to this document in
whole or in part.
Trademarks, Registered Trademarks, and Service Marks: This book
identifies and uses product names and services known to be trademarks,
registered trademarks, or service marks of their respective holders. Such
marks are used throughout this book in an editorial fashion only.
Additionally, terms suspected of being trademarks, registered trademarks,
or service marks have been appropriately capitalized, although
soundtraining.net cannot attest to the accuracy of such information. Use of a
term in this book should not be regarded as affecting the validity of any
trademark, registered trademark, or service mark. Neither the author nor

soundtraining.net are associated with any vendor or product mentioned in
this book.
Please do not make illegal copies of this book, either in its entirety or
any portion thereof.
PO Box 48094
Seattle, Washington 98148-0094
United States of America
On the web: www.soundtraining.net
On the phone: (206) 988-5858
Email: info@soundtraining.net

To Janet

“Technology, like art, is a soaring exercise of the human imagination.”
—Daniel Bell
The Winding Passage

Contents
PRELUDE
The Base Config for the Systems in the Book ……… 2
The Revisions in this Edition ……… 3
CHAPTER 1:
Introduction to Linux
Chapter Introduction ……… 7
Chapter Objectives ……… 8
Red Hat and CentOS ……… 9
Installing CentOS Linux Server ……… 9
Minimum Hardware Requirements ……… 9
Which Version of the Operating System Should You Download? ……… 10
Performing the Installation ……… 10
Adding VMWare Tools ……… 20
CHAPTER 2:
Understanding Linux Commands
Introduction ……… 23
Chapter Objectives ……… 23
Some Basic Rules About Linux Commands ……… 24
The Shell ……… 24
Some Commonly Used Linux Commands ……… 26
CHAPTER 3:
Linux User Accounts
Introduction ……… 37
Objectives ……… 37
Understanding /etc/passwd ……… 38
Creating a New User ……… 39
Passwords ……… 39
Default Values ……… 40
Adding Groups ……… 41
Deleting Users ……… 41
Changing Ownership for a File or Directory ……… 41

Adding a User to a Group ……… 42
Viewing Information About the Current User ……… 43
Additional User Management Commands ……… 46
CHAPTER 4:
File and Directory Management
Introduction ……… 47
Objectives ……… 47
Working with File Systems and Mount Points ……… 48
Linux File Types ……… 49
Mounting a Device ……… 51
Understanding /etc/fstab ……… 52
Understanding Mount Points ……… 53
Octal (Numeric) Permissions ……… 56
Setting Default Permissions ……… 59
Disk Configuration Tools ……… 59
CHAPTER 5:
Linux Administration
Introduction ……… 61
Objectives ……… 62
GUI vs. CLI ……… 63
Linux Directories ……… 64
Linux Profiles ……… 65
Administration Tools and Techniques ……… 66
Editing Configuration Files ……… 74
Other Commonly Used Text Editors ……… 75
vim Cheat Sheet ……… 77
Using grep ……… 78
Using the alias Command ……… 80
Making Aliases Persistent ……… 81
Starting and Stopping Services (The Daemons) ……… 83
Linux Compression and Archiving Tools ……… 84
Understanding the Linux Boot Process ……… 86
Run Levels ……… 88

Controlling the Boot Process ……… 89
System Shutdowns and Reboots ……… 92
How to Shut Down the System ……… 92
X Windows ……… 93
Getting Help ……… 93
CHAPTER 6:
Red Hat/CentOS Linux Package Management
Introduction ……… 99
Objectives ……… 99
Using yum to Update Your System ……… 100
Additional Repositories ……… 107
RPM: The RedHat Package Manager ……… 110
CHAPTER 7:
Networking with Red Hat/CentOS Linux
Introduction ……… 115
Objectives ……… 116
Network Administration ……… 117
Installing Networking Tools ……… 118
RHEL/Fedora/CentOS Network Configuration ……… 119
Using ifconfig ……… 123
/etc/resolv.conf ……… 123
DHCP (Dynamic Host Configuration Protocol) ……… 126
CHAPTER 8:
DNS: The Domain Name System
Introduction ……… 131
Objectives ……… 131
Installing BIND DNS ……… 132
Understanding the Fundamentals of DNS ……… 133
Primary, Secondary, and Caching Zones ……… 134
Building Name Servers ……… 134
A Primary DNS Server ……… 136
Creating the Primary Master Zone Database File ……… 137
DNS Resource Records ……… 138

Creating the Secondary Master ……… 142
DNS Tools ……… 143
DNS Resources ……… 145
CHAPTER 9:
Using SSH (Secure Shell)
Introduction ……… 147
Objectives ……… 147
What is SSH? ……… 148
When is SSH Used? ……… 148
How Do I Configure SSH? ……… 148
Transferring Files with scp ……… 149
Transferring Files with SFTP ……… 150
CHAPTER 10:
Linux Security
Introduction ……… 151
Objectives ……… 152
Physical Security ……… 153
Keep the Software Up to Date ……… 153
Employ the Principle of Least Privilege ……… 153
Use Encryption ……… 154
Avoid Non-Secure Protocols ……… 154
Clean Up Your Systems ……… 154
Minimize the Number of Services per System ……… 154
Enforce a Good Password Policy ……… 155
Disable Root Login ……… 155
Disable Unneeded Services ……… 155
Delete X Windows ……… 155
Implement a Firewall ……… 155
Implementing NAT (Network Address Translation) ……… 160
Separate Partitions ……… 161
Block SSH Attacks ……… 161
Perform Security Scans and Audits ……… 162
Using sudo ……… 162

Bypassing sudo ……… 165
Using lastlog ……… 165
Using last ……… 166
Port Scanning ……… 167
Password Recovery (Resetting) ……… 168
Additional Security Tools ……… 170
Develop and Maintain a Good Backup Strategy ……… 171
Summary ……… 172
CHAPTER 11:
Automating Administration Tasks with cron
Introduction ……… 173
Objectives ……… 173
Using cron ……… 174
CHAPTER 12:
Monitoring Your Red Hat/CentOS Linux Server
Introduction ……… 177
Objectives ……… 177
Log Files ……… 178
Viewing Log Files ……… 179
Other Linux Monitoring Tools ……… 180
The sysstat Package of Utilities ……… 185
Network Monitoring Tools ……… 187
CHAPTER 13:
How to Build and Configure a Basic File Server for Windows and Other
Clients
Introduction ……… 189
Objectives ……… 190
Using NFS to Share Files ……… 194
Using rsync to Synchronize Files Between Servers ……… 197
CHAPTER 14:
How to Build and Configure a Basic Web Server
Introduction ……… 201

Objectives ……… 202
Apache Web Server ……… 203
Understanding Apache ……… 204
Creating Content for the Web Site ……… 208
Installing and Configuring an FTP Server ……… 212
CHAPTER 15:
How to Build and Configure a Basic Database Server
and Add a Scripting Language (PHP)
Introduction ……… 215
Objectives ……… 215
Adding a Database Server ……… 216
Adding a Scripting Language ……… 218
PHPMyAdmin ……… 219
CHAPTER 16:
How to Build and Configure a Basic Email Server
Introduction ……… 221
Objectives ……… 221
Some Email Terminology ……… 222
CHAPTER 17:
Remote Administration with Webmin
Introduction ……… 225
Objectives ……… 225
Installing Webmin ……… 226
POSTLUDE
APPENDICES
Appendix A: How to Create a New Virtual Machine in VMWare ………
232
Appendix B: Don’s Online Resources ……… 240
Appendix C: Other Helpful Websites ……… 241
INDEX

Prelude
Writing any book is a huge undertaking. One of the biggest challenges in
writing a technical book such as this lies in deciding what to include. Even
more difficult is the challenge of deciding what to exclude. As you read
through this book, you could well find yourself thinking I should have
included a particular technology or that something I did include is
extraneous. If you do feel that way, please let me know. Post something on
one of my social media channels or send me an email. I love getting
feedback.
I write books and create training workshops based on how I like to learn.
My preference is to learn how to build a simple, working configuration and
then use other resources to learn how to finesse the configuration. In other
words, show me how to build a simple Apache web server and later I can
learn how to add virtual hosts, SSL, or other more advanced configs. That’s
exactly what this book attempts to do. I try to focus on building
configurations and include only enough theory as required to make sense of
the config. I hope this approach works for you. If you want more theory and
more advanced configs, there are plenty of 1000 – 1200 page books
available that do an excellent job of providing that. Oh, and there’s always
Google.
What about support? As an Accidental Administrator , you might feel a bit
overwhelmed by all the new terminology and strange names in the IT
world. I remember well my first few months in IT. I felt like I was on a
different planet. That was in the days before a ubiquitous Internet, so
support options were limited to books and BBSs. Today, there are many
great forums that provide outstanding support for all flavors of Linux,
including Red Hat and CentOS. I do not provide one-on-one support. I
simply don’t have enough time to do that and still write books, produce
videos, play music, and hang out with my family, so please don’t ask. If you
do, I’ll politely refer you to resources such as linuxquestions.org,
wiki.centos.org/HowTos, or any of the many other excellent Linux support
®

forums on the Web. There is a fairly lengthy list of Linux support websites
in the appendix at the end of this book. If you feel like you really need oneon-one support, consider purchasing a copy of Red Hat Enterprise Linux
which comes with varying levels of support, depending on the package you
purchase. (www.redhat.com/apps/store/server/)
The Base Config for the Systems in the Book
I built the configs in this book using CentOS Linux 6.5 running in virtual
machines in VMWare Workstation 10.0.1.
Download the installation ISO image from
http://wiki.centos.org/Download. The instructions and exercises in this
book are based on CentOS Linux version 6.5. Any version whose number
starts with a 6 should be compatible with this book.
I created two VMs: LinuxServer01 and LinuxServer02. In general,
LinuxServer01 has an IP address of 192.168.0.1/24 and LinuxServer02 has
an IP address of 192.168.0.2. When required, I use the domain
soundtraining.local, since my company’s name is soundtraining.net. Feel
free to replace that with whatever you choose. Frankly, as you work through
this book, it will probably be simpler for you to just use the same names as
I have.
LinuxServer01

e0: (Static) 192.168.0.1/24
e1: (DHCP) 192.168.146.132/24
Gateway: (DHCP) 192.168.146.2/24
LinuxServer02

e0: (Static) 192.168.0.2/24
Gateway: 192.168.0.1
Domain: soundtraining.local

DNS servers: (Google Public DNS Servers) 8.8.8.8 and 8.8.4.4
This is a basic network and system configuration for the book. Certain
chapters may require modifications to these configs or even additional
systems, such as a Windows system for testing the Samba config.
Check out the following diagram to see the configuration.

Figure 1: The base network configuration for the book

It will be necessary for you to have Internet connectivity to complete many
of the procedures in this book such as installing and upgrading software.
One of the great things about Linux, whether CentOS or any of the myriad
other flavors, is its flexibility. As long as you’re willing to get under the
hood, do some research, and experiment, there’s almost nothing you can’t
do. So, get ready to do a lot of typing in the command line and have a lot of
fun on your Linux Server journey!
The Revisions in this Edition
This book is a major revision over the previous edition. I’ve learned much
about writing and publishing since it was released and, hopefully, this
edition reflects much of what I’ve learned. I’ve included many more
graphics and step-by-step exercises, I’ve expanded the content considerably
based on feedback from students in my classes and reviewers on Amazon.
(Admittedly, some of the feedback and reviews were, err, more educational
than I might have preferred!) You’ll find much greater coverage of LAMP
servers and a greatly expanded troubleshooting section, among many other
additions, expansions, and improvements.
Oh, and if you find this book helpful, please leave a review, even a short
one, on Amazon. As an independent author and publisher, Amazon reviews

are the main way I can compete with the big publishers.
Acknowledgements
Thanks, as always, to Janet, my wife for her never-ending patience,
understanding, and support. Thanks to Jason Sprenger for making my
books readable and attractive. Ultimately, however, this book is all about
you, the reader. Thank you for purchasing and reading this book.
Special thanks to the following staff members at Group Health Cooperative
in Seattle for their cooperation, patience, and invaluable feedback in sorting
through the exercises in this book: Leslie Aal, John Cook, Shain Hart,
Maurice Jamerson, Steven Lowrimore, Justen Manatt, Stephanie Matthews,
Bobby McKinney, Karen Mercurio, Kim O’Grady, James Rivera, and
Jessica Roberson. Also, thanks to John Sims and Dave Ditzler at Group
Health Cooperative.

CHAPTER 1:
Introduction to Linux
Videos are available for many of the procedures in this chapter at www.soundtraining.net/videos

Chapter Introduction
Technically speaking, Linux is not an operating system, but the kernel of an
operating system. The Linux kernel was developed by Linus Torvalds while
he was a student at the University of Helsinki in Finland. Linux is inspired
by UNIX and bears much similarity to it in terms of commands and
directory structure.
Various organizations package the Linux kernel and offer it to the public as
a distribution, or distro for short. Some of the more common distros include
Red Hat and its variants Fedora and CentOS, SuSE, Gentoo, Ubuntu, Mint,
Debian, and Slackware, just to name a few. You can learn about the many
Linux distros at www.distrowatch.com.
There are many excellent sources of background information on Linux,
including the Linux Foundation at www.linuxfoundation.org. Performing a
Web search on the keyword “Linux” will return millions of results. Since
the purpose of this book is to help you configure a Linux server, I’ll let
others supply the background information, but I encourage you to get
familiar with the fascinating and important stories of Linux, the GNU
project, and the people who were and are involved in open source software.
Chapter Objectives
Complete a CentOS Linux minimal installation
Login to a newly installed server
Enable the network interface
Add VMWare tools
Red Hat and CentOS

Red Hat Enterprise Linux (RHEL) is a popular Linux distribution, available
only through a paid subscription model. RHEL, however, is comprised
largely of software packages distributed under the free software licenses.
The source code for the packages is made available by Red Hat.
CentOS (Community Enterprise Operating System) developers use the
source code from Red Hat to create CentOS, a product very similar to
RHEL. Red Hat’s proprietary branding and logos have been removed, but
otherwise the CentOS product will behave much the same as RHEL.
In January of 2014, Red Hat and the CentOS Project joined forces, which
should further enhance the compatibility of the two operating systems.
This book is based on CentOS. The things you learn in this book and in
other documentation should apply equally to either RHEL or CentOS. Of
course, it’s possible that there may be differences, but I’m not aware of any
substantial differences in configuration between the two.
Installing CentOS Linux Server
The examples in this book are written based on installing CentOS Linux
Server 6.5 in a virtualized environment. I used VMWare Workstation 10
(www.vmware.com). The procedures I’m going to show you should work
in other virtualization environments or in a physical environment. I say
“should” because there’s no way for me to anticipate every possible
environment or configuration.
If you prefer, you can certainly use other virtualization environments such
as VMWare Player, VirtualBox (www.virtualbox.org) or Hyper-V, which is
included with Windows 8 and 8.1 (http://windows.microsoft.com/enus/windows-8/hyper-v-run-virtual-machines).
Minimum Hardware Requirements
It’s nearly impossible to give minimum hardware requirements for Linux
installations, because Linux operating systems can be installed on a
tremendous variety of systems. The minimum requirements depend on the
intended use of the system. As with most things related to computers, more

is usually better. Having said that, and knowing that you might be thinking,
“Oh come on, Don. Just give me some minimums!”, here are some very
general guidelines:
RAM: 256 MB
Hard drive: 1 GB
CentOS version 6.x, like many other current versions of Linux, requires a
CPU that supports PAE (Physical Address Extension), a feature that allows
x86 processors to access a physical address space larger than four
gigabytes. If you’re trying to install CentOS on an older system, you may
have to use CentOS 5 instead. Many of the commands and examples will
still work perfectly well with version 5. If your CPU doesn’t support PAE,
the installation process will throw off an error.
I configured my VM for the examples in the book with 1 GB of RAM and a
20 GB hard drive, which should be sufficient for most learning exercises
you’ll perform, either from this book or on your own. Again, it depends on
what you ultimately want to do with your system.
A production system, of course, will usually require much more in terms of
memory and hard disk resources.
Which Version of the Operating System Should You Download?
Visit http://www.centos.org/download/. You can click on the big button to
download the latest X86 64-bit DVD version, but there are lots of other
options. There are a variety of ISOs available to download. Click on the
alternative downloads link and you’ll see what I mean. Once you click
through to a mirror, you’ll see LiveCDs, LiveDVDs, full DVD .iso
downloads (it takes two), minimal .iso downloads, and netinstall .iso
downloads. The live versions are fun because they allow you to boot nearly
any computer from a CD, DVD, or USB thumb drive and play around with
Linux without actually installing it on your computer’s hard drive. I usually
download the minimal version, simply because it’s smaller and faster to

download and I always install software packages and updates from the
Internet. If you have limited Internet connectivity, you might want to go
somewhere with a good Internet connection and download the two fullversion DVDs. The exercises in this book are based on using the minimal
version.
Performing the Installation
I’m going to assume you’ve already downloaded the CentOS 6.5 ISO from
http://wiki.centos.org/Download, that you’ve chosen the appropriate version
(32-bit or 64-bit) for your system architecture, and that you’ve configured
your environment, virtual or physical, for the installation. After all, this is a
server installation for Pete’s sake. Frankly, if you don’t understand how to
do those sorts of things, this book will probably be too advanced for you.
Soundthinking Point:
Which Processor Are You Using?
In the examples, I use a machine with a 64-bit processor. For that reason, you’ll
often see “x86_64” in many of the filenames. If you’re using a system with a 32bit processor, you can simply replace x86_64 with i386.
If you’re not sure, use the 32-bit version of the operating system. After you finish
the installation, use the command
to identify your processor.
uname -p

If you’re new to VMWare Workstation, I’ve included a step-by-step guide
to creating a new virtual machine in Appendix A at the end of this book.
Hands-On Exercise 1.1:
Installing CentOS Linux Server 6.5
Warning: This exercise will completely erase all the files on your
computer’s hard disk. You will not be able to recover any files that are
currently on your computer after you complete this exercise. Do NOT
perform this exercise on a computer whose files you wish to preserve.

1. Configure the VM to boot from the ISO you downloaded. (Alternatively,
you could place the installation media such as a DVD in your host

computer’s optical drive and configure your VM to boot from it.) Power
on your system. The welcome screen will appear. Press the Enter key to

accept the default.
Figure 2: The CentOS 6 welcome screen

2. In the next screen, you are presented with the option to test the
installation media before installation. In the real world, this is a good
idea that can save you some frustration in case of a bad DVD. It takes a
while, so for our purposes, I’m going to skip it. Use your arrow key to

select Skip and press the Enter key.
Figure 3: The media check

3. You may encounter an error about non-specific, unsupported hardware. I
have not found this to prevent installation, so press the Enter key and

continue with the installation.
Figure 4: Unsupported hardware warning

4. A CentOS splash screen appears requiring you to click Next. Click Next.
(Don’t you just love screens like this that do nothing, but still require you

to click Next?)
Figure 5: A splash screen

5. Next, you must select the language to be used for the installation. The
default is English. Press the Enter key to select the default.

Figure 6: Choosing the installation language

6. Now, you must choose the appropriate keyboard for the system. We’ll
use a U.S. English keyboard, the default. Press the Enter key.

Figure 7: Choosing your preferred keyboard layout

7. In this screen, you must choose your storage devices. Basic Storage

Devices is the default. Press the Enter key.
Figure 8: Installation storage options

8. Uh oh, here’s a warning. If you’ll recall earlier, I warned that we’re
going to blow away all the data on this system. Now, CentOS is
concerned about the same thing. Click the button labeled

Yes, discard any data.
Figure 9: Storage device warning

9. Now, the installation process wants to know its name. Choose your name
wisely. You can change it later, but it’s kind of a minor hassle. I recently
switched from coffee to herbal tea, so I’m not quite as edgy as I used to
be. Maybe that’s the reason I chose something fairly bland like
LinuxServer01.soundtraining.local, as you can see in the screen capture.
(I’ll mention this again later, but you need to know that everything in
Linux is case sensitive.) If you’re on your third can of RedBull, I’m sure
you’ll come up with something much more interesting. Not to squelch
your creativity, but If you’re building your system purely for learning
purposes, I recommend you just use the same names I do for simplicity.
Enter your server’s name and press the Enter key.

Figure 10: Naming your system

0. Once you’ve named your server, it’s time to tell it what time zone it’s in.
I’m in Seattle on the U.S. West Coast, so I chose America/Vancouver,
which is just up I-5 from Seattle and in the same time zone. Choose your

time zone and click Next.
Figure 11: Choosing a time zone

1. Now, you get to choose the root password. The user root is the
administrator on Linux systems. root is all knowing, all seeing, and all
powerful, kind of like the great and powerful Oz in The Wizard of Oz. In
the real world, make this a very difficult to guess password. For our
purposes in this book, we’ll always use p@ss5678 for the root password.
Enter p@ss5678 and confirm it, press Enter to continue.

Figure 12: Creating the root (admin) password

2. Now, you must choose the type of installation you’d like. For our
purposes in this book, we’ll remove all existing partitions (there aren’t
any) and start from scratch. Choose Use All Space and click Next.

Figure 13: Choosing the type of installation for the disk(s)

3. You’ll get another warning that you’re going to lose any data on the new
partitions. If you choose to write the changes to the disk, you’ll lose any
data. Assuming that you’re aware of that and that there’s no data you
care about on the disk, click the button labeled Write changes to the disk.

Figure 14: Another storage warning

4. If you downloaded the CentOS minimal version for your installation, you
can ignore this step and go to the next one. If, on the other hand, you
decided to use the full version DVD for your installation, you get to
choose what type of system you want. As the screen says, the default
installation of CentOS is a minimum install. In the real world, you might
want to choose one of the other options, but since this book is all about
learning how to build a system, we’ll choose Minimal and click the
button labeled Next. (As we’ve discussed previously, when you
download CentOS, there is an option to download a minimal version. If
you choose that version, you won’t be presented with the following

options.)
Figure 15: Choosing the type of installation for package installation

5. The package installation process starts up. Now is a good time to refill
that cup of coffee or get another Red Bull. You’ll see a screen like this,
but you don’t have to do anything unless you just want to watch the blue
progress bar.

Figure 16: Installing the packages

6. When package installation is complete, you’ll see a splash screen. Click

the button labeled Reboot.
Figure 17: Complete installation and reboot

7. After your system reboots, you’ll be presented with your first logon
prompt. Enter the username root and the password p@ss5678.

Figure 18: First time login

Congratulations! You’ve just completed your first CentOS Linux
installation. Good job.
Now, it’s time to start having some fun with your new Linux server.
One of the cool things about a minimal CentOS install is that, even though
it’s minimal, it still includes some basic necessities such as SSH (Secure
Shell). It doesn’t, however, turn on the network interface by default, so let’s
get that done before we do anything else.
Hands-On Exercise 1.2:
Enabling the Network Interface
In this exercise, you’ll enable the network interface named eth0 and view
the IP address configuration on the interface eth0 and the loopback
interface.

1. While logged on to the system as root, execute the following command to
bring up the interface eth0:
ifup eth0

2. The system will pause for a moment while it determines the IP address
for interface eth0, then it will return a prompt. At the prompt, use the
command ifconfig to view the configuration on interface eth0 and the
loopback interface. Enter the following command:
ifconfig

Figure 19: Output from the command ifconfig

3. Make a note of the IP address for eth0 on your system. You’ll use it

frequently as the book progresses. (On my system, it’s currently
192.168.146.136, but that could change since it’s dynamically assigned
via DHCP.)
Congratulations! You’ve just performed your first sys admin task. Way to
go.
Adding VMWare Tools
VMWare tools is an add-on to your VMWare installation that adds
considerable functionality, especially when working in a graphical user
environment. It is especially helpful in easing movement between the host
and guest computers. Installing VMWare tools is not required, but I always
install it. It’s pretty simple and it’s also a really good exercise in performing
some basic Linux administration tasks. Here’s how to do it.

1. Install VMWare tools in VMWare Workstation by clicking on VM in the
menu bar and choosing Install VMWare Tools …

Figure 20: Installing VMWare tools

2. Now, in the VMWare guest, while logged on as root, mount the virtual
CD drive with the following command:
mount /dev/cdrom /media
Figure 21: How to mount the CD-ROM drive

3. Navigate to the /media directory with the command cd /media and view
the contents of the directory with the command ls:
Figure 22: Showing the contents of the mounted drive in /media

4. Navigate to the /tmp directory with the command cd /tmp and extract the
tar file (it’s often called a tarball) with the command tar xzvf
/media/*.gz: (I’ll explain tar in chapter five.)
Figure 23: Navigating to /tmp and extracting the tar file for VMWare tools

5. You’ll see a lot of activity fly through the screen as the system extracts all
the files from the tarball. After several seconds, the extraction will be
complete and your system will display a prompt.
6. In order to complete the installation of VMWare tools, you must also
install perl on your system. To do that, use the yum utility, which I’ll
explain later in chapter six. Use the following command to install perl:
yum install -y perl.x86_64
Figure 24: Installing perl

If you’re installing on a 32-bit system, modify the command, replacing
x86_64 with i386.

7. When perl is installed, navigate to the vmware-tools-distrib directory
with the command
cd vmware-tools-distrib and execute the following command:
./vmware-install.pl -d

(Notice the leading period. The -d switch answers the default to all
installation questions. If you want to customize the installation, just omit
it.)
Figure 25: Installing VMWare tools with the Perl script

8. Again, you’ll see a lot of text flying down the screen. After about a
minute, the installation will be complete.
This probably won’t be necessary, but in the event your system doesn’t
automatically unmount the VMWare Tools installation CD, use the
following command:
umount /media

CHAPTER 2:
Understanding Linux Commands
Videos are available for many of the procedures in this chapter at www.soundtraining.net/videos

Introduction
Working in Linux, especially on a Linux server, means working in the
command-line interface or the CLI. If you’re a Windows or a Mac kind of
person, this may seem unfamiliar, old-school, and daunting. Please don’t
worry. It’s just another way of managing a system and, once you get
familiar with the basic commands and some shortcuts, you’ll probably find
it pretty easy. You might even decide you like it better than clicking through
a series of menus, checkboxes, and radio buttons. Seriously. That’s how I
feel.
Chapter Objectives
Learn basic rules for Linux commands
Get comfortable working in the Linux shell (command line environment)
Learn basic Linux commands
Perform a system upgrade
Some Basic Rules About Linux Commands

1. Everything is case sensitive, so ls is something completely different from
LS.
2. You can complete a partially-typed command or filename by pressing the
Tab key.
3. Similarly, you can type of string of letters that might be part of a
command or filename, then press the Tab key twice to see the files and
commands whose names start with that string.
4. Linux separates directory branches with a forward slash (/) instead of a

backslash like Windows.
5. Linux doesn’t use drive letters the same way Windows does. Linux
mounts filesystems to mount points which are named identically to
directories. For example, your system may have a separate partition for
the boot partition, but it will be identified only as /boot.
6. Letters are assigned to device names in the /dev directory. For example,
/dev/sda is the first SCSI drive and /dev/sdb is the second SCSI drive.
sda1 indicates the first partition on the first SCSI drive. Although IDE
drives are not used as much as in the past, if they exist they are
designated as /dev/hda and so on.
7. “root” is the name of the administrator in Linux. It’s also the name of the
base of the filesystem (/), and there’s a separate home directory for root
called /root.
The Shell
The shell is the interface between the user and the operating system. It acts
as a keyboard interpreter, taking the keyboard input from the user and
delivering it to the operating system. You can think of the shell as being the
part of the operating system that allows you to interact with the kernel. The
shell is the program that executes Linux commands.
There are several shells available for use in Linux and UNIX. The one most
commonly used in Linux is the BASH shell (Bourne Again Shell). Other
shells include sh (Bourne Shell), csh (CShell), tcsh, and ksh (Korn Shell).
If additional shells are installed, you can change the shell by typing the
shell’s name at a command prompt.
For the purpose of this document, we’ll focus on the BASH shell.
Linux, like all multi-user operating systems, has an administrator account
which is used for system configurations and operations. In Linux/UNIX, the
administrator account is called “root” (equivalent to “admin”,
“administrator”, or “supervisor” in other operating systems). “root” is often
referred to as the “superuser” because of the account’s unrestricted access to

every area of the system and every aspect of the system’s configuration.
When logged on as root using the BASH shell, the prompt is a pound sign
(#). When logged on as a regular user using the BASH shell, the prompt is
a dollar sign ($).
Shell commands in the Linux/UNIX world are usually case sensitive. You
can see your default shell with this command:
echo $SHELL

It’s possible to install different shells using yum install (yum is a tool for
managing packages. I’ll go over it in more detail in chapter six.). As I
mentioned previously, BASH is the most commonly used shell and unless
you know a reason to switch, you’re probably better off staying with BASH.
Shell Scripting

In the same way that advanced Windows users will often create simple
batch scripts or Powershell scripts to automate certain processes in
Windows, Linux users can do similar things with shell scripts. Shell
scripting is a very powerful tool, even when used with simple shell scripts,
and I encourage you to explore shell scripting. Entire books have been
written on shell scripting, so I’m not going to attempt to teach it as part of
this book. I have included, however, some online resources that will help
you learn shell scripting.
Shell Scripting Resources

http://www.ibm.com/developerworks/library/l-bash/
http://www.math.utk.edu/~vasili/shell-scripts/
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
http://www.howtogeek.com/67469/the-beginners-guide-to-shellscripting-the-basics/
Some Commonly Used Linux Commands

The following are some of the more commonly used commands in the
wonderful world of Linux. Some of them won’t work until they’re installed,
which we’ll do later, so take a few minutes and peruse this list. Try some of
the commands, but know that some of them won’t work until later. The real
value of this list will come later, after you’ve gotten more familiar with
Linux and you’re trying to remember a particular command.
Working with Directories and Files
cat 

Concatenates (combines) files. Frequently used to display the contents of the specified file

cd

Change directory. When used by itself, with no options, moves to the current user’s home directory

cd ..

Change to the parent directory

cd 

Change to the specified directory

cp  

Copy specified file into specified directory

cp  


Copy specified files into specified directory

cp -r /
/


Copy the entire specified directory into /path/directory_name2

head 

Display the first 10 lines in the specified file

head -15 

Display the first 15 lines in the specified file

ls

Display the contents of the current directory

ls -a

Display the contents of the current directory, including hidden files and directories

ls -l

Display a long listing of the contents of the current directory, including filenames, permissions, owners,
size, links, and date information

mkdir 

Create a new directory with the specified name

more 

Display the specified file’s contents one page at a time. Use the spacebar to display the next page.

mv  //
/

Move filename into //

mv  

Rename filename1 to filename2

pwd

Print working directory to stdout, which means display the name of the current directory, including the
path

rm 

Remove the specified file or directory

rm -r 

Remove an entire directory recursively (r) as well as its included files and subdirectories

rmdir 

Delete the specified directory

tail 

Display the last 10 lines of the specified file

Display the last 15 lines of the specified file

tail -15 

Finding Files and Text Strings Within Files

Starting from the root directory, search for the file with the specified name

find / -name 
grep 
//

Starting from the specified path, search for all files containing the specified string

locate 

Find file specified file by searching in the database

updatedb

Update or create a database of all files under the root directory. This command updates the database which is
used by the locate command

whereis 

Search $PATH (your default path), man pages and source files for the specified application

which 

Search $PATH for the specified application

Note: You can display your user profile’s default path with the command
echo $PATH

Working with Archived and Compressed Files
Archive

Combine specified files into a single archive file called .tar. The use of “>” directs the output of
the tar command into the specified file.

tar -cvf filenames >
.tar

Extracts files from specified archive file

tar -xvf .tar
tar -czfj  >
.tar.bz2

Combines specified files into a single, bzip2-compressed archive called .tar.bz2

tar -czf  >
.tar.gz

Combines specified files into a single, gzip-compressed archive called .tar.gz

Compress
bzip2 -c  > .bz2 Compress
gzip -c filename > filename.gz

specified file to .bz2

Compress /path/directory_name to .gz

Decompress
bunzip2 

Uncompress specified file

gunzip 

Uncompress specified file

tar -xjf  Uncompress

specified file

tar -xzf 

Uncompress specified file

tar -xzf 

Uncompress specified file

Red Hat/CentOS Package Management
yum install 

Downloads and installs specified package

yum remove 

Removes specified package, but leaves configuration files intact

yum search 

Looks for packages whose names match the text string

yum update 

Updates the specified package

yum update

Updates all packages

yum info 

Display information about the specified package

yum list installed

List the packages installed on the system

yum grouplist

yum groups allow you to install several related packages with a single command. The yum grouplist command show
available groups.

yum groupinstall 

Installs a software group

yum groupupdate 

Upgrades a software group to the latest version

yum groupremove 

Removes an installed software group
Displays enabled software repositories

yum repolist

The above yum commands are covered in more detail with screen captures
and step-by-step guides in chapter six.
Starting and Stopping the System
halt

Shutdown the system now

reboot

Reboots the system

shutdown -h now Shutdown the

system now

shutdown -r +15 Reboot in 15

minutes

shutdown -r now Reboot now

Mounting Filesystems
mount -t iso9660 /dev/cdrom
/mnt/cdrom

Mounts cdrom to the /mnt/cdrom directory

mount -t vfat /dev/sda1
/mnt/c_drive

Mounts the first partition (1) of the first hard disk drive (a) which is in fat32 vfat format to the
/mnt/c_drive directory

umount /mnt/hda1

Unmounts /mnt/hda1

mount /dev/cdrom /media/cdrom

Mounts the cdrom to /media/cdrom

User Administration
adduser 

Create a new user

exit

Exit from the login session

groupadd  Create

a new group with the specified name

groups

Display the group membership of the currently logged on user

passwd 

Set or change a user’s password

su

Switch user to root from the current login

su -

Switch user to root from current login and load root’s profile

useradd 

Create a new user

usermod 

Change properties of the specified user account

users

Display users currently logged in

w

List logged-in users with information about their session

who

List logged-in users

whoami

Display current user

Process


Execute command in the foreground

&

Execute command in the background

ctrl+c

Interrupt a program

ctrl+z

Suspend a program

kill 

Kill the specified process

kill -9  Forcefully kill

the specified process

ps

List all processes

top

Monitor processes in real time

Networking
hostname

List the system’s hostname

ifconfig

Set/Display network information

ip address

Displays IP address information for each interface

ip route

Displays local routing table

ifup 

Brings an interface up

ifdown  Brings

an interface down

service network status

Display currently active interfaces

service network stop

Disable networking

service network start

Enable networking

service network restart Restart networking

System Information
cp  //. Copy filename

into specified location

df -T -h

List filesystem disk space usage

fdisk -l

List partition tables

free -m

Display RAM+Swap usage

uname -a

General system information

Hands-On Exercise 2.1:
Upgrading Your CentOS Linux Server Installation
In this exercise, you will use some of the commands listed above to ensure
your CentOS Linux server installation is patched to current levels.

1. Use the yum utility to update all packages with the following command:
yum -y update

(The -y option simply answers yes to confirmation requests.)

Figure 26: Using yum to update all packages on the system

2. It will take several minutes the first time you run yum
finished, as before, it will return a shell prompt.

update.

When it’s

Figure 27: A completed system packages upgrade

Congratulations! Your system is now upgraded to current patch levels.
This is an important process to repeat as packages are updated from timeto-time. This is, of course, especially important with security patches. You
can subscribe to a maillist to learn about CentOS security patches at
http://lists.centos.org/mailman/listinfo/centos-announce.
You might also want to consider writing a simple shell script and using the
scheduler service known as cron to automatically apply patches. The risk in
doing so, of course, is that you can’t test patches before they’re applied and
it’s possible that a patch might break some or all of your system. I’ll
discuss cron later in this book in chapter 11.

CHAPTER 3:
Linux User Accounts
Videos are available for many of the procedures in this chapter at www.soundtraining.net/videos

Introduction
Even if you think your server needs only one or two user accounts, there are
many others which are added as you add services (daemons). As with most
things in Linux, at first the user account files may seem intimidating, but as
you work with them they’ll make more sense.
In this chapter, I’ll go over the user account files, user profiles, and group
accounts. For the sample usernames, I’ve used some of my favorite
composers and names of several former colleagues. See if you can spot ‘em!
Objectives
Learn how Linux user accounts are organized
Configure default values for user profiles
Add and modify user accounts
Add and modify group accounts
Understanding /etc/passwd
The user list is in /etc/passwd. /etc/passwd is a simple text file
containing entries such as
this: don:x:1000:1000:Don R. Crawley,,,:/home/don:/bin/bash
In the above example, there are seven fields, each separated by colons.
Field Number Example Value Description
1

don

Username

2

X

Password (“x” indicates that shadow passwords are in use)

3

1000

UID (User ID)

4

1000

GID (Group ID)

5

Don R. Crawley Comment (usually the user’s full name)

6

/home/don

User’s home directory

7

/bin/bash

User’s default shell

You can view the contents of /etc/passwd with the command less
/etc/passwd:

Figure 28: Viewing the contents of /etc/passwd

Soundthinking Point:
What If There’s No Password?
You may be wondering what happens if you create a user, but don’t create a
password for that user. The answer is simple: He or she cannot log on without a
password.

Notice that there are many system accounts created by default. The only
account I’ve created on this system so far is my own user account. Notice,
also, that the comment field includes several commas. As mentioned
previously, the comment field normally contains the user’s full name. It can
also contain other text-based information such as phone numbers, building
names, or other unique identifiers for the user. If you choose to include
additional information fields about the user, separate each field with a
comma.
It is possible to add and delete users by modifying this file, but is much
easier to do it with command line tools like useradd or userdel.
Creating a New User
Using the “useradd” command in the CLI: useradd mcostello will create
the user account “mcostello”, a group called “mcostello”, and a “home

directory” for the new user.
Passwords
Password Commands

Using the “passwd” command in the CLI:
will prompt for a new password for user dlawrence
 will lock the user account
 will unlock the user account

passwd dlawrence
passwd –l
passwd –u

Require passwords to be changed at regular intervals with this command:
chage –M <# of days> 

Shadow Passwords

You need to be aware that the file /etc/passwd is world-readable which
means that literally everyone can read it, whether you’re an administrator or
not. (I’ll discuss permissions in more detail in a moment and in much
greater detail in chapter four.) Therefore, shadow passwords are normally
enabled which replaces the password in /etc/passwd with an “x” and
moves the encrypted passwords to the /etc/shadow file, which is not
readable by anyone other than root and members of the shadow group.
Notice, in the following screen capture, in the far left column which shows
permissions, that the user has read/write (rw) permissions, the group as
read (r) permissions, and the world (the third permission) also has read (r)
permission on the file /etc/passwd, but no one has read permission on
/etc/shadow.
Figure 29: Viewing the permissions on /etc/passwd and /etc/shadow

Default Values
Default values for useradd are found in /etc/default/useradd.
Traditionally, such values were stored in /etc/login.defs which is still
maintained, even if it’s not used. By modifying the values found in

/etc/default/useradd,

you can set default values for all new users created
with “useradd”. Values found in /etc/default/useradd include minimum
and maximum password age, the location of user mailboxes, starting and
ending UIDs and GIDs, and whether or not to create home directories for
new users.
You’ll also find hidden files that control user profile behavior in /etc/skel.
Figure 30: Displaying the hidden files that control user profile behavior

Notice that each of the three files in the /etc/skel directory has a name
that begins with a period. That makes them hidden files, which is why it
was necessary for me to use the -a option with the ls command in order to
see them.
Soundthinking Point:
Hidden Files in Linux
There are many hidden files in Linux, especially in user profiles. Files can be
hidden in Linux by making the first character of the filename a period. For
example, one of the hidden files in a user profile is .bashrc. You can list the hidden
files in a directory with the command ls -a.

Adding Groups
Using the groupadd command in the CLI: groupadd
group “sales” to your system

sales

will add the

Using “useradd” with options (options are also frequently referred to as
switches)
useradd –c “Johann S. Bach” –g musicians –G baroque,
organists, jbach adds the user “jbach” with the comment “Johann

S.
Bach”, making him a member of the primary group “musicians”, plus
additional group membership in “baroque” and “organists”
useradd wloman -g sales -e 2021-06-18 creates a new user named
wloman, in the sales group, and sets the account to expire on June 18,

2021.
will create a new user
named dmilhaud, put him in the composers group, and create the
password p@ss1234 for his account.
useradd dmilhaud -g composers -p p@ss1234

Deleting Users
Using the “userdel” command in the CLI:
deletes the user account. The “-r” deletes the user’s
home directory and its contents.
userdel –r jbach

Changing Ownership for a File or Directory
changes group and user
ownership for a file or directory. For example, if I wanted to change the
ownership of the file file1 to the user Nathan and the group sales, I
would use the following command:
chown  

chown Nathan:sales file1

In the screen capture below, I used the chown command to change the
group ownership of the file file1 to engineering, while leaving the user
ownership unchanged.

Figure 31: Using the chown command to change file ownership

Notice in the preceding screen capture how I used the ll (long listing)
command to display the three files in the directory, along with their owner
(the first name) and their group (the second name). Then, I used the sudo
chown command to change the group for file1 to engineering. When is used
the ll command again, the group for file1 had changed to engineering.

Soundthinking Point:
Using Sudo
The sudo command allows you to run root commands as a regular user. In the
previous screen capture, I was logged on as regular user don. Regular users don’t
have permission to change file ownership, so I had to precede the chown
command with sudo and enter my password in order to execute the chown
command. The user don also had to be in the sudoers list. I’ll cover sudo in more
detail in chapter 10.

Adding a User to a Group
usermod –G  

adds a user to a supplementary

group
usermod -g  

will change a user’s initial

group.
Additionally, the usermod command can be used after a user account is
created to add comments to the user account, change the user’s home
directory, add an expiration date to the account, and modify various other
account parameters. Group accounts are stored in the /etc/group file,
which, like /etc/passwd, is readable by everyone.
To view a user’s group membership, type this command: groups


Viewing Information About the Current User
The “id” command allows you to see information about the currently logged
on user, including username, UID, group memberships, and GIDs.
Hands-On Exercise 3.1:
User and Group Administration
Adding Users and Groups Using the Command Line Interface

In this exercise, you will practice adding users and groups in a terminal
window. If the command doesn’t work, make sure that you’re logged in as
the root user.

1. Use the switch user command to change to root:
su Password:p@ss5678

(Remember that your password is not shown as you enter it.)

2. Enter the following command to add the user user01:
useradd user01

3. Assign a password to the user account “user01” with the following
command:
passwd user01
Changing password for user01.
New password: password

(the password will not be displayed as you

enter it)
BAD PASSWORD: it is based on a dictionary word
Retype new password: password

(the password will not be displayed

as you enter it)
passwd: all authentication tokens updated successfully.

4. Use the switch user command to change to user01:
su – user01

Note the user of the hyphen following the su command, which tells the
system to load the new user’s profile in addition to switching to the new
user account.

5. As user01, you will now attempt to change the password to a simple,
non-secure password. Notice that, as a regular user, the system will not
allow you to use a simple, non-secure password, but will, however,
permit a secure password.
passwd
Changing password for user user01.
Changing password for user01
(current) UNIX password:password
New UNIX password:mypassword

BAD PASSWORD: it is based on a dictionary word
New UNIX password:p@ss1234
Retype new UNIX password:p@ss1234
passwd: all authentication tokens updated successfully.

6. Enter the following command to add the user user02 with additional
information:
useradd –c “User Two” –e 2017-06-18 user02

This command adds a user with a comment of User Two (Comments are
often used to identify the user’s full name. Quotation marks are required
around a comment when it consists of more than a single word.), an
account expiration date of June 18, 2017, and a user name of user02.

7. Assign a password to the user account “user02” with the following
command:
passwd user02
Changing password for user02.
New password:p@ss1234

(The password will not be displayed as you

enter it.)
Retype new password: p@ss1234

(As before, the password will not be

displayed as you enter it.)
passwd: all authentication tokens updated successfully.

8. Enter the following command to see other options available for use with
useradd:
useradd --help

9. Create a new group called “sales” by entering the following command:
groupadd sales

0. Repeat step eight for the groups research, management, and
engineering.
1. You can view the new user accounts you created with the following
command:
less /etc/passwd

(As discussed earlier, /etc/passwd is the file that contains all user

accounts and related information.) Touch the End key to navigate to the
bottom of the file and observe a line similar to this:
user01:x:500:500:User One:/home/user01:/bin/bash

In this line, each field is separated by a colon. The first field is the user’s
logon name, the “x” indicates that shadow passwords are enabled, the
first 500 is the UID (User ID), the second 500 is the GID (Group ID) for
the user’s primary group, the next field is the comment field, followed by
the user’s home directory, and finally the user’s default shell.

2. You can view the new groups you created with the following command:
less /etc/group

As with /etc/passwd, touch End to navigate to the bottom of the file
where you’ll see each of the groups you created. Note how the GIDs in
this file correspond to the GIDs in /etc/passwd.

3. Touch the “q” key to exit “less”.
4. Add user01 to the sales group (as the user’s secondary group) with the
following command:
usermod -c “User One” -G sales user01

5. View the groups again with the following command:
less /etc/group

Touch End to navigate to the bottom of the file and observe that user01 is
now a member of the sales group.
Additional User Management Commands
To delete the user:
userdel 

To delete the user and his/her home directory:
userdel –r 

To display the username, UID, group memberships, and GIDs for the
presently logged on user:
id

To view a user’s group membership:
groups 

CHAPTER 4:
File and Directory Management
Videos are available for many of the procedures in this chapter at www.soundtraining.net/videos

Introduction
CentOS/Red Hat 6 uses the ext4 file system by default. Older Linux distros
use the ext3 file system by default. ext4 is a journaling file system which
offers greater stability and reliability than predecessor file systems. Among
the benefits of ext4 are larger volume sizes, larger file sizes, and slightly
longer filenames than its predecessor.
Objectives
Learn about Linux filesystems and file types
Learn about links, both hard links and symbolic links
Understand how to mount a device
Gain familiarity with /etc/fstab
Manage file and directory permissions
Working with File Systems and Mount Points
There are several methods you can use to identify the file systems in use on
your computer. An easy method is to use the mount command:
mount | grep ^/dev

On my system, it produces the following output:
Figure 32: A method for viewing the file systems in use

In the output, you can see that the root partition (/) is using ext4 and the
boot partition (/boot) is also using ext4.
In case you’re wondering about the syntax, here’s the explanation:

mount Mounts

a file system, which makes it accessible to the user

|

The pipe symbol redirects output. In this case the output of mount is redirected into a grep filter.

grep

The grep utility will become one of your best friends. It allows you to filter output to see only output that matches a particular string. (Oh, and in
case you’re wondering, grep is an acronym that stands for global regular expression print.)

^

The caret is a shell wildcard used in regular expressions that says, “Look for lines that begin with whatever follows.”

/dev

This is the filter being used with the caret and grep. This says, “Look for lines that begin with /dev and ignore everything else.”

Linux can also read and/or write to many other file systems including ext2,
ext3, FAT, FAT32, NTFS, HPFS, and others. Partitions are mounted onto
existing directories called “mount-points”.
Linux uses a tree model to organize directories and files. Directories are the
basic unit of storage in the Linux file system. Directories can contain files
or other directories. In the same way that a tree cannot exist without its
roots, the Linux file system starts at root. Root is designated by “/”. (Recall
from chapter two that the term “root” is used in three different ways in
Linux: “Root” is the name of the superuser, it is also used to identify the
superuser’s home directory , and to indicate the root of the file
system . It can be difficult to know which “root” someone is talking
about. It helps to be clear about what is meant when referring to “root”.)
Linux File Types
When you issue the “ls -l” command, Linux will display a listing of files
along with information about the files. The far left hand column of the
listing indicates the type of file. Three common file types are regular files,
links, and directories.

Figure 33: Some of the common file types in Linux

In the screen capture, notice along the far left side, the file ssh is identified
with the letter l, indicating that it is a link. The file file1 is identified with a
hyphen (-), indicating that it is a regular file, and the file MyDir is identified
with a d, indicating that it is a directory.
Regular files

Regular files are the most common file type on Linux or UNIX systems.
They can be used to store various types of data including text that you can
read or binary data that can be executed by the system. It is often helpful to
identify more information about the file than just whether it is a regular file
or not. For example, you might want to know whether the file is an ASCII
text file or a shell script. You can use the “file” command to identify the file
type.
file 

Figure 34: Using the file command to see information about files

In the following screen capture, I used the file command to display
information about a shell script. Notice in the output of the ll command that
the file is considered to be a regular file. Notice, also, that the permission
for the owner includes the executable permission (I’ll explain more about
permissions is a moment. For now, just know that the “x” in the far left
column indicates executable.). When I used the file command to display the
file type, however, the system told me that the file monitor.sh is a shell
script.
Figure 35: Displaying information about a script file

Links

Links are files that point to other files on the system. There are two types of
links: Hard links and symbolic links.
Hard links are a special type of directory entry that have certain limitations:
Hard links can only point to a file; they cannot point to a directory.
They cannot be distinguished from the file to which they are pointing.
Hard links are created with the “ln” command:

ln  

Symbolic links are special files that store a pathname to another file.
Symbolic links are created with the “ln” command, combined with the “-s”
option:
ln -s  

You can think of symbolic links as being similar to shortcuts in Microsoft
Windows.
Figure 36: Creating and viewing a symbolic link

In the preceding screen capture, I created a symbolic link titled ssh in the
current directory, which links (or points) to the file /etc/ssh/ssh_config. I
also used the command ll ssh to show the newly created link.
Directories

Directories are containers that hold various types of files or other
directories. Directories are used for organizing the file system.
Mounting a Device
In order to make a device such as a DVD-ROM or USB drive available to
the file system, it must be “mounted” to an existing mount point within the
file system. Before using the “mount” command, ensure that the desired
mount point already exists within the file system. A common place to locate
mount points is within the /mnt directory (but they can be placed
anywhere). To mount a device to the mount-point:
mount /dev/cdrom /mnt/dvdrom

You can navigate to the newly mounted device with the “cd” command: cd
/mnt/dvdrom

Before ejecting DVDs or other types of storage, you must unmount them
from the file system. To unmount a mount-point:
umount /mnt/dvdrom

Note that, before a mountpoint can be unmounted, you must cd out of the
directory which you wish to unmount.

Partitions can be mounted automatically on boot through the fstab file,
which is located at /etc/fstab.

Figure 3:7 Viewing /etc/fstab

Understanding /etc/fstab
The file /etc/fstab contains descriptive information about the various file
systems. The fstab file is read at boot. Here is a brief explanation of
/etc/fstab.
Pound signs (#) indicate comments and are ignored by the system.
The first column indicates the device file which points to the device with
the file system which will be mounted.
The second column is the mount point.
The third column indicates the file system type in use on the file system
being mounted.
The fourth column is used for mount options.
The fifth column is for the dump utility to decide whether or not to back
up the file.
The sixth column determines the order in which fsck checks the file
system at boot time. A zero means the filesystem will not be checked.
Take a look at the last line in the screen capture, which I added to simplify
the explanation of the part of /etc/fstab. Here is an explanation of each of
the columns in that line:
is the device file for a floppy drive. (Yeah, it’s weird to see a
floppy drive, but it is what it is. I don’t know, maybe I’m just feeling
nostalgic for limited and unreliable storage media for some strange
reason.)
/media/floppy0 is the directory which will be mounted to give us access
/dev/fd0

to that whopping 1.544MB of data.
The entry auto in the third column means the system will attempt to
identify the filesystem type. (Notice that the entry for
/dev/mapper/LinuxServer01--vg-root specifies ext4 as the filesystem
type.)
In the fourth column, rw means the filesystem will be mounted as
read/write, user means that any user can mount the filesystem, but only
root or the user who mounted it can unmount it, noauto means it will not
be automatically mounted at boot time, exec allows the execution of
binaries that are on the partition, and the last entry adds support for utf8.
The zero in the next column disables the dump option.
The zero in the sixth column means that the filesystem will not be
checked by fsck at boot time.
The fstab file holds information about how to mount partitions and storage
devices. If you’re having trouble mounting, say, a DVD drive, it may be a
missing entry in /etc/fstab.
Understanding Mount Points
You can think of mount points as a way of accessing a partition. Recall that
in Linux, everything is oriented around the file system. Drives are identified
with letters, so the first SCSI drive on a computer might be known as
/dev/sda, the second as /dev/sdb, and so on. The first IDE drive would be
known as /dev/hda. Partitions are numbered, so the first partition on the
first SCSI drive would be /dev/sda1, the second partition would be
/dev/sda2, and so on.
You cannot, however, access partitions through /dev files; you must create
mount points which, as you’ll recall from earlier, are simply a means of
gaining access to a partition through the computer’s file system.
A basic partitioning scheme will usually have three partitions: /, /boot,
and a swap partition. Server administrators will frequently create separate
partitions for other purposes as shown below:

Mount Point Purpose
/boot

Contains boot loader, kernel and related files

/

Root of the file system

/usr

UNIX system resources (usr) is where you find program and related files

/home

Users’ home directories and profiles

/var

Variable size files including logs and print spools. Also home to WWW and FTP files.

/tmp

Temporary files

It’s especially common to put /tmp on a separate partition to avoid
problems related to a corrupt process or application going crazy writing
temporary files. I once had a process do that. I had not created a separate
partition for /tmp (it was just a directory under root) and, when the
corrupted process went crazy writing temporary files, it filled up the entire
root partition which made the system unusable. If I had put /tmp in its own
partition, I would have avoided the system becoming unusable.
Managing File and Directory Permissions
Linux uses three types of file/directory permissions. For files:
Read means that you can view a file’s contents.
Write means that you change or delete the file.
Execute means that you can run the file as a program.
For directories:
Read means you can list the contents of the directory.
Write means you can add and remove files in the directory.
Execute means you can list information about the files in the directory.
Permissions are assigned to both users and groups
Read permission: Whether the file can be read or the directory contents

can be listed
Write permission: Whether the file can be modified or written to or
whether changes can be made to the contents of a directory. For example,
without write permission, you cannot create, delete, nor rename a file
Execute permission: For files, whether the file can be executed. For
directories, this is the permission to enter, search through the directory, or
execute a program from the directory
You can list file or directory permissions by using the “ls” command with
the “-l” option, for example: ls –l. On many systems, including Red
Hat/CentOS server, you can also use the alias “ll”. When you list files and
folders using the “–l” option, you’ll see a display like this:
d-rw-rw--- 1 jbach jbach 150 March 10 08:08 file1.txt

The first column (drw-rw----) is actually ten columns which can be divided
into four groups:
The first group is a single column used to identify the type of entry. As
mentioned previously, the options are:

“-“ is a regular file
“d” which indicates a directory
“l” is a symbolic link to another program or file elsewhere on the system

The three options above are the options you’ll deal with most of the time.
There are other file types which you will encounter from time-to-time,
which are listed below.
“b” is a block file
“c” is a character device file
“p” is a named pipe file or a pipe file

“s” is a socket file

The second group is three columns used to identify the permissions of the
owner
The third group is three columns used to identify the permissions of the
owner group
The fourth group of three columns identifies the permissions of the world
(everyone).
The three permissions columns are, in order: read (r), write (w), and execute
(x). If the permissions are expressed as “-rw-rw----“, then the entry is a file
(“-“) whose owner user and owner group has read+write permissions, but
not execute and the rest of the world is denied access.
Changing Permissions

Use the chmod command to change permissions. You can set permissions
for the user (u), group (g), and others (o). Permissions can also be set for all
(a).
Permissions are set using +, -, and =.
+ adds the permission, - removes the permission, and = sets the permission
as specified and can be used to copy permissions.
For example:
chmod u+x file1

adds the execute permission for the user owner on

file1.
chmod g-w file2

removes the write permission for the group owner on

file1.
adds the read permission for everyone on file3.
file4 copies the user permissions for file4 to the world.

chmod a+r file3
chmod o=u

Octal (Numeric) Permissions
Octal permissions are simply a form of shorthand for assigning access to
files and folders.
Read = 4
Write = 2
Execute = 1
No access = 0
Use chmod to assign permissions using the numeric system. For example:
chmod 644 file1 would assign owner read+write (6=2+4), the owner’s
group and everyone would have read permission (4).
Special Permissions

Sticky bit: Can be used on “world writable directories” to prevent users
from deleting other users’ files
Assigning Special Permissions
chmod 1766 

(1 makes it sticky)

Hands-On Exercise 4.1:
Viewing File and Directory Permissions
In this exercise, you will use various commands to view file and directory
permissions.

1. If you are currently logged on as root, skip to step number two. If you’re
not already logged on as root, change to the superuser (root) account with
the switch user command:
su Password:p@ss5678

2. Navigate to the root (“/”) directory and use the ls –l command to verify
the existence of /demo. If it is not present, use the mkdir command to
create a new directory called demo:
mkdir demo

3. Now, use the cd command to navigate to /demo, then use the ls -l
command to verify the existence of file1, file2, and file3. If they are not
present, use the touch command to create three files:
cd demo
touch file1 file2 file3

4. Use the following command to view the permissions for the three files
you just created:
ls –l

5. What are the permissions on each of the files for the user? Each of the
files should have “rw” permission for the user.
6. What are the permissions on each of the files for the group? Each of the
files should have “r” permission for the group.
7. What are the permissions on each of the files for the world? Each of the
files should have “r” permission for the world (other).
Hands-On Exercise 4.2:
Changing Permissions Using Alphabetic Expressions
In this exercise, you will use alphabetic and octal syntax to modify file
permissions using the chmod command.

1. While still in /demo, execute the following command to display the
permissions for the files:
ls –l file1

2. Notice that only information about file1 is displayed because you
modified the “ls –l” command by appending “file1” to the end of the
command. What are the permissions for the user on file1?
Again, it should be “rw” for the user on file1.

3. Now, use the following command:
chmod u+x file1

4. Now, execute the following command to display the permissions for the
file:
ls –l file1

5. What are the permissions now for the user on file1? The permissions
should now be “rwx” for the user.
6. Execute the following command:
chmod g+w file2

7. Now, what are the permissions for the group on file2? The permissions
should be “rw-“ for file2.
8. Execute the following command:
chmod a+x file*

9. What happened to the permissions on all files in the directory? All files
should now have “x” permission in addition to any pre-existing
permissions.
0. Execute the following command:
chmod o=u file3

1. Use the ls –l command to view the new permissions. What happened to
the permissions for the world on file3? Are they the same as for the user?
The permission for the world (other) should now match the permissions
for the user.
Hands-On Exercise 4.3:
Octal (Numeric) Permissions
In this exercise, you will practice managing permissions using octal settings
instead of alphabetic expressions.

1. Execute the following command:
chmod 644 file*

2. Using the ls –l command, display the changed permissions. What are
the new permissions for the files? The new permissions should be “rw”
for the user and “r” for the group and the world (other).
3. Execute the following command:
chmod 777 file1

4. Again, use the ls

–l

command to display the permissions. What

happened? The permissions for file1 are now “rwx” for user, group, and
world.
Setting Default Permissions
The umask command is the user file-creation mask command which allows
you set default permissions.
The umask command uses an octal value that is the inverse of the values
used with the chmod command. In other words, if you wish to set
permissions for a directory to full for the owner, read for the group, and
nothing for the world, you would use chmod as follows:
chmod 740

To set the default permissions for all future files and directories created to
full for the owner, read for the group, and nothing for the world, use the
umask command with a value that is the inverse of the value used with
chmod:
umask 037

Note that this is a universal command and cannot be applied to a single
directory.
Disk Configuration Tools
fdisk /dev/hda starts the disk configuration utility “fdisk” (“hda”
represents the first IDE drive, “sda” would represent the first SCSI drive on
the system.)
Using fdisk returns a different prompt than the customary Linux command
prompt:
Command (m for help):p displays your disk partitions.
Command (m for help):d schedules partitions for deletion (if you make a
mistake and don’t want to delete a partition, you can simply type q to quit
without saving)
Command (m for help):l lists known partition types

Command (m for help):m lists available commands
Related Commands
fdisk –l

displays information about partitions on a hard drive

fdisk –t

sets the file system for a partition

mkfs

will format a partition

fsck

will repair a corrupted file system

fsck /mbr

will repair a corrupted Master Boot Record

Soundthinking Point:
Partition Management Tool
The open source tool gparted is a great tool for managing disks and partitions.

CHAPTER 5:
Linux Administration
Videos are available for many of the procedures in this chapter at www.soundtraining.net/videos

Introduction
This is a long chapter and one of the most important chapters in this book.
In this chapter, I’ll talk about default Linux directories and how to generally
find your way around in Linux. You’ll learn about the grep tool, which will
become one of your best friends. Additionally, we’ll discuss Linux
compression and archiving tools, plus I’ll show you four different ways to
get help (in addition, of course, to Google).
Objectives
Gain familiarity with default Linux directories
Learn about Linux profiles, both system-wide and user-specific
Practice commonly-used shell commands
Practice switching user accounts without logging off
Move, copy, and rename files
Use the find command to locate files on the system
Practice editing configuration files with the vi text editor
Use the grep tool to filter output (conditional searching)
Create aliases to simplify commands
Learn how to start and stop services (daemons)
Learn how to use Linux compression and archiving tools
Gain familiarity with the Linux boot process, including run levels
Learn the proper way to shut down your system, including shutdown
options
How to get help in Linux
GUI vs. CLI

Since the first graphical user interface (GUI) was created in the Xerox Palo
Alto Research Center in the early 1970s, those of us who work in IT have
debated its benefits and drawbacks. The real issue is not whether to use a
GUI or a command-line interface (CLI); it is about choosing a tool that
works for you and helps you work most effectively. For most of us, that
means that sometimes we’ll use a GUI and sometimes we’ll use a CLI.
I once had a student in a Linux workshop who said his nickname was “No
GUI Louie”. While I remember Louie as a very knowledgeable and capable
IT pro, I have also had knowledgeable and capable students who avoid the
CLI because of its complexity without considering the power it affords an
administrator. I think we limit ourselves when we arbitrarily limit the tools
at our disposal by eliminating GUI or CLI tools. In my own work, I find
that I use both the CLI and GUI, depending on the task at hand and my
personal familiarity with the tools in question. (Okay, I use the commandline most often, but I’m very grateful for a GUI when performing unfamiliar
tasks!)
Pros to Using a GUI

Faster (sometimes)
Fewer typing errors
Less minutia
Safer (harder to make mistakes)
Can help teach you CLI commands
Cons to Using a GUI

Father away from the “road”
Less control
Java and other issues might make GUI unavailable
Some of the names and labels it creates are strange
Some people are more familiar with the CLI

The minimal and basic server installations of Red Hat/CentOS server do not
include a GUI, although you certainly can install one if you feel the need.
My experience, however, is that most sys admins do not use a graphical
interface with Linux servers and that’s how this book is designed and
written.
One final comment on the subject of GUIs in general: In the past, they were
often buggy and unreliable. Today, graphical interfaces are much improved
over those in the past. If your experience with GUIs in the past was less
than stellar, you might want to consider giving the newer graphical
interfaces a try. Still, the bulk of this book is based on the command line
interface.
Linux Directories
As mentioned previously, everything in Linux/UNIX is based on the file
system. The file system is comprised of various directories (Windows calls
them “folders”.) The root directory (“/”) is at the base of the file system.
Some directories may be on different partitions or drives, but they are still a
part of the file system. Some directories may even be on completely
different computers, perhaps running a completely different operating
system, but they are still part of the file system. What follows is a list of
some of the more commonly found directories in the Linux file system (not
all directories are included on every system):
is the root directory
/bin/ and /usr/bin/ store user commands. For example, cp, a user
command is found in /bin.
/boot/ contains files used for system startup including the kernel.
/dev/ contains device files
/etc/ is where configuration files and directories are located.
/home/ is the default location for users’ home directories.
/initrd/ is used to load required device modules and mount the
initrd.img image file during system startup.
/

/lib/ and /usr/lib/
/sbin/.

hold library files used by programs in /bin/ and

holds orphaned files (files without names) found by fsck
/mnt/ holds the mount points for file systems that were mounted after
boot.
/opt/ is used primarily for installation and uninstallation of third-party
software. Holds optional files and programs.
/proc/ is a virtual directory (not actually stored on the disk) which holds
system information required by certain programs.
/root/ is the home directory of the superuser “root”
/sbin/ and /usr/sbin/ store system commands. For example, ifconfig,
a system command is found in /sbin.
/tmp/ is the system temporary directory. All users have read+write
access to /tmp/.
/usr/ contains files related to users such as application files and related
library files (“usr” is an acronym that stands for UNIX system
resources).
/var/ (as in “variable”) holds files and directories that are constantly
changing such as printer spools and log files.
/lost+found/

The preceding page is a brief overview of Linux/UNIX directories. For a
more complete discussion of Linux/UNIX directory structures, search on
“Filesystem Hierarchy Standard” at www.wikipedia.com.
Linux Profiles
There are two types of Linux profiles: system-wide and user-specific.
System-wide configurations affect all users, while user-specific
configurations affect only a single user. Normally, you must be root to
change system-wide configurations.
User-Specific Profiles

User-specific profile settings are found in the user’s home directory
(/home/don), but they’re hidden by prepending a “.” to the filename.

Examples of profile files include:
.bashrc
.bash_profile
.bash_history

There are many others. You can view the hidden files in any directory by
using “ls -a”.
As mentioned previously, the default settings for user profiles are in
/etc/skel.
System-Wide Configurations

System-wide configuration settings are found almost entirely in /etc. This
is where you find files for configuring Apache, BIND DNS, SSH, and
nearly any other aspect of Linux. For example, in Debian Linux, if you want
to modify settings of your Apache web server, you would probably modify
/etc/apache2/apache2.conf. If you are working with a Red Hat product,
the file most likely is /etc/httpd/conf/httpd.conf. (The reason for using
tentative language is because everything is configurable in Linux and the
person who built your Linux system might have chosen to place the
configuration files elsewhere.) My point here, however, is that regardless of
which distro you’re using, you’re most likely going to find configuration
files in /etc.
Administration Tools and Techniques
Working in Terminal

Most Linux systems configured as servers are managed in a command-line
interface (CLI) and many Linux power-users prefer to manage even their
desktop system in the CLI. (Watch out for anyone who says that either vi or
emacs is their favorite word processor!) Although the graphical user
interface (GUI) tools available for use in many Linux distros have improved
considerably over past versions, as discussed previously the CLI continues
to provide the greatest power and flexibility for configuring and managing a

Linux system. The other benefit to working in a CLI is that each Linux
distro is much more similar in the CLI than in the GUI. For the purpose of
this book, you will do most (actually, nearly all) of your configurations in
the CLI, thus allowing you to make smoother and simpler transitions from
Red Hat/CentOS other distros such as SuSE, Ubuntu, Debian, Slackware,
or even traditional UNIX systems.
Hands-On Exercise 5.1:
Commonly-Used Shell Commands
When you first logon to a Linux system, you may be in a GUI or in a
command-line shell. If you are in a GUI, you can open a terminal window
(a command-line shell) by clicking on Applications in the menu at the top
of your desktop, then mouse over Accessories, and click on Terminal. Once
you are in a command-line shell, you are placed in your home directory
(/home/). You can navigate to other directories by using the
“cd” command, followed by the path to the desired destination.

1. If you are already logged on as root, skip to step two. If you are not
already using the root account, use the su (switch user) command with
the “-“ switch to change to the root account and profile:
su Password: p@ss5678

2. cd changes the working directory. Enter the following command:
cd /home

Notice that the prompt changes to display the current directory (home).

3. To return to your own home directory, type the following command:
cd ~

You can also type cd by itself to return to your home directory, but you
should know that the tilde (~) represents your home directory. The tilde is
often used in path statements to represent your home directory.

4. Now, enter the pwd command to print your working directory to your
screen (output directed to the screen is known as standard output or

stdout):
pwd

5. You can go up one level in the directory hierarchy by using the
command:
cd ..

The “..” indicates the parent directory. All directories except for the root
(/) directory have a parent.

6. Once again, enter the pwd command to print your working directory:
pwd

7. Once again, return to your own home directory. This time, simply enter
cd with no tilde:
cd

8. Now issue an ls command to see the contents of the current directory.
Recall from earlier that ls lists the contents of a directory.
There are a variety of switches or options available for use with ls. Some
commonly used ls options:
ls –a:
ls
ls
ls
ls
ls

Lists all files including hidden files
–l: Long listing, includes permissions, owners, groups, etc.
–R: Lists sub-directories recursively
–sh: Shows file size (s) in human-readable format (h)
-1 (the number “1”): Displays one file per line
–d: Tells “ls” to list directory names, but not their contents

Soundthinking Point:
How to Get Out of a Long File Display
You can usually use the command
to cancel an operation in Linux. For
example, if you use the ls command to display the contents of a directory with
hundreds of files, you may decide you don’t want to wait for your computer to
display all of them. You can just enter
to return to a shell prompt.
CTRL+c

CTRL+c

You can also use common shell metacharacters with ls:

* is the string wildcard
? is the character wildcard
[] encloses a character set
[-] is a character range
{} is a string set
When you issue the cd command with no parameters, you will be returned
to your home directory.
The mkdir command creates directories.
Hands-On Exercise 5.2:
Working with Directories
In this exercise, you will create a working directory which you will use for
upcoming exercises. You will work with several commands to become
familiar with some of the important tools related to directory and file
management.

1. Log on to your system as the regular user you created during the
installation process.
2. In the terminal window, enter the following commands:
su –
Password: p@ss5678
mkdir /demo

You have just created a directory called demo which is a subdirectory
under the root directory (/). Note: You can create multiple directories at
the same time simply by separating their names with a space.

3. Display the contents of your working directory with the following
command:
ls

Notice that /demo is not displayed. The reason is that /demo is a
subdirectory of the root directory. You are presently in a different

directory.

4. Print your working directory to stdout (your screen) with the following
command:
pwd

Notice that you’re in the super user root’s home directory which is not
where you created /demo.

5. Display the contents of the root directory with the following command:
ls /

Notice that you now see the demo directory, along with several other
directories which are all child directories under the parent /.
Enter the following command to change your working directory to /demo:
cd /demo

6. Now, use the pwd command to print your working directory to stdout (the
screen):
pwd

You should now see that /demo is your working directory.

7. Enter the following commands:
mkdir demo1 demo2 demo3

You have just created three sub-directories in /demo called demo1,
demo2, and demo3.

8. Now, list the contents of /demo with the following command:
ls

You should now see the three subdirectories you just created. To remove
a directory, use the command rmdir.

9. While still in /demo, remove the three directories you just created with
the following command:
rmdir demo1 demo2 demo3

0. Use the ls command again to confirm that the three directories are
removed:
ls

The /demo directory should be empty.

1. You can also use wildcards to simplify file and directory management.
Touch the up arrow on your keyboard several times. Notice that it repeats
the last several commands. Stop when you see the command mkdir
demo1 demo2 demo3. With mkdir demo1 demo2 demo3 visible, press the
Enter key to recreate the three directories.
2. Use the ls command to verify that the three directories have been recreated.
ls

3. Now, use the “*” wildcard to simplify the rmdir process:
rmdir demo*

4. Use the ls command to verify that the three directories have been
deleted.
ls

Hands-On Exercise 5.3:
Working with Files
Moving, Copying, and Deleting Files

The “mv”, “cp”, and “rm” commands are commonly used commands for
basic file management.
moves a file to a new
location. This is also used when you want to rename a file.
mv   renames a file.
cp   copies a file to a new location.
rm  deletes a file.
mv  

You can use the -f option to force a move, copy, or deletion without being
asked for confirmation (Be careful when doing this.). You can use the -r
option to move, copy, or delete recursively through directories. (Be
especially careful when using the -r option with the -f option.)

The rm command is absolute and, once invoked, cannot be undone. Best
practice is to always use the -i (interactive) option with rm which prompts
you to confirm that you really do want to delete the file.
The touch command is used to change file timestamps, but it is also a
handy way to create empty files While still in /demo, use the touch
command to create three new, empty files:
touch file1 file2 file3

1. Now, issue the ls command to see the contents of the current directory.
2. The mv command (move) is used when you want to move or rename a
file. While still in /demo, issue the following command to rename file1:
mv file1 file4

3. Use the ls command to view the contents of the directory. The former
file1 should now appear as file4.
The cp command (copy) copies files from one location to another. While
still in /demo, issue the following command to copy file4 from /demo to
/:
cp file4 ../.

(The ../. tells the system to copy file4 to the parent directory (..) and use
the same name on the copy as the original (/.).

4. Use the ls command to view the contents of /demo and notice that file4
is still in /demo. Then, use the ls / command to view the contents of the
root directory and you should see the copy of file4.
5. The rm command (remove) deletes files. Use the following command to
remove file4 from the root directory:
rm /file4

(Notice that you are prompted to confirm the deletion.)

6. Use the ls command with a wildcard to check the root (/) directory for
any files whose names start with fil:
ls /fil*

You should see a message stating “No such file or directory”.

7. Now, use wildcards and options to remove multiple files without being
prompted. While in /demo, issue the following command to remove all
files whose names start with fil:
rm -f fil*

8. Use the ls command with a wildcard to check /demo for any files whose
names start with fil:
ls fil*

As with the previous step, you should see a message stating “No such
file or directory”.
Other Helpful Commands

is the switch user command. The hyphen switches the
profile to the new user’s profile. When used with no parameters, the su
command switches to “root”.
su – 

an acronym for print working directory, displays the current working
directory’s full path
pwd,

ls

lists the directory contents

concatenates files and prints on the standard
output (usually the display screen)
cat 

(from the man page) less is a program similar to more,
but which allows backward movement in the file as well as forward
movement. Also, less does not have to read the entire input file before
starting.
less 

is a program that filters text to allow paging through a
file one page at a time
more 

is a helpful command for finding configuration files and
executable programs. It does not search through user directories.
whereis

Try this: whereis
find

ifconfig

is another helpful command that will search based on various criteria

including file name, file size, modification date, and permissions. The find
command can only be issued by a user who has permission to view the
target files and directories.
Try this: find



There are many options available for use with find:
will find all the directories named “conf”
find / -user donc will find all files owned by “donc”
find / -name donc will find all files with the same name as “donc”
find -name ‘index.html’ would search for any file named index.html
in the current directory and any subdirectory.
find / -name ‘index.html’ would search for any file named
index.html in the root directory and all subdirectories from root
find -name ‘sshd*’ would search for any file beginning with the text
string “sshd” in the current directory and any subdirectory.
find -name ‘*’ -size +500k would search for any file larger then 500k.
find / -type d -name conf

is also a command that is useful for finding files on a Linux system.
It uses a database when searching for files, so it’s faster than find.
locate

You can use locate like this: locate



Files that have been created recently, however, may not be in the database.
You can force an update of the database with the following command:
updatedb

If, for some reason, updatedb is not installed, use the command yum
install mlocate to install it.

-y

is a way of estimating disk usage. When used with no arguments, du
reports the disk space for the current directory. By default, disk space is
printed in units of one kilobyte (1024 bytes). For example, to find out which
directories are largest, use this command:
du

du -S | sort -n

The upper-case “S” option tells it to report the size of each directory
separately, not including subdirectories. The pipe (|) redirects the output of
“du” to the “sort” utility. The “-n” switch sorts numerically.)
dmesg

is a program that helps users print out bootup messages:

dmesg | less

This command will pipe to “less”
An alternative is to redirect the dmesg output to a file. Try this:
dmesg > boot.messages

You will find the boot.messages file in the present working directory. Try
using cat, more, and less to view the contents of the file.
The who command displays currently logged on users:
who

displays currently logged on users, their terminal, and their login times.

who -u

adds idle time.

whoami

displays the name of the user initiating the command.

The simple, one-letter command w also displays currently logged on users,
along with information about the user’s logon session.
Viewing the Contents of a File
Command Syntax

What it does

cat

cat
“cat”


is for “concatenate”, cat displays the contents of file(s) named in the command

file

file
“file”


identifies the type of file as directory, text, or binary.

head

“head” shows the top ten lines of the named
head
 is the number of lines you wish to display).

tail

“tail” shows the bottom ten lines of the named file. As with “head”,
tail
 option (where “n” is the number of lines you wish to display).

you can change the number of lines shown by using the -n

more

“more” shows the contents of a file, one page at a time. You can see
more
 additional lines, one at a time, by pressing the enter key.

additional pages by pressing the space bar or view

less

less
and


wc

When used with no options, “wc”
wc
 which allow you to specify bytes,

file. You can change the number of lines shown by using the -n option (where “n”

“less” is similar to “more” in that it shows the contents of a file, one page at a time, but “less” allows you to move forward
backward through the file using the arrow keys. Frankly, “less” is much more than “more” and “more” is much less than
“less”. Think about that!
displays the number of lines, words, and characters in the named file. Options are available
characters, lines, and words.

Editing Configuration Files
In addition to managing a Linux system by executing various commands in
the CLI or using tools in graphical interface, you will also need to
frequently modify various configuration files.
There are several text editors which are commonly used to edit the Linux
configuration files. In this book, we will be using “vim”, a programmers’
text editor. “vim” is an enhanced version of “vi”. Most people use “vim”,
but refer to it as “vi” (pronounced “VEE-eye”). The upcoming exercise will
help you
become more comfortable with “vi”, a traditional text editor found on most
Linux and UNIX systems. Although many people consider “vi” to be
somewhat awkward to learn, its wide availability makes a fundamental
understanding of its basic commands well worthwhile. Additionally, once
you learn it, vim is incredibly powerful and fast.
The traditional “vi” text editor has been replaced on most systems with
“vim” (“vi” improved). The command set is substantially the same for both
“vi” and “vim”. On most systems, the “vi” command has been aliased to
“vim”.
To open a file with vim, type the following command:
vim 

Operation within vim is done with a variety of commands, some of which
are listed here:
displays line numbers along the left margin
:set nu! turns off the display of line numbers
:q! quits without saving
:wq writes and quits (saves and quits)
:set nu

Arrow keys can be used to move the cursor or letter keys can be used:

to go left
j to go down
k to go up
l to go right
G goes to the end of the file
nG (where “n” is a line number) goes to the specified line in the file
h

Vim has many more commands and options available. Help is available by
typing :help.
Other Commonly Used Text Editors
Emacs

Emacs is a class of text editors, known for their extensibility. Emacs has
more than 1000 editing commands. It also supports the use of macros to
automate work by combining commands. The name is based on Editor
MACrosS.
Development of emacs began in the mid-70s and continues actively as of
this writing (mid 2014).
Gedit

Gedit is the default text editor for the Gnome desktop environment. It
supports syntax highlighting and is designed to be a very clean, easy-to-use
editor. Gedit is available for both the Linux/Unix and the Windows
platforms.
Notepad ++

Notepad ++ is a text editor for Windows. It is often used as a replacement
for the built-in Notepad text editor. It offers several advantages over
Notepad including tabbed windows, line numbering, and syntax
highlighting.
Hands-On Exercise 5.3:
Working with vim: Using the vim Tutorial

1. An excellent tutorial is available for vi. Although vi is included in the
minimal installation, the tutorial must be installed prior to use. In a
terminal window, enter the following command to install the vi tutorial:
yum install -y vim-enhanced

2. When the installation is complete, start the vim tutorial:
vimtutor

3. Work at least through lesson four.
The following page is a VIM cheat sheet. Feel free to copy it and tape it to
the side of your monitor.
vim Cheat Sheet
Some common vim commands

Press the  (escape) key to ensure you’re in normal mode, then:
:q!

Quits without saving

:wq

Saves and quits (write quit)

x

Deletes individual characters

i

Inserts text

dw

Deletes to the end of a word (d2w deletes two words, d3w deletes three words, etc.)

d$

Deletes to the end of a line

dd

Deletes an entire line (2dd deletes two lines, 23dd deletes 23 lines, etc.)

u

Undoes the last command

U

Fixes an entire line

R

Redoes the command

p

Puts the last deletion after the cursor

r

Replaces the character under the cursor

cw

Is the “change word” command, that deletes the word (from the cursor to the right) and places you in “insert” mode

c$

Is the “change line” command, that deletes the line (from the cursor to the right) and places you in “insert” mode

g

Shows your location in a file

G

Moves to the end of the file, G moves to the line number specified in the command, for example
1G moves to line #1.

/

Searches forward through a file for the search term. For example, “
“apache” in the file

/apache”

will search for the next instance of the word

?

Searches backwards through a file for the search term. For example, “
cursor of the word “apache” in the file

?apache”

:s//

Will replace the next instance of “old” with “new”. For example,
“red”.

:s///g

Will replace the every instance of “old” on the current line with “new”. For example, :s/blue/red will replace the every
instance of “blue” with “red”.

:#,#s///g

Will replace every instance of “old” with “new” in the range of lines specified
with the # sign.

:!

Allows you to execute external commands

:set nu

Turns on line numbering

:nohlsearch

Turns off highlighting of search terms

:s/blue/red

will search for the last instance before the

will replace the next instance of “blue” with

Using grep
grep (global regular expression print) is a filtering utility used in the ‘nix
world to aid in searches. grep is one of the most useful tools in IT. (There’s
even a version available for Windows.)
Some examples:
grep red blue

will display lines of text from the blue file that contain

the word “red”
rpm –qa | grep smb

will display all installed RPMs with “smb” in their

name
Here is a handy way to use grep. Suppose you need to find a file (or files)
containing a particular text string. Use grep with the –r and –H options to
find all files containing that particular string (remember that everything in
Linux is case sensitive). By default, grep only prints the text string. If
you’re looking for files containing the text string, you must tell grep to print
the filename, too. The –H command does that.
In the following statement, -H prints the filename, –r searches recursively
from the starting point (/etc), and -n displays the line number(s) in the
found files for the text string PASS_MAX_DAYS:
grep -Hrn PASS_MAX_DAYS /etc

This is the output from the previous command:
Figure 38: Using grep to search through the content of files

In the screen capture, you can see where the text string
“PASS_MAX_DAYS” was found in /etc/login.defs on line 20 and
again, in the same file, on line 25.
Hands-On Exercise 5.4:
Conditional Searching
In this exercise, you will search for a unique text string within a file buried
deep within a directory tree.

1. As root, create a deep directory tree with the following command in a
terminal window:
mkdir –p /demo/demo1/demo2/demo3

(The “p” switch creates parent directories when they do not already
exist.)

2. Using “vi”, create a file called “deepfile” in the demo3 directory:
vi /demo/demo1/demo2/demo3/deepfile

3. Enter five lines of text in the file as shown in the screen capture.

Figure 39: Creating a file for use with the grep exercise

4. When you’re finished, use the key combination of ESC, then :wq to save
the file and close vi.
5. While still in a terminal window, enter the following command to find
the text string “I grok Linux” (the n option displays the line number in
the file where the text string is locatedn):
grep –Hrn “I grok Linux” /demo

6. The command should return to stout (standard output) the following
response:
/demo/demo1/demo2/demo3/deepfile:5:I grok Linux

(In the above output, the path is displayed, followed by the line number
in the file where the text string appears, followed by the text string.)
If your results differ, check spelling, remembering that text in a Linux
terminal window is case-sensitive.
Using the alias Command
The alias command is a shell function that allows you to substitute one
command for another. Aliases are also handy for assigning default
arguments to commands, such as ensuring that the “-i” (interactive) option
is always used with the commands cp and mv. The syntax for the alias
command is:
alias =””
alias cps=”cp -s” would create the new alias “cps” which
invoke the cp command with the symbolic link argument.

would always

You can see existing aliases by issuing the alias command with no options
at a command prompt.
Aliases can be removed with the unalias command:
unalias cps

will remove the “cps” alias.

Soundthinking Point:
Simplify Upgrades with an Alias
A great example of a way to use an alias is to simplify the CentOS Linux upgrade
process by creating this alias:
alias yu=”yum -y update”

With this alias enabled, you can simply type to upgrade all existing packages.
yu

Use the steps in the following section to make the alias persistent across
boots.
Hands-On Exercise 5.5:
Creating a Temporary Alias
In this exercise, you will create an alias to shorten the command for

upgrading packages on the system. You will create the alias yu to shorten
the following command: yum -y update

1. Use the command alias to view existing aliases and to ensure that no
alias exists using yu.
Figure 40: Viewing existing aliases

2. Assuming no other alias exists using yu, use the following command to
create the new alias:
alias yu=’yum -y update’

3. Use the alias command again with no parameters to view your newly
created alias.
Figure 41: Viewing the new alias

4. If you have Internet connectivity, try your alias by entering yu at the
prompt. If you set up the alias correctly, your system should upgrade all
packages. Even if you don’t have Internet connectivity, you can still try
the alias. The upgrade will fail, but you’ll still be able to see the alias do
its thing.
Making Aliases Persistent
If you simply use the alias command to create an alias, the aliases are in
effect only for your current session. To make them persistent across logons,
add them to your profile by modifying ~/.bashrc. In the following screen
capture, you can see how three aliases were added to the file, making them
persistent across logons and system boots. Note the leading period in the
filename (.bashrc) which makes it a hidden file in Linux.

Figure 42: Creating persistent aliases

Hands-On Exercise 5.6:
Creating a Persistent Alias
In this exercise, you will add the yu alias to your profile, so it will be
persistent across logons.

1. Change directory to your home directory with the following command:
cd

2. Make a backup of your .bashrc file with the following command:
cp .bashrc .bashrc.bak

3. Using the vim text editor open your .bashrc file for editing:
vi .bashrc

4. In the section “User specific aliases and functions”, use your arrow keys
to go to the last alias under that header. On my system, it’s “alias
mv=’mv -i’”.
5. Insert a new line and enter the following text:
alias yu=’yum -y update’

6. Touch the ESC key, then type :wq to save and exit the editor.
7. Check your work by using the command less .bashrc. It should look
like this screen capture:
Figure 43: Viewing the newly created persistent alias

Note that you must use straight apostrophes around the command or it
will not work.

8. Now, log off and when you log back on, the alias should work because

it’s part of your profile.
Starting and Stopping Services (The Daemons)
In Linux, the various services that together make up the entire operating
system are called daemons (pronounced DEE-muns). There are daemons for
the DNS name server (named), the Web server (httpd), DHCP (dhcpd), and
so on. Different distros sometimes give the daemons different names. For
example, Ubuntu uses the name apache2 when referring to the Web server
daemon, but Red Hat calls it httpd. When you see odd names ending with
the letter “d”, you’re most likely looking at a daemon name. Most of the
daemons can be controlled through scripts located at /etc/init.d/. For
example, to start the SSH server from a terminal window, you would
execute the command /etc/init.d/sshd start. To stop it, you would
execute the command /etc/init.d/sshd stop.
Different Linux distros might place the scripts in slightly different locations.
Later in the book, you’ll learn how to use the find command to locate such
scripts as well as other files and directories.
As I mentioned earlier, many daemons (services) are started from shell
scripts located in the /etc/rc.d/init.d directory. You can view the
various services by navigating to the directory and issuing the ls -l
command. You’ll notice that the files within the directory are all scripts
(you can tell by the execute permission on each file).
In order to execute scripts from within your working directory, you must
precede the script name with ./, meaning this directory. For example, if
your current directory is /etc/rc.d/init.d and you wish to execute the
script sshd, you would use the command ./sshd Otherwise, you can specify
the entire path to the script, as in the following examples:
Start a service:
/etc/init.d/sshd start

Stop a service
/etc/init.d/sshd stop

Restart a service
/etc/init.d/sshd restart

Soundthinking Point:
The “Service” Tool
Many modern Linux distros, including Red Hat and CentOS, include a script
called service which runs other scripts located in . The service script will do
essentially the same thing as the above commands, but in a simpler form:
/sbin

service sshd start
service sshd stop
service sshd status
service sshd restart
Note: When you compile applications from source, you will not be able to use tools
such as those listed without creating customized scripts for each compiled
application. That is one of the benefits of using applications compiled by the distro
vendor instead of compiling them yourself.

To start applications you compiled yourself, you must find the script or
binary that starts the application. Usually, there is a README file included
with the source code that will tell you the default installation paths.
Alternatively, you can use the “find” utility to search the filesystem for files
by name.
Linux Compression and Archiving Tools
Archiving is the process of storing multiple files in a single file to simplify
backup, moving, and transfer. Compression, on the other hand, uses various
algorithms to store files and directories in a way that consumes less space
on the disk or tape. A common practice is to create an archive file and then
compress it.
The tar utility (tape archive) is a commonly-used archiving utility. It
combines many files together in a single archive for tape or disk and allows

the restoration of individual files from that archive.
Soundthinking Point:
The Acronym “tar”
The acronym “tar” comes from the phrase “tape archive”.
Tar usage:
tar 

Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.3
Linearized                      : No
Author                          : Crawley, Don R.
Create Date                     : 2016:11:11 15:46:05+00:00
Creator                         : calibre 1.12.0 [http://calibre-ebook.com]
Producer                        : calibre 1.12.0 [http://calibre-ebook.com]
Title                           : The Accidental Administrator: Linux Server Step-by-Step Configuration Guide
Page Count                      : 254
EXIF Metadata provided by EXIF.tools

Navigation menu