第一部分文件安全与权限
权限
-rwxrwxrwx
rwx 读+写+执行
s 文件属主和组set-ID t 粘性位
4 2 1
U+G+O
User+group+other
文件类型
d 目录
l 符号链接
s 套接字文件
b 块设备文件
c 字符设备文件
p 命名管道文件
- 普通文件
改变文件权限
chmod
u文件所有者
g同组用户
o其他用户
a所有用户
+增加权限
-取消权限
=设定权限
suid/guid
why?当其它人使用有suid/guid的文件时就会有止文件所属用户的权限,这是很危险的!!
chown 改变所属用户chgrp 改变所属组
umask 默认文件权限设置 ,设置方法为777减去文件权限所得的值。
第二部分
find
和
xargs
Find pathname �Ciptions
find / -name xxx
-name 按文件名查找
Find / -name “*.txt” -print
-perm 按文件权限 查找
Find / -perm 755 -print
-prune 使find不在当前目录查找,如果同时使用了-depth那么-prune将被find 忽略
-user 按文件所属用户查找
-group 按所属组查找
-mtime �Cn +n 按文件更改时间来查找-n表示距现在n天内+n表更改时间距现在n天以前,另外还有-atime和-ctime选项用法和-mtime相似
-nogroup 查找不属于任何组的用户
-nouser 查找不属于任何人的文件
-newer file ! fiel2 查找比file1新但比file2旧的文件
-type 查找某一类型的文件如:
d -目录
l -符号链接
s -套接字文件
b -块设备文件
c -字符设备文件
p -命名管道文件
f - 普通文件
-size n[c]查找文件长度为n块的文件,带c时表示文件长度以字节计。
-depth 查找文件时先查找当前目录,再查找子目录。
-fstype 查找某一类型文件系统中的文件,
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接,就跟踪止链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。、
使用exec或ok来执行shell命令,在找到一些文件后使用-exec来执行相关命令
-exec 后跟要执行的命令,一对{} 一个空格和一个\最后一个分号
Find . �Ctype f �Cexec ls �Cl {} \;
xargs?????
第三部分后台执行命令
at
cron 和crontab
&
Nohup 后台运行一个命令,即使用户退也也不受影响。
*
* * * * command
分 时 日 月 周 命令
Crontab [-u user] �Ce �Cl �Cr
用户 编辑 例出 删除
at [-f script] [-m �Cl �Cr ] [time] [date]
-f script 命令或脚本
-l 列出
-r 删除
-m 完成后发邮件
第四部分文件名置换
* 匹配任何字符串,包括空字符串。
?匹配任何单个字符
[…] 匹配[]中所含的任何字符
[!....]匹配[]中除!之后的字符
第五部分
shell
输入与输出
echo \c
\f \t \n
不换行
进纸
跳格
换行
read
cat
管道 | 前一个命令的输出做为后一个命令的输入
tee
一个输出到标准输出,另一个拷到相应的文件中
标准输入,输出和错误
0
1 2
文件重定向
> >> <
comm > file 2>&1
exec 替换当前shell
第六部分
&&
||
返回0
返回非0
()
{}
当前shell
子shell
第七部分正则表达式
基本元字符及含义
^
只匹配行首
$
只匹配行尾
*
一个单字符后跟*,匹配0个或多个止字符
\
屏蔽特殊字符
pattern\{n\}
匹配前面pattern出现次数,n次
pattern\{n,\}m
同上,但次数最少为n
pattern\{n,m\}
同上,但pattern 在n与m 次之间。
第八部分
grep
家族
grep
grep “sort” *.doc
-c
只输出匹配行的计数
grep �Cc “48” data.f
-i
不区分大小写
-h
查询多文件时不显示文件名
-l
查询多文件时只输出包含匹配字符的文件名
-n
显示匹配行及行号
-s
不显示不存在或无匹配文本的错误信息
-v
显示不包含匹配文本的所有行
grep 和正则表达式
grep ‘48[34]’ data.f
查找483 或484
grep ‘^[^48]’ data.f
查找非48开头的行
grep ‘[Ss]ept’ data.f
查找sept或Sept
grpe ‘K…D’ data.f
查找K开头D结尾五个字母的单词
grep ‘4\{2,\}’ data.f
找4至少出现2次的行
grep ‘6\{2,6}3’ data.f
找6出现2到6次,并以3结尾
grep �CE ‘219|216’ data.f
找219或216
grep ‘^$’ data.f
找空行
类名
类
等价的正则表达式
[[:upper:]]
[A-Z]
[[:lower:]]
[a-z]
[[:digit:]]
[0-9]
[[:alnum:]]
[0-9a-zA-Z]
[[:space:]]
空格或tab
[[:alpha:]]
[a-zA-Z]
egrep
第九部分
awk
介绍
模式和
动作:模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。
域和记录
域1 分隔 符域2 分隔符 域3 分隔符 域4及换行
Bunny # 02/99 # 48 # Yellow\n
$1 $2 $3 $4
全文为$0
模式和运行??
域和记录
抽取记录
awk ‘{print $0}’ grade.txt >wow 抽取全文
awk ‘{print $1}’ grade.txt >wow 抽取域1也就是第一列
awk ‘{print $1,$4}’ grade.txt >wow 抽取域1和域4
awk ‘BEGIN {print “Name Belt\n---------------------------”}{print$1”\t”$4}’ grade.txt 打印开头
Name
Belt
---------------------------------
M.Tansley
Green
.
.
.
L.Tansley
Brown-3
Awk ‘BEGIN {print “Name\n-----”} {print $1} END {“end-of-report”}’ grade.txt
打印开头和结尾
Name
--------
.
.
.
end-of-report
awk及正则表达式
\
^ . [] | () * + ?
注:+和?只适用于awk
Awk条件操作符
<
<=
==
!=
>=
~
匹配正则表达式
!~
Awk内置变量
ARGC
命令行参数个数
ARGV
命令行参数排列
ENVIRON
支持队列中系统环境变量的使用
FELENAME
awk浏览的文件名
FNR
浏览文件的记录数
FS
设置输入域分隔符,等价于命令行-F选项
NF
浏览记录的域个数
NR
己读的记录数
OFS
输出域分隔符
ORS
输出记录分隔符
RS
控制记录分隔符
awk ‘{print NF,NR,$0}END{print FILENAME}’ grade.txt
awk操作符
= += *= / = %= ^ =
赋值操作符
?
条件表达操作符
|| && !
并,与,非
~ !~
匹配操作符,匹配和不匹配
< <= ==
!= >> 关系操作符
+ - * / % ^
算术操作符
+ + --
前缀和后缀
内置的字符串函数
gsub(r,s)
$0中用s替代r
gsub(r,s,t)
t中用s替代r
index(s,t)
返回s中字符串t的第一位
length(s)
返回s长度
match(s,r)
测试s是否包含匹配r的字符串
split(s,a,fs)
在f上将s分成序列a
sprint(fmt,exp)
返回经fmt格式化后的exp
sub(r.s)
用$0中最左边最长的子串代替s
substr(s,p)
返回字符串s中从p开始的后缀部分
substr(s,p,n)
返回字符串s中从p开始的长度为n的后缀部分
awk中使用的屏蔽序列
\b
退格键
\f
走纸换页
\n
换行
\r
回车键
\t
tab键
\ddd
八进制值
\c
任意其它特殊字符
awk printf修饰符
- 左对齐
Width 域的步长,用0表示0步长
-prec 最大字符串长度,或小数点左边的位数
awk printf格式
%c ASCII字符
%d 整数
%e 浮点数,科学记数法
%f 浮点数,例如(123.44)
%g awk决定使用哪种浮点数转换e或者f
%o 八进制数
%s 字符串
%x 十六进制数
awk数组
第十部分
sed
用法介绍
Sed是一个非交互性的文本流编辑器。
Sed在文件中定位文本的方式
x
x为一行号,如1
x,y
表示行号范围从x到y如2,5表示从第2到第5行
/pattern/
查询包含模式的行
/pattern/pattern/
查询包含两个模式的行
pattern/,x
在给定的行号上查询包含模式的行
x,/pattern/
通过行号和模式查询匹配行
x,y!
查询不包含指定行号x和y的行
sed的编辑命令
p
打印匹配行
=
显示文件行号
a\
在定位行号后附加新文件信息
i\
在定位行号后插入新的文本信息
d
删除定位行
c\
用新文本替换定位文本
s
使用替换模式替换相应模式
r
从另一个文件中读文本
w
写文本到一个文件
q
第一个模式匹配完成后退出或立即退出
l
显示与八进制ASCII代码等价的控制字符
{}
在定位行招待的命令组
n
从另一个文件中读文本下一行,并附加在下一行
g
将模式2粘贴到/pattern n/
y
传送字符
n
延续到下一输入行:允许跨行的模式匹配语句
sed ‘2p’ quote.txt
打印第二行
sed �Cn ‘2p’ quote.txt
打印匹配行
sed �Cn ‘1,3p’ quote.txt
sed �Cn ‘/Neave/’p quote.txt
打印匹配Neave的行
sed �Cn ‘4,/The/p’ quote.txt
打印第4 行中有The的行
sed �Ce ‘/music/=’ quote.txt
打印music所在的行号
sed ‘s/night/NIGHT/’ quote.txt
将第一个night换成NIGHT
sed ‘s/\$//’ quote.txt
删除第一个$
sed ‘s/The/Wow!/g’ quote.txt
将文件中所有The换成Wow!
sed �Cn ‘s/played/from Hockering &/p’ quote.txt
将played 换成字符串from Hockering
sed �Cn ‘s/played/”Hello” &/p’ quote.txt 将played
换成字符串”Hello”
sed常用命令集[]表空格 [ ]表示tab
‘s/\.$/g/’
删除以.结尾的行
‘-e /abc/d’
删除包含abc的行
‘s/[][][]/[ ]/’
删除一个以上的空格以一个空格代替
‘s/^[][]*//g’
删除行首空格
‘s/\.[][]*/[]/g’
删除句点后两个或更多空格,以一个空格代替
‘/^$/d’
删除空行
‘s/^.//g’
删除第一个字符
‘s/COL\(…\)//g’
删除紧跟COL后的三个字符
‘s/^\///g’
从路径中删除第一个\
‘s/[]/[ ]/g’
删除所有空格用tab代替
‘s/^[ ]//g’
删除行首所有tab键
‘s/[ ]*//g’
删除所有tab键
第十一部分合并与分割
实用的分类sort操作
简要介绍Sort的参数
-c 测试文件是否己分类
-m 合并两个分类文件
-u 删除所有复制行
-o 存储sort结果的输出文件名
-b 使用域进行分类时,忽略第一个空格
-n 指定分类是域上的数字分类
-t 域分隔符;用非空格或tab键分融域
-r 对分类次序或比较求逆
+n n为域号,使用此域号开始分类
n n为域号,在分类比较时忽略此域,一般与+n一起使用
Post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。
Sort默认为空格或多个空格为分隔符,要加入其它方式分隔,使用-t选项。
Field 0 Field 1 Field 2 Field 3
Star Wars HK 301 4102
A Few Good Men KL 445 5851
head -20 file_name 头20行
tail -7 file_name 未尾7行 tail -f file_name 实时更新file文件(常用查看日志)
u
niq
-u 只显示不重复行
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现资料
-f n为数字,前n个域被忽略
一些系统不识别-f 选项,这时替代使用-n
j
oin
join |options| input-file1 input-file2
an n为文件号,m为域号。如-a1显示第一个文件的不匹配行 -a2从第二个文件中显示不匹配行
o n,m n 为文件号,m为域号。 每个n, m必须用逗号分隔如1,3表示文件1第三个域
j n m n为文件号, m为域号。使用其他域做连接域。
t 域分隔符。用来设置非空格或tab键的域分隔符。如-t:指定冒号为分隔符。
c
ut
:从标准输入或文本文件中前切列或域。格式为cut [options] file1 file2
-c list 指定剪切字符数 -c1,5-7 剪切第一个,然后是5到7个字符 -c1-50剪切前50个字符
-f field 指定剪彩切域数 格式与-c相同 -f 1,5 剪切第一和第五域
-d 指定与空格和tab不同的域分隔符
p
aste
:将按行将不同文件进行信息放在一行,默认以空格或tab为分隔符除非用-d选项指定。
paste -d -s -file1 file2
-d 指定不同的域分隔符如-d@
-s 将每个文件合并成行而不是按行粘贴
- 使用标准输入 如ls -l | paste
s
plit
:将大文件分割成小文件
split -output_file-size input-filename output-filename
最多1000行
$split bigone.txt (有2800行)
xaa 1000行
xab 1000行
xac 800行
第十二部分
tr
用法(所有功能都可以用sed来完成,好好学学sed吧!)
第十三部分登录环境
/etc/profile
~/.profile
./logout
第十四部分环境和
shell
变量
变量
:可以保存路径,文件名,或数字
本地变量
:
只对当前用户起作用的变量。
显示变量
:
#
echo $variable-name
清除变量或环境变量
:
#
unset variable-name
set显示变量
设置只读变量
variable-name=value
readonly variable-name
查看只读变量 readonly
环境变量:一般所有环境变量均为大写,环境变量应用于用户进程前必须用export命令导出设置方法与本地变量方法相同。
位置变量(只读的)
$0
$1
$2
$3
$4
$5
$6
$7
$8
$9
文件名
did you see the full moon
shell特定变量
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数,止选项参数可超过9个
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的进程ID号
$@
与$#相同,但是使用时加引号,并在引号中返回每个参数
$-
显示shell使用的当前选项,与set命令功能相同
$?
显示最后命令的退出状态,0表示没有错误,其它任何值表示有错误
第十五部分引号
“”
引用字符串
‘’
去掉所有特殊字符特殊含义
``
告诉脚本,这里一段shell命令
\
屏蔽特殊字符
第十六部分
shell
脚本介绍
chmod u+x xxx
./xxx
第十七部分条件测试
对文件,字符串和数字使用test命令
对数字和字符串使用expr命令
文件状态测试表
-d
目录
-f
正规文件
-L
符号链接
-r
可读
-s
文件长度大于0 ,非空
-w
可写
-u
文件有suid位设置
-x
可执行
[ -w scores.txt ]
逻辑操作符
-a
-o !
逻辑与
逻辑或
逻辑非
测试数值
-eq
数值相等
-ne
数值不相等
-gt
第一个数大于第二个数
-lt
第一个数小于第二个数
-le
第一个数小于等于第二个数
-ge
第一个数大于等于第二个数
Expr
$expr 10 +10
20
$expr 30 / 3
10
$LOOP=0
$LOOP=’expr $LOOP + 1’
第十八部分控制流结构
退出状态
echo $?
流控制 if the else
case
循环
for循环
Until循环
while循环
if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
fi
注:
if
语句命令部分不能为空
,如果没事可做那么必须加上":"
case 值 in
模式1)
命令1
……
;;
模式2)
命令2
…….
;;
模式3)
命令3
…..
;;
.
.
.
*)
缺省命令
…..
;;
Esac
For循环,依次执行命令
for 变量名in列表
do
命令1
命令2
命令3
命令N
done
until循环,直到条件为真时停止
until 条件
命令1
命令2
命令n
done
while循环直到条件为假进停止
while 命令
do
命令1
命令2
命令n
done
使用break和continue控制循环
b
reak
:此命令允许跳出循环,如在两层循环内,用
break2刚好跳出整个循环。
c
ontinue
:此命令类似
bread命令,只是它不会跳出循环,只是跳过这个循环步。
菜单
:可用于大量的屏幕输出,很方便的哦
cat << WORD
Any input
WORD
注:这个any input 可以输入好多排版漂亮的选项,而不用不停的"echo"第二个WORD前面不要有任何空格。如下
cat <<MAYDAY
-----------------------------------------------------------------------------------
user:$USER Host:$THIS_HOST Date:$MYDATE
-----------------------------------------------------------------------------------
1: list file in current directory
2: Use the vi editor
3: See who is on the system
H: Help screen
Q: exit Menu
-----------------------------------------------------------------------------------
MAYDAY
菜单???
第十九部分函数
最大作用就是可以反复调用, 可以节省大量重复劳动
函数名()
{
命令1
命令2
}
第二十部分向脚本传递参数????
第二十一部分创建屏幕输出????(目前还真用不上
)
Tupt 可以增强应用外观及脚本的控制。也可以对脚本增加颜色。可以控制光标,可以看起来更专业。
第二十二部分创建屏幕输入????(目前还真用不上
)
第二十三部分调式脚本
set �Cn 读命令但并不执行
set �Cv 显示读取的所有行
set �Cx 显示所有的命令及参数
第二十四部分
shell
嵌入命令(常用的命令听说是比系统里相同的命令要快,有用么?)
第二十五部分深入讨论<<
command <<word
text
Word
可以用来发邮件,连FTP,连接数据库。连接某些应用程序,也可以灵活的使用<<来运行以前编写的脚本,功能很强大。
第二
十六部分
shell
工具
创建日志文件,
时间显示格式
$ date +%d%m%y 090699
$ date +%d-%m-%y 09-06-99
$ date +%R 10:07
$date +%A" "%R" "%p Wednesday 10:09 AM
$ date +%T 10:29:41
$ date +%A" "%T Wednesday 10:31:19
创建临时性文件???
信号 信号名 含义
1 SIGHUP 挂起或父进程被杀死
2 SIGINT 来自键盘的中断信号,一般是CTRL-C
3 SIGQUIT 从键盘退出
9 SIGKILL 无条件终止
11 SIGSEGV 段(内存)冲突
15 SIGTERM 软件终止(缺省杀进程信号)
检测信号:只需关心信号1、2、3和15当捕捉到一个信号后可能会有下面三种操作
1、不采取任何行动,由系统处理
2、捕获该信号,但忽略它
3、捕获信号,并采取相应行动
要采取另两种方法,必须使用trap命令,命令形式为:trap name signal(s)常见的包括
1、清除临时文件
2、忽略此信号
3、询问用户是否终止此脚本的运行
下表是常见的trap命令的用法
trap""2 3 忽略信号2和信号3,用户不能终此此脚本
trap"commands"2 3 如果捕捉到信号2或3,就执行相应的commands命令
trap 2 3 复位信号2和3,用户可以终止此脚本
Logger:可以像/var/adm或/var/log中加入日志信息。从而在脚本出问题的时候可以看系统日志。此命令的一般格式为logger -p -I message
-p:为优先级,这里只涉及到提示用户注意的优先级,也是缺省值。
-i:在每个消息中记录发送消息的进程号。
第二十七部分几个脚本的例子
第二十八部分运行级别脚本
rc.d
rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
/etc/inittab
运行级别
0
停止
1
单用户模式
2
多用户模式
3
正常模式
4
用户自定义模式
5
X
6
重启
S 启动
K 杀死
第二十九部分
cgi
脚本???
http://www.resurl.com/