|
Module8 Using Commands within the Korn Shell
Using the Shell Metacharacters
Korn shell支持用一些特殊的符号来代替特殊的意义,有3种metacharacters: 1.路径名(path name)metacharacters 2.文件名置换(file name substitution)metacharacters 3.重定向(redirection)metacharacters 注意不要在创建文件和目录名的时候使用这些metacharacters,因为它对Korn shell有着特殊的含义
Using the Path Name Metacharacters
波浪号~代表当前用户的主目录,是绝对路径的缩写,如下: $ cd ~/dir1 $ pwd /export/home/user1/dir1/ $ ~在除了Borune shell的所有shell中都起作用
在~号跟着用户名可以切换到该用户的用户主目录,如下: $ cd ~user2 $ pwd /export/home/user2 $
波浪号和加号的组合(~+)代表当前工作目录 波浪号和破折号的组合(~-)代表之前的工作目录 如下是列出当前工作目录和返回到之前的工作目录: $ cd $ pwd /export/home/user1 $ cd dir2 $ ls ~+ beans notes recipes $ cd ~- $ pwd /export/home/user1 $ cd ~- $ pwd /export/home/user1/dir2 $
破折号(-)代表之前的工作目录,可以使用-进行目录之间的切换,shell自动显示当前目录路径,如下是在tmp和user1目录之间进行切换: $ cd $ pwd /export/home/user1 $ cd /tmp $ pwd /tmp $ cd - /export/home/user1 $ cd - /tmp $
Using the File Name Substitution Metacharacters
星号(*)通常作为通配符,来代表0个或多个字符,如下是列出所有以f开头的文件和目录(除了隐藏文件和隐藏目录: $ ls f* feathers file.1 file.2 file.3 file4 fruit2 feathers_6 file1 file2 file3 fruit $ 列举以3结尾的文件和目录,如下: $ ls *3 file.3 file3 dir3: cosmos moon planets space sun vegetables $
问号(?)代表了任何单个字符,比如列出以dir开头然后紧跟某个字符的所有文件和目录(除了隐藏文件和隐藏目录): $ ls dir? dir1: coffees fruit trees dir2: beans notes recipes dir3: cosmos moon planets space sun vegetables dir4: constellation memo roses dir5 $ 假如没有找到匹配内容,将返回错误提示信息,如下: $ ls z? z?: No such file or directory $
方括号([])代表单个字符中可选的一组范围,比如[abc]*即代表以a或者b或者c打头的,这个写法等同于[cab]*,即顺序与否无所谓.还可以使用连字符(-)来连接第一个和最后一个字符,比如[a-z]就是从a到z,[0-9]即为0到9.如下是列举所有以a到f开头的文件和目录: $ ls [a-f]* brands dante_1 file.1 file2 file4 celery feathers file1 file.3 fruit dante feathers_6 file.2 file3 fruit2 dir1: coffees fruit trees dir10: planets dir2: beans notes recipes dir3: cosmos moon planets space sun vegetables dir4: constellation memo roses dir5: $ 列举以f或者以p开头的文件和目录,如下: $ ls [fp]* feathers file.1 file.2 file.3 file4 fruit2 feathers_6 file1 file2 file3 fruit perm: group motd passwd skel vfstab practice1: appointments file.1 file.2 play $
前引号(‘ ‘)告诉shell忽略其中的内容 双引号(“ “)告诉shell忽略其中除了$,`和\3种符号以外的内容 反斜线(\)防止shell把在它之后的内容解释成metacharacters 如下是前引号的例子: $ echo ‘$SHELL‘ $SHELL $ (echo命令把参数输出到标准输出上去) 再来看看双引号的实例,如下: $ echo "$SHELL" /bin/ksh $ 来看下反斜线的例子,如下: $ echo "\$SHELL" $SHELL $ 后引号(’ ’)让shell来执行和显示系统命令的输出,如下是执行pwd命令和执行date命令: $ echo “The user is currently in the $(pwd) directory.” The user is currently in the /export/home/user1 directory. $ echo “Today’s date is ‘date‘” Today’s date is Wed Apr 7 14:10:05 MDT 2004 $
Using the Redirection Metacharacters
先来看看标准输出标准输入的概念,如下图:
 从上图可以看出:默认情况下,shell从键盘接收输入命令,将输出或者是错误信息显示到显示器上
对标准输入进行重定向,格式为: command < filename或command 0< filename 比如使用dante文件作为输入,如下: $ mailx user1 < ~/dante
对标准输出进行重定向,格式为: command > filename或command 1> filename 把pe命令的输出输入到名为pslist文件中去,如下: $ ps -ef > pslist 假如要将输出追加结果追加(即不是覆盖)到已有文件中去,使用下列格式的命令: command >> filename 如果文件不存在,系统自动创建一个新文件 如下是把hello追加到文件my_file中去: $ ps > my_file; cat my_file PID TTY TIME CMD 663 pts/5 0:01 ksh $ echo "hello" >> my_file; cat my_file PID TTY TIME CMD 663 pts/5 0:01 ksh hello $
对标准出错进行重定向,格式为: command 2> /dev/null 如下把错误信息重定向到/dev/null中去: $ find /etc -type f -exec grep PASSREQ {} \; -print # PASSREQ determines if login requires a password. PASSREQ=YES /etc/default/login grep: can’t open /etc/inet/mipagent.conf-sample grep: can’t open /etc/inet/mipagent.conf.fa-sample grep: can’t open /etc/inet/mipagent.conf.ha-sample grep: can’t open /etc/security/dev/audio grep: can’t open /etc/security/dev/fd0 (略) $ find /etc -type f -exec grep PASSREQ {} \; -print 2> /dev/null # PASSREQ determines if login requires a password. PASSREQ=YES /etc/default/login $ 假如要把标准输出和标准出错重定向到相同的文件中去,使用以下命令格式: command 1> filename 2>&1 把标准输出和标准出错打印到dat文件中去,如下: $ ls /var /test 1> dat 2>&1 $ more dat /test: No such file or directory (标准出错) /var: (标准输出) adm (标准输出) audit (标准输出) (略)
管道符号(|)用来把第一个命令的输出作为第二个命令的输入,格式为: command1 | command2 | command3…… 如下是把ps -ef的输出作为tail +2的输入,再把输出作为wc –l的输入: $ ps -ef | tail +2 | wc -l 74 $
Displaying the Command History
Korn shell的一大特性就是拥有命令历史的功能,记录了你曾经输入过的命令.history命令用于显示之前输入过的命令,默认显示最后输入过的16条命令,格式为: history option 如下显示之前输入过的命令: $ history ... 87 date 88 cd /etc 89 touch dat1 dat2 90 ps -ef 91 history $ 一些选项: 1.-n:不显示行标,如下: $ history -n ... date cd /etc touch dat1 dat2 ps -ef history $ 2.-4(或其他数字):显示最后1条命令和在它之前的4条命令,如下: $ history -4 ... 107 date 108 cd /etc 109 touch dat1 dat2 110 ps -ef 111 history $ 3.-r:反序显示,如下: $ history -r 111 history 110 ps -ef 109 touch dat1 dat2 108 cd /etc 107 date ... $ 4.显示最近输入过的cd命令到最近输入过的ls命令,如下: $ history cd ls 31 cd 32 man lp 33 date 34 ls (略)
可以使用r命令来重复某条命令,如下是重复之前输入过的cal命令: $ cal (略) $ r cal (略)
可以和history命令结合起来使用,如下: $ history 155 history 156 cat dante 157 history 158 date 159 cal 160 ls 161 cd $r 160
重复执行最近输入过的以字母c打头的命令,如下: $ r c cd /etc $ 重复执行最近一次使用过的ps命令,如下: $ r ps ps -ef $
Module9 Performing Basic Process and Job Control
Introducing Solaris Operating Environment Processes
在Solaris9 OE中,每条进程都分配的有一个唯一的进程标识号(process identifier number,PID).kernel用PID来跟踪和管理进程.每条进程和用户标识号(user identifier number,UID)以及组标识号(group identifier number,GID)相互关联
当一条进程创建另外一条进程以后,之前那条进程就叫父进程(parent process),被创建出来的新进程就叫子进程(child process).当子进程运行的时候,父进程等待,当子进程完成任务以后便通知父进程,父进程就结束子进程.如果父进程是交互性的shell的话,那shell提示符出现,等待输入新的命令
使用ps命令列出进程的一些相关信息,格式为: ps options 对于每条进程,ps命令将显示PID,终端标识符(terminal identifier,TTY),累积执行时间(TIME)和命令名(CMD)
来看看ps命令的一些常用的选项: 1.-e:打印系统上每条进程的信息,包括PID,TTY,TIME和CMD 2.-f:完全列表显示,还将增加显示UID,父进程标识号(PPID)和进程开始时间(STIME)
Displaying a Listing of All Processes
如下是以完全列表的形式显示进程的信息: $ ps -ef | more UID PID PPID C STIME TTY TIME CMD root 0 0 0 16:46:41 ? 0:01 sched (略) 看看输出的含义,如下: 1.UID:进程拥有人的用户名 2.PID:进程ID号 3.PPID:父进程ID号 4.C:CPU的调度利用 5.STIME:进程开始的时间 6.TTY:进程的控制终端,注意上面例子中该项是?,代表不是由终端开始的进程,是守护进程(daemon) 7.TIME:进程累积运行的时间 8.CMD:命令名,选项和参数
Searching for a Specific Process
要查找某条进程,可以使用ps命令和grep命令结合管道符号(|)来进行查找,比如我要查找以lp打头的进程,如下: $ ps -e | grep lp 217 ? 0:00 lpsched $
可以使用pgrep命令来根据名字对特定进程进行搜索,默认显示该进程的PID,命令格式为: pgrep options keyword 先来看看pgrep的一些常用的选项,如下: 1.-x:显示精确匹配关键字的进程的PID 2.-n:显示最近创建的包含关键字的进程的PID 3.-U [UID/用户名]:显示某个用户所有的进程的PID,可以使用用户名或者是UID 4.-l:一起显示PID和进程名 5.-t [term]:显示和某个终端相关联的进程的PID
显示包含lp的进程的PID,如下: $ pgrep lp 217 $ 连同进程名和PID一起显示,如下: $ pgrep -l lp 217 lpsched $ pgrep -l mail 230 sendmail 13453 dtmail 显示和终端pts/2相关联的进程和PID,如下: $ pgrep -lt pts/2 697 ksh 来看下精确匹配关键字的例子,如下: $ pgrep -l mountd 155 automountd $ pgrep -xl mountd $ pgrep -xl automountd 155 automountd $
Sending a Signal to a Process
信号(signal)是发送给进程的迅息,然后进程作出相应的反应.来看看一些比较常见的信号,如下图:

Terminating Using the kill and pkill Command
使用kill命令发送信号给一条或多条进程,如果你是普通用户,那你只能对你自己所拥有的进程使用kill命令;如果你是超级用户,你可以对任何进程使用kill命令.默认情况下,kill命令使用信号15,即终止信号.命令格式为: kill [-signal] PID(s) 当然在你对进程进行操作的时候,首先你要知道进程的PID,如下: $ pgrep -l mail 215 sendmail 12047 dtmail $ kill 12047 $ pgrep -l mail 215 sendmail $ 由上面的例子可以看出进程dtmail被我们用友好的方式给终止掉了 有的进程能够忽略掉信号15,这时,如果需要的话,我们就不得不采取强硬措施,使用信号9来对其进行杀死,格式为: kill -9 PID 尽量不要使用信号9来对进程进行终止
你还可以使用pkill命令来对进程发送信号,默认使用信号15,与kill命令不同的是,它采用进程的关键字作为参数而不是PID,格式如下: pkill [-options] keyword 例子如下: $ pgrep -l mail 215 sendmail 470 dtmail $ pkill dtmail $ pgrep -l mail 215 sendmail $ 使用硬杀死的方式来终止进程,使用以下命令: pkill -9 -x process_name
Managing a Job in the Korn Shell
任务(job)是shell管理的进程,shell启动和管理任务,因为任务也是进程,所以每个任务都有和它相互关联的PID.shell还给任务分配任务ID号.shell允许你同时运行多个任务.有3种shell管理的任务:前台任务(foreground job),后台任务(background job)和停止任务(stopped job)
当你在终端窗口执行命令,命令占据终端窗口直到它完成,这样的任务就是前台任务.当你在命令行最后输入符号&的时候,命令就以不占据终端窗口的方式悄悄运行,当你按下Return键的时候,shell提示符随即出现,这样的就是后台任务.当你对一个前台任务使用了CTRL+Z或者对后台任务使用了stop命令,任务随即停止,即为停止任务
来看看一些任务控制的命令: 1.jobs:列举当前所有运行的任务和后台停止了的任务 2.bg %n:在后台运行任务(n为任务ID号) 3.fg %n:在前台运行任务(n为任务ID号) 4.CTRL+Z:停止前台任务,然后把它作为停止任务放到后台 5.stop %n:停止后台任务(n为任务ID号)
比如我们要在后台运行sleep命令,如下: $ sleep 500 & [1] 3028 $ 当任务完成后,按下Return键,shell显示信息提示任务已经完成,shell提示符显示,如下: [1] + Done sleep 500 & $ 使用job命令,如下: $ jobs [1] + Running sleep 500 & $ 把后台任务调到前台运行,如下: $ fg %1 sleep 500 再来看看把前台任务调到后台的例子,如下: $ sleep 500 ^Z[1] + Stopped (SIGTSTP) sleep 500 $ jobs [1] + Stopped (SIGTSTP) sleep 500 $ bg %1 [1] sleep 500& $ jobs [1] + Running sleep 500 $ 不管你把停止任务放到前台或者后台,任务重新开始 最后看看停止任务的例子,如下: $ jobs [1] + Running sleep 500& $ stop %1 $ jobs [1] + Stopped (SIGSTOP) sleep 500& $ 还可以使用kill命令来终止任务,如下: $ jobs [1] + Stopped (SIGSTOP) sleep 500& $ kill %1 [1] + Terminated sleep 500& $ jobs $
Module10 Creating Archives
Archiving Files
tar命令可以将几个文件归档成一个文件或者将从一个叫做tar文件的归档文件中分离文件.默认tar文件是归档到磁带机设备中去.命令格式为: tar function(s) archivefile filename(s) 先来看看tar命令的一些functions: 1.c:创建新的tar文件 2.t:列出tar文件的内容 3.x:从tar文件中分离文件 4.v:在详细模式下执行tar命令,将输出写到标准输出上去 5.f:定义归档文件或磁带设备.默认的磁带设备是/dev/rmt/0
创建归档文件的时候,可以先验证下系统上的磁带机设备的状态正常与否.使用mt命令和status选项打印出磁带设备的状态信息.如下是把用户当前主目录的文件等全部归档到/dev/rmt/0中去: $ cd $ mt -f /dev/rmt/0 status (略) $ tar cvf /dev/rmt/0 . a ./ 0 tape blocks a ./dante 106 tape blocks a ./dante_1 1 tape blocks a ./logfile 5 tape blocks (略) 把多个文件归档到1个文件中去,如下: $ cd $ tar cvf files.tar file1 file2 file3 a file1 2K a file2 1K a file3 1K (略)
当你在磁盘上创建归档文件的时候,先把磁盘插入到合适的驱动器里,再运行volcheck命令.volcheck命令告诉Volume Management程序对驱动器中的磁盘进行检查.volcheck自动检查所有的磁盘,然后引导Volume Management程序按顺序的检查每条路径名.volcheck命令格式如下: volcheck -v device_pathname 假如你光使用了volcheck -v而没加上设备路径名的时候,将收到错误提示: media was found或no media was found 下面就是将你刚创建的tar文件拷贝到磁盘中去的例子: $ cd /floppy/floppy0 $ ls $ $ cd $ cp files.tar /floppy/floppy0 $ ls /floppy/floppy0 files.tar $ 如果要弹出磁盘的话,切换到你的用户主目录,输入eject floppy命令即可.假如你当前工作路径是在可移动设备的时候.此时你想弹出磁盘,将收到错误信息Device busy.所以要先切换到你的用户主目录,再使用eject命令
在磁带中查看归档文件的内容,如下: $ tar tvf /dev/rmt/0 ./ ./brands ./celery (略) 在归档文件中查看文件内容,如下: $ tar tf files.tar file1 file2 file3 (略)
分离归档文件,如下: $ cd $ tar xvf /dev/rmt/0 . x ., 0 bytes, 0 tape blocks x ./brands 0 tape blocks a ./celery 0 tape blocks x ./dante, 54120 bytes, 106 tape blocks x ./dante_1, 368 bytes, 1 tape blocks (略) 从刚才创建的files.tar中分离文件,如下: $ tar xvf files.tar tar: blocksize = 11 x file1, 1610 bytes, 4 tape blocks x file2, 105 bytes, 1 tape blocks x file3, 218 bytes, 1 tape blocks (略) 再看看先从磁带中将归档文件拷贝到用户主目录,再进行分离,如下: $ volcheck -v /dev/diskette $ cd /floppy/floppy0 $ ls files.tar $ cp files.tar /export/home/user1 $ cd $ ls files.tar files.tar $ tar xvf files.tar (略)
Compressing and Archiving Files Using the jar Command
jar命令和tar命令类似,命令语法如下: jar option(s) destination filename(s) 看看jar命令的一些options: 1.c:创建新的jar文件 2.t:列出jar文件的内容 3.x:从jar文件中分离文件 4.v:在详细模式下执行jar命令,将输出写到标准输出上去 5.f:定义要处理的jar文件(比如/tmp/files.jar)
如下是将多个文件压缩并归档到一个jar文件中去: $ ls brands celery dante (略) $ $ jar cvf /tmp/bundle.jar * added manifest adding: brands(in = 0) (out= 0)(stored 0%) adding: celery(in = 0) (out= 0)(stored 0%) adding: dante(in = 1319) (out= 744)(deflated 43%) (略)
Module11 Compressing, Viewing, and Uncompressing Files
Compressing Files Using the compress Command
可以使用compress命令把文件进行压缩来节约磁盘使用的空间,压缩比例根据文件类型而定.命令格式为: compress [-v] filename -v选项可选,表示详细(verbose)模式 当你使用这个命令压缩文件,将生成一个以.Z结尾的新压缩文件,如下: $ compress -v files.tar files.tar: Compression: 70.20% -- replaced with files.tar.Z 注意,假如你想对已经压缩过的文件进行二次压缩,只会使得文件的体积变的更大而非更小.再来看看不用-v选项的例子,如下: $ compress files.tar $
Viewing Compressed Files Using the zcat Command
可以使用zcat命令在不改变压缩文件内容的情况下,来查看以compress命令压缩过的文件的内容.命令格式为: zcat filename 例子如下: $ zcat files.tar.Z | more file1010066000023210000012000000031120744415475300122310ustar00user1staff 00002100000007 The Achievers Unconsciously or not, they divide their work totally differently than the (略)
Uncompressing Files Using the uncompress Command
用uncompress命令把压缩文件解压缩为原始文件,格式为: uncompress options filename options: 1.-v:详细(verbose)模式 2.-c:在不改变文件内容的情况下,查看压缩包内容(作用同zcat命令) 如下,解压缩文件: $ uncompress -v files.tar.Z files.tar.Z: -- replaced with files.tar $
Compressing a File Using the gzip Command
gzip命令也是用来压缩文件的,压缩后的扩展名为.gz.这个命令的压缩效率比compress命令的压缩效率要高一点.命令格式为: gzip [-v] filename(s) -v选项是详细模式.如下是对几个文件一起进行压缩: $ gzip file1 file2 file3 file4 $ ls *.gz file1.gz file2.gz file3.gz file4.gz $
Restoring a gzip File Using the gunzip Command
使用gunzip命令恢复经过gzip压缩过的文件,命令格式为:: gunzip options filename options: 1.-v:详细模式 2.-c:在不改变文件内容的情况下,查看压缩包内容(作用同gzcat命令)
Viewing Files Using the gzcat Command
使用gzcat命令查看压缩文件的内容,作用同gunzip –c filename.命令格式为: gzcat filename
Postscript
#uname –s –r;date Written by 绯瞳 a.k.a. Jo 欢迎转po,请保留作者信息 Apr.11th.2004(Happy Birthday 2 myself,I’m 21 years old..lol) !
此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:
此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:

此主题相关图片如下:
|