linuxshell文档格式.docx
《linuxshell文档格式.docx》由会员分享,可在线阅读,更多相关《linuxshell文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
Init进程getty进程login进程shell进程,getty进程退出,login进程成为shell进程的父亲。
在/etc/passwd文件中指定要启动的Shell。
root:
x:
0:
1:
superuser:
/:
/sbin/sh
nsadmin:
201:
starf:
/home:
/bin/csh
2在命令行的方式下:
在系统中可能有多种版本的Shell存在,可通过相应的命令来启动,如:
cshkshshbash
1.2.2程序设计语言
Shell本身也是一种可编程的程序设计语言。
Shell允许通过编程来完成复杂的功能处理,但其作为语言与高级语言比较具有不同的特点:
Shell是解释性的,多数高级语言是编译性的;
Shell语言与高级语言处理的对象不同;
Shell与系统有密切的关系;
Shell易编写、调试、灵活性较强,但速度低;
Shell作为命令级语言,命令组合功能很强。
●sh:
BourneShell,是最常用的Shell,标准shell(有时安装成bsh)。
●ksh:
KornShell,由BourneShell通过增加History和命令行编辑功能演变而来。
●Sh:
POSIXShell,与KornShell相似,是BourneShell的高级版本。
POSIX标准要求被安装成sh。
●csh:
CShell,是基于C语言的Shell。
●bash:
BornAgainShell(bash),是KornShell的超集,又包括不少CShell语法。
但不常用。
RedhatLinux缺省的shell。
●tcsh:
CShell的一个版本,包括交互式的命令行编辑。
●zsh:
ZShell是复杂的,但却具有优良特性的Shell。
它能模拟Korn、C或POSIXShell。
也不常用。
Shell类别
易学性
编辑
快捷
可移植性
Bourne(sh)
容易
较差
好
Korn(ksh)
较难
较好
BourneAgain(bash)
难
POSIX(psh)
C(csh)
差
TC(tcsh)
Z(zsh)
常用Shell在交互式使用方面的比较
Shell有两种主要语法类型:
Bourne和C,彼此不兼容,
Bourne家族:
shkshbashpshzsh
C家族:
cshtcsh
其中:
bash和zsh在不同程度上支持csh的语法。
二Shell的命令简介
2.1命令的一般格式
UNIX系统命令的一般格式为:
command[options][arguments][filenames]
options常带有一个连字号“-”
字符标志位,以此扩展命令的特性或功能;
arguments
表示命令的自变量(参数);
filenames
表示文件或目录的名字。
2.2Shell常用的命令
UNIX有丰富的Shell命令,大致划分为以下几类:
目录操作与管理、文件操作与管理命令、系统管理与维护、用户管理与维护、系统状态、进程管理、通讯命令、其它命令。
例:
awk
bcbg
catchmodchowncpcron
datedfdiffdu
echoexpr
filefindfg
grep
init
kill
lnlogin
lsmailmakemanmkdirmkfsmountmv
nohup
pgpwdpsprpwd
readrm
sedsortsync
tailtee
wc
2.3Shell的内部命令(Buildincommand)
出于运行效率的考虑,将一些命令构造在Shell的内部。
这些命令比非内部命令执行速度快。
Shell常用的内部命令有:
用于结构分支及控制:
ifelseforcasewhileuntilcontinuebreak
其它:
readcdechoevalexecexitexportreadonlysetshifttesttimetrapunsetumaskwait
2.4命令的查询
环境变量PATH的构成决定了寻找Shell命令和其它程序的途径,是影响Shell程序效率的主要因素之一。
PATH变量设置要考虑以下几点:
常用目录放在PATH变量中,使用频度高的目录排在前面;
PATH应尽可能地短,不要出现重复的目录;
尽量避免查询大目录,如需设置,将其路径放在PATH路径的最后位置。
例:
PATH=/bin:
/usr/bin:
/etc:
.
2.5元字符和文件名生成
UNIX元字符(通配符)的定义
*匹配任何字符串,包括空字符串;
?
匹配任何单个字符;
[…,-,!
] 按照范围“-”、列表“...”或不匹配“!
”等形式匹配指定的字符;
\转意符,使元字符失去其特殊的含义。
[a-d,x,y] 匹配字符a、b、c、d、x、y;
z*匹配以字符z开始的任何字符串;
x?
y匹配以x开始、以y结束、中间为任何单个字符的字符串;
[!
Z] 匹配不为Z的单个字符。
元字符作为文件扩展名的使用
[a-f]*匹配字符a到字符f开头的文件名;
abcd2e3.cf.dat
*z匹配以字符z结尾的任何字符串;
win.zcore.zza-c_5z
rc?
.d匹配以rc开始、以.d结束、中间为任何单个字符的文件名;
rc0.drc2.drcS.d
*[!
o]匹配不以o结尾的文件名;
2.6管道和命令表
管道的概念
管道:
是一个命令的标准输出与另一个命令的标准输入之间的连接,不经过任何中间文件;
管道线:
是由管道操作符分隔的一个命令序列,最简单的管道线是一个简单命令;
管道操作符:
用符号“|”表示。
例:
who|wc-l
ps-ef|grepftp
ls-l
命令表的概念
命令表:
一串管道线(命令)构成了一个命令表,最简单的命令表是一个管道线(即一个简单命令)。
管道线(命令)分隔符:
分隔命令表元素,确定管道线执行的条件,含义如下:
;
或换行符:
表示按顺序执行管道线;
&
&
:
表示根据条件(true),执行其后面的管道线;
||:
表示根据条件(false),执行其后面的管道线;
表示前面的管道线在后台(异步)执行。
例1:
四个管道线构成一个命令表
ls-l/bin/usr/bin
a|b|c|d
ps
例2:
与例1等价
ls-l/bin/usr/bin;
who|wc-l;
a|b|c|d;
ps
例3:
sys_account&
例4:
查询指定的文件是否存在,给出相应信息
test-f$1&
echo“$1exists”
test-f$1||echo“$1notexists”
2.7命令组合
命令组合有两种形式:
{命令表}由当前Shell来执行命令表。
{cdmydoc;
rmjunk;
}
(命令表)
当前Shell派生一个子Shell进程来执行命令表。
(cdmydoc;
)
bash中支持(命令表)这种方式
2.8命令替换
用命令的执行结果来替换这个字符串本身。
注意反撇号与单引号的区别。
例1:
#now=‘date’单引号
#echo$now
date
#now=`date`单撇号
1999年12月8日星期三19时51分56秒CST
#count=10
#count=`expr$count+1`
#echo$count
11
2.9输入、输出重定向
使用标准改向符进行重定向(改向)
<
输入改向
<
输入改向(here文件)
>
输出改向
>
追加输出改向
(用标准文件描述字进行重定向(改向))
在UNIX系统中,使用了文件描述字来定义输入、输出的标准文件,其中:
0:
标准输入1:
标准输出2:
标准错误输出
标准输入的改向(<
、<
command<
file
command<
EndOfMarker
:
EndOfMarker
sort<
myfile
cat<
!
eof
Hellow!
>
ok!
!
标准输出的改向(>
、>
command>
command>
date>
ls-l>
catfile*>
myfile
ps-ef|grepftp>
标准错误输出的改向(>
command2>
file
将错误输出改向到err_file文件。
myprog2>
err_file
将标准输出和错误输出改向out文件。
myprog>
out2>
out(两种方法等价)
1(改向处理从左至右)
错误输出被显示,标准输出改向out文件
1>
out
第二部分
文件安全与权限
☉文件权限(chown,chmod,chgrp,umask)
符号模式:
chmoda+x…(u-r,g-w,a-x)
绝对模式:
chmod644…(rwx->
7)
eg:
drwxrwxr-x2nsadminnsadmin4096Sep508:
52sbin
drwsrwsr-x2nsadminnsadmin4096Sep508:
suidandguid
chmod+s…
chmod+4xxx…设置suid
chmod+6xxx…设置guid
☉符号链接(ln)
硬链接:
Inode(1234)
filename
1234
linkname
…..
Data
Data
Data
删除源文件或者任何一个链接,数据块还存在并可以访问到。
data
软链接:
Inode(321)
…
Path/filename
Inode(333)
Linkname
软链接删除和源文件没有任何关系,但是源文件删除了,软链接就玩完了。
-f,--forceremoveexistingdestinationfiles
-i,--interactivepromptwhethertoremovedestinations
-s,--symbolicmakesymboliclinksinsteadofhardlinks
…
find命令
格式:
findpathname–option[-print–exec–ok]
选项说明:
-name按照文件名查找文件
$find.–name“*.txt”-print
-perm按照文件权限查找文件
$find.–perm755-print
-prune不在指定的目录查找
$find.–name“./wzf”–prune–o-print
-user按照文件属主查找文件
$find.–groupnsadmin–print
$find.–nogroup-print
-group按照文件属组查找文件
$find.–usernsadmin–print
$find.–nouser-print
-mtime
$find/-mtime–5–print更改时间在五日以内的文件
-newer
$find.–newerwzf.txt!
–newerwangzf.txt–execls–l{}\;
更改时间比文件wzf.txt新但比文件wangzf.txt旧的文件
-size
$find.–size+100c-print
查找大于100字节的文件
-depth
$find/-name“abc.conf”-depth-print
深入目录查找
-mount
$find.–name“*.txt”–mount–print
在当前文件系统查找所有以.txt结尾的文件
使用exec或者ok来执行shell命令
$find.–typef–execrm{}\;
使用xargs来执行shell命令
$find.–name“*.txt”–print|xargsrm