|
12.1. Basic CommandsThe first commands a novice learns - ls
The basic file "list" command. It is all too easy
to underestimate the power of this humble command. For
example, using the -R, recursive option,
ls provides a tree-like listing of
a directory structure. Other interesting options are
-S, sort listing by file size,
-t, sort by file modification time, and
-i, show file inodes (see Example 12-4). Example 12-1. Using ls to create a table of contents
for burning a CDR disk #!/bin/bash
# burn-cd.sh
# Script to automate burning a CDR.
SPEED=2 # May use higher speed if your hardware supports it.
IMAGEFILE=cdimage.iso
CONTENTSFILE=contents
DEFAULTDIR=/opt # This is the directory containing the data to be burned.
# Make sure it exists.
# Uses Joerg Schilling's "cdrecord" package.
# (http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html)
# If this script invoked as an ordinary user, need to suid cdrecord
#+ (chmod u+s /usr/bin/cdrecord, as root).
if [ -z "$1" ]
then
IMAGE_DIRECTORY=$DEFAULTDIR
# Default directory, if not specified on command line.
else
IMAGE_DIRECTORY=$1
fi
# Create a "table of contents" file.
ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/$CONTENTSFILE
# The "l" option gives a "long" file listing.
# The "R" option makes the listing recursive.
# The "F" option marks the file types (directories get a trailing /).
echo "Creating table of contents."
# Create an image file preparatory to burning it onto the CDR.
mkisofs -r -o $IMAGFILE $IMAGE_DIRECTORY
echo "Creating ISO9660 file system image ($IMAGEFILE)."
# Burn the CDR.
cdrecord -v -isosize speed=$SPEED dev=0,0 $IMAGEFILE
echo "Burning the disk."
echo "Please be patient, this will take a while."
exit 0 |
- cat, tac
cat, an acronym for
concatenate,
lists a file to stdout. When
combined with redirection (> or
>>), it is commonly used to concatenate
files.
# Uses of 'cat'
cat filename # Lists the file.
cat file.1 file.2 file.3 > file.123 # Combines three files into one. |
The -n option to cat
inserts consecutive numbers before all lines of the
target file(s). The -b option numbers
only the non-blank lines. The -v option
echoes nonprintable characters, using ^
notation. The -s option squeezes multiple
consecutive blank lines into a single blank line.See also Example 12-24 and Example 12-20. tac, is the inverse of
cat, listing a file backwards from its end. - rev
reverses each line of a file, and outputs to
stdout. This is not the same effect
as tac, as it preserves the order of
the lines, but flips each one around. bash$ cat file1.txt
This is line 1.
This is line 2.
bash$ tac file1.txt
This is line 2.
This is line 1.
bash$ rev file1.txt
.1 enil si sihT
.2 enil si sihT
|
- cp
This is the file copy command. cp file1
file2 copies file1
to file2, overwriting
file2 if it already exists (see Example 12-6).  | Particularly useful are the -a
archive flag (for copying an entire directory tree)
and the -r and -R
recursive flags. |
- mv
This is the file move command. It
is equivalent to a combination of cp
and rm. It may be used to move multiple
files to a directory, or even to rename a directory. For
some examples of using mv in a script,
see Example 9-17 and Example A-3.  | When used in a non-interactive script,
mv takes the -f
(force) option to bypass user
input. When a directory is moved to a preexisting directory,
it becomes a subdirectory of the destination directory. bash$ mv source_directory target_directory
bash$ ls -lF target_directory
total 1
drwxrwxr-x 2 bozo bozo 1024 May 28 19:20 source_directory/
|
|
- rm
Delete (remove) a file or files. The -f
option forces removal of even readonly files, and is useful
for bypassing user input in a script.  | The rm command will, by
itself, fail to remove filenames beginning with a
dash. bash$ rm -badname
rm: invalid option -- b
Try `rm --help' for more information. |
The way to accomplish this is to preface the filename to be
removed with a dot-slash .
|
 | When used with the recursive flag
-r, this command removes files all
the way down the directory tree from the current
directory. |
- rmdir
Remove directory. The directory must be empty of
all files, including invisible
"dotfiles",
for this command to succeed. - mkdir
Make directory, creates a new directory. For example,
mkdir -p project/programs/December
creates the named directory. The
-p option automatically creates
any necessary parent directories. - chmod
Changes the attributes of an existing file (see Example 11-11). chmod +x filename
# Makes "filename" executable for all users.
chmod u+s filename
# Sets "suid" bit on "filename" permissions.
# An ordinary user may execute "filename" with same privileges as the file's owner.
# (This does not apply to shell scripts.) |
chmod 644 filename
# Makes "filename" readable/writable to owner, readable to
# others
# (octal mode). |
chmod 1777 directory-name
# Gives everyone read, write, and execute permission in directory,
# however also sets the "sticky bit".
# This means that only the owner of the directory,
# owner of the file, and, of course, root
# can delete any particular file in that directory. |
- chattr
Change file attributes. This has the same effect
as chmod above, but with a
different invocation syntax, and it works only on an
ext2 filesystem. - ln
Creates links to pre-existings files. A "link"
is a reference to a file, an alternate name for it.
The ln command permits referencing
the linked file by more than one name and is a superior
alternative to aliasing (see Example 4-6). The ln creates only a reference, a
pointer to the file only a few bytes in size. The ln command is most often used
with the -s, symbolic or
"soft" link flag. An advantage of using the
-s flag is that it permits linking across
file systems. The syntax of the command is a bit tricky. For example:
ln -s oldfile newfile links the
previously existing oldfile to the
newly created link, newfile.  | If a file named newfile has
previously existed, it will be deleted when the filename
newfile is preempted as the name for a
link. |
Links give the ability to invoke a script (or any other type
of executable) with multiple names, and having that script
behave according to how it was invoked. Example 12-2. Hello or Good-bye #!/bin/bash
# hello.sh: Saying "hello" or "goodbye"
#+ depending on how script is invoked.
# Make a link in current working directory ($PWD) to this script:
# ln -s hello.sh goodbye
# Now, try invoking this script both ways:
# ./hello.sh
# ./goodbye
HELLO_CALL=65
GOODBYE_CALL=66
if [ $0 = "./goodbye" ]
then
echo "Good-bye!"
# Some other goodbye-type commands, as appropriate.
exit $GOODBYE_CALL
fi
echo "Hello!"
# Some other hello-type commands, as appropriate.
exit $HELLO_CALL |
- man, info
These commands access the manual and information pages on
system commands and installed utilities. When available, the
info pages usually contain a more detailed
description than do the man pages.
|
|