EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
由于工作的需要,越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅。 ) w& W, q$ }4 K
No.001 文件安全与权限1. umask 决定了新建文件的权限 8 Z2 x- W3 a+ }
2. 软链接(符号链接) ln -s source_path target_path 0 @5 K/ ~( W {! n2 g9 e
No.002 find和xargs1. find pathname -options [-print -exec -ok] * x" U$ Q7 }7 z3 y6 u* o5 I5 c8 l
其中exec参数的命令格式: 'command-' {} \; 注意必须包含【{} \;】 2 V% G8 q( S& R- \$ X; a1 Q
-perm 按权限来查找 ex. find . -perm 755 -print
4 G) D3 [. Y3 c3 H" K. }! _2 V/ R! k -mtime 按修改时间来查找 ex. find / -mtime -5 -print 更改时间5天以内
/ ^" z& x) x! L8 @4 }; L" {! w find / -mtime +5 -print 更改时间5天以前 # o$ T( J8 y/ Z( f
2. xargs与-exec和-ok类似,但是限制更少,也更快 ( j6 B. o/ l( s8 T5 i! t/ x6 u" }
3种参数的命令:find . -name "*.c" -exec wc -l {} \;
/ ?. n+ ]. f! ~) Y5 S* _6 B find . -name "*.c" -ok wc -l {} \; 每次执行命令前有提示
# l F$ v9 Z7 k% r find . -name "*.c" | xargs wc -l # H* `% Y9 j0 X; w
No.003 后台执行命令1. [crontab] [at] [&] [nohup]四种
5 Q6 w& N7 w8 N2 `No.004 文件名置换1. 列出隐藏文件 ex. ls .* % z0 A' `+ D% z8 ?1 j- K% S
No.005 shell输入与输出1. echo输出时加上 -n 参数不换行, ex. echo -n "aaaa" ) Y0 R: a5 y# `! @
2. tee 命令可以同时输出到屏幕和文件中 ex. ls | tee file.out % B# H& [4 F& p' V4 V, i9 z1 K
3. 标准输入 0 标准输出 1 标准错误 2 & x4 C0 R% k- [: q, R
4. 将标准输出和标准错误输入到一个文件 ex. command >file.out 2>&1
5 L0 m: B0 y9 x3 k& I, o/ _+ \& XNo.006 命令执行顺序1. 命令1 && 命令2 命令1执行成功后才会执行命令2
( C& y( _- e: L$ _ P/ e4 Y2. 命令1 || 命令2 命令1执行失败后才会执行命令2
5 h5 |; B7 {1 S; iNo.007 正则表达式1. 正则表达式元字符及含义 / L9 p! e' g# @! @9 X& {
^ 只匹配行首
1 w. _: f; d. B! U, L4 ~ $ 只匹配行尾
( b! U- I) d: P6 r; ^( g5 A) t1 B * 匹配0次或多次
, h" f y* F/ h: P0 q [] 匹配[]内字符
6 M/ x* R) @$ x. d+ i \ 转义符
* g8 [* @" p0 P( Q . 匹配任意一个字符
0 }4 i) n+ R# Q+ v5 y l3 ^2 E3 k pattern\{n\} 匹配pattern出现的次数,n次 & h4 w2 s2 z9 e5 z
pattern\{n, \} 同上,最少n次
: b. \: b4 C4 F6 _/ ?2 l( r pattern\{n, m\} 同上,次数在n与m之间 4 ^ }+ @$ j7 I
No.008 grep1. grep 主要选项及其含义
6 e- o$ d5 `* f* _9 e -c 只输出匹配行的行数
! a4 `* _' d+ F- z/ S -i 不区分大小写
; Y4 v1 m9 c' f; d7 E- w5 z/ C -h 查询多文件时不显示文件名
6 H# c. e6 O# g -l 查询多文件时只输出包含匹配字符的文件名 ! K' T# a/ }! @ l
-n 显示匹配行及行号 ) ^( u5 g5 T! j
-s 不显示不存在或无匹配文本的错误信息 + @- w( n8 v. y7 @! H& H
-v 显示不包含匹配文本的所有行
F9 ~' K% ~ Y X2 I3 C2. 查询空行 grep '^$' filename % b7 N$ p0 N+ D# k
3. 类名及等价的正则表达式
! B6 w" `5 r+ f4 e* b [[:upper:]] = [A-Z]
; z' t* t' Z8 d; O. ] [[:lower:]] = [a-z] , n0 y) m" q# z! A1 n# T/ y
[[:digit:]] = [0-9]
) `+ E# P1 N, F/ t% W* t [[:alnum:]] = [0-9a-zA-Z]
# d; l4 p. }0 I' c [[:space:]] = 空格或tab键
8 |) D% m9 D4 V0 M [[:alpha:]] = [a-zA-Z] 4 q* p/ {3 I, E; X
No.009 AWK# awk的主要作用在于将文本分成各个区域,便于分别进行处理 2 ?/ n3 ^6 l, I+ K ^! [$ M
1. awk -F指定分隔符,-f指定awk脚本
" |# k1 p6 O# Z; R ex. awk -F: 'commands' input-file(s)
# l$ a) ~: }$ w8 ^/ f6 q) R' k ex. awk -f awk-script input-file(s)
# k/ K' q/ ~4 }) M% q$ r9 g8 c2. awk 分隔出的域用$1,$2...$n来表示,其中$0表示所有域 7 o0 }8 `& a3 M0 k' s# P
3. awk 条件操作符 <, <=, >=, ==, !=
4 k9 g" C$ O- a. z; f/ f \4 z3 n ~ 匹配正则表达式 !~ 不匹配正则表达式
4 q/ P- O4 p3 u, f5 G- T' X; B0 X4. awk 内置变量
4 f) E6 `2 Y" @* ?; B- Q ARGC 命令行参数个数
- P) `: b9 w$ _ ARGV 命令行参数排列
( L+ i; @: |2 e/ O0 s5 y ENVIRON 支持队列中系统环境变量的使用
& \. G: t% y4 {0 ^/ h FILENAME awk浏览的文件名
$ L& u6 Z) G) j: h FNR 浏览文件的记录数 8 n& H$ N3 U9 Q0 v" R
FS 设置输入域分隔符,等价于命令行-F选项 6 U& U1 |# b, O* A
NF 记录的域个数 s! ], A- m6 L/ n- s- F6 y
NR 已读的记录数 3 y+ k# L. P3 q! c& v
OFS 输出域分隔符 r( t3 z+ Z. y6 l# L
ORS 输出记录分隔符 - x; G7 M+ g5 O( Q' I N% h
RS 控制记录分隔符 ) A8 `& O' f- e; s$ _9 I2 X' k1 B
ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file $ u4 r9 }8 l* P* y
5. awk 字符串函数 {2 |( T! U2 q) F) u; X9 P5 b5 y
gsub, index, length, match, split, sprint, sub, substr, substr
! [* k& j0 h k- T) S5 R/ M6. awk 中的printf函数可以控制格式化输出
2 B. `' A; R% z$ P3 a. i7. awk 的循环结构 For (element in array) print array[element]
1 q8 G3 H$ M6 t9 UNo.010 sed# sed的主要作用在于过滤和查找文本中的特定内容
6 f+ ^' j- [+ u( [. m8 s5 y1. sed 命令格式: sed [options] sed-command input-file # c4 M6 e& j# n' W8 e. E8 @
sed [options] -f sed-script input-file
7 B# k) h+ ?- J% x5 [: e( kNo.011 合并和分隔文件1. sort, uniq, join, cut, paste, split 4 z3 G/ c& {$ T
No.012 tr的用法1. 去除oops.txt中的重复字符 tr -s "[a-z]" < oops.txt % U) E' Q8 [4 ~5 z0 [) T5 |
2. 去除oops.txt中的空行 tr -s "[\n]" < oops.txt
8 p9 ]: f+ P4 B; O( c2 d7 W J! g( |6 I+ @3. oops.txt中小写转大写 tr -s "[a-z]" "[A-Z]" < oops.txt : I# R1 d5 K j$ f8 _+ S& B
No.013 登录环境1. /etc/passwd 保存所有账号的基本信息(不包括密码)
7 ?, G; v' U9 p: m' o- R. F% N2. /etc/profile 基本的配置信息,登录时读取此文件
* R3 f1 l u3 K! N9 k2 \3. $HOME/*profile 各个用户的profile文件,会覆盖系统的profile文件
+ ?! @0 V% k6 w6 F4. $HOME/*logout logout(键入命令exit时)是执行的脚本 1 W; ?( z' `- f: \% ?/ U+ {
No.014 环境和shell变量1. shell变量的设置方式
3 A& T. a, }: P" n Variable-name=value 设置实际值到variable-name
- h' D* U6 Y- {& j0 z3 B Variable-name+value 如果设置了variable-name,则重设其值
" F: b% z2 \$ u Variable-name:?value 如果未设置variable-name,显示未定义用户错误信息
% H0 W/ m; \5 F4 l Variable-name?value 如果未设置variable-name,显示系统错误信息
% F+ Y. r: A ^2 [+ Z" ]0 J. Z% B" H Variable-name:=value 如果未设置variable-name,设置其值 - l, H t- i5 j6 d7 H( s* {% f
Variable-name:-value 如果未设置variable-name,就用value,但是不设置variable-name 2 Q. e% D% u% Q1 i0 B" U* y+ ^
2. 设置只读变量 readonly variable-name
0 [4 n2 N6 h" d, D3. export variable-name 可以将变量导入到子shell中
$ V5 [2 |7 g: n' _. T. m4. shell脚本的参数 $0表示脚本名字,$1表示第一个参数......$9表示第九个参数
% f3 E' n2 B4 H/ b' Z) M5. 特定shell变量
$ b X4 `! Q* T. ]# R' f $# 参数个数
& D; w/ {( x( g7 b4 [' h+ j $* 用一个字符串显示所有参数
2 q, e7 P4 V7 s+ q( N1 j' u $$ 脚本运行的当前进程ID % x; z: T4 z, l; T5 U
$! 后台运行的最后一个进程的进程ID 9 \8 a) r1 H& e" _
$@ 与$*相同,每个参数作为独立的字符串 + O! T) D1 r( I; a* M6 }+ { I
$- 显示shell的当前选项,与set命令相同 4 f9 v& k; Z( o% z" m- |
$? 显示shell命令的退出状态,0表示无错误,其他表示有错 9 g# p6 s% A6 E+ g& M7 D) b. k
No.015 引号1. 双引号("") 其中引用的变量会替换为变量值。比如:
* k: R8 l/ y: _" X' p: j [wangyb@localhost bash]$ STR="Hello world" 8 t) }6 |0 h: y! E
[wangyb@localhost bash]$ echo "$STR"
& O' f) W$ A* _ Hello world
* C( H x5 T" C9 ^3 C2. 单引号('') 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。比如:
, M0 t' n$ b% i5 n [wangyb@localhost bash]$ STR="Hello world"
( E0 L% V: e, j3 Q8 h/ p2 w. l [wangyb@localhost bash]$ echo '$STR'
3 M* x }9 B" w7 i $STR 2 j" p% ^8 l- }+ }2 t
3. 单引号和双引号同时使用时,谁在外面谁起作用。比如
: J/ G" q2 |# p [wangyb@localhost bash]$ echo "'$STR'" 7 Z% I0 L8 Z% o# i4 H
'Hello world'
Y2 n- K/ M: T [wangyb@localhost bash]$ echo '"$STR"'
8 l! ? ]% m4 j* t" y "$STR"
* i% H9 ]; |4 P* _* t4. 反引号(``) 反引号中的内容被当做命令来执行。比如 ) r1 M) A1 y0 [1 \( k$ C
[wangyb@localhost bash]$ VAR=`date` ! n; L4 _1 f5 B# Y. y$ P# [+ k
[wangyb@localhos bash]$ echo $VAR
d# H& x q* D" n3 J8 N4 K Thu Dec 22 22:08:07 JST 2011 $ Q, j) C1 Y6 m5 e: z
5. 转义符(\)
8 w: Z8 U, @( W: U; u) t; dNo.016 Shell脚本介绍1. 脚本的第一行一般以 #!/bin/bash 开始 7 w5 ~9 m$ q6 i
2. 给脚本加入执行权限后就可以运行脚本了
: S$ q1 l/ y/ Q1 H' K2 [) c#No.017 条件测试1. 测试语法 test condition 或者 [ condition ] 使用方括号是注意在condition两边加上空格 . [; R$ q U7 k3 e% l* G- S5 n
2. 文件状态测试 : m; N, P" o; S& u- g: q' v) @* S
-d 目录 -s 文件长度大于0
" p7 n w, z3 Y& ^1 ?" x) A& Z% [% C3 l -f 正规文件 -w 可写
6 a f0 x, N5 K+ _# r -L 符号连接 -u 文件有suid位设置
2 }2 a% Y1 t3 l -r 可读 -x 可执行 6 O9 c' D: z2 B2 O4 |' U* Q U+ F
例子如下:测试是否为目录,也可以用 test -d bash.sh 来代替方括号
7 Z2 N' T3 Y& t7 w7 i9 L* z [root@localhost bash]# [ -d bash.sh ]
6 l$ y! l6 }( l$ L* |. u [root@localhost bash]# echo $?
7 h/ K+ w% R6 ] 1
, \" o, l% P+ j7 I) x/ _ [root@localhost bash]# [ -d . ]
3 G* J$ U' G% C0 | L! Y [root@localhost bash]# echo $?
' U4 X- h0 j- v; i. h3 ~* Z 0
4 Z! E5 [* d) k! I& l" m) ~3. 逻辑与 -a 逻辑或 -o 逻辑否 ! 例子如下: 0 v: u* e' c9 ~
[root@localhost bash]# [ -d bash.sh -a -d . ]
4 J* V) y3 d4 [ [root@localhost bash]# echo $? 1 a N) i+ D1 ~. B% y
1
) s9 h- a" J6 e' K% W [root@localhost bash]# [ -d bash.sh -o -d . ] 1 i) S, d" x- y$ \
[root@localhost bash]# echo $? 4 [ D* C! ]- t/ J7 q& C
0
% _' x. f r/ Z8 x* `: J [root@localhost bash]# [ ! -d bash.sh -a -d . ] , c/ @$ l" x5 J; F8 [" Y( {4 O$ m
[root@localhost bash]# echo $? 1 Z( y& T5 {, t' i
0
9 J2 v3 p. M c4 O s* H; x4 p [root@localhost bash]# [ ! -d bash.sh -a ! -d . ]
( P( s l7 \& {( D* x8 x$ m; s8 a0 T [root@localhost bash]# echo $? . S) M0 R0 k& G+ k- o
1
0 D2 R( p' c/ m/ Y% Q0 k4. 字符串测试 [ string1 string_operator string2 ] 或者 [ string_operator string ]
, A7 }% J5 g- y9 w! E% n+ c3 U4 o string_operator可为:= 两个字符串相等
: f x8 C8 j0 U4 N != 两个字符串不等 ; }" P6 ]; q# Z0 o+ m
-z 空串 ! x) f0 C8 F. y+ N
-n 非空串
7 U' |. v i* Q( M7 e5. 数值测试 [ "number1" num_operator "number2" ] ) ?- t, p6 g$ ~ y
num_operator可为: -eq 数值相等 3 d l& F! m& E: U
-ne 数值不等 $ H) a. }; n4 q1 ~3 @
-gt number1 > number2
* j5 J* J9 R0 H3 k -lt number1 < number2 9 z9 }9 N; o e5 D
-le number1 <= number2 $ l# s: U$ z. a3 T- \) a0 B
-ge number1 >= number2
- H3 Z" w1 g$ y9 O5 v. ` 例子: [root@localhost bash]# [ "100" -gt "101" ]
0 F2 _* i6 z6 R( o/ Z0 _. [ [root@localhost bash]# echo $?
) h5 y$ }# d7 k2 F& c' H 1
- o& D0 c" O$ f( q" X, Q8 e: I* A' j [root@localhost bash]# [ "100" -lt "101" ]
; F0 ?: g3 q N7 b1 f9 w! T [root@localhost bash]# echo $?
5 }/ N V3 G8 F- B ~ 0 7 X' j; u; h) R$ F0 `7 P* m
6. expr语法 expr arg1 operator arg2
: A6 i$ K- b; q W' ]3 Z 例子:变量自增 ) z' ^# A2 U2 U
[root@localhost bash]# COUNT=1 5 g' C; `' |) D5 t9 L
[root@localhost bash]# echo $COUNT
6 F' f' {: e' d7 V' Q# B) \6 P8 \ 1
0 o2 ]- A" C: r( l( n [root@localhost bash]# COUNT=`expr $COUNT + 1` . X3 I( ^4 l( v7 S( @- Q
[root@localhost bash]# echo $COUNT
' }4 G, W" W& G8 r0 |6 C/ o 2 2 G' x! h- t v' ?6 z# s! t, j3 E
No.018 控制流结构1. if语句格式 8 ?% a; _3 u5 W C
if 条件1 + R$ h5 x& U0 H- Y& \) d; y+ {% U
then # g: n) A. t: ^" n+ j
执行命令1
, J$ j8 w) }& A" r) j elif 条件2
9 Y, y: s" D6 e( a' G then
. O! ]9 I3 d0 c' F9 N 执行命令2 ! p* M3 _% J$ V$ O4 p! j
else 7 W, [2 K& M! R9 s0 \# q0 W0 |" K
执行命令3
5 W% P* z+ q# |! R4 e8 ^! w fi 2 w8 U# z' R. G
2. case语句格式 ! B ^0 K& r" I E% k% g% P1 g
case 值 in ' n& u w( i9 d3 `
模式1) 4 k4 e2 \6 {8 v: f$ i
命令1
2 i" N- D3 J0 k4 ]2 U5 \ D! G, B7 ~ ;; ; P5 p, P$ S- e# T! e
模式2)
( B) H6 _) z0 X% R. g) v 命令2 1 W: m3 p' G1 Z1 u' E3 |' k$ U, F: B
;; r" H: ?) R0 a) d* o7 F' b: R8 t: D( S
...... : W6 Q' {' L3 Z8 e6 l' k& P
easc ! T$ M5 E5 L8 j: |. y6 A4 `
其中的“模式”可以是 *(任意字符), ?(任意单字符), [..](范围内任意字符) - U/ {6 A0 U+ s: B0 H" g4 K5 ^
“模式”中还可以是使用 | (比如 str1|str2 表示str1和str2都可以) / N* n* ~- k! H) m/ `; R6 M
3. for语句格式 $ N/ h% R( P# J$ h$ x
for 变量名 in 列表
0 W$ T5 H5 s# d! R5 k( x do : E( f# y/ S- y5 ^
命令1
5 E. p1 r* i Z0 S$ c, V# g* P 命令2 ......
7 Q& d9 k' K8 G- ^& y done
+ h0 D/ w! V( ^5 j2 l3 A& l7 T4. until语句格式 3 B2 Q0 I2 @! \# q2 ?- f
until 条件 # q/ G4 @& h3 t. K/ s$ s; W
命令1 : j4 F4 O$ K0 Y0 V) _
......
1 K& ]; W, |% i8 T/ v done ! c1 {: p* a V. \9 u
一直执行至条件为真时才结束,至少执行一次
8 w5 `: i9 Y+ R5. while语句格式 ; o$ c- B5 T# E- `; q/ V1 O
while 条件
6 G8 b$ {7 b U: a3 z 命令1 & X9 y, X, [7 S3 b8 r. c9 n0 ]
...... " a' ^& Q- ]" }
done , Q6 z" M" r: s: W
6. 利用IFS来改变读取内容的分隔符 : p* |' P- |- H+ Z$ ?0 Z
7. 利用break和continue控制循环的执行
4 L3 K, n, N6 p+ hNo.019 Shell函数1. shell函数格式
3 ~9 d6 L' }3 e0 y2 ^! I/ K3 K e 函数名 () ' Q' Z9 _# a4 x$ z
{ 4 J% X8 ?2 n0 w% |2 P& I
命令1
: I& i; x2 Z! S3 C1 i# d8 v ......
1 R+ r0 y9 ?% K* X }
. z- l. ]$ U, f$ |. S3 ?或者
" @9 K6 f6 L" w' g function 函数名 ()
8 ?0 D7 n+ l- a" Y { . O) |! z" u) C& _" }' T
命令1
Y+ u' N3 d1 M6 ]% k ...... " [, o4 P6 i' w5 |- r" u
}
1 j5 [+ S& A0 U2. 引用其他脚本中函数 . /pathname/funcfile (<点><空格><斜线><文件完整路径名>或者<点><空格><文件相对路径名>)
! Z! s9 t# W2 v4 a! u* u! E8 R3. 函数中通过 $1, $2,......$9来获取参数
X; p2 l) W# y* s* G2 `, ]No.020 向脚本传递参数1. 使用shift依次获取各个参数,比如
* Q8 Z- c, C1 o# y while [ $# -ne 0 ]
- a' z# j, Y: }2 {" o; n2 k do
+ i) U6 C& q- \! i* z5 ^4 h echo $1 # 通过shift,$1将依次表示各个参数
6 f* {% o3 y# y- }7 X' t" |% d9 y shift - B) r# H& h1 T& C! D
done
+ @( K% T# p1 i8 z# N0 v$ A2. getopts语法格式 getopts operation-string variable。 ; o+ q: [" L! X
No.021 屏幕输出1. tput 控制屏幕上的字符输出,比如加粗字符,隐藏光标等等 , e; L- u5 |, \0 S9 ]
2. 改变字符颜色的方法,比如
. c, j% C9 Y) J5 F9 N8 E* h. x; X" g* k echo "<CTRL-V><ESCAPE>[40;32m" 设置背景黑色(40), 字符绿色(32)
) f' T2 \0 k' e0 b/ bNo.022 屏幕输入1. 输入时进行validation check
- F; \6 k% O8 n “送进的是垃圾,出来的肯定是垃圾”
( x1 X5 ]& k @% x# yNo.023 调试脚本1. shell不会对错误进行精确定位,当shell打印错误后,需要观察报错的整个代码段 ) ~" a$ y; A0 v* t! f
2. 在脚本中利用set命令辅助调试
9 `: o& d6 F, U& t X' @# y set -n 读命令但不执行
8 h: r- P) H }. k9 j1 W! }8 x set -v 显示读取的所有行
+ K8 M2 e' b# l# { set -x 显示所有命令及参数 - `# Z9 K t3 R% u3 ?+ k7 ?- Y; V4 r" p
- 表示打开; + 表示关闭;set +x 表示关闭显示所有命令及参数 ) Z% i0 i; _# s* W2 m
No.024 shell 嵌入命令1. set 命令在脚本中设置脚本的运行参数 $ b' H2 J# p" k: z _0 J2 N
2. times命令打印shell消耗时间和运行命令消耗时间 ??? . }% ~# O \1 M/ y7 k8 |
3. type 命令查询命令是否有效及命令类型
7 n+ B9 ~# p7 G9 {: E4. ulimit 命令设置运行在shell上的显示限制
4 i( g4 @( q7 z5. wait 命令是父进程等待子进程完成 . K& {8 k) W6 `) v
No.025 深入讨论<<1. 创建文本 ex. cat >> file <<end
3 H g+ t" q+ w: x* N! E > (输入内容)
8 |* Z" F- _3 q$ A4 d3 \7 r > end 8 k0 D5 ?# B. w ~ m
(输入内容)将被追加到file中
8 o8 w. w- l* J/ s% R5 e G! VNo.026 shell工具1. 用日期做文件名,ex. $ Myfile=`date +%Y%m%d%H%M%S` ! T7 o9 U7 q- M+ j1 ~9 Y8 y" W& G
$ touch $Myfile + R! i9 c& d9 I3 @) D, k2 w
2. 脚本中的临时文件名中加入进程号,可以保证文件名唯一,并在脚本结束时删掉文件
; g. t% o) p% P! i! T+ D ex. TmpFile1=/tmp/tempfile1.$$
. n# N3 C9 L0 [* x8 Z) M TmpFile2=/tmp/tempfile2.$$ 0 j% F) g: q# {# N
rm /tmp/*.$$ % @1 |+ x* E. N2 g7 J1 g
3. 常用信号 ( ` `, F. v$ Q0 {2 @& h
信号 信号名 含义
- L, y/ s% U9 O) T l9 [ 1 SIGHUP 挂起或父进程被杀死
6 J2 X# G/ X2 x1 L 2 SIGINT 来自键盘的中断信号,通常是<CTRL-C> ( }6 D% f0 s+ s3 o5 e
3 SIGQUIT 从键盘退出
& k6 S. ~2 _9 e1 D 9 SIGKILL 无条件终止 5 z* I! Q3 b$ y
11 SIGSEGV 段(内存)冲突
, \. V% m$ M* Y$ N( Z: s/ s8 X7 T; K 15 SIGTERM 软件终止(缺省杀进程信号)
* r- a" ^1 W) a# W$ K7 h4. trap 捕获信号 语法 trap "do-something" signal(s)
, s! C' o/ O& j2 t4 J ex. trap "" 2 3 忽略信号2和信号3,用户不能终止该脚本
9 ?7 l. D/ S5 A& T1 E trap "commands" 2 3 如果捕捉到信号2和信号3,就执行相应的commands % b: N" p F% L, t( x$ R9 F
trap 2 3 复位信号2和3,用户可以终止该脚本
% V: m' f8 K' y) L# ]7 B2 k+ N5. eval 对变量进行2次扫描 比如:
# N0 H# N7 K$ s4 m' b3 a7 X [wangyb@localhost bash]$ VAR1="cat a.sh"
8 {& }& ?' M1 S1 H8 [; D [wangyb@localhost bash]$ echo $VAR1
Y/ \) n+ K6 w% j cat a.sh 2 f; I( M8 {; h+ x+ {% r
[wangyb@localhost bash]$ eval echo $VAR1
/ M& Y$ m* |/ n2 ^- ^. i' b cat a.sh
# |5 ?( E, T. d' g) S [wangyb@localhost bash]$ eval $VAR1 % @- g7 Y" i9 y9 H' C( l
#!/bin/bash , R+ [. s) u5 v
TMP='HELLO'
" E/ E. K- X3 p4 P! J) \ sleep 2
: d5 I+ L- S2 U" L/ ^8 } times
0 Y0 \' I6 v) D' L1 q# o4 n ^6. 获取命令行的最后一个参数: ex. $(eval echo \$$#)
& n0 G* \- U1 X% D7. logger 命令记录日志
) P H7 V W* t7 a: h3 [2 KNo.027 几个脚本例子# 作者常用的几个脚本 No.028 运行级别脚本1. 确定当前的运行级别:who -r
, u+ `% S! R0 Y/ C/ j' e; n2. 运行级别含义
& C7 V, T$ g- b& ` 运行级别0 启动和停止整个系统
/ B) \8 X1 u( X2 S4 c' W1 l 运行级别1 单用户或管理模式 9 j& g, G O1 b* n( L% f
运行级别2 多用户模式;部分网络服务被启动。 0 H) E+ k2 E1 E2 x% J8 O
运行级别3 正常操作运行模式,启动所有的网络服务
' z# u1 E1 T s 运行级别4 用户定义的模式,可以使用该级别来定制所需要运行的服务
6 p+ _* Y. |$ g2 G9 q4 q 运行级别5 有些Unix操作系统变体叫起作为缺省X-windows模式 ( B8 I9 t$ ~. G6 P3 I, A0 S6 Z
运行级别6 重启动 - n. B5 h" l6 @8 x2 b- g" a0 x/ p
No.029 cgi脚本# 感觉现在应该不会有人用bash来开发web程序了吧 No.030 常用shell命令1. basename : basename path $ _* V( _( V, E! g8 R
2. cat : cat optiones file
, W2 q$ P1 I) \5 u -v 显示控制字符 / O& v; v j, r$ p9 I8 A! ~' k% P$ `
3. compress : compress options files # _9 w% y$ P! R0 p
-v 显示压缩结果
! F7 P. F- w3 m4. cp : cp options file1 file2
2 R, H- g; R) Z, l4 x2 T' K -i 覆盖文件之前提示用户确认
4 [6 o3 K" K4 ^0 G& ~: ?7 O* ? -p 保留权限模式和更改时间
: p* R% ?/ M* |1 {6 H* S -r 拷贝相应的目录及其子目录 - a& m l( _" B& c
5. diff : diff options file1 file2
8 C3 b0 q1 I% t+ F2 P0 G' x) C* i -c 按照标准个数输出
! Z- @/ z4 r* u% |) B -I 忽略大小写 2 l! R7 _* C" ~! B+ f9 S! P
6. dircmp : dircmp options directory1 directory2 ' [5 S4 d6 M, V* G% N
-s 不显示相同的文件 r& G# ]1 w8 D- {
7. dirname : dirname pathname 6 i: s! K6 s4 d2 Q0 v0 Q1 c
8. du : du options directory 8 P1 q0 r: T$ w( Y& k. e
-a 显示每个文件的大小,不仅是整个目录所占用的空间 2 R) V) ]2 c! i
-s 只显示总计
6 S4 r$ {" [6 ^- E T$ z* o9. file : file filename + j& q4 Z9 k) U) Q" E2 D+ y- P6 h
10. fuser : fuser options file
4 i: ?( o; r( f7 N' | -k 杀死所有访问该文件或文件系统的进程
% [+ s/ O, t3 G5 b% M' q$ _" I" Z -u 显示访问该文件或文件系统的进程 $ V9 p0 B5 B- y/ r% S8 s
11. head : head -number files
0 }. X' }: Q# I, Q7 K' r7 V12. logname : logname (显示当前使用的登陆用户名)
0 P! y. Q) K# z0 d13. mkdir : mkdir options directory
( g; ^3 [& [: M9 w -m 在创建目录时按照该选项的值设置访问权限 ( A8 w5 j7 q& w$ v
14. more : more options files ' H+ ^- I- e% e3 k) E
-c 不滚屏,而是通过覆盖来换页 8 g# t X. n) b6 B
-d 在分页处显示提示
8 k. @7 d0 N. m0 u' o" l# X -n 每屏显示n行 ' V" T, p5 p* O4 p% s
15. nl : nl options file
0 `1 J1 k4 D% Z6 M7 ?6 _! M6 _ -I 行号每次增加n;缺省为1
0 j: }, \7 @% |) t( w7 v4 h4 F -p 在新的一页不重新计数
, x% ?3 s9 I7 j! m! K% j9 w- C16. printf : printf format arguments
# O9 I; |$ p5 F17. pwd : pwd
3 n. n& o V* `7 s6 c, u18. rm : rm options files
' Y6 G) X/ H7 x, e0 k -i 在删除文件之前给出提示(安全模式) : V" w Q5 W" q4 R+ E' ?
-r 删除目录
" B" X, K B. L5 a19. rmdir : rmdir options directory 1 d$ u0 A& M. D6 Y% @* K
-p 如果相应的目录为空目录,则删除该目录 - s' r) @, Z t+ N1 _5 D
20. script : script option file $ m2 H* Q3 S) V: j+ \( }
-a 将输出附加在文件末尾 ! B4 q# f D3 j! u
21. shutdown : shutdown now 2 W6 Q: H0 U. f' G" H* A* }( a
22. sleep : sleep number(秒数)
! ~7 C) Z4 |* z( n! v7 t23. strings : strings filename (查看二进制文件中的文本) # K" D, N: H2 H, L
24. touch : touch options filename ( m/ R2 O9 E, {9 s% _: ]8 B
-t MMDDhhmm 创建一个具有相应月,日,时分时间戳的文件 ; s! L7 \4 z0 J
25. tty : tty 显示所连接的设备或终端
) L6 t; r2 w6 l: G8 P26. uname : uname options
0 E" P- O, l& @ -a 显示所有信息
9 n2 W, ]' t5 a4 M -s 系统名 6 R7 b& t5 h3 G* x
-v 只显示操作系统版本或其发布日期
5 d1 C& L3 R! L1 m6 z7 e27. uncompress : uncompress files F4 h2 ^( O) T) W# R6 s2 Z
28. wait : wait processID
/ J) T* D0 m( D/ W, G29. wc : wc options files 2 }8 Q( G4 r% P% x6 }
-c 显示字符数 ' ^3 `0 ~; {* r: p
-l 显示行数 9 K5 M7 b) ]. k
-w 显示单词数 % ~- w% Q# A% E5 x4 l# |
30. whereis : whereis command_name
) u( z9 E! ^4 C( P, v. J31. who : who options
9 I- Z( Q6 T7 y+ d9 u( g -a 显示所有的结果
4 x- ^, q1 E4 @- X; M -r 显示当前的运行级别 f! o& C. Z+ _$ `
-s 列出用户名及时间域 3 ?/ K) C1 c3 r" l
|