找回密码
 注册
关于网站域名变更的通知
查看: 275|回复: 1
打印 上一主题 下一主题

Linux shell笔记

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-8-28 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    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和xargs
    1. 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 grep
    1. 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
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2020-8-28 18:01 | 只看该作者
    Linux shell笔记
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 23:49 , Processed in 0.203125 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表