26
Lecture 4 Shell environment III: - command alias & history; - job control; - editor (vim) CSE4251 The Unix Programming Environment 1

Lecture 4 Shell environment III: - command alias & history; - job control; - editor (vim) CSE4251 The Unix Programming Environment 1

Embed Size (px)

Citation preview

Lecture 4

Shell environment III:- command alias & history;- job control;- editor (vim)

CSE4251 The Unix Programming Environment

1

Recap

• Shell environment II– I/O redirection & pipe: <, >, >>, 2>, 2>>, 2>&1, |, tee– building complex commands: &, ;, ?, &&, ||, – shell variables: e.g., export PATH in ~/.bashrc– Lab1: DUE 11:59pm, Tuesday, Feb 17, 2015

2

alias

• shortcuts for long/complex commands– set alias: $ alias short_name=‘long_complex_command’

E.g., $ alias lm=‘ls –l | more’ #ls page by page

E.g., $ alias rm=‘rm –i’ #prompt before every removal

E.g., simulate DOS commands cls and dir : $ alias cls=‘clear’ #clear the screen $ alias dir=‘ls -l’

alias

• shortcuts for long/complex commands– show all aliases defined:

$ alias

[23:58:29][zhengm@apollo-tesla:~]$ alias ...alias ls='ls --color=auto' alias ll='ls -l --color=auto‘alias vi='vim‘alias cdmy='cd /home/zhengm/0repos/emulator-iscsi/pfe_apps/MySQL‘...

alias

• shortcuts for long/complex commands– unset alias: unalias

$ unalias lm$ unalias rm

$ unalias cls $ unalias dir

• difference b/w alias and variable– aliases are used directly as “new” commands– variables are used as part of other commands

(e.g., echo $SHELL)

command history

• shell saves recently used commands– list all saved commands: $ history

or, use alias to save some typing in the future:$ alias h=‘history’$ h

– list N most recent commands: $ history N $ history 3

– size of history: $ echo $HISTSIZE$ echo $HISTSIZE1000

$ history 3 1003 history 1004 vim ~/.bash_history 1005 history 3

command history

• invoke previously used commands– execute the last command again:

$ !!– execute a command based on cmd#:

$ !cmd_numberE.g., $ !1005 #equal to $ man rm

– execute a command based on (partial) name: $ !cmd_nameE.g., $ !al #the last command begin w/ “al”

#equal to $ alias

• where is history stored: ~/.bash_history

$ history ... 1005 man rm 1006 alias 1007 man history 1008 history

Job control

• The shell allows you to run/manage multiple jobs in one terminal– place jobs in the background

• you can have multiple background jobs• two background states: stopped and running

– move a job to the foreground• you can have only one foreground job (in one terminal)

– suspend a job– kill a job– get information about a job

Background jobs

• If you follow a command with "&", the shell will run the job in the background– don't need to wait for the job to complete, you can type in a

new command right away– can have a bunch of jobs running in the background

$ tar -zvcf /tmp/etc.tar.gz /etc &[1] 7507

run in backgroundjob # PID (process# )

E.g., start a background job:

Background jobs

• If you follow a command with "&", the shell will run the job in the background– don't need to wait for the job to complete, you can type in a

new command right away– can have a bunch of jobs running in the background

[1]+ Done tar -zvcf /tmp/etc.tar.gz /etc

the cmd for the jobjob # finished successfully

E.g., when the background job completes:

Background jobs

• If you follow a command with "&", the shell will run the job in the background– don't need to wait for the job to complete, you can type in a

new command right away– can have a bunch of jobs running in the background– still output to the screen by default (stdout & stderr);

• use I/O redirection to save stdout/stderr in log file and thus avoid interference

$ tar -zvcf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>&1 &[1] 7529

Background jobs

• Throw a job into background (suspend a job)– [ctrl]-z

• List current background jobs– $ jobs

[17:41:57][zhengm@apollo-tesla:~]$ vi ~/.bashrc

[1]+ Stopped vim ~/.bashrc[18:04:24][zhengm@apollo-tesla:~]$

$ jobs -l[1]+ 7903 Stopped vim ~/.bashrc

• make a stopped background job run in background – $ bg %job_number

• bring a background job to foreground– $ fg %job_number

E.g. $ fg %1 [17:41:57][zhengm@apollo-tesla:~]$ vi ~/.bashrc

[1]+ Stopped vim ~/.bashrc[18:04:24][zhengm@apollo-tesla:~]$ fg %1

Background jobs

• kill the foreground job– [ctrl]-c

• kill a background job– $ kill –signal %job_number

E.g., $ kill -9 %1

• Check signals– $ kill –l

E.g., 9) SIGKILL 15) SIGTERM

$ jobs[1]+ Stopped vim ~/.bashrc[18:30:12][zhengm@apollo-tesla:~]$ kill -9 %1; jobs[1]+ Stopped vim ~/.bashrc[18:30:30][zhengm@apollo-tesla:~]$ jobs[1]+ Killed vim ~/.bashrc[18:30:51][zhengm@apollo-tesla:~]$ jobs[18:30:58][zhengm@apollo-tesla:~]$

Kill jobs

• jobs: list current jobs• [ctrl]-z: suspends the foreground job• [ctrl]-c: kill the foreground job• bg: run the most recently suspended job in the

background• fg: move the most recently backgrounded job from the

background into the foreground• kill: terminate a job

kill [-signal#] %job_numberkill –l : list the kill signals

summary of job control

editor

• recommended: either vi/vim or emacs

• vi exists in every Unix-like OSes– default interface for important commands/tools, e.g.:

visudo #edit superuser privileges crontab #schedule auto-run programs

• a “modal” editor: has two modes– edit mode: your keyboard is the one you’re familiar with

(e.g., typing “i” means printing “i” on screen), just like typing in gedit or MS Word

– command mode: letters have special meaning; do some special tasks (e.g., jump to line# 10,000 directly, replace all “cse4241” with “cse4251” in one go, delete 100 lines below, save and quit, ...)

vi/vim 101

• vim is an improved version of vi– more functionalities, easier to use– similar to ~/.bashrc, vim has a configuration file called

~/.vimrc

Example configurations:set nu " show line numberset nonu " no line numberset tabstop=4 " numbers of spaces of tab charactersyntax on " syntax highlight

vi/vim 101

• open an file: $ vim myscript.sh

vi/vim 101

information about file and command; default in command mode

cursor

~ means empty line

line# (if enabled)

• enter edit mode: type i

vi/vim 101

typing “i” tells the editor you want to insert text

• edit text: type “hello,” [Enter], “world!”

vi/vim 101

keep showing your current mode

type letters normally; [Enter] to start a newline

• finish editing, exit edit mode and return to command mode: [Esc]

vi/vim 101

after [Esc], you have returned to command mode

• enter a command: type :wq , then [Enter]

vi/vim 101

• You have successfully created, edited, and saved a file using vim

vi/vim 101

[21:25:19][zhengm@apollo-tesla:~]$ ls -l myscript.sh-rw-rw-r--. 1 zhengm zhengm 14 Sep 25 21:25 myscript.sh[21:25:37][zhengm@apollo-tesla:~]$ cat myscript.shhello,world![21:25:51][zhengm@apollo-tesla:~]$

More resources

• How to use vi/vim– http://www.washington.edu/computing/unix/vi.html– http://www.openvim.com/tutorial.html

• How to use Emacs– http://zoo.cs.yale.edu/classes/cs210/help/emacs.html