(考研英语)版本的man需要注意哪些问题?
1、查找帮助和搜索命令
学会自行搜索查找知识/解决办法是现今各种职业人士的基本技能,所以这种命令置于最上面,鼓励时常使用。
1.1man
就好象VC程序员须要才能熟练地查看MSDN一样,在linux/solaris下工作也应当在碰到命令使用问题时习惯性地使用man命令来查看帮助。会使用man指南后,你就不须要死记硬背命令的参数了,只需晓得命令大约支持什么功能,须要的时侯打开man指南搜索一下就可以了。
一开始看的时侯可能不习惯,但上面的内容排版都是很有规律的,风格一致性很强,只要坚持看多几次都会很熟悉了。
查看man指南时,按f(或空格)向后翻页,按b往前翻页,按q退出,按’/’可以输入字符串进行搜索。
样例1:#manpclose。查看pclose指南,会列举pclose的用途、函数原型、参数、返回值、错误码等详尽说明。
样例2:#man-fclose。Close有C函数的closelinux系统查看服务命令linux应用程序,有Tcl的外置命令close等,直接输入manclose时可能并不是你想要看的指南,比如是《TclBuilt-InCommands》的内容,而不是《LinuxProgrammer'sManual》的内容。这时就可以用man-fclose瞧瞧在什么指南里有close的帮助。
$man-fclose
close(2)-closeafiledescriptor
close(n)-Closeanopenchannel.
close(3p)-closeafiledescriptor
$man2close#中间的2就是前面括弧上面的2,表示man指南的section标记,假若不晓得2是哪些意思,直接试试看就晓得了。注意solaris版本的man须要在section后面加-s。
CLOSE(2)LinuxProgrammer'sManualCLOSE(2)
NAME
close-closeafiledescriptor
SYNOPSIS
#include
intclose(intfd);
……
$man3pclose
CLOSE(3P)POSIXProgrammer'sManualCLOSE(3P)
PROLOG
ThismanualpageispartofthePOSIXProgrammer'sManual.TheLinuximplemen?
tationofthisinterfacemaydiffer(consultthecorrespondingLinuxmanualpage
fordetailsofLinuxbehavior),ortheinterfacemaynotbeimplementedon
Linux.
NAME
close-closeafiledescriptor
SYNOPSIS
#include
intclose(intfildes);
样例3:#man2close。查看《LinuxProgrammer'sManual》中关于close函数的帮助。参见前面输出结果。
样例4:#catman-w。在man-fclose报如下错误时,是由于man指南的索引没有完善。可用这个命令构建man指南的索引。
-bash-3.00#man-fclose
/usr/share/man/windex:Nosuchfileordirectory
-bash-3.00#catman-w
-bash-3.00#man-fclose
closeclose(2)-closeafiledescriptor
closeclose(9e)-relinquishaccesstoadevice
1.2find*
查找命令。可以依照文件名或则文件构建的时间来查找它的绝对路径,默认是递归查找。
样例1:#find/opt/oracle-nametnsnames.ora。在/opt/oracle目录下递归查找tnsnames.ora文件。注意,-name旁边的文件/目录名若果不含键值,是会做完整匹配的,而不是模糊匹配。
样例2:#find/opt/oracle-name”alert*log”。在/opt/oracle目录下递归查找oracle数据库的日志文件。注意,这个文件名中含了转义,要加双冒号。若果不加双冒号会有哪些疗效呢?
答案是:倘若在当前目录(注意,不是/opt/oracle)下存在alert_a.log,这么执行的疗效相当于是find/opt/oracle-namealert_a.log;假如当前目录没有”alert*log”能匹配上的文件/目录名,则疗效和加了双冒号是一样的,”alert*log”会被原貌传给find。
这是由于bash在解析命令行时,首先会尝试将含转义(如*、?、[]等)的参数和当前目录下的文件/目录名匹配linux系统查看服务命令,假如才能匹配上,则会将参数替换成文件名,否则还是原貌参数不变。诸如还是”find/opt/oracle-namealert*log”命令,假如当前目录有alert_a.log和alert_b.log文件,最终执行的命令就相当于”find/opt/oracle-namealert_a.logalert_b.log”,也就是-name前面原先1个参数的变为了2个参数,find会报错说这不是一个合法的命令。这个shell类库的行为必需要了解,否则会遇到一些你解释不了的情况。旁边都会有类似的样例。
我们如何能晓得bash是如何做的呢?Linux下通过strace可以观察到,在solaris下可以通过truss来观察。在前面专门讲strace/truss的章节会提到。
样例3:find-L/opt/OMC-namesysd.xml。这儿多了一个-L参数,意思是假如递归查找是,假如遇见链接目录,会步入链接目录递归查找,否则默认是不步入的。在M2K环境,/opt/OMC/etc和/opt/OMC/var通常都是链接目录,倘若不晓得这个情况,才会错过这2个目录的查找。
样例4:find/opt/OMC/3rdTools/lib/opt/OMC/lib-nameliba.so。在/opt/OMC/3rdTools/lib和/opt/OMC/lib这两个目录下查找liba.so。
样例5:find/opt/OMC-userroot。查找/opt/OMC目录下属主为root的文件。查找属组则使用-group选项。
其它:
-atimen第N天访问过的文件
-atime+n前N天访问过的文件
-atime–n后N天访问过的文件
-sizen按文件的大小来查询,单位是BLOCK
1.3which
查找命令所在目录。在不晓得某个命令在那个目录,或系统中有多个相同的命令时,常常用which来确定使用的是哪一个目录下的命令。
样例:查找dbx在那个目录,便于拷贝到其它没有dbx的机器上使用。
#whichdbx
/opt/SUNWspro/prod/bin/dbx
1.4grep,egrep,zgrep,gzgrep*
在文件中查找指定的字符串。
样例1:查找imapsysd日志文件中派生进程时的日志,便于了解imapsysd在哪些时侯用哪些命令行启动进程。有些兄弟的用法是cat/opt/iMAP/var/logs/iMAP.imapsysd.trace|grepfork,疗效是一样的,但建议用本样例用法,尽管通常这些动作不频繁,不存在性能问题。
root@imap-xp156#grepfork/opt/iMAP/var/logs/iMAP.imapsysd.trace
T-IN:TagID0001:04-0800:36:22.265:(28377|59)ServiceAgentTask::#################forked:imapsvcd-namelic_agent-sysagent10.67.198.23-port31001-agentid9991-agenthandle0-threads0
T-IN:TagID0001:04-0800:36:22.273:(28377|58)ServiceAgentTask::#################forked:imapsvcd-namelog_agent-sysagent10.67.198.23-port31005-agentid46-agenthandle0-threads0
…………
样例2:查找sysd.xml文件中含start的行,并显示其上下相邻的行。仅适用于Linux。
#grep-1startsysd.xml
90
600
$(IMAP_ROOT)/platform/bin/kill_process
—
60
true
10
样例3:查找/opt/iMAP/etc目录下所有xml文件,并从中找出文件名含fm的文件。这和find/opt/iMAP/etc-name”*fm*.xml”是等效的,两种都可以用。管线后面的可以是任意有屏幕输出的命令,比如ls等。
#find/opt/iMAP/etc/-name”*.xml”|grepfm
/opt/iMAP/etc/conf/locale/zh_CN/fmexportsvc_field.xml
/opt/iMAP/etc/conf/locale/zh_CN/addfmsminfoStaticInfo.xml
…………
样例4:查找/opt/iMAP/etc目录下所有xml文件,并从中找出内容含fm的文件。
#find/opt/iMAP/etc/-name”*.xml”|xargsgrepfm
/opt/iMAP/etc/conf/locale/zh_CN/addfmsminfoStaticInfo.xml:
/opt/iMAP/etc/conf/locale/zh_CN/fm.xml:
…………
样例5:查找进程名中富含imapsvcd或imapsysd的进程。下边-e前面跟的是正则表达式,可以其它各类正则表达式。
#ps-ef|grep-e”imapsvcd|imapsysd”
以上的举例都是grep的反例。从下边linux环境上的输出可以看见egrep相当于样例5中的grep-e。-E是扩充正则表达式linux cp,比-e支持的正则表达式更丰富一些。Solaris上egrep其实不是脚本,但功能也是一样的。
#whichegrep
/usr/bin/egrep
#file/usr/bin/egrep
/usr/bin/egrep:symboliclinkto`/bin/egrep'
#file/bin/egrep
/bin/egrep:Bourneshellscripttext
#cat/bin/egrep
#!/bin/sh
exec/bin/grep-E${1+”$@”}
zgrep用于在压缩文件中查找字符串,它虽然也是一个脚本。zgrep支持搜索用compress和gzip压缩的文件。zgrep是linux下命令,solaris同等功能的命令是gzgrep。
#whichzgrep
/usr/bin/zgrep
#file/usr/bin/zgrep
/usr/bin/zgrep:Bourneshellscripttext
以上这种就基本够用了,再者还有fgrep/zfgrep/gzfgrep/gzegrep等,有空可查看man指南自行了解。