Basic Shell Commands
So you've installed Slackware and you're staring at a terminal prompt,
what now? Now would be a good time to learn about the basic command
line tools. And since you're staring at a blinking curser, you
probably need a little assistance in knowing how to get around, and
that is what this chapter is all about.
System Documentation
Your Slackware Linux system comes with lots of built-in documentation
for nearly every installed application. Perhaps the most common method
of reading system documentation is by using the
man(1). man
(short for manual) will bring up the included man-page for any
application, system call, configuration file, or library you tell it
too. For example, man man will bring up the
man-page for man itself.
Unfortunately, you may not always know what application you need to use
for the task at hand. Thankfully, man has
built-in search abilities. Using the -k switch
will cause man to search for every man-page
that matches your search terms.
The man-pages are organized into groups or sections by their content
type. For example, section 1 is for user applications.
man will search each section in order and
display the first match it finds. Sometimes you will find that a
man-page exists in more than one section for a given entry. In that
case, you will need to specify the exact section to look in. In this
book, all applications and a number of other things will have a number
on their right-hand side in parenthesis. This number is the man page
section where you will find information on that tool.
darkstar:~$ man -k printf
printf (1) - format and print data
printf (3) - formatted output conversion
darkstar:~$ man 3 printf
Man Page Sections
Section
Contents
1
User Commands
2
System Calls
3
C Library Calls
4
Devices
5
File Formats / Protocols
6
Games
7
Conventions / Macro Packages
8
System Administration
Dealing with Files and Directories
Listing Files and Directory Contents
ls(1) is used to list files and directories,
their permissions, size, type, inode number, owner and group, and
plenty of additional information. For example, let's list what's in
the / directory for your new Slackware Linux system.
darkstar:~$ ls /
bin/ dev/ home/ lost+found/ mnt/ proc/ sbin/ sys/ usr/
boot/ etc/ lib/ media/ opt/ root/ srv/ tmp/ var/
Notice that each of the listings is a directory. These are
easily distinguished from regular files due to the trailing /; standard
files do not have a suffix. Additionally, executable files will have an
asterisk suffix. But ls can do so much
more. To get a view of the permissions of a file or directory, you'll
need to do a "long list".
darkstar:~$ ls -l /home/alan/Desktop
-rw-r--r-- 1 alan users 15624161 2007-09-21 13:02 9780596510480.pdf
-rw-r--r-- 1 alan users 3829534 2007-09-14 12:56 imgscan.zip
drwxr-xr-x 3 alan root 168 2007-09-17 21:01 ipod_hack/
drwxr-xr-x 2 alan users 200 2007-12-03 22:11 libgpod/
drwxr-xr-x 2 alan users 136 2007-09-30 03:16 playground/
A long listing lets you view the permisions, user and group ownership,
file size, last modified date, and of course, the file name itself.
Notice that the first two entires are files, and the last three are
directories. This is denoted by the very first character on the line.
Regular files get a "-"; directories get a "d". There are several
other file types with their own denominators. Symbolic links for
example will have an "l".
Lastly, we'll show you how to list dot-files, or hidden files. Unlike
other operating systems such as Microsoft Windows, there is no special
property that differentiates "hidden" files from "unhidden" files. A
hidden file simply begins with a dot. To display these files along
with all the others, you just need to pass the -a argument to
ls.
darkstar:~$ ls -a
.xine/ .xinitrc-backup .xscreensaver .xsession-errors SBo/
.xinitrc .xinitrc-xfce .xsession .xwmconfig/ Shared/
You also likely noticed that your files and directories appear in
different colors. Many of the enhanced features of
ls such as these colors or the trailing
characters indicating file-type are special features of the
ls program that are turned on by passing
various arguments. As a convienience, Slackware sets up
ls to use many of these optional arguments
by default. These are controlled by the LS_OPTIONS and LS_COLORS
environment variables. We will talk more about environment variables
in chapter 5.
Moving Around the Filesystem
cd is the command used to change
directories. Unlike most other commands, cd
is actually not it's own program, but is a shell built-in. Basically,
that means cd does not have its own man
page. You'll have to check your shell's documentation for more details
on the cd you may be using. For the most
part though, they all behave the same.
darkstar:~$ cd /
darkstar:/$ls
bin/ dev/ home/ lost+found/ mnt/ proc/ sbin/ sys/ usr/
boot/ etc/ lib/ media/ opt/ root/ srv/ tmp/ var/
darkstar:/$cd /usr/local
darkstar:/usr/local$
Notice how the prompt changed when we changed directories? The default
Slackware shell does this as a quick, easy way to see your current
directory, but this is not actually a function of
cd. If your shell doesn't operate in this
way, you can easily get your current working directory with the
pwd(1) command. (Most UNIX shells have
configurable prompts that can be coaxed into providing this same
functionality. In fact, this is another convience setup in the default
shell for you by Slackware.)
darkstar:~$ pwd
/usr/local
File and Directory Creation and Deletion
While most applications can and will create their own files and
directories, you'll often want to do this on your own. Thankfully,
it's very easy using touch(1) and
mkdir(1).
touch actually modifies the timestamp on a
file, but if that file doesn't exist, it will be created.
darkstar:~/foo$ ls -l
-rw-r--r-- 1 alan users 0 2008-01-18 15:01 bar1
darkstar:~/foo$ touch bar2
-rw-r--r-- 1 alan users 0 2008-01-18 15:01 bar1
-rw-r--r-- 1 alan users 0 2008-01-18 15:05 bar2
darkstar:~/foo$ touch bar1
-rw-r--r-- 1 alan users 0 2008-01-18 15:05 bar1
-rw-r--r-- 1 alan users 0 2008-01-18 15:05 bar2
Note how bar2 was created in our second command,
and the third command simpl updated the timestamp on
bar1
mkdir is used for (obviously enough) making
directories. mkdir foo will create the
directory "foo" within the current working directory. Additionally,
you can use the -p argument to create any
missing parent directories.
darkstar:~$ mkdir foo
darkstar:~$ mkdir /slack/foo/bar/
mkdir: cannot create directory `/slack/foo/bar/': No such file or directory
darkstar:~$ mkdir -p /slack/foo/bar/
In the latter case, mkdir will first create
"/slack", then "/slack/foo", and finally "/slack/foo/bar". If you
failed to use the -p argument,
man would fail to create "/slack/foo/bar"
unless the first two already existed, as you saw in the example.
Removing a file is as easy as creating one. The
rm(1) will remove a file (assuming of course
that you have permission to do this). There are a few very common
arguments to rm. The first is
-f and is used to force the removal of a file
that you may lack explicit permission to delete. The
-r argument will remove directories and their
contents recursively.
There is another tool to remove directories, the humble
rmdir(1). rmdir
will only remove directories that are empty, and complain noisely about
those that contain files or sub-directories.
darkstar:~$ ls
foo_1/ foo_2/
darkstar:~$ ls foo_1
bar_1
darkstar:~$ rmdir foo_1
rmdir: foo/: Directory not empty
darkstar:~$ rm foo_1/bar
darkstar:~$ rmdir foo_1
darkstar:~$ ls foo_2
bar_2/
darkstar:~$ rm -fr foo_2
darkstar:~$ ls
Reading Documents
Traditionally, UNIX and UNIX-like operating systems are filled with
text files that at some point in time the system's users are going to
want to read. Naturally, there are plenty of ways of reading these
files, and we'll show you the most common ones.
In the early days, if you just wanted to see the contents of a file
(any file, whether it was a text file or some binary program) you would
use cat(1) to view them.
cat is a very simple program, which takes
one or more files, concatenates them (hence the name) and sends them to
the standard output, which is usually your terminal screen. This was
fine when the file was small and wouldn't scroll off the screen, but
inadequate for larger files as it had no built-in way of moving within
a document and reading it a paragraph at a time. Today,
cat is still used quite extensively, but
predominately in scripts or for joining two or more files into one.
darkstar:~$ cat /etc/slackware-version
Slackware 12.0.0
Given the limitations of cat some very
intelligent people sat down and began to work on an application to let
them read documents one page at a time. Naturally, such applications
began to be known as "pagers". One of the earliest of these was
more(1), named because it would let you see
"more" of the file whenever you wanted. more
will display the first few lines of a text file until your screen is
full, then pause. Once you've read through that screen, you can
proceed down one line by pressing ENTER, or an entire screen by
pressing SPACE. more is also capable of
searching through a text file for keywords. Once you've displayed a
file in more, simply press the / key and
enter a keyword. Upon pressing ENTER, the text will scroll until it
finds the next match. This is clearly a big improvement over
cat, but still suffers from a serious flaw:
more is not able to scroll back up through
the file to allow you to read something you might have missed. Clearly
a better solution is called for.
In order to address the short-comings of
more, a new pager was developed and
ironically dubbed less(1).
less is a very powerful pager that supports
all of the functions of more while adding
lots of additional features. To begin with,
less allows you to use your arrow keys to
controll movement within the document. Due to its popularity, many
Linux distributions have begun to exclude
more in favor of
less. Slackware includes both. Moreover,
Slackware also includes a handy little pre-processor for
less called
lesspipe.sh. This allows a user to exectute
less on a number of non-text files.
lesspipe.sh will generate text output from running
a command on these files, and display it in
less.
Linking
Links are a method of referring to one file by more than one name. By
using the ln(1) application, a user can
reference one file with more than one name. The two files are not
carbon-copies of one another, but rather are the exact same file, just
with a different name. To remove the file entirely, all of its names
must be deleted. (This is actually the result of the way that
rm and other tools like it work. Rather
than remove the contents of the file, they simply remove the reference
to the file, freeing that space to be re-used.
ln will create a second reference or "link"
to that file.)
darkstar:~$ ln /etc/slackware-version foo
darkstar:~$ cat foo
Slackware 12.0.0
darkstar:~$ ls -l /etc/slackware-version foo
-rw-r--r-- 1 root root 17 2007-06-10 02:23 /etc/slackware-version
-rw-r--r-- 1 root root 17 2007-06-10 02:23 foo
Another type of link exists, the symlink. Symlinks, rather than being
another reference to the same file, are actually a special kind of file
in their own right. These symlinks point to another file or directory.
The primary advantage of symlinks is that they can refer to directories
as well as files, and they can span multiple filesystems. These are
created with the -s argument.
darkstar:~$ ln -s /etc/slackware-version foo
darkstar:~$ cat foo
Slackware 12.0.0
darkstar:~$ ls -l /etc/slackware-version foo
-rw-r--r-- 1 root root 17 2007-06-10 02:23 /etc/slackware-version
lrwxrwxrwx 1 root root 22 2008-01-25 04:16 foo -> /etc/slackware-version
When using symlinks, remember that if the original file is deleted,
your symlink is useless; it simply points at a file that doesn't exist
anymore.