Lec6 Command Line Variations.ppt

advertisement
Command Line Variations
Selected Readings in Chapters 3, 5, 6
 Project
1 kickoff
 Streams & Redirection: Sections 5.2, 5.3
 Pipes and Tees: Sections 5.4, 5.5
 Filenames & Wildcards: Section 3.1
 Job Control: Section 5.10
 Filter Commands: details in Chapter 6
cat, tr, head, tail, cut, paste, sort,
wc (word count)
Figure 5-4
Standard Streams
Standard I/O
 Standard
Output (stdout) labelled (1) above
– default place to which programs write
 Standard
Input (stdin) labelled (0) above
– default place from which programs read
 Standard
Error (stderr) labelled (2) above
– default place where errors are reported
 To
demonstrate -- cat
– Echoes everything you typed in with an <enter>
– Quits when you press Ctrl-d at a new line -- (EOF)
Figure 5-6
Redirecting Standard Output
Redirecting Standard Output
 cat
file1 file2 > file3
– concatenates file1 and file2 into file3
– file3 is created if not there
– Any pre-existing file3 is clobbered if there
 cat
file1 file2 >> file3
– file3 is created if not there
– file3 is appended to if it is there
 cat
> file3
– file3 is created from whatever user provides from
standard input
Figure 5-7
Print who Output
Redirecting Standard Error

In bash (for shell scripts), standard error is redirected
using 2>
– cat myfile > yourfile 2> yourerrorfile




A better example that generates errors:
ls –R /
recursively list all files from root
you will get many screens of output
Redirect output into a file:
ls –R / > allfiles
save output from above
you will get many “permission denied errors”
more allfiles
but you can look at listing in file now
Redirect errors to a second file:
ls –R / > allfiles 2> errors
errors go into file errors
If you don’t care about errors
ls –R / > allfiles 2> /dev/null /dev/null is a ‘bit bucket’
where bits go to die!
Figure 5-5
Redirecting Standard Input
Redirecting Standard Input
 terra[1]
$ cat < oldfile > newfile
 A more useful example:
– terra[2] $ tr string1 string2
Read from standard input.
Character n of string1 translated to
character n of string2.
Results written to standard output.
– Example of use:
terra[3] $ tr aeoiu eoiua
terra[4] $ tr a-z A-Z < file1 > file2
/dev/null
 /dev/null
– A virtual file that is always empty.
– Copy things to here and they disappear.
cp myfile /dev/null
mv myfile /dev/null
– Copy from here and get an empty file.
cp /dev/null myfile
– Redirect error messages to this file
cat myfile > yourfile 2> /dev/null
Basically, all error messages are discarded.
Figure 6-1
Concept Of A Filter
Basic Filters
 Filters
are programs that:
– Read stdin.
– Modify it.
– Write the results to stdout.
 Filters
typically do not need user input.
 Example:
– tr (translate):
 Read stdin
 Echo to stdout, translating some specified
characters
 Many
filters can also take file names as
operands for input, instead of using stdin.
Filtering using tr (translate command)

Using tr to translate what you type into upper case
tr [a-z] [A-Z]
(enter, type, enter etc. ctrl-D to quit)

Using tr to translate a file using input redirection
tr [a-z] [A-Z] < foods
(now foods will appear UC)
tr [a-z] [A-Z] foods (also OK, tr accepts filename args)

Using tr to translate a file using input redirection and
store results using output redirection
tr [a-z] [A-Z] < foods > foodsCAP
tr [a-z] [A-Z] foods > foodsCAP (also OK, see above)
(now foodsCAP will hold UC output from foods)
More filters: grep, wc, sort (see Ch6)
 grep
patternstr
– Read stdin and write lines with patternstr to stdout
terra[1] $ grep "unix is easy" < myfile1 > myfile2
terra[1] $ grep "unix is easy" myfile1 > myfile2 (also OK)
– Write all lines of myfile1 containing phrase unix is easy
to myfile2
 wc
– Count the number of chars/words/lines on stdin
– Write the resulting statistics to stdout
– Example: (wc < mars.txt
OR wc mars.txt )
 sort
– Sort all the input lines in alphabetical order and write to
the standard output.
Figure 5-8
Piping Output to Next Command
Pipes
 The
pipe:
– Connects stdout of one program with stdin of another
– General form:
command1 | command2
– stdout of command1 used as stdin for command2
– Example:
terra[1] $ cat foods | grep apples | wc -l
 A pipe
works the same as (but more efficient than)
terra[2] $ cat foods > tmp1
terra[3] $ grep apples < tmp1 > tmp2
terra[4] $ wc -l < tmp2
 Actually
cat is redundant: grep apples foods | wc -l
Redirecting and Pipes (2)
 Note:
The name of a command always comes
first on the line.
 There may be a tendency to say:
terra[1] $ foods > grep apples | wc -l
– This is WRONG!!!
– Your shell will go looking for a program named foods
 To
do it correctly, many alternatives!
terra[1] $ cat foods | grep apples | wc -l
terra[2] $ grep apples < foods | wc -l
terra[3] $ grep apples foods | wc -l
terra[4] $ grep -c apples foods
The tee Command (don’t worry about this)
 tee
- replicate the standard output
– cat readme.txt | tee myfile
stdin
tee
stdout
myfile
Unix Filename Rules
 Almost
any character is valid in a file name
– all the punctuation and digits
– the one exception is the / (slash) character
– the following are not encouraged
 ? * [ ] “ ” ’ ( ) &:;!
– the following are not encouraged as the first
character
 - ~
– control characters are also allowed, but are not
encouraged
 UPPER
and lower case letters are different
– A.txt and a.txt are different files
Unix Filename Extensions
 No
enforced extensions
– The following are all legal Unix file names
a
 a.
 .a
…
 a.b.c
 Remember
files beginning with dot are hidden
– ls cannot see them, use ls -a
.
and .. are reserved for current and parent
directories
Unix Filename Extensions

Even though Unix doesn't enforce extensions,
– “.” and an extension are still used for clarity
 .jpg for JPEG images
 .tex for LaTeX files
 .sh for shell scripts
 .txt for text files
 .mp3 for MP3’s
– some applications may enforce their own extensions
 Compilers look for these extensions by default
– .c means a C program file
– .C or .cpp or .cc for C++ program files
– .h for C or C++ header files
– .o means an object file
Unix Executable Files
 Executable
files usually have no extensions
– cannot execute file a.exe by just typing a
– telling executable files from data files can be difficult
 “file”
command
Use: file filename
Result: print the type of the file
Example: terra[1] $ file ~/.bashrc
.bashrc:
executable bash-shell script
 Filenames
and pathnames have limits on lengths
– 1024 characters typically
– these are pretty long (much better than MS-DOS
days and the 8.3 filenames)
Fixing Filename Mistakes

It is very easy to get the wrong stuff into filenames
– Say you accidentally typed
terra[3] $ cp myfile -i
– What if you type
terra[4] $ rm -i
 The shell thinks -i is an option, not a file
 Getting rid of these files can be painful

Creates a file
with name -i
There is an easy way to fix this...
– You simply type
terra[5] $ rm -- -i
– Many commands use “--” to say there are no more options
Filename Wildcarding (See section 3.1)

Wildcarding is the use of “special” characters to represent
or match a sequence of other characters
– a short sequence of characters can match a long one
– a sequence may also match a large number of sequences

Often use wildcard characters to match filenames
– filename substitution – generally known as “globbing”

Wildcard characters
* matches a sequence of zero or more characters
– Example: a*.c*
matches abc.c, abra.cpp,
? matches any single character
– Example: a?.c
matches ab.c, ax.c, but not abc.c
[...] matches any one character between the braces
– Example: b[aei]t
matches bat, bet, or bit, not baet
Filename Wildcarding (2)

Wildcard sequences can be combined
terra[6] $ mv a*.[ch] cfiles/
 mv all files beginning with a and ending with .c or .h into
the directory cfiles
terra[7] $ ls [abc]*.?
 list files whose name begins with a, b, or c and ends with .
(dot) followed by a single character

Wildcards do not cross "/" boundaries
– Example: csnow*c does not match csnow/codec

Wildcards are expanded by the shell, and not by the
program
– Programmers of commands do not worry about searching
the directory tree for matching file names
– The program just sees the list of files matched
Filename Wildcarding (3)


Matching the dot
– A dot ( . ) at
 the beginning of a filename, or
 immediately following a /
must be matched explicitly.
– Similar to the character /
– Example:
terra[8] $ cat .c*
cat all files whose names
begin with .c
As mentioned earlier, [....] matches any one of the
characters enclosed
– Within “[...]”, a pair of characters separated by “-” matches
any character lexically between the two
 Example:
lists all files beginning
terra[9] $ ls [a-z]*
with a character between
ASCII ‘a’ and ASCII ‘z’
Processes and Job Control
Figure 5-14
Job States
Foreground and Background (1)
 Unix
is a multi-tasking operating system
– some of these tasks are being done by other
users logged in
– some are being done by you in the
background
e.g. watching for incoming mail
 When
you run a task (a Unix command,
like ls or vi) it executes in the foreground
of your shell
– it has the “control" of your screen and
keyboard
Foreground and Background (2)
 If
you still want to use your shell command line
 terra[1]
$ a_heavy_task &
 [1] 13607
 terra[2] $
 When
you put a task in background
– task keeps running, but you continue to work at the
shell in the foreground
– if any output is done, it appears on your screen
immediately (can be confusing)
– if input is required, process prints a message and
stops
– when it is done, a message will be printed
Example ls –R /





(again)
Kick off a long command
ls –R / > listall
Suspend, Ctrl-Z
Send to background
bg
[1] ls –R / >listall&
Oops, still get errors! Now you have to kill a background
job:
kill %1
(or kill -9 %1)
[1] terminated
Restart it the right way, in background, with err redirect:
ls –R / > listall 2> /dev/null &
Foreground and Background (3)
 Explicit
background processes are needed
less often with windowing systems
– Just go to another window and run the
command
 But
explicit background processes are
used often ...
– A command needs a long time, you do not
want to close that window by accident
– Run a job at the background and logout
– netscape& will open a new window, but leave
the current shell window still available to use
A Simple Script



We use the following shell script to illustrate job control
Edit a file make_noise
terra[1] $ cat > make_noise
#!/bin/sh
while true
do
date
sleep 1
done
^D
terra[2] $ chmod u+x make_noise
make_noise then is a shell script repeats to print the
time for every second, until you terminate it using
Ctrl-c.
Job Control – Suspending Jobs
 csh,
tcsh, and bash allow you to manage
the running of different processes
 Suspending jobs
– the Ctrl-z special character stops the job
terra[1] $ make_noise
Fri May 16 14:14:43 EDT 2003
……
^Z
Suspended
terra[2] $ vi readme
^Z
Job Control - Monitoring Jobs
 The
"jobs" command shows which of your
jobs are running and/or stopped.
terra[3] $ jobs
[1] + Suspended
[2] + Suspended
 Here
make_noise
vi readme
there are two suspended processes,
the make_noise and a vi process.
Job Control – Resuming Jobs
 Putting
jobs back into the foreground:
– Use the "fg" command to move a job into the
foreground.
terra[4] $ fg %2
– Puts job number 2 into the foreground.
– Works with either a background or stopped
job.
 Putting
jobs into the background:
terra[5] $ bg %1
Job Control – Killing Jobs
 Jobs
can also be killed
– Use the Unix "kill" command
terra[6] $ kill %1
or if it won't die ...
terra[7] $ kill –9 %1
 Jobs
can be stopped and continued
terra[8] $ a_heavy_task &
terra[9] $ stop %1
terra[10] $ bg %1
Using ps (1)
 Jobs
are really just a special case of Unix
processes
 ps can list your current processes
terra[11] $ ps
PID TT
S
2312 pts/0 T
2296 pts/0 R
2313 pts/0 R
TIME
0:00
0:00
0:00
COMMAND
vi
tcsh
ps
Using ps (2)
 The
ps command takes a number of
options
-l
gives you a long listing of what is going
on
-u loginid tells you about loginid's
processes
use man ps to see more options
 kill
pid kills the process pid
– TERM signal will be sent to the process pid
– kill -9 or kill -KILL will send the KILL signal
– Use man –s 5 kill to find out more signals
Download