Post on 29-Dec-2015
Prime View, Inc. 1
Prime View, Inc. 2
Chapter Objectives
· In this chapter, you will learn about: · Command history· Output redirection and pipes· Filename metacharacters· Pathname and command completion· Command sequences and groups- Command substitution· Background process and job control
Prime View, Inc. 3
Command History
· The Korn shell maintains a history list of previous commands- To display the history list use the history command- By default , history displays the 16 most recent commands; e.g.,$ history5 ls -il6 cp legal legal2...18 diff list.dat new.dat19 history$ - The command number and command text are displayed· By default, the Korn shell remembers the 128 most recent commands
- To display different portions of the history list:$ history 60 - From command 60 on...$ history -60 - 60 most recent commands...$
Prime View, Inc. 4
Command History (continued)
· The r command allows you to re-execute previous commands
$ r - Most recent command$ r 100 - Command number 100$ r -2 - Second most recent command$ r d - Most recent command beginning with d· The Korn shell supports interactive vi- and EMACS-style command editing- Our Korn shells are set to use vi-style editing- Press Esc to enter vi mode, then press:k, j, /, ? to move "up," "down" the command listh, l to move left, right in the current linex, i, a to delete, insert, append text (remember to press Esc after each insert/append)
- Press Enter when done editing -- Often, just k, j are used to select command to reexecute
· The Korn shell's vi mode supports nearly all of vi's cursor-movement and line-editing commands- Refer to Appendix C, "vi Tutorial"
Prime View, Inc. 5
Output Redirection
· The output redirection symbol, >, causes the shell to redirect a program's standard output to a file- Causes "good" output to go into the file (almost always)- Error messages (if any) still appear on the terminal- > is a shell metacharacter
$ cal 11 1996 > Nov_96$ more Nov_96$ history -100 > last_100$ more last_100
·” >” causes the shell to - Create the output file, if it doesn't exist -- Requires write permission on the directory - Overwrite the output file, if it already exists -- Requires write permission on the file· “>>” causes the shell to- Create the output file, if it doesn't exist- Append to the output file, if it already exists
$ cal 1996 > 96_and_97$ cal 1997 >> 96_and_97$ more 96_and_97
Prime View, Inc. 6
Pipes
· The pipe symbol, |, causes the shell to connect a program's standard output to the standard input of another program- Causes "good" output to flow as input of the other program-- Second program must expect to receive standard input!-- more is the only such program we've introduced so far- | is yet another shell metacharacter
$ cal 1996 | more ... see output one screenful at a time ...$ history -100 | more...
pipecal 1996 morestdout from cal stdin for more
Prime View, Inc. 7
Filename Metacharacters
· Filename metacharacters provide shorthand notation for sets of filenames? - Matches any single character* - Matches any sequence of characters (0 or more)[] - Matches any single character in the set or range bounded by square brackets
· Suppose the following files are in your directory:
chap1 chap12 chap4 chap7 func.c prog.ochap1.new chap12.new chap4.new chap7.new func.h sort.cchap10 chap2 chap5 chap8 func.o sort.hchap10.new chap2.new chap5.new chap8.new prog sort.ochap11 chap3 chap6 chap9 prog.cchap11.new chap3.new chap6.new chap9.new prog.h
· When a filename metacharacter appears in a command-line word, the shell searches for matching files and substitutes the list of matched files in place of the command-line word
Prime View, Inc. 8
Filename Metacharacters (continued)
$ more chap? # same as: more chap1 chap2 ... chap9$ rm *.0 # same as: rm func.o prog.o sort.o$ more func.[ch] # same as: more func.c func.h$ ls -l *.new # same as: ls -l chap1.new chap10.new ...$ more chap[135] # same as: more chap1 chap3 chap5$ ls -l chap[3-6]* # same as: ls -l chap3 chap3.new chap4 ...
· What about$ rm -i * $ more *[0-9][0-9]* $ ls ????
Pathname and command completion
Metacharecters (‘wild cards’) can also be used in pathname or command completition. Suppose you have a subdirectory called my_glorious_scripts_for_this UNIX_ course
$ cd my_*will do the trick for you. Depending on the shell version, <Esc>\ sequence for completion of unambiguous names or <Esc>= to recuest the list of possible matches might work too.
Prime View, Inc. 9
Command Sequences and Groups
· Commands can be sequenced with “;”
$ date > who_now; who >> who_now; more who_now
· Commands can be grouped with ( )- Allows redirection or piping of the entire group
$ (date;who) > who_now; more who_now...$ (cal 1996;cal 1997) | more...$
Prime View, Inc. 10
Filtering with grep
Try this command:$ ps -ef |grep bash |grep -v grep
Compare with output from ps -ef. What is the difference? Grep in the first pipe filters only for those lines that contain the search string, grep -v in second pipe removes our own process. In effect, we get a list of users running bash shell. Wouldn’t it be nice to have this list sorted? Try pipe it to sort:
$ ps -ef |grep bash |grep -v grep|sortWhat if we do not want to see all users, but want just to know how many of them are logged in? Put grep -c in place of sort in example above. Other way to do this would be to use wc (word count) utility like this:
$ ps -ef |grep bash |grep -v grep| wc -lLet’s say we have a big system with many users and want to put this list in the file.
$ ps -ef |grep bash |grep -v grep| tee users.lstThis way we can also watch output on the screen as it goes to file. Is the file to big?
$ split -l 3 users.lst three_lineThis will split original file by 3 lines pieces named like three_lineaa, three_lineab etc.
Prime View, Inc. 11
Check the directory listing to confirm. Let’s use grep to find out in what file is the teach’s process:
$ grep teach three_line??Put the files back together again:
$cat three_line* > big.list
Command Substitution
· Suppose we want to search the eight oldest (least recently modified) files in our directory for lines containing "Alice"
· Select the right tools for the job
$ ls -1t... filenames, 1 column, newest to oldest ...$ ls -1t | tail -8... names of eight oldest files ...$ ls -1t | tail -8 | grep Alice... file names containing Alice in file name ...$
Prime View, Inc. 12
Command Substitution (continued)
· grep is the right tool in the wrong place- Somehow, we need the output of "ls -1t | tail -8" to be treated as arguments to "grep Alice," not as standard input
· The standard output of a command or pipeline can be given as arguments to another command using backquotes$ grep Alice `ls -1t | tail -8`... lines containing Alice ...$
· The shell executes the command in backquotes first !!!- The shell collect the command's standard output, and substitutes it as arguments to the left-hand command
· Standard output of any command can be substituted as arguments to any other command
Prime View, Inc. 13
Command Substitution (continued)
$ dateTue Jan 9 17:51:34 EST 1996$ echo Today is `date`Today is Tue Jan 9 17:51:34 EST 1996$ echo Today is `date | awk '{print $2, $3 ",", $6}’`Today is Apr 20, 1999· The Korn shell provides $(...) as an alternative to the older `...`
$ echo Today is $(date | awk '{ print $2, $3 ",", $6 }')Today is Jan 9, 1996
Two words about awk
Awk is a scripting language found in practically all UNIX flavors. Detail discussion on awk is far beyond this course. For our purposes we need to know only its general form:
awk [options] ‘script’ var=value file(s)For example, get list of all users on your server:
$ awk -F: ‘{print “user “ $1}’ /etc/passwd
Prime View, Inc. 14
Space Around Metacharacters
· Whitespace is optional around ;, (...), >, >>, and |, but not around ?, *, and [...]
· These two commands are the same
$ ls -li>long_out;more long_out$ ls -li > long_out ; more long_out
· These two commands are not t he same!
$ rm [Tt]*$ rm [T t] *
Prime View, Inc. 15
Starting a Background Process
· So far, we've executed programs in foreground
- The shell waits for the command to finish before issuing a prompt
· Any program can be executed in the background- The shell starts the program, then issues a prompt immediately-- UNIX is multitasking: no need to wait!
· Good candidates include programs that- Create their own user interface windows, or- Run for a long time and need no terminal I/O
· To execute a program in the background, add “&” at the end of the command line
$ xclock &[1] 273$
Prime View, Inc. 16
Job Number and PID
· xclock's job number and process ID number (PID) are displayed, immediately followed by a prompt
· Job numbers are assigned by the shell- Each background job executed by a shell is given a unique job number
· PIDs are assigned by the system- Each process currently running on the system has a unique PID
Process Status
· The ps command displays process status- With no argument, only shows the current shell's processes - Displays PID, controlling terminal, cumulative execution time, and command name
$ psPID TTY STAT TIME COMMAND18386 p0 S 0:00 ksh 18387 p0 S 0:00 xclock 18388 p0 R 0:00 ps
Prime View, Inc. 17
Process Status (continued)
· To see every process on the system, in detail, try
$ ps -ef # System V$ ps -aux # BSD
· Output will be long; good idea to pipe trough “more”- Most processes are systems daemons
$ ps -auxUSER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMANDalex 18386 0.1 1.5 928 472 p0 S 17:19 0:00 ksh alex 18387 0.2 3.8 2200 1200 p0 S 17:19 0:00 xclock alex 18428 0.0 1.7 920 536 p0 R 17:21 0:00 ps -aux …
Try to get process ID for teach’s shell. Hint: pipe ps to grep
Prime View, Inc. 18
Killing Processes
· The intr and quit characters (Ctrl-C and Ctrl-\, on our systems) cause the tty driver to generate INTerrupt and QUIT signals, respectively, to foreground processes only
- Usually kills the current foreground job- Background jobs are not sent the signals
· To kill background jobs, use the kill command
- By default, kill sends a TERMinate signal to a process-- Usually kills the process- Give PID(s) as argument(s)- Unless you are the super-user, you can only kill your own processes
$ kill 18387 # kills xclock, if 18387 is PID
Prime View, Inc. 19
Killing Processes (continued)
· Some processes ignore TERMinate; e.g., the shell· Processes cannot ignore “KILL”, signal number 9 (INTerrupt is 2, QUIT is 3, TERMinate is 15, etc.)
· kill -9 <PID> - is a sure kill- Many systems allow kill -KILL <PID>· When a terminal "freezes"- Log in on another terminal, with the same user name- Use ps to get the PID of the hung terminal's shell- Do kill -9 on the shell
· Do not use kill -9 on database, mail, or lineprinter processes unless no alternative exists- Can corrupt synchronized data files
Prime View, Inc. 20
Job Control
· Job control originated in the C shell under BSD- The Korn shell supports job control if the underlying operating system does; some older SVR3-based systems do not
· Each command or pipeline is a job; jobs may be stopped, started in the foreground or background, moved between foreground and background, or killed
· To stop (or suspend) a job, press the tty driver's susp character (usually CTRl-Z); then use
jobs - Display current jobsbg %N - Run job N in the backgroundfg %N - Run job N in the foregroundkill %N - Send TERMinate to job N
Prime View, Inc. 21
Who are you, where are you?
OK, it can happen to everybody. You got lost. What user ID you are and on what machine?$ whoamiikovalev$ who am iikovalev /dev/pts/93 Mar 11 21:25
Feel better already.$ where am iksh: where: not found
Oops, watch your language!$ hostnamefreenet.nether.net
Isn’t it nice command? Let’s see if we can find out more about it.$ which hostname/bin/hostname$ whereis hostnamehostname: /etc/hostname.le0 /etc/hostname.le1 /usr/bin/hostname /usr/ucb/hostname$ ls -l /usr/bin/hostname /usr/ucb/hostname-r-xr-xr-x 1 bin bin 525 Oct 6 1998 /usr/bin/hostnamelrwxrwxrwx 1 root root 15 Nov 14 1999 /usr/ucb/hostname -> ../bin/hostname
Prime View, Inc. 22
Chapter Summary
In this chapter, you have learned about
· Command history history rvi-style command editing
· Output redirection and pipes > >> |· Filename metacharacters * ? [...]· Pathname and command completion· Command sequences, groups ; (...)- Command substitution ` `· Background processes & ps kill· Job control susp character (Ctrl-Z)
jobs fg bg kill- grep, sort, wc, tee, split- whoami, who am i, whereis, which, hostname