执行linuxvi命令

linuxvi命令  时间:2021-01-12  阅读:()

bash编程教学实例bash编程时间:2004/03/02来源:不详ShellScript(bash)简介众所皆知地,UNIX上以小工具著名,利用许多简单的小工具,来完成原本需要大量软体开发的工作,这一点特色,使得UNIX成为许多人心目中理想的系统平台.
在众多的小工具中,ShellScript算得上是最基本、最强大、运用最广泛的一个.
它运用围之广,不但从系统启动、程式编译、定期作业、上网连线,甚至安装整个Linux系统,都可以用它来完成.
因为ShellScript是利用您平日在使用的一些指令,将之组合起来,成为一个"程式".
如果您平日某些序列的指令下得特别频繁,便可以将这些指令组合起来,成为另一个新的指令.
这样,不但可以简化并加速操作速度,甚至还可以干脆自动定期执行,大大简化系统管理工作.
Bash(GNUBourne-AgainSHell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等,ShellScript大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个ShellScript通常可以在很多种Shell上使用.
这里我介绍您bash的使用方法.
事实上,当您"manbash"时,就可以看到bash的说明书,不过对许多人来说,这份说明书犹如"无字天书"一样难懂.
这份文件,主要资料来源为"manbash",我加上一些实际日常的应用例来说明.
希望这样能让那些始终不得其门而入的人们,多多少少能有点概念.
教学例子"Helloworld"ShellScript照传统程式教学例,这一节介绍ShellScript的"HelloWorld"如何撰写.
#!
/bin/sh#Filename:helloecho"Helloworld!
"大家应该会注意到第一行的"#!
/bin/sh".
在UNIX下,所有的可执行Script,不管是那一种语言,其开头都是"#!
",例如Perl是"#!
/usr/bin/perl",tcl/tk是"#!
/usr/bin/wish",看您要执行的Script程式位置在那里.
您也可以用"#!
/bin/bash"、"#!
/bin/tcsh"等等,来指定使用特定的Shell.
echo是个bash的内建指令.
接下来,执行hello这个script:要执行一个Script的方式有很多种.
第一种:将hello这个档案的权限设定为可执行.
[foxman@foxmanbash]#chmod755hello执行[foxman@foxmanbash]#.
/hellohelloworld第二种:使用bash内建指令"source"或".
".
[foxman@foxmanbash]#sourcehellohelloworld或[foxman@foxmanbash]#.
hellohelloworld第三种:直接使用sh/bash/tcsh指令来执行.
[foxman@foxmanbash]#shhellohelloworld或[foxman@foxmanbash]#bashhellohelloworldBash执行选项-cstring:读取string来当命令.
-i:互动介面.
-s:由stdin读取命令.
-:取消往后选项的读取.
-norc:不要读~/.
bashrc来执行.
-noprofile:不要读/etc/profile、~/.
bash_profile、~/.
bash_login、~/.
profile等等来执行.
-rcfilefilename:执行filename,而非~/.
bashrc-version:显示版本.
-quiet:启动时不要哩唆.
-login:确保bash是个loginshell.
-nobraceexpansion:不要用curlybraceexpansion({}符号展开).
-nolineediting:不用readline来读取命令列.
-posix:改采Posix1003.
2标准.
用于自动备份的ShellScript一个用于自动备份的ShellScript我们先前提到,可利用ShellScript搭配crond来作定期的工作.
要作定期性的工作,在UNIX上,就是与crond的搭配运用.
首先我们先来研究如何对系统进行备份.
要对系统进行备份,不外乎便是利用一些压缩工具.
在许多UNIX系统上,tar及gzip是defacto的资料交换标准.
我们经常可以看见一些tar.
gz或tgz档,这些档案,被称为tarball.
当然了,您也可以用bzip2、zip等等压缩工具来进行压缩,不必限定于gzip.
但tar配合gzip是最普遍的,也是最方便的方式.
要将我们想要的资料压缩起来,进行备份,可以结合tar及gzip一起进行.
方式有很多种,最常用的指令是以下这一种:tar-cfile/dir.
.
.
|gzip-9>xxxx.
tar.
gz您也可以分开来做:tar-rfile/dir.
.
.
-fxxxx.
targzip-9xxxx.
tar或tar-rfile/dir.
.
.
-fxxxx.
targzip-9xxxx.
tar.
gz在解过Linux下档案备份的基本知识后,我们来写一个将档案备份的Script.
#!
/bin/sh#Filename:backupDIRS="/etc/var/your_directories_or_files"BACKUP="/tmp/backup.
tgz"tar-c$DIRS|gzip-9>$BACKUP其中DIRS放的是您要备份的档案及目录,BACKUP是您的备份档.
可不要将/tmp放进DIRS中,那样做,您是在做备份的备份,可能将您的硬碟塞爆.
接下来测试[foxman@foxmanbash]#chmod755backup[foxman@foxmanbash]#.
/backup执行完成后在/tmp就会有一个backup.
tgz,里面储存了您重要的资料.
您可用gzip-dc/tmp/backup.
tgz|tar-vt或tarvtfz/tmp/backup.
tgz来看看里面的档案列表.
要解开时,可用以下指令来完成复原:gzip-dc/tmp/backup.
tgz|tar-xv或tarxvfz/tmp/backup.
tgz备份通常是仅备份系统通常最重要的部份,/etc可说是不可缺少的一部份.
另外,看您系统中有那些重要的资料需要备份.
通常来说,您没有必要备份/bin、/sbin、/usr/bin、/usr/sbin、/usr/X11R6/bin等等这些执行档目录.
只要备份您重要的档案即可,别把整个硬碟备份,那是蛮呆的动作.
如果您有许多台机器,可利用其中一台任务较轻的内部网路主机,做为主要备份主机.

将所有机器都自动执行备份,然后利用NFS/Coda/Samba等网路档案系统,将备份的资料放到该备份机器中,该机器则定时收取备份资料,然后您再由该机器中进行一次备份.

这里是整个系统备份方案的图示.
在您进行之前,先解一下,系统中那些是要备份的,那些是不需要的.
新的backup#!
/bin/shHOSTNAME=`hostname`DIRS="/etc/var/your_important_directory"BACKUP="/tmp/$HOSTNAME.
tgz"NFS="/mnt/nfs"tar-c$DIRS|gzip-9>$BACKUPmv-f$BACKUP$NFS备份主机内的Script:collect_backup#!
/bin/shNFS="/mnt/nfs"BACKUP="/backup"mv-f$NFS/*.
tgz$BACKUP在此,您不能够将所有备份都直接放在/mnt/nfs,这是危险的.
万一任一台机器不小心将/mnt/nfs所有内容删除,那么备份就会消失.
因此,您需要将/mnt/nfs移到一个只有该备份主机可存取的目录中.
当这些个别的Script都测试好以后,接下来我们将他们放到crontab里面.
找到您的crontab,它的位置可能在/var/spool/cron/crontabs/root、/etc/crontab、/var/cron/tabs/root.
在crontab中选择以下之一加入(看您定期的时间):Slackware:/var/spool/cron/crontabs/root01full_backup_script_path/backup1>/dev/null2>/dev/null#每小时(太过火一点)3016***/full_backup_script_path/backup1>/dev/null2>/dev/null#每日16:30,下班前备份3016**0/full_backup_script_path/backup1>/dev/null2>/dev/null#每周一16:30051**/full_backup_script_path/backup1>/dev/null2>/dev/null#每月一号5:0RedHat/Debian:/etc/crontabRedHat可直接将backup放入/etc/cron.
hourly,/etc/cron.
daily,/etc/cron.
weekly,/etc/cron.
monthly.
或采用如上加入/etc/crontab的方式:有关crontab的用法,可查"man5crontab",在此不详述.
备份主机的设定类同.
注意:所有机器不要同时进行备份,否则网路会大塞车.
备份主机收取备份的时间要设为最后,否则会收不到备份资料.
您可以在实作后,将时间间隔调整一下.

看看,两个小小不到三行的ShellScript,配合cron这个定时工具.
可以让原本需要耗时多个小时的人工备份工作,简化到不到十分钟.
善用您的想像力,多加一点变化,可你让您的生活变得轻松异常,快乐悠哉.
档案系统检查系统安全一向是大多数电脑用户关心的事,在UNIX系统中,最重视的事,即系统中有没有"木马"(Trojanhorse).
不管Trojanhorse如何放进来的,有一点始终会不变,即被放置木马的档案,其档案日期一定会被改变,甚至会有其它的状态改变.
此外,许多状况下,系统会多出一些不知名的档案.
因此,平日检查整个档案系统的状态是否有被改变,将所有状态有改变的档案,以及目前有那些程式正在执行,自动报告给系统管理员,是个避免坐上"木马"的良方.
#!
/bin/sh#Filename:whatever_you_name_itDIRS="/etc/home/bin/sbin/usr/bin/usr/sbin/usr/local/var/your_directory"ADMIN="email@your.
domain.
com"FROM="admin@your.
domain.
com"#写入Sendmail的标头echo"Subject:$HOSTNAMEfilesystemcheck">/tmp/today.
mailecho"From:$FROM">>/tmp/today.
mailecho"To:$ADMIN">>/tmp/today.
mailecho"Thisisfilesystemreportcomesfrom$HOSTNAME">>/tmp/today.
mail#报告目前正在执行的程式psaxf>>/tmp/today.
mail#档案系统检查echo"FileSystemCheck">>/tmp/today.
maills-alR$DIRS|gzip-9>/tmp/today.
gzzdiff/tmp/today.
gz/tmp/yesterday.
gz>>/tmp/today.
mailmv-f/tmp/today.
gz/tmp/yesterday.
gz#寄出信件sendmail-t/dev/null2>/dev/null#上班前检查有些档案是固定会更动的,像/var/log/messages、/var/log/syslog、/dev/ttyX等等,不要太大惊小怪.
控制圈for演示了几个简单的ShellScript,相信您应该对ShellScript有点概念了.
现在我们开始来仔细研究一些较高等的ShellScript写作.
一些进一步的说明,例如"1>"、"2>"符号的使用,会在稍后解释.
forname[inword;]dolist;done控制圈.
word是一序列的字,for会将word中的个别字展开,然后设定到name上面.
list是一序列的工作.
如果[inword;]省略掉,那么name将会被设定为Script后面所加的参数.
例一:#!
/bin/shforiinabcdef;doecho$idone它将会显示出a到f.
例二:另一种用法,A-Z#!
/bin/shWORD="abcdefghijlmnopqrstuvwxyz"foriin$WORD;doecho$idone这个Script将会显示a到z.
例三:修改副档名如果您有许多的.
txt档想要改名成.
doc档,您不需要一个一个来.
#!
/bin/shFILES=`ls/txt/*.
txt`fortxtin$FILES;dodoc=`echo$txt|sed"s/.
txt/.
doc/"`mv$txt$docdone这样可以将*.
txt档修改成*.
doc档.
例四:meow#!
/bin/sh#Filename:meowfori;docat$idone当您输入"meowfile1file2.
.
.
"时,其作用就跟"catfile1file2.
.
.
"一样.
例五:listbin#!
/bin/sh#Filename:listbinforiin/bin/*;doecho$idone当您输入"listbin"时,其作用就跟"ls/bin/*"一样.
例六:/etc/rc.
d/rc拿一个实际的例来说,RedHat的/etc/rc.
d/rc的启动程式中的一个片断.
foriin/etc/rc.
d/rc$runlevel.
d/S*;do#Checkifthescriptisthere.
[!
-f$i]&&continue#Checkifthesubsystemisalreadyup.
subsys=${i#/etc/rc.
d/rc$runlevel.
d/S}[-f/var/lock/subsys/$subsys]||\[-f/var/lock/subsys/${subsys}.
init]&&continue#Bringthesubsystemup.
$istartdone这个例中,它找出/etc/rc.
d/rcX.
d/S*所有档案,检查它是否存在,然后一一执行.

流程控制casecasewordin[pattern[|pattern].
.
.
)listesaccase/esac的标准用法大致如下:case$arginpattern|sample)#arginpatternorsample;;pattern1)#arginpattern1;;*)#default;;esacarg是您所引入的参数,如果arg内容符合pattern项目的话,那么便会执行pattern以下的程式码,而该段程式码则以两个分号";;"做结尾.
可以注意到"case"及"esac"是对称的,如果记不起来的话,把"case"颠倒过来即可.

例一:paranoia#!
/bin/shcase$1instart|begin)echo"startsomething";;stop|end)echo"stopsomething";;*)echo"Ignorant";;esac执行[foxman@foxmanbash]#chmod755paranoia[foxman@foxmanbash]#.
/paranoiaIgnorant[foxman@foxmanbash]#.
/paranoiastartstartsomething[foxman@foxmanbash]#.
/paranoiabeginstartsomething[foxman@foxmanbash]#.
/paranoiastopstopsomething[foxman@foxmanbash]#.
/paranoiaendstopsomething例二:inetpanel许多的daemon都会附上一个管理用的ShellScript,像BIND就附上ndc,Apache就附上apachectl.
这些管理程式都是用shellscript来写的,以下示一个管理inetd的shellscript.
#!
/bin/shcase$1instart|begin|commence)/usr/sbin/inetd;;stop|end|destroy)killallinetd;;restart|again)killall-HUPinetd;;*)echo"usage:inetpanel[start|begin|commence|stop|end|destory|restart|again]";;esac例三:判断系统有时候,您所写的Script可能会跨越好几种平台,如Linux、FreeBSD、Solaris等等,而各平台之间,多多少少都有不同之处,有时候需要判断目前正在那一种平台上执行.
此时,我们可以利用uname来找出系统资讯.
#!
/bin/shSYSTEM=`uname-s`case$SYSTEMinLinux)echo"MysystemisLinux"echo"DoLinuxstuffhere.
.
.
";;FreeBSD)echo"MysystemisFreeBSD"echo"DoFreeBSDstuffhere.
.
.
";;*)echo"Unknownsystem:$SYSTEM"echo"Idon'twhattodo.
.
.
";;esac流程控制selectselectname[inword;]dolist;doneselect顾名思义就是在word中选择一项.
与for相同,如果[inword;]省略,将会使用Script后面所加的参数.
例:#!
/bin/shWORD="abc"selectiin$WORD;docase$iina)echo"IamA";;b)echo"IamB";;c)echo"IamC";;*)break;;;esacdone执行结果[foxman@foxmanbash]#.
/select_demo1)a2)b3)c#1IamA1)a2)b3)c#2IamB1)a2)b3)c#3IamC1)a2)b3)c#4返回状态Exit在继续下去之前,我们必须要切入另一个话题,即返回状态值-ExitStatus.
因为if/while/until都迁涉到了使用ExitStatus来控制程式流程的问题.
许多人都知道,在许多语言中(C/C++/Perl.
.
.
.
),都有一个exit的函数,甚至连Bash自己都有个exit的内建命令.
而exit后面所带的数字,便是返回状态值-ExitStatus.
返回状态值可以使得程式与程式之间,利用Shellscript来结合的可能性大增,利用小程式,透过Shellscript,来完成很杂的工作.
在shell中,返回值为零表示成功(True),非零值为失败(False).
举例来说,以下这个两个小程式yes/no分别会返回0/1(成功/失败):/*yes.
c*/voidmain(void){exit(0);}/*no.
c*/voidmain(void){exit(1);}那么以下这个"YES"的shellscript便会显示"YES".
#!
/bin/sh#YESifyes;thenecho"YES"fi而"NO"不会显示任何东西.
#!
/bin/sh#NOifno;thenecho"YES"fitestexpress[express]在Shellscript中,testexpress/[express]这个语法被大量地使用,它是个非常实用的指令.
由于它的返回值即ExitStatus,经常被运用在if/while/until的场合中.
而在后面,我们也会大量运用到,在进入介绍if/while/until之前,有必要先解一下.
其返回值为0(True)或1(False),要看表述(express)的结果为何.
express格式-bfile:当档案存在并且属性是Blockspecial(通常是/dev/xxx)时,返回True.
-cfile:当档案存在并且属性是characterspecial(通常是/dev/xxx)时,返回True.
-dfile:当档案存在并且属性是目录时,返回True.
-efile:当档案存在时,返回True.
-ffile:当档案存在并且是正常档案时,返回True.
-gfile:当档案存在并且是set-group-id时,返回True.
-kfile:当档案存在并且有"sticky"bit被设定时,返回True.
-Lfile:当档案存在并且是symboliclink时,返回True.
-pfile:当档案存在并且是namepipe时,返回True.
-rfile:当档案存在并且可读取时,返回True.
-sfile:当档案存在并且档案大小大于零时,返回True.
-Sfile:当档案存在并且是socket时,返回True.
-tfd:当fd被开启为terminal时,返回True.
-ufile:当档案存在并且set-user-idbit被设定时,返回True.
-wfile:当档案存在并且可写入时,返回True.
-xfile:当档案存在并且可执行时,返回True.
-Ofile:当档案存在并且是被执行的userid所拥有时,返回True.
-Gfile:当档案存在并且是被执行的groupid所拥有时,返回True.
file1-ntfile2:当file1比file2新时(根据修改时间),返回True.
file1-otfile2:当file1比file2旧时(根据修改时间),返回True.
file1-effile2:当file1与file2有相同的device及inodenumber时,返回True.
-zstring:当string的长度为零时,返回True.
-nstring:当string的长度不为零时,返回True.
string1=string2:string1与string2相等时,返回True.
string1!
=string2:string1与string2不相等时,返回True.
!
express:express为False时,返回True.
expr1-aexpr2:expr1及expr2为True.
expr1-oexpr2:expr1或expr2其中之一为True.
arg1OParg2:OP是-eq[equal]、-ne[not-equal]、-lt[less-than]、-le[less-than-or-equal]、-gt[greater-than]、-ge[greater-than-or-equal]的其中之一.
在Bash中,当错误发生在致命信号时,bash会返回128+signalnumber做为返回值.
如果找不到命令,将会返回127.
如果命令找到了,但该命令是不可执行的,将返回126.
除此以外,Bash本身会返回最后一个指令的返回值.
若是执行中发生错误,将会返回一个非零的值.
FatalSignal:128+signoCan'tnotfindcommand:127Can'tnotexecute:126Shellscriptsuccessfullyexecuted:returnthelastcommandexitstatusFatalduringexecution:returnnon-zero流程控制ififlistthenlist[eliflistthenlist].
.
.
[elselist]fi几种可能的写法第一种iflistthendosomethingherefi当list表述返回值为True(0)时,将会执行"dosomethinghere".
例一:当我们要执行一个命令或程式之前,有时候需要检查该命令是否存在,然后才执行.

if[-x/sbin/quotaon];thenecho"TurningonQuotaforrootfilesystem"/sbin/quotaon/fi例二:当我们将某个档案做为设定档时,可先检查是否存在,然后将该档案设定值载入.

#Filename:/etc/ppp/settingsPHONE=1-800-COLLECT#!
/bin/sh#Filename:phonebillif[-f/etc/ppp/settings];thensource/etc/ppp/settingsecho$PHONEfi执行[foxman@foxmanppp]#.
/phonebill1-800-COLLECT第二种iflistthendosomethinghereelsedosomethingelseherefi例三:Hostname#!
/bin/shif[-f/etc/HOSTNAME];thenHOSTNAME=`cat/etc/HOSTNAME`elseHOSTNAME=localhostfi第三种iflistthendosomethinghereeliflistthendoanotherthingherefi例四:如果某个设定档允许有好几个位置的话,例如crontab,可利用iftheneliffi来找寻.
#!
/bin/shif[-f/etc/crontab];thenCRONTAB="/etc/crontab"elif[-f/var/spool/cron/crontabs/root];thenCRONTAB="/var/spool/cron/crontabs/root"elif[-f/var/cron/tabs/root];thenCRONTAB="/var/cron/tabs/root"fiexportCRONTAB第四种iflistthendosomethinghereeliflistthendoanotherthinghereelsedosomethingelseherefi例五:我们可利用uname来判断目前系统,并分别做各系统状况不同的事.
#!
/bin/shSYSTEM=`uname-s`if[$SYSTEM="Linux"];thenecho"Linux"elif[$SYSTEM="FreeBSD"];thenecho"FreeBSD"elif[$SYSTEM="Solaris"];thenecho"Solaris"elseecho"What"fi控制圈while/untilwhilelistdolistdone当list为True时,该圈会不停地执行.
例一:无限回圈写法#!
/bin/shwhile:;doecho"dosomethingforeverhere"sleep5done例二:强迫把pppd杀掉.
#!
/bin/shwhile[-f/var/run/ppp0.
pid];dokillallpppddoneuntillistdolistdone当list为False(non-zero)时,该圈会不停地执行.
例一:等待pppd上线.
#!
/bin/shuntil[-f/var/run/ppp0.
pid];dosleep1done参数与变数在继续下去介绍function之前,我们必须停下来介绍"参数与变数".
参数(Parameters)是用来储存"值"的资料型态,有点像是一般语言中的变数.
它可以是个名称(name)、数字(number)、或者是以下所列出来一些特殊符号(SpecialParameters).
在shell中,变数是由name形式的参数所构成的.
在前面的许多例中,我们事实上已经看到许多参数的运用.
要设定一个Parameter实际很简单:name=value例如说:MYHOST="foxman"而要使用它时,则是加个"$"符号.
echo$MYHOST位置参数(PositionalParameters)所谓的位置参数便是0,1,2,3,4,5,6,7,8,9.
.
.
.
使用时,用$0,$1,$2.
.
.
.
位置参数是当script被载入时,后面所附加的参数.
$0是本身,$1则为第一个参数,$2为第二个,依此类推.
而当PositionalParameters被function所使用时,它们会被暂时取代(下一节会介绍function).
例如以下这个script:#!
/bin/sh#Filename:positionecho$0echo$1执行时:[foxman@foxmanbash]#.
/positionabc.
/positionabc当位置参数超过两位数时,有特别的方法来展开,称为Expansion.
特殊参数(SpeicalParameters)这些符号,非常不人性,对新手来说很困扰.
但上手后,会觉得方便无比,有些如果您看不懂的话,就--算了,不用浪费太多时间在上面.
*星号将PositionalParameters合成一个参数,其间隔为IFS内定参数的第一个字元(见内建变数一节).
例:#!
/bin/sh#starsigecho$*执行:[foxman@foxmanbash]#starsigabcdefgabcdefg@at符号与*星号类同.
不同之处在于不参照IFS.
例:#!
/bin/sh#atsigecho$@执行:[foxman@foxmanbash]#atsigabcdefgabcdefg#井字号展开Positionalparameters的数量.
例:#!
/bin/sh#poundsigecho$#执行[foxman@foxmanbash]#poundsigabcdefg7问号最近执行的foregroundpipeline的状态.
-减号最近执行的foregroundpipeline的选项参数.
$钱钱钱本身的ProcessID.
[foxman@foxmanbash]#psax|grepbash1635p1S0:00/bin/bash[foxman@foxmanbash]#echo$$1635!
惊号最近执行背景命令的ProcessID.
0零在PositionalParameters一部份已经说明过了,是执行的shellscript本身.
但如果是用"bash-c",则$0被设为第一个参数.
[foxman@foxmanbash]#echo$0/bin/bash_底线符号显示出最后一个执行的命令.
[foxman@foxmanbash]#echo$_bash内建变数(ShellVariables)Bash有许多内建变数,像PATH、HOME、ENV.
.
.
.
.
.
等等.
这些内建变数将在另一节中,专门一一说明.
函数function[function]name(){list;}function的参数是PositionalParaments.
例#!
/bin/shfunctionfunc(){echo$1echo$2return1}func"Hello""function"局部变数可用local来宣告.
函数可export,使用下一层的shell可以使用.
函数可递,没有递层数的限制.
Bash内建指令集以下的命令,大部份都没有使用例,您可能会看不出所以然,摸不著头脑.
在我加入例说明前,建议您"manbash",然后自己实际操作一次.
:[arguments]不做任何事,除了[arguments]一些参数展开及一些特定重导向的作业外.
永远返回零.
它的用法跟true一样.
.
filename[arguments]sourcefilename[arguments]由filename中读取命令,并执行.
您会在/etc/rc.
d/*中发现很多.
/xxxx的指令,而xxxx的permission都不是可执行的.
事实上,在tcsh中,需要用source/xxxx来做同样的指令.
注意到".
"的后面是有空格的(比较一下".
/"跟".
/",不一样).
filename是内含指令的纯文字档即可,无须chmod755filename.
例filename:my_sourceDEV=loIP=127.
0.
0.
1NETMASK=255.
0.
0.
0BROADCAST=127.
255.
255.
255ifconfig$IPnetmask$NETMASKbroadcast$BROADCASTdev$DEV接下来.
my_source或sourcemy_source便可执行该script,而不需要"chmod755my_source"alias[name[=value].
.
.
]昵称命令例如您如果来自DOS的世界,对UNIX的指令不习惯,可用alias来修改,以符合您的习惯.
例aliasls="ls--color"aliasdir="ls"aliascd.
.
="cd.
.
"aliascopy="cp-f"#dangerous,recommend,"cp-i"aliasdel="rm-f"#dangerous,recommend,"rm-i"aliasmove="mv-f"#dangerous,recommend,"mv-i"aliasmd="mkdir"aliasrd="rmdir"unalias[-a][name.
.
.
]unalias取消alias的设定.
"unalias-a"将全部alias取消.
例unaliascopybg[jobspec]将指定任务放到背景中,如果jobspec未指定,内定为目前的.
fg[jobspec]将指定任务放到前景中,如果jobsepc没有指定,那么内定为目前的.
jobs[-lnp][jobspec.
.
.
]第一种形式列出目前正在工作的任务.
-l:除了列出一般资讯外,还列出ProcessIDs.
-p:仅列出该工作群"首脑"(Processgroupleader)的ProcessID.
-n:则仅列出有改变的jobs的状态.
如果给定jobspec,输出资讯则只有该jobspec.
返回值为零,除非有非法的选项发生.
jobs-xcommand[args.
.
.
]如果使用第二种形式(-x),jobs取代指定的command及args,并执行返回其ExitStatus.
kill[-ssigspec|-sigspec][pid|jobspec].
.
.
将sigspec的信号送到pid或jobspec.
sigspec可以是SIGKILL/KILL这种形式或是信号号码.
如果sigspec是signalname,则大小写无关,而且可以没有SIG.
kill-l[signum]列出信号名称.
[foxman@foxmanbash]#kill-l1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGIOT7)SIGBUS8)SIGFPE9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM17)SIGCHLD18)SIGCONT19)SIGSTOP20)SIGTSTP21)SIGTTIN22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO30)SIGPWRwait[n]等待指定的行程,并返回其结束状态.
n可以是个jobspec或ProcessID.
如果n未指定,则等待所有的子行程,及返回值为零.
若n为不存在的job或process,则返回127.
否则,返回值为最后一个job/process的ExitStatus.
bind[-mkeymap][-lvd][-qname]bind[-mkeymap]-ffilenamebind[-mkeymap]keyseq:function-name显示出目前readline的按键及链结函数设定或是巨集.
-mkeymap:设定keymapbinding.
-l:显示出所有readlinefunction的名称.
-v:显示出目前的functionname及bindings.
-d:显示出functionname及bindings.
-ffilename:从filename读取keybindings.
-qfunction:询问那个按键触发function.
break[n]跳出控制回圈for/while/until中使用.
如果有指定n,则跳出n层.
n必须是大于等于1.
若n大于巢状圈数,则所有的圈都会跳离.
返回值回零.
continue[n]还原控制回圈for/while/until中使用.
如果有指定n,则返回n层.
n必须是大于等于1.
若n大于巢状圈数,则还原到最上层.
返回值回零.
exit[n]离开程式.
n是ExitStatus.
return[n]在function中使用.
n为返回值,其作用与ExitStatus一样.
builtinshell-builtin[arguments]执行内建函数.
当您定义了与内建函数相同的指令时,可用此命令来执行内建函数.

cd[dir]更换目录到dir.
如果没有指定,内定为HOME所指定的目录.
command[-pVv]command[arg.
.
.
]用command指定可取消正常的shellfunction寻找.
只有内建命令及在PATH中找得到的才会被执行.
"-p"选项,搜寻命令的方式是用PATH来找.
"-V"或"-v"选项,会显示出该命令的一些简约描述.
declare[-frxi][name[=value]]typeset[-frxi][name[=value]]宣告参数并给它们设定属性.
如果没有给定名称,将会显示各参数值.
-f:仅使用函数名称.
-r:将name设为readonly.
-x:将name输出给后续环境使用.
-i:该参数被设为integer来使用,可用于算术表述.
用"+"时,关闭该属性.
dirs[-l][+/-n]显示目前记忆的目录.
目录可透过pushd/popd来操作.
+n:显示开始的记录n个.
-n:显示结尾的记录n个.
-l:显示较多的资讯.
echo[-neE][arg.
.
.
]输出显示args,由空白分隔.
返回值永为零.
-n:不跳行.
-e:启动"\"符号的解译.
-E:将ESC解译功能取消.
"\a":alert(bell),发出声响.
"\b":backspace,倒退.
"\c":suppresstrailingnewline,不跳行.
"\f":formfeed,跳行跳格.
"\n":newline,新行.
"\r":carriagereturn,回到行起点.
"\t":horizontaltab,水平跳位.
"\v":verticaltab,垂直跳位.
"\\":输出"\".
"\nnn":输出ASCIICode号码nnn(八进位).
enable[-n][-all][name.
.
.
]启动或关闭内建函数命令.
使用"-n"将所有指定命令皆关闭,否则都是启动的.
如果只有"-n"参数,它将会显示所有关闭的函数.
如果只有"-all",它将会显示所有内建命令.

eval[arg.
.
.
]读取args,并将args合为一个命令,然后执行.
其返回值成为eval的返回值.
如果没有参数,eval返回True.
exec[[-]command[arguments]]当命令执行时,该命令取代shell,没有新的process产生.
如果第一个参数是"-",shell会将"-"放入第零个参数,传给command.
export[-nf][name[=word]].
.
.
export-p将name输出给环境,给往后的命令使用.
"-f"选项表示name是函数.
"-p"显示出所有export的名称.
"-n"移除name.
set[--abefhkmnptuvxldCHP][-ooption][arg.
.
.
]-a:自动将变数标记为可让后面环境所使用.
-b:立即报告被终结的背景程式状态.
-e:当命令(simple-command,见后面)返回非零值时,立即跳出.
-f:取消pathnameexpansion.
-h:找出所记忆的函数命令位置.
-k:所有keyword参数都放到环境中.
-m:监督模式.
-n:读取命令,但不要执行.
可用于语法检查.
-p:打开privileged模式.
-t:当读取一个命令并执行后,立即离开.
-u:当参数展开时,把unset参数当成是错误.
-v:列出shellinputlines.
-x:在展开每个simple-command后,bash显示展开值在PS4上.
-l:储存并还原namebinding在for语法中.
-d:关闭hasingcommand搜寻.
-C:跟`noclobber=`一样.
请见内定参数一节.
-H:启动!
stylehistorysubstitution.
-P:在使用像cd这种指令时,不要跟随symboliclinks.
之后,没有参数跟在后面.
-:指定将所有后面的参数当成是位置参数.
-ooption-name:option-name可以是以下之一allexport:与"-a"相同.
braceexpand:启动BraceExpansion.
这是内定设定.
emacs:使用emacs-style命令列编辑界面.
errexit:与"-e"相同.
histexpand:与"-H"相同.
ignoreeof:效果跟`IGNOREEOF=10`一样.
interactive-commands:允许#做为解.
monitor:与"-m"相同.
noclobber:与"-C"相同.
noexec:与"-n"相同.
noglob:与"-f"相同.
nohash:与"-d"相同.
notify:与"-b"相同.
nounset:与"-u"相同.
physical:与"-P"相同.
posix:Bash行为修改为Posix1003.
2标准.
privileged:与"-p"相同.
verbose:与"-v"相同.
vi:使用vi-style命令列编辑程式.
xtrace:与"-x"相同.
unset[-fv][name.
.
.
]移除对映于name的参数.
要注意PATH、IFS、PPID、PS1、PS2、UID、EUID不能unset.
若RANDOM、SECONDS、LINENO、HISTCMD被unset,它们会丧失原有意义,既始它们后来被重设也一样.
返回值为True,除非name是不能被unset的.
fc[-eename][-nlr][first][last]fc-s[pat=rep][cmd]修正命令.
getoptsoptstringname[args]解析位置参数.
help[pattern]显示协助资讯.
history[n]history-rwan[filename]没有参数时,会显示所下命令的历史记录.
带有参数"n"则显示最后n个.
其它参数如下:-a:新增"新历史"到历史档中.
-n:读取尚未读到历史中的记录.
-r:读取filename做为历史档,并用它为目前历史记录.
-w:将现有历史记录写到filename中.
letarg[arg.
.
.
]算术表述.
请参考算术表述一节.
local[name[=value].
.
.
]产生一个局部参数.
如果用于function,则其作用围在function内及其子函数.
logout离开loginshell.
popd[+/-n]移除目录堆叠.
"+n"移除上面n个,"-n"移除下面n个.
pushd[dir]pushd+/-n将目录新增到目录堆叠的最上面.
"+n"旋转该堆叠,使第n个目录变成最上面.
"-n"旋转该堆叠,使倒数第n个目录变成最上面.
pwd列出目前工作目录的绝对路径.
read[-r][name.
.
.
]读进一行,然后第一个字设到第一个name,第二个设到第二个name,依此类推.
如果没有name在参数中,则read会将值设到REPLY.
返回值为零,除非遇到End-Of-File.
若有"-r"选项,则"\n"被考虑为该行的一部份.
readonly[-f][name.
.
.
]readonly-p将给定的name标记为readonly.
如果是"-f"选项,则函数也一样被标记为readonly.
"-p"会列出所有readonly的name.
"--"取消检查剩余的参数.
shift[n]PositionalParameters从n+1.
.
.
开始,会被改为$1.
.
.
.
n若为零,则没有改变.
n若未给定,则内定为1.
n必须是非负数,并且小于或等于$#.
若n大于$#,则没有改变.
返回值为零,除非n大于$#或小于零.
suspend[-f]暂停这个shell的执行,直到它收到SIGCONT信号.
"-f"选项则是叫loginshell不要抱怨,不过还是一样暂停.
返回状态零,除非该shell是个loginshell,而且没有"-f"选项.
testexpr[expr]我们在ExitStatus的部份已经说过了,不再重.
times列出该shell的累积的使用者及系统时间及从shell执行的process时间,返回值为零.
--trap[-l][arg][sigspec]当收到sigspec信号时,执行arg命令.
"-l"显示出信号名称及号码.
type[-all][-type|-path]name[name.
.
.
]没有参数的状况下,它会显示出shell如何解译name做为命令.
如果有"-type",它将会显示alias、keyword、function、builtin或file.
如果有"-path"的参数,它将会显示该命令的路径,找不到的话,不显示任何东西.
如果有"-all"的参数,它将会显示所有可执行name的可能路径.
type接受"-a"、"-t"、"-p"做为缩写.
ulimit[-SHacdfmstpnuv[limit]]ulimit提供了对shell的可获取资源控制的功能.
-a:报告目前所有限制.
-c:设定最大可产生的core档案.
-d:行程资料段(process'sdatasegment)最大值.
-f:可被这个shell产生的最大档案.
-m:residentsetsize最大值.
-s:堆叠最大值.
-t:CPUTIME最大值(以秒计算).
-p:pipesizein512-byteblocks的最大值.
-n:可开启的filedescriptors最大值.
-u:单一使用者可使用的最大process数.
-v:该shell最大虚拟记忆体可用值.
所有项目是以1024做为单位.
umask[-S][mode]将使用者的file-creationmask设为mode.
"-S"选项将mask印成符号形式.
Bash内建参数PPID:该bash的呼叫者processID.
PWD:目前的工作目录.
OLDPWD:上一个工作目录.
REPLY:当read命令没有参数时,直接设在REPLY上.
UID:UserID.
EUID:EffectiveUserID.
BASH:Bash的完整路径.
BASH_VERSION:Bash版本.
SHLVL:每次有Bash执行时,数字加一.
RANDOM:每次这个参数被用到时,就会产生一个乱数在RANDOM上.
SECONDS:从这个Shell一开始启动后的时间.
LINENO:Script的行数.
HISTCMD:历史记录数.
OPTARG:getopts处理的最后一个选项参数.
OPTIND:下一个要由getopts所处理的参数号码.
HOSTTYPE:机器种类.
OSTYPE:作业系统名称.
IFS:InternalFieldSeparator.
PATH:命令搜寻路径.
PATH="/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.
"HOME:目前使用者的homedirectory;CDPATH:cd命令的搜寻路径.
ENV:如果这个参数被设定,每次有shellscript被执行时,将会执行它所设定的档名做为环境设定.
MAIL:如果这个参数被设定,而且MAILPATH没有被设定,那么有信件进来时,bash会通知使用者.
MAILCHECK:设定多久时间检查邮件一次.
MAILPATH:一串的邮件检查路径.
MAIL_WARNING:如果有设定的话,邮件被读取后,将会显示讯息.
PS1:提示讯息设定,内定为"bash\$".
(请详见提示讯息一节.
)PS2:第二提示讯息设定,内定为">".
PS3:select命令所使用的提示讯息.
PS4:执行追踪时用的提示讯息设定,内定为"+".
HISTSIZE:命令历史记录量,内定为500.
HISTFILE:历史记录档,内定~/.
bash_history.
HISTFILESIZE:历史记录档行数最大值,内定500.
OPTERR:如果设为1,bash会显示getopts的错误.
PROMPT_COMMAND:如果设定的话,该值会在每次执行命令前都显示.
IGNOREEOF:将EOF值当成输入,内定为10.
TMOUT:如果设为大于零,该值被解译为输入等待秒数.
若无输入,当成没有输入.

iWebFusion:独立服务器月付57美元起/5个机房可选,10Gbps服务器月付149美元起

iWebFusion(iWFHosting)在部落分享过很多次了,这是成立于2001年的老牌国外主机商H4Y旗下站点,提供的产品包括虚拟主机、VPS和独立服务器租用等等,其中VPS主机基于KVM架构,数据中心可选美国洛杉矶、北卡、本德、蒙蒂塞洛等。商家独立服务器可选5个不同机房,最低每月57美元起,而大流量10Gbps带宽服务器也仅149美元起。首先我们分享几款常规服务器配置信息,以下机器可选择5...

月神科技-美国CERA 5折半价倒计时,上新华中100G高防云59起!

官方网站:点击访问月神科技官网优惠码:美国优惠方案:CPU:E5-2696V2,机房:国人热衷的优质 CeraNetworks机房,优惠码:3wuZD43F 【过期时间:5.31,季付年付均可用】活动方案:1、美国机房:洛杉矶CN2-GIA,100%高性能核心:2核CPU内存:2GB硬盘:50GB流量:Unmilited端口:10Mbps架构:KVM折后价:15元/月、150元/年传送:购买链接洛...

3G流量免费高防CDN 50-200G防御

简介酷盾安全怎么样?酷盾安全,隶属于云南酷番云计算有限公司,主要提供高防CDN服务,高防服务器等,分为中国境内CDN,和境外CDN和二个产品,均支持SSL。目前CDN处于内测阶段,目前是免费的,套餐包0.01一个。3G流量(高防CDN)用完了继续续费或者购买升级包即可。有兴趣的可以看看,需要实名的。官方网站: :点击进入官网云南酷番云计算有限公司优惠方案流量3G,用完了不够再次购买或者升级套餐流量...

linuxvi命令为你推荐
网站域名怎么知道一个网站域名是什么啊!域名服务商比较专业的域名服务商有哪些?好的域名和域名服务商没关系吧?域名备案域名怎么备案免费网站空间免费网站空间哪个好虚拟主机管理系统推荐几个适合windows的免费虚拟主机管理系统apache虚拟主机apache里面可以在虚拟主机里边设置虚拟目录吗?急,在线等!二级域名什么是二级域名域名交易域名如何买卖??新网域名新网域名是不是又挂了?域名反查whois反查怎么查,有什么接口吗?通过邮箱查有多少域名???
免费网站空间 免费注册网站域名 阿云浏览器 westhost dropbox网盘 php免费空间 北京双线机房 bgp双线 股票老左 tna官网 根服务器 web服务器搭建 河南移动梦网 学生服务器 免费赚q币 香港ip 蓝队云 免费网站加速 web服务器有哪些 ubuntu安装教程 更多