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

Linux shell笔记

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    由于工作的需要,越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅。

    , Z) g) h5 q7 {No.001 文件安全与权限
    1. umask 决定了新建文件的权限 8 m3 t; [" ~- H% g
    2. 软链接(符号链接) ln -s source_path target_path

    4 ?+ |! h* z$ v+ f( N" ]. |4 ^No.002 find和xargs
    1. find pathname -options [-print -exec -ok] # y8 m# z/ n- d+ i
       其中exec参数的命令格式: 'command-' {} \; 注意必须包含【{} \;】 ' q, I& w6 E- G) F" \
       -perm 按权限来查找  ex. find . -perm 755 -print + X) @8 F$ z+ G( M0 m1 H- S
       -mtime 按修改时间来查找 ex. find / -mtime -5 -print 更改时间5天以内 4 Y( I1 i5 G5 }
                                   find / -mtime +5 -print 更改时间5天以前
    5 C0 k; |0 k  @: X8 J" r2. xargs与-exec和-ok类似,但是限制更少,也更快
    - F- n' O  C6 r" C   3种参数的命令:find . -name "*.c" -exec wc -l {} \; 5 E  q$ M4 Y, y
                            find . -name "*.c" -ok wc -l {} \;   每次执行命令前有提示
    ' e1 Y' g, h; o3 t                        find . -name "*.c" | xargs wc -l
    , G$ B! r. Z2 h3 y& g: _- x9 u: B6 n
    No.003 后台执行命令
    1. [crontab] [at] [&] [nohup]四种
    $ x, G( F2 z" U4 O2 E7 C0 W
    No.004 文件名置换
    1. 列出隐藏文件 ex. ls .*
    . e4 |* o! e8 V) T: E
    No.005 shell输入与输出
    1. echo输出时加上 -n 参数不换行, ex. echo -n "aaaa" 9 q" x" f. x/ q" i; ?2 g
    2. tee 命令可以同时输出到屏幕和文件中 ex. ls | tee file.out 4 ^/ z7 s; p. G5 C' l
    3. 标准输入 0  标准输出 1  标准错误 2 3 y9 s, A# b: `  ?! }7 h+ z- ~
    4. 将标准输出和标准错误输入到一个文件  ex. command >file.out 2>&1

    , m9 h9 X$ L, j% J% A; {5 A% YNo.006 命令执行顺序
    1. 命令1 && 命令2    命令1执行成功后才会执行命令2
    0 Z+ U  R$ R& m- r2. 命令1 || 命令2    命令1执行失败后才会执行命令2
    5 |2 |* p* ?% g# I3 U# M
    No.007 正则表达式
    1. 正则表达式元字符及含义 ' G6 M5 R  b) M. a' Y( V$ M
        ^                     只匹配行首 6 Z, N3 ^6 l7 F; \; M& t3 D: q
        $                     只匹配行尾 2 C8 k( L, M) O  B
        *                     匹配0次或多次 2 b8 T0 z& }+ j
        []                    匹配[]内字符
    2 S; h; a* z$ H- l3 b2 d: Q3 }3 O+ w    \                     转义符 ' K, F* L0 y' @# @
        .                     匹配任意一个字符
    5 l+ j; L0 q. C& `5 d$ }0 J1 m  f( N    pattern\{n\}          匹配pattern出现的次数,n次 $ ]+ }6 l' j9 x
        pattern\{n, \}        同上,最少n次 . e2 P6 ^) W; p1 p
        pattern\{n, m\}       同上,次数在n与m之间

    9 X' l8 f: w) C) @+ N! j( pNo.008 grep
    1. grep 主要选项及其含义
    0 v: S: n" q' r0 n0 _   -c    只输出匹配行的行数 + P9 Z) q4 f5 a3 X9 {7 ~2 F
       -i    不区分大小写 6 D8 f7 _' `0 ]' S, L% k3 r
       -h    查询多文件时不显示文件名 $ Z9 y3 X! ^7 V" I( v# d
       -l    查询多文件时只输出包含匹配字符的文件名
    5 m: w, T3 ?& h/ G& U" T   -n    显示匹配行及行号
    $ X  X' Y* J  Q, {+ M5 s! L   -s    不显示不存在或无匹配文本的错误信息 ; W, }' a9 s9 e& V" B" R
       -v    显示不包含匹配文本的所有行
    3 V. Z6 }9 ~% L" |3 q  [2. 查询空行 grep '^$' filename 7 Y& p4 @& o% A) Z( v, V- j
    3. 类名及等价的正则表达式
    : A$ M# O3 s% X) v   [[:upper:]]    =    [A-Z] % d2 t! u/ G6 g" C
       [[:lower:]]    =    [a-z]
    * n! y7 w( s2 w- [7 E) ~   [[:digit:]]    =    [0-9]
    ! K5 j$ I- V4 ]8 ^8 I   [[:alnum:]]    =    [0-9a-zA-Z] 5 ^+ J/ E( X) S9 m! v! N  ^; W+ I
       [[:space:]]    =    空格或tab键 & I) z6 h% Q4 }& _5 R2 m3 H; b
       [[:alpha:]]    =    [a-zA-Z]

    0 C8 m/ @$ p* u! W& K! b9 o# WNo.009 AWK
    # awk的主要作用在于将文本分成各个区域,便于分别进行处理
    5 _6 t+ A5 J) [8 C3 T9 o( k6 g1. awk -F指定分隔符,-f指定awk脚本 " }9 J3 u7 k  p
       ex. awk -F: 'commands' input-file(s) : r/ ]# G& I- v1 N3 p/ g
       ex. awk -f awk-script input-file(s) " {/ D) f+ Y5 F  E! a4 a& a
    2. awk 分隔出的域用$1,$2...$n来表示,其中$0表示所有域 6 H6 M. Y8 e  `- s$ _: h
    3. awk 条件操作符 <, <=, >=, ==, != 7 c7 ^5 \  ]1 M& h6 P. @
       ~  匹配正则表达式   !~  不匹配正则表达式
      G4 T& T; A3 ?1 v9 y" C5 y) y7 _, ~4. awk 内置变量
    - R$ s3 P7 u" j   ARGC        命令行参数个数 . S* d1 t5 C9 l% D; {1 E% |
       ARGV        命令行参数排列 $ f& g9 ^& S/ N+ v
       ENVIRON     支持队列中系统环境变量的使用
    ) G7 M2 W& P9 Z+ P( {   FILENAME    awk浏览的文件名 / b# R% w8 t" Z
       FNR         浏览文件的记录数 ( r  r, G$ J" o. D
       FS          设置输入域分隔符,等价于命令行-F选项
    $ R4 X" H- Q( |& z3 P' y. Z   NF          记录的域个数 8 E! a" @- O* |4 M! P
       NR          已读的记录数
    9 ?0 M4 V8 W, ~; }   OFS         输出域分隔符
    5 U3 @( `& f% d" x: u   ORS         输出记录分隔符 ( h5 d- ~( e5 H, c4 z( t
       RS          控制记录分隔符
    ' h( R1 V2 D+ [% C   ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file
    : I; M+ Y9 k& C/ B; a5. awk 字符串函数 ' q: Y1 a; F/ _5 @  v
       gsub, index, length, match, split, sprint, sub, substr, substr
    + x5 O) `, E: T, R# s6. awk 中的printf函数可以控制格式化输出 / P3 k- o" X4 g$ b; G
    7. awk 的循环结构 For (element in array) print array[element]

    4 U, q+ h8 |0 Y5 J% L, uNo.010 sed
    # sed的主要作用在于过滤和查找文本中的特定内容 8 s2 B4 \4 o% Q( W6 J+ v
    1. sed 命令格式: sed [options] sed-command input-file ( A6 j# N: c/ R
                      sed [options] -f sed-script input-file

    7 X5 A  y4 K( m0 i: F9 w- |No.011 合并和分隔文件
    1. sort, uniq, join, cut, paste, split

    ( m4 I$ y1 C9 Q8 u/ Q8 [6 rNo.012 tr的用法
    1. 去除oops.txt中的重复字符 tr -s "[a-z]" < oops.txt
    ) C0 ]0 z4 I) P1 G) }2. 去除oops.txt中的空行 tr -s "[\n]" < oops.txt
    : m: F' `4 P. f, y3. oops.txt中小写转大写 tr -s "[a-z]" "[A-Z]" < oops.txt

    % B8 H, p/ T7 C( yNo.013 登录环境
    1. /etc/passwd 保存所有账号的基本信息(不包括密码) & x& @: T; T# ^4 l7 b+ r5 ]
    2. /etc/profile 基本的配置信息,登录时读取此文件 / l( M9 A5 |( y. E( I6 }# b7 q6 v
    3. $HOME/*profile 各个用户的profile文件,会覆盖系统的profile文件
    + W8 V. y+ r7 Z5 U# F, l4. $HOME/*logout logout(键入命令exit时)是执行的脚本
    + {/ Z* }/ f& w! G3 I8 [, I
    No.014 环境和shell变量
    1. shell变量的设置方式 2 `( B: V5 u8 U& l2 P, e* C
       Variable-name=value    设置实际值到variable-name
    ! }9 n9 [: @5 O: n   Variable-name+value    如果设置了variable-name,则重设其值
      E) Z+ h4 _6 a# S. F   Variable-name:?value   如果未设置variable-name,显示未定义用户错误信息
    , y2 j' j' [. q# @3 q: J9 U   Variable-name?value    如果未设置variable-name,显示系统错误信息 : B0 J$ a: Q( g$ k5 q1 f3 Z
       Variable-name:=value   如果未设置variable-name,设置其值 ' y1 q" v) W& [2 O9 U4 n( H
       Variable-name:-value   如果未设置variable-name,就用value,但是不设置variable-name
    2 \, B: x3 n+ s2. 设置只读变量  readonly variable-name
    . ^: c4 ?$ x) P* |1 S! p3. export variable-name 可以将变量导入到子shell中 # m3 m/ \8 N  }$ i9 B* r, Q+ \/ W
    4. shell脚本的参数 $0表示脚本名字,$1表示第一个参数......$9表示第九个参数 9 C1 q7 @  J$ R' x( _
    5. 特定shell变量
    # m! i, u3 T! \9 E1 P4 ~   $#    参数个数
    7 n- Y6 O# T. Q! g7 }+ H# s2 V   $*    用一个字符串显示所有参数
    ( [: X) k* N) \3 F( N6 r5 Q& W: j   $$    脚本运行的当前进程ID 3 g& d  K8 M6 ]; i$ d2 z+ B
       $!    后台运行的最后一个进程的进程ID . J7 B+ Z# j1 V, J0 n" U4 `
       $@    与$*相同,每个参数作为独立的字符串
    & _' k7 s# C7 h- m   $-    显示shell的当前选项,与set命令相同
    + ?2 u# f1 @: I6 H4 l   $?    显示shell命令的退出状态,0表示无错误,其他表示有错
    / l' K" Q6 d* g5 x
    No.015 引号
    1. 双引号("") 其中引用的变量会替换为变量值。比如:
    . k/ A: l$ m' U* V; E; `    [wangyb@localhost bash]$ STR="Hello world"
    / ]1 u2 I2 k6 d    [wangyb@localhost bash]$ echo "$STR"
    ) l$ p( U, T& S" h5 Q    Hello world
    ; W" s( C: x2 ~& K% z9 ^& W2. 单引号('') 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。比如:
    $ h; ?/ m  o0 A! `  A- `, T    [wangyb@localhost bash]$ STR="Hello world"
    9 @- i+ k8 Z, k7 e4 O) s    [wangyb@localhost bash]$ echo '$STR'      
      R. k/ V8 n; i$ A1 N5 v  \# Y9 D    $STR
    * }! u" I" |& S6 x3. 单引号和双引号同时使用时,谁在外面谁起作用。比如 8 @1 i1 U: h: w- r5 M
        [wangyb@localhost bash]$ echo "'$STR'"
      \5 U" X; Q4 l7 ^- c    'Hello world'
    . f9 y. o' C1 w+ ~8 p    [wangyb@localhost bash]$ echo '"$STR"' # z6 ]5 ?/ y( q( {7 Q7 g* M0 G
        "$STR"   B0 Z: G4 Y! \: _( h- o1 i# S: ~
    4. 反引号(``) 反引号中的内容被当做命令来执行。比如
    & D4 f6 A! B; q& A/ Z# I    [wangyb@localhost bash]$ VAR=`date`
    5 i, e' l; c* F$ q6 k/ l4 G( H    [wangyb@localhos bash]$ echo $VAR
    3 h: ]9 o5 g2 u1 M1 Q1 T    Thu Dec 22 22:08:07 JST 2011 ' Y$ d/ }$ Y) x8 ~- |6 _7 B$ I0 Z
    5. 转义符(\)

    7 [' M$ h8 V1 H, KNo.016 Shell脚本介绍
    1. 脚本的第一行一般以  #!/bin/bash  开始
    + x. C; z1 }. s) u) Z& J* D2. 给脚本加入执行权限后就可以运行脚本了
    5 J4 f; t% O- u7 @& _" Z
    #No.017 条件测试
    1. 测试语法  test condition 或者 [ condition ] 使用方括号是注意在condition两边加上空格 % v& r4 A7 V7 i+ Y* b; g: Q
    2. 文件状态测试
    ! H# |/ X3 Q% ?   -d    目录            -s    文件长度大于0
    5 ^: o) A( S) G# B* }   -f    正规文件        -w    可写 ( }$ |  m6 @  s7 P. ~
       -L    符号连接        -u    文件有suid位设置 6 K9 k- U( L  n  S! o
       -r    可读            -x    可执行 2 L& y! j0 }" I& s* l" k4 S3 C
       例子如下:测试是否为目录,也可以用 test -d bash.sh 来代替方括号
    ) e8 ]; G$ a* m    [root@localhost bash]# [ -d bash.sh ] % {# s' X& l+ A! C/ P6 K7 Z& ]6 Y
        [root@localhost bash]# echo $? . s6 }8 H1 q- N! R* v: V1 u6 O# U
        1
    ' ^6 I( |' C" I% `    [root@localhost bash]# [ -d . ]      1 i, o( [6 a6 R& C5 Z% V
        [root@localhost bash]# echo $?
    ! `% I- s/ l; {& S$ S. s    0
    ( y) P1 w0 z- [3. 逻辑与 -a  逻辑或 -o  逻辑否 ! 例子如下: ( I1 P" W) ?) ?" M, d
        [root@localhost bash]# [ -d bash.sh -a -d . ] / F- S) S1 q% u% M
        [root@localhost bash]# echo $? 3 L1 z" P5 Y/ G5 K- a& v) G
        1 % I& [9 l) X0 q8 j" z  p
        [root@localhost bash]# [ -d bash.sh -o -d . ]  
    + S! j2 \1 \7 N+ w$ r- O4 `    [root@localhost bash]# echo $?
    ) x! h5 W1 V2 k% l- l    0
    2 g. ~& c+ v: F4 _4 d- a" G. a    [root@localhost bash]# [ ! -d bash.sh -a -d . ]   
    # b5 i" Q8 u7 O7 Q5 X    [root@localhost bash]# echo $? 9 D  r5 A; T& u7 V+ _+ e3 V
        0 ( }0 M2 K' Z+ r) Z
        [root@localhost bash]# [ ! -d bash.sh -a ! -d . ] 2 K& o/ W" s$ I7 m( [
        [root@localhost bash]# echo $?
    0 S8 B% M& n- `/ f3 `( ~    1
    ; @* \& |) n/ i0 C) I4. 字符串测试  [ string1 string_operator string2 ] 或者 [ string_operator string ]
    # R5 r7 A9 ~0 E% q# x+ I   string_operator可为:=      两个字符串相等 - }+ Y$ Z5 g# z/ `8 M3 F8 E0 G- Z
                            !=     两个字符串不等
    , `0 s( {- r: F                        -z     空串 8 I  M6 q" p, s# h/ F4 I
                            -n     非空串
    9 |% Q5 |$ `) N5 m* s! @5. 数值测试  [ "number1" num_operator "number2" ]
    " F& h& s8 l/ s1 V" u3 y3 K3 s- [: U   num_operator可为:  -eq     数值相等
    . Z+ [9 n4 r  b  ?! @1 Q( x2 i) A                       -ne     数值不等 + h# A2 G) W2 X: k
                           -gt     number1 > number2
    ; T, W! ~# m* C4 r                       -lt     number1 < number2 , O8 v! u4 O. `  I. ]7 e# {/ m6 m
                           -le     number1 <= number2 7 }6 z+ \) C2 l& U5 {
                           -ge     number1 >= number2 / V+ @6 L' ~+ X' E2 {/ Q! v) `
       例子:   [root@localhost bash]# [ "100" -gt "101" ]
    + Z8 a! R( c1 V6 T4 M3 H6 {% V; }( R3 t            [root@localhost bash]# echo $?
    - A6 V& W  V4 e6 ~. Q& N$ Z: J; J( T            1 8 b/ K5 x/ x6 ]0 m6 \9 W( |; a1 q
                [root@localhost bash]# [ "100" -lt "101" ] ' G, `, B( S. N3 s% \6 o4 g
                [root@localhost bash]# echo $?            
      ~3 L! J( E4 o" u0 G+ D            0 8 n- k6 M/ x' Z. ~
    6. expr语法  expr arg1 operator arg2 & M8 M5 @, ~8 v1 }
       例子:变量自增 " X/ n3 ?. F& e& C8 W# A5 R: h
                [root@localhost bash]# COUNT=1        ' W0 ~. n0 j( h! U3 u4 \
                [root@localhost bash]# echo $COUNT      z! B# A8 {- J$ ^) N
                1
    + T6 ^7 h8 d5 O            [root@localhost bash]# COUNT=`expr $COUNT + 1`
    ) b- [8 _" p; q            [root@localhost bash]# echo $COUNT            
    % `" F8 w3 L) a1 B, a% y& e            2
    # R7 S, A6 ~2 G3 G4 I4 Y$ j0 T
    No.018 控制流结构
    1. if语句格式 : X$ X+ [0 h& M  j& j2 c4 y
       if 条件1 ' `" U- _+ C: G, k+ j: `
       then
    0 v  p& ^* S. a3 B8 E        执行命令1
    ; ?0 R+ V$ I1 o0 Q5 c( S   elif 条件2
    / B! H( c0 A: W" L2 G   then ) d, }7 G" c4 p7 b# V9 W
            执行命令2 % K( L# Q& {8 `& z! B5 }. b! e
       else
    5 C# b. i( l5 L! Q  r6 R        执行命令3 + {) R' g% O  {5 k5 `
       fi
      l1 ], V+ R0 ~# {. W3 z2. case语句格式
    7 l6 Q6 y! `6 S! W  w2 ^& `   case 值 in
    1 w: |- i- W& A; s! I$ t   模式1) 6 Y7 R' V9 ]& V/ R
           命令1
    4 z# z+ U& |+ H6 m4 T9 g( r( M       ;;
    ' k3 ?* F+ Y1 x- R$ F7 y# T   模式2)   p6 `: z8 S9 `1 D
           命令2
    4 r; y, R' V- Z! M. e       ;;
    , k+ t# [; J, {* p   ......
    7 P+ n4 k0 h2 j# T4 T7 M   easc
    3 n$ ^( n+ G% {# e$ Y7 ^其中的“模式”可以是 *(任意字符), ?(任意单字符), [..](范围内任意字符)
    . w) H8 E" I. N6 y“模式”中还可以是使用 | (比如 str1|str2 表示str1和str2都可以)
    4 S0 y5 ~- |$ ?3. for语句格式 : Q) u0 z  `2 a$ t* l6 b$ Z
       for 变量名 in 列表
    % P7 {) T7 G* ^# ~   do * P! T* X8 s, [2 D" X
           命令1
    ( {- i& _# r2 _- y% h- a: i       命令2 ...... / K( F/ ^. ^& ~+ Q' [
       done ! P2 h/ ~% {& r' `% @  e7 g
    4. until语句格式 + j% @! k# j( u6 g, h( @% b
       until 条件   B  B3 h$ C' p5 i8 |
             命令1   T- c- w# P  Z
             ...... " K4 t8 m# G' ^, s
       done
      x: \; K, n/ E. d# v9 d一直执行至条件为真时才结束,至少执行一次
    1 e9 ^& r' F6 X1 e6 Q: g$ r+ t5. while语句格式 0 y7 o. Q5 J  D6 m- m, V
       while 条件 - {$ m7 \/ {& q6 C. G* C3 U
             命令1
    3 L! L: q) Y9 s' Y$ R6 m8 c         ...... / G4 D+ ]" h0 Z' a
       done & y) O% D& z4 {6 ~' H9 J
    6. 利用IFS来改变读取内容的分隔符 - r1 y4 S# m2 x
    7. 利用break和continue控制循环的执行

    2 y6 L2 u; C6 d5 `! a# R# |No.019 Shell函数
    1. shell函数格式
    & _2 K$ b" X" z. k! r   函数名 ()
    ' G: A" o: [( L" [3 L   { : b5 L* R2 I4 I  b6 A. ?
           命令1
    & B' ?7 c2 U  Q2 W6 T4 j$ j       ......
    " B3 }3 S- B0 w& G: i. n   } ! o+ I3 r$ k4 Y* C2 `5 z. i- w
    或者 ; Q2 x8 x1 v: y0 i( O0 \
       function 函数名 () 1 `6 n7 M2 J+ I8 {- Q
       {
    5 M' t* O4 U- t, I; t       命令1
    2 g* s" V* u$ {8 ?/ a8 ?, X       ...... / y- L; H. K6 f3 n9 q
       } % O* x  M/ O  B
    2. 引用其他脚本中函数  . /pathname/funcfile (<点><空格><斜线><文件完整路径名>或者<点><空格><文件相对路径名>)
    9 T& S% ~1 e/ |' Y% b, O3 b# d; i3. 函数中通过 $1, $2,......$9来获取参数
    . ~6 J$ u& K9 J6 y
    No.020 向脚本传递参数
    1. 使用shift依次获取各个参数,比如
    . ]# G& U5 d- I8 j9 d/ A* k   while [ $# -ne 0 ] 7 h/ D/ u4 \" I- U* B9 o, H
       do
    & W: O3 y  D- o0 I2 R2 U         echo $1  # 通过shift,$1将依次表示各个参数 4 O8 [6 w/ v+ n! D% d% T$ M
             shift . N& ]  x- G3 ?! {' e
       done
    # p$ @' o) f) O2 I' e2. getopts语法格式 getopts operation-string variable。
    # E; F& h7 {' ?5 |
    No.021 屏幕输出
    1. tput 控制屏幕上的字符输出,比如加粗字符,隐藏光标等等 " k7 }+ A% e( R5 u/ E# j/ z
    2. 改变字符颜色的方法,比如 ! E, |2 N7 {- p$ l/ Y# u2 h
       echo "<CTRL-V><ESCAPE>[40;32m"   设置背景黑色(40), 字符绿色(32)

    * i# _; ?, C$ B. HNo.022 屏幕输入
    1. 输入时进行validation check 4 [  _4 }2 o, n! J. a
       “送进的是垃圾,出来的肯定是垃圾”
    ' p2 b7 I+ \0 s1 _7 Q* Z) a
    No.023 调试脚本
    1. shell不会对错误进行精确定位,当shell打印错误后,需要观察报错的整个代码段
    9 ]! O) z! d' |* _2. 在脚本中利用set命令辅助调试 ( z9 X7 L$ P/ X* ^" _; ]
       set -n    读命令但不执行 + l  P5 z: m5 z# w: U
       set -v    显示读取的所有行 . [. F, T) V6 E: }, k- e) q* i
       set -x    显示所有命令及参数 4 p: t4 I0 ]; T+ B' E( F" p
       - 表示打开; + 表示关闭;set +x 表示关闭显示所有命令及参数

    : |) E1 |0 F0 M8 c" b! D- D1 ]0 qNo.024 shell 嵌入命令
    1. set 命令在脚本中设置脚本的运行参数 ; V$ E8 x% g: ?# i
    2. times命令打印shell消耗时间和运行命令消耗时间 ??? 5 k2 O, e, D1 Y. N7 L/ m
    3. type 命令查询命令是否有效及命令类型
    # o/ y( I1 g* d4 y# K/ \9 C; Q8 T! L4. ulimit 命令设置运行在shell上的显示限制 4 L. ^" c; _2 j/ q* i! h+ `
    5. wait 命令是父进程等待子进程完成

    ; |/ x9 Y6 I0 f0 p/ O+ h* h' YNo.025 深入讨论<<
    1. 创建文本  ex. cat >> file <<end 7 l, Y  @" _( |& H+ D( ^
                     > (输入内容) 9 {0 y3 E5 a( k7 ?9 I; F& B
                     > end ! I8 G% Y- M2 l+ v9 o
       (输入内容)将被追加到file中

    / B( a' F9 T" j# A+ {0 h: y5 J0 O/ ]No.026 shell工具
    1. 用日期做文件名,ex.  $ Myfile=`date +%Y%m%d%H%M%S`   W- d5 h7 x8 Z/ R. r+ c& i  Y
                            $ touch $Myfile
    1 V& C5 @- m& s2. 脚本中的临时文件名中加入进程号,可以保证文件名唯一,并在脚本结束时删掉文件 / `2 n1 W9 ]! P6 i
       ex. TmpFile1=/tmp/tempfile1.$$ 8 x3 v# ?7 ~. X" c$ C% o( Y: o
           TmpFile2=/tmp/tempfile2.$$ 7 t0 E! X" i" d6 F( `0 }5 e
           rm /tmp/*.$$
    ' w  C$ l1 V, Z& N3. 常用信号
    & }& |1 S2 O7 f   信号    信号名        含义
    # T, D% F3 c% Z# `   1       SIGHUP        挂起或父进程被杀死 1 w$ a5 F. g' B8 A
       2       SIGINT        来自键盘的中断信号,通常是<CTRL-C> ! {  V% J3 p8 O* f0 G
       3       SIGQUIT       从键盘退出 ( l) z$ G& J! G. J9 i0 J% h- D
       9       SIGKILL       无条件终止   P6 x, b/ f, D* c3 J7 j5 W2 a
       11      SIGSEGV       段(内存)冲突
    ( l. _" E( z+ U" m/ |' P   15      SIGTERM       软件终止(缺省杀进程信号) - a: E2 V; K' _6 r! B
    4. trap 捕获信号 语法 trap "do-something" signal(s)
    ( h6 Y- r+ Z* }: f0 S   ex.  trap "" 2 3           忽略信号2和信号3,用户不能终止该脚本 & d( Y# s+ X! a/ Q- |" G7 p( ?* X
            trap "commands" 2 3   如果捕捉到信号2和信号3,就执行相应的commands
    3 V+ ^9 G0 ]( ]! @' l        trap 2 3              复位信号2和3,用户可以终止该脚本 . o/ I' l- Y9 \. ^% o9 a# F+ S9 \
    5. eval 对变量进行2次扫描 比如: 9 a: t$ ~7 c/ Z; s
            [wangyb@localhost bash]$ VAR1="cat a.sh" ' b2 R4 |1 f- ^/ @( a' H
            [wangyb@localhost bash]$ echo $VAR1 / K  g" c' ]" y( d, s
            cat a.sh
    * m: Y3 ]5 m, s        [wangyb@localhost bash]$ eval echo $VAR1  
    ; X; K# c: {' |; Y0 m0 O        cat a.sh
    9 v/ q4 G) B' w8 x        [wangyb@localhost bash]$ eval $VAR1     
    % E/ l' [/ V* ?8 O) L        #!/bin/bash
    0 ?7 `/ {$ y& [* z0 u% Z( \        TMP='HELLO' - c7 s8 M( k, J% T
            sleep 2 & W. \% V9 h& ?5 l; |6 J7 B
            times 4 M% g7 M. Q% N; c  R
    6. 获取命令行的最后一个参数: ex. $(eval echo \$$#)
    1 y7 R+ |5 `$ x2 g, |( Q7. logger 命令记录日志

    ' U- }- D- U+ o( |6 u2 ~No.027 几个脚本例子
    # 作者常用的几个脚本
    No.028 运行级别脚本
    1. 确定当前的运行级别:who -r 4 @4 T. W3 r/ K6 I; T( J1 z. H& z
    2. 运行级别含义 : a' M# o  {! r7 H$ z2 u
       运行级别0    启动和停止整个系统 4 @! d6 B" N% m0 Z& J8 X' k
       运行级别1    单用户或管理模式
    ' M9 L+ x5 x/ y   运行级别2    多用户模式;部分网络服务被启动。
    ( m  h0 g9 v. M' U* K7 C$ G2 a   运行级别3    正常操作运行模式,启动所有的网络服务
    # u! q. x  m) G& u4 j   运行级别4    用户定义的模式,可以使用该级别来定制所需要运行的服务
    & {; h/ t+ b$ ~# F$ B   运行级别5    有些Unix操作系统变体叫起作为缺省X-windows模式 4 n0 U5 `7 s1 N+ \
       运行级别6    重启动
    9 d9 Z- P6 e3 o+ m3 ?. o
    No.029 cgi脚本
    # 感觉现在应该不会有人用bash来开发web程序了吧
    No.030 常用shell命令
    1. basename : basename path ( c) L5 J# n( S7 H$ I* z
    2. cat : cat optiones file
    ; x  m& c; T8 M       -v 显示控制字符
    4 n# t2 L& ~/ }6 j3. compress : compress options files
    2 v! R  i% u2 P7 y* @- c) E       -v 显示压缩结果
    / e% W0 d9 W5 T: A* q4. cp : cp options file1 file2 % M' ]2 J8 Z# j
           -i 覆盖文件之前提示用户确认 ( x/ E! B! T" s
           -p 保留权限模式和更改时间 " x# p4 }; Z' P, O1 ^* M
           -r 拷贝相应的目录及其子目录
    # z! ^: y  o" G1 M+ I" V0 K/ I5. diff : diff options file1 file2 * q' o% O5 M- A3 ~7 d: A# D
           -c 按照标准个数输出 ! w& R. w/ s* ^! `6 {0 B7 l; w
           -I 忽略大小写   e" i/ P. }5 Y, q$ b2 m
    6. dircmp : dircmp options directory1 directory2
    , @* ^3 T( N6 x( w- g# L       -s 不显示相同的文件
    8 }* n! f" M' ^( V/ s- ]5 V7. dirname : dirname pathname 7 c& N1 ?  e+ n
    8. du : du options directory
    3 J8 R7 f  X1 c! I4 K9 e( o# b& Z# o       -a 显示每个文件的大小,不仅是整个目录所占用的空间
    ) N" [3 n" P: n       -s 只显示总计
    ' m& p( n% S* D! K( x9. file : file filename 4 Z5 {, J0 w% d
    10. fuser : fuser options file
    9 b: r; Z8 ~& m2 U3 I# y: _. s       -k 杀死所有访问该文件或文件系统的进程
    " H2 Z! y( S# N6 z( S( T0 p! C- Z       -u 显示访问该文件或文件系统的进程 . m# @: e) X: c" L% p* B0 J0 y
    11. head : head -number files
    8 F  }1 K/ z1 A" ]+ T& V6 y4 x12. logname : logname (显示当前使用的登陆用户名) * h/ D6 }1 R& y  q, I# r7 {4 {$ K  ~
    13. mkdir : mkdir options directory
    # y$ P" T& k0 \% K  F9 F/ v% ~        -m 在创建目录时按照该选项的值设置访问权限   l' @$ _5 D! J* e* Y1 b5 `; ]2 Z
    14. more : more options files
    % {3 X5 g- u; S# ~) I+ N        -c 不滚屏,而是通过覆盖来换页
    ' {: I$ }7 E. R+ z/ ]& ^) P        -d 在分页处显示提示 1 z2 A% F. ^6 s$ H
            -n 每屏显示n行
    % `# O4 i  P- M5 _9 Q15. nl : nl options file
    ) y# M7 z, l! w3 h( ^        -I 行号每次增加n;缺省为1
    6 K& c: G4 @2 M* P  R        -p 在新的一页不重新计数
    8 \; m+ g: _- m6 ]7 u# H16. printf : printf format arguments
    1 `& {4 D& \7 h7 N# I1 v17. pwd : pwd
    0 ~, M2 h9 o! b0 s& D18. rm : rm options files
    % k- K& o; p& L3 j. p        -i 在删除文件之前给出提示(安全模式)
    $ i# _) ^/ l1 l0 u* b! ]        -r 删除目录
    5 F+ Z) X; K9 t8 E2 ?& s19. rmdir : rmdir options directory
    * T% e6 S' ?2 Z9 m9 {        -p 如果相应的目录为空目录,则删除该目录 2 Z+ R  W& N6 F( W: h
    20. script : script option file
    ' l# J/ `$ g% M        -a 将输出附加在文件末尾 ! u7 b$ X9 _6 x3 v, \9 E1 M
    21. shutdown : shutdown now
    3 S: E; Z% ^; c22. sleep : sleep number(秒数)
    , ?2 M/ ^3 j- ]# U! |# G23. strings : strings filename (查看二进制文件中的文本)
    6 E. H. s2 ~5 _! I24. touch : touch options filename   c( \$ C+ ]5 U9 k! u! f
            -t MMDDhhmm 创建一个具有相应月,日,时分时间戳的文件 7 L+ F! [' S6 j5 F; p# U
    25. tty : tty 显示所连接的设备或终端
    , J6 s8 b& T' Q6 w' {26. uname : uname options + w" Z$ }3 b2 b' N4 Y9 k5 ^
            -a 显示所有信息 ' Z7 S' |; u. c8 H" q. [3 }
            -s 系统名
    + ^0 [1 l  |' X! b' X        -v 只显示操作系统版本或其发布日期
    9 f# Z2 ?3 w+ W% C$ }27. uncompress : uncompress files
    6 O4 P6 L% J$ |- `1 |5 C28. wait : wait processID
    # I9 Q) L' r5 p29. wc : wc options files ( V" g: n2 L; }) d& p) m( G
            -c 显示字符数 * E$ `$ V  X2 ?& Q  {. o
            -l 显示行数 6 Z1 d% U; v- G- Q3 H
            -w 显示单词数 4 @! O$ q$ I1 b' e+ r9 ~" g: F
    30. whereis : whereis command_name
    7 R" w- S/ @% J7 \- a3 S31. who : who options 1 p& s) `6 Q. R5 j' u+ c7 g
            -a 显示所有的结果 + Z( M+ ]( v# k- r
            -r 显示当前的运行级别 , h* H' q5 h" O8 r0 S
            -s 列出用户名及时间域
      q4 G+ E0 F- E0 q3 b* E" n
  • 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-25 00:53 , Processed in 0.187500 second(s), 23 queries , Gzip On.

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

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

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