SlideShare a Scribd company logo
Introduction to Unix
CHAPTER 1 History of Unix
1965 Bell Laboratories joins with MIT and General Electric in the development effort for
the new operating system, Multics, which would provide multi-user, multi-processor, and
multi-level (hierarchical) file system, among its many forward-looking features.
1969 AT&T was unhappy with the progress and drops out of the Multics project. Some
of the Bell Labs programmers who had worked on this project, Ken Thompson, Dennis
Ritchie, Rudd Canaday, and Doug McIlroy designed and implemented the first version of
the Unix File System on a PDP-7 along with a few utilities. It was given the name UNIX
by Brian Kernighan as a pun on Multics.
1970, Jan 1 time zero for UNIX
1971 The system now runs on a PDP-11, with 16Kbytes of memory, including 8Kbytes
for user programs and a 512Kbyte disk.
Its first real use is as a text processing tool for the patent department at Bell Labs. That
utilization justified further research and development by the programming group. UNIX
caught on among programmers because it was designed with these features:
• programmers environment
• simple user interface
• simple utilities that can be combined to perform powerful functions
• hierarchical file system
• simple interface to devices consistent with file format
• multi-user, multi-process system
• architecture independent and transparent to the user.
1973 Unix is re-written mostly in C, a new language developed by Dennis Ritchie. Being
written in this high-level language greatly decreased the effort needed to port it to new
machines.
1974 Thompson and Ritchie publish a paper in the Communications of the ACM
describing the new Unix OS. This generates enthusiasm in the Academic community
which sees a potentially great teaching tool for studying programming systems
development. Since AT&T is prevented from marketing the product due to the 1956
Consent Decree they license it to Universities for educational purposes and to
commercial entities.
1977 There are now about 500 Unix sites world-wide.
1980 BSD 4.1 (Berkeley Software Development)
1983 SunOS, BSD 4.2, SysV
1984 There are now about 100,000 Unix sites running on many different hardware
platforms, of vastly different capabilities.
1988 AT&T and Sun Microsystems jointly develop System V Release 4 (SVR4). This
would later be developed into UnixWare and Solaris 2.
1993 Novell buys UNIX from AT&T
1994 Novell gives the name "UNIX" to X/OPEN
1995 Santa Cruz Operations buys UnixWare from Novell. Santa Cruz Operations and
Hewlett-Packard announce that they will jointly develop a 64-bit version of Unix.
1996 International Data Corporation forecasts that in 1997 there will be 3 million Unix
systems shipped world-wide.
CHAPTER 2 Unix Structure
CHAPTER 2 Unix Structure
2.1 The Operating System
Unix is a layered operating system. The innermost layer is the hardware that provides the
services for the OS. The operating system, referred to in Unix as the kernel, interacts
directly with the hardware and provides the services to the user programs. These user
programs don't need to know anything about the hardware. They just need to know how
to interact with the kernel and it's up to the kernel to provide the desired service. One of
the big appeals of Unix to programmers has been that most well written user programs
are independent of the underlying hardware, making them readily portable to new
systems.
User programs interact with the kernel through a set of standard system calls. These
system calls request services to be provided by the kernel. Such services would include
accessing a file: open close, read, write, link, or execute a file; starting or updating
accounting records; changing ownership of a file or directory; changing to a new
directory; creating, suspending, or killing a process; enabling access to hardware devices;
and setting limits on system resources.
Unix is a multi-user, multi-tasking operating system. You can have many users logged
into a system simultaneously, each running many programs. It's the kernel's job to keep
each process and user separate and to regulate access to system hardware, including cpu,
memory, disk and other I/O devices.
FIGURE 2.1 Unix System Structure
Introduction to Unix - 14 AUG 1996
CHAPTER 2 Unix Structure
2.2 The File System
The Unix file system looks like an inverted tree structure. You start with the root
directory, denoted by /, at the top and work down through sub-directories underneath it.
FIGURE 2.2 Unix File Structure
Each node is either a file or a directory of files, where the latter can contain other files
and directories. You specify a file or directory by its path name, either the full, or
absolute, path name or the one relative to a location. The full path name starts with the
root, /, and follows the branches of the file system, each separated by /, until you reach
the desired file, e.g.:
/home/condron/source/xntp
A relative path name specifies the path relative to another, usually the current working
directory that you are at. Two special directory entries should be introduced now:
. the current directory
.. the parent of the current directory
So if I'm at /home/frank and wish to specify the path above in a relative fashion I could
use:
../condron/source/xntp
This indicates that I should first go up one directory level, then come down through the
condron directory, followed by the source directory and then to xntp.
Introduction to Unix - 14 AUG 1996
CHAPTER 2 Unix Structure
2.3 Unix Directories, Files and Inodes
Every directory and file is listed in its parent directory. In the case of the root directory,
that parent is itself. A directory is a file that contains a table listing the files contained
within it, giving file names to the inode numbers in the list. An inode is a special file
designed to be read by the kernel to learn the information about each file. It specifies the
permissions on the file, ownership, date of creation and of last access and change, and the
physical location of the data blocks on the disk containing the file.
The system does not require any particular structure for the data in the file itself. The file
can be ASCII or binary or a combination, and may represent text data, a shell script,
compiled object code for a program, directory table, junk, or anything you would like.
There's no header, trailer, label information or EOF character as part of the file.
Introduction to Unix - 14 AUG 1996
CHAPTER 2 Unix Structure
2.4 Unix Programs
A program, or command, interacts with the kernel to provide the environment and
perform the functions called for by the user. A program can be: an executable shell file,
known as a shell script; a built-in shell command; or a source compiled, object code file.
The shell is a command line interpreter. The user interacts with the kernel through the
shell. You can write ASCII (text) scripts to be acted upon by a shell.
System programs are usually binary, having been compiled from C source code. These
are located in places like /bin, /usr/bin, /usr/local/bin, /usr/ucb, etc. They provide the
functions that you normally think of when you think of Unix. Some of these are sh, csh,
date, who, more, and there are many others.
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
CHAPTER 3 Getting Started
3.1 Logging in
After connecting with a Unix system, a user is prompted for a login username, then a
password. The login username is the user's unique name on the system. The password is
a changeable code known only to the user. At the login prompt, the user should enter the
username; at the password prompt, the current password should be typed.
Note: Unix is case sensitive. Therefore, the login and password should be typed exactly
as issued; the login, at least, will normally be in lower case.
3.1.1 - Terminal Type
3.1.2 - Passwords
3.1.3 - Exiting
3.1.4 - Identity
Introduction to Unix - 14 AUG 1996
3.1 Logging in
3.1.1 Terminal Type
Most systems are set up so the user is by default prompted for a terminal type, which
should be set to match the terminal in use before proceeding. Most computers work if you
choose "vt100". Users connecting using a Sun workstation may want to use "sun"; those
using an X-Terminal may want to use "xterms" or "xterm".
The terminal type indicates to the Unix system how to interact with the session just
opened.
Should you need to reset the terminal type, enter the command:
setenv TERM <term type> - if using the C-shell (see Chapter 4.)
(On some systems, e.g. MAGNUS, it's also necessary to type "unsetenv TERMCAP".)
-or-
TERM=<term type>; export TERM - if using the Bourne shell (see Chapter 4.)
where <term type> is the terminal type, such as vt100, that you would like set.
Introduction to Unix - 14 AUG 1996
3.1 Logging in
3.1.2 Passwords
When your account is issued, you will be given an initial password. It is important for
system and personal security that the password for your account be changed to something
of your choosing. The command for changing a password is "passwd". You will be asked
both for your old password and to type your new selected password twice. If you mistype
your old password or do not type your new password the same way twice, the system will
indicate that the password has not been changed.
Some system administrators have installed programs that check for appropriateness of
password (is it cryptic enough for reasonable system security). A password change may
be rejected by this program.
When choosing a password, it is important that it be something that could not be guessed
-- either by somebody unknown to you trying to break in, or by an acquaintance who
knows you. Suggestions for choosing and using a password follow:
Don't use a word (or words) in any language
use a proper name
use information that can be found in your wallet
use information commonly known about you (car license, pet name, etc)
use control characters. Some systems can't handle them
write your password anywhere
ever give your password to *anybody*
Do use a mixture of character types (alphabetic, numeric, special)
use a mixture of upper case and lower case
use at least 6 characters
choose a password you can remember
change your password often
make sure nobody is looking over your shoulder when you are entering your password
Introduction to Unix - 14 AUG 1996
3.1 Logging in
3.1.3 Exiting
^D - indicates end of data stream; can log a user off. The latter is disabled on many
systems
^C - interrupt
logout - leave the system
exit - leave the shell
Introduction to Unix - 14 AUG 1996
3.1 Logging in
3.1.4 Identity
The system identifies you by the user and group numbers (userid and groupid,
respectively) assigned to you by your system administrator. You don't normally need to
know your userid or groupid as the system translates username « userid, and groupname
« groupid automatically. You probably already know your username; it's the name you
logon with. The groupname is not as obvious, and indeed, you may belong to more than
one group. Your primary group is the one associated with your username in the password
database file, as set up by your system administrator. Similarly, there is a group database
file where the system administrator can assign you rights to additional groups on the
system.
In the examples below % is your shell prompt; you don't type this in.
You can determine your userid and the list of groups you belong to with the id and
groups commands. On some systems id displays your user and primary group
information, e.g.:
% id
uid=1101(frank) gid=10(staff)
on other systems it also displays information for any additional groups you belong to:
% id
uid=1101(frank) gid=10(staff) groups=10(staff),5(operator),14(sysadmin),110(uts)
The groups command displays the group information for all the groups you belong to,
e.g.:
% groups
staff sysadmin uts operator
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.2 Unix Command Line Structure
A command is a program that tells the Unix system to do something. It has the form:
command [options] [arguments]
where an argument indicates on what the command is to perform its action, usually a file
or series of files. An option modifies the command, changing the way it performs.
Commands are case sensitive. command and Command are not the same.
Options are generally preceded by a hyphen (-), and for most commands, more than one
option can be strung together, in the form:
command -[option][option][option]
e.g.:
ls -alR
will perform a long list on all files in the current directory and recursively perform the list
through all sub-directories.
For most commands you can separate the options, preceding each with a hyphen, e.g.:
command -option1 -option2 -option3
as in:
ls -a -l -R
Some commands have options that require parameters. Options requiring parameters are
usually specified separately, e.g.:
lpr -Pprinter3 -# 2 file
will send 2 copies of file to printer3.
These are the standard conventions for commands. However, not all Unix commands will
follow the standard. Some don't require the hyphen before options and some won't let you
group options together, i.e. they may require that each option be preceded by a hyphen
and separated by whitespace from other options and arguments.
Options and syntax for a command are listed in the man page for the command.
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.3 Control Keys
Control keys are used to perform special functions on the command line or within an
editor. You type these by holding down the Control key and some other key
simultaneously. This is usually represented as ^Key. Control-S would be written as ^S.
With control keys upper and lower case are the same, so ^S is the same as ^s. This
particular example is a stop signal and tells the terminal to stop accepting input. It will
remain that way until you type a start signal, ^Q.
Control-U is normally the "line-kill" signal for your terminal. When typed it erases the
entire input line.
In the vi editor you can type a control key into your text file by first typing ^V followed
by the control character desired, so to type ^H into a document type ^V^H.
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.4 stty - terminal control
stty reports or sets terminal control options. The "tty" is an abbreviation that harks back
to the days of teletypewriters, which were associated with transmission of telegraph
messages, and which were models for early computer terminals.
For new users, the most important use of the stty command is setting the erase function
to the appropriate key on their terminal. For systems programmers or shell script writers,
the stty command provides an invaluable tool for configuring many aspects of I/O
control for a given device, including the following:
- erase and line-kill characters
- data transmission speed
- parity checking on data transmission
- hardware flow control
- newline (NL) versus carriage return plus linefeed (CR-LF)
- interpreting tab characters
- edited versus raw input
- mapping of upper case to lower case
This command is very system specific, so consult the man pages for the details of the
stty command on your system.
Syntax
stty [options]
Options
(none) report the terminal settings
all (or -a) report on all options
echoe echo ERASE as BS-space-BS
dec set modes suitable for Digital Equipment Corporation operating systems (which
distinguishes between ERASE and BACKSPACE) (Not available on all systems)
kill set the LINE-KILL character
erase set the ERASE character
intr set the INTERRUPT character
Examples
You can display and change your terminal control settings with the stty command. To
display all (-a) of the current line settings:
% stty -a
speed 38400 baud, 24 rows, 80 columns
parenb -parodd cs7 -cstopb -hupcl cread -clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff imaxbel
isig iexten icanon -xcase echo echoe echok -echonl -noflsh -tostop
echoctl -echoprt echoke
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel
erase kill werase rprnt flush lnext susp intr quit stop eof
^H ^U ^W ^R ^O ^V ^Z/^Y ^C ^ ^S/^Q ^D
You can change settings using stty, e.g., to change the erase character from ^? (the delete
key) to ^H:
% stty erase ^H
This will set the terminal options for the current session only. To have this done for you
automatically each time you login, it can be inserted into the .login or .profile file that
we'll look at later.
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.5 Getting Help
The Unix manual, usually called man pages, is available on-line to explain the usage of
the Unix system and commands. To use a man page, type the command "man" at the
system prompt followed by the command for which you need information.
Syntax
man [options] command_name
Common Options
-k keyword list command synopsis line for all keyword matches
-M path path to man pages
-a show all matching man pages (SVR4)
Examples
You can use man to provide a one line synopsis of any commands that contain the
keyword that you want to search on with the "-k" option, e.g. to search on the keyword
password, type:
% man -k password
passwd (5) - password file
passwd (1) - change password information
The number in parentheses indicates the section of the man pages where these references
were found. You can then access the man page (by default it will give you the lower
numbered entry, but you can use a command line option to specify a different one) with:
% man passwd
PASSWD(1) USER COMMANDS PASSWD(1)
NAME
passwd - change password information
SYNOPSIS
passwd [ -e login_shell ] [ username ]
DESCRIPTION
passwd changes (or sets) a user's password.
passwd prompts twice for the new password, without displaying
it. This is to allow for the possibility of typing mistakes.
Only the user and the super-user can change the user's password.
OPTIONS
-e Change the user's login shell.
Here we've paraphrased and truncated the output for space and copyright concerns.
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.6 Directory Navigation and Control
The Unix file system is set up like a tree branching out from the root. The the root
directory of the system is symbolized by the forward slash (/). System and user
directories are organized under the root. The user does not have a root directory in Unix;
users generally log into their own home directory. Users can then create other directories
under their home. The following table summarizes some directory navigation commands.
Navigation and Directory Control Commands
Command/Syntax What it will do
cd [directory] change directory
ls [options] [directory or file] list directory contents or file permissions
mkdir [options] directory make a directory
pwd print working (current) directory
rmdir [options] directory remove a directory
If you're familiar with DOS the following table comparing similar commands might help
to provide the proper reference frame.
Unix vs DOS Navigation and Directory Control Commands
Command Unix DOS
list directory contents ls dir
make directory mkdir md & mkdir
change directory cd cd & chdir
delete (remove) directory rmdir rd & rmdir
return to user's home directory cd cd
location in path
(present working directory)
pwd cd
3.6.1 - pwd - print working directory
3.6.2 - cd - change directory
3.6.3 - mkdir - make a directory
3.6.4 - rmdir - remove directory
3.6.5 - ls - list directory contents
Introduction to Unix - 14 AUG 1996
3.6 Directory Navigation and Control
3.6.1 pwd - print working directory
At any time you can determine where you are in the file system hierarchy with the pwd,
print working directory, command, e.g.:
% pwd
/home/frank/src
Introduction to Unix - 14 AUG 1996
3.6 Directory Navigation and Control
3.6.2 cd - change directory
You can change to a new directory with the cd, change directory, command. cd will
accept both absolute and relative path names.
Syntax
cd [directory]
Examples
cd (also chdir in some shells) change directory
cd changes to user's home directory
cd / changes directory to the system's root
cd .. goes up one directory level
cd ../.. goes up two directory levels
cd /full/path/name/from/root changes directory to absolute path named (note the
leading slash)
cd path/from/current/location changes directory to path relative to current location (no
leading slash)
cd ~username/directory changes directory to the named username's indicated directory
(Note: the ~ is not valid in the Bourne shell; see Chapter 5.)
Introduction to Unix - 14 AUG 1996
3.6 Directory Navigation and Control
3.6.3 mkdir - make a directory
You extend your home hierarchy by making sub-directories underneath it. This is done
with the mkdir, make directory, command. Again, you specify either the full or relative
path of the directory:
Syntax
mkdir [options] directory
Common Options
-p create the intermediate (parent) directories, as needed
-m mode access permissions (SVR4). (We'll look at modes later in this Chapter).
Examples
% mkdir /home/frank/data
or, if your present working directory is /home/frank the following would be equivalent:
% mkdir data
Introduction to Unix - 14 AUG 1996
3.6 Directory Navigation and Control
3.6.4 rmdir - remove directory
A directory needs to be empty before you can remove it. If it's not, you need to remove
the files first. Also, you can't remove a directory if it is your present working directory;
you must first change out of it.
Syntax
rmdir directory
Examples
To remove the empty directory /home/frank/data while in /home/frank use:
% rmdir data
or
% rmdir /home/frank/data
Introduction to Unix - 14 AUG 1996
3.6 Directory Navigation and Control
3.6.5 ls - list directory contents
The command to list your directories and files is ls. With options it can provide
information about the size, type of file, permissions, dates of file creation, change and
access.
Syntax
ls [options] [argument]
Common Options
When no argument is used, the listing will be of the current directory. There are many
very useful options for the ls command. A listing of many of them follows. When using
the command, string the desired options together preceded by "-".
-a lists all files, including those beginning with a dot (.).
-d lists only names of directories, not the files in the directory
-F indicates type of entry with a trailing symbol:
directories /
sockets =
symbolic links @
executables *
-g displays Unix group assigned to the file, requires the -l option (BSD only)
-or- on an SVR4 machine, e.g. Solaris, this option has the opposite effect
-L if the file is a symbolic link, lists the information for the file or directory the link
references, not the information for the link itself
-l long listing: lists the mode, link information, owner, size, last modification (time). If
the file is a symbolic link, an arrow (-->) precedes the pathname of the linked-to file.
The mode field is given by the -l option and consists of 10 characters. The first character
is one of the following:
CHARACTER IF ENTRY IS A
d directory
- plain file
b block-type special file
c character-type special file
l symbolic link
s socket
The next 9 characters are in 3 sets of 3 characters each. They indicate the file access
permissions: the first 3 characters refer to the permissions for the user, the next three for
the users in the Unix group assigned to the file, and the last 3 to the permissions for
other users on the system. Designations are as follows:
r read permission
w write permission
x execute permission
- no permission
There are a few less commonly used permission designations for special circumstances.
These are explained in the man page for ls.
Examples
To list the files in a directory:
% ls
demofiles frank linda
To list all files in a directory, including the hidden (dot) files try:
% ls -a
. .cshrc .history .plan .rhosts frank
.. .emacs .login .profile demofiles linda
To get a long listing:
% ls -al
total 24
drwxr-sr-x 5 workshop acs 512 Jun 7 11:12 .
drwxr-xr-x 6 root sys 512 May 29 09:59 ..
-rwxr-xr-x 1 workshop acs 532 May 20 15:31 .cshrc
-rw------- 1 workshop acs 525 May 20 21:29 .emacs
-rw------- 1 workshop acs 622 May 24 12:13 .history
-rwxr-xr-x 1 workshop acs 238 May 14 09:44 .login
-rw-r--r-- 1 workshop acs 273 May 22 23:53 .plan
-rwxr-xr-x 1 workshop acs 413 May 14 09:36 .profile
-rw------- 1 workshop acs 49 May 20 20:23 .rhosts
drwx------ 3 workshop acs 512 May 24 11:18 demofiles
drwx------ 2 workshop acs 512 May 21 10:48 frank
drwx------ 3 workshop acs 512 May 24 10:59 linda
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.7 File Maintenance Commands
To create, copy, remove and change permissions on files you can use the following
commands.
File Maintenance Commands
Command/Syntax What it will do
chgrp [options] group
file
change the group of the file
chmod [options] file change file or directory access permissions
chown [options] owner
file
change the ownership of a file; can only be done by the superuser
cp [options] file1 file2
copy file1 into file2; file2 shouldn't already exist. This command
creates or overwrites file2.
mv [options] file1 file2 move file1 into file2
rm [options] file
remove (delete) a file or directory (-r recursively deletes the
directory and its contents) (-i prompts before removing files)
If you're familiar with DOS the following table comparing similar commands might help
to provide the proper reference frame.
Unix vs DOS File Maintenance Commands
Command Unix DOS
copy file cp copy
move file mv move (not supported on all versions of DOS)
rename file mv rename & ren
delete (remove) file rm erase & del
display file to screen
entire file
one page at a time
cat
more, less, pg
type
type/p (not supported on all versions of DOS)
3.7.1 - cp - copy a file
3.7.2 - mv - move a file
3.7.3 - rm - remove a file
3.7.4 - File Permissions
3.7.5 - chmod - change file permissions
3.7.6 - chown - change ownership
3.7.7 - chgrp - change group
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.1 cp - copy a file
Copy the contents of one file to another with the cp command.
Syntax
cp [options] old_filename new_filename
Common Options
-i interactive (prompt and wait for confirmation before proceeding)
-r recursively copy a directory
Examples
% cp old_filename new_filename
You now have two copies of the file, each with identical contents. They are completely
independent of each other and you can edit and modify either as needed. They each have
their own inode, data blocks, and directory table entries.
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.2 mv - move a file
Rename a file with the move command, mv.
Syntax
mv [options] old_filename new_filename
Common Options
-i interactive (prompt and wait for confirmation before proceeding)
-f don't prompt, even when copying over an existing target file (overrides -i)
Examples
% mv old_filename new_filename
You now have a file called new_filename and the file old_filename is gone. Actually all
you've done is to update the directory table entry to give the file a new name. The
contents of the file remain where they were.
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.3 rm - remove a file
Remove a file with the rm, remove, command.
Syntax
rm [options] filename
Common Options
-i interactive (prompt and wait for confirmation before proceeding)
-r recursively remove a directory, first removing the files and subdirectories beneath it
-f don't prompt for confirmation (overrides -i)
Examples
% rm old_filename
A listing of the directory will now show that the file no longer exists. Actually, all you've
done is to remove the directory table entry and mark the inode as unused. The file
contents are still on the disk, but the system now has no way of identifying those data
blocks with a file name. There is no command to "unremove" a file that has been
removed in this way. For this reason many novice users alias their remove command to
be "rm -i", where the -i option prompts them to answer yes or no before the file is
removed. Such aliases are normally placed in the .cshrc file for the C shell; see Chapter
5)
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.4 File Permissions
Each file, directory, and executable has permissions set for who can read, write, and/or
execute it. To find the permissions assigned to a file, the ls command with the -l option
should be used. Also, using the -g option with "ls -l" will help when it is necessary to
know the group for which the permissions are set (BSD only).
When using the "ls -lg" command on a file (ls -l on SysV), the output will appear as
follows:
-rwxr-x--- user unixgroup size Month nn hh:mm filename
The area above designated by letters and dashes (-rwxr-x---) is the area showing the file
type and permissions as defined in the previous Section. Therefore, a permission string,
for example, of -rwxr-x--- allows the user (owner) of the file to read, write, and execute
it; those in the unixgroup of the file can read and execute it; others cannot access it at
all.
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.5 chmod - change file permissions
The command to change permissions on an item (file, directory, etc) is chmod (change
mode). The syntax involves using the command with three digits (representing the user
(owner, u) permissions, the group (g) permissions, and other (o) user's permissions)
followed by the argument (which may be a file name or list of files and directories). Or
by using symbolic representation for the permissions and who they apply to.
Each of the permission types is represented by either a numeric equivalent:
read=4, write=2, execute=1
or a single letter:
read=r, write=w, execute=x
A permission of 4 or r would specify read permissions. If the permissions desired are
read and write, the 4 (representing read) and the 2 (representing write) are added together
to make a permission of 6. Therefore, a permission setting of 6 would allow read and
write permissions.
Alternatively, you could use symbolic notation which uses the one letter representation
for who and for the permissions and an operator, where the operator can be:
+ add permissions
- remove permissions
= set permissions
So to set read and write for the owner we could use "u=rw" in symbolic notation.
Syntax
chmod nnn [argument list] numeric mode
chmod [who]op[perm] [argument list] symbolic mode
where nnn are the three numbers representing user, group, and other permissions, who
is any of u, g, o, or a (all) and perm is any of r, w, x. In symbolic notation you can
separate permission specifications by commas, as shown in the example below.
Common Options
-f force (no error message is generated if the change is unsuccessful)
-R recursively descend through the directory structure and change the modes
Examples
If the permission desired for file1 is user: read, write, execute, group: read, execute,
other: read, execute, the command to use would be
chmod 755 file1 or chmod u=rwx,go=rx file1
Reminder: When giving permissions to group and other to use a file, it is necessary to
allow at least execute permission to the directories for the path in which the file is
located. The easiest way to do this is to be in the directory for which permissions need to
be granted:
chmod 711 . or chmod u=rw,+x . or chmod u=rwx,go=x .
where the dot (.) indicates this directory.
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.6 chown - change ownership
Ownership of a file can be changed with the chown command. On most versions of Unix
this can only be done by the super-user, i.e. a normal user can't give away ownership of
their files. chown is used as below, where # represents the shell prompt for the super-
user:
Syntax
chown [options] user[:group] file (SVR4)
chown [options] user[.group] file (BSD)
Common Options
-R recursively descend through the directory structure
-f force, and don't report any errors
Examples
# chown new_owner file
Introduction to Unix - 14 AUG 1996
3.7 File Maintenance Commands
3.7.7 chgrp - change group
Anyone can change the group of files they own, to another group they belong to, with the
chgrp command.
Syntax
chgrp [options] group file
Common Options
-R recursively descend through the directory structure
-f force, and don't report any errors
Examples
% chgrp new_group file
Introduction to Unix - 14 AUG 1996
CHAPTER 3 Getting Started
3.8 Display Commands
There are a number of commands you can use to display or view a file. Some of these are
editors which we will look at later. Here we will illustrate some of the commands
normally used to display a file.
Display Commands
Command/Syntax What it will do
cat [options] file concatenate (list) a file
echo [text string] echo the text string to stdout
head [-number] file display the first 10 (or number of) lines of a file
more (or less or pg) [options] file page through a text file
tail [options] file display the last few lines (or parts) of a file
3.8.1 - echo - echo a statement
3.8.2 - cat - concatenate a file
3.8.3 - more, less, and pg - page through a file
3.8.4 - head - display the start of a file
3.8.5 - tail - display the end of a file
Introduction to Unix - 14 AUG 1996
3.8 Display Commands
3.8.1 echo - echo a statement
The echo command is used to repeat, or echo, the argument you give it back to the
standard output device. It normally ends with a line-feed, but you can specify an option to
prevent this.
Syntax
echo [string]
Common Options
-n don't print <new-line> (BSD, shell built-in)
c don't print <new-line> (SVR4)
0n where n is the 8-bit ASCII character code (SVR4)
t tab (SVR4)
f form-feed (SVR4)
n new-line (SVR4)
v vertical tab (SVR4)
Examples
% echo Hello Class or echo "Hello Class"
To prevent the line feed:
% echo -n Hello Class or echo "Hello Class c"
where the style to use in the last example depends on the echo command in use.
The x options must be within pairs of single or double quotes, with or without other
string characters.
Introduction to Unix - 14 AUG 1996
3.8 Display Commands
3.8.2 cat - concatenate a file
Display the contents of a file with the concatenate command, cat.
Syntax
cat [options] [file]
Common Options
-n precede each line with a line number
-v display non-printing characters, except tabs, new-lines, and form-feeds
-e display $ at the end of each line (prior to new-line) (when used with -v option)
Examples
% cat filename
You can list a series of files on the command line, and cat will concatenate them, starting
each in turn, immediately after completing the previous one, e.g.:
% cat file1 file2 file3
Introduction to Unix - 14 AUG 1996
3.8 Display Commands
3.8.3 more, less, and pg - page through a
file
more, less, and pg let you page through the contents of a file one screenful at a time.
These may not all be available on your Unix system. They allow you to back up through
the previous pages and search for words, etc.
Syntax
more [options] [+/pattern] [filename]
less [options] [+/pattern] [filename]
pg [options] [+/pattern] [filename]
Options
more less pg Action
-c -c -c clear display before displaying
-i ignore case
-w default default don't exit at end of input, but prompt and wait
-lines -lines # of lines/screenful
+/pattern +/pattern +/pattern search for the pattern
Internal Controls
more displays (one screen at a time) the file requested
<space bar> to view next screen
<return> or <CR> to view one more line
q to quit viewing the file
h help
b go back up one screenful
/word search for word in the remainder of the file
See the man page for additional options
less similar to more; see the man page for options
pg the SVR4 equivalent of more (page)
Introduction to Unix - 14 AUG 1996
3.8 Display Commands
3.8.4 head - display the start of a file
head displays the head, or start, of the file.
Syntax
head [options] file
Common Options
-n number number of lines to display, counting from the top of the file
-number same as above
Examples
By default head displays the first 10 lines. You can display more with the "-n number",
or "-number" options, e.g., to display the first 40 lines:
% head -40 filename or head -n 40 filename
Introduction to Unix - 14 AUG 1996
3.8 Display Commands
3.8.5 tail - display the end of a file
tail displays the tail, or end, of the file.
Syntax
tail [options] file
Common Options
-number number of lines to display, counting from the bottom of the file
Examples
The default is to display the last 10 lines, but you can specify different line or byte
numbers, or a different starting point within the file. To display the last 30 lines of a file
use the -number style:
% tail -30 filename
Introduction to Unix - 14 AUG 1996
URL: http://wks.uts.ohio-state.edu/unix_course/intro-1.html#HEADING1-36
CHAPTER 4 System Resources & Printing:
CHAPTER 4 System Resources & Printing
4.1 System Resources
Commands to report or manage system resources.
System Resource Commands
Command/Syntax What it will do
chsh (passwd -e/-s)
username login_shell
change the user's login shell (often only by the superuser)
date [options] report the current date and time
df [options] [resource] report the summary of disk blocks and inodes free and in use
du [options] [directory or
file]
report amount of disk space in use+
hostname/uname
display or set (super-user only) the name of the current
machine
kill [options] [-SIGNAL]
[pid#] [%job]
send a signal to the process with the process id number
(pid#) or job control number (%n). The default signal is to
kill the process.
man [options] command show the manual (man) page for a command
passwd [options] set or change your password
ps [options] show status of active processes
script file
saves everything that appears on the screen to file until exit
is executed
stty [options] set or display terminal control options
whereis [options] command
report the binary, source, and man page locations for the
command named
which command reports the path to the command or the shell alias in use
who or w report who is logged in and what processes are running
4.1.1 - df - summarize disk block and file usage
4.1.2 - du - report disk space in use
4.1.3 - ps - show status of active processes
4.1.4 - kill - terminate a process
4.1.5 - who - list current users
4.1.6 - whereis - report program locations
4.1.7 - which - report the command found
4.1.8 - hostname/uname - name of machine
4.1.9 - script - record your screen I/O
4.1.10 - date - current date and time
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.1 df - summarize disk block and file
usage
df is used to report the number of disk blocks and inodes used and free for each file
system. The output format and valid options are very specific to the OS and program
version in use.
Syntax
df [options] [resource]
Common Options
-l local file systems only (SVR4)
-k report in kilobytes (SVR4)
Examples
{unix prompt 1} df
Filesystem kbytes used avail capacity Mounted on
/dev/sd0a 20895 19224 0 102% /
/dev/sd0h 319055 131293 155857 46% /usr
/dev/sd1g 637726 348809 225145 61% /usr/local
/dev/sd1a 240111 165489 50611 77% /home/guardian
peri:/usr/local/backup
1952573 976558 780758 56% /usr/local/backup
peri:/home/peri 726884 391189 263007 60% /home/peri
peri:/usr/spool/mail 192383 1081 172064 1% /var/spool/mail
peri:/acs/peri/2 723934 521604 129937 80% /acs/peri/2
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.2 du - report disk space in use
du reports the amount of disk space in use for the files or directories you specify.
Syntax
du [options] [directory or file]
Common Options
-a display disk usage for each file, not just subdirectories
-s display a summary total only
-k report in kilobytes (SVR4)
Examples
{unix prompt 3} du
1 ./.elm
1 ./Mail
1 ./News
20 ./uc
86 .
{unix prompt 4} du -a uc
7 uc/unixgrep.txt
5 uc/editors.txt
1 uc/.emacs
1 uc/.exrc
4 uc/telnet.ftp
1 uc/uniq.tee.txt
20 uc
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.3 ps - show status of active processes
ps is used to report on processes currently running on the system. The output format and
valid options are very specific to the OS and program version in use.
Syntax
ps [options]
Common Options
BSD SVR4
-a -e all processes, all users
-e environment/everything
-g process group leaders as well
-l -l long format
-u -u user user oriented report
-x -e even processes not executed from terminals
-f full listing
-w report first 132 characters per line
note -- Because the ps command is highly system-specific, it is recommended that you
consult the man pages of your system for details of options and interpretation of ps
output.
Examples
{unix prompt 5} ps
PID TT STAT TIME COMMAND
15549 p0 IW 0:00 -tcsh (tcsh)
15588 p0 IW 0:00 man nice
15594 p0 IW 0:00 sh -c less /tmp/man15588
15595 p0 IW 0:00 less /tmp/man15588
15486 p1 S 0:00 -tcsh (tcsh)
15599 p1 T 0:00 emacs unixgrep.txt
15600 p1 R 0:00 ps
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.4 kill - terminate a process
kill sends a signal to a process, usually to terminate it.
Syntax
kill [-signal] process-id
Common Options
-l displays the available kill signals:
Examples
{unix prompt 9} kill -l
HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM
URG STOP
TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST
USR1 USR2
The -KILL signal, also specified as -9 (because it is 9th on the above list), is the most
commonly used kill signal. Once seen, it can't be ignored by the program whereas the
other signals can.
{unix prompt 10} kill -9 15599
[1] + Killed emacs unixgrep.txt
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.5 who - list current users
who reports who is logged in at the present time.
Syntax
who [am i]
Examples
beauty condron>who
wmtell ttyp1 Apr 21 20:15 (apple.acs.ohio-s)
fbwalk ttyp2 Apr 21 23:21 (worf.acs.ohio-st)
stwang ttyp3 Apr 21 23:22 (127.99.25.8)
david ttyp4 Apr 21 22:27 (slip1-61.acs.ohi)
tgardner ttyp5 Apr 21 23:07 (picard.acs.ohio-)
awallace ttyp6 Apr 21 23:00 (ts31-4.homenet.o)
gtl27 ttyp7 Apr 21 23:24 (data.acs.ohio-st)
ccchang ttyp8 Apr 21 23:32 (slip3-10.acs.ohi)
condron ttypc Apr 21 23:38 (lcondron-mac.acs)
dgildman ttype Apr 21 22:30 (slip3-36.acs.ohi)
fcbetz ttyq2 Apr 21 21:12 (ts24-10.homenet.)
beauty condron>who am i
beauty!condron ttypc Apr 21 23:38 (lcondron-mac.acs)
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.6 whereis - report program locations
whereis reports the filenames of source, binary, and manual page files associated with
command(s).
Syntax
whereis [options] command(s)
Common Options
-b report binary files only
-m report manual sections only
-s report source files only
Examples
brigadier: condron [69]> whereis Mail
Mail: /usr/ucb/Mail /usr/lib/Mail.help /usr/lib/Mail.rc /usr/man/man1/Mail.1
brigadier: condron [70]> whereis -b Mail
Mail: /usr/ucb/Mail /usr/lib/Mail.help /usr/lib/Mail.rc
brigadier: condron [71]> whereis -m Mail
Mail: /usr/man/man1/Mail.1
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.7 which - report the command found
which will report the name of the file that is be executed when the command is invoked.
This will be the full path name or the alias that's found first in your path.
Syntax
which command(s)
example--
brigadier: condron [73]> which Mail
/usr/ucb/Mail
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.8 hostname/uname - name of machine
hostname (uname -n on SysV) reports the host name of the machine the user is logged
into, e.g.:
brigadier: condron [91]> hostname
brigadier
uname has additional options to print information about system hardware type and
software version.
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.9 script - record your screen I/O
script creates a script of your session input and output. Using the script command, you
can capture all the data transmission from and to your terminal screen until you exit the
script program. This can be useful during the programming-and-debugging process, to
document the combination of things you have tried, or to get a printed copy of it all for
later perusal.
Syntax
script [-a] [file] <. . .> exit
Common Options
-a append the output to file
typescript is the name of the default file used by script.
You must remember to type exit to end your script session and close your typescript file.
Examples
beauty condron>script
Script started, file is typescript
beauty condron>ps
PID TT STAT TIME COMMAND
23323 p8 S 0:00 -h -i (tcsh)
23327 p8 R 0:00 ps
18706 pa S 0:00 -tcsh (tcsh)
23315 pa T 0:00 emacs
23321 pa S 0:00 script
23322 pa S 0:00 script
3400 pb I 0:00 -tcsh (tcsh)
beauty condron>kill -9 23315
beauty condron>date
Mon Apr 22 22:29:44 EDT 1996
beauty condron>exit
exit
Script done, file is typescript
[1] + Killed emacs
beauty condron>cat typescript
Script started on Mon Apr 22 22:28:36 1996
beauty condron>ps
PID TT STAT TIME COMMAND
23323 p8 S 0:00 -h -i (tcsh)
23327 p8 R 0:00 ps
18706 pa S 0:00 -tcsh (tcsh)
23315 pa T 0:00 emacs
23321 pa S 0:00 script
23322 pa S 0:00 script
3400 pb I 0:00 -tcsh (tcsh)
beauty condron>kill -9 23315
beauty condron>date
Mon Apr 22 22:29:44 EDT 1996
beauty condron>exit
exit
script done on Mon Apr 22 22:30:02 1996
beauty condron>
Introduction to Unix - 14 AUG 1996
4.1 System Resources
4.1.10 date - current date and time
date displays the current data and time. A superuser can set the date and time.
Syntax
date [options] [+format]
Common Options
-u use Universal Time (or Greenwich Mean Time)
+format specify the output format
%a weekday abbreviation, Sun to Sat
%h month abbreviation, Jan to Dec
%j day of year, 001 to 366
%n <new-line>
%t <TAB>
%y last 2 digits of year, 00 to 99
%D MM/DD/YY date
%H hour, 00 to 23
%M minute, 00 to 59
%S second, 00 to 59
%T HH:MM:SS time
Examples
beauty condron>date
Mon Jun 10 09:01:05 EDT 1996
beauty condron>date -u
Mon Jun 10 13:01:33 GMT 1996
beauty condron>date +%a%t%D
Mon 06/10/96
beauty condron>date '+%y:%j'
96:162
Introduction to Unix - 14 AUG 1996
CHAPTER 4 System Resources & Printing
4.2 Print Commands
Printing Commands
Command/Syntax What it will do
lpq (lpstat) [options] show the status of print jobs
lpr (lp) [options] file print to defined printer
lprm (cancel) [options] remove a print job from the print queue
pr [options] [file] filter the file and print it on the terminal
The print commands allow us to print files to standard output (pr) or to a line printer
(lp/lpr) while filtering the output. The BSD and SysV printer commands use different
names and different options to produce the same results: lpr, lprm, and lpq vs lp, cancel,
and lpstat for the BSD and SysV submit, cancel, and check the status of a print job,
respectively.
4.2.1 - lp/lpr - submit a print job
4.2.2 - lpstat/lpq - check the status of a print job
4.2.3 - cancel/lprm - cancel a print job
4.2.4 - pr - prepare files for printing
Introduction to Unix - 14 AUG 1996
4.2 Print Commands
4.2.1 lp/lpr - submit a print job
lp and lpr submit the specified file, or standard input, to the printer daemon to be printed.
Each job is given a unique request-id that can be used to follow or cancel the job while
it's in the queue.
Syntax
lp [options] filename
lpr [options] filename
Common Options
lp lpr function
-n number -#number number of copies
-t title -Ttitle title for job
-d destination -Pprinter printer name
-c (default) copy file to queue before printing
(default) -s don't copy file to queue before printing
-o option additional options, e.g. nobanner
Files beginning with the string "%!" are assumed to contain PostScript commands.
Examples
To print the file ssh.ps:
% lp ssh.ps
request id is lp-153 (1 file(s))
This submits the job to the queue for the default printer, lp, with the request-id lp-153.
Introduction to Unix - 14 AUG 1996
4.2 Print Commands
4.2.2 lpstat/lpq - check the status of a
print job
You can check the status of your print job with lpstat or lpq.
Syntax
lpstat [options]
lpq [options] [job#] [username]
Common Options
lpstat lpq function
-d (defaults to lp) list system default destination
-s summarize print status
-t print all status information
-u [login-ID-list] user list
-v list printers known to the system
-p printer_dest -Pprinter_dest list status of printer, printer_dest
Examples
% lpstat
lp-153 frank 208068 Apr 29 15:14 on lp
Introduction to Unix - 14 AUG 1996
4.2 Print Commands
4.2.3 cancel/lprm - cancel a print job
Any user can cancel only heir own print jobs.
Syntax
cancel [request-ID] [printer]
lprm [options] [job#] [username]
Common Options
cancel lprm function
-Pprinter specify printer
- all jobs for user
-u [login-ID-list] user list
Examples
To cancel the job submitted above:
% cancel lp-153
Introduction to Unix - 14 AUG 1996
4.2 Print Commands
4.2.4 pr - prepare files for printing
pr prints header and trailer information surrounding the formatted file. You can specify
the number of pages, lines per page, columns, line spacing, page width, etc. to print,
along with header and trailer information and how to treat <tab> characters.
Syntax
pr [options] file
Common Options
+page_number start printing with page page_number of the formatted input file
-column number of columns
-a modify -column option to fill columns in round-robin order
-d double spacing
-e[char][gap] tab spacing
-h header_string header for each page
-l lines lines per page
-t don't print the header and trailer on each page
-w width width of page
Examples
The file containing the list of P. G. Wodehouse's Lord Emsworth books could be printed,
at 14 lines per page (including 5 header and 5 (empty) trailer lines) below, where the -e
option specifies the <tab> conversion style:
% pr -l 14 -e42 wodehouse
Apr 29 11:11 1996 wodehouse_emsworth_books Page 1
Something Fresh [1915] Uncle Dynamite [1948]
Leave it to Psmith [1923] Pigs Have Wings [1952]
Summer Lightning [1929] Cocktail Time [1958]
Heavy Weather [1933] Service with a Smile [1961]
Apr 29 11:11 1996 wodehouse_emsworth_books Page 2
Blandings Castle and Elsewhere [1935] Galahad at Blandings [1965]
Uncle Fred in the Springtime [1939] A Pelican at Blandings [1969]
Full Moon [1947] Sunset at Blandings [1977]
Introduction to Unix - 14 AUG 1996
Introduction to Unix
CHAPTER 5 Shells
The shell sits between you and the operating system, acting as a command interpreter. It
reads your terminal input and translates the commands into actions taken by the system.
The shell is analogous to command.com in DOS. When you log into the system you are
given a default shell. When the shell starts up it reads its startup files and may set
environment variables, command search paths, and command aliases, and executes any
commands specified in these files.
The original shell was the Bourne shell, sh. Every Unix platform will either have the
Bourne shell, or a Bourne compatible shell available. It has very good features for
controlling input and output, but is not well suited for the interactive user. To meet the
latter need the C shell, csh, was written and is now found on most, but not all, Unix
systems. It uses C type syntax, the language Unix is written in, but has a more awkward
input/output implementation. It has job control, so that you can reattach a job running in
the background to the foreground. It also provides a history feature which allows you to
modify and repeat previously executed commands.
The default prompt for the Bourne shell is $ (or #, for the root user). The default prompt
for the C shell is %.
Numerous other shells are available from the network. Almost all of them are based on
either sh or csh with extensions to provide job control to sh, allow in-line editing of
commands, page through previously executed commands, provide command name
completion and custom prompt, etc. Some of the more well known of these may be on
your favorite Unix system: the Korn shell, ksh, by David Korn and the Bourne Again
SHell, bash, from the Free Software Foundations GNU project, both based on sh, the T-
C shell, tcsh, and the extended C shell, cshe, both based on csh. Below we will describe
some of the features of sh and csh so that you can get started.
5.1 - Built-in Commands
5.2 - Environment Variables
5.3 - The Bourne Shell, sh
5.4 - The C Shell, csh
5.5 - Job Control
5.6 - History
5.7 - Changing your Shell
Introduction to Unix - 14 AUG 1996
CHAPTER 5 Shells
5.1 Built-in Commands
The shells have a number of built-in, or native commands. These commands are
executed directly in the shell and don't have to call another program to be run. These
built-in commands are different for the different shells.
5.1.1 - Sh
5.1.2 - Csh
Introduction to Unix - 14 AUG 1996
5.1 Built-in Commands
5.1.1 Sh
For the Bourne shell some of the more commonly used built-in commands are:
: null command
. source (read and execute) commands from a file
case case conditional loop
cd change the working directory (default is $HOME)
echo write a string to standard output
eval evaluate the given arguments and feed the result back to the shell
exec execute the given command, replacing the current shell
exit exit the current shell
export share the specified environment variable with subsequent shells
for for conditional loop
if if conditional loop
pwd print the current working directory
read read a line of input from stdin
set set variables for the shell
test evaluate an expression as true or false
trap trap for a typed signal and execute commands
umask set a default file permission mask for new files
unset unset shell variables
wait wait for a specified process to terminate
while while conditional loop
Introduction to Unix - 14 AUG 1996
5.1 Built-in Commands
5.1.2 Csh
For the C shell the more commonly used built-in functions are:
alias assign a name to a function
bg put a job into the background
cd change the current working directory
echo write a string to stdout
eval evaluate the given arguments and feed the result back to the shell
exec execute the given command, replacing the current shell
exit exit the current shell
fg bring a job to the foreground
foreach for conditional loop
glob do filename expansion on the list, but no "" escapes are honored
history print the command history of the shell
if if conditional loop
jobs list or control active jobs
kill kill the specified process
limit set limits on system resources
logout terminate the login shell
nice command lower the scheduling priority of the process, command
nohup command do not terminate command when the shell exits
popd pop the directory stack and return to that directory
pushd change to the new directory specified and add the current one to the directory
stack
rehash recreate the hash table of paths to executable files
repeat repeat a command the specified number of times
set set a shell variable
setenv set an environment variable for this and subsequent shells
source source (read and execute) commands from a file
stop stop the specified background job
switch switch conditional loop
umask set a default file permission mask for new files
unalias remove the specified alias name
unset unset shell variables
unsetenv unset shell environment variables
wait wait for all background processes to terminate
while while conditional loop
Introduction to Unix - 14 AUG 1996
CHAPTER 5 Shells
5.2 Environment Variables
Environmental variables are used to provide information to the programs you use. You
can have both global environment and local shell variables. Global environment
variables are set by your login shell and new programs and shells inherit the environment
of their parent shell. Local shell variables are used only by that shell and are not passed
on to other processes. A child process cannot pass a variable back to its parent process.
The current environment variables are displayed with the "env" or "printenv"
commands. Some common ones are:
• DISPLAY The graphical display to use, e.g. nyssa:0.0
• EDITOR The path to your default editor, e.g. /usr/bin/vi
• GROUP Your login group, e.g. staff
• HOME Path to your home directory, e.g. /home/frank
• HOST The hostname of your system, e.g. nyssa
• IFS Internal field separators, usually any white space (defaults to tab, space and
<newline>)
• LOGNAME The name you login with, e.g. frank
• PATH Paths to be searched for commands, e.g. /usr/bin:/usr/ucb:/usr/local/bin
• PS1 The primary prompt string, Bourne shell only (defaults to $)
• PS2 The secondary prompt string, Bourne shell only (defaults to >)
• SHELL The login shell you're using, e.g. /usr/bin/csh
• TERM Your terminal type, e.g. xterm
• USER Your username, e.g. frank
Many environment variables will be set automatically when you login. You can modify
them or define others with entries in your startup files or at anytime within the shell.
Some variables you might want to change are PATH and DISPLAY. The PATH
variable specifies the directories to be automatically searched for the command you
specify. Examples of this are in the shell startup scripts below.
You set a global environment variable with a command similar to the following for the
C shell:
% setenv NAME value
and for Bourne shell:
$ NAME=value; export NAME
You can list your global environmental variables with the env or printenv commands.
You unset them with the unsetenv (C shell) or unset (Bourne shell) commands.
To set a local shell variable use the set command with the syntax below for C shell.
Without options set displays all the local variables.
% set name=value
For the Bourne shell set the variable with the syntax:
$ name=value
The current value of the variable is accessed via the "$name", or "${name}", notation.
Introduction to Unix - 14 AUG 1996
CHAPTER 5 Shells
5.3 The Bourne Shell, sh
Sh uses the startup file .profile in your home directory. There may also be a system-wide
startup file, e.g. /etc/profile. If so, the system-wide one will be sourced (executed) before
your local one.
A simple .profile could be the following:
PATH=/usr/bin:/usr/ucb:/usr/local/bin:. # set the PATH
export PATH # so that PATH is available to subshells
# Set a prompt
PS1="{`hostname` `whoami`} " # set the prompt, default is "$"
# functions
ls() { /bin/ls -sbF "$@";}
ll() { ls -al "$@";}
# Set the terminal type
stty erase ^H # set Control-H to be the erase key
eval `tset -Q -s -m ':?xterm'` # prompt for the terminal type, assume xterm
#
umask 077
Whenever a # symbol is encountered the remainder of that line is treated as a comment.
In the PATH variable each directory is separated by a colon (:) and the dot (.) specifies
that the current directory is in your path. If the latter is not set it's a simple matter to
execute a program in the current directory by typing:
./program_name
It's actually a good idea not to have dot (.) in your path, as you may inadvertently execute
a program you didn't intend to when you cd to different directories.
A variable set in .profile is set only in the login shell unless you "export" it or source
.profile from another shell. In the above example PATH is exported to any subshells.
You can source a file with the built-in "." command of sh, i.e.:
. ./.profile
You can make your own functions. In the above example the function ll results in an "ls
-al" being done on the specified files or directories.
With stty the erase character is set to Control-H (^H), which is usually the Backspace
key.
The tset command prompts for the terminal type, and assumes "xterm" if we just hit
<CR>. This command is run with the shell built-in, eval, which takes the result from the
tset command and uses it as an argument for the shell. In this case the "-s" option to tset
sets the TERM and TERMCAP variables and exports them.
The last line in the example runs the umask command with the option such that any files
or directories you create will not have read/write/execute permission for group and
other.
For further information about sh type "man sh" at the shell prompt.
Introduction to Unix - 14 AUG 1996
CHAPTER 5 Shells
5.4 The C Shell, csh
Csh uses the startup files .cshrc and .login. Some versions use a system-wide startup file,
e.g. /etc/csh.login. Your .login file is sourced (executed) only when you login. Your
.cshrc file is sourced every time you start a csh, including when you login. It has many
similar features to .profile, but a different style of doing things. Here we use the set or
setenv commands to initialize a variable, where set is used for this shell and setenv for
this and any subshells. The environment variables: USER, TERM, and PATH, are
automatically imported to and exported from the user, term, and path variables of the
csh. So setenv doesn't need to be done for these. The C shell uses the symbol, ~, to
indicate the user's home directory in a path, as in ~/.cshrc, or to specify another user's
login directory, as in ~username/.cshrc.
Predefined variables used by the C shell include:
• argv The list of arguments of the current shell
• cwd The current working directory
• history Sets the size of the history list to save
• home The home directory of the user; starts with $HOME
• ignoreeof When set ignore EOF (^D) from terminals
• noclobber When set prevent output redirection from overwriting existing files
• noglob When set prevent filename expansion with wildcard pattern matching
• path The command search path; starts with $PATH
• prompt Set the command line prompt (default is %)
• savehist number of lines to save in the history list to save in the .history file
• shell The full pathname of the current shell; starts with $SHELL
• status The exit status of the last command (0=normal exit, 1=failed command)
• term Your terminal type, starts with $TERM
• user Your username, starts with $USER
A simple .cshrc could be:
set path=(/usr/bin /usr/ucb /usr/local/bin ~/bin . ) # set the path
set prompt = "{'hostname' 'whoami' !} " # set the primary prompt; default is "%"
set noclobber # don't redirect output to existing files
set ignoreeof # ignore EOF (^D) for this shell
set history=100 savehist=50 # keep a history list and save it between logins
# aliases
alias h history # alias h to "history"
alias ls "/usr/bin/ls -sbF" # alias ls to "ls -sbF"
alias ll ls -al # alias ll to "ls -sbFal" (combining these options with those for "ls" above)
alias cd 'cd !*;pwd' # alias cd so that it prints the current working directory after the
change
umask 077
Some new features here that we didn't see in .profile are noclobber, ignoreeof, and
history. Noclobber indicates that output will not be redirected to existing files, while
ignoreeof specifies that EOF (^D) will not cause the login shell to exit and log you off
the system.
With the history feature you can recall previously executed commands and re-execute
them, with changes if desired.
An alias allows you to use the specified alias name instead of the full command. In the
"ls" example above, typing "ls" will result in "/usr/bin/ls -sbF" being executed. You can
tell which "ls" command is in your path with the built-in which command, i.e.:
which ls
ls: aliased to /usr/bin/ls -sbF
A simple .login could be:
# .login
stty erase ^H # set Control-H to be the erase key
set noglob # prevent wild card pattern matching
eval 'tset -Q -s -m ':?xterm'' # prompt for the terminal type, assume "xterm"
unset noglob # re-enable wild card pattern matching
Setting and unsetting noglob around tset prevents it from being confused by any csh
filename wild card pattern matching or expansion.
Should you make any changes to your startup files you can initiate the change by
sourcing the changed file. For csh you do this with the built-in source command, i.e.:
source .cshrc
For further information about csh type "man csh" at the shell prompt.
Introduction to Unix - 14 AUG 1996
CHAPTER 5 Shells
5.5 Job Control
With the C shell, csh, and many newer shells including some newer Bourne shells, you
can put jobs into the background at anytime by appending "&" to the command, as with
sh. After submitting a command you can also do this by typing ^Z (Control-Z) to
suspend the job and then "bg" to put it into the background. To bring it back to the
foreground type "fg".
You can have many jobs running in the background. When they are in the background
they are no longer connected to the keyboard for input, but they may still display output
to the terminal, interspersing with whatever else is typed or displayed by your current job.
You may want to redirect I/O to or from files for the job you intend to background. Your
keyboard is connected only to the current, foreground, job.
The built-in jobs command allows you to list your background jobs. You can use the kill
command to kill a background job. With the %n notation you can reference the nth
background job with either of these commands, replacing n with the job number from the
output of jobs. So kill the second background job with "kill %2" and bring the third job
to the foreground with "fg %3".
Introduction to Unix - 14 AUG 1996
CHAPTER 5 Shells
5.6 History
The C shell, the Korn shell and some other more advanced shells, retain information
about the former commands you've executed in the shell. How history is done will
depend on the shell used. Here we'll describe the C shell history features.
You can use the history and savehist variables to set the number of previously executed
commands to keep track of in this shell and how many to retain between logins,
respectively. You could put a line such as the following in .cshrc to save the last 100
commands in this shell and the last 50 through the next login.
set history=100 savehist=50
The shell keeps track of the history list and saves it in ~/.history between logins.
You can use the built-in history command to recall previous commands, e.g. to print the
last 10:
% history 10
52 cd workshop
53 ls
54 cd unix_intro
55 ls
56 pwd
57 date
58 w
59 alias
60 history
61 history 10
You can repeat the last command by typing !!:
% !!
53 ls
54 cd unix_intro
55 ls
56 pwd
57 date
58 w
59 alias
60 history
61 history 10
62 history 10
You can repeat any numbered command by prefacing the number with a !, e.g.:
% !57
date
Tue Apr 9 09:55:31 EDT 1996
Or repeat a command starting with any string by prefacing the starting unique part of the
string with a !, e.g.:
% !da
date
Tue Apr 9 09:55:31 EDT 1996
When the shell evaluates the command line it first checks for history substitution before it
interprets anything else. Should you want to use one of these special characters in a shell
command you will need to escape, or quote it first, with a  before the character, i.e. !.
The history substitution characters are summarized in the following table.
C Shell History Substitution
Command Substitution Function
!! repeat last command
!n repeat command number n
!-n repeat command n from last
!str repeat command that started with string str
!?str? repeat command with str anywhere on the line
!?str?% select the first argument that had str in it
!: repeat the last command, generally used with a modifier
!:n
select the nth argument from the last command (n=0 is the command
name)
!:n-m select the nth through mth arguments from the last command
!^ select the first argument from the last command (same as !:1)
!$ select the last argument from the last command
!* select all arguments to the previous command
!:n* select the nth through last arguments from the previous command
!:n- select the nth through next to last arguments from the previous command
^str1^str2^ replace str1 with str2 in its first occurrence in the previous command
!n:s/str1/str2/
substitute str1 with str2 in its first occurrence in the nth command, ending
with a g substitute globally
Additional editing modifiers are described in the man page.
CHAPTER 5 Shells
5.7 Changing your Shell
To change your shell you can usually use the "chsh" or "passwd -e" commands. The
option flag, here -e, may vary from system to system (-s on BSD based systems), so
check the man page on your system for proper usage. Sometimes this feature is disabled.
If you can't change your shell check with your System Administrator.
The new shell must be the full path name for a valid shell on the system. Which shells are
available to you will vary from system to system. The full path name of a shell may also
vary. Normally, though, the Bourne and C shells are standard, and available as:
/bin/sh
/bin/csh
Some systems will also have the Korn shell standard, normally as:
/bin/ksh
Some shells that are quite popular, but not normally distributed by the OS vendors are
bash and tcsh. These might be placed in /bin or a locally defined directory, e.g.
/usr/local/bin or /opt/local/bin. Should you choose a shell not standard to the OS make
sure that this shell, and all login shells available on the system, are listed in the file
/etc/shells. If this file exists and your shell is not listed in this file the file transfer
protocol daemon, ftpd, will not let you connect to this machine. If this file does not exist
only accounts with "standard" shells are allowed to connect via ftp.
You can always try out a shell before you set it as your default shell. To do this just type
in the shell name as you would any other command.
Introduction to Unix - 14 AUG 1996
Introduction to Unix
CHAPTER 6 Special Unix Features
One of the most important contributions Unix has made to Operating Systems is the
provision of many utilities for doing common tasks or obtaining desired information.
Another is the standard way in which data is stored and transmitted in Unix systems. This
allows data to be transmitted to a file, the terminal screen, or a program, or from a file,
the keyboard, or a program; always in a uniform manner. The standardized handling of
data supports two important features of Unix utilities: I/O redirection and piping.
With output redirection, the output of a command is redirected to a file rather than to
the terminal screen. With input redirection, the input to a command is given via a file
rather than the keyboard. Other tricks are possible with input and output redirection as
well, as you will see. With piping, the output of a command can be used as input (piped)
to a subsequent command. In this chapter we discuss many of the features and utilities
available to Unix users.
6.1 - File Descriptors
6.2 - File Redirection
6.3 - Other Special Command Symbols
6.4 - Wild Cards
Introduction to Unix - 14 AUG 1996
CHAPTER 6 Special Unix Features
6.1 File Descriptors
There are 3 standard file descriptors:
• stdin 0 Standard input to the program
• stdout 1 Standard output from the program
• stderr 2 Standard error output from the program
Normally input is from the keyboard or a file. Output, both stdout and stderr, normally go
to the terminal, but you can redirect one or both of these to one or more files.
You can also specify additional file descriptors, designating them by a number 3 through
9, and redirect I/O through them.
Introduction to Unix - 14 AUG 1996
CHAPTER 6 Special Unix Features
6.2 File Redirection
Output redirection takes the output of a command and places it into a named file. Input
redirection reads the file as input to the command. The following table summarizes the
redirection options.
File Redirection
Symbol Redirection
> output redirect
>! same as above, but overrides noclobber option of csh
>> append output
>>!
same as above, but overrides noclobber option on csh and creates the file if
it doesn't already exist.
| pipe output to another command
< input redirection
<<String
read from standard input until "String" is encountered as the only thing on the
line. Also known as a "here document" (see Chapter 8).
<<String same as above, but don't allow shell substitutions
An example of output redirection is:
cat file1 file2 > file3
The above command concatenates file1 then file2 and redirects (sends) the output to
file3. If file3 doesn't already exist it is created. If it does exist it will either be truncated to
zero length before the new contents are inserted, or the command will be rejected, if the
noclobber option of the csh is set. (See the csh in Chapter 4). The original files, file1 and
file2, remain intact as separate entities.
Output is appended to a file in the form:
cat file1 >> file2
This command appends the contents of file1 to the end of what already exists in file2.
(Does not overwrite file2).
Input is redirected from a file in the form:
program < file
This command takes the input for program from file.
To pipe output to another command use the form:
command | command
This command makes the output of the first command the input of the second command.
6.2.1 - Csh
6.2.2 - Sh
Introduction to Unix - 14 AUG 1996
CHAPTER 6 Special Unix Features
6.3 Other Special Command Symbols
In addition to file redirection symbols there are a number of other special symbols you
can use on a command line. These include:
; command separator
& run the command in the background
&& run the command following this only if the previous command completes
successfully, e.g.:
grep string file && cat file
|| run the command following only if the previous command did not complete
successfully, e.g.:
grep string file || echo "String not found."
( ) the commands within the parentheses are executed in a subshell. The output of the
subshell can be manipulated as above.
' ' literal quotation marks. Don't allow any special meaning to any characters within these
quotations.
 escape the following character (take it literally)
" " regular quotation marks. Allow variable and command substitution with theses
quotations (does not disable $ and  within the string).
'command' take the output of this command and substitute it as an argument(s) on the
command line
# everything following until <newline> is a comment
The  character can also be used to escape the <newline> character so that you can
continue a long command on more than one physical line of text.
Introduction to Unix - 14 AUG 1996
CHAPTER 6 Special Unix Features
6.4 Wild Cards
The shell and some text processing programs will allow meta-characters, or wild cards,
and replace them with pattern matches. For filenames these meta-characters and their
uses are:
? match any single character at the indicated position
* match any string of zero or more characters
[abc...] match any of the enclosed characters
[a-e] match any characters in the range a,b,c,d,e
[!def] match any characters not one of the enclosed characters, sh only
{abc,bcd,cde} match any set of characters separated by comma (,) (no spaces), csh only
~ home directory of the current user, csh only
~user home directory of the specified user, csh only
Introduction to Unix - 14 AUG 1996
Introduction to Unix
CHAPTER 7 Text Processing
7.1 - Regular Expression Syntax
7.2 - Text Processing Commands
Introduction to Unix - 14 AUG 1996
CHAPTER 7 Text Processing
7.1 Regular Expression Syntax
Some text processing programs, such as grep, egrep, sed, awk and vi, let you search on
patterns instead of fixed strings. These text patterns are known as regular expressions.
You form a regular expression by combining normal characters and special characters,
also known as meta-characters, with the rules below. With these regular expressions
you can do pattern matching on text data. Regular expressions come in three different
forms:
• Anchors which tie the pattern to a location on the line
• Character sets which match a character at a single position
• Modifiers which specify how many times to repeat the previous expression
Regular expression syntax is as follows. Some programs will accept all of these, others
may only accept some.
. match any single character except <newline>
* match zero or more instances of the single character (or meta-character) immediately
preceding it
[abc] match any of the characters enclosed
[a-d] match any character in the enclosed range
[^exp] match any character not in the following expression
^abc the regular expression must start at the beginning of the line (Anchor)
abc$ the regular expression must end at the end of the line (Anchor)
 treat the next character literally. This is normally used to escape the meaning of special
characters such as "." and "*".
{n,m} match the regular expression preceding this a minimum number of n times and a
maximum of m times (0 through 255 are allowed for n and m). The { and } sets should
be thought of as single operators. In this case the  preceding the bracket does not escape
its special meaning, but rather turns on a new one.
<abc> will match the enclosed regular expression as long as it is a separate word. Word
boundaries are defined as beginning with a <newline> or anything except a letter, digit or
underscore (_) or ending with the same or a end-of-line character. Again the < and >
sets should be thought of as single operators.
(abc) saves the enclosed pattern in a buffer. Up to nine patterns can be saved for each
line. You can reference these latter with the n character set. Again the ( and ) sets
should be thought of as single operators.
n where n is between 1 and 9. This matches the nth expression previously saved for this
line. Expressions are numbered starting from the left. The n should be thought of as a
single operator.
& print the previous search pattern (used in the replacement string)
There are a few meta-characters used only by awk and egrep. These are:
+ match one or more of the preceding expression
? match zero or more of the preceding expression
| separator. Match either the preceding or following expression.
( ) group the regular expressions within and apply the match to the set.
Some examples of the more commonly used regular expressions are:
regular
expression matches
cat the string cat
.at any occurrence of a letter, followed by at, such as cat, rat, mat, bat, fat, hat
xy*z any occurrence of an x, followed by zero or more y's, followed by a z.
^cat cat at the beginning of the line
cat$ cat at the end of the line
* any occurrence of an asterisk
[cC]at cat or Cat
[^a-zA-Z] any occurrence of a non-alphabetic character
[0-9]$ any line ending with a number
[A-Z][A-Z]* one or more upper case letters
[A-Z]* zero or more upper case letters (In other words, anything.)
Introduction to Unix - 14 AUG 1996
CHAPTER 7 Text Processing
7.2 Text Processing Commands
Text Processing Commands
Command/Syntax What it will do
awk/nawk [options] file scan for patterns in a file and process the results
grep/egrep/fgrep [options]
'search string' file
search the argument (in this case probably a file) for all
occurrences of the search string, and list them.
sed [options] file
stream editor for editing files from a script or from the
command line
7.2.1 - grep
7.2.2 - sed
7.2.3 - awk, nawk, gawk
Introduction to Unix - 14 AUG 1996
7.2 Text Processing Commands
7.2.1 grep
This section provides an introduction to the use of regular expressions and grep.
The grep utility is used to search for generalized regular expressions occurring in Unix
files. Regular expressions, such as those shown above, are best specified in apostrophes
(or single quotes) when specified in the grep utility. The egrep utility provides searching
capability using an extended set of meta-characters. The syntax of the grep utility, some
of the available options, and a few examples are shown below.
Syntax
grep [options] regexp [file[s]]
Common Options
-i ignore case
-c report only a count of the number of lines containing matches, not the matches
themselves
-v invert the search, displaying only lines that do not match
-n display the line number along with the line on which a match was found
-s work silently, reporting only the final status:
0, for match(es) found
1, for no matches
2, for errors
-l list filenames, but not lines, in which matches were found
Examples
Consider the following file:
{unix prompt 5} cat num.list
1 15 fifteen
2 14 fourteen
3 13 thirteen
4 12 twelve
5 11 eleven
6 10 ten
7 9 nine
8 8 eight
9 7 seven
10 6 six
11 5 five
12 4 four
13 3 three
14 2 two
15 1 one
Here are some grep examples using this file. In the first we'll search for the number 15:
{unix prompt 6} grep '15' num.list
1 15 fifteen
15 1 one
Now we'll use the "-c" option to count the number of lines matching the search criterion:
7.2 Text Processing Commands
7.2.2 sed
The non-interactive, stream editor, sed, edits the input stream, line by line, making the
specified changes, and sends the result to standard output.
Syntax
sed [options] edit_command [file]
The format for the editing commands are:
[address1[,address2]][function][arguments]
where the addresses are optional and can be separated from the function by spaces or
tabs. The function is required. The arguments may be optional or required, depending on
the function in use.
Line-number Addresses are decimal line numbers, starting from the first input line and
incremented by one for each. If multiple input files are given the counter continues
cumulatively through the files. The last input line can be specified with the "$" character.
Context Addresses are the regular expression patterns enclosed in slashes (/).
Commands can have 0, 1, or 2 comma-separated addresses with the following affects:
# of addresses lines affected
0 every line of input
1 only lines matching the address
2 first line matching the first address and all lines until, and including, the line matching
the second address. The process is then repeated on subsequent lines.
Substitution functions allow context searches and are specified in the form:
s/regular_expression_pattern/replacement_string/flag
and should be quoted with single quotes (') if additional options or functions are
specified. These patterns are identical to context addresses, except that while they are
normally enclosed in slashes (/), any normal character is allowed to function as the
delimiter, other than <space> and <newline>. The replacement string is not a regular
expression pattern; characters do not have special meanings here, except:
& substitute the string specified by regular_expression_pattern
n substitute the nth string matched by regular_expression_pattern enclosed in '(', ')'
pairs.
These special characters can be escaped with a backslash () to remove their special
meaning.
Common Options
-e script edit script
-n don't print the default output, but only those lines specified by p or s///p functions
-f script_file take the edit scripts from the file, script_file
Valid flags on the substitution functions include:
d delete the pattern
g globally substitute the pattern
p print the line
Examples
This example changes all incidents of a comma (,) into a comma followed by a space (, )
when doing output:
% cat filey | sed s/,/, /g
The following example removes all incidents of Jr preceded by a space ( Jr) in filey:
% cat filey | sed s/ Jr//g
To perform multiple operations on the input precede each operation with the -e (edit)
option and quote the strings. For example, to filter for lines containing "Date: " and
"From: " and replace these without the colon (:), try:
sed -e 's/Date: /Date /' -e 's/From: /From /'
To print only those lines of the file from the one beginning with "Date:" up to, and
including, the one beginning with "Name:" try:
sed -n '/^Date:/,/^Name:/p'
To print only the first 10 lines of the input (a replacement for head):
sed -n 1,10p
Introduction to Unix - 14 AUG 1996
7.2 Text Processing Commands
7.2.3 awk, nawk, gawk
awk is a pattern scanning and processing language. Its name comes from the last initials
of the three authors: Alfred. V. Aho, Brian. W. Kernighan, and Peter. J. Weinberger.
nawk is new awk, a newer version of the program, and gawk is gnu awk, from the
Free Software Foundation. Each version is a little different. Here we'll confine
ourselves to simple examples which should be the same for all versions. On some
OSs awk is really nawk.
awk searches its input for patterns and performs the specified operation on each line, or
fields of the line, that contain those patterns. You can specify the pattern matching
statements for awk either on the command line, or by putting them in a file and using the
-f program_file option.
Syntax
awk program [file]
where program is composed of one or more:
pattern { action }
fields. Each input line is checked for a pattern match with the indicated action being
taken on a match. This continues through the full sequence of patterns, then the next line
of input is checked.
Input is divided into records and fields. The default record separator is <newline>, and
the variable NR keeps the record count. The default field separator is whitespace, spaces
and tabs, and the variable NF keeps the field count. Input field, FS, and record, RS,
separators can be set at any time to match any single character. Output field, OFS, and
record, ORS, separators can also be changed to any single character, as desired. $n,
where n is an integer, is used to represent the nth field of the input record, while $0
represents the entire input record.
BEGIN and END are special patterns matching the beginning of input, before the first
field is read, and the end of input, after the last field is read, respectively.
Printing is allowed through the print, and formatted print, printf, statements.
Patterns may be regular expressions, arithmetic relational expressions, string-valued
expressions, and boolean combinations of any of these. For the latter the patterns can be
combined with the boolean operators below, using parentheses to define the combination:
|| or
&& and
! not
Comma separated patterns define the range for which the pattern is applicable, e.g.:
/first/,/last/
selects all lines starting with the one containing first, and continuing inclusively, through
the one containing last.
To select lines 15 through 20 use the pattern range:
NR == 15, NR == 20
Regular expressions must be enclosed with slashes (/) and meta-characters can be
escaped with the backslash (). Regular expressions can be grouped with the operators:
| or, to separate alternatives
+ one or more
? zero or one
A regular expression match can be either of:
~ contains the expression
!~ does not contain the expression
So the program:
$1 ~ /[Ff]rank/
is true if the first field, $1, contains "Frank" or "frank" anywhere within the field. To
match a field identical to "Frank" or "frank" use:
$1 ~ /^[Ff]rank$/
Relational expressions are allowed using the relational operators:
< less than
<= less than or equal to
== equal to
>= greater than or equal to
!= not equal to
> greater than
Offhand you don't know if variables are strings or numbers. If neither operand is known
to be numeric, than string comparisons are performed. Otherwise, a numeric comparison
is done. In the absence of any information to the contrary, a string comparison is done, so
that:
$1 > $2
will compare the string values. To ensure a numerical comparison do something similar
to:
( $1 + 0 ) > $2
The mathematical functions: exp, log and sqrt are built-in.
Some other built-in functions include:
index(s,t) returns the position of string s where t first occurs, or 0 if it doesn't
length(s) returns the length of string s
substr(s,m,n) returns the n-character substring of s, beginning at position m
Arrays are declared automatically when they are used, e.g.:
arr[i] = $1
assigns the first field of the current input record to the ith element of the array.
Flow control statements using if-else, while, and for are allowed with C type syntax:
for (i=1; i <= NF; i++) {actions}
while (i<=NF) {actions}
if (i<NF) {actions}
Common Options
-f program_file read the commands from program_file
-Fc use character c as the field separator character
Examples
% cat filex | tr a-z A-Z | awk -F: '{printf ("7R %-6s %-9s %-24s n",
$1,$2,$3)}'>upload.file
cats filex, which is formatted as follows:
nfb791:99999999:smith
7ax791:999999999:jones
8ab792:99999999:chen
8aa791:999999999:mcnulty
changes all lower case characters to upper case with the tr utility, and formats the file
into the following which is written into the file upload.file:
7R NFB791 99999999 SMITH
7R 7AX791 999999999 JONES
7R 8AB792 99999999 CHEN
7R 8AA791 999999999 MCNULTY
Introduction to Unix - 14 AUG 1996
Introduction to Unix
CHAPTER 8 Other Useful Commands
8.1 - Working With Files
8.2 - File Archiving, Compression and Conversion
8.3 - Remote Connections
Introduction to Unix - 14 AUG 1996
[Next] [Previous] [Top] [Contents]
CHAPTER 8 Other Useful Commands
8.1 Working With Files
This section will describe a number of commands that you might find useful in
examining and manipulating the contents of your files.
File utilities
Command/Syntax What it will do
cmp [options] file1 file2
compare two files and list where differences occur (text or binary
files)
cut [options] [file(s)] cut specified field(s)/character(s) from lines in file(s)
diff [options] file1 file2 compare the two files and display the differences (text files only)
file [options] file classify the file type
find directory [options]
[actions]
find files matching a type or pattern
ln [options] source_file
target
link the source_file to the target
paste [options] file paste field(s) onto the lines in file
sort [options] file sort the lines of the file according to the options chosen
strings [options] file
report any sequence of 4 or more printable characters ending in
<NL> or <NULL>. Usually used to search binary files for ASCII
strings.
tee [options] file copy stdout to one or more files
touch [options] [date]
file
create an empty file, or update the access time of an existing file
tr [options] string1
string2
translate the characters in string1 from stdin into those in string2
in stdout
uniq [options] file remove repeated lines in a file
wc [options] [file(s)] display word (or character or line) count for file(s)
8.1.1 - cmp - compare file contents
8.1.2 - diff - differences in files
8.1.3 - cut - select parts of a line
8.1.4 - paste - merge files
8.1.5 - touch - create a file
8.1.6 - wc - count words in a file
8.1.7 - ln - link to another file
8.1.8 - sort - sort file contents
8.1.9 - tee - copy command output
8.1.10 - uniq - remove duplicate lines
8.1.11 - strings - find ASCII strings
8.1.12 - file - file type
8.1.13 - tr - translate characters
8.1.14 - find - find files
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.1 cmp - compare file contents
The cmp command compares two files, and (without options) reports the location of the
first difference between them. It can deal with both binary and ASCII file comparisons. It
does a byte-by-byte comparison.
Syntax
cmp [options] file1 file2 [skip1] [skip2]
The skip numbers are the number of bytes to skip in each file before starting the
comparison.
Common Options
-l report on each difference
-s report exit status only, not byte differences
Examples
Given the files mon.logins: and tues.logins:
ageorge ageorge
bsmith cbetts
cbetts jchen
jchen jdoe
jmarsch jmarsch
lkeres lkeres
mschmidt proy
sphillip sphillip
wyepp wyepp
The comparison of the two files yields:
% cmp mon.logins tues.logins
mon.logins tues.logins differ: char 9, line 2
The default it to report only the first difference found.
This command is useful in determining which version of a file should be kept when there
is more than one version.
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.2 diff - differences in files
The diff command compares two files, directories, etc, and reports all differences
between the two. It deals only with ASCII files. It's output format is designed to report
the changes necessary to convert the first file into the second.
Syntax
diff [options] file1 file2
Common Options
-b ignore trailing blanks
-i ignore the case of letters
-w ignore <space> and <tab> characters
-e produce an output formatted for use with the editor, ed
-r apply diff recursively through common sub-directories
Examples
For the mon.logins and tues.logins files above, the difference between them is given by:
% diff mon.logins tues.logins
2d1
< bsmith
4a4
> jdoe
7c7
< mschmidt
---
> proy
Note that the output lists the differences as well as in which file the difference exists.
Lines in the first file are preceded by "< ", and those in the second file are preceded by ">
".
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.3 cut - select parts of a line
The cut command allows a portion of a file to be extracted for another use.
Syntax
cut [options] file
Common Options
-c character_list character positions to select (first character is 1)
-d delimiter field delimiter (defaults to <TAB>)
-f field_list fields to select (first field is 1)
Both the character and field lists may contain comma-separated or blank-character-
separated numbers (in increasing order), and may contain a hyphen (-) to indicate a range.
Any numbers missing at either before (e.g. -5) or after (e.g. 5-) the hyphen indicates the
full range starting with the first, or ending with the last character or field, respectively.
Blank-character-separated lists must be enclosed in quotes. The field delimiter should be
enclosed in quotes if it has special meaning to the shell, e.g. when specifying a <space>
or <TAB> character.
Examples
In these examples we will use the file users:
jdoe John Doe 4/15/96
lsmith Laura Smith 3/12/96
pchen Paul Chen 1/5/96
jhsu Jake Hsu 4/17/96
sphilip Sue Phillip 4/2/96
If you only wanted the username and the user's real name, the cut command could be
used to get only that information:
% cut -f 1,2 users
jdoe John Doe
lsmith Laura Smith
pchen Paul Chen
jhsu Jake Hsu
sphilip Sue Phillip
The cut command can also be used with other options. The -c option allows characters to
be the selected cut. To select the first 4 characters:
% cut -c 1-4 users
This yields:
jdoe
lsmi
pche
jhsu
sphi
thus cutting out only the first 4 characters of each line.
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.4 paste - merge files
The paste command allows two files to be combined side-by-side. The default delimiter
between the columns in a paste is a tab, but options allow other delimiters to be used.
Syntax
paste [options] file1 file2
Common Options
-d list list of delimiting characters
-s concatenate lines
The list of delimiters may include a single character such as a comma; a quoted string,
such as a space; or any of the following escape sequences:
n <newline> character
t <tab> character
 backslash character
0 empty string (non-null character)
It may be necessary to quote delimiters with special meaning to the shell.
A hyphen (-) in place of a file name is used to indicate that field should come from
standard input.
Examples
Given the file users:
jdoe John Doe 4/15/96
lsmith Laura Smith 3/12/96
pchen Paul Chen 1/5/96
jhsu Jake Hsu 4/17/96
sphilip Sue Phillip 4/2/96
and the file phone:
John Doe 555-6634
Laura Smith 555-3382
Paul Chen 555-0987
Jake Hsu 555-1235
Sue Phillip 555-7623
the paste command can be used in conjunction with the cut command to create a new
file, listing, that includes the username, real name, last login, and phone number of all the
users. First, extract the phone numbers into a temporary file, temp.file:
% cut -f2 phone > temp.file
555-6634
555-3382
555-0987
555-1235
555-7623
The result can then be pasted to the end of each line in users and directed to the new file,
listing:
% paste users temp.file > listing
jdoe John Doe 4/15/96 237-6634
lsmith Laura Smith 3/12/96 878-3382
pchen Paul Chen 1/5/96 888-0987
jhsu Jake Hsu 4/17/96 545-1235
sphilip Sue Phillip 4/2/96 656-7623
This could also have been done on one line without the temporary file as:
% cut -f2 phone | paste users - > listing
with the same results. In this case the hyphen (-) is acting as a placeholder for an input
field (namely, the output of the cut command).
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.5 touch - create a file
The touch command can be used to create a new (empty) file or to update the last access
date/time on an existing file. The command is used primarily when a script requires the
pre-existence of a file (for example, to which to append information) or when the script is
checking for last date or time a function was performed.
Syntax
touch [options] [date_time] file
touch [options] [-t time] file
Common Options
-a change the access time of the file (SVR4 only)
-c don't create the file if it doesn't already exist
-f force the touch, regardless of read/write permissions
-m change the modification time of the file (SVR4 only)
-t time use the time specified, not the current time (SVR4 only)
When setting the "-t time" option it should be in the form:
[[CC]YY]MMDDhhmm[.SS]
where:
CC first two digits of the year
YY second two digits of the year
MM month, 01-12
DD day of month, 01-31
hh hour of day, 00-23
mm minute, 00-59
SS second, 00-61
The date_time options has the form:
MMDDhhmm[YY]
where these have the same meanings as above.
The date cannot be set to be before 1969 or after January 18, 2038.
Examples
To create a file:
% touch filename
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.6 wc - count words in a file
wc stands for "word count"; the command can be used to count the number of lines,
characters, or words in a file.
Syntax
wc [options] file
Common Options
-c count bytes
-m count characters (SVR4)
-l count lines
-w count words
If no options are specified it defaults to "-lwc".
Examples
Given the file users:
jdoe John Doe 4/15/96
lsmith Laura Smith 3/12/96
pchen Paul Chen 1/5/96
jhsu Jake Hsu 4/17/96
sphilip Sue Phillip 4/2/96
the result of using a wc command is as follows:
% wc users
5 20 121 users
The first number indicates the number of lines in the file, the second number indicates the
number of words in the file, and the third number indicates the number of characters.
Using the wc command with one of the options (-l, lines; -w, words; or -c, characters)
would result in only one of the above. For example, "wc -l users" yields the following
result:
5 users
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.7 ln - link to another file
The ln command creates a "link" or an additional way to access (or gives an additional
name to) another file.
Syntax
ln [options] source [target]
If not specified target defaults to a file of the same name in the present working
directory.
Common Options
-f force a link regardless of target permissions; don't report errors (SVR4 only)
-s make a symbolic link
Examples
A symbolic link is used to create a new path to another file or directory. If a group of
users, for example, is accustomed to using a command called chkmag, but the command
has been rewritten and is now called chkit, creating a symbolic link so the users will
automatically execute chkit when they enter the command chkmag will ease transition to
the new command.
A symbolic link would be done in the following way:
% ln -s chkit chkmag
The long listing for these two files is now as follows:
16 -rwxr-x--- 1 lindadb acs 15927 Apr 23 04:10 chkit
1 lrwxrwxrwx 1 lindadb acs 5 Apr 23 04:11 chkmag -> chkit
Note that while the permissions for chkmag are open to all, since it is linked to chkit, the
permissions, group and owner characteristics for chkit will be enforced when chkmag is
run.
With a symbolic link, the link can exist without the file or directory it is linked to existing
first.
A hard link can only be done to another file on the same file system, but not to a
directory (except by the superuser). A hard link creates a new directory entry pointing to
the same inode as the original file. The file linked to must exist before the hard link can
be created. The file will not be deleted until all the hard links to it are removed. To link
the two files above with a hard link to each other do:
% ln chkit chkmag
Then a long listing shows that the inode number (742) is the same for each:
% ls -il chkit chkmag
742 -rwxr-x--- 2 lindadb acs 15927 Apr 23 04:10 chkit
742 -rwxr-x--- 2 lindadb acs 15927 Apr 23 04:10 chkmag
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.8 sort - sort file contents
The sort command is used to order the lines of a file. Various options can be used to
choose the order as well as the field on which a file is sorted. Without any options, the
sort compares entire lines in the file and outputs them in ASCII order (numbers first,
upper case letters, then lower case letters).
Syntax
sort [options] [+pos1 [ -pos2 ]] file
Common Options
-b ignore leading blanks (<space> & <tab>) when determining starting and ending
characters for the sort key
-d dictionary order, only letters, digits, <space> and <tab> are significant
-f fold upper case to lower case
-k keydef sort on the defined keys (not available on all systems)
-i ignore non-printable characters
-n numeric sort
-o outfile output file
-r reverse the sort
-t char use char as the field separator character
-u unique; omit multiple copies of the same line (after the sort)
+pos1 [-pos2] (old style) provides functionality similar to the "-k keydef" option.
For the +/-position entries pos1 is the starting word number, beginning with 0 and pos2
is the ending word number. When -pos2 is omitted the sort field continues through the
end of the line. Both pos1 and pos2 can be written in the form w.c, where w is the word
number and c is the character within the word. For c 0 specifies the delimiter preceding
the first character, and 1 is the first character of the word. These entries can be followed
by type modifiers, e.g. n for numeric, b to skip blanks, etc.
The keydef field of the "-k" option has the syntax:
start_field [type] [ ,end_field [type] ]
where:
start_field, end_field define the keys to restrict the sort to a portion of the line
type modifies the sort, valid modifiers are given the single characters (bdfiMnr) from the
similar sort options, e.g. a type b is equivalent to "-b", but applies only to the specified
field
Examples
In the file users:
jdoe John Doe 4/15/96
lsmith Laura Smith 3/12/96
pchen Paul Chen 1/5/96
jhsu Jake Hsu 4/17/96
sphilip Sue Phillip 4/2/96
sort users yields the following:
jdoe John Doe 4/15/96
jhsu Jake Hsu 4/17/96
lsmith Laura Smith 3/12/96
pchen Paul Chen 1/5/96
sphilip Sue Phillip 4/2/96
If, however, a listing sorted by last name is desired, use the option to specify which field
to sort on (fields are numbered starting at 0):
% sort +2 users:
pchen Paul Chen 1/5/96
jdoe John Doe 4/15/96
jhsu Jake Hsu 4/17/96
sphilip Sue Phillip 4/2/96
lsmith Laura Smith 3/12/96
To sort in reverse order:
% sort -r users:
sphilip Sue Phillip 4/2/96
pchen Paul Chen 1/5/96
lsmith Laura Smith 3/12/96
jhsu Jake Hsu 4/17/96
jdoe John Doe 4/15/96
A particularly useful sort option is the -u option, which eliminates any duplicate entries
in a file while ordering the file. For example, the file todays.logins:
sphillip
jchen
jdoe
lkeres
jmarsch
ageorge
lkeres
proy
jchen
shows a listing of each username that logged into the system today. If we want to know
how many unique users logged into the system today, using sort with the -u option will
list each user only once. (The command can then be piped into "wc -l" to get a number):
% sort -u todays.logins
ageorge
jchen
jdoe
jmarsch
lkeres
proy
sphillip
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.9 tee - copy command output
tee sends standard in to specified files and also to standard out. It's often used in
command pipelines.
Syntax
tee [options] [file[s]]
Common Options
-a append the output to the files
-i ignore interrupts
Examples
In this first example the output of who is displayed on the screen and stored in the file
users.file:
brigadier: condron [55]> who | tee users.file
condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.)
frank ttyp1 Apr 22 16:19 (nyssa)
condron ttyp9 Apr 22 15:52 (lcondron-mac.acs)
brigadier: condron [56]> cat users.file
condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.)
frank ttyp1 Apr 22 16:19 (nyssa)
condron ttyp9 Apr 22 15:52 (lcondron-mac.acs)
In this next example the output of who is sent to the files users.a and users.b. It is also
piped to the wc command, which reports the line count.
brigadier: condron [57]> who | tee users.a users.b | wc -l
3
brigadier: condron [58]> cat users.a
condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.)
frank ttyp1 Apr 22 16:19 (nyssa)
condron ttyp9 Apr 22 15:52 (lcondron-mac.acs)
brigadier: condron [59]> cat users.b
condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.)
frank ttyp1 Apr 22 16:19 (nyssa)
condron ttyp9 Apr 22 15:52 (lcondron-mac.acs)
In the following example a long directory listing is sent to the file files.long. It is also
piped to the grep command which reports which files were last modified in August.
brigadier: condron [60]> ls -l | tee files.long |grep Aug
1 drwxr-sr-x 2 condron 512 Aug 8 1995 News/
2 -rw-r--r-- 1 condron 1076 Aug 8 1995 magnus.cshrc
2 -rw-r--r-- 1 condron 1252 Aug 8 1995 magnus.login
brigadier: condron [63]> cat files.long
total 34
2 -rw-r--r-- 1 condron 1253 Oct 10 1995 #.login#
1 drwx------ 2 condron 512 Oct 17 1995 Mail/
1 drwxr-sr-x 2 condron 512 Aug 8 1995 News/
5 -rw-r--r-- 1 condron 4299 Apr 21 00:18 editors.txt
2 -rw-r--r-- 1 condron 1076 Aug 8 1995 magnus.cshrc
2 -rw-r--r-- 1 condron 1252 Aug 8 1995 magnus.login
7 -rw-r--r-- 1 condron 6436 Apr 21 23:50 resources.txt
4 -rw-r--r-- 1 condron 3094 Apr 18 18:24 telnet.ftp
1 drwxr-sr-x 2 condron 512 Apr 21 23:56 uc/
1 -rw-r--r-- 1 condron 1002 Apr 22 00:14 uniq.tee.txt
1 -rw-r--r-- 1 condron 1001 Apr 20 15:05 uniq.tee.txt~
7 -rw-r--r-- 1 condron 6194 Apr 15 20:18 unixgrep.txt
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.10 uniq - remove duplicate lines
uniq filters duplicate adjacent lines from a file.
Syntax
uniq [options] [+|-n] file [file.new]
Common Options
-d one copy of only the repeated lines
-u select only the lines not repeated
+n ignore the first n characters
-s n same as above (SVR4 only)
-n skip the first n fields, including any blanks (<space> & <tab>)
-f fields same as above (SVR4 only)
Examples
Consider the following file and example, in which uniq removes the 4th line from file
and places the result in a file called file.new.
{unix prompt 1} cat file
1 2 3 6
4 5 3 6
7 8 9 0
7 8 9 0
{unix prompt 2} uniq file file.new
{unix prompt 3} cat file.new
1 2 3 6
4 5 3 6
7 8 9 0
Below, the -n option of the uniq command is used to skip the first 2 fields in file, and
filter out lines which are duplicates from the 3rd field onward.
{unix prompt 4} uniq -2 file
1 2 3 6
7 8 9 0
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.11 strings - find ASCII strings
To search a binary file for printable, ASCII, strings use the strings command. It searches
for any sequence of 4 or more ASCII characters terminated by a <newline> or null
character. I find this command useful for searching for file names and possible error
messages within compiled programs that I don't have source code for.
Syntax
strings [options] file
Common Options
-n number use number as the minimum string length, rather than 4 (SVR4 only)
-number same as above
-t format precede the string with the byte offset from the start of the file, where format is
one of: d = decimal, o = octal, x = hexadecimal (SVR4 only)
-o precede the string with the byte offset in decimal (BSD only)
Examples
% strings /bin/cut
SUNW_OST_OSCMD
no delimiter specified
invalid delimiter
b:c:d:f:ns
cut: -n may only be used with -b
cut: -d may only be used with -f
cut: -s may only be used with -f
no list specified
cut: cannot open %s
invalid range specifier
too many ranges specified
ranges must be increasing
invalid character in range
Internal error processing input
invalid multibyte character
unable to allocate enough memory
unable to allocate enough memory
cut:
usage: cut -b list [-n] [filename ...]
cut -c list [filename ...]
cut -f list [-d delim] [-s] [filename]
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.12 file - file type
This program, file, examines the selected file and tries to determine what type of file it is.
It does this by reading the first few bytes of the file and comparing them with the table in
/etc/magic. It can determine ASCII text files, tar formatted files, compressed files, etc.
Syntax
file [options] [-m magic_file] [-f file_list] file
Common Options
-c check the magic file for errors in format
-f file_list file_list contains a list of files to examine
-h don't follow symbolic links (SVR4 only)
-L follow symbolic links (BSD only)
-m magic_file use magic_file as the magic file instead of /etc/magic
Examples
Below we list the output from the command "file filename" for some representative files.
/etc/magic: ascii text
/usr/local/bin/gzip: Sun demand paged SPARC executable dynamically linked
/usr/bin/cut: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped
source.tar: USTAR tar archive
source.tar.Z: compressed data block compressed 16 bits
Introduction to Unix - 14 AUG 1996
8.1 Working With Files
8.1.13 tr - translate characters
The tr command translates characters from stdin to stdout.
Syntax
tr [options] string1 [string2]
With no options the characters in string1 are translated into the characters in string2,
character by character in the string arrays. The first character in string1 is translated into
the first character in string2, etc.
A range of characters in a string is specified with a hyphen between the upper and lower
characters of the range, e.g. to specify all lower case alphabetic characters use '[a-z]'.
Repeated characters in string2 can be represented with the '[x*n]' notation, where
character x is repeated n times. If n is 0 or absent it is assumed to be as large as needed to
match string1.
Characters can include octal (BSD and SVR4) and character (SVR4 only) notation.
Here "octal" is replaced by the one, two, or three octal integer sequence encoding the
ASCII character and "character" can be one of:
b back space
f form feed
n new line
r carriage return
t tab
v vertical tab
The SVR4 version of tr allows the operand ":class:" in the string field where class can
take on character classification values, including:
alpha alphabetic characters
lower lower case alphabetic characters
upper upper case alphabetic characters
Common Options
-c complement the character set in string1
-d delete the characters in string1
-s squeeze a string of repeated characters in string1 to a single character
Examples
The following examples will use as input the file, a list of P. G. Wodehouse Jeeves &
Wooster books.
The Inimitable Jeeves [1923] The Mating Season [1949]
Carry On, Jeeves [1925] Ring for Jeeves [1953]
8.1 Working With Files
8.1.14 find - find files
The find command will recursively search the indicated directory tree to find files
matching a type or pattern you specify. find can then list the files or execute arbitrary
commands based on the results.
Syntax
find directory [search options] [actions]
Common Options
For the time search options the notation in days, n is:
+n more than n days
n exactly n days
-n less than n days
Some file characteristics that find can search for are:
time that the file was last accessed or changed
-atime n access time, true if accessed n days ago
-ctime n change time, true if the files status was changed n days ago
-mtime n modified time, true if the files data was modified n days ago
-newer filename true if newer than filename
-type type type of file, where type can be:
b block special file
c character special file
d directory
l symbolic link
p named pipe (fifo)
f regular file
-fstype type type of file system, where type can be any valid file system type, e.g.: ufs
(Unix File System) and nfs (Network File System)
-user username true if the file belongs to the user username
-group groupname true if the file belongs to the group groupname
-perm [-]mode permissions on the file, where mode is the octal modes for the chmod
command. When mode is precede by the minus sign only the bits that are set are
compared.
-exec command execute command. The end of command is indicated by and escaped
semicolon (;). The command argument, {}, replaces the current path name.
-name filename true if the file is named filename. Wildcard pattern matches are allowed
if the meta-character is escaped from the shell with a backslash ().
CHAPTER 8 Other Useful Commands
8.2 File Archiving, Compression and
Conversion
File Archiving, Compression and Conversion Commands
Command/Syntax What it will do
compress/uncompress/zcat
[options] file[.Z]
compress or uncompress a file. Compressed files are
stored with a .Z ending.
dd [if=infile] [of=outfile]
[operand=value]
copy a file, converting between ASCII and EBCDIC or
swapping byte order, as specified
gzip/gunzip/zcat [options]
file[.gz]
compress or uncompress a file. Compressed files are
stored with a .gz ending
od [options] file
octal dump a binary file, in octal, ASCII, hex, decimal,
or character mode.
tar key[options] [file(s)]
tape archiver--refer to man pages for details on
creating, listing, and retrieving from archive files. Tar
files can be stored on tape or disk.
uudecode [file] decode a uuencoded file, recreating the original file
uuencode [file] new_name
encode binary file to 7-bit ASCII, useful when sending
via email, to be decoded as new_name at destination
8.2.1 - File Compression
8.2.2 - tar - archive files
8.2.3 - uuencode/uudecode - encode a file
8.2.4 - dd - block copy and convert
8.2.5 - od - octal dump of a file
Introduction to Unix - 14 AUG 1996
8.2 File Archiving, Compression and Conversion
8.2.1 File Compression
The compress command is used to reduce the amount of disk space utilized by a file.
When a file has been compressed using the compress command, a suffix of .Z is
appended to the file name. The ownership modes and access and modification times of
the original file are preserved. uncompress restores the files originally compressed by
compress.
Syntax
compress [options] [file]
uncompress [options] [file.Z]
zcat [file.Z]
Common Options
-c write to standard output and don't create or change any files
-f force compression of a file, even if it doesn't reduce the size of the file or if the target
file (file.Z) already exists.
-v verbose. Report on the percentage reduction for the file.
zcat writes to standard output. It is equivalent to "uncompress -c".
Examples
Given the files:
96 -rw-r--r-- 1 lindadb acs 45452 Apr 24 09:13 logins.beauty
184 -rw-r--r-- 1 lindadb acs 90957 Apr 24 09:13 logins.bottom
152 -rw-r--r-- 1 lindadb acs 75218 Apr 24 09:13 logins.photon
168 -rw-r--r-- 1 lindadb acs 85970 Apr 24 09:13 logins.top
These can be compressed with:
% compress logins.*
which creates the files:
24 -rw-r--r-- 1 lindadb acs 8486 Apr 24 09:13 logins.beauty.Z
40 -rw-r--r-- 1 lindadb acs 16407 Apr 24 09:13 logins.bottom.Z
24 -rw-r--r-- 1 lindadb acs 10909 Apr 24 09:13 logins.photon.Z
32 -rw-r--r-- 1 lindadb acs 16049 Apr 24 09:13 logins.top.Z
The original files are lost.
To display a compressed file, the zcat command is used:
% zcat logins.beauty.Z | head
beauty:01/22/94:#total logins,4338:#different UIDs,2290
beauty:01/23/94:#total logins,1864:#different UIDs,1074
beauty:01/24/94:#total logins,2317:#different UIDs,1242
beauty:01/25/94:#total logins,3673:#different UIDs,2215
beauty:01/26/94:#total logins,3532:#different UIDs,2216
beauty:01/27/94:#total logins,3096:#different UIDs,1984
beauty:01/28/94:#total logins,3724:#different UIDs,2212
beauty:01/29/94:#total logins,3460:#different UIDs,2161
beauty:01/30/94:#total logins,1408:#different UIDs,922
beauty:01/31/94:#total logins,2175:#different UIDs,1194
A display of the file using commands other than zcat yields an unreadable, binary,
output.
The uncompress command is used to return the file to its original format:
% uncompress logins.*.Z ; ls -als logins.*
96 -rw-r--r-- 1 lindadb acs 45452 Apr 24 09:13 logins.beauty
184 -rw-r--r-- 1 lindadb acs 90957 Apr 24 09:13 logins.bottom
152 -rw-r--r-- 1 lindadb acs 75218 Apr 24 09:13 logins.photon
168 -rw-r--r-- 1 lindadb acs 85970 Apr 24 09:13 logins.top
In addition to the standard Unix compress, uncompress, zcat utilities there are a set of
GNU ones freely available. These do an even better job of compression using a more
efficient algorithm. The GNU programs to provide similar functions to those above are
often installed as gzip, gunzip, and zcat, respectively. Files compressed with gzip are
given the endings .z or .gz. GNU software can be obtained via anonymous ftp from
ftp://ftp.gnu.org/pub/gnu.
Introduction to Unix - 14 AUG 1996
8.2 File Archiving, Compression and Conversion
8.2.2 tar - archive files
The tar command combines files into one device or filename for archiving purposes. The
tar command does not compress the files; it merely makes a large quantity of files more
manageable.
Syntax
tar [options] [directory file]
Common Options
c create an archive (begin writting at the start of the file)
t table of contents list
x extract from an archive
v verbose
f archive file name
b archive block size
tar will accept its options either with or without a preceding hyphen (-). The archive file
can be a disk file, a tape device, or standard input/output. The latter are represented by a
hyphen.
Examples
Given the files and size indications below:
45 logs.beauty
89 logs.bottom
74 logs.photon
84 logs.top
tar can combine these into one file, logfile.tar:
% tar -cf logfile.tar logs.* ; ls -s logfile.tar
304 logfile.tar
Many anonymous FTP archive sites on the Internet store their packages in compressed tar
format, so the files will end in .tar.Z or .tar.gz. To extract the files from these files you
would first uncompress them, or use the appropriate zcat command and pipe the output
into tar, e.g.:
% zcat archive.tar.Z | tar -xvf -
where the hyphen at the end of the tar command indicates that the file is taken from
stdin.
Introduction to Unix - 14 AUG 1996
8.2 File Archiving, Compression and Conversion
8.2.3 uuencode/uudecode - encode a file
To encode a binary file into 7-bit ASCII use the uuencode command. To decode the file
back to binary use the uudecode command. The uu in the names comes because they are
part of the Unix-to-Unix CoPy (UUCP) set of commands. The uuencode and uudecode
commands are commonly used when sending binary files through e-mail. In e-mail
there's no guarantee that 8-bit binary files will be transferred cleanly. So to ensure
delivery you should encode the binary file, either directly, on the command line and then
include the encoded file, or indirectly, by letting your MIME mailer program do it for
you. In a similar manner, the user decodes the file on the receiving end.
Syntax
uuencode [ source_file ] pathname_to_uudecode_to [ > new_file ]
uudecode [ -p ] encoded_file
Common Options
-p send output to standard output, rather than to the default file
Examples
The first line of encoded file includes the permission modes and name that uudecode
will use when decoding the file. The file begins and ends with the begin and end
keywords, respectively, e.g.:
begin 555 binary_filename
M?T5,1@$" 0 " ( ! %"W #0 5"< T "
M!0 H !4 % 8 T $ - "@ H 4 P
M -0 !$ ! ! ! %"
M%P !0A< % $ $ 4(8 -"& W& W% < 0
M @ !0B T(@ )@ !P O=7-R+VQI8B]L9"YS
M;RXQ ?< 'Y VP "O !VP )8 &6 !G0
M %[ U0 %G !3 ;< #Q %Q !
MEP :P !_ '@ !PP (P
M N0 =H _0 $D Y < #F /L
M01 $' $ & ! P #0A@ 4(8
8.2 File Archiving, Compression and Conversion
8.2.4 dd - block copy and convert
The dd command allows you to copy from raw devices, such as disks and tapes,
specifying the input and output block sizes. dd was originally known as the disk-to-disk
copy program. With dd you can also convert between different formats, for example,
EBCDIC to ASCII, or swap byte order, etc.
Syntax
dd [if=input_device] [of=output_device] [operand=value]
Common Options
if=input_device the input file or device
of=output_device the output file or device
If the input or output devices are not specified they default to standard input and standard
output, respectively.
Operands can include:
ibs=n input block size (defaults to 512 byte blocks)
obs=n output block size (defaults to 512 byte blocks)
bs=n sets both input and output block sizes
files=n copy n input files
skip=n skip n input blocks before starting to copy
count=n only copy n input blocks
conv=value[,value] where value can include:
ascii convert EBCDIC to ASCII
ebcdic convert from ASCII to EBCDIC
lcase convert upper case characters to lower case
ucase convert lower case characters to upper case
swab swap every pair of bytes of input data
noerror don't stop processing on an input error
sync pad every input block to the size of ibs, appending null bytes as needed
Block sizes are specified in bytes and may end in k, b, or w to indicate 1024 (kilo), 512
(block), or 2 (word), respectively.
Examples
To copy files from one tape drive to another:
% dd if=/dev/rmt/0 of=/dev/rmt/1
20+0 records in
20+0 records out
To copy files written on a tape drive on a big endian machine, written with a block size of
20 blocks, to a file on a little endian machine that now has the tape inserted in its drive,
we would need to swap pairs of bytes, as in:
8.2 File Archiving, Compression and Conversion
8.2.5 od - octal dump of a file
od dumps a file to stdout in different formats, including octal, decimal, floating point,
hex, and character format.
Syntax
od [options] file
Common Options
-b octal dump
-d|-D decimal (-d) or long decimal (-D) dump
-s|-S signed decimal (-s) and signed long decimal (-S) dump
-f|-F floating point (-f) or long (double) floating point (-F) dump
-x|-X hex (-x) or long hex (-X) dump
-c|-C character (single byte) or long character dump (single or multi-byte characters, as
determined by locale settings) dump
-v verbose mode
Examples
To look at the actual contents of the following file, a list of P. G. Wodehouse's Lord
Emsworth novels.
Something Fresh [1915] Uncle Dynamite [1948]
Leave it to Psmith [1923] Pigs Have Wings [1952]
Summer Lightning [1929] Cocktail Time [1958]
Heavy Weather [1933] Service with a Smile [1961]
Blandings Castle and Elsewhere [1935] Galahad at Blandings [1965]
Uncle Fred in the Springtime [1939] A Pelican at Blandings [1969]
Full Moon [1947] Sunset at Blandings [1977]
we could do:
% od -c wodehouse
0000000 S o m e t h i n g F r e s h
0000020 [ 1 9 1 5 ] t U n c l e D y n
0000040 a m i t e [ 1 9 4 8 ] n L e a
0000060 v e i t t o P s m i t h
0000100 [ 1 9 2 3 ] t P i g s H a v e
0000120 W i n g s [ 1 9 5 2 ] n S u
0000140 m m e r L i g h t n i n g [
0000160 1 9 2 9 ] t C o c k t a i l T
0000200 i m e [ 1 9 5 8 ] n H e a v y
0000220 W e a t h e r [ 1 9 3 3 ] t
0000240 S e r v i c e w i t h a S
0000260 m i l e [ 1 9 6 1 ] n B l a n
0000300 d i n g s C a s t l e a n d
0000320 E l s e w h e r e [ 1 9 3 5
0000340 ] t G a l a h a d a t B l a
0000360 n d i n g s [ 1 9 6 5 ] n U n
0000400 c l e F r e d i n t h e
0000420 S p r i n g t i m e [ 1 9 3 9
0000440 ] t A P e l i c a n a t B
0000460 l a n d i n g s [ 1 9 6 9 ] n
0000500 F u l l M o o n [ 1 9 4 7 ]
0000520 t S u n s e t a t B l a n d
0000540 i n g s [ 1 9 7 7 ] n
0000554
Introduction to Unix - 14 AUG 1996
CHAPTER 8 Other Useful Commands
8.3 Remote Connections
Remote Connection Commands
Command/Syntax What it will do
finger [options]
user[@hostname]
report information about users on local and remote
machines
ftp [options] host transfer file(s) using file transfer protocol
rcp [options] hostname
remotely copy files from this machine to another
machine
rlogin [options] hostname login remotely to another machine
rsh [options] hostname remote shell to run on another machine
telnet [host [port]] communicate with another host using telnet protocol
8.3.1 - TELNET and FTP - remote login and file transfer protocols
8.3.2 - finger - get information about users
8.3.3 - Remote commands
Introduction to Unix - 14 AUG 1996
8.3 Remote Connections
8.3.1 TELNET and FTP - remote login
and file transfer protocols
TELNET and FTP are Application Level Internet protocols. The TELNET and FTP
protocol specifications have been implemented by many different sources, including The
National Center for Supercomputer Applications (NCSA), and many other public domain
and shareware sources.
The programs implementing the TELNET protocol are usually called telnet, but not
always. Some notable exceptions are tn3270, WinQVT, and QWS3270, which are also
TELNET protocol implementations. TELNET is used for remote login to other
computers on the Internet.
The programs implementing the FTP protocol are usually called ftp, but there are
exceptions to that too. A program called Fetch, distributed by Dartmouth College,
WS_FTP, written and distributed by John Junod, and Ftptool, written by a Mike
Sullivan, are FTP protocol implementations with graphic user interfaces. There's an
enhanced FTP version, ncftp, that allows additional features, written by Mike Gleason.
Also, FTP protocol implementations are often included in TELNET implementation
programs, such as the ones distributed by NCSA. FTP is used for transferring files
between computers on the Internet.
rlogin is a remote login service that was at one time exclusive to Berkeley 4.3 BSD
UNIX. Essentially, it offers the same functionality as telnet, except that it passes to the
remote computer information about the user's login environment. Machines can be
configured to allow connections from trusted hosts without prompting for the users'
passwords. A more secure version of this protocol is the Secure SHell, SSH, software
written by Tatu Ylonen and available via ftp://ftp.net.ohio-state.edu/pub/security/ssh.
From a Unix prompt, these programs are invoked by typing the command (program
name) and the (Internet) name of the remote machine to which to connect. You can also
specify various options, as allowed, for these commands.
Syntax
telnet [options] [ remote_host [ port_number ] ]
tn3270 [options] [ remote_host [ port_number ] ]
ftp [options] [ remote_host ]
Common Options
ftp telnet Action
-d set debugging mode on
-d same as above (SVR4 only)
-i turn off interactive prompting
-n don't attempt auto-login on connection
-v verbose mode on
-l user connect with username, user, on the remote host (SVR4 only)
-8 8-bit data path (SVR4 only)
telnet and tn3270 allow you the option of specifying a port number to connect to on the
remote host. For both commands it defaults to port number 23, the telnet port. Other ports
are used for debugging of network services and for specialized resources.
Examples
telnet oscar.us.ohio-state.edu
tn3270 ohstmvsa.acs.ohio-state.edu
ftp magnus.acs.ohio-state.edu
The remote machine will query you for your login identification and your password.
Machines set up as archives for software or information distribution often allow
anonymous ftp connections. You ftp to the remote machine and login as anonymous (the
login ftp is equivalent on many machines), that is, when asked for your "login" you
would type anonymous.
Once you have successfully connected to a remote computer with telnet and rlogin (and
assuming terminal emulation is appropriate) you will be able to use the machine as you
always do.
Once you have successfully connected to a remote computer with ftp, you will be able to
transfer a file "up" to that computer with the put command, or "down" from that
computer with the get command. The syntax is as follows:
put local-file-name remote-file-name
get local-file-name remote-file-name
Other commands are available in ftp as well, depending on the specific "local" and
"remote" FTP implementations. The help command will display a list of available
commands. The help command will also display the purpose of a specific command.
Examples of valid commands are shown below:
help display list of available commands
help mget display the purpose of the mget command ("get multiple files")
pwd present working directory
ls or dir directory list
cd change directory
lcd local change directory
open specify the machine you wish to connect with
user specify your login id (in cases where you are not prompted)
quit quit out of the FTP program
Introduction to Unix - 14 AUG 1996
8.3 Remote Connections
8.3.2 finger - get information about users
finger displays the .plan file of a specific user, or reports who is logged into a specific
machine. The user must allow general read permission on the .plan file.
Syntax
finger [options] [user[@hostname]]
Common Options
-l force long output format
-m match username only, not first or last names
-s force short output format
Examples
brigadier: condron [77]> finger workshop@nyssa
This is a sample .plan file for the nyssa id, workshop.
This id is being used this week by Frank Fiamingo, Linda
DeBula, and Linda Condron, while we teach a pilot version
of the new Unix workshop we developed for UTS.
Hope yer learnin' somethin'.
Frank, Linda, & Linda
brigadier: condron [77]> finger
Login Name TTY Idle When Where
condron Linda S Condron p0 Sun 18:13 lcondron-mac.acs
frank Frank G. Fiamingo p1 Mon 16:19 nyssa
Introduction to Unix - 14 AUG 1996
8.3 Remote Connections
8.3.3 Remote commands
A number of Unix machines can be connected together to form a local area network.
When this is the case, it often happens that a user of one machine has valid login access
to several of the other machines in the local network. There are Unix commands available
to such users which provide convenience in carrying out certain common operations.
Because these commands focus on communications with remote hosts in the local
network, the command names begin with the letter "r": rlogin, rsh, and rcp. The remote
access capability of these commands is supported (optionally) by the dotfile, ~/.rhosts,
for individual users and by the system-wide file /etc/hosts.equiv. For security reasons
these may be restricted on some hosts.
The rlogin command allows remote login access to another host in the local network.
rlogin passes information about the local environment, including the value of the TERM
environment variable, to the remote host.
The rsh command provides the ability to invoke a Unix shell on a remote host in the
local network for the purpose of executing a shell command there. This capability is
similar to the "shell escape" function commonly available from within such Unix
software systems as editors and email.
The rcp command provides the ability to copy files from the local host to a remote host
in the local network.
Syntax
rlogin [ -l username ] remote_host
rsh [ -l username ] remote_host [ command ]
rcp [ [user1]@host1:]original_filename [ [user2]@host2:]new_filename
where the parts in brackets ([]) are optional. rcp does not prompt for passwords, so you
must have permission to execute remote commands on the specified machines as the
selected user on each machine.
Common Options
-l username connect as the user, username, on the remote host (rlogin & rsh)
The .rhosts file, if it exists in the user's home directory on the remote host, permits
rlogin, rsh, or rcp access to that remote host without prompting for a password for that
account. The .rhosts file contains an entry for each remote host and username from
which the owner of the .rhosts file may wish to connect. Each entry in the .rhosts file is
of the form:
Introduction to Unix
CHAPTER 9 Shell Programming
9.1 - Shell Scripts
9.2 - Setting Parameter Values
9.3 - Quoting
9.4 - Variables
9.5 - Parameter Substitution
9.6 - Here Document
9.7 - Interactive Input
9.8 - Functions
9.9 - Control Commands
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.1 Shell Scripts
You can write shell programs by creating scripts containing a series of shell commands.
The first line of the script should start with #! which indicates to the kernel that the script
is directly executable. You immediately follow this with the name of the shell, or
program (spaces are allowed), to execute, using the full path name. Generally you can
count on having up to 32 characters, possibly more on some systems, and can include one
option. So to set up a Bourne shell script the first line would be:
#! /bin/sh
or for the C shell:
#! /bin/csh -f
where the "-f" option indicates that it should not read your .cshrc. Any blanks following
the magic symbols, #!, are optional.
You also need to specify that the script is executable by setting the proper bits on the file
with chmod, e.g.:
% chmod +x shell_script
Within the scripts # indicates a comment from that point until the end of the line, with #!
being a special case if found as the first characters of the file.
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.2 Setting Parameter Values
Parameter values, e.g. param, are assigned as:
Bourne shell C shell
param=value set param = value
where value is any valid string, and can be enclosed within quotations, either single
('value) or double ("value"), to allow spaces within the string value. When enclosed
with backquotes ('value') the string is first evaluated by the shell and the result is
substituted. This is often used to run a command, substituting the command output for
value, e.g.:
$ day='date +%a'
$ echo $day
Wed
After the parameter values has been assigned the current value of the parameter is
accessed using the $param, or ${param}, notation.
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.3 Quoting
We quote strings to control the way the shell interprets any parameters or variables within
the string. We can use single (') and double (") quotes around strings. Double quotes
define the string, but allow variable substitution. Single quotes define the string and
prevent variable substitution. A backslash () before a character is said to escape it,
meaning that the system should take the character literally, without assigning any special
meaning to it. These quoting techniques can be used to separate a variable from a fixed
string. As an example lets use the variable, var, that has been assigned the value bat, and
the constant string, man. If I wanted to combine these to get the result "batman" I might
try:
$varman
but this doesn't work, because the shell will be trying to evaluate a variable called
varman, which doesn't exist. To get the desired result we need to separate it by quoting,
or by isolating the variable with curly braces ({}), as in:
"$var"man - quote the variable
$var""man - separate the parameters
$var"man" - quote the constant
$var''man - separate the parameters
$var'man' - quote the constant
$varman - separate the parameters
${var}man - isolate the variable
These all work because ", ', , {, and } are not valid characters in a variable name.
We could not use either of
'$var'man
$varman
because it would prevent the variable substitution from taking place.
When using the curly braces they should surround the variable only, and not include the
$, otherwise, they will be included as part of the resulting string, e.g.:
% echo {$var}man
{bat}man
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.4 Variables
There are a number of variables automatically set by the shell when it starts. These allow
you to reference arguments on the command line.
These shell variables are:
Shell Variables
Variable Usage sh csh
$# number of arguments on the command line x
$- options supplied to the shell x
$? exit value of the last command executed x
$$ process number of the current process x x
$! process number of the last command done in background x
$n
argument on the command line, where n is from 1 through 9, reading
left to right
x x
$0 the name of the current shell or program x x
$* all arguments on the command line ("$1 $2 ... $9") x x
$@
all arguments on the command line, each separately quoted ("$1" "$2"
... "$9")
x
$argv[n] selects the nth word from the input list x
${argv[n]} same as above x
$#argv report the number of words in the input list x
We can illustrate these with some simple scripts. First for the Bourne shell the script will
be:
#!/bin/sh
echo "$#:" $#
echo '$#:' $#
echo '$-:' $-
echo '$?:' $?
echo '$$:' $$
echo '$!:' $!
echo '$3:' $3
echo '$0:' $0
echo '$*:' $*
echo '$@:' $@
When executed with some arguments it displays the values for the shell variables, e.g.:
$ ./variables.sh one two three four five
5: 5
$#: 5
$-:
$?: 0
$$: 12417
$!:
$3: three
$0: ./variables.sh
$*: one two three four five
$@: one two three four five
As you can see, we needed to use single quotes to prevent the shell from assigning
special meaning to $. The double quotes, as in the first echo statement, allowed
substitution to take place.
CHAPTER 9 Shell Programming
9.5 Parameter Substitution
You can reference parameters abstractly and substitute values for them based on
conditional settings using the operators defined below. Again we will use the curly braces
({}) to isolate the variable and its operators.
$parameter substitute the value of parameter for this string
${parameter} same as above. The brackets are helpful if there's no separation between
this parameter and a neighboring string.
$parameter= sets parameter to null.
${parameter-default} if parameter is not set, then use default as the value here. The
parameter is not reset.
${parameter=default} if parameter is not set, then set it to default and use the new
value
${parameter+newval) if parameter is set, then use newval, otherwise use nothing here.
The parameter is not reset.
${parameter?message} if parameter is not set, then display message. If parameter is
set, then use its current value.
There are no spaces in the above operators. If a colon (:) is inserted before the -, =, +, or
? then a test if first performed to see if the parameter has a non-null setting.
The C shell has a few additional ways of substituting parameters:
$list[n] selects the nth word from list
${list[n]} same as above
$#list report the number of words in list
$?parameter return 1 if parameter is set, 0 otherwise
${?parameter} same as above
$< read a line from stdin
The C shell also defines the array, $argv[n] to contain the n arguments on the command
line and $#argv to be the number of arguments, as noted in Table 9.1.
To illustrate some of these features we'll use the test script below.
#!/bin/sh
param0=$0
test -n "$1" && param1=$1
test -n "$2" && param2=$2
test -n "$3" && param3=$3
echo 0: $param0
echo "1: ${param1-1}: c" ;echo $param1
echo "2: ${param2=2}: c" ;echo $param2
echo "3: ${param3+3}: c" ;echo $param3
In the script we first test to see if the variable exists, if so we set a parameter to its value.
Below this we report the values, allowing substitution.
In the first run through the script we won't provide any arguments:
$ ./parameter.sh
0: ./parameter.sh # always finds $0
1: 1: # substitute 1, but don't assign this value
2: 2: 2 # substitute 2 and assign this value
3: : # don't substitute
In the second run through the script we'll provide the arguments:
$ ./parameter one two three
0: ./parameter.sh # always finds $0
1: one: one # don't substitute, it already has a value
2: two: two # don't substitute, it already has a value
3: 3: three # substitute 3, but don't assign this value
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.6 Here Document
A here document is a form of quoting that allows shell variables to be substituted. It's a
special form of redirection that starts with <<WORD and ends with WORD as the only
contents of a line. In the Bourne shell you can prevent shell substitution by escaping
WORD by putting a  in front of it on the redirection line, i.e. <<WORD, but not on the
ending line. To have the same effect the C shell expects the  in front of WORD at both
locations.
The following scripts illustrate this,
for the Bourne shell: and for the C shell:
#!/bin/sh #!/bin/csh -f
does=does set does = does
not="" set not = ""
cat << EOF cat << EOF
This here document This here document
$does $not $does $not
do variable substitution do variable substitution
EOF EOF
cat << EOF cat << EOF
This here document This here document
$does $not $does $not
do variable substitution do variable substitution
EOF EOF
Both produce the output:
This here document
does
do variable substitution
This here document
$does $not
do variable substitution
In the top part of the example the shell variables $does and $not are substituted. In the
bottom part they are treated as simple text strings without substitution.
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.7 Interactive Input
Shell scripts will accept interactive input to set parameters within the script.
9.7.1 - Sh
9.7.2 - Csh
Introduction to Unix - 14 AUG 1996
9.7 Interactive Input
9.7.1 Sh
Sh uses the built-in command, read, to read in a line, e.g.:
read param
We can illustrate this with the simple script:
#!/bin/sh
echo "Input a phrase c" # This is /bin/echo which requires "c" to prevent <newline>
read param
echo param=$param
When we run this script it prompts for input and then echoes the results:
$ ./read.sh
Input a phrase hello frank # I type in hello frank <return>
param=hello frank
Introduction to Unix - 14 AUG 1996
9.7 Interactive Input
9.7.1 Sh
Sh uses the built-in command, read, to read in a line, e.g.:
read param
We can illustrate this with the simple script:
#!/bin/sh
echo "Input a phrase c" # This is /bin/echo which requires "c" to prevent <newline>
read param
echo param=$param
When we run this script it prompts for input and then echoes the results:
$ ./read.sh
Input a phrase hello frank # I type in hello frank <return>
param=hello frank
Introduction to Unix - 14 AUG 1996
CHAPTER 9 Shell Programming
9.8 Functions
The Bourne shell has functions. These are somewhat similar to aliases in the C shell, but
allow you more flexibility. A function has the form:
fcn () { command; }
where the space after {, and the semicolon (;) are both required; the latter can be
dispensed with if a <newline> precedes the }. Additional spaces and <newline>'s are
allowed. We saw a few examples of this in the sample .profile in an earlier chapter,
where we had functions for ls and ll:
ls() { /bin/ls -sbF "$@";}
ll() { ls -al "$@";}
The first one redefines ls so that the options -sbF are always supplied to the standard
/bin/ls command, and acts on the supplied input, "$@". The second one takes the current
value for ls (the previous function) and tacks on the -al options.
Functions are very useful in shell scripts. The following is a simplified version of one I
use to automatically backup up system partitions to tape.
#!/bin/sh
# Cron script to do a complete backup of the system
HOST=`/bin/uname -n`
admin=frank
Mt=/bin/mt
Dump=/usr/sbin/ufsdump
Mail=/bin/mailx
device=/dev/rmt/0n
Rewind="$Mt -f $device rewind"
Offline="$Mt -f $device rewoffl"
# Failure - exit
failure () {
$Mail -s "Backup Failure - $HOST" $admin << EOF_failure
$HOST
Cron backup script failed. Apparently there was no tape in the device.
EOF_failure
exit 1
}
# Dump failure - exit
dumpfail () {
$Mail -s "Backup Failure - $HOST" $admin << EOF_dumpfail
$HOST
Cron backup script failed. Initial tape access was okay, but dump failed.
EOF_dumpfail
exit 1
}
# Success
success () {
$Mail -s "Backup completed successfully - $HOST" $admin << EOF_success
$HOST
Cron backup script was apparently successful. The /etc/dumpdates file is:
CHAPTER 9 Shell Programming
9.9 Control Commands
9.9.1 - Conditional if
9.9.2 - Conditional switch and case
9.9.3 - for and foreach
9.9.4 - while
9.9.5 - until
9.9.6 - test
9.9.7 - C Shell Logical and Relational Operators
Introduction to Unix - 14 AUG 1996
9.9 Control Commands
9.9.1 Conditional if
The conditional if statement is available in both shells, but has a different syntax in each.
9.9.1.1 - Sh
9.9.1.2 - Csh
Introduction to Unix - 14 AUG 1996
[Next] [Previous] [Up] [Top] [Contents] [Next] [Previous] [Up] [Top] [Contents]
9.9.1 Conditional if
9.9.1.1 Sh
if condition1
then
command list if condition1 is true
[elif condition2
then command list if condition2 is true]
[else
command list if condition1 is false]
fi
The conditions to be tested for are usually done with the test, or [] command (see Section
8.9.6). The if and then must be separated, either with a <newline> or a semicolon (;).
#!/bin/sh
if [ $# -ge 2 ]
then
echo $2
elif [ $# -eq 1 ]; then
echo $1
else
echo No input
fi
There are required spaces in the format of the conditional test, one after [ and one before
]. This script should respond differently depending upon whether there are zero, one or
more arguments on the command line. First with no arguments:
$ ./if.sh
No input
Now with one argument:
$ ./if.sh one
one
And now with two arguments:
$ ./if.sh one two
two
Introduction to Unix - 14 AUG 1996
9.9.1 Conditional if
9.9.1.2 Csh
if (condition) command
-or-
if (condition1) then
command list if condition1 is true
[else if (condition2) then
command list if condition2 is true]
[else
command list if condition1 is false]
endif
The if and then must be on the same line.
#!/bin/csh -f
if ( $#argv >= 2 ) then
echo $2
else if ( $#argv == 1 ) then
echo $1
else
echo No input
endif
Again, this script should respond differently depending upon whether I have zero, one or
more arguments on the command line. First with no arguments:
% ./if.csh
No input
Now with one argument:
% ./if.csh one
one
And now with two arguments:
% ./if.csh one two
two
9.9 Control Commands
9.9.2 Conditional switch and case
To choose between a set of string values for a parameter use case in the Bourne shell and
switch in the C shell.
9.9.2.1 - Sh
9.9.2.2 - Csh
[Next] [Previous] [Up] [Top] [Contents]
9.9.2 Conditional switch and case
9.9.2.1 Sh
case parameter in
pattern1[|pattern1a]) command list1;;
pattern2) command list2
command list2a;;
pattern3) command list3;;
*) ;;
esac
You can use any valid filename meta-characters within the patterns to be matched. The ;;
ends each choice and can be on the same line, or following a <newline>, as the last
command for the choice. Additional alternative patterns to be selected for a
particular case are separated by the vertical bar, |, as in the first pattern line in the
example above. The wildcard symbols,: ? to indicate any one character and * to
match any number of characters, can be used either alone or adjacent to fixed
strings.
This simple example illustrates how to use the conditional case statement.
#!/bin/sh
case $1 in
aa|ab) echo A
;;
b?) echo "B c"
echo $1;;
c*) echo C;;
*) echo D;;
esac
So when running the script with the arguments on the left, it will respond as on the right:
aa A
ab A
ac D
bb B bb
bbb D
c C
cc C
fff D
Introduction to Unix - 14 AUG 1996
9.9.2 Conditional switch and case
9.9.2.2 Csh
switch (parameter)
case pattern1:
command list1
[breaksw]
case pattern2:
command list2
[breaksw]
default:
command list for default behavior
[breaksw]
endsw
breaksw is optional and can be used to break out of the switch after a match to the string
value of the parameter is made. Switch doesn't accept "|" in the pattern list, but it will
allow you to string several case statements together to provide a similar result. The
following C shell script has the same behavior as the Bourne shell case example above.
#!/bin/csh -f
switch ($1)
case aa:
case ab:
echo A
breaksw
case b?:
echo -n "B "
echo $1
breaksw
case c*:
echo C
breaksw
default:
echo D
endsw
Introduction to Unix - 14 AUG 1996
9.9 Control Commands
9.9.3 for and foreach
One way to loop through a list of string values is with the for and foreach commands.
9.9.3.1 - Sh
9.9.3.2 - Csh
Introduction to Unix - 14 AUG 1996
9.9.3 for and foreach
9.9.3.1 Sh
for variable [in list_of_values]
do
command list
done
The list_of_values is optional, with $@ assumed if nothing is specified. Each value in
this list is sequentially substituted for variable until the list is emptied. Wildcards can be
used and are applied to file names in the current directory. Below we illustrate the for
loop in copying all files ending in .old to similar names ending in .new. In these
examples the basename utility extracts the base part of the name so that we can exchange
the endings.
#!/bin/sh
for file in *.old
do
newf=`basename $file .old`
cp $file $newf.new
done
Introduction to Unix - 14 AUG 1996
9.9.3 for and foreach
9.9.3.2 Csh
foreach variable (list_of_values)
command list
end
The equivalent C shell script to copy all files ending in .old to .new is:
#!/bin/csh -f
foreach file (*.old)
set newf = `basename $file .old`
cp $file $newf.new
end
Introduction to Unix - 14 AUG 1996
9.9 Control Commands
9.9.4 while
The while commands let you loop as long as the condition is true.
9.9.4.1 - Sh
9.9.4.2 - Csh
Introduction to Unix - 14 AUG 1996
9.9.4 while
9.9.4.1 Sh
while condition
do
command list
[break]
[continue]
done
A simple script to illustrate a while loop is:
#!/bin/sh
while [ $# -gt 0 ]
do
echo $1
shift
done
This script takes the list of arguments, echoes the first one, then shifts the list to the left,
losing the original first entry. It loops through until it has shifted all the arguments off the
argument list.
$ ./while.sh one two three
one
two
three
Introduction to Unix - 14 AUG 1996
9.9.4 while
9.9.4.2 Csh
while (condition)
command list
[break]
[continue]
end
If you want the condition to always be true specify 1 within the conditional test.
A C shell script equivalent to the one above is:
#!/bin/csh -f
while ($#argv != 0 )
echo $argv[1]
shift
end
Introduction to Unix - 14 AUG 1996
9.9 Control Commands
9.9.5 until
This looping feature is only allowed in the Bourne shell.
until condition
do
command list while condition is false
done
The condition is tested at the start of each loop and the loop is terminated when the
condition is true. A script equivalent to the while examples above is:
#!/bin/sh
until [ $# -le 0 ]
do
echo $1
shift
done
Notice, though, that here we're testing for less than or equal, rather than greater than or
equal, because the until loop is looking for a false condition.
Both the until and while loops are only executed if the condition is satisfied. The
condition is evaluated before the commands are executed.
Introduction to Unix - 14 AUG 1996
9.9 Control Commands
9.9.6 test
Conditional statements are evaluated for true or false values. This is done with the test,
or its equivalent, the [] operators. It the condition evaluates to true, a zero (TRUE) exit
status is set, otherwise a non-zero (FALSE) exit status is set. If there are no arguments a
non-zero exit status is set. The operators used by the Bourne shell conditional statements
are given below.
For filenames the options to test are given with the syntax:
-option filename
The options available for the test operator for files include:
-r true if it exists and is readable
-w true if it exists and is writable
-x true if it exists and is executable
-f true if it exists and is a regular file (or for csh, exists and is not a directory)
-d true if it exists and is a directory
-h or -L true if it exists and is a symbolic link
-c true if it exists and is a character special file (i.e. the special device is accessed one
character at a time)
-b true if it exists and is a block special file (i.e. the device is accessed in blocks of data)
-p true if it exists and is a named pipe (fifo)
-u true if it exists and is setuid (i.e. has the set-user-id bit set, s or S in the third bit)
-g true if it exists and is setgid (i.e. has the set-group-id bit set, s or S in the sixth bit)
-k true if it exists and the sticky bit is set (a t in bit 9)
-s true if it exists and is greater than zero in size
There is a test for file descriptors:
-t [file_descriptor] true if the open file descriptor (default is 1, stdin) is associated with a
terminal
There are tests for strings:
-z string true if the string length is zero
-n string true if the string length is non-zero
string1 = string2 true if string1 is identical to string2
string1 != string2 true if string1 is non identical to string2
string true if string is not NULL
There are integer comparisons:
n1 -eq n2 true if integers n1 and n2 are equal
n1 -ne n2 true if integers n1 and n2 are not equal
n1 -gt n2 true if integer n1 is greater than integer n2
n1 -ge n2 true if integer n1 is greater than or equal to integer n2
n1 -lt n2 true if integer n1 is less than integer n2
n1 -le n2 true if integer n1 is less than or equal to integer n2
The following logical operators are also available:
! negation (unary)
-a and (binary)
-o or (binary)
() expressions within the () are grouped together. You may need to quote the () to prevent
the shell from interpreting them.
Introduction to Unix - 14 AUG 1996
9.9 Control Commands
9.9.7 C Shell Logical and Relational
Operators
The C shell has its own set of built-in logical and relational expression operators. In
descending order of precedence they are:
(...) group expressions with ()
~ inversion (one's complement)
! logical negation
*, /, % multiply, divide, modulus
+, - add, subtract
<<, >> bitwise shift left, bitwise shift right
<= less than or equal
>= greater than or equal
< less than
> greater than
== equal
!= not equal
=~ match a string
!~ don't match the string
& bitwise AND
^ bitwise XOR (exclusive or)
| bitwise OR
&& logical AND
|| logical OR
{command} true (1) if command terminates with a zero exit status, false (0) otherwise.
The C shell also allows file type and permission inquiries with the operators:
-r return true (1) if it exists and is readable, otherwise return false (0)
-w true if it exists and is writable
-x true if it exists and is executable
-f true if it exists and is a regular file (or for csh, exists and is not a directory)
-d true if it exists and is a directory
-e true if the file exists
-o true if the user owns the file
-z true if the file has zero length (empty)
Introduction to Unix - 14 AUG 1996
Introduction to Unix
CHAPTER 10 Editors
There are numerous text processing utilities available with Unix, as is noted throughout
this document (e.g., ed, ex, sed, awk, the grep family, and the roff family). Among the
editors, the standard "visual" (or fullscreen) editor on Unix is vi. It comprises a super-set,
so to speak, of ed and ex (the Unix line editors) capabilities.
Vi is a modal editor. This means that it has specific modes that allow text insertion, text
deletion, and command entering. You leave the insert mode by typing the <escape> key.
This brings you back to command mode. The line editor, ex, is incorporated within vi.
You can switch back and forth between full-screen and line mode as desired. In vi mode
type Q to go to ex mode. In ex mode at the : prompt type vi to return to vi mode. There is
also a read-only mode of vi, which you can invoke as view.
Another editor that is common on Unix systems, especially in college and university
environments, is emacs (which stands for "editing macros"). While vi usually comes with
the Unix operating system, emacs usually does not. It is distributed by The Free Software
Foundation. It is arguably the most powerful editor available for Unix. It is also a very
large software system, and is a heavy user of computer system resources.
The Free Software Foundation and the GNU Project (of which emacs is a part) were
founded by Richard Stallman and his associates, who believe (as stated in the GNU
Manifesto) that sharing software is the "fundamental act of friendship among
programmers." Their General Public License guarantees your rights to use, modify, and
distribute emacs (including its source code), and was specifically designed to prevent
anyone from hoarding or turning a financial profit from emacs or any software obtained
through the Free Software Foundation. Most of their software, including emacs, is
available at: ftp://ftp.gnu.org/pub/gnu/ and http://www.gnu.org/.
Both vi and emacs allow you to create start-up files that you can populate with macros to
control settings and functions in the editors.
10.1 - Configuring Your vi Session
10.2 - Configuring Your emacs Session
10.3 - vi Quick Reference Guide
10.4 - emacs Quick Reference Guide
Introduction to Unix - 14 AUG 1996
CHAPTER 10 Editors
10.1 Configuring Your vi Session
To configure the vi environment certain options can be set with the line editor command
:set during a vi editing session. Alternatively, frequently used options can be set
automatically when vi is invoked, by use of the .exrc file. This file can also contain
macros to map keystrokes into functions using the map function. Within vi these macros
can be defined with the :map command. Control characters can be inserted by first
typing <control>-V (^V), then the desired control character. The options available in vi
include, but are not limited to, the following. Some options are not available on every
Unix system.
:set all display all option settings
:set ignorecase ignore the case of a character in a search
:set list display tabs and carriage returns
:set nolist turn off list option
:set number display line numbers
:set nonumber turn off line numbers
:set showmode display indication that insert mode is on
:set noshowmode turn off showmode option
:set wrapmargin=n turn on word-wrap n spaces from the right margin
:set wrapmargin=0 turn off wrapmargin option
:set warn display "No write since last change"
:set nowarn turn off "write" warning
The following is a sample .exrc file:
set wrapmargin=10
set number
set list
set warn
set ignorecase
map K {!}fmt -80 # reformat this paragraph, {!}, using fmt to 80 characters per line
map ^Z :!spell # invoke spell, :!, to check a word spelling (return to vi with ^D)
Introduction to Unix - 14 AUG 1996
CHAPTER 10 Editors
10.2 Configuring Your emacs Session
Configuring the emacs environment amounts to making calls to LISP functions. Emacs
is infinitely customizable by means of emacs variables and built-in functions and by
using Emacs LISP programming. Settings can be specified from the minibuffer (or
command line) during an emacs session. Alternatively, frequently used settings can be
established automatically when emacs is invoked, by use of a .emacs file. Though a
discussion of Emacs LISP is beyond the scope of this document, a few examples of
common emacs configurations follow.
To set or toggle emacs variables, or to use emacs built-in functions, use the <escape>
key ("Meta" is how emacs refers to it), followed by the letter x, then by the variable or
function and its arguments.
M-x what-line what line is the cursor on?
M-x auto-fill-mode turn on word-wrap
M-x auto-fill-mode turn off word-wrap
M-x set-variable<return>
fill-column<return> set line-length to
45 45 characters
M-x set-variable<return>
auto-save-interval<return> save the file automatically after every
300 300 keystrokes
M-x goto-line<return>16 move the cursor to line 16
M-x help-for-help invoke emacs help when C-h has been bound to the backspace key
The following is a sample .emacs file:
(message "Loading ~/.emacs...")
; Comments begin with semi-colons and continue to the end of the line.
(setq text-mode-hook 'turn-on-auto-fill) ;turn on word-wrap
(setq fill-column 45) ;line-length=45 chars
(setq auto-save-interval 300) ;save after every 300 keystrokes
; Bind (or map) the rubout (control-h) function to the backspace key
(global-set-key "C-h" 'backward-delete-char-untabify)
; Bind the emacs help function to the keystroke sequence "C-x ?".
(global-set-key "C-x?" 'help-for-help)
CHAPTER 10 Editors
10.3 vi Quick Reference Guide
All commands in vi are preceded by pressing the escape key. Each time a different
command is to be entered, the escape key needs to be used. Except where indicated, vi is
case sensitive.
Cursor Movement Commands:
(n) indicates a number, and is optional
(n)h left (n) space(s)
(n)j down (n) space(s)
(n)k up (n) space(s)
(n)l right (n) space(s)
(The arrow keys usually work also)
^F forward one screen
^B back one screen
^D down half screen
^U up half screen
(^ indicates control key; case does not matter)
H beginning of top line of screen
M beginning of middle line of screen
L beginning of last line of screen
G beginning of last line of file
(n)G move to beginning of line (n)
0 (zero) beginning of line
$ end of line
(n)w forward (n) word(s)
(n)b back (n) word(s)
e end of word
Inserting Text:
i insert text before the cursor
a append text after the cursor (does not overwrite other text)
I insert text at the beginning of the line
A append text to the end of the line
r replace the character under the cursor with the next character typed
R
Overwrite characters until the end of the line (or until escape is pressed to
change command)
o (alpha o) open new line after the current line to type text
O (alpha O) open new line before the current line to type text
Deleting Text:
dd deletes current line
(n)dd deletes (n) line(s)
(n)dw deletes (n) word(s)
D deletes from cursor to end of line
x deletes current character
(n)x deletes (n) character(s)
X deletes previous character
Change Commands:
(n)cc
changes (n) characters on line(s) until end of the line (or until escape is
pressed)
cw changes characters of word until end of the word (or until escape is pressed)
(n)cw changes characters of the next (n) words
c$ changes text to the end of the line
ct(x) changes text to the letter (x)
C changes remaining text on the current line (until stopped by escape key)
~ changes the case of the current character
J joins the current line and the next line
u undo the last command just done on this line
. repeats last change
s substitutes text for current character
S substitutes text for current line
:s
substitutes new word(s) for old
:<line nos effected> s/old/new/g
& repeats last substitution (:s) command.
(n)yy yanks (n) lines to buffer
y(n)w yanks (n) words to buffer
p puts yanked or deleted text after cursor
P puts yanked or deleted text before cursor
File Manipulation:
:w (file) writes changes to file (default is current file)
:wq writes changes to current file and quits edit session
:w! (file) overwrites file (default is current file)
:q quits edit session w/no changes made
:q! quits edit session and discards changes
:n edits next file in argument list
:f (name) changes name of current file to (name)
:r (file)
reads contents of file into current edit at the current cursor position (insert a
file)
:!(command) shell escape
:r!(command) inserts result of shell command at cursor position
ZZ write changes to current file and exit
Introduction to Unix - 14 AUG 1996
CHAPTER 10 Editors
10.4 emacs Quick Reference Guide
Emacs commands are accompanied either by simultaneously holding down the control
key (indicated by C-) or by first hitting the escape key (indicated by M-).
Essential Commands
C-h help
C-x u undo
C-x C-g get out of current operation or command
C-x C-s save the file
C-x C-c close Emacs
Cursor movement
C-f forward one character
C-b back one character
C-p previous line
C-n next line
C-a beginning of line
C-e end of line
C-l center current line on screen
C-v scroll forward
M-v scroll backward
M-f forward one word
M-b back one word
M-a beginning of sentence
M-e end of sentence
M-{ beginning of paragraph
M-} end of paragraph
M-< beginning of buffer
M-> end of buffer
Other Important Functions
M-(n) repeat the next command (n) times
C-d delete a character
M-d delete a word
C-k kill line
M-k kill sentence
C-s search forward
C-r search in reverse
M-% query replace
M-c capitalize word
M-u uppercase word
M-l lowercase word
C-t transpose characters
M-t transpose words
C-@ mark beginning of region
C-w cut--wipe out everything from mark to point
C-y paste--yank deleted text into current location
M-q reformat paragraph
M-g reformat each paragraph in region
M-x auto-fill-mode turn on word wrap
M-x set-variable <return> fill-column <return> 45
set length of lines to 45 characters
M-x goto-line <return> 16 move cursor to line 16
M-w copy region marked
C-x C-f find file and read it
C-x C-v find and read alternate file
C-x i insert file at cursor position
C-x C-s save file
C-x C-w write buffer to a different file
C-x C-c exit emacs, and be prompted to save
Introduction to Unix - 14 AUG 1996
Introduction to Unix
CHAPTER 11 Unix Command Summary
11.1 - Unix Commands
Introduction to Unix - 14 AUG 1996
CHAPTER 11 Unix Command Summary
11.1 Unix Commands
In the table below we summarize the more frequently used commands on a Unix system.
In this table, as in general, for most Unix commands, file, could be an actual file name, or
a list of file names, or input/output could be redirected to or from the command.
Unix Commands
Command/Syntax What it will do
awk/nawk [options] file scan for patterns in a file and process the results
cat [options] file concatenate (list) a file
cd [directory] change directory
chgrp [options] group file change the group of the file
chmod [options] file change file or directory access permissions
chown [options] owner file
change the ownership of a file; can only be done by the
superuser
chsh (passwd -e/-s)
username login_shell
change the user's login shell (often only by the superuser)
cmp [options] file1 file2
compare two files and list where differences occur (text or
binary files)
compress [options] file Compress file and save it as file.Z
cp [options] file1 file2
copy file1 into file2; file2 shouldn't already exist. This
command creates or overwrites file2.
cut (options) [file(s)] cut specified field(s)/character(s) from lines in file(s)
date [options] report the current date and time
dd [if=infile] [of=outfile]
[operand=value]
copy a file, converting between ASCII and EBCDIC or
swapping byte order, as specified
diff [options] file1 file2
compare the two files and display the differences (text files
only)
df [options] [resource] report the summary of disk blocks and inodes free and in use
du [options] [directory or
file]
report amount of disk space in use
echo [text string] echo the text string to stdout
ed or ex [options] file Unix line editors
emacs [options] file full-screen editor
expr arguments
evaluate the arguments. Used to do arithmetic, etc. in the
shell.
file [options] file classify the file type
find directory [options]
[actions]
find files matching a type or pattern
finger [options]
user[@hostname]
report information about users on local and remote machines
ftp [options] host transfer file(s) using file transfer protocol
grep [options] 'search
string' argument
egrep [options] 'search
string' argument
fgrep [options] 'search
string' argument
search the argument (in this case probably a file) for all
occurrences of the search string, and list them.
gzip [options] file
gunzip [options] file
zcat [options] file
Compress or uncompress a file. Compressed files are stored
with a .gz ending
head [-number] file display the first 10 (or number of) lines of a file
hostname
display or set (super-user only) the name of the current
machine
kill [options] [-SIGNAL]
[pid#] [%job]
send a signal to the process with the process id number (pid#)
or job control number (%n). The default signal is to kill the
process.
ln [options] source_file
target
link the source_file to the target
lpq [options]
lpstat [options]
show the status of print jobs
lpr [options] file
lp [options] file
print to defined printer
lprm [options]
cancel [options]
remove a print job from the print queue
ls [options] [directory or
file]
list directory contents or file permissions
mail [options] [user]
mailx [options] [user]
Mail [options] [user]
simple email utility available on Unix systems. Type a period
as the first character on a new line to send message out,
question mark for help.
man [options] command show the manual (man) page for a command
mkdir [options] directory make a directory
more [options] file
less [options] file
pg [options] file
page through a text file
mv [options] file1 file2 move file1 into file2
od [options] file
octal dump a binary file, in octal, ASCII, hex, decimal, or
character mode.
passwd [options] set or change your password
paste [options] file paste field(s) onto the lines in file
pr [options] file filter the file and print it on the terminal
ps [options] show status of active processes
pwd print working (current) directory
rcp [options] hostname remotely copy files from this machine to another machine
rlogin [options] hostname login remotely to another machine
rm [options] file
remove (delete) a file or directory (-r recursively deletes the
directory and its contents) (-i prompts before removing files)
rmdir [options] directory remove a directory
rsh [options] hostname remote shell to run on another machine
script file
saves everything that appears on the screen to file until exit is
executed
sed [options] file
stream editor for editing files from a script or from the
command line
sort [options] file sort the lines of the file according to the options chosen
source file
. file
read commands from the file and execute them in the current
shell. source: C shell, .: Bourne shell.
strings [options] file
report any sequence of 4 or more printable characters ending
in <NL> or <NULL>. Usually used to search binary files for
ASCII strings.
stty [options] set or display terminal control options
tail [options] file display the last few lines (or parts) of a file
tar key[options] [file(s)]
tape archiver--refer to man pages for details on creating,
listing, and retrieving from archive files. Tar files can be
stored on tape or disk.
tee [options] file copy stdout to one or more files
telnet [host [port]] communicate with another host using telnet protocol
touch [options] [date] file
create an empty file, or update the access time of an existing
file
tr [options] string1 string2
Translate the characters in string1 from stdin into those in
string2 in stdout
uncompress file.Z uncompress file.Z and save it as a file
uniq [options] file remove repeated lines in a file
uudecode [file] decode a uuencoded file, recreating the original file
uuencode [file] new_name
encode binary file to 7-bit ASCII, useful when sending via
email, to be decoded as new_name at destination
vi [options] file visual, full-screen editor
wc [options] [file(s)] display word (or character or line) count for file(s)
whereis [options]
command
report the binary, source, and man page locations for the
command named
which command reports the path to the command or the shell alias in use
who or w report who is logged in and what processes are running
zcat file.Z
concatenate (list) uncompressed file to screen, leaving file
compressed on disk
Introduction to Unix - 14 AUG 1996
[Next] [Previous] [Up] [Top] [Contents] [Next] [Previous] [Top] [Contents]
Introduction to Unix
CHAPTER 12 A Short Unix Bibliography
12.1 - Highly Recommended
12.2 - Assorted Others
Introduction to Unix - 14 AUG 1996
CHAPTER 12 A Short Unix Bibliography
12.1 Highly Recommended
UNIX for the Impatient, Paul W. Abrahams & Bruce R. Larson (Addison-Wesley
Publishing Company, 1992, ISBN 0-201-55703-7). (A current favorite. Recommended in
the CIS Department for Unix beginners.)
UNIX in a Nutshell for BSD 4.3: A Desktop Quick Reference For Berkeley (O'Reilly
& Associates, Inc., 1990, ISBN 0-937175-20-X). (A handy reference for BSD.)
UNIX in a Nutshell: A Desktop Quick Reference for System V & Solaris 2.0
(O'Reilly & Associates, Inc., 1992, ISBN 0-56592-001-5). (A handy reference for SysV
and Solaris 2.)
The UNIX Programming Environment, Brian W. Kernighan & Rob Pike (Prentice
Hall, 1984). (A classic. For serious folks.)
When You Can't Find Your UNIX System Administrator, Linda Mui (O'Reilly &
Associates, Inc., 1995, ISBN 1-56592-104-6).
UNIX Power Tools, Jerry Peek, Tim O'Reilly, and Mike Loukides (O'Reilly &
Associates, 1993, ISBN 0-679-79073-X). (Includes a CDROM of useful software for
various OSs.)
Introduction to Unix - 14 AUG 1996
CHAPTER 12 A Short Unix Bibliography
12.2 Assorted Others
Understanding UNIX: A Conceptual Guide, James R. Groff & Paul N. Weinberg (Que
Corporation, 1983).
Exploring the UNIX System, Stephen G. Kochan & Patrick H. Wood (SAMS, a
division of Macmillan Computer Publishing, 1989, ISBN 0-8104-6268-0).
Learning GNU Emacs, Debra Cameron and Bill Rosenblatt (O'Reilly & Associates,
1992, ISBN 0-937175-84-6).
UNIX for Dummies, John R. Levine & Margaret Levine Young (IDG Books
Worldwide, Inc., 1993, ISBN 0-878058-58-4).
A Practical Guide to UNIX System V, Mark G. Sobell (The Benjamin/Cummings
Publishing Company, Inc., 1985, ISBN 0-80-530243-3).
UNIX Primer Plus, Mitchell Waite, Donald Martin, & Stephen Prata, (Howard W. Sams
& Co., Inc., 1983, ISBN 0-672-30194-6).
An Introduction to Berkeley UNIX, Paul Wang, (Wadsworth Publishing Company,
1988).
Unix Shell Programming, Stephen G. Kochan & Patrick H. Wood (Hayden Book Co.,
1990, ISBN 0-8104-6309-1).
The Unix C Shell Field Guide, Gail Anderson and Paul Anderson (Prentice Hall, 1986,
ISBN 0-13-937468-X).
A Student's Guide to UNIX, Harley Hahn. (McGraw-Hill, 1993, ISBN 0-07-025511-3).
Tricks of the UNIX Masters, Russell G. Sage (Howard W. Sams & Co., Inc., 1987,
ISBN 0-672-22449-6).
Introduction to Unix - 14 AUG 1996

More Related Content

PPTX
Unix operating system architecture with file structure
amol_chavan
 
PPT
unix training | unix training videos | unix course unix online training
Nancy Thomas
 
PPTX
Unix Introduction
ananthimurugesan
 
PPTX
UNIX Operating System ppt
OECLIB Odisha Electronics Control Library
 
PPTX
Unix
Erm78
 
PPTX
Introduction to Unix
Nishant Munjal
 
PPTX
Unix training session 1
Anil Kumar Kapil,PMP®
 
DOCX
Introduction to unix
sudheer yathagiri
 
Unix operating system architecture with file structure
amol_chavan
 
unix training | unix training videos | unix course unix online training
Nancy Thomas
 
Unix Introduction
ananthimurugesan
 
Unix
Erm78
 
Introduction to Unix
Nishant Munjal
 
Unix training session 1
Anil Kumar Kapil,PMP®
 
Introduction to unix
sudheer yathagiri
 

What's hot (20)

DOCX
Unix operating system
midhunjose4u
 
PPTX
Unix ppt
Dr Rajiv Srivastava
 
PPTX
Unix Administration
Nishant Munjal
 
PPTX
Unix Operating System
MahakKasliwal
 
PDF
1_Introduction_To_Unix_and_Basic_Unix_Commands
Gautam Raja
 
PDF
Unix - An Introduction
Deepanshu Gahlaut
 
PPTX
Unix features, posix and single unix specification
sudha rani
 
PPT
Linux file system nevigation
hetaldobariya
 
PPTX
Unix Operating System
subhsikha
 
PPT
Unix file systems 2 in unix internal systems
senthilamul
 
PPT
Mca ii os u-5 unix linux file system
Rai University
 
PPTX
Unix Operating System
Shivam Pandey
 
PPT
Linux file system
Burhan Abbasi
 
PPTX
Chapter 1: Introduction to Unix / Linux Kernel
Dr.Ashvini Chaudhari Bhongade
 
PPT
UNIX introduction
MUFIX Community
 
PPTX
Linux standard file system
Taaanu01
 
PPT
Linux file system
Midaga Mengistu
 
PPTX
A beginners introduction to unix
zafarali1981
 
DOC
computer notes - Unix primer
ecomputernotes
 
PPS
QSpiders - Unix Operating Systems and Commands
Qspiders - Software Testing Training Institute
 
Unix operating system
midhunjose4u
 
Unix Administration
Nishant Munjal
 
Unix Operating System
MahakKasliwal
 
1_Introduction_To_Unix_and_Basic_Unix_Commands
Gautam Raja
 
Unix - An Introduction
Deepanshu Gahlaut
 
Unix features, posix and single unix specification
sudha rani
 
Linux file system nevigation
hetaldobariya
 
Unix Operating System
subhsikha
 
Unix file systems 2 in unix internal systems
senthilamul
 
Mca ii os u-5 unix linux file system
Rai University
 
Unix Operating System
Shivam Pandey
 
Linux file system
Burhan Abbasi
 
Chapter 1: Introduction to Unix / Linux Kernel
Dr.Ashvini Chaudhari Bhongade
 
UNIX introduction
MUFIX Community
 
Linux standard file system
Taaanu01
 
Linux file system
Midaga Mengistu
 
A beginners introduction to unix
zafarali1981
 
computer notes - Unix primer
ecomputernotes
 
QSpiders - Unix Operating Systems and Commands
Qspiders - Software Testing Training Institute
 
Ad

Similar to Introduction to unix (20)

PPTX
Unix environment
Er Mittinpreet Singh
 
PPT
linux-lecture1.ppt
Nikhil Raut
 
PPTX
CHAPTER 1 INTRODUCTION TO UNIX.pptx
MahiDivya
 
PPTX
Chapter 2 Introduction to Unix Concepts
MeenalJabde
 
PPTX
UNIX.pptx
P S Rani
 
PPTX
Unix final
MahakKasliwal
 
PPTX
Unix environment [autosaved]
Er Mittinpreet Singh
 
PPTX
UNIX_module1.pptx
kushvithchinna900
 
PPT
Linux administration classes in mumbai
Vibrant Technologies & Computers
 
PPTX
KMSUnix and Linux.pptx
Ganesh Bhosale
 
PPT
Introduction to Unix operating system Chapter 1-PPT Mrs.Sowmya Jyothi
Sowmya Jyothi
 
PPTX
unix details file system, architecture, directory
co3sem2020
 
PPT
linux-lecture1.ppt
jeronimored
 
PPTX
Unix_Introduction_BCA.pptx the very basi
Priyadarshini648418
 
PPT
Unit 1 Introduction to Operating System.ppt
AnilkumarBrahmane2
 
PPSX
Unix environment [autosaved]
Er Mittinpreet Singh
 
PPTX
Unix case-study
NishantMishra126
 
PDF
UNIX_Module 1.pdf
krishnaraj714229
 
PPTX
Linux powerpoint
bijanshr
 
DOC
Unix Quick Learn
Nisanth
 
Unix environment
Er Mittinpreet Singh
 
linux-lecture1.ppt
Nikhil Raut
 
CHAPTER 1 INTRODUCTION TO UNIX.pptx
MahiDivya
 
Chapter 2 Introduction to Unix Concepts
MeenalJabde
 
UNIX.pptx
P S Rani
 
Unix final
MahakKasliwal
 
Unix environment [autosaved]
Er Mittinpreet Singh
 
UNIX_module1.pptx
kushvithchinna900
 
Linux administration classes in mumbai
Vibrant Technologies & Computers
 
KMSUnix and Linux.pptx
Ganesh Bhosale
 
Introduction to Unix operating system Chapter 1-PPT Mrs.Sowmya Jyothi
Sowmya Jyothi
 
unix details file system, architecture, directory
co3sem2020
 
linux-lecture1.ppt
jeronimored
 
Unix_Introduction_BCA.pptx the very basi
Priyadarshini648418
 
Unit 1 Introduction to Operating System.ppt
AnilkumarBrahmane2
 
Unix environment [autosaved]
Er Mittinpreet Singh
 
Unix case-study
NishantMishra126
 
UNIX_Module 1.pdf
krishnaraj714229
 
Linux powerpoint
bijanshr
 
Unix Quick Learn
Nisanth
 
Ad

Recently uploaded (20)

PPTX
Chapter_Seven_Construction_Reliability_Elective_III_Msc CM
SubashKumarBhattarai
 
PDF
Queuing formulas to evaluate throughputs and servers
gptshubham
 
PDF
Principles of Food Science and Nutritions
Dr. Yogesh Kumar Kosariya
 
PDF
Introduction to Data Science: data science process
ShivarkarSandip
 
PDF
오픈소스 LLM, vLLM으로 Production까지 (Instruct.KR Summer Meetup, 2025)
Hyogeun Oh
 
PDF
6th International Conference on Artificial Intelligence and Machine Learning ...
gerogepatton
 
PPTX
Azure-DevOps-Training presentation downloadable
NamanGoyal428595
 
PDF
algorithms-16-00088-v2hghjjnjnhhhnnjhj.pdf
Ajaykumar966781
 
PDF
Unit I Part II.pdf : Security Fundamentals
Dr. Madhuri Jawale
 
PDF
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
PPTX
EE3303-EM-I 25.7.25 electrical machines.pptx
Nagen87
 
PPTX
Simulation of electric circuit laws using tinkercad.pptx
VidhyaH3
 
PPTX
The-Looming-Shadow-How-AI-Poses-Dangers-to-Humanity.pptx
shravanidabhane8
 
PPTX
anatomy of limbus and anterior chamber .pptx
ZePowe
 
PPT
High Data Link Control Protocol in Data Link Layer
shailajacse
 
PPTX
MET 305 MODULE 1 KTU 2019 SCHEME 25.pptx
VinayB68
 
PDF
A Framework for Securing Personal Data Shared by Users on the Digital Platforms
ijcncjournal019
 
PPTX
Module_II_Data_Science_Project_Management.pptx
anshitanarain
 
PDF
dse_final_merit_2025_26 gtgfffffcjjjuuyy
rushabhjain127
 
PDF
Activated Carbon for Water and Wastewater Treatment_ Integration of Adsorptio...
EmilianoRodriguezTll
 
Chapter_Seven_Construction_Reliability_Elective_III_Msc CM
SubashKumarBhattarai
 
Queuing formulas to evaluate throughputs and servers
gptshubham
 
Principles of Food Science and Nutritions
Dr. Yogesh Kumar Kosariya
 
Introduction to Data Science: data science process
ShivarkarSandip
 
오픈소스 LLM, vLLM으로 Production까지 (Instruct.KR Summer Meetup, 2025)
Hyogeun Oh
 
6th International Conference on Artificial Intelligence and Machine Learning ...
gerogepatton
 
Azure-DevOps-Training presentation downloadable
NamanGoyal428595
 
algorithms-16-00088-v2hghjjnjnhhhnnjhj.pdf
Ajaykumar966781
 
Unit I Part II.pdf : Security Fundamentals
Dr. Madhuri Jawale
 
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
EE3303-EM-I 25.7.25 electrical machines.pptx
Nagen87
 
Simulation of electric circuit laws using tinkercad.pptx
VidhyaH3
 
The-Looming-Shadow-How-AI-Poses-Dangers-to-Humanity.pptx
shravanidabhane8
 
anatomy of limbus and anterior chamber .pptx
ZePowe
 
High Data Link Control Protocol in Data Link Layer
shailajacse
 
MET 305 MODULE 1 KTU 2019 SCHEME 25.pptx
VinayB68
 
A Framework for Securing Personal Data Shared by Users on the Digital Platforms
ijcncjournal019
 
Module_II_Data_Science_Project_Management.pptx
anshitanarain
 
dse_final_merit_2025_26 gtgfffffcjjjuuyy
rushabhjain127
 
Activated Carbon for Water and Wastewater Treatment_ Integration of Adsorptio...
EmilianoRodriguezTll
 

Introduction to unix

  • 1. Introduction to Unix CHAPTER 1 History of Unix 1965 Bell Laboratories joins with MIT and General Electric in the development effort for the new operating system, Multics, which would provide multi-user, multi-processor, and multi-level (hierarchical) file system, among its many forward-looking features. 1969 AT&T was unhappy with the progress and drops out of the Multics project. Some of the Bell Labs programmers who had worked on this project, Ken Thompson, Dennis Ritchie, Rudd Canaday, and Doug McIlroy designed and implemented the first version of the Unix File System on a PDP-7 along with a few utilities. It was given the name UNIX by Brian Kernighan as a pun on Multics. 1970, Jan 1 time zero for UNIX 1971 The system now runs on a PDP-11, with 16Kbytes of memory, including 8Kbytes for user programs and a 512Kbyte disk. Its first real use is as a text processing tool for the patent department at Bell Labs. That utilization justified further research and development by the programming group. UNIX caught on among programmers because it was designed with these features: • programmers environment • simple user interface • simple utilities that can be combined to perform powerful functions • hierarchical file system • simple interface to devices consistent with file format • multi-user, multi-process system • architecture independent and transparent to the user. 1973 Unix is re-written mostly in C, a new language developed by Dennis Ritchie. Being written in this high-level language greatly decreased the effort needed to port it to new machines. 1974 Thompson and Ritchie publish a paper in the Communications of the ACM describing the new Unix OS. This generates enthusiasm in the Academic community which sees a potentially great teaching tool for studying programming systems development. Since AT&T is prevented from marketing the product due to the 1956 Consent Decree they license it to Universities for educational purposes and to commercial entities. 1977 There are now about 500 Unix sites world-wide. 1980 BSD 4.1 (Berkeley Software Development)
  • 2. 1983 SunOS, BSD 4.2, SysV 1984 There are now about 100,000 Unix sites running on many different hardware platforms, of vastly different capabilities. 1988 AT&T and Sun Microsystems jointly develop System V Release 4 (SVR4). This would later be developed into UnixWare and Solaris 2. 1993 Novell buys UNIX from AT&T 1994 Novell gives the name "UNIX" to X/OPEN 1995 Santa Cruz Operations buys UnixWare from Novell. Santa Cruz Operations and Hewlett-Packard announce that they will jointly develop a 64-bit version of Unix. 1996 International Data Corporation forecasts that in 1997 there will be 3 million Unix systems shipped world-wide. CHAPTER 2 Unix Structure CHAPTER 2 Unix Structure 2.1 The Operating System Unix is a layered operating system. The innermost layer is the hardware that provides the services for the OS. The operating system, referred to in Unix as the kernel, interacts directly with the hardware and provides the services to the user programs. These user programs don't need to know anything about the hardware. They just need to know how to interact with the kernel and it's up to the kernel to provide the desired service. One of the big appeals of Unix to programmers has been that most well written user programs are independent of the underlying hardware, making them readily portable to new systems. User programs interact with the kernel through a set of standard system calls. These system calls request services to be provided by the kernel. Such services would include accessing a file: open close, read, write, link, or execute a file; starting or updating accounting records; changing ownership of a file or directory; changing to a new directory; creating, suspending, or killing a process; enabling access to hardware devices; and setting limits on system resources. Unix is a multi-user, multi-tasking operating system. You can have many users logged into a system simultaneously, each running many programs. It's the kernel's job to keep
  • 3. each process and user separate and to regulate access to system hardware, including cpu, memory, disk and other I/O devices. FIGURE 2.1 Unix System Structure Introduction to Unix - 14 AUG 1996 CHAPTER 2 Unix Structure 2.2 The File System The Unix file system looks like an inverted tree structure. You start with the root directory, denoted by /, at the top and work down through sub-directories underneath it.
  • 4. FIGURE 2.2 Unix File Structure Each node is either a file or a directory of files, where the latter can contain other files and directories. You specify a file or directory by its path name, either the full, or absolute, path name or the one relative to a location. The full path name starts with the root, /, and follows the branches of the file system, each separated by /, until you reach the desired file, e.g.: /home/condron/source/xntp A relative path name specifies the path relative to another, usually the current working directory that you are at. Two special directory entries should be introduced now: . the current directory .. the parent of the current directory
  • 5. So if I'm at /home/frank and wish to specify the path above in a relative fashion I could use: ../condron/source/xntp This indicates that I should first go up one directory level, then come down through the condron directory, followed by the source directory and then to xntp. Introduction to Unix - 14 AUG 1996 CHAPTER 2 Unix Structure 2.3 Unix Directories, Files and Inodes Every directory and file is listed in its parent directory. In the case of the root directory, that parent is itself. A directory is a file that contains a table listing the files contained within it, giving file names to the inode numbers in the list. An inode is a special file designed to be read by the kernel to learn the information about each file. It specifies the permissions on the file, ownership, date of creation and of last access and change, and the physical location of the data blocks on the disk containing the file. The system does not require any particular structure for the data in the file itself. The file can be ASCII or binary or a combination, and may represent text data, a shell script, compiled object code for a program, directory table, junk, or anything you would like. There's no header, trailer, label information or EOF character as part of the file. Introduction to Unix - 14 AUG 1996 CHAPTER 2 Unix Structure 2.4 Unix Programs A program, or command, interacts with the kernel to provide the environment and perform the functions called for by the user. A program can be: an executable shell file, known as a shell script; a built-in shell command; or a source compiled, object code file. The shell is a command line interpreter. The user interacts with the kernel through the shell. You can write ASCII (text) scripts to be acted upon by a shell. System programs are usually binary, having been compiled from C source code. These are located in places like /bin, /usr/bin, /usr/local/bin, /usr/ucb, etc. They provide the
  • 6. functions that you normally think of when you think of Unix. Some of these are sh, csh, date, who, more, and there are many others. Introduction to Unix - 14 AUG 1996 CHAPTER 3 Getting Started CHAPTER 3 Getting Started 3.1 Logging in After connecting with a Unix system, a user is prompted for a login username, then a password. The login username is the user's unique name on the system. The password is a changeable code known only to the user. At the login prompt, the user should enter the username; at the password prompt, the current password should be typed. Note: Unix is case sensitive. Therefore, the login and password should be typed exactly as issued; the login, at least, will normally be in lower case. 3.1.1 - Terminal Type 3.1.2 - Passwords 3.1.3 - Exiting 3.1.4 - Identity Introduction to Unix - 14 AUG 1996 3.1 Logging in 3.1.1 Terminal Type Most systems are set up so the user is by default prompted for a terminal type, which should be set to match the terminal in use before proceeding. Most computers work if you choose "vt100". Users connecting using a Sun workstation may want to use "sun"; those using an X-Terminal may want to use "xterms" or "xterm". The terminal type indicates to the Unix system how to interact with the session just opened. Should you need to reset the terminal type, enter the command: setenv TERM <term type> - if using the C-shell (see Chapter 4.) (On some systems, e.g. MAGNUS, it's also necessary to type "unsetenv TERMCAP".)
  • 7. -or- TERM=<term type>; export TERM - if using the Bourne shell (see Chapter 4.) where <term type> is the terminal type, such as vt100, that you would like set. Introduction to Unix - 14 AUG 1996 3.1 Logging in 3.1.2 Passwords When your account is issued, you will be given an initial password. It is important for system and personal security that the password for your account be changed to something of your choosing. The command for changing a password is "passwd". You will be asked both for your old password and to type your new selected password twice. If you mistype your old password or do not type your new password the same way twice, the system will indicate that the password has not been changed. Some system administrators have installed programs that check for appropriateness of password (is it cryptic enough for reasonable system security). A password change may be rejected by this program. When choosing a password, it is important that it be something that could not be guessed -- either by somebody unknown to you trying to break in, or by an acquaintance who knows you. Suggestions for choosing and using a password follow: Don't use a word (or words) in any language use a proper name use information that can be found in your wallet use information commonly known about you (car license, pet name, etc) use control characters. Some systems can't handle them write your password anywhere ever give your password to *anybody* Do use a mixture of character types (alphabetic, numeric, special) use a mixture of upper case and lower case
  • 8. use at least 6 characters choose a password you can remember change your password often make sure nobody is looking over your shoulder when you are entering your password Introduction to Unix - 14 AUG 1996 3.1 Logging in 3.1.3 Exiting ^D - indicates end of data stream; can log a user off. The latter is disabled on many systems ^C - interrupt logout - leave the system exit - leave the shell Introduction to Unix - 14 AUG 1996 3.1 Logging in 3.1.4 Identity The system identifies you by the user and group numbers (userid and groupid, respectively) assigned to you by your system administrator. You don't normally need to know your userid or groupid as the system translates username « userid, and groupname « groupid automatically. You probably already know your username; it's the name you logon with. The groupname is not as obvious, and indeed, you may belong to more than one group. Your primary group is the one associated with your username in the password database file, as set up by your system administrator. Similarly, there is a group database file where the system administrator can assign you rights to additional groups on the system. In the examples below % is your shell prompt; you don't type this in.
  • 9. You can determine your userid and the list of groups you belong to with the id and groups commands. On some systems id displays your user and primary group information, e.g.: % id uid=1101(frank) gid=10(staff) on other systems it also displays information for any additional groups you belong to: % id uid=1101(frank) gid=10(staff) groups=10(staff),5(operator),14(sysadmin),110(uts) The groups command displays the group information for all the groups you belong to, e.g.: % groups staff sysadmin uts operator Introduction to Unix - 14 AUG 1996 CHAPTER 3 Getting Started 3.2 Unix Command Line Structure A command is a program that tells the Unix system to do something. It has the form: command [options] [arguments] where an argument indicates on what the command is to perform its action, usually a file or series of files. An option modifies the command, changing the way it performs. Commands are case sensitive. command and Command are not the same. Options are generally preceded by a hyphen (-), and for most commands, more than one option can be strung together, in the form: command -[option][option][option] e.g.: ls -alR
  • 10. will perform a long list on all files in the current directory and recursively perform the list through all sub-directories. For most commands you can separate the options, preceding each with a hyphen, e.g.: command -option1 -option2 -option3 as in: ls -a -l -R Some commands have options that require parameters. Options requiring parameters are usually specified separately, e.g.: lpr -Pprinter3 -# 2 file will send 2 copies of file to printer3. These are the standard conventions for commands. However, not all Unix commands will follow the standard. Some don't require the hyphen before options and some won't let you group options together, i.e. they may require that each option be preceded by a hyphen and separated by whitespace from other options and arguments. Options and syntax for a command are listed in the man page for the command. Introduction to Unix - 14 AUG 1996 CHAPTER 3 Getting Started 3.3 Control Keys Control keys are used to perform special functions on the command line or within an editor. You type these by holding down the Control key and some other key simultaneously. This is usually represented as ^Key. Control-S would be written as ^S. With control keys upper and lower case are the same, so ^S is the same as ^s. This particular example is a stop signal and tells the terminal to stop accepting input. It will remain that way until you type a start signal, ^Q. Control-U is normally the "line-kill" signal for your terminal. When typed it erases the entire input line. In the vi editor you can type a control key into your text file by first typing ^V followed by the control character desired, so to type ^H into a document type ^V^H. Introduction to Unix - 14 AUG 1996
  • 11. CHAPTER 3 Getting Started 3.4 stty - terminal control stty reports or sets terminal control options. The "tty" is an abbreviation that harks back to the days of teletypewriters, which were associated with transmission of telegraph messages, and which were models for early computer terminals. For new users, the most important use of the stty command is setting the erase function to the appropriate key on their terminal. For systems programmers or shell script writers, the stty command provides an invaluable tool for configuring many aspects of I/O control for a given device, including the following: - erase and line-kill characters - data transmission speed - parity checking on data transmission - hardware flow control - newline (NL) versus carriage return plus linefeed (CR-LF) - interpreting tab characters - edited versus raw input - mapping of upper case to lower case This command is very system specific, so consult the man pages for the details of the stty command on your system. Syntax stty [options] Options (none) report the terminal settings all (or -a) report on all options echoe echo ERASE as BS-space-BS
  • 12. dec set modes suitable for Digital Equipment Corporation operating systems (which distinguishes between ERASE and BACKSPACE) (Not available on all systems) kill set the LINE-KILL character erase set the ERASE character intr set the INTERRUPT character Examples You can display and change your terminal control settings with the stty command. To display all (-a) of the current line settings: % stty -a speed 38400 baud, 24 rows, 80 columns parenb -parodd cs7 -cstopb -hupcl cread -clocal -crtscts -ignbrk brkint ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc ixon -ixany -ixoff imaxbel isig iexten icanon -xcase echo echoe echok -echonl -noflsh -tostop echoctl -echoprt echoke opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel erase kill werase rprnt flush lnext susp intr quit stop eof ^H ^U ^W ^R ^O ^V ^Z/^Y ^C ^ ^S/^Q ^D You can change settings using stty, e.g., to change the erase character from ^? (the delete key) to ^H: % stty erase ^H This will set the terminal options for the current session only. To have this done for you automatically each time you login, it can be inserted into the .login or .profile file that we'll look at later. Introduction to Unix - 14 AUG 1996
  • 13. CHAPTER 3 Getting Started 3.5 Getting Help The Unix manual, usually called man pages, is available on-line to explain the usage of the Unix system and commands. To use a man page, type the command "man" at the system prompt followed by the command for which you need information. Syntax man [options] command_name Common Options -k keyword list command synopsis line for all keyword matches -M path path to man pages -a show all matching man pages (SVR4) Examples You can use man to provide a one line synopsis of any commands that contain the keyword that you want to search on with the "-k" option, e.g. to search on the keyword password, type: % man -k password passwd (5) - password file passwd (1) - change password information The number in parentheses indicates the section of the man pages where these references were found. You can then access the man page (by default it will give you the lower numbered entry, but you can use a command line option to specify a different one) with: % man passwd PASSWD(1) USER COMMANDS PASSWD(1) NAME passwd - change password information SYNOPSIS
  • 14. passwd [ -e login_shell ] [ username ] DESCRIPTION passwd changes (or sets) a user's password. passwd prompts twice for the new password, without displaying it. This is to allow for the possibility of typing mistakes. Only the user and the super-user can change the user's password. OPTIONS -e Change the user's login shell. Here we've paraphrased and truncated the output for space and copyright concerns. Introduction to Unix - 14 AUG 1996 CHAPTER 3 Getting Started 3.6 Directory Navigation and Control The Unix file system is set up like a tree branching out from the root. The the root directory of the system is symbolized by the forward slash (/). System and user directories are organized under the root. The user does not have a root directory in Unix; users generally log into their own home directory. Users can then create other directories under their home. The following table summarizes some directory navigation commands. Navigation and Directory Control Commands Command/Syntax What it will do cd [directory] change directory ls [options] [directory or file] list directory contents or file permissions mkdir [options] directory make a directory pwd print working (current) directory rmdir [options] directory remove a directory If you're familiar with DOS the following table comparing similar commands might help to provide the proper reference frame. Unix vs DOS Navigation and Directory Control Commands Command Unix DOS
  • 15. list directory contents ls dir make directory mkdir md & mkdir change directory cd cd & chdir delete (remove) directory rmdir rd & rmdir return to user's home directory cd cd location in path (present working directory) pwd cd 3.6.1 - pwd - print working directory 3.6.2 - cd - change directory 3.6.3 - mkdir - make a directory 3.6.4 - rmdir - remove directory 3.6.5 - ls - list directory contents Introduction to Unix - 14 AUG 1996 3.6 Directory Navigation and Control 3.6.1 pwd - print working directory At any time you can determine where you are in the file system hierarchy with the pwd, print working directory, command, e.g.: % pwd /home/frank/src Introduction to Unix - 14 AUG 1996 3.6 Directory Navigation and Control 3.6.2 cd - change directory You can change to a new directory with the cd, change directory, command. cd will accept both absolute and relative path names. Syntax cd [directory] Examples cd (also chdir in some shells) change directory
  • 16. cd changes to user's home directory cd / changes directory to the system's root cd .. goes up one directory level cd ../.. goes up two directory levels cd /full/path/name/from/root changes directory to absolute path named (note the leading slash) cd path/from/current/location changes directory to path relative to current location (no leading slash) cd ~username/directory changes directory to the named username's indicated directory (Note: the ~ is not valid in the Bourne shell; see Chapter 5.) Introduction to Unix - 14 AUG 1996 3.6 Directory Navigation and Control 3.6.3 mkdir - make a directory You extend your home hierarchy by making sub-directories underneath it. This is done with the mkdir, make directory, command. Again, you specify either the full or relative path of the directory: Syntax mkdir [options] directory Common Options -p create the intermediate (parent) directories, as needed -m mode access permissions (SVR4). (We'll look at modes later in this Chapter). Examples % mkdir /home/frank/data or, if your present working directory is /home/frank the following would be equivalent: % mkdir data
  • 17. Introduction to Unix - 14 AUG 1996 3.6 Directory Navigation and Control 3.6.4 rmdir - remove directory A directory needs to be empty before you can remove it. If it's not, you need to remove the files first. Also, you can't remove a directory if it is your present working directory; you must first change out of it. Syntax rmdir directory Examples To remove the empty directory /home/frank/data while in /home/frank use: % rmdir data or % rmdir /home/frank/data Introduction to Unix - 14 AUG 1996 3.6 Directory Navigation and Control 3.6.5 ls - list directory contents The command to list your directories and files is ls. With options it can provide information about the size, type of file, permissions, dates of file creation, change and access. Syntax ls [options] [argument] Common Options When no argument is used, the listing will be of the current directory. There are many very useful options for the ls command. A listing of many of them follows. When using the command, string the desired options together preceded by "-".
  • 18. -a lists all files, including those beginning with a dot (.). -d lists only names of directories, not the files in the directory -F indicates type of entry with a trailing symbol: directories / sockets = symbolic links @ executables * -g displays Unix group assigned to the file, requires the -l option (BSD only) -or- on an SVR4 machine, e.g. Solaris, this option has the opposite effect -L if the file is a symbolic link, lists the information for the file or directory the link references, not the information for the link itself -l long listing: lists the mode, link information, owner, size, last modification (time). If the file is a symbolic link, an arrow (-->) precedes the pathname of the linked-to file. The mode field is given by the -l option and consists of 10 characters. The first character is one of the following: CHARACTER IF ENTRY IS A d directory - plain file b block-type special file c character-type special file l symbolic link s socket The next 9 characters are in 3 sets of 3 characters each. They indicate the file access permissions: the first 3 characters refer to the permissions for the user, the next three for the users in the Unix group assigned to the file, and the last 3 to the permissions for other users on the system. Designations are as follows:
  • 19. r read permission w write permission x execute permission - no permission There are a few less commonly used permission designations for special circumstances. These are explained in the man page for ls. Examples To list the files in a directory: % ls demofiles frank linda To list all files in a directory, including the hidden (dot) files try: % ls -a . .cshrc .history .plan .rhosts frank .. .emacs .login .profile demofiles linda To get a long listing: % ls -al total 24 drwxr-sr-x 5 workshop acs 512 Jun 7 11:12 . drwxr-xr-x 6 root sys 512 May 29 09:59 .. -rwxr-xr-x 1 workshop acs 532 May 20 15:31 .cshrc -rw------- 1 workshop acs 525 May 20 21:29 .emacs -rw------- 1 workshop acs 622 May 24 12:13 .history -rwxr-xr-x 1 workshop acs 238 May 14 09:44 .login -rw-r--r-- 1 workshop acs 273 May 22 23:53 .plan -rwxr-xr-x 1 workshop acs 413 May 14 09:36 .profile
  • 20. -rw------- 1 workshop acs 49 May 20 20:23 .rhosts drwx------ 3 workshop acs 512 May 24 11:18 demofiles drwx------ 2 workshop acs 512 May 21 10:48 frank drwx------ 3 workshop acs 512 May 24 10:59 linda Introduction to Unix - 14 AUG 1996 CHAPTER 3 Getting Started 3.7 File Maintenance Commands To create, copy, remove and change permissions on files you can use the following commands. File Maintenance Commands Command/Syntax What it will do chgrp [options] group file change the group of the file chmod [options] file change file or directory access permissions chown [options] owner file change the ownership of a file; can only be done by the superuser cp [options] file1 file2 copy file1 into file2; file2 shouldn't already exist. This command creates or overwrites file2. mv [options] file1 file2 move file1 into file2 rm [options] file remove (delete) a file or directory (-r recursively deletes the directory and its contents) (-i prompts before removing files) If you're familiar with DOS the following table comparing similar commands might help to provide the proper reference frame. Unix vs DOS File Maintenance Commands Command Unix DOS copy file cp copy move file mv move (not supported on all versions of DOS) rename file mv rename & ren delete (remove) file rm erase & del
  • 21. display file to screen entire file one page at a time cat more, less, pg type type/p (not supported on all versions of DOS) 3.7.1 - cp - copy a file 3.7.2 - mv - move a file 3.7.3 - rm - remove a file 3.7.4 - File Permissions 3.7.5 - chmod - change file permissions 3.7.6 - chown - change ownership 3.7.7 - chgrp - change group Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands 3.7.1 cp - copy a file Copy the contents of one file to another with the cp command. Syntax cp [options] old_filename new_filename Common Options -i interactive (prompt and wait for confirmation before proceeding) -r recursively copy a directory Examples % cp old_filename new_filename You now have two copies of the file, each with identical contents. They are completely independent of each other and you can edit and modify either as needed. They each have their own inode, data blocks, and directory table entries. Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands
  • 22. 3.7.2 mv - move a file Rename a file with the move command, mv. Syntax mv [options] old_filename new_filename Common Options -i interactive (prompt and wait for confirmation before proceeding) -f don't prompt, even when copying over an existing target file (overrides -i) Examples % mv old_filename new_filename You now have a file called new_filename and the file old_filename is gone. Actually all you've done is to update the directory table entry to give the file a new name. The contents of the file remain where they were. Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands 3.7.3 rm - remove a file Remove a file with the rm, remove, command. Syntax rm [options] filename Common Options -i interactive (prompt and wait for confirmation before proceeding) -r recursively remove a directory, first removing the files and subdirectories beneath it -f don't prompt for confirmation (overrides -i) Examples % rm old_filename
  • 23. A listing of the directory will now show that the file no longer exists. Actually, all you've done is to remove the directory table entry and mark the inode as unused. The file contents are still on the disk, but the system now has no way of identifying those data blocks with a file name. There is no command to "unremove" a file that has been removed in this way. For this reason many novice users alias their remove command to be "rm -i", where the -i option prompts them to answer yes or no before the file is removed. Such aliases are normally placed in the .cshrc file for the C shell; see Chapter 5) Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands 3.7.4 File Permissions Each file, directory, and executable has permissions set for who can read, write, and/or execute it. To find the permissions assigned to a file, the ls command with the -l option should be used. Also, using the -g option with "ls -l" will help when it is necessary to know the group for which the permissions are set (BSD only). When using the "ls -lg" command on a file (ls -l on SysV), the output will appear as follows: -rwxr-x--- user unixgroup size Month nn hh:mm filename The area above designated by letters and dashes (-rwxr-x---) is the area showing the file type and permissions as defined in the previous Section. Therefore, a permission string, for example, of -rwxr-x--- allows the user (owner) of the file to read, write, and execute it; those in the unixgroup of the file can read and execute it; others cannot access it at all. Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands 3.7.5 chmod - change file permissions The command to change permissions on an item (file, directory, etc) is chmod (change mode). The syntax involves using the command with three digits (representing the user (owner, u) permissions, the group (g) permissions, and other (o) user's permissions) followed by the argument (which may be a file name or list of files and directories). Or by using symbolic representation for the permissions and who they apply to. Each of the permission types is represented by either a numeric equivalent:
  • 24. read=4, write=2, execute=1 or a single letter: read=r, write=w, execute=x A permission of 4 or r would specify read permissions. If the permissions desired are read and write, the 4 (representing read) and the 2 (representing write) are added together to make a permission of 6. Therefore, a permission setting of 6 would allow read and write permissions. Alternatively, you could use symbolic notation which uses the one letter representation for who and for the permissions and an operator, where the operator can be: + add permissions - remove permissions = set permissions So to set read and write for the owner we could use "u=rw" in symbolic notation. Syntax chmod nnn [argument list] numeric mode chmod [who]op[perm] [argument list] symbolic mode where nnn are the three numbers representing user, group, and other permissions, who is any of u, g, o, or a (all) and perm is any of r, w, x. In symbolic notation you can separate permission specifications by commas, as shown in the example below. Common Options -f force (no error message is generated if the change is unsuccessful) -R recursively descend through the directory structure and change the modes Examples If the permission desired for file1 is user: read, write, execute, group: read, execute, other: read, execute, the command to use would be chmod 755 file1 or chmod u=rwx,go=rx file1
  • 25. Reminder: When giving permissions to group and other to use a file, it is necessary to allow at least execute permission to the directories for the path in which the file is located. The easiest way to do this is to be in the directory for which permissions need to be granted: chmod 711 . or chmod u=rw,+x . or chmod u=rwx,go=x . where the dot (.) indicates this directory. Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands 3.7.6 chown - change ownership Ownership of a file can be changed with the chown command. On most versions of Unix this can only be done by the super-user, i.e. a normal user can't give away ownership of their files. chown is used as below, where # represents the shell prompt for the super- user: Syntax chown [options] user[:group] file (SVR4) chown [options] user[.group] file (BSD) Common Options -R recursively descend through the directory structure -f force, and don't report any errors Examples # chown new_owner file Introduction to Unix - 14 AUG 1996 3.7 File Maintenance Commands 3.7.7 chgrp - change group Anyone can change the group of files they own, to another group they belong to, with the chgrp command.
  • 26. Syntax chgrp [options] group file Common Options -R recursively descend through the directory structure -f force, and don't report any errors Examples % chgrp new_group file Introduction to Unix - 14 AUG 1996 CHAPTER 3 Getting Started 3.8 Display Commands There are a number of commands you can use to display or view a file. Some of these are editors which we will look at later. Here we will illustrate some of the commands normally used to display a file. Display Commands Command/Syntax What it will do cat [options] file concatenate (list) a file echo [text string] echo the text string to stdout head [-number] file display the first 10 (or number of) lines of a file more (or less or pg) [options] file page through a text file tail [options] file display the last few lines (or parts) of a file 3.8.1 - echo - echo a statement 3.8.2 - cat - concatenate a file 3.8.3 - more, less, and pg - page through a file 3.8.4 - head - display the start of a file 3.8.5 - tail - display the end of a file Introduction to Unix - 14 AUG 1996 3.8 Display Commands 3.8.1 echo - echo a statement
  • 27. The echo command is used to repeat, or echo, the argument you give it back to the standard output device. It normally ends with a line-feed, but you can specify an option to prevent this. Syntax echo [string] Common Options -n don't print <new-line> (BSD, shell built-in) c don't print <new-line> (SVR4) 0n where n is the 8-bit ASCII character code (SVR4) t tab (SVR4) f form-feed (SVR4) n new-line (SVR4) v vertical tab (SVR4) Examples % echo Hello Class or echo "Hello Class" To prevent the line feed: % echo -n Hello Class or echo "Hello Class c" where the style to use in the last example depends on the echo command in use. The x options must be within pairs of single or double quotes, with or without other string characters. Introduction to Unix - 14 AUG 1996 3.8 Display Commands 3.8.2 cat - concatenate a file Display the contents of a file with the concatenate command, cat.
  • 28. Syntax cat [options] [file] Common Options -n precede each line with a line number -v display non-printing characters, except tabs, new-lines, and form-feeds -e display $ at the end of each line (prior to new-line) (when used with -v option) Examples % cat filename You can list a series of files on the command line, and cat will concatenate them, starting each in turn, immediately after completing the previous one, e.g.: % cat file1 file2 file3 Introduction to Unix - 14 AUG 1996 3.8 Display Commands 3.8.3 more, less, and pg - page through a file more, less, and pg let you page through the contents of a file one screenful at a time. These may not all be available on your Unix system. They allow you to back up through the previous pages and search for words, etc. Syntax more [options] [+/pattern] [filename] less [options] [+/pattern] [filename] pg [options] [+/pattern] [filename] Options more less pg Action
  • 29. -c -c -c clear display before displaying -i ignore case -w default default don't exit at end of input, but prompt and wait -lines -lines # of lines/screenful +/pattern +/pattern +/pattern search for the pattern Internal Controls more displays (one screen at a time) the file requested <space bar> to view next screen <return> or <CR> to view one more line q to quit viewing the file h help b go back up one screenful /word search for word in the remainder of the file See the man page for additional options less similar to more; see the man page for options pg the SVR4 equivalent of more (page) Introduction to Unix - 14 AUG 1996 3.8 Display Commands 3.8.4 head - display the start of a file head displays the head, or start, of the file. Syntax head [options] file Common Options -n number number of lines to display, counting from the top of the file -number same as above Examples
  • 30. By default head displays the first 10 lines. You can display more with the "-n number", or "-number" options, e.g., to display the first 40 lines: % head -40 filename or head -n 40 filename Introduction to Unix - 14 AUG 1996 3.8 Display Commands 3.8.5 tail - display the end of a file tail displays the tail, or end, of the file. Syntax tail [options] file Common Options -number number of lines to display, counting from the bottom of the file Examples The default is to display the last 10 lines, but you can specify different line or byte numbers, or a different starting point within the file. To display the last 30 lines of a file use the -number style: % tail -30 filename Introduction to Unix - 14 AUG 1996 URL: http://wks.uts.ohio-state.edu/unix_course/intro-1.html#HEADING1-36 CHAPTER 4 System Resources & Printing: CHAPTER 4 System Resources & Printing 4.1 System Resources Commands to report or manage system resources. System Resource Commands
  • 31. Command/Syntax What it will do chsh (passwd -e/-s) username login_shell change the user's login shell (often only by the superuser) date [options] report the current date and time df [options] [resource] report the summary of disk blocks and inodes free and in use du [options] [directory or file] report amount of disk space in use+ hostname/uname display or set (super-user only) the name of the current machine kill [options] [-SIGNAL] [pid#] [%job] send a signal to the process with the process id number (pid#) or job control number (%n). The default signal is to kill the process. man [options] command show the manual (man) page for a command passwd [options] set or change your password ps [options] show status of active processes script file saves everything that appears on the screen to file until exit is executed stty [options] set or display terminal control options whereis [options] command report the binary, source, and man page locations for the command named which command reports the path to the command or the shell alias in use who or w report who is logged in and what processes are running 4.1.1 - df - summarize disk block and file usage 4.1.2 - du - report disk space in use 4.1.3 - ps - show status of active processes 4.1.4 - kill - terminate a process 4.1.5 - who - list current users 4.1.6 - whereis - report program locations 4.1.7 - which - report the command found 4.1.8 - hostname/uname - name of machine 4.1.9 - script - record your screen I/O 4.1.10 - date - current date and time Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.1 df - summarize disk block and file usage
  • 32. df is used to report the number of disk blocks and inodes used and free for each file system. The output format and valid options are very specific to the OS and program version in use. Syntax df [options] [resource] Common Options -l local file systems only (SVR4) -k report in kilobytes (SVR4) Examples {unix prompt 1} df Filesystem kbytes used avail capacity Mounted on /dev/sd0a 20895 19224 0 102% / /dev/sd0h 319055 131293 155857 46% /usr /dev/sd1g 637726 348809 225145 61% /usr/local /dev/sd1a 240111 165489 50611 77% /home/guardian peri:/usr/local/backup 1952573 976558 780758 56% /usr/local/backup peri:/home/peri 726884 391189 263007 60% /home/peri peri:/usr/spool/mail 192383 1081 172064 1% /var/spool/mail peri:/acs/peri/2 723934 521604 129937 80% /acs/peri/2 Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.2 du - report disk space in use
  • 33. du reports the amount of disk space in use for the files or directories you specify. Syntax du [options] [directory or file] Common Options -a display disk usage for each file, not just subdirectories -s display a summary total only -k report in kilobytes (SVR4) Examples {unix prompt 3} du 1 ./.elm 1 ./Mail 1 ./News 20 ./uc 86 . {unix prompt 4} du -a uc 7 uc/unixgrep.txt 5 uc/editors.txt 1 uc/.emacs 1 uc/.exrc 4 uc/telnet.ftp 1 uc/uniq.tee.txt 20 uc Introduction to Unix - 14 AUG 1996
  • 34. 4.1 System Resources 4.1.3 ps - show status of active processes ps is used to report on processes currently running on the system. The output format and valid options are very specific to the OS and program version in use. Syntax ps [options] Common Options BSD SVR4 -a -e all processes, all users -e environment/everything -g process group leaders as well -l -l long format -u -u user user oriented report -x -e even processes not executed from terminals -f full listing -w report first 132 characters per line note -- Because the ps command is highly system-specific, it is recommended that you consult the man pages of your system for details of options and interpretation of ps output. Examples {unix prompt 5} ps PID TT STAT TIME COMMAND 15549 p0 IW 0:00 -tcsh (tcsh) 15588 p0 IW 0:00 man nice
  • 35. 15594 p0 IW 0:00 sh -c less /tmp/man15588 15595 p0 IW 0:00 less /tmp/man15588 15486 p1 S 0:00 -tcsh (tcsh) 15599 p1 T 0:00 emacs unixgrep.txt 15600 p1 R 0:00 ps Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.4 kill - terminate a process kill sends a signal to a process, usually to terminate it. Syntax kill [-signal] process-id Common Options -l displays the available kill signals: Examples {unix prompt 9} kill -l HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST USR1 USR2 The -KILL signal, also specified as -9 (because it is 9th on the above list), is the most commonly used kill signal. Once seen, it can't be ignored by the program whereas the other signals can. {unix prompt 10} kill -9 15599 [1] + Killed emacs unixgrep.txt
  • 36. Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.5 who - list current users who reports who is logged in at the present time. Syntax who [am i] Examples beauty condron>who wmtell ttyp1 Apr 21 20:15 (apple.acs.ohio-s) fbwalk ttyp2 Apr 21 23:21 (worf.acs.ohio-st) stwang ttyp3 Apr 21 23:22 (127.99.25.8) david ttyp4 Apr 21 22:27 (slip1-61.acs.ohi) tgardner ttyp5 Apr 21 23:07 (picard.acs.ohio-) awallace ttyp6 Apr 21 23:00 (ts31-4.homenet.o) gtl27 ttyp7 Apr 21 23:24 (data.acs.ohio-st) ccchang ttyp8 Apr 21 23:32 (slip3-10.acs.ohi) condron ttypc Apr 21 23:38 (lcondron-mac.acs) dgildman ttype Apr 21 22:30 (slip3-36.acs.ohi) fcbetz ttyq2 Apr 21 21:12 (ts24-10.homenet.) beauty condron>who am i beauty!condron ttypc Apr 21 23:38 (lcondron-mac.acs) Introduction to Unix - 14 AUG 1996
  • 37. 4.1 System Resources 4.1.6 whereis - report program locations whereis reports the filenames of source, binary, and manual page files associated with command(s). Syntax whereis [options] command(s) Common Options -b report binary files only -m report manual sections only -s report source files only Examples brigadier: condron [69]> whereis Mail Mail: /usr/ucb/Mail /usr/lib/Mail.help /usr/lib/Mail.rc /usr/man/man1/Mail.1 brigadier: condron [70]> whereis -b Mail Mail: /usr/ucb/Mail /usr/lib/Mail.help /usr/lib/Mail.rc brigadier: condron [71]> whereis -m Mail Mail: /usr/man/man1/Mail.1 Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.7 which - report the command found which will report the name of the file that is be executed when the command is invoked. This will be the full path name or the alias that's found first in your path. Syntax
  • 38. which command(s) example-- brigadier: condron [73]> which Mail /usr/ucb/Mail Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.8 hostname/uname - name of machine hostname (uname -n on SysV) reports the host name of the machine the user is logged into, e.g.: brigadier: condron [91]> hostname brigadier uname has additional options to print information about system hardware type and software version. Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.9 script - record your screen I/O script creates a script of your session input and output. Using the script command, you can capture all the data transmission from and to your terminal screen until you exit the script program. This can be useful during the programming-and-debugging process, to document the combination of things you have tried, or to get a printed copy of it all for later perusal. Syntax script [-a] [file] <. . .> exit Common Options
  • 39. -a append the output to file typescript is the name of the default file used by script. You must remember to type exit to end your script session and close your typescript file. Examples beauty condron>script Script started, file is typescript beauty condron>ps PID TT STAT TIME COMMAND 23323 p8 S 0:00 -h -i (tcsh) 23327 p8 R 0:00 ps 18706 pa S 0:00 -tcsh (tcsh) 23315 pa T 0:00 emacs 23321 pa S 0:00 script 23322 pa S 0:00 script 3400 pb I 0:00 -tcsh (tcsh) beauty condron>kill -9 23315 beauty condron>date Mon Apr 22 22:29:44 EDT 1996 beauty condron>exit exit Script done, file is typescript [1] + Killed emacs beauty condron>cat typescript
  • 40. Script started on Mon Apr 22 22:28:36 1996 beauty condron>ps PID TT STAT TIME COMMAND 23323 p8 S 0:00 -h -i (tcsh) 23327 p8 R 0:00 ps 18706 pa S 0:00 -tcsh (tcsh) 23315 pa T 0:00 emacs 23321 pa S 0:00 script 23322 pa S 0:00 script 3400 pb I 0:00 -tcsh (tcsh) beauty condron>kill -9 23315 beauty condron>date Mon Apr 22 22:29:44 EDT 1996 beauty condron>exit exit script done on Mon Apr 22 22:30:02 1996 beauty condron> Introduction to Unix - 14 AUG 1996 4.1 System Resources 4.1.10 date - current date and time date displays the current data and time. A superuser can set the date and time. Syntax
  • 41. date [options] [+format] Common Options -u use Universal Time (or Greenwich Mean Time) +format specify the output format %a weekday abbreviation, Sun to Sat %h month abbreviation, Jan to Dec %j day of year, 001 to 366 %n <new-line> %t <TAB> %y last 2 digits of year, 00 to 99 %D MM/DD/YY date %H hour, 00 to 23 %M minute, 00 to 59 %S second, 00 to 59 %T HH:MM:SS time Examples beauty condron>date Mon Jun 10 09:01:05 EDT 1996 beauty condron>date -u Mon Jun 10 13:01:33 GMT 1996 beauty condron>date +%a%t%D Mon 06/10/96 beauty condron>date '+%y:%j'
  • 42. 96:162 Introduction to Unix - 14 AUG 1996 CHAPTER 4 System Resources & Printing 4.2 Print Commands Printing Commands Command/Syntax What it will do lpq (lpstat) [options] show the status of print jobs lpr (lp) [options] file print to defined printer lprm (cancel) [options] remove a print job from the print queue pr [options] [file] filter the file and print it on the terminal The print commands allow us to print files to standard output (pr) or to a line printer (lp/lpr) while filtering the output. The BSD and SysV printer commands use different names and different options to produce the same results: lpr, lprm, and lpq vs lp, cancel, and lpstat for the BSD and SysV submit, cancel, and check the status of a print job, respectively. 4.2.1 - lp/lpr - submit a print job 4.2.2 - lpstat/lpq - check the status of a print job 4.2.3 - cancel/lprm - cancel a print job 4.2.4 - pr - prepare files for printing Introduction to Unix - 14 AUG 1996 4.2 Print Commands 4.2.1 lp/lpr - submit a print job lp and lpr submit the specified file, or standard input, to the printer daemon to be printed. Each job is given a unique request-id that can be used to follow or cancel the job while it's in the queue. Syntax lp [options] filename lpr [options] filename
  • 43. Common Options lp lpr function -n number -#number number of copies -t title -Ttitle title for job -d destination -Pprinter printer name -c (default) copy file to queue before printing (default) -s don't copy file to queue before printing -o option additional options, e.g. nobanner Files beginning with the string "%!" are assumed to contain PostScript commands. Examples To print the file ssh.ps: % lp ssh.ps request id is lp-153 (1 file(s)) This submits the job to the queue for the default printer, lp, with the request-id lp-153. Introduction to Unix - 14 AUG 1996 4.2 Print Commands 4.2.2 lpstat/lpq - check the status of a print job You can check the status of your print job with lpstat or lpq. Syntax lpstat [options] lpq [options] [job#] [username] Common Options
  • 44. lpstat lpq function -d (defaults to lp) list system default destination -s summarize print status -t print all status information -u [login-ID-list] user list -v list printers known to the system -p printer_dest -Pprinter_dest list status of printer, printer_dest Examples % lpstat lp-153 frank 208068 Apr 29 15:14 on lp Introduction to Unix - 14 AUG 1996 4.2 Print Commands 4.2.3 cancel/lprm - cancel a print job Any user can cancel only heir own print jobs. Syntax cancel [request-ID] [printer] lprm [options] [job#] [username] Common Options cancel lprm function -Pprinter specify printer - all jobs for user -u [login-ID-list] user list
  • 45. Examples To cancel the job submitted above: % cancel lp-153 Introduction to Unix - 14 AUG 1996 4.2 Print Commands 4.2.4 pr - prepare files for printing pr prints header and trailer information surrounding the formatted file. You can specify the number of pages, lines per page, columns, line spacing, page width, etc. to print, along with header and trailer information and how to treat <tab> characters. Syntax pr [options] file Common Options +page_number start printing with page page_number of the formatted input file -column number of columns -a modify -column option to fill columns in round-robin order -d double spacing -e[char][gap] tab spacing -h header_string header for each page -l lines lines per page -t don't print the header and trailer on each page -w width width of page Examples
  • 46. The file containing the list of P. G. Wodehouse's Lord Emsworth books could be printed, at 14 lines per page (including 5 header and 5 (empty) trailer lines) below, where the -e option specifies the <tab> conversion style: % pr -l 14 -e42 wodehouse Apr 29 11:11 1996 wodehouse_emsworth_books Page 1 Something Fresh [1915] Uncle Dynamite [1948] Leave it to Psmith [1923] Pigs Have Wings [1952] Summer Lightning [1929] Cocktail Time [1958] Heavy Weather [1933] Service with a Smile [1961] Apr 29 11:11 1996 wodehouse_emsworth_books Page 2 Blandings Castle and Elsewhere [1935] Galahad at Blandings [1965] Uncle Fred in the Springtime [1939] A Pelican at Blandings [1969] Full Moon [1947] Sunset at Blandings [1977] Introduction to Unix - 14 AUG 1996 Introduction to Unix CHAPTER 5 Shells The shell sits between you and the operating system, acting as a command interpreter. It reads your terminal input and translates the commands into actions taken by the system. The shell is analogous to command.com in DOS. When you log into the system you are given a default shell. When the shell starts up it reads its startup files and may set environment variables, command search paths, and command aliases, and executes any commands specified in these files. The original shell was the Bourne shell, sh. Every Unix platform will either have the Bourne shell, or a Bourne compatible shell available. It has very good features for controlling input and output, but is not well suited for the interactive user. To meet the latter need the C shell, csh, was written and is now found on most, but not all, Unix systems. It uses C type syntax, the language Unix is written in, but has a more awkward input/output implementation. It has job control, so that you can reattach a job running in
  • 47. the background to the foreground. It also provides a history feature which allows you to modify and repeat previously executed commands. The default prompt for the Bourne shell is $ (or #, for the root user). The default prompt for the C shell is %. Numerous other shells are available from the network. Almost all of them are based on either sh or csh with extensions to provide job control to sh, allow in-line editing of commands, page through previously executed commands, provide command name completion and custom prompt, etc. Some of the more well known of these may be on your favorite Unix system: the Korn shell, ksh, by David Korn and the Bourne Again SHell, bash, from the Free Software Foundations GNU project, both based on sh, the T- C shell, tcsh, and the extended C shell, cshe, both based on csh. Below we will describe some of the features of sh and csh so that you can get started. 5.1 - Built-in Commands 5.2 - Environment Variables 5.3 - The Bourne Shell, sh 5.4 - The C Shell, csh 5.5 - Job Control 5.6 - History 5.7 - Changing your Shell Introduction to Unix - 14 AUG 1996 CHAPTER 5 Shells 5.1 Built-in Commands The shells have a number of built-in, or native commands. These commands are executed directly in the shell and don't have to call another program to be run. These built-in commands are different for the different shells. 5.1.1 - Sh 5.1.2 - Csh Introduction to Unix - 14 AUG 1996 5.1 Built-in Commands 5.1.1 Sh For the Bourne shell some of the more commonly used built-in commands are: : null command . source (read and execute) commands from a file
  • 48. case case conditional loop cd change the working directory (default is $HOME) echo write a string to standard output eval evaluate the given arguments and feed the result back to the shell exec execute the given command, replacing the current shell exit exit the current shell export share the specified environment variable with subsequent shells for for conditional loop if if conditional loop pwd print the current working directory read read a line of input from stdin set set variables for the shell test evaluate an expression as true or false trap trap for a typed signal and execute commands umask set a default file permission mask for new files unset unset shell variables wait wait for a specified process to terminate while while conditional loop Introduction to Unix - 14 AUG 1996 5.1 Built-in Commands 5.1.2 Csh For the C shell the more commonly used built-in functions are:
  • 49. alias assign a name to a function bg put a job into the background cd change the current working directory echo write a string to stdout eval evaluate the given arguments and feed the result back to the shell exec execute the given command, replacing the current shell exit exit the current shell fg bring a job to the foreground foreach for conditional loop glob do filename expansion on the list, but no "" escapes are honored history print the command history of the shell if if conditional loop jobs list or control active jobs kill kill the specified process limit set limits on system resources logout terminate the login shell nice command lower the scheduling priority of the process, command nohup command do not terminate command when the shell exits popd pop the directory stack and return to that directory pushd change to the new directory specified and add the current one to the directory stack rehash recreate the hash table of paths to executable files repeat repeat a command the specified number of times set set a shell variable
  • 50. setenv set an environment variable for this and subsequent shells source source (read and execute) commands from a file stop stop the specified background job switch switch conditional loop umask set a default file permission mask for new files unalias remove the specified alias name unset unset shell variables unsetenv unset shell environment variables wait wait for all background processes to terminate while while conditional loop Introduction to Unix - 14 AUG 1996 CHAPTER 5 Shells 5.2 Environment Variables Environmental variables are used to provide information to the programs you use. You can have both global environment and local shell variables. Global environment variables are set by your login shell and new programs and shells inherit the environment of their parent shell. Local shell variables are used only by that shell and are not passed on to other processes. A child process cannot pass a variable back to its parent process. The current environment variables are displayed with the "env" or "printenv" commands. Some common ones are: • DISPLAY The graphical display to use, e.g. nyssa:0.0 • EDITOR The path to your default editor, e.g. /usr/bin/vi • GROUP Your login group, e.g. staff • HOME Path to your home directory, e.g. /home/frank • HOST The hostname of your system, e.g. nyssa • IFS Internal field separators, usually any white space (defaults to tab, space and <newline>) • LOGNAME The name you login with, e.g. frank • PATH Paths to be searched for commands, e.g. /usr/bin:/usr/ucb:/usr/local/bin
  • 51. • PS1 The primary prompt string, Bourne shell only (defaults to $) • PS2 The secondary prompt string, Bourne shell only (defaults to >) • SHELL The login shell you're using, e.g. /usr/bin/csh • TERM Your terminal type, e.g. xterm • USER Your username, e.g. frank Many environment variables will be set automatically when you login. You can modify them or define others with entries in your startup files or at anytime within the shell. Some variables you might want to change are PATH and DISPLAY. The PATH variable specifies the directories to be automatically searched for the command you specify. Examples of this are in the shell startup scripts below. You set a global environment variable with a command similar to the following for the C shell: % setenv NAME value and for Bourne shell: $ NAME=value; export NAME You can list your global environmental variables with the env or printenv commands. You unset them with the unsetenv (C shell) or unset (Bourne shell) commands. To set a local shell variable use the set command with the syntax below for C shell. Without options set displays all the local variables. % set name=value For the Bourne shell set the variable with the syntax: $ name=value The current value of the variable is accessed via the "$name", or "${name}", notation. Introduction to Unix - 14 AUG 1996 CHAPTER 5 Shells 5.3 The Bourne Shell, sh Sh uses the startup file .profile in your home directory. There may also be a system-wide startup file, e.g. /etc/profile. If so, the system-wide one will be sourced (executed) before your local one.
  • 52. A simple .profile could be the following: PATH=/usr/bin:/usr/ucb:/usr/local/bin:. # set the PATH export PATH # so that PATH is available to subshells # Set a prompt PS1="{`hostname` `whoami`} " # set the prompt, default is "$" # functions ls() { /bin/ls -sbF "$@";} ll() { ls -al "$@";} # Set the terminal type stty erase ^H # set Control-H to be the erase key eval `tset -Q -s -m ':?xterm'` # prompt for the terminal type, assume xterm # umask 077 Whenever a # symbol is encountered the remainder of that line is treated as a comment. In the PATH variable each directory is separated by a colon (:) and the dot (.) specifies that the current directory is in your path. If the latter is not set it's a simple matter to execute a program in the current directory by typing: ./program_name It's actually a good idea not to have dot (.) in your path, as you may inadvertently execute a program you didn't intend to when you cd to different directories. A variable set in .profile is set only in the login shell unless you "export" it or source .profile from another shell. In the above example PATH is exported to any subshells. You can source a file with the built-in "." command of sh, i.e.: . ./.profile You can make your own functions. In the above example the function ll results in an "ls -al" being done on the specified files or directories.
  • 53. With stty the erase character is set to Control-H (^H), which is usually the Backspace key. The tset command prompts for the terminal type, and assumes "xterm" if we just hit <CR>. This command is run with the shell built-in, eval, which takes the result from the tset command and uses it as an argument for the shell. In this case the "-s" option to tset sets the TERM and TERMCAP variables and exports them. The last line in the example runs the umask command with the option such that any files or directories you create will not have read/write/execute permission for group and other. For further information about sh type "man sh" at the shell prompt. Introduction to Unix - 14 AUG 1996 CHAPTER 5 Shells 5.4 The C Shell, csh Csh uses the startup files .cshrc and .login. Some versions use a system-wide startup file, e.g. /etc/csh.login. Your .login file is sourced (executed) only when you login. Your .cshrc file is sourced every time you start a csh, including when you login. It has many similar features to .profile, but a different style of doing things. Here we use the set or setenv commands to initialize a variable, where set is used for this shell and setenv for this and any subshells. The environment variables: USER, TERM, and PATH, are automatically imported to and exported from the user, term, and path variables of the csh. So setenv doesn't need to be done for these. The C shell uses the symbol, ~, to indicate the user's home directory in a path, as in ~/.cshrc, or to specify another user's login directory, as in ~username/.cshrc. Predefined variables used by the C shell include: • argv The list of arguments of the current shell • cwd The current working directory • history Sets the size of the history list to save • home The home directory of the user; starts with $HOME • ignoreeof When set ignore EOF (^D) from terminals • noclobber When set prevent output redirection from overwriting existing files • noglob When set prevent filename expansion with wildcard pattern matching • path The command search path; starts with $PATH • prompt Set the command line prompt (default is %) • savehist number of lines to save in the history list to save in the .history file • shell The full pathname of the current shell; starts with $SHELL
  • 54. • status The exit status of the last command (0=normal exit, 1=failed command) • term Your terminal type, starts with $TERM • user Your username, starts with $USER A simple .cshrc could be: set path=(/usr/bin /usr/ucb /usr/local/bin ~/bin . ) # set the path set prompt = "{'hostname' 'whoami' !} " # set the primary prompt; default is "%" set noclobber # don't redirect output to existing files set ignoreeof # ignore EOF (^D) for this shell set history=100 savehist=50 # keep a history list and save it between logins # aliases alias h history # alias h to "history" alias ls "/usr/bin/ls -sbF" # alias ls to "ls -sbF" alias ll ls -al # alias ll to "ls -sbFal" (combining these options with those for "ls" above) alias cd 'cd !*;pwd' # alias cd so that it prints the current working directory after the change umask 077 Some new features here that we didn't see in .profile are noclobber, ignoreeof, and history. Noclobber indicates that output will not be redirected to existing files, while ignoreeof specifies that EOF (^D) will not cause the login shell to exit and log you off the system. With the history feature you can recall previously executed commands and re-execute them, with changes if desired. An alias allows you to use the specified alias name instead of the full command. In the "ls" example above, typing "ls" will result in "/usr/bin/ls -sbF" being executed. You can tell which "ls" command is in your path with the built-in which command, i.e.: which ls ls: aliased to /usr/bin/ls -sbF A simple .login could be:
  • 55. # .login stty erase ^H # set Control-H to be the erase key set noglob # prevent wild card pattern matching eval 'tset -Q -s -m ':?xterm'' # prompt for the terminal type, assume "xterm" unset noglob # re-enable wild card pattern matching Setting and unsetting noglob around tset prevents it from being confused by any csh filename wild card pattern matching or expansion. Should you make any changes to your startup files you can initiate the change by sourcing the changed file. For csh you do this with the built-in source command, i.e.: source .cshrc For further information about csh type "man csh" at the shell prompt. Introduction to Unix - 14 AUG 1996 CHAPTER 5 Shells 5.5 Job Control With the C shell, csh, and many newer shells including some newer Bourne shells, you can put jobs into the background at anytime by appending "&" to the command, as with sh. After submitting a command you can also do this by typing ^Z (Control-Z) to suspend the job and then "bg" to put it into the background. To bring it back to the foreground type "fg". You can have many jobs running in the background. When they are in the background they are no longer connected to the keyboard for input, but they may still display output to the terminal, interspersing with whatever else is typed or displayed by your current job. You may want to redirect I/O to or from files for the job you intend to background. Your keyboard is connected only to the current, foreground, job. The built-in jobs command allows you to list your background jobs. You can use the kill command to kill a background job. With the %n notation you can reference the nth background job with either of these commands, replacing n with the job number from the output of jobs. So kill the second background job with "kill %2" and bring the third job to the foreground with "fg %3".
  • 56. Introduction to Unix - 14 AUG 1996 CHAPTER 5 Shells 5.6 History The C shell, the Korn shell and some other more advanced shells, retain information about the former commands you've executed in the shell. How history is done will depend on the shell used. Here we'll describe the C shell history features. You can use the history and savehist variables to set the number of previously executed commands to keep track of in this shell and how many to retain between logins, respectively. You could put a line such as the following in .cshrc to save the last 100 commands in this shell and the last 50 through the next login. set history=100 savehist=50 The shell keeps track of the history list and saves it in ~/.history between logins. You can use the built-in history command to recall previous commands, e.g. to print the last 10: % history 10 52 cd workshop 53 ls 54 cd unix_intro 55 ls 56 pwd 57 date 58 w 59 alias 60 history 61 history 10
  • 57. You can repeat the last command by typing !!: % !! 53 ls 54 cd unix_intro 55 ls 56 pwd 57 date 58 w 59 alias 60 history 61 history 10 62 history 10 You can repeat any numbered command by prefacing the number with a !, e.g.: % !57 date Tue Apr 9 09:55:31 EDT 1996 Or repeat a command starting with any string by prefacing the starting unique part of the string with a !, e.g.: % !da date Tue Apr 9 09:55:31 EDT 1996 When the shell evaluates the command line it first checks for history substitution before it interprets anything else. Should you want to use one of these special characters in a shell command you will need to escape, or quote it first, with a before the character, i.e. !. The history substitution characters are summarized in the following table.
  • 58. C Shell History Substitution Command Substitution Function !! repeat last command !n repeat command number n !-n repeat command n from last !str repeat command that started with string str !?str? repeat command with str anywhere on the line !?str?% select the first argument that had str in it !: repeat the last command, generally used with a modifier !:n select the nth argument from the last command (n=0 is the command name) !:n-m select the nth through mth arguments from the last command !^ select the first argument from the last command (same as !:1) !$ select the last argument from the last command !* select all arguments to the previous command !:n* select the nth through last arguments from the previous command !:n- select the nth through next to last arguments from the previous command ^str1^str2^ replace str1 with str2 in its first occurrence in the previous command !n:s/str1/str2/ substitute str1 with str2 in its first occurrence in the nth command, ending with a g substitute globally Additional editing modifiers are described in the man page. CHAPTER 5 Shells 5.7 Changing your Shell To change your shell you can usually use the "chsh" or "passwd -e" commands. The option flag, here -e, may vary from system to system (-s on BSD based systems), so check the man page on your system for proper usage. Sometimes this feature is disabled. If you can't change your shell check with your System Administrator. The new shell must be the full path name for a valid shell on the system. Which shells are available to you will vary from system to system. The full path name of a shell may also vary. Normally, though, the Bourne and C shells are standard, and available as: /bin/sh
  • 59. /bin/csh Some systems will also have the Korn shell standard, normally as: /bin/ksh Some shells that are quite popular, but not normally distributed by the OS vendors are bash and tcsh. These might be placed in /bin or a locally defined directory, e.g. /usr/local/bin or /opt/local/bin. Should you choose a shell not standard to the OS make sure that this shell, and all login shells available on the system, are listed in the file /etc/shells. If this file exists and your shell is not listed in this file the file transfer protocol daemon, ftpd, will not let you connect to this machine. If this file does not exist only accounts with "standard" shells are allowed to connect via ftp. You can always try out a shell before you set it as your default shell. To do this just type in the shell name as you would any other command. Introduction to Unix - 14 AUG 1996 Introduction to Unix CHAPTER 6 Special Unix Features One of the most important contributions Unix has made to Operating Systems is the provision of many utilities for doing common tasks or obtaining desired information. Another is the standard way in which data is stored and transmitted in Unix systems. This allows data to be transmitted to a file, the terminal screen, or a program, or from a file, the keyboard, or a program; always in a uniform manner. The standardized handling of data supports two important features of Unix utilities: I/O redirection and piping. With output redirection, the output of a command is redirected to a file rather than to the terminal screen. With input redirection, the input to a command is given via a file rather than the keyboard. Other tricks are possible with input and output redirection as well, as you will see. With piping, the output of a command can be used as input (piped) to a subsequent command. In this chapter we discuss many of the features and utilities available to Unix users. 6.1 - File Descriptors 6.2 - File Redirection 6.3 - Other Special Command Symbols 6.4 - Wild Cards Introduction to Unix - 14 AUG 1996
  • 60. CHAPTER 6 Special Unix Features 6.1 File Descriptors There are 3 standard file descriptors: • stdin 0 Standard input to the program • stdout 1 Standard output from the program • stderr 2 Standard error output from the program Normally input is from the keyboard or a file. Output, both stdout and stderr, normally go to the terminal, but you can redirect one or both of these to one or more files. You can also specify additional file descriptors, designating them by a number 3 through 9, and redirect I/O through them. Introduction to Unix - 14 AUG 1996 CHAPTER 6 Special Unix Features 6.2 File Redirection Output redirection takes the output of a command and places it into a named file. Input redirection reads the file as input to the command. The following table summarizes the redirection options. File Redirection Symbol Redirection > output redirect >! same as above, but overrides noclobber option of csh >> append output >>! same as above, but overrides noclobber option on csh and creates the file if it doesn't already exist. | pipe output to another command < input redirection <<String read from standard input until "String" is encountered as the only thing on the line. Also known as a "here document" (see Chapter 8). <<String same as above, but don't allow shell substitutions An example of output redirection is:
  • 61. cat file1 file2 > file3 The above command concatenates file1 then file2 and redirects (sends) the output to file3. If file3 doesn't already exist it is created. If it does exist it will either be truncated to zero length before the new contents are inserted, or the command will be rejected, if the noclobber option of the csh is set. (See the csh in Chapter 4). The original files, file1 and file2, remain intact as separate entities. Output is appended to a file in the form: cat file1 >> file2 This command appends the contents of file1 to the end of what already exists in file2. (Does not overwrite file2). Input is redirected from a file in the form: program < file This command takes the input for program from file. To pipe output to another command use the form: command | command This command makes the output of the first command the input of the second command. 6.2.1 - Csh 6.2.2 - Sh Introduction to Unix - 14 AUG 1996 CHAPTER 6 Special Unix Features 6.3 Other Special Command Symbols In addition to file redirection symbols there are a number of other special symbols you can use on a command line. These include: ; command separator & run the command in the background
  • 62. && run the command following this only if the previous command completes successfully, e.g.: grep string file && cat file || run the command following only if the previous command did not complete successfully, e.g.: grep string file || echo "String not found." ( ) the commands within the parentheses are executed in a subshell. The output of the subshell can be manipulated as above. ' ' literal quotation marks. Don't allow any special meaning to any characters within these quotations. escape the following character (take it literally) " " regular quotation marks. Allow variable and command substitution with theses quotations (does not disable $ and within the string). 'command' take the output of this command and substitute it as an argument(s) on the command line # everything following until <newline> is a comment The character can also be used to escape the <newline> character so that you can continue a long command on more than one physical line of text. Introduction to Unix - 14 AUG 1996 CHAPTER 6 Special Unix Features 6.4 Wild Cards The shell and some text processing programs will allow meta-characters, or wild cards, and replace them with pattern matches. For filenames these meta-characters and their uses are: ? match any single character at the indicated position * match any string of zero or more characters [abc...] match any of the enclosed characters
  • 63. [a-e] match any characters in the range a,b,c,d,e [!def] match any characters not one of the enclosed characters, sh only {abc,bcd,cde} match any set of characters separated by comma (,) (no spaces), csh only ~ home directory of the current user, csh only ~user home directory of the specified user, csh only Introduction to Unix - 14 AUG 1996 Introduction to Unix CHAPTER 7 Text Processing 7.1 - Regular Expression Syntax 7.2 - Text Processing Commands Introduction to Unix - 14 AUG 1996 CHAPTER 7 Text Processing 7.1 Regular Expression Syntax Some text processing programs, such as grep, egrep, sed, awk and vi, let you search on patterns instead of fixed strings. These text patterns are known as regular expressions. You form a regular expression by combining normal characters and special characters, also known as meta-characters, with the rules below. With these regular expressions you can do pattern matching on text data. Regular expressions come in three different forms: • Anchors which tie the pattern to a location on the line • Character sets which match a character at a single position • Modifiers which specify how many times to repeat the previous expression Regular expression syntax is as follows. Some programs will accept all of these, others may only accept some. . match any single character except <newline> * match zero or more instances of the single character (or meta-character) immediately preceding it [abc] match any of the characters enclosed
  • 64. [a-d] match any character in the enclosed range [^exp] match any character not in the following expression ^abc the regular expression must start at the beginning of the line (Anchor) abc$ the regular expression must end at the end of the line (Anchor) treat the next character literally. This is normally used to escape the meaning of special characters such as "." and "*". {n,m} match the regular expression preceding this a minimum number of n times and a maximum of m times (0 through 255 are allowed for n and m). The { and } sets should be thought of as single operators. In this case the preceding the bracket does not escape its special meaning, but rather turns on a new one. <abc> will match the enclosed regular expression as long as it is a separate word. Word boundaries are defined as beginning with a <newline> or anything except a letter, digit or underscore (_) or ending with the same or a end-of-line character. Again the < and > sets should be thought of as single operators. (abc) saves the enclosed pattern in a buffer. Up to nine patterns can be saved for each line. You can reference these latter with the n character set. Again the ( and ) sets should be thought of as single operators. n where n is between 1 and 9. This matches the nth expression previously saved for this line. Expressions are numbered starting from the left. The n should be thought of as a single operator. & print the previous search pattern (used in the replacement string) There are a few meta-characters used only by awk and egrep. These are: + match one or more of the preceding expression ? match zero or more of the preceding expression | separator. Match either the preceding or following expression. ( ) group the regular expressions within and apply the match to the set. Some examples of the more commonly used regular expressions are: regular expression matches
  • 65. cat the string cat .at any occurrence of a letter, followed by at, such as cat, rat, mat, bat, fat, hat xy*z any occurrence of an x, followed by zero or more y's, followed by a z. ^cat cat at the beginning of the line cat$ cat at the end of the line * any occurrence of an asterisk [cC]at cat or Cat [^a-zA-Z] any occurrence of a non-alphabetic character [0-9]$ any line ending with a number [A-Z][A-Z]* one or more upper case letters [A-Z]* zero or more upper case letters (In other words, anything.) Introduction to Unix - 14 AUG 1996 CHAPTER 7 Text Processing 7.2 Text Processing Commands Text Processing Commands Command/Syntax What it will do awk/nawk [options] file scan for patterns in a file and process the results grep/egrep/fgrep [options] 'search string' file search the argument (in this case probably a file) for all occurrences of the search string, and list them. sed [options] file stream editor for editing files from a script or from the command line 7.2.1 - grep 7.2.2 - sed 7.2.3 - awk, nawk, gawk Introduction to Unix - 14 AUG 1996 7.2 Text Processing Commands
  • 66. 7.2.1 grep This section provides an introduction to the use of regular expressions and grep. The grep utility is used to search for generalized regular expressions occurring in Unix files. Regular expressions, such as those shown above, are best specified in apostrophes (or single quotes) when specified in the grep utility. The egrep utility provides searching capability using an extended set of meta-characters. The syntax of the grep utility, some of the available options, and a few examples are shown below. Syntax grep [options] regexp [file[s]] Common Options -i ignore case -c report only a count of the number of lines containing matches, not the matches themselves -v invert the search, displaying only lines that do not match -n display the line number along with the line on which a match was found -s work silently, reporting only the final status: 0, for match(es) found 1, for no matches 2, for errors -l list filenames, but not lines, in which matches were found Examples Consider the following file: {unix prompt 5} cat num.list 1 15 fifteen 2 14 fourteen
  • 67. 3 13 thirteen 4 12 twelve 5 11 eleven 6 10 ten 7 9 nine 8 8 eight 9 7 seven 10 6 six 11 5 five 12 4 four 13 3 three 14 2 two 15 1 one Here are some grep examples using this file. In the first we'll search for the number 15: {unix prompt 6} grep '15' num.list 1 15 fifteen 15 1 one Now we'll use the "-c" option to count the number of lines matching the search criterion: 7.2 Text Processing Commands 7.2.2 sed The non-interactive, stream editor, sed, edits the input stream, line by line, making the specified changes, and sends the result to standard output. Syntax
  • 68. sed [options] edit_command [file] The format for the editing commands are: [address1[,address2]][function][arguments] where the addresses are optional and can be separated from the function by spaces or tabs. The function is required. The arguments may be optional or required, depending on the function in use. Line-number Addresses are decimal line numbers, starting from the first input line and incremented by one for each. If multiple input files are given the counter continues cumulatively through the files. The last input line can be specified with the "$" character. Context Addresses are the regular expression patterns enclosed in slashes (/). Commands can have 0, 1, or 2 comma-separated addresses with the following affects: # of addresses lines affected 0 every line of input 1 only lines matching the address 2 first line matching the first address and all lines until, and including, the line matching the second address. The process is then repeated on subsequent lines. Substitution functions allow context searches and are specified in the form: s/regular_expression_pattern/replacement_string/flag and should be quoted with single quotes (') if additional options or functions are specified. These patterns are identical to context addresses, except that while they are normally enclosed in slashes (/), any normal character is allowed to function as the delimiter, other than <space> and <newline>. The replacement string is not a regular expression pattern; characters do not have special meanings here, except: & substitute the string specified by regular_expression_pattern n substitute the nth string matched by regular_expression_pattern enclosed in '(', ')' pairs. These special characters can be escaped with a backslash () to remove their special meaning. Common Options
  • 69. -e script edit script -n don't print the default output, but only those lines specified by p or s///p functions -f script_file take the edit scripts from the file, script_file Valid flags on the substitution functions include: d delete the pattern g globally substitute the pattern p print the line Examples This example changes all incidents of a comma (,) into a comma followed by a space (, ) when doing output: % cat filey | sed s/,/, /g The following example removes all incidents of Jr preceded by a space ( Jr) in filey: % cat filey | sed s/ Jr//g To perform multiple operations on the input precede each operation with the -e (edit) option and quote the strings. For example, to filter for lines containing "Date: " and "From: " and replace these without the colon (:), try: sed -e 's/Date: /Date /' -e 's/From: /From /' To print only those lines of the file from the one beginning with "Date:" up to, and including, the one beginning with "Name:" try: sed -n '/^Date:/,/^Name:/p' To print only the first 10 lines of the input (a replacement for head): sed -n 1,10p Introduction to Unix - 14 AUG 1996 7.2 Text Processing Commands
  • 70. 7.2.3 awk, nawk, gawk awk is a pattern scanning and processing language. Its name comes from the last initials of the three authors: Alfred. V. Aho, Brian. W. Kernighan, and Peter. J. Weinberger. nawk is new awk, a newer version of the program, and gawk is gnu awk, from the Free Software Foundation. Each version is a little different. Here we'll confine ourselves to simple examples which should be the same for all versions. On some OSs awk is really nawk. awk searches its input for patterns and performs the specified operation on each line, or fields of the line, that contain those patterns. You can specify the pattern matching statements for awk either on the command line, or by putting them in a file and using the -f program_file option. Syntax awk program [file] where program is composed of one or more: pattern { action } fields. Each input line is checked for a pattern match with the indicated action being taken on a match. This continues through the full sequence of patterns, then the next line of input is checked. Input is divided into records and fields. The default record separator is <newline>, and the variable NR keeps the record count. The default field separator is whitespace, spaces and tabs, and the variable NF keeps the field count. Input field, FS, and record, RS, separators can be set at any time to match any single character. Output field, OFS, and record, ORS, separators can also be changed to any single character, as desired. $n, where n is an integer, is used to represent the nth field of the input record, while $0 represents the entire input record. BEGIN and END are special patterns matching the beginning of input, before the first field is read, and the end of input, after the last field is read, respectively. Printing is allowed through the print, and formatted print, printf, statements. Patterns may be regular expressions, arithmetic relational expressions, string-valued expressions, and boolean combinations of any of these. For the latter the patterns can be combined with the boolean operators below, using parentheses to define the combination: || or
  • 71. && and ! not Comma separated patterns define the range for which the pattern is applicable, e.g.: /first/,/last/ selects all lines starting with the one containing first, and continuing inclusively, through the one containing last. To select lines 15 through 20 use the pattern range: NR == 15, NR == 20 Regular expressions must be enclosed with slashes (/) and meta-characters can be escaped with the backslash (). Regular expressions can be grouped with the operators: | or, to separate alternatives + one or more ? zero or one A regular expression match can be either of: ~ contains the expression !~ does not contain the expression So the program: $1 ~ /[Ff]rank/ is true if the first field, $1, contains "Frank" or "frank" anywhere within the field. To match a field identical to "Frank" or "frank" use: $1 ~ /^[Ff]rank$/ Relational expressions are allowed using the relational operators: < less than <= less than or equal to == equal to
  • 72. >= greater than or equal to != not equal to > greater than Offhand you don't know if variables are strings or numbers. If neither operand is known to be numeric, than string comparisons are performed. Otherwise, a numeric comparison is done. In the absence of any information to the contrary, a string comparison is done, so that: $1 > $2 will compare the string values. To ensure a numerical comparison do something similar to: ( $1 + 0 ) > $2 The mathematical functions: exp, log and sqrt are built-in. Some other built-in functions include: index(s,t) returns the position of string s where t first occurs, or 0 if it doesn't length(s) returns the length of string s substr(s,m,n) returns the n-character substring of s, beginning at position m Arrays are declared automatically when they are used, e.g.: arr[i] = $1 assigns the first field of the current input record to the ith element of the array. Flow control statements using if-else, while, and for are allowed with C type syntax: for (i=1; i <= NF; i++) {actions} while (i<=NF) {actions} if (i<NF) {actions} Common Options -f program_file read the commands from program_file
  • 73. -Fc use character c as the field separator character Examples % cat filex | tr a-z A-Z | awk -F: '{printf ("7R %-6s %-9s %-24s n", $1,$2,$3)}'>upload.file cats filex, which is formatted as follows: nfb791:99999999:smith 7ax791:999999999:jones 8ab792:99999999:chen 8aa791:999999999:mcnulty changes all lower case characters to upper case with the tr utility, and formats the file into the following which is written into the file upload.file: 7R NFB791 99999999 SMITH 7R 7AX791 999999999 JONES 7R 8AB792 99999999 CHEN 7R 8AA791 999999999 MCNULTY Introduction to Unix - 14 AUG 1996 Introduction to Unix CHAPTER 8 Other Useful Commands 8.1 - Working With Files 8.2 - File Archiving, Compression and Conversion 8.3 - Remote Connections Introduction to Unix - 14 AUG 1996 [Next] [Previous] [Top] [Contents] CHAPTER 8 Other Useful Commands
  • 74. 8.1 Working With Files This section will describe a number of commands that you might find useful in examining and manipulating the contents of your files. File utilities Command/Syntax What it will do cmp [options] file1 file2 compare two files and list where differences occur (text or binary files) cut [options] [file(s)] cut specified field(s)/character(s) from lines in file(s) diff [options] file1 file2 compare the two files and display the differences (text files only) file [options] file classify the file type find directory [options] [actions] find files matching a type or pattern ln [options] source_file target link the source_file to the target paste [options] file paste field(s) onto the lines in file sort [options] file sort the lines of the file according to the options chosen strings [options] file report any sequence of 4 or more printable characters ending in <NL> or <NULL>. Usually used to search binary files for ASCII strings. tee [options] file copy stdout to one or more files touch [options] [date] file create an empty file, or update the access time of an existing file tr [options] string1 string2 translate the characters in string1 from stdin into those in string2 in stdout uniq [options] file remove repeated lines in a file wc [options] [file(s)] display word (or character or line) count for file(s) 8.1.1 - cmp - compare file contents 8.1.2 - diff - differences in files 8.1.3 - cut - select parts of a line 8.1.4 - paste - merge files 8.1.5 - touch - create a file 8.1.6 - wc - count words in a file 8.1.7 - ln - link to another file 8.1.8 - sort - sort file contents 8.1.9 - tee - copy command output 8.1.10 - uniq - remove duplicate lines 8.1.11 - strings - find ASCII strings 8.1.12 - file - file type 8.1.13 - tr - translate characters
  • 75. 8.1.14 - find - find files Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.1 cmp - compare file contents The cmp command compares two files, and (without options) reports the location of the first difference between them. It can deal with both binary and ASCII file comparisons. It does a byte-by-byte comparison. Syntax cmp [options] file1 file2 [skip1] [skip2] The skip numbers are the number of bytes to skip in each file before starting the comparison. Common Options -l report on each difference -s report exit status only, not byte differences Examples Given the files mon.logins: and tues.logins: ageorge ageorge bsmith cbetts cbetts jchen jchen jdoe jmarsch jmarsch lkeres lkeres mschmidt proy sphillip sphillip wyepp wyepp
  • 76. The comparison of the two files yields: % cmp mon.logins tues.logins mon.logins tues.logins differ: char 9, line 2 The default it to report only the first difference found. This command is useful in determining which version of a file should be kept when there is more than one version. Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.2 diff - differences in files The diff command compares two files, directories, etc, and reports all differences between the two. It deals only with ASCII files. It's output format is designed to report the changes necessary to convert the first file into the second. Syntax diff [options] file1 file2 Common Options -b ignore trailing blanks -i ignore the case of letters -w ignore <space> and <tab> characters -e produce an output formatted for use with the editor, ed -r apply diff recursively through common sub-directories Examples For the mon.logins and tues.logins files above, the difference between them is given by: % diff mon.logins tues.logins 2d1 < bsmith
  • 77. 4a4 > jdoe 7c7 < mschmidt --- > proy Note that the output lists the differences as well as in which file the difference exists. Lines in the first file are preceded by "< ", and those in the second file are preceded by "> ". Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.3 cut - select parts of a line The cut command allows a portion of a file to be extracted for another use. Syntax cut [options] file Common Options -c character_list character positions to select (first character is 1) -d delimiter field delimiter (defaults to <TAB>) -f field_list fields to select (first field is 1) Both the character and field lists may contain comma-separated or blank-character- separated numbers (in increasing order), and may contain a hyphen (-) to indicate a range. Any numbers missing at either before (e.g. -5) or after (e.g. 5-) the hyphen indicates the full range starting with the first, or ending with the last character or field, respectively. Blank-character-separated lists must be enclosed in quotes. The field delimiter should be enclosed in quotes if it has special meaning to the shell, e.g. when specifying a <space> or <TAB> character. Examples
  • 78. In these examples we will use the file users: jdoe John Doe 4/15/96 lsmith Laura Smith 3/12/96 pchen Paul Chen 1/5/96 jhsu Jake Hsu 4/17/96 sphilip Sue Phillip 4/2/96 If you only wanted the username and the user's real name, the cut command could be used to get only that information: % cut -f 1,2 users jdoe John Doe lsmith Laura Smith pchen Paul Chen jhsu Jake Hsu sphilip Sue Phillip The cut command can also be used with other options. The -c option allows characters to be the selected cut. To select the first 4 characters: % cut -c 1-4 users This yields: jdoe lsmi pche jhsu sphi thus cutting out only the first 4 characters of each line.
  • 79. Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.4 paste - merge files The paste command allows two files to be combined side-by-side. The default delimiter between the columns in a paste is a tab, but options allow other delimiters to be used. Syntax paste [options] file1 file2 Common Options -d list list of delimiting characters -s concatenate lines The list of delimiters may include a single character such as a comma; a quoted string, such as a space; or any of the following escape sequences: n <newline> character t <tab> character backslash character 0 empty string (non-null character) It may be necessary to quote delimiters with special meaning to the shell. A hyphen (-) in place of a file name is used to indicate that field should come from standard input. Examples Given the file users: jdoe John Doe 4/15/96 lsmith Laura Smith 3/12/96 pchen Paul Chen 1/5/96
  • 80. jhsu Jake Hsu 4/17/96 sphilip Sue Phillip 4/2/96 and the file phone: John Doe 555-6634 Laura Smith 555-3382 Paul Chen 555-0987 Jake Hsu 555-1235 Sue Phillip 555-7623 the paste command can be used in conjunction with the cut command to create a new file, listing, that includes the username, real name, last login, and phone number of all the users. First, extract the phone numbers into a temporary file, temp.file: % cut -f2 phone > temp.file 555-6634 555-3382 555-0987 555-1235 555-7623 The result can then be pasted to the end of each line in users and directed to the new file, listing: % paste users temp.file > listing jdoe John Doe 4/15/96 237-6634 lsmith Laura Smith 3/12/96 878-3382 pchen Paul Chen 1/5/96 888-0987 jhsu Jake Hsu 4/17/96 545-1235 sphilip Sue Phillip 4/2/96 656-7623
  • 81. This could also have been done on one line without the temporary file as: % cut -f2 phone | paste users - > listing with the same results. In this case the hyphen (-) is acting as a placeholder for an input field (namely, the output of the cut command). Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.5 touch - create a file The touch command can be used to create a new (empty) file or to update the last access date/time on an existing file. The command is used primarily when a script requires the pre-existence of a file (for example, to which to append information) or when the script is checking for last date or time a function was performed. Syntax touch [options] [date_time] file touch [options] [-t time] file Common Options -a change the access time of the file (SVR4 only) -c don't create the file if it doesn't already exist -f force the touch, regardless of read/write permissions -m change the modification time of the file (SVR4 only) -t time use the time specified, not the current time (SVR4 only) When setting the "-t time" option it should be in the form: [[CC]YY]MMDDhhmm[.SS] where: CC first two digits of the year YY second two digits of the year
  • 82. MM month, 01-12 DD day of month, 01-31 hh hour of day, 00-23 mm minute, 00-59 SS second, 00-61 The date_time options has the form: MMDDhhmm[YY] where these have the same meanings as above. The date cannot be set to be before 1969 or after January 18, 2038. Examples To create a file: % touch filename Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.6 wc - count words in a file wc stands for "word count"; the command can be used to count the number of lines, characters, or words in a file. Syntax wc [options] file Common Options -c count bytes -m count characters (SVR4) -l count lines
  • 83. -w count words If no options are specified it defaults to "-lwc". Examples Given the file users: jdoe John Doe 4/15/96 lsmith Laura Smith 3/12/96 pchen Paul Chen 1/5/96 jhsu Jake Hsu 4/17/96 sphilip Sue Phillip 4/2/96 the result of using a wc command is as follows: % wc users 5 20 121 users The first number indicates the number of lines in the file, the second number indicates the number of words in the file, and the third number indicates the number of characters. Using the wc command with one of the options (-l, lines; -w, words; or -c, characters) would result in only one of the above. For example, "wc -l users" yields the following result: 5 users Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.7 ln - link to another file The ln command creates a "link" or an additional way to access (or gives an additional name to) another file. Syntax ln [options] source [target]
  • 84. If not specified target defaults to a file of the same name in the present working directory. Common Options -f force a link regardless of target permissions; don't report errors (SVR4 only) -s make a symbolic link Examples A symbolic link is used to create a new path to another file or directory. If a group of users, for example, is accustomed to using a command called chkmag, but the command has been rewritten and is now called chkit, creating a symbolic link so the users will automatically execute chkit when they enter the command chkmag will ease transition to the new command. A symbolic link would be done in the following way: % ln -s chkit chkmag The long listing for these two files is now as follows: 16 -rwxr-x--- 1 lindadb acs 15927 Apr 23 04:10 chkit 1 lrwxrwxrwx 1 lindadb acs 5 Apr 23 04:11 chkmag -> chkit Note that while the permissions for chkmag are open to all, since it is linked to chkit, the permissions, group and owner characteristics for chkit will be enforced when chkmag is run. With a symbolic link, the link can exist without the file or directory it is linked to existing first. A hard link can only be done to another file on the same file system, but not to a directory (except by the superuser). A hard link creates a new directory entry pointing to the same inode as the original file. The file linked to must exist before the hard link can be created. The file will not be deleted until all the hard links to it are removed. To link the two files above with a hard link to each other do: % ln chkit chkmag Then a long listing shows that the inode number (742) is the same for each: % ls -il chkit chkmag
  • 85. 742 -rwxr-x--- 2 lindadb acs 15927 Apr 23 04:10 chkit 742 -rwxr-x--- 2 lindadb acs 15927 Apr 23 04:10 chkmag Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.8 sort - sort file contents The sort command is used to order the lines of a file. Various options can be used to choose the order as well as the field on which a file is sorted. Without any options, the sort compares entire lines in the file and outputs them in ASCII order (numbers first, upper case letters, then lower case letters). Syntax sort [options] [+pos1 [ -pos2 ]] file Common Options -b ignore leading blanks (<space> & <tab>) when determining starting and ending characters for the sort key -d dictionary order, only letters, digits, <space> and <tab> are significant -f fold upper case to lower case -k keydef sort on the defined keys (not available on all systems) -i ignore non-printable characters -n numeric sort -o outfile output file -r reverse the sort -t char use char as the field separator character -u unique; omit multiple copies of the same line (after the sort) +pos1 [-pos2] (old style) provides functionality similar to the "-k keydef" option.
  • 86. For the +/-position entries pos1 is the starting word number, beginning with 0 and pos2 is the ending word number. When -pos2 is omitted the sort field continues through the end of the line. Both pos1 and pos2 can be written in the form w.c, where w is the word number and c is the character within the word. For c 0 specifies the delimiter preceding the first character, and 1 is the first character of the word. These entries can be followed by type modifiers, e.g. n for numeric, b to skip blanks, etc. The keydef field of the "-k" option has the syntax: start_field [type] [ ,end_field [type] ] where: start_field, end_field define the keys to restrict the sort to a portion of the line type modifies the sort, valid modifiers are given the single characters (bdfiMnr) from the similar sort options, e.g. a type b is equivalent to "-b", but applies only to the specified field Examples In the file users: jdoe John Doe 4/15/96 lsmith Laura Smith 3/12/96 pchen Paul Chen 1/5/96 jhsu Jake Hsu 4/17/96 sphilip Sue Phillip 4/2/96 sort users yields the following: jdoe John Doe 4/15/96 jhsu Jake Hsu 4/17/96 lsmith Laura Smith 3/12/96 pchen Paul Chen 1/5/96 sphilip Sue Phillip 4/2/96
  • 87. If, however, a listing sorted by last name is desired, use the option to specify which field to sort on (fields are numbered starting at 0): % sort +2 users: pchen Paul Chen 1/5/96 jdoe John Doe 4/15/96 jhsu Jake Hsu 4/17/96 sphilip Sue Phillip 4/2/96 lsmith Laura Smith 3/12/96 To sort in reverse order: % sort -r users: sphilip Sue Phillip 4/2/96 pchen Paul Chen 1/5/96 lsmith Laura Smith 3/12/96 jhsu Jake Hsu 4/17/96 jdoe John Doe 4/15/96 A particularly useful sort option is the -u option, which eliminates any duplicate entries in a file while ordering the file. For example, the file todays.logins: sphillip jchen jdoe lkeres jmarsch ageorge lkeres
  • 88. proy jchen shows a listing of each username that logged into the system today. If we want to know how many unique users logged into the system today, using sort with the -u option will list each user only once. (The command can then be piped into "wc -l" to get a number): % sort -u todays.logins ageorge jchen jdoe jmarsch lkeres proy sphillip Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.9 tee - copy command output tee sends standard in to specified files and also to standard out. It's often used in command pipelines. Syntax tee [options] [file[s]] Common Options -a append the output to the files -i ignore interrupts Examples
  • 89. In this first example the output of who is displayed on the screen and stored in the file users.file: brigadier: condron [55]> who | tee users.file condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.) frank ttyp1 Apr 22 16:19 (nyssa) condron ttyp9 Apr 22 15:52 (lcondron-mac.acs) brigadier: condron [56]> cat users.file condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.) frank ttyp1 Apr 22 16:19 (nyssa) condron ttyp9 Apr 22 15:52 (lcondron-mac.acs) In this next example the output of who is sent to the files users.a and users.b. It is also piped to the wc command, which reports the line count. brigadier: condron [57]> who | tee users.a users.b | wc -l 3 brigadier: condron [58]> cat users.a condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.) frank ttyp1 Apr 22 16:19 (nyssa) condron ttyp9 Apr 22 15:52 (lcondron-mac.acs) brigadier: condron [59]> cat users.b condron ttyp0 Apr 22 14:10 (lcondron-pc.acs.) frank ttyp1 Apr 22 16:19 (nyssa) condron ttyp9 Apr 22 15:52 (lcondron-mac.acs) In the following example a long directory listing is sent to the file files.long. It is also piped to the grep command which reports which files were last modified in August. brigadier: condron [60]> ls -l | tee files.long |grep Aug
  • 90. 1 drwxr-sr-x 2 condron 512 Aug 8 1995 News/ 2 -rw-r--r-- 1 condron 1076 Aug 8 1995 magnus.cshrc 2 -rw-r--r-- 1 condron 1252 Aug 8 1995 magnus.login brigadier: condron [63]> cat files.long total 34 2 -rw-r--r-- 1 condron 1253 Oct 10 1995 #.login# 1 drwx------ 2 condron 512 Oct 17 1995 Mail/ 1 drwxr-sr-x 2 condron 512 Aug 8 1995 News/ 5 -rw-r--r-- 1 condron 4299 Apr 21 00:18 editors.txt 2 -rw-r--r-- 1 condron 1076 Aug 8 1995 magnus.cshrc 2 -rw-r--r-- 1 condron 1252 Aug 8 1995 magnus.login 7 -rw-r--r-- 1 condron 6436 Apr 21 23:50 resources.txt 4 -rw-r--r-- 1 condron 3094 Apr 18 18:24 telnet.ftp 1 drwxr-sr-x 2 condron 512 Apr 21 23:56 uc/ 1 -rw-r--r-- 1 condron 1002 Apr 22 00:14 uniq.tee.txt 1 -rw-r--r-- 1 condron 1001 Apr 20 15:05 uniq.tee.txt~ 7 -rw-r--r-- 1 condron 6194 Apr 15 20:18 unixgrep.txt Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.10 uniq - remove duplicate lines uniq filters duplicate adjacent lines from a file. Syntax uniq [options] [+|-n] file [file.new]
  • 91. Common Options -d one copy of only the repeated lines -u select only the lines not repeated +n ignore the first n characters -s n same as above (SVR4 only) -n skip the first n fields, including any blanks (<space> & <tab>) -f fields same as above (SVR4 only) Examples Consider the following file and example, in which uniq removes the 4th line from file and places the result in a file called file.new. {unix prompt 1} cat file 1 2 3 6 4 5 3 6 7 8 9 0 7 8 9 0 {unix prompt 2} uniq file file.new {unix prompt 3} cat file.new 1 2 3 6 4 5 3 6 7 8 9 0 Below, the -n option of the uniq command is used to skip the first 2 fields in file, and filter out lines which are duplicates from the 3rd field onward. {unix prompt 4} uniq -2 file 1 2 3 6
  • 92. 7 8 9 0 Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.11 strings - find ASCII strings To search a binary file for printable, ASCII, strings use the strings command. It searches for any sequence of 4 or more ASCII characters terminated by a <newline> or null character. I find this command useful for searching for file names and possible error messages within compiled programs that I don't have source code for. Syntax strings [options] file Common Options -n number use number as the minimum string length, rather than 4 (SVR4 only) -number same as above -t format precede the string with the byte offset from the start of the file, where format is one of: d = decimal, o = octal, x = hexadecimal (SVR4 only) -o precede the string with the byte offset in decimal (BSD only) Examples % strings /bin/cut SUNW_OST_OSCMD no delimiter specified invalid delimiter b:c:d:f:ns cut: -n may only be used with -b cut: -d may only be used with -f cut: -s may only be used with -f
  • 93. no list specified cut: cannot open %s invalid range specifier too many ranges specified ranges must be increasing invalid character in range Internal error processing input invalid multibyte character unable to allocate enough memory unable to allocate enough memory cut: usage: cut -b list [-n] [filename ...] cut -c list [filename ...] cut -f list [-d delim] [-s] [filename] Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.12 file - file type This program, file, examines the selected file and tries to determine what type of file it is. It does this by reading the first few bytes of the file and comparing them with the table in /etc/magic. It can determine ASCII text files, tar formatted files, compressed files, etc. Syntax file [options] [-m magic_file] [-f file_list] file Common Options -c check the magic file for errors in format
  • 94. -f file_list file_list contains a list of files to examine -h don't follow symbolic links (SVR4 only) -L follow symbolic links (BSD only) -m magic_file use magic_file as the magic file instead of /etc/magic Examples Below we list the output from the command "file filename" for some representative files. /etc/magic: ascii text /usr/local/bin/gzip: Sun demand paged SPARC executable dynamically linked /usr/bin/cut: ELF 32-bit MSB executable SPARC Version 1, dynamically linked, stripped source.tar: USTAR tar archive source.tar.Z: compressed data block compressed 16 bits Introduction to Unix - 14 AUG 1996 8.1 Working With Files 8.1.13 tr - translate characters The tr command translates characters from stdin to stdout. Syntax tr [options] string1 [string2] With no options the characters in string1 are translated into the characters in string2, character by character in the string arrays. The first character in string1 is translated into the first character in string2, etc. A range of characters in a string is specified with a hyphen between the upper and lower characters of the range, e.g. to specify all lower case alphabetic characters use '[a-z]'. Repeated characters in string2 can be represented with the '[x*n]' notation, where character x is repeated n times. If n is 0 or absent it is assumed to be as large as needed to match string1.
  • 95. Characters can include octal (BSD and SVR4) and character (SVR4 only) notation. Here "octal" is replaced by the one, two, or three octal integer sequence encoding the ASCII character and "character" can be one of: b back space f form feed n new line r carriage return t tab v vertical tab The SVR4 version of tr allows the operand ":class:" in the string field where class can take on character classification values, including: alpha alphabetic characters lower lower case alphabetic characters upper upper case alphabetic characters Common Options -c complement the character set in string1 -d delete the characters in string1 -s squeeze a string of repeated characters in string1 to a single character Examples The following examples will use as input the file, a list of P. G. Wodehouse Jeeves & Wooster books. The Inimitable Jeeves [1923] The Mating Season [1949] Carry On, Jeeves [1925] Ring for Jeeves [1953] 8.1 Working With Files 8.1.14 find - find files
  • 96. The find command will recursively search the indicated directory tree to find files matching a type or pattern you specify. find can then list the files or execute arbitrary commands based on the results. Syntax find directory [search options] [actions] Common Options For the time search options the notation in days, n is: +n more than n days n exactly n days -n less than n days Some file characteristics that find can search for are: time that the file was last accessed or changed -atime n access time, true if accessed n days ago -ctime n change time, true if the files status was changed n days ago -mtime n modified time, true if the files data was modified n days ago -newer filename true if newer than filename -type type type of file, where type can be: b block special file c character special file d directory l symbolic link p named pipe (fifo) f regular file -fstype type type of file system, where type can be any valid file system type, e.g.: ufs (Unix File System) and nfs (Network File System)
  • 97. -user username true if the file belongs to the user username -group groupname true if the file belongs to the group groupname -perm [-]mode permissions on the file, where mode is the octal modes for the chmod command. When mode is precede by the minus sign only the bits that are set are compared. -exec command execute command. The end of command is indicated by and escaped semicolon (;). The command argument, {}, replaces the current path name. -name filename true if the file is named filename. Wildcard pattern matches are allowed if the meta-character is escaped from the shell with a backslash (). CHAPTER 8 Other Useful Commands 8.2 File Archiving, Compression and Conversion File Archiving, Compression and Conversion Commands Command/Syntax What it will do compress/uncompress/zcat [options] file[.Z] compress or uncompress a file. Compressed files are stored with a .Z ending. dd [if=infile] [of=outfile] [operand=value] copy a file, converting between ASCII and EBCDIC or swapping byte order, as specified gzip/gunzip/zcat [options] file[.gz] compress or uncompress a file. Compressed files are stored with a .gz ending od [options] file octal dump a binary file, in octal, ASCII, hex, decimal, or character mode. tar key[options] [file(s)] tape archiver--refer to man pages for details on creating, listing, and retrieving from archive files. Tar files can be stored on tape or disk. uudecode [file] decode a uuencoded file, recreating the original file uuencode [file] new_name encode binary file to 7-bit ASCII, useful when sending via email, to be decoded as new_name at destination 8.2.1 - File Compression 8.2.2 - tar - archive files 8.2.3 - uuencode/uudecode - encode a file 8.2.4 - dd - block copy and convert 8.2.5 - od - octal dump of a file Introduction to Unix - 14 AUG 1996
  • 98. 8.2 File Archiving, Compression and Conversion 8.2.1 File Compression The compress command is used to reduce the amount of disk space utilized by a file. When a file has been compressed using the compress command, a suffix of .Z is appended to the file name. The ownership modes and access and modification times of the original file are preserved. uncompress restores the files originally compressed by compress. Syntax compress [options] [file] uncompress [options] [file.Z] zcat [file.Z] Common Options -c write to standard output and don't create or change any files -f force compression of a file, even if it doesn't reduce the size of the file or if the target file (file.Z) already exists. -v verbose. Report on the percentage reduction for the file. zcat writes to standard output. It is equivalent to "uncompress -c". Examples Given the files: 96 -rw-r--r-- 1 lindadb acs 45452 Apr 24 09:13 logins.beauty 184 -rw-r--r-- 1 lindadb acs 90957 Apr 24 09:13 logins.bottom 152 -rw-r--r-- 1 lindadb acs 75218 Apr 24 09:13 logins.photon 168 -rw-r--r-- 1 lindadb acs 85970 Apr 24 09:13 logins.top These can be compressed with: % compress logins.*
  • 99. which creates the files: 24 -rw-r--r-- 1 lindadb acs 8486 Apr 24 09:13 logins.beauty.Z 40 -rw-r--r-- 1 lindadb acs 16407 Apr 24 09:13 logins.bottom.Z 24 -rw-r--r-- 1 lindadb acs 10909 Apr 24 09:13 logins.photon.Z 32 -rw-r--r-- 1 lindadb acs 16049 Apr 24 09:13 logins.top.Z The original files are lost. To display a compressed file, the zcat command is used: % zcat logins.beauty.Z | head beauty:01/22/94:#total logins,4338:#different UIDs,2290 beauty:01/23/94:#total logins,1864:#different UIDs,1074 beauty:01/24/94:#total logins,2317:#different UIDs,1242 beauty:01/25/94:#total logins,3673:#different UIDs,2215 beauty:01/26/94:#total logins,3532:#different UIDs,2216 beauty:01/27/94:#total logins,3096:#different UIDs,1984 beauty:01/28/94:#total logins,3724:#different UIDs,2212 beauty:01/29/94:#total logins,3460:#different UIDs,2161 beauty:01/30/94:#total logins,1408:#different UIDs,922 beauty:01/31/94:#total logins,2175:#different UIDs,1194 A display of the file using commands other than zcat yields an unreadable, binary, output. The uncompress command is used to return the file to its original format: % uncompress logins.*.Z ; ls -als logins.* 96 -rw-r--r-- 1 lindadb acs 45452 Apr 24 09:13 logins.beauty 184 -rw-r--r-- 1 lindadb acs 90957 Apr 24 09:13 logins.bottom
  • 100. 152 -rw-r--r-- 1 lindadb acs 75218 Apr 24 09:13 logins.photon 168 -rw-r--r-- 1 lindadb acs 85970 Apr 24 09:13 logins.top In addition to the standard Unix compress, uncompress, zcat utilities there are a set of GNU ones freely available. These do an even better job of compression using a more efficient algorithm. The GNU programs to provide similar functions to those above are often installed as gzip, gunzip, and zcat, respectively. Files compressed with gzip are given the endings .z or .gz. GNU software can be obtained via anonymous ftp from ftp://ftp.gnu.org/pub/gnu. Introduction to Unix - 14 AUG 1996 8.2 File Archiving, Compression and Conversion 8.2.2 tar - archive files The tar command combines files into one device or filename for archiving purposes. The tar command does not compress the files; it merely makes a large quantity of files more manageable. Syntax tar [options] [directory file] Common Options c create an archive (begin writting at the start of the file) t table of contents list x extract from an archive v verbose f archive file name b archive block size tar will accept its options either with or without a preceding hyphen (-). The archive file can be a disk file, a tape device, or standard input/output. The latter are represented by a hyphen. Examples
  • 101. Given the files and size indications below: 45 logs.beauty 89 logs.bottom 74 logs.photon 84 logs.top tar can combine these into one file, logfile.tar: % tar -cf logfile.tar logs.* ; ls -s logfile.tar 304 logfile.tar Many anonymous FTP archive sites on the Internet store their packages in compressed tar format, so the files will end in .tar.Z or .tar.gz. To extract the files from these files you would first uncompress them, or use the appropriate zcat command and pipe the output into tar, e.g.: % zcat archive.tar.Z | tar -xvf - where the hyphen at the end of the tar command indicates that the file is taken from stdin. Introduction to Unix - 14 AUG 1996 8.2 File Archiving, Compression and Conversion 8.2.3 uuencode/uudecode - encode a file To encode a binary file into 7-bit ASCII use the uuencode command. To decode the file back to binary use the uudecode command. The uu in the names comes because they are part of the Unix-to-Unix CoPy (UUCP) set of commands. The uuencode and uudecode commands are commonly used when sending binary files through e-mail. In e-mail there's no guarantee that 8-bit binary files will be transferred cleanly. So to ensure delivery you should encode the binary file, either directly, on the command line and then include the encoded file, or indirectly, by letting your MIME mailer program do it for you. In a similar manner, the user decodes the file on the receiving end. Syntax uuencode [ source_file ] pathname_to_uudecode_to [ > new_file ]
  • 102. uudecode [ -p ] encoded_file Common Options -p send output to standard output, rather than to the default file Examples The first line of encoded file includes the permission modes and name that uudecode will use when decoding the file. The file begins and ends with the begin and end keywords, respectively, e.g.: begin 555 binary_filename M?T5,1@$" 0 " ( ! %"W #0 5"< T " M!0 H !4 % 8 T $ - "@ H 4 P M -0 !$ ! ! ! %" M%P !0A< % $ $ 4(8 -"& W& W% < 0 M @ !0B T(@ )@ !P O=7-R+VQI8B]L9"YS M;RXQ ?< 'Y VP "O !VP )8 &6 !G0 M %[ U0 %G !3 ;< #Q %Q ! MEP :P !_ '@ !PP (P M N0 =H _0 $D Y < #F /L M01 $' $ & ! P #0A@ 4(8 8.2 File Archiving, Compression and Conversion 8.2.4 dd - block copy and convert The dd command allows you to copy from raw devices, such as disks and tapes, specifying the input and output block sizes. dd was originally known as the disk-to-disk copy program. With dd you can also convert between different formats, for example, EBCDIC to ASCII, or swap byte order, etc. Syntax
  • 103. dd [if=input_device] [of=output_device] [operand=value] Common Options if=input_device the input file or device of=output_device the output file or device If the input or output devices are not specified they default to standard input and standard output, respectively. Operands can include: ibs=n input block size (defaults to 512 byte blocks) obs=n output block size (defaults to 512 byte blocks) bs=n sets both input and output block sizes files=n copy n input files skip=n skip n input blocks before starting to copy count=n only copy n input blocks conv=value[,value] where value can include: ascii convert EBCDIC to ASCII ebcdic convert from ASCII to EBCDIC lcase convert upper case characters to lower case ucase convert lower case characters to upper case swab swap every pair of bytes of input data noerror don't stop processing on an input error sync pad every input block to the size of ibs, appending null bytes as needed Block sizes are specified in bytes and may end in k, b, or w to indicate 1024 (kilo), 512 (block), or 2 (word), respectively. Examples
  • 104. To copy files from one tape drive to another: % dd if=/dev/rmt/0 of=/dev/rmt/1 20+0 records in 20+0 records out To copy files written on a tape drive on a big endian machine, written with a block size of 20 blocks, to a file on a little endian machine that now has the tape inserted in its drive, we would need to swap pairs of bytes, as in: 8.2 File Archiving, Compression and Conversion 8.2.5 od - octal dump of a file od dumps a file to stdout in different formats, including octal, decimal, floating point, hex, and character format. Syntax od [options] file Common Options -b octal dump -d|-D decimal (-d) or long decimal (-D) dump -s|-S signed decimal (-s) and signed long decimal (-S) dump -f|-F floating point (-f) or long (double) floating point (-F) dump -x|-X hex (-x) or long hex (-X) dump -c|-C character (single byte) or long character dump (single or multi-byte characters, as determined by locale settings) dump -v verbose mode Examples To look at the actual contents of the following file, a list of P. G. Wodehouse's Lord Emsworth novels.
  • 105. Something Fresh [1915] Uncle Dynamite [1948] Leave it to Psmith [1923] Pigs Have Wings [1952] Summer Lightning [1929] Cocktail Time [1958] Heavy Weather [1933] Service with a Smile [1961] Blandings Castle and Elsewhere [1935] Galahad at Blandings [1965] Uncle Fred in the Springtime [1939] A Pelican at Blandings [1969] Full Moon [1947] Sunset at Blandings [1977] we could do: % od -c wodehouse 0000000 S o m e t h i n g F r e s h 0000020 [ 1 9 1 5 ] t U n c l e D y n 0000040 a m i t e [ 1 9 4 8 ] n L e a 0000060 v e i t t o P s m i t h 0000100 [ 1 9 2 3 ] t P i g s H a v e 0000120 W i n g s [ 1 9 5 2 ] n S u 0000140 m m e r L i g h t n i n g [ 0000160 1 9 2 9 ] t C o c k t a i l T 0000200 i m e [ 1 9 5 8 ] n H e a v y 0000220 W e a t h e r [ 1 9 3 3 ] t 0000240 S e r v i c e w i t h a S 0000260 m i l e [ 1 9 6 1 ] n B l a n 0000300 d i n g s C a s t l e a n d 0000320 E l s e w h e r e [ 1 9 3 5
  • 106. 0000340 ] t G a l a h a d a t B l a 0000360 n d i n g s [ 1 9 6 5 ] n U n 0000400 c l e F r e d i n t h e 0000420 S p r i n g t i m e [ 1 9 3 9 0000440 ] t A P e l i c a n a t B 0000460 l a n d i n g s [ 1 9 6 9 ] n 0000500 F u l l M o o n [ 1 9 4 7 ] 0000520 t S u n s e t a t B l a n d 0000540 i n g s [ 1 9 7 7 ] n 0000554 Introduction to Unix - 14 AUG 1996 CHAPTER 8 Other Useful Commands 8.3 Remote Connections Remote Connection Commands Command/Syntax What it will do finger [options] user[@hostname] report information about users on local and remote machines ftp [options] host transfer file(s) using file transfer protocol rcp [options] hostname remotely copy files from this machine to another machine rlogin [options] hostname login remotely to another machine rsh [options] hostname remote shell to run on another machine telnet [host [port]] communicate with another host using telnet protocol 8.3.1 - TELNET and FTP - remote login and file transfer protocols 8.3.2 - finger - get information about users 8.3.3 - Remote commands Introduction to Unix - 14 AUG 1996 8.3 Remote Connections
  • 107. 8.3.1 TELNET and FTP - remote login and file transfer protocols TELNET and FTP are Application Level Internet protocols. The TELNET and FTP protocol specifications have been implemented by many different sources, including The National Center for Supercomputer Applications (NCSA), and many other public domain and shareware sources. The programs implementing the TELNET protocol are usually called telnet, but not always. Some notable exceptions are tn3270, WinQVT, and QWS3270, which are also TELNET protocol implementations. TELNET is used for remote login to other computers on the Internet. The programs implementing the FTP protocol are usually called ftp, but there are exceptions to that too. A program called Fetch, distributed by Dartmouth College, WS_FTP, written and distributed by John Junod, and Ftptool, written by a Mike Sullivan, are FTP protocol implementations with graphic user interfaces. There's an enhanced FTP version, ncftp, that allows additional features, written by Mike Gleason. Also, FTP protocol implementations are often included in TELNET implementation programs, such as the ones distributed by NCSA. FTP is used for transferring files between computers on the Internet. rlogin is a remote login service that was at one time exclusive to Berkeley 4.3 BSD UNIX. Essentially, it offers the same functionality as telnet, except that it passes to the remote computer information about the user's login environment. Machines can be configured to allow connections from trusted hosts without prompting for the users' passwords. A more secure version of this protocol is the Secure SHell, SSH, software written by Tatu Ylonen and available via ftp://ftp.net.ohio-state.edu/pub/security/ssh. From a Unix prompt, these programs are invoked by typing the command (program name) and the (Internet) name of the remote machine to which to connect. You can also specify various options, as allowed, for these commands. Syntax telnet [options] [ remote_host [ port_number ] ] tn3270 [options] [ remote_host [ port_number ] ] ftp [options] [ remote_host ] Common Options ftp telnet Action
  • 108. -d set debugging mode on -d same as above (SVR4 only) -i turn off interactive prompting -n don't attempt auto-login on connection -v verbose mode on -l user connect with username, user, on the remote host (SVR4 only) -8 8-bit data path (SVR4 only) telnet and tn3270 allow you the option of specifying a port number to connect to on the remote host. For both commands it defaults to port number 23, the telnet port. Other ports are used for debugging of network services and for specialized resources. Examples telnet oscar.us.ohio-state.edu tn3270 ohstmvsa.acs.ohio-state.edu ftp magnus.acs.ohio-state.edu The remote machine will query you for your login identification and your password. Machines set up as archives for software or information distribution often allow anonymous ftp connections. You ftp to the remote machine and login as anonymous (the login ftp is equivalent on many machines), that is, when asked for your "login" you would type anonymous. Once you have successfully connected to a remote computer with telnet and rlogin (and assuming terminal emulation is appropriate) you will be able to use the machine as you always do. Once you have successfully connected to a remote computer with ftp, you will be able to transfer a file "up" to that computer with the put command, or "down" from that computer with the get command. The syntax is as follows: put local-file-name remote-file-name get local-file-name remote-file-name Other commands are available in ftp as well, depending on the specific "local" and "remote" FTP implementations. The help command will display a list of available
  • 109. commands. The help command will also display the purpose of a specific command. Examples of valid commands are shown below: help display list of available commands help mget display the purpose of the mget command ("get multiple files") pwd present working directory ls or dir directory list cd change directory lcd local change directory open specify the machine you wish to connect with user specify your login id (in cases where you are not prompted) quit quit out of the FTP program Introduction to Unix - 14 AUG 1996 8.3 Remote Connections 8.3.2 finger - get information about users finger displays the .plan file of a specific user, or reports who is logged into a specific machine. The user must allow general read permission on the .plan file. Syntax finger [options] [user[@hostname]] Common Options -l force long output format -m match username only, not first or last names -s force short output format Examples brigadier: condron [77]> finger workshop@nyssa
  • 110. This is a sample .plan file for the nyssa id, workshop. This id is being used this week by Frank Fiamingo, Linda DeBula, and Linda Condron, while we teach a pilot version of the new Unix workshop we developed for UTS. Hope yer learnin' somethin'. Frank, Linda, & Linda brigadier: condron [77]> finger Login Name TTY Idle When Where condron Linda S Condron p0 Sun 18:13 lcondron-mac.acs frank Frank G. Fiamingo p1 Mon 16:19 nyssa Introduction to Unix - 14 AUG 1996 8.3 Remote Connections 8.3.3 Remote commands A number of Unix machines can be connected together to form a local area network. When this is the case, it often happens that a user of one machine has valid login access to several of the other machines in the local network. There are Unix commands available to such users which provide convenience in carrying out certain common operations. Because these commands focus on communications with remote hosts in the local network, the command names begin with the letter "r": rlogin, rsh, and rcp. The remote access capability of these commands is supported (optionally) by the dotfile, ~/.rhosts, for individual users and by the system-wide file /etc/hosts.equiv. For security reasons these may be restricted on some hosts. The rlogin command allows remote login access to another host in the local network. rlogin passes information about the local environment, including the value of the TERM environment variable, to the remote host. The rsh command provides the ability to invoke a Unix shell on a remote host in the local network for the purpose of executing a shell command there. This capability is similar to the "shell escape" function commonly available from within such Unix software systems as editors and email.
  • 111. The rcp command provides the ability to copy files from the local host to a remote host in the local network. Syntax rlogin [ -l username ] remote_host rsh [ -l username ] remote_host [ command ] rcp [ [user1]@host1:]original_filename [ [user2]@host2:]new_filename where the parts in brackets ([]) are optional. rcp does not prompt for passwords, so you must have permission to execute remote commands on the specified machines as the selected user on each machine. Common Options -l username connect as the user, username, on the remote host (rlogin & rsh) The .rhosts file, if it exists in the user's home directory on the remote host, permits rlogin, rsh, or rcp access to that remote host without prompting for a password for that account. The .rhosts file contains an entry for each remote host and username from which the owner of the .rhosts file may wish to connect. Each entry in the .rhosts file is of the form: Introduction to Unix CHAPTER 9 Shell Programming 9.1 - Shell Scripts 9.2 - Setting Parameter Values 9.3 - Quoting 9.4 - Variables 9.5 - Parameter Substitution 9.6 - Here Document 9.7 - Interactive Input 9.8 - Functions 9.9 - Control Commands Introduction to Unix - 14 AUG 1996 CHAPTER 9 Shell Programming 9.1 Shell Scripts
  • 112. You can write shell programs by creating scripts containing a series of shell commands. The first line of the script should start with #! which indicates to the kernel that the script is directly executable. You immediately follow this with the name of the shell, or program (spaces are allowed), to execute, using the full path name. Generally you can count on having up to 32 characters, possibly more on some systems, and can include one option. So to set up a Bourne shell script the first line would be: #! /bin/sh or for the C shell: #! /bin/csh -f where the "-f" option indicates that it should not read your .cshrc. Any blanks following the magic symbols, #!, are optional. You also need to specify that the script is executable by setting the proper bits on the file with chmod, e.g.: % chmod +x shell_script Within the scripts # indicates a comment from that point until the end of the line, with #! being a special case if found as the first characters of the file. Introduction to Unix - 14 AUG 1996 CHAPTER 9 Shell Programming 9.2 Setting Parameter Values Parameter values, e.g. param, are assigned as: Bourne shell C shell param=value set param = value where value is any valid string, and can be enclosed within quotations, either single ('value) or double ("value"), to allow spaces within the string value. When enclosed with backquotes ('value') the string is first evaluated by the shell and the result is substituted. This is often used to run a command, substituting the command output for value, e.g.: $ day='date +%a' $ echo $day
  • 113. Wed After the parameter values has been assigned the current value of the parameter is accessed using the $param, or ${param}, notation. Introduction to Unix - 14 AUG 1996 CHAPTER 9 Shell Programming 9.3 Quoting We quote strings to control the way the shell interprets any parameters or variables within the string. We can use single (') and double (") quotes around strings. Double quotes define the string, but allow variable substitution. Single quotes define the string and prevent variable substitution. A backslash () before a character is said to escape it, meaning that the system should take the character literally, without assigning any special meaning to it. These quoting techniques can be used to separate a variable from a fixed string. As an example lets use the variable, var, that has been assigned the value bat, and the constant string, man. If I wanted to combine these to get the result "batman" I might try: $varman but this doesn't work, because the shell will be trying to evaluate a variable called varman, which doesn't exist. To get the desired result we need to separate it by quoting, or by isolating the variable with curly braces ({}), as in: "$var"man - quote the variable $var""man - separate the parameters $var"man" - quote the constant $var''man - separate the parameters $var'man' - quote the constant $varman - separate the parameters ${var}man - isolate the variable These all work because ", ', , {, and } are not valid characters in a variable name. We could not use either of
  • 114. '$var'man $varman because it would prevent the variable substitution from taking place. When using the curly braces they should surround the variable only, and not include the $, otherwise, they will be included as part of the resulting string, e.g.: % echo {$var}man {bat}man Introduction to Unix - 14 AUG 1996 CHAPTER 9 Shell Programming 9.4 Variables There are a number of variables automatically set by the shell when it starts. These allow you to reference arguments on the command line. These shell variables are: Shell Variables Variable Usage sh csh $# number of arguments on the command line x $- options supplied to the shell x $? exit value of the last command executed x $$ process number of the current process x x $! process number of the last command done in background x $n argument on the command line, where n is from 1 through 9, reading left to right x x $0 the name of the current shell or program x x $* all arguments on the command line ("$1 $2 ... $9") x x $@ all arguments on the command line, each separately quoted ("$1" "$2" ... "$9") x $argv[n] selects the nth word from the input list x ${argv[n]} same as above x $#argv report the number of words in the input list x
  • 115. We can illustrate these with some simple scripts. First for the Bourne shell the script will be: #!/bin/sh echo "$#:" $# echo '$#:' $# echo '$-:' $- echo '$?:' $? echo '$$:' $$ echo '$!:' $! echo '$3:' $3 echo '$0:' $0 echo '$*:' $* echo '$@:' $@ When executed with some arguments it displays the values for the shell variables, e.g.: $ ./variables.sh one two three four five 5: 5 $#: 5 $-: $?: 0 $$: 12417 $!: $3: three $0: ./variables.sh $*: one two three four five
  • 116. $@: one two three four five As you can see, we needed to use single quotes to prevent the shell from assigning special meaning to $. The double quotes, as in the first echo statement, allowed substitution to take place. CHAPTER 9 Shell Programming 9.5 Parameter Substitution You can reference parameters abstractly and substitute values for them based on conditional settings using the operators defined below. Again we will use the curly braces ({}) to isolate the variable and its operators. $parameter substitute the value of parameter for this string ${parameter} same as above. The brackets are helpful if there's no separation between this parameter and a neighboring string. $parameter= sets parameter to null. ${parameter-default} if parameter is not set, then use default as the value here. The parameter is not reset. ${parameter=default} if parameter is not set, then set it to default and use the new value ${parameter+newval) if parameter is set, then use newval, otherwise use nothing here. The parameter is not reset. ${parameter?message} if parameter is not set, then display message. If parameter is set, then use its current value. There are no spaces in the above operators. If a colon (:) is inserted before the -, =, +, or ? then a test if first performed to see if the parameter has a non-null setting. The C shell has a few additional ways of substituting parameters: $list[n] selects the nth word from list ${list[n]} same as above $#list report the number of words in list $?parameter return 1 if parameter is set, 0 otherwise
  • 117. ${?parameter} same as above $< read a line from stdin The C shell also defines the array, $argv[n] to contain the n arguments on the command line and $#argv to be the number of arguments, as noted in Table 9.1. To illustrate some of these features we'll use the test script below. #!/bin/sh param0=$0 test -n "$1" && param1=$1 test -n "$2" && param2=$2 test -n "$3" && param3=$3 echo 0: $param0 echo "1: ${param1-1}: c" ;echo $param1 echo "2: ${param2=2}: c" ;echo $param2 echo "3: ${param3+3}: c" ;echo $param3 In the script we first test to see if the variable exists, if so we set a parameter to its value. Below this we report the values, allowing substitution. In the first run through the script we won't provide any arguments: $ ./parameter.sh 0: ./parameter.sh # always finds $0 1: 1: # substitute 1, but don't assign this value 2: 2: 2 # substitute 2 and assign this value 3: : # don't substitute In the second run through the script we'll provide the arguments: $ ./parameter one two three
  • 118. 0: ./parameter.sh # always finds $0 1: one: one # don't substitute, it already has a value 2: two: two # don't substitute, it already has a value 3: 3: three # substitute 3, but don't assign this value Introduction to Unix - 14 AUG 1996 CHAPTER 9 Shell Programming 9.6 Here Document A here document is a form of quoting that allows shell variables to be substituted. It's a special form of redirection that starts with <<WORD and ends with WORD as the only contents of a line. In the Bourne shell you can prevent shell substitution by escaping WORD by putting a in front of it on the redirection line, i.e. <<WORD, but not on the ending line. To have the same effect the C shell expects the in front of WORD at both locations. The following scripts illustrate this, for the Bourne shell: and for the C shell: #!/bin/sh #!/bin/csh -f does=does set does = does not="" set not = "" cat << EOF cat << EOF This here document This here document $does $not $does $not do variable substitution do variable substitution EOF EOF cat << EOF cat << EOF This here document This here document
  • 119. $does $not $does $not do variable substitution do variable substitution EOF EOF Both produce the output: This here document does do variable substitution This here document $does $not do variable substitution In the top part of the example the shell variables $does and $not are substituted. In the bottom part they are treated as simple text strings without substitution. Introduction to Unix - 14 AUG 1996 CHAPTER 9 Shell Programming 9.7 Interactive Input Shell scripts will accept interactive input to set parameters within the script. 9.7.1 - Sh 9.7.2 - Csh Introduction to Unix - 14 AUG 1996 9.7 Interactive Input 9.7.1 Sh Sh uses the built-in command, read, to read in a line, e.g.: read param We can illustrate this with the simple script:
  • 120. #!/bin/sh echo "Input a phrase c" # This is /bin/echo which requires "c" to prevent <newline> read param echo param=$param When we run this script it prompts for input and then echoes the results: $ ./read.sh Input a phrase hello frank # I type in hello frank <return> param=hello frank Introduction to Unix - 14 AUG 1996 9.7 Interactive Input 9.7.1 Sh Sh uses the built-in command, read, to read in a line, e.g.: read param We can illustrate this with the simple script: #!/bin/sh echo "Input a phrase c" # This is /bin/echo which requires "c" to prevent <newline> read param echo param=$param When we run this script it prompts for input and then echoes the results: $ ./read.sh Input a phrase hello frank # I type in hello frank <return> param=hello frank Introduction to Unix - 14 AUG 1996
  • 121. CHAPTER 9 Shell Programming 9.8 Functions The Bourne shell has functions. These are somewhat similar to aliases in the C shell, but allow you more flexibility. A function has the form: fcn () { command; } where the space after {, and the semicolon (;) are both required; the latter can be dispensed with if a <newline> precedes the }. Additional spaces and <newline>'s are allowed. We saw a few examples of this in the sample .profile in an earlier chapter, where we had functions for ls and ll: ls() { /bin/ls -sbF "$@";} ll() { ls -al "$@";} The first one redefines ls so that the options -sbF are always supplied to the standard /bin/ls command, and acts on the supplied input, "$@". The second one takes the current value for ls (the previous function) and tacks on the -al options. Functions are very useful in shell scripts. The following is a simplified version of one I use to automatically backup up system partitions to tape. #!/bin/sh # Cron script to do a complete backup of the system HOST=`/bin/uname -n` admin=frank Mt=/bin/mt Dump=/usr/sbin/ufsdump Mail=/bin/mailx device=/dev/rmt/0n Rewind="$Mt -f $device rewind" Offline="$Mt -f $device rewoffl"
  • 122. # Failure - exit failure () { $Mail -s "Backup Failure - $HOST" $admin << EOF_failure $HOST Cron backup script failed. Apparently there was no tape in the device. EOF_failure exit 1 } # Dump failure - exit dumpfail () { $Mail -s "Backup Failure - $HOST" $admin << EOF_dumpfail $HOST Cron backup script failed. Initial tape access was okay, but dump failed. EOF_dumpfail exit 1 } # Success success () { $Mail -s "Backup completed successfully - $HOST" $admin << EOF_success $HOST Cron backup script was apparently successful. The /etc/dumpdates file is: CHAPTER 9 Shell Programming 9.9 Control Commands
  • 123. 9.9.1 - Conditional if 9.9.2 - Conditional switch and case 9.9.3 - for and foreach 9.9.4 - while 9.9.5 - until 9.9.6 - test 9.9.7 - C Shell Logical and Relational Operators Introduction to Unix - 14 AUG 1996 9.9 Control Commands 9.9.1 Conditional if The conditional if statement is available in both shells, but has a different syntax in each. 9.9.1.1 - Sh 9.9.1.2 - Csh Introduction to Unix - 14 AUG 1996 [Next] [Previous] [Up] [Top] [Contents] [Next] [Previous] [Up] [Top] [Contents] 9.9.1 Conditional if 9.9.1.1 Sh if condition1 then command list if condition1 is true [elif condition2 then command list if condition2 is true] [else command list if condition1 is false] fi The conditions to be tested for are usually done with the test, or [] command (see Section 8.9.6). The if and then must be separated, either with a <newline> or a semicolon (;). #!/bin/sh
  • 124. if [ $# -ge 2 ] then echo $2 elif [ $# -eq 1 ]; then echo $1 else echo No input fi There are required spaces in the format of the conditional test, one after [ and one before ]. This script should respond differently depending upon whether there are zero, one or more arguments on the command line. First with no arguments: $ ./if.sh No input Now with one argument: $ ./if.sh one one And now with two arguments: $ ./if.sh one two two Introduction to Unix - 14 AUG 1996 9.9.1 Conditional if 9.9.1.2 Csh if (condition) command -or-
  • 125. if (condition1) then command list if condition1 is true [else if (condition2) then command list if condition2 is true] [else command list if condition1 is false] endif The if and then must be on the same line. #!/bin/csh -f if ( $#argv >= 2 ) then echo $2 else if ( $#argv == 1 ) then echo $1 else echo No input endif Again, this script should respond differently depending upon whether I have zero, one or more arguments on the command line. First with no arguments: % ./if.csh No input Now with one argument: % ./if.csh one one And now with two arguments:
  • 126. % ./if.csh one two two 9.9 Control Commands 9.9.2 Conditional switch and case To choose between a set of string values for a parameter use case in the Bourne shell and switch in the C shell. 9.9.2.1 - Sh 9.9.2.2 - Csh [Next] [Previous] [Up] [Top] [Contents] 9.9.2 Conditional switch and case 9.9.2.1 Sh case parameter in pattern1[|pattern1a]) command list1;; pattern2) command list2 command list2a;; pattern3) command list3;; *) ;; esac You can use any valid filename meta-characters within the patterns to be matched. The ;; ends each choice and can be on the same line, or following a <newline>, as the last command for the choice. Additional alternative patterns to be selected for a particular case are separated by the vertical bar, |, as in the first pattern line in the example above. The wildcard symbols,: ? to indicate any one character and * to match any number of characters, can be used either alone or adjacent to fixed strings. This simple example illustrates how to use the conditional case statement. #!/bin/sh
  • 127. case $1 in aa|ab) echo A ;; b?) echo "B c" echo $1;; c*) echo C;; *) echo D;; esac So when running the script with the arguments on the left, it will respond as on the right: aa A ab A ac D bb B bb bbb D c C cc C fff D Introduction to Unix - 14 AUG 1996 9.9.2 Conditional switch and case 9.9.2.2 Csh switch (parameter) case pattern1: command list1
  • 128. [breaksw] case pattern2: command list2 [breaksw] default: command list for default behavior [breaksw] endsw breaksw is optional and can be used to break out of the switch after a match to the string value of the parameter is made. Switch doesn't accept "|" in the pattern list, but it will allow you to string several case statements together to provide a similar result. The following C shell script has the same behavior as the Bourne shell case example above. #!/bin/csh -f switch ($1) case aa: case ab: echo A breaksw case b?: echo -n "B " echo $1 breaksw case c*: echo C breaksw
  • 129. default: echo D endsw Introduction to Unix - 14 AUG 1996 9.9 Control Commands 9.9.3 for and foreach One way to loop through a list of string values is with the for and foreach commands. 9.9.3.1 - Sh 9.9.3.2 - Csh Introduction to Unix - 14 AUG 1996 9.9.3 for and foreach 9.9.3.1 Sh for variable [in list_of_values] do command list done The list_of_values is optional, with $@ assumed if nothing is specified. Each value in this list is sequentially substituted for variable until the list is emptied. Wildcards can be used and are applied to file names in the current directory. Below we illustrate the for loop in copying all files ending in .old to similar names ending in .new. In these examples the basename utility extracts the base part of the name so that we can exchange the endings. #!/bin/sh for file in *.old do newf=`basename $file .old`
  • 130. cp $file $newf.new done Introduction to Unix - 14 AUG 1996 9.9.3 for and foreach 9.9.3.2 Csh foreach variable (list_of_values) command list end The equivalent C shell script to copy all files ending in .old to .new is: #!/bin/csh -f foreach file (*.old) set newf = `basename $file .old` cp $file $newf.new end Introduction to Unix - 14 AUG 1996 9.9 Control Commands 9.9.4 while The while commands let you loop as long as the condition is true. 9.9.4.1 - Sh 9.9.4.2 - Csh Introduction to Unix - 14 AUG 1996 9.9.4 while 9.9.4.1 Sh
  • 131. while condition do command list [break] [continue] done A simple script to illustrate a while loop is: #!/bin/sh while [ $# -gt 0 ] do echo $1 shift done This script takes the list of arguments, echoes the first one, then shifts the list to the left, losing the original first entry. It loops through until it has shifted all the arguments off the argument list. $ ./while.sh one two three one two three Introduction to Unix - 14 AUG 1996 9.9.4 while 9.9.4.2 Csh while (condition)
  • 132. command list [break] [continue] end If you want the condition to always be true specify 1 within the conditional test. A C shell script equivalent to the one above is: #!/bin/csh -f while ($#argv != 0 ) echo $argv[1] shift end Introduction to Unix - 14 AUG 1996 9.9 Control Commands 9.9.5 until This looping feature is only allowed in the Bourne shell. until condition do command list while condition is false done The condition is tested at the start of each loop and the loop is terminated when the condition is true. A script equivalent to the while examples above is: #!/bin/sh until [ $# -le 0 ]
  • 133. do echo $1 shift done Notice, though, that here we're testing for less than or equal, rather than greater than or equal, because the until loop is looking for a false condition. Both the until and while loops are only executed if the condition is satisfied. The condition is evaluated before the commands are executed. Introduction to Unix - 14 AUG 1996 9.9 Control Commands 9.9.6 test Conditional statements are evaluated for true or false values. This is done with the test, or its equivalent, the [] operators. It the condition evaluates to true, a zero (TRUE) exit status is set, otherwise a non-zero (FALSE) exit status is set. If there are no arguments a non-zero exit status is set. The operators used by the Bourne shell conditional statements are given below. For filenames the options to test are given with the syntax: -option filename The options available for the test operator for files include: -r true if it exists and is readable -w true if it exists and is writable -x true if it exists and is executable -f true if it exists and is a regular file (or for csh, exists and is not a directory) -d true if it exists and is a directory -h or -L true if it exists and is a symbolic link
  • 134. -c true if it exists and is a character special file (i.e. the special device is accessed one character at a time) -b true if it exists and is a block special file (i.e. the device is accessed in blocks of data) -p true if it exists and is a named pipe (fifo) -u true if it exists and is setuid (i.e. has the set-user-id bit set, s or S in the third bit) -g true if it exists and is setgid (i.e. has the set-group-id bit set, s or S in the sixth bit) -k true if it exists and the sticky bit is set (a t in bit 9) -s true if it exists and is greater than zero in size There is a test for file descriptors: -t [file_descriptor] true if the open file descriptor (default is 1, stdin) is associated with a terminal There are tests for strings: -z string true if the string length is zero -n string true if the string length is non-zero string1 = string2 true if string1 is identical to string2 string1 != string2 true if string1 is non identical to string2 string true if string is not NULL There are integer comparisons: n1 -eq n2 true if integers n1 and n2 are equal n1 -ne n2 true if integers n1 and n2 are not equal n1 -gt n2 true if integer n1 is greater than integer n2 n1 -ge n2 true if integer n1 is greater than or equal to integer n2 n1 -lt n2 true if integer n1 is less than integer n2 n1 -le n2 true if integer n1 is less than or equal to integer n2
  • 135. The following logical operators are also available: ! negation (unary) -a and (binary) -o or (binary) () expressions within the () are grouped together. You may need to quote the () to prevent the shell from interpreting them. Introduction to Unix - 14 AUG 1996 9.9 Control Commands 9.9.7 C Shell Logical and Relational Operators The C shell has its own set of built-in logical and relational expression operators. In descending order of precedence they are: (...) group expressions with () ~ inversion (one's complement) ! logical negation *, /, % multiply, divide, modulus +, - add, subtract <<, >> bitwise shift left, bitwise shift right <= less than or equal >= greater than or equal < less than > greater than == equal != not equal
  • 136. =~ match a string !~ don't match the string & bitwise AND ^ bitwise XOR (exclusive or) | bitwise OR && logical AND || logical OR {command} true (1) if command terminates with a zero exit status, false (0) otherwise. The C shell also allows file type and permission inquiries with the operators: -r return true (1) if it exists and is readable, otherwise return false (0) -w true if it exists and is writable -x true if it exists and is executable -f true if it exists and is a regular file (or for csh, exists and is not a directory) -d true if it exists and is a directory -e true if the file exists -o true if the user owns the file -z true if the file has zero length (empty) Introduction to Unix - 14 AUG 1996 Introduction to Unix CHAPTER 10 Editors There are numerous text processing utilities available with Unix, as is noted throughout this document (e.g., ed, ex, sed, awk, the grep family, and the roff family). Among the editors, the standard "visual" (or fullscreen) editor on Unix is vi. It comprises a super-set, so to speak, of ed and ex (the Unix line editors) capabilities.
  • 137. Vi is a modal editor. This means that it has specific modes that allow text insertion, text deletion, and command entering. You leave the insert mode by typing the <escape> key. This brings you back to command mode. The line editor, ex, is incorporated within vi. You can switch back and forth between full-screen and line mode as desired. In vi mode type Q to go to ex mode. In ex mode at the : prompt type vi to return to vi mode. There is also a read-only mode of vi, which you can invoke as view. Another editor that is common on Unix systems, especially in college and university environments, is emacs (which stands for "editing macros"). While vi usually comes with the Unix operating system, emacs usually does not. It is distributed by The Free Software Foundation. It is arguably the most powerful editor available for Unix. It is also a very large software system, and is a heavy user of computer system resources. The Free Software Foundation and the GNU Project (of which emacs is a part) were founded by Richard Stallman and his associates, who believe (as stated in the GNU Manifesto) that sharing software is the "fundamental act of friendship among programmers." Their General Public License guarantees your rights to use, modify, and distribute emacs (including its source code), and was specifically designed to prevent anyone from hoarding or turning a financial profit from emacs or any software obtained through the Free Software Foundation. Most of their software, including emacs, is available at: ftp://ftp.gnu.org/pub/gnu/ and http://www.gnu.org/. Both vi and emacs allow you to create start-up files that you can populate with macros to control settings and functions in the editors. 10.1 - Configuring Your vi Session 10.2 - Configuring Your emacs Session 10.3 - vi Quick Reference Guide 10.4 - emacs Quick Reference Guide Introduction to Unix - 14 AUG 1996 CHAPTER 10 Editors 10.1 Configuring Your vi Session To configure the vi environment certain options can be set with the line editor command :set during a vi editing session. Alternatively, frequently used options can be set automatically when vi is invoked, by use of the .exrc file. This file can also contain macros to map keystrokes into functions using the map function. Within vi these macros can be defined with the :map command. Control characters can be inserted by first typing <control>-V (^V), then the desired control character. The options available in vi include, but are not limited to, the following. Some options are not available on every Unix system. :set all display all option settings
  • 138. :set ignorecase ignore the case of a character in a search :set list display tabs and carriage returns :set nolist turn off list option :set number display line numbers :set nonumber turn off line numbers :set showmode display indication that insert mode is on :set noshowmode turn off showmode option :set wrapmargin=n turn on word-wrap n spaces from the right margin :set wrapmargin=0 turn off wrapmargin option :set warn display "No write since last change" :set nowarn turn off "write" warning The following is a sample .exrc file: set wrapmargin=10 set number set list set warn set ignorecase map K {!}fmt -80 # reformat this paragraph, {!}, using fmt to 80 characters per line map ^Z :!spell # invoke spell, :!, to check a word spelling (return to vi with ^D) Introduction to Unix - 14 AUG 1996 CHAPTER 10 Editors 10.2 Configuring Your emacs Session
  • 139. Configuring the emacs environment amounts to making calls to LISP functions. Emacs is infinitely customizable by means of emacs variables and built-in functions and by using Emacs LISP programming. Settings can be specified from the minibuffer (or command line) during an emacs session. Alternatively, frequently used settings can be established automatically when emacs is invoked, by use of a .emacs file. Though a discussion of Emacs LISP is beyond the scope of this document, a few examples of common emacs configurations follow. To set or toggle emacs variables, or to use emacs built-in functions, use the <escape> key ("Meta" is how emacs refers to it), followed by the letter x, then by the variable or function and its arguments. M-x what-line what line is the cursor on? M-x auto-fill-mode turn on word-wrap M-x auto-fill-mode turn off word-wrap M-x set-variable<return> fill-column<return> set line-length to 45 45 characters M-x set-variable<return> auto-save-interval<return> save the file automatically after every 300 300 keystrokes M-x goto-line<return>16 move the cursor to line 16 M-x help-for-help invoke emacs help when C-h has been bound to the backspace key The following is a sample .emacs file: (message "Loading ~/.emacs...") ; Comments begin with semi-colons and continue to the end of the line. (setq text-mode-hook 'turn-on-auto-fill) ;turn on word-wrap (setq fill-column 45) ;line-length=45 chars (setq auto-save-interval 300) ;save after every 300 keystrokes
  • 140. ; Bind (or map) the rubout (control-h) function to the backspace key (global-set-key "C-h" 'backward-delete-char-untabify) ; Bind the emacs help function to the keystroke sequence "C-x ?". (global-set-key "C-x?" 'help-for-help) CHAPTER 10 Editors 10.3 vi Quick Reference Guide All commands in vi are preceded by pressing the escape key. Each time a different command is to be entered, the escape key needs to be used. Except where indicated, vi is case sensitive. Cursor Movement Commands: (n) indicates a number, and is optional (n)h left (n) space(s) (n)j down (n) space(s) (n)k up (n) space(s) (n)l right (n) space(s) (The arrow keys usually work also) ^F forward one screen ^B back one screen ^D down half screen ^U up half screen (^ indicates control key; case does not matter) H beginning of top line of screen M beginning of middle line of screen L beginning of last line of screen G beginning of last line of file (n)G move to beginning of line (n) 0 (zero) beginning of line $ end of line (n)w forward (n) word(s) (n)b back (n) word(s)
  • 141. e end of word Inserting Text: i insert text before the cursor a append text after the cursor (does not overwrite other text) I insert text at the beginning of the line A append text to the end of the line r replace the character under the cursor with the next character typed R Overwrite characters until the end of the line (or until escape is pressed to change command) o (alpha o) open new line after the current line to type text O (alpha O) open new line before the current line to type text Deleting Text: dd deletes current line (n)dd deletes (n) line(s) (n)dw deletes (n) word(s) D deletes from cursor to end of line x deletes current character (n)x deletes (n) character(s) X deletes previous character Change Commands: (n)cc changes (n) characters on line(s) until end of the line (or until escape is pressed) cw changes characters of word until end of the word (or until escape is pressed) (n)cw changes characters of the next (n) words c$ changes text to the end of the line ct(x) changes text to the letter (x) C changes remaining text on the current line (until stopped by escape key) ~ changes the case of the current character J joins the current line and the next line u undo the last command just done on this line . repeats last change s substitutes text for current character S substitutes text for current line
  • 142. :s substitutes new word(s) for old :<line nos effected> s/old/new/g & repeats last substitution (:s) command. (n)yy yanks (n) lines to buffer y(n)w yanks (n) words to buffer p puts yanked or deleted text after cursor P puts yanked or deleted text before cursor File Manipulation: :w (file) writes changes to file (default is current file) :wq writes changes to current file and quits edit session :w! (file) overwrites file (default is current file) :q quits edit session w/no changes made :q! quits edit session and discards changes :n edits next file in argument list :f (name) changes name of current file to (name) :r (file) reads contents of file into current edit at the current cursor position (insert a file) :!(command) shell escape :r!(command) inserts result of shell command at cursor position ZZ write changes to current file and exit Introduction to Unix - 14 AUG 1996 CHAPTER 10 Editors 10.4 emacs Quick Reference Guide Emacs commands are accompanied either by simultaneously holding down the control key (indicated by C-) or by first hitting the escape key (indicated by M-). Essential Commands C-h help C-x u undo C-x C-g get out of current operation or command C-x C-s save the file C-x C-c close Emacs
  • 143. Cursor movement C-f forward one character C-b back one character C-p previous line C-n next line C-a beginning of line C-e end of line C-l center current line on screen C-v scroll forward M-v scroll backward M-f forward one word M-b back one word M-a beginning of sentence M-e end of sentence M-{ beginning of paragraph M-} end of paragraph M-< beginning of buffer M-> end of buffer Other Important Functions M-(n) repeat the next command (n) times C-d delete a character M-d delete a word C-k kill line M-k kill sentence C-s search forward C-r search in reverse M-% query replace M-c capitalize word M-u uppercase word M-l lowercase word C-t transpose characters M-t transpose words C-@ mark beginning of region
  • 144. C-w cut--wipe out everything from mark to point C-y paste--yank deleted text into current location M-q reformat paragraph M-g reformat each paragraph in region M-x auto-fill-mode turn on word wrap M-x set-variable <return> fill-column <return> 45 set length of lines to 45 characters M-x goto-line <return> 16 move cursor to line 16 M-w copy region marked C-x C-f find file and read it C-x C-v find and read alternate file C-x i insert file at cursor position C-x C-s save file C-x C-w write buffer to a different file C-x C-c exit emacs, and be prompted to save Introduction to Unix - 14 AUG 1996 Introduction to Unix CHAPTER 11 Unix Command Summary 11.1 - Unix Commands Introduction to Unix - 14 AUG 1996 CHAPTER 11 Unix Command Summary 11.1 Unix Commands In the table below we summarize the more frequently used commands on a Unix system. In this table, as in general, for most Unix commands, file, could be an actual file name, or a list of file names, or input/output could be redirected to or from the command. Unix Commands Command/Syntax What it will do awk/nawk [options] file scan for patterns in a file and process the results cat [options] file concatenate (list) a file cd [directory] change directory
  • 145. chgrp [options] group file change the group of the file chmod [options] file change file or directory access permissions chown [options] owner file change the ownership of a file; can only be done by the superuser chsh (passwd -e/-s) username login_shell change the user's login shell (often only by the superuser) cmp [options] file1 file2 compare two files and list where differences occur (text or binary files) compress [options] file Compress file and save it as file.Z cp [options] file1 file2 copy file1 into file2; file2 shouldn't already exist. This command creates or overwrites file2. cut (options) [file(s)] cut specified field(s)/character(s) from lines in file(s) date [options] report the current date and time dd [if=infile] [of=outfile] [operand=value] copy a file, converting between ASCII and EBCDIC or swapping byte order, as specified diff [options] file1 file2 compare the two files and display the differences (text files only) df [options] [resource] report the summary of disk blocks and inodes free and in use du [options] [directory or file] report amount of disk space in use echo [text string] echo the text string to stdout ed or ex [options] file Unix line editors emacs [options] file full-screen editor expr arguments evaluate the arguments. Used to do arithmetic, etc. in the shell. file [options] file classify the file type find directory [options] [actions] find files matching a type or pattern finger [options] user[@hostname] report information about users on local and remote machines ftp [options] host transfer file(s) using file transfer protocol grep [options] 'search string' argument egrep [options] 'search string' argument fgrep [options] 'search string' argument search the argument (in this case probably a file) for all occurrences of the search string, and list them.
  • 146. gzip [options] file gunzip [options] file zcat [options] file Compress or uncompress a file. Compressed files are stored with a .gz ending head [-number] file display the first 10 (or number of) lines of a file hostname display or set (super-user only) the name of the current machine kill [options] [-SIGNAL] [pid#] [%job] send a signal to the process with the process id number (pid#) or job control number (%n). The default signal is to kill the process. ln [options] source_file target link the source_file to the target lpq [options] lpstat [options] show the status of print jobs lpr [options] file lp [options] file print to defined printer lprm [options] cancel [options] remove a print job from the print queue ls [options] [directory or file] list directory contents or file permissions mail [options] [user] mailx [options] [user] Mail [options] [user] simple email utility available on Unix systems. Type a period as the first character on a new line to send message out, question mark for help. man [options] command show the manual (man) page for a command mkdir [options] directory make a directory more [options] file less [options] file pg [options] file page through a text file mv [options] file1 file2 move file1 into file2 od [options] file octal dump a binary file, in octal, ASCII, hex, decimal, or character mode. passwd [options] set or change your password
  • 147. paste [options] file paste field(s) onto the lines in file pr [options] file filter the file and print it on the terminal ps [options] show status of active processes pwd print working (current) directory rcp [options] hostname remotely copy files from this machine to another machine rlogin [options] hostname login remotely to another machine rm [options] file remove (delete) a file or directory (-r recursively deletes the directory and its contents) (-i prompts before removing files) rmdir [options] directory remove a directory rsh [options] hostname remote shell to run on another machine script file saves everything that appears on the screen to file until exit is executed sed [options] file stream editor for editing files from a script or from the command line sort [options] file sort the lines of the file according to the options chosen source file . file read commands from the file and execute them in the current shell. source: C shell, .: Bourne shell. strings [options] file report any sequence of 4 or more printable characters ending in <NL> or <NULL>. Usually used to search binary files for ASCII strings. stty [options] set or display terminal control options tail [options] file display the last few lines (or parts) of a file tar key[options] [file(s)] tape archiver--refer to man pages for details on creating, listing, and retrieving from archive files. Tar files can be stored on tape or disk. tee [options] file copy stdout to one or more files telnet [host [port]] communicate with another host using telnet protocol touch [options] [date] file create an empty file, or update the access time of an existing file tr [options] string1 string2 Translate the characters in string1 from stdin into those in string2 in stdout uncompress file.Z uncompress file.Z and save it as a file uniq [options] file remove repeated lines in a file uudecode [file] decode a uuencoded file, recreating the original file uuencode [file] new_name encode binary file to 7-bit ASCII, useful when sending via email, to be decoded as new_name at destination
  • 148. vi [options] file visual, full-screen editor wc [options] [file(s)] display word (or character or line) count for file(s) whereis [options] command report the binary, source, and man page locations for the command named which command reports the path to the command or the shell alias in use who or w report who is logged in and what processes are running zcat file.Z concatenate (list) uncompressed file to screen, leaving file compressed on disk Introduction to Unix - 14 AUG 1996 [Next] [Previous] [Up] [Top] [Contents] [Next] [Previous] [Top] [Contents] Introduction to Unix CHAPTER 12 A Short Unix Bibliography 12.1 - Highly Recommended 12.2 - Assorted Others Introduction to Unix - 14 AUG 1996 CHAPTER 12 A Short Unix Bibliography 12.1 Highly Recommended UNIX for the Impatient, Paul W. Abrahams & Bruce R. Larson (Addison-Wesley Publishing Company, 1992, ISBN 0-201-55703-7). (A current favorite. Recommended in the CIS Department for Unix beginners.) UNIX in a Nutshell for BSD 4.3: A Desktop Quick Reference For Berkeley (O'Reilly & Associates, Inc., 1990, ISBN 0-937175-20-X). (A handy reference for BSD.) UNIX in a Nutshell: A Desktop Quick Reference for System V & Solaris 2.0 (O'Reilly & Associates, Inc., 1992, ISBN 0-56592-001-5). (A handy reference for SysV and Solaris 2.) The UNIX Programming Environment, Brian W. Kernighan & Rob Pike (Prentice Hall, 1984). (A classic. For serious folks.) When You Can't Find Your UNIX System Administrator, Linda Mui (O'Reilly & Associates, Inc., 1995, ISBN 1-56592-104-6).
  • 149. UNIX Power Tools, Jerry Peek, Tim O'Reilly, and Mike Loukides (O'Reilly & Associates, 1993, ISBN 0-679-79073-X). (Includes a CDROM of useful software for various OSs.) Introduction to Unix - 14 AUG 1996 CHAPTER 12 A Short Unix Bibliography 12.2 Assorted Others Understanding UNIX: A Conceptual Guide, James R. Groff & Paul N. Weinberg (Que Corporation, 1983). Exploring the UNIX System, Stephen G. Kochan & Patrick H. Wood (SAMS, a division of Macmillan Computer Publishing, 1989, ISBN 0-8104-6268-0). Learning GNU Emacs, Debra Cameron and Bill Rosenblatt (O'Reilly & Associates, 1992, ISBN 0-937175-84-6). UNIX for Dummies, John R. Levine & Margaret Levine Young (IDG Books Worldwide, Inc., 1993, ISBN 0-878058-58-4). A Practical Guide to UNIX System V, Mark G. Sobell (The Benjamin/Cummings Publishing Company, Inc., 1985, ISBN 0-80-530243-3). UNIX Primer Plus, Mitchell Waite, Donald Martin, & Stephen Prata, (Howard W. Sams & Co., Inc., 1983, ISBN 0-672-30194-6). An Introduction to Berkeley UNIX, Paul Wang, (Wadsworth Publishing Company, 1988). Unix Shell Programming, Stephen G. Kochan & Patrick H. Wood (Hayden Book Co., 1990, ISBN 0-8104-6309-1). The Unix C Shell Field Guide, Gail Anderson and Paul Anderson (Prentice Hall, 1986, ISBN 0-13-937468-X). A Student's Guide to UNIX, Harley Hahn. (McGraw-Hill, 1993, ISBN 0-07-025511-3). Tricks of the UNIX Masters, Russell G. Sage (Howard W. Sams & Co., Inc., 1987, ISBN 0-672-22449-6). Introduction to Unix - 14 AUG 1996