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

Linux shell笔记

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    由于工作的需要,越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅。
    : Y7 N7 `/ h9 t0 @5 v) c" H0 O$ x' h& {' N/ p
    No.001 文件安全与权限
    1. umask 决定了新建文件的权限 * n3 W3 r" H9 Z1 k) T8 z4 q, g
    2. 软链接(符号链接) ln -s source_path target_path

    # o; P* X$ T. \% ~) i4 ~. i4 t! ?No.002 find和xargs
    1. find pathname -options [-print -exec -ok] 0 e7 M2 o0 {3 |
       其中exec参数的命令格式: 'command-' {} \; 注意必须包含【{} \;】
    1 l7 m: a  `& t$ H. D7 ]  C   -perm 按权限来查找  ex. find . -perm 755 -print 4 n+ g  A3 ?( k/ N' B- A
       -mtime 按修改时间来查找 ex. find / -mtime -5 -print 更改时间5天以内
    + j4 k4 b5 v  B$ |6 y! y/ Y                               find / -mtime +5 -print 更改时间5天以前   N$ j8 |5 Z6 Q
    2. xargs与-exec和-ok类似,但是限制更少,也更快 - y( E$ |- W9 R0 ^
       3种参数的命令:find . -name "*.c" -exec wc -l {} \;   }/ `& W* ~7 A2 `
                            find . -name "*.c" -ok wc -l {} \;   每次执行命令前有提示 ) D) X$ v( e) @1 s' ]
                            find . -name "*.c" | xargs wc -l
    ( D# E0 x0 P$ |7 k  J8 k* x
    No.003 后台执行命令
    1. [crontab] [at] [&] [nohup]四种

    # z& l0 Q! J: eNo.004 文件名置换
    1. 列出隐藏文件 ex. ls .*

    6 q. `+ c! G+ `0 X9 JNo.005 shell输入与输出
    1. echo输出时加上 -n 参数不换行, ex. echo -n "aaaa" " Y$ `2 P! R: ]6 t! ^3 @& M
    2. tee 命令可以同时输出到屏幕和文件中 ex. ls | tee file.out
    ( c; F) v5 z* c6 t0 J: X, f$ m0 B3. 标准输入 0  标准输出 1  标准错误 2
    " B9 {4 U4 o% I4. 将标准输出和标准错误输入到一个文件  ex. command >file.out 2>&1
    : l6 K8 Y9 M* ~) H
    No.006 命令执行顺序
    1. 命令1 && 命令2    命令1执行成功后才会执行命令2
    / X% r8 q% M$ d4 S; F. M; Q: q' L2. 命令1 || 命令2    命令1执行失败后才会执行命令2

    9 x9 a6 }: V. y) I0 F, M" `, iNo.007 正则表达式
    1. 正则表达式元字符及含义
    / ]2 I, y' i. v    ^                     只匹配行首
    ! K$ \+ R; R" ?4 h: R    $                     只匹配行尾
    ) [! h1 p( I# y  R- A    *                     匹配0次或多次
    - n  Q: l0 J/ j/ Q7 O    []                    匹配[]内字符 * p. j2 h% W6 Y. \- o8 y
        \                     转义符
    ( h1 }# v! W, |1 A2 u    .                     匹配任意一个字符
    / O6 p2 C1 `, c% F    pattern\{n\}          匹配pattern出现的次数,n次
    2 c* k1 ~: g  k5 E0 `2 Z( w* `    pattern\{n, \}        同上,最少n次
    ' i" P/ w6 H& A- c    pattern\{n, m\}       同上,次数在n与m之间
    . q, f6 ^" R0 T9 E8 d! E5 E
    No.008 grep
    1. grep 主要选项及其含义
    & _2 U$ l8 x. Z% y   -c    只输出匹配行的行数 5 S8 v* W( d( k5 G8 m0 \3 H
       -i    不区分大小写 ; G$ ~4 Q# T$ k' P+ h& G
       -h    查询多文件时不显示文件名 % ~8 l- m' K, c2 y) t: O
       -l    查询多文件时只输出包含匹配字符的文件名
    0 }# |- W5 X+ q+ |   -n    显示匹配行及行号 4 [1 s& [3 _. z! g8 r4 E9 O
       -s    不显示不存在或无匹配文本的错误信息 ' l; J5 }( P) u" u
       -v    显示不包含匹配文本的所有行 6 o* X: k/ `8 z+ H+ m( C9 G
    2. 查询空行 grep '^$' filename
    - u2 O2 R) a) n4 m7 Q5 Q& C8 A  K5 L3. 类名及等价的正则表达式
    $ r8 F  |, r# `* D! e. j   [[:upper:]]    =    [A-Z]
    ; a. C7 w" ?$ c( e3 g2 Q   [[:lower:]]    =    [a-z]
    % N& \; d. ^% S% Z& P   [[:digit:]]    =    [0-9] # C& T0 X# c; M, d/ A) r  J
       [[:alnum:]]    =    [0-9a-zA-Z] + o7 o$ |1 M7 y5 l
       [[:space:]]    =    空格或tab键
    , h6 a1 {2 ]0 V; o0 X   [[:alpha:]]    =    [a-zA-Z]
    " c3 T/ B- E6 J! Z+ M
    No.009 AWK
    # awk的主要作用在于将文本分成各个区域,便于分别进行处理 ! ^/ Q8 q) T, \: s9 ^$ A
    1. awk -F指定分隔符,-f指定awk脚本
    ( s& K  s& X1 ]& ~6 R8 J5 q   ex. awk -F: 'commands' input-file(s)
    * A6 O- }$ z' o& @! M1 T3 x   ex. awk -f awk-script input-file(s)
    8 V0 S. P2 z6 v8 C3 a  r5 m0 D& A2. awk 分隔出的域用$1,$2...$n来表示,其中$0表示所有域
    1 t2 ]' @1 Z& i; U3 B2 R# G9 \) @2 ~0 O3. awk 条件操作符 <, <=, >=, ==, !=
    + K: [  E, r, m   ~  匹配正则表达式   !~  不匹配正则表达式
    0 }; w+ w' R; Q! D* ~8 @4. awk 内置变量 7 n$ ?2 [4 |1 v3 j4 V8 @! t
       ARGC        命令行参数个数
    / C% F) m8 e/ E+ f, h! E   ARGV        命令行参数排列
    + K4 S# a+ ]3 A. \5 v# ^- O3 g% e   ENVIRON     支持队列中系统环境变量的使用   j. q  ]& b1 b: p4 p# f3 {
       FILENAME    awk浏览的文件名
    ' p+ E1 `. m4 n# H3 C   FNR         浏览文件的记录数
    3 D$ S+ d# c5 S& F   FS          设置输入域分隔符,等价于命令行-F选项
    / t3 I. V  C( [8 G" p) D  w   NF          记录的域个数
    5 u9 j* c( @( q7 q: D0 l   NR          已读的记录数
    2 j2 e# Z4 x/ e- y- V! v! x   OFS         输出域分隔符 2 ]8 M% x( ~0 w$ R2 }0 |5 T9 F, R$ N
       ORS         输出记录分隔符
    + p) X& R! x' h- [% Y   RS          控制记录分隔符 9 A2 ]" |# Z) P' V* ?& g
       ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file
    * T2 M; n1 W% |& ^3 p- F2 w! t3 ?' Z5. awk 字符串函数 ; p1 k& _7 p! d. v7 d
       gsub, index, length, match, split, sprint, sub, substr, substr 6 g% N3 e! x% F6 C( n% g1 _
    6. awk 中的printf函数可以控制格式化输出 + n$ [0 T1 V+ Q
    7. awk 的循环结构 For (element in array) print array[element]
    8 Y  }9 n/ ^1 r6 c/ N- y
    No.010 sed
    # sed的主要作用在于过滤和查找文本中的特定内容 $ V# e8 I. U3 e& m, g) i- f7 K
    1. sed 命令格式: sed [options] sed-command input-file
    8 ?! F2 n; |0 @$ L$ H                  sed [options] -f sed-script input-file
    6 Q! ]& z- m! m+ ~, G# z
    No.011 合并和分隔文件
    1. sort, uniq, join, cut, paste, split

    ( _7 [3 `. v2 N8 oNo.012 tr的用法
    1. 去除oops.txt中的重复字符 tr -s "[a-z]" < oops.txt
    1 t4 Q3 O/ }4 q# c' Q2. 去除oops.txt中的空行 tr -s "[\n]" < oops.txt / p+ b# X- k- t
    3. oops.txt中小写转大写 tr -s "[a-z]" "[A-Z]" < oops.txt

    : d4 E9 E$ Z+ p3 S! s* Q3 SNo.013 登录环境
    1. /etc/passwd 保存所有账号的基本信息(不包括密码) 2 Z. Y3 z( f% B/ D. t- V
    2. /etc/profile 基本的配置信息,登录时读取此文件
      U8 Z/ x' C5 L* w6 t2 t4 m1 x; ^( c3. $HOME/*profile 各个用户的profile文件,会覆盖系统的profile文件 4 W1 G" l, R$ p
    4. $HOME/*logout logout(键入命令exit时)是执行的脚本
    + ^- z/ k* B- a9 b- D
    No.014 环境和shell变量
    1. shell变量的设置方式 8 _4 n" q5 e' V9 P$ g+ u2 V
       Variable-name=value    设置实际值到variable-name . q1 j  i7 V, w# q; `: W: F: x/ m
       Variable-name+value    如果设置了variable-name,则重设其值 / m1 s5 `% h* r7 U7 [
       Variable-name:?value   如果未设置variable-name,显示未定义用户错误信息 ; V. C; _9 \$ i6 ]
       Variable-name?value    如果未设置variable-name,显示系统错误信息
    / w5 m' a( O7 {- e" P   Variable-name:=value   如果未设置variable-name,设置其值
    - N* ]/ M6 F: ~  p, [! i) J   Variable-name:-value   如果未设置variable-name,就用value,但是不设置variable-name
    9 j+ _5 y1 ^% W+ Q9 x. U. g2. 设置只读变量  readonly variable-name
    2 Q5 @; n8 z9 Y3. export variable-name 可以将变量导入到子shell中
    9 g( J; a+ J  _* Z- ?$ g+ h4. shell脚本的参数 $0表示脚本名字,$1表示第一个参数......$9表示第九个参数 + `- j; j6 n; S2 ?) v# @1 V6 C
    5. 特定shell变量
    6 z6 O# a3 l5 b8 F/ G( L0 f8 o4 T   $#    参数个数 2 l- ~% w8 L! w; W
       $*    用一个字符串显示所有参数 : Z* p+ M' D7 y0 a, g
       $$    脚本运行的当前进程ID
    $ K+ U- Z* F9 h# K' e7 u% m   $!    后台运行的最后一个进程的进程ID
    . j: h4 V4 g% n. O8 i   $@    与$*相同,每个参数作为独立的字符串 ' I" i3 Q1 a+ w! Y/ L5 ~
       $-    显示shell的当前选项,与set命令相同 / Z3 K  T8 t9 k' q
       $?    显示shell命令的退出状态,0表示无错误,其他表示有错
    ! ?% l  U$ i0 G3 ]  A
    No.015 引号
    1. 双引号("") 其中引用的变量会替换为变量值。比如:
    % m  Q* G7 E- X) K+ u" }' f    [wangyb@localhost bash]$ STR="Hello world"
    + f6 P5 o* a, X8 T' d$ z$ `9 C$ q    [wangyb@localhost bash]$ echo "$STR"   x* N# z& O9 F2 w: B/ s
        Hello world
    3 B- m7 p9 l6 l+ M: G2. 单引号('') 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。比如:
    5 w' h1 b( W5 D  M) O; W    [wangyb@localhost bash]$ STR="Hello world"
    4 |1 P# ^" y9 c1 n# K- y- A    [wangyb@localhost bash]$ echo '$STR'      ' F2 e: P2 h2 g6 y+ W
        $STR 9 y) \6 e4 S7 l5 i& ~/ C( U! T
    3. 单引号和双引号同时使用时,谁在外面谁起作用。比如
    7 s* e3 W& b0 H9 ?' S    [wangyb@localhost bash]$ echo "'$STR'"
    - P2 t# |1 u3 Y; A3 W/ x    'Hello world'
    $ Z5 @' h: n' B0 C    [wangyb@localhost bash]$ echo '"$STR"'   C+ F: J4 X  q# `5 r
        "$STR" ; C7 g: B( L9 |% k6 c( |& W
    4. 反引号(``) 反引号中的内容被当做命令来执行。比如 9 L. T$ j- Z8 }$ ]1 g5 @
        [wangyb@localhost bash]$ VAR=`date` ! U  h4 N, R3 [; a7 D
        [wangyb@localhos bash]$ echo $VAR
      o9 {2 r* a# K) ?) Q    Thu Dec 22 22:08:07 JST 2011 5 D( ?/ I/ u6 O, L% F- _9 o
    5. 转义符(\)

    8 k$ _' `& h3 [6 [. b8 X/ PNo.016 Shell脚本介绍
    1. 脚本的第一行一般以  #!/bin/bash  开始 4 v; s' D4 [1 i  \
    2. 给脚本加入执行权限后就可以运行脚本了

    ' _1 W3 J! w+ ]; ~7 P#No.017 条件测试
    1. 测试语法  test condition 或者 [ condition ] 使用方括号是注意在condition两边加上空格
    8 m9 {( y) @9 _6 {5 t  f2. 文件状态测试 - ]. a8 J; m" p+ k6 t" `
       -d    目录            -s    文件长度大于0
    % _" I" I6 `- r) u! M6 F, f6 D   -f    正规文件        -w    可写
    + d$ X' h! E" k4 o; D   -L    符号连接        -u    文件有suid位设置 & h" O# e& g! }$ I
       -r    可读            -x    可执行
    2 i9 f0 u; k$ b) S3 m   例子如下:测试是否为目录,也可以用 test -d bash.sh 来代替方括号
    . e5 h$ x- ~+ T4 B2 e    [root@localhost bash]# [ -d bash.sh ]
    : C  w) Z5 [* |  Z0 N+ M6 Q/ I    [root@localhost bash]# echo $?
    ' P" n/ ?* K5 q/ U9 ?0 g. C% l    1 5 l2 t; n, w& F  I
        [root@localhost bash]# [ -d . ]      
    & R* R9 }' c. G4 R    [root@localhost bash]# echo $?
    ' i: |6 w" L$ V' y" G6 W    0
    . }& M6 w, h! a- F" U3. 逻辑与 -a  逻辑或 -o  逻辑否 ! 例子如下: 6 R% o5 [# m1 N( M2 h
        [root@localhost bash]# [ -d bash.sh -a -d . ] % L% B- P* i+ {- A
        [root@localhost bash]# echo $? 6 j' T5 w7 y7 X4 o& A3 a
        1   @: P% k  F) B# s8 E
        [root@localhost bash]# [ -d bash.sh -o -d . ]  
    4 I8 Y. {+ D7 k8 S  R1 m    [root@localhost bash]# echo $?
    " U8 w6 c. ]( J' ?" E- m0 I* _% v    0
    9 ^! [. r" O. b7 s8 o, L    [root@localhost bash]# [ ! -d bash.sh -a -d . ]   
    # ?& Q9 \1 S3 D$ ^: u3 U    [root@localhost bash]# echo $?
    * _  F4 z4 x% C" r  C    0
    * L4 J) m' D4 Q- M- C    [root@localhost bash]# [ ! -d bash.sh -a ! -d . ]
    " K. O5 Z, n3 u9 n* h  R    [root@localhost bash]# echo $? ' R$ t" n9 g* }8 r) ^9 [. E( ^
        1
    5 U5 {8 Q0 A3 u6 T$ _4. 字符串测试  [ string1 string_operator string2 ] 或者 [ string_operator string ] & c) _& }+ X* p3 P- C6 T9 k- d
       string_operator可为:=      两个字符串相等 : r0 x) @  u* {5 C; b
                            !=     两个字符串不等
    $ C7 O6 ?4 t$ M# t1 A2 T                        -z     空串 % l2 y; a9 c8 M) X; a4 L
                            -n     非空串 + D8 \" u; Q, z
    5. 数值测试  [ "number1" num_operator "number2" ] * g2 p7 ]4 [9 W  [" U- B4 d/ h
       num_operator可为:  -eq     数值相等 . p8 {9 C  [8 D4 D- R
                           -ne     数值不等
    1 P7 b, G( Q, k% k* G4 w                       -gt     number1 > number2 2 A. w2 Y, z; G6 y8 ~" J
                           -lt     number1 < number2 ' o1 V7 p, ]4 }, b3 s3 m4 V* S
                           -le     number1 <= number2 7 l) F9 L( J, {6 J
                           -ge     number1 >= number2 ; c4 ?/ v  ~  E, G( T* F+ N5 g
       例子:   [root@localhost bash]# [ "100" -gt "101" ] + O" k, B) t, d; i3 ^# }
                [root@localhost bash]# echo $? 6 U! S  I7 {* J. u
                1
    4 @. L( P6 A3 p. A            [root@localhost bash]# [ "100" -lt "101" ] 8 [# I9 O% w, d6 ^5 j+ r, W
                [root@localhost bash]# echo $?            ! Q' i& }# A0 |' d9 V
                0
    5 p2 G( t( G- Z9 ^, z6. expr语法  expr arg1 operator arg2 0 Z, d% X4 [: ^* `
       例子:变量自增 & c% b% y3 k1 m' \& n6 o
                [root@localhost bash]# COUNT=1        
    0 i8 w- i( P) |" a1 Z% s            [root@localhost bash]# echo $COUNT   
    ! n/ H6 P6 P/ J3 t0 `) M            1 - _9 V5 [# K' L7 M) U
                [root@localhost bash]# COUNT=`expr $COUNT + 1`
    5 R* Y7 V9 n/ X5 K            [root@localhost bash]# echo $COUNT            
    ! f8 Z% d& z2 _' `  ?            2
    $ G7 H" M; v8 O( H7 V. P8 |4 _0 e
    No.018 控制流结构
    1. if语句格式
    * Z& }5 s' M3 X9 y+ e0 ?5 D   if 条件1 * K+ `; H8 j/ ?5 ?1 w- w8 y
       then . F9 @6 o# K8 _
            执行命令1
    8 Y% U( A; }$ @' V0 H9 r+ A3 K   elif 条件2 . B' Y! ]" G) R3 M1 s. a5 G
       then
    2 l' A+ g7 r( Q        执行命令2 3 Z8 A3 Q; e8 f4 [  a6 W1 y
       else
    # p; V7 E* q- k. N/ n9 Q1 m) a        执行命令3 + V2 }  Z2 j, u9 v9 K
       fi ! `% M- m! j" c( M8 P  o: T
    2. case语句格式
    ( V2 O: C1 b" q) y# p% Y2 E   case 值 in : `+ n7 W0 [2 w& X
       模式1)
    ! d7 K  f& o; C7 Q' L       命令1 & H+ P7 l( S. r: V
           ;;
    8 a  A% r: O; R! b  S   模式2) : W+ B- ~- I5 ?1 F4 u5 P- `; b  h" t
           命令2 ' o8 |4 A- ]2 v" X
           ;;
    ) Z" f( B1 `- p2 P% h+ w   ......
    5 u. e0 Z5 s' v2 c6 \   easc / g1 h6 q1 p# {: ]; p6 }
    其中的“模式”可以是 *(任意字符), ?(任意单字符), [..](范围内任意字符)
    ! k( u' N+ N/ C6 S“模式”中还可以是使用 | (比如 str1|str2 表示str1和str2都可以) 6 G5 |! d% G$ Y% W7 X- h
    3. for语句格式 + Y0 f2 Y' m1 ~+ f- }
       for 变量名 in 列表 6 J' m& K% Q: k; B
       do 2 ?& b- t1 `+ @$ G$ V/ |+ q: O
           命令1
    , f5 ~  y* P5 v0 r       命令2 ...... 9 m) P. W8 g6 B" h/ j  ?7 f/ o
       done $ [$ J- Y' [7 V8 @+ N! U% l
    4. until语句格式 ; ^& m; P3 {9 x" ?4 ^8 ]2 ]2 a
       until 条件
    # j: \* ], w& L8 F" u         命令1
    2 V. I4 X0 p! L& C+ A/ w         ...... ; e* k: Q) {( s6 Q7 h; ]" s# o
       done 8 }& J1 }; U) o( w9 i, r3 C
    一直执行至条件为真时才结束,至少执行一次
    , @& f6 C8 T1 K+ i' t  B- E! H+ |5. while语句格式
      t, U  t0 T. b# ~( Z" a) O5 E   while 条件 6 J$ e# V8 z; _6 U' H- u0 u
             命令1 ; G  Z. z6 w* t) ^  ?
             ...... * s0 I5 J, x4 ~  d, D* {7 K
       done 2 O4 O+ {$ e: I& ?* K
    6. 利用IFS来改变读取内容的分隔符
    7 G5 E0 X- A  w* J% c7. 利用break和continue控制循环的执行

    2 V8 d- q6 v8 g: b9 x" NNo.019 Shell函数
    1. shell函数格式 $ l% x- y9 t* O; {' r
       函数名 ()
    7 |# Z9 o- m6 h8 y   { 5 r9 E6 {; {! H0 @- _% `: o
           命令1 + `' s  q( w% S6 B, p7 ]
           ......
    " d- q* f5 E$ A/ {   }
    3 q* h- I3 p7 P8 P1 f或者 1 _6 r2 _$ ?* S: ]8 [5 u* k
       function 函数名 ()
    & q4 h6 z+ G2 V  ?1 p   { ; @9 @0 n5 Z5 g' I/ z
           命令1 " k' A$ U$ l4 Y- Z' L: Q
           ......
    8 ?/ w" j( J, q! h/ N, C/ p, ]7 T8 }   }
    0 @8 v$ F9 _8 y$ G2 B& b; p2. 引用其他脚本中函数  . /pathname/funcfile (<点><空格><斜线><文件完整路径名>或者<点><空格><文件相对路径名>) 3 J' |  H7 x' A
    3. 函数中通过 $1, $2,......$9来获取参数
    3 }  r4 b) ?2 Z# N
    No.020 向脚本传递参数
    1. 使用shift依次获取各个参数,比如 2 _: [" A- s0 l# p" S+ E0 {- a
       while [ $# -ne 0 ]
    5 [4 I7 j" T# {" j   do - X) T- Q9 O, |8 C: I" e
             echo $1  # 通过shift,$1将依次表示各个参数 & ^" o* p3 t- R6 V3 M
             shift
    " d9 J, K! d1 v- T$ d0 s. O   done 5 j" m$ G, ~7 K
    2. getopts语法格式 getopts operation-string variable。

    ! x: t4 H! b7 a) c5 t3 H7 [No.021 屏幕输出
    1. tput 控制屏幕上的字符输出,比如加粗字符,隐藏光标等等 $ P  E4 Q  l5 s. I: P  I4 k) a% j
    2. 改变字符颜色的方法,比如
    1 g$ ~6 C9 i3 _4 ]7 b" a   echo "<CTRL-V><ESCAPE>[40;32m"   设置背景黑色(40), 字符绿色(32)
    - H( X- S) L& K& K3 s
    No.022 屏幕输入
    1. 输入时进行validation check
    9 x( G; z# o  L+ G   “送进的是垃圾,出来的肯定是垃圾”
    0 h' I9 p* e1 c, T6 ~
    No.023 调试脚本
    1. shell不会对错误进行精确定位,当shell打印错误后,需要观察报错的整个代码段 ! \& V% V1 E: Q0 J% J* n
    2. 在脚本中利用set命令辅助调试
    ; ^) D5 H+ B+ l$ I" ], n' W8 U   set -n    读命令但不执行
    - G0 w2 a8 W/ M5 U1 h8 f, l4 P   set -v    显示读取的所有行 9 E% |' @& Q3 b2 o* E
       set -x    显示所有命令及参数
    / I3 ^& J% P( g+ M) _   - 表示打开; + 表示关闭;set +x 表示关闭显示所有命令及参数

    2 I$ h0 j3 k) N6 Z& ]2 b& ~No.024 shell 嵌入命令
    1. set 命令在脚本中设置脚本的运行参数
    ( c& F& F' @% r2. times命令打印shell消耗时间和运行命令消耗时间 ??? & U2 X* B9 c% i$ s7 O9 ]# k
    3. type 命令查询命令是否有效及命令类型 # j: B- P2 Z. z8 A* ]5 K
    4. ulimit 命令设置运行在shell上的显示限制 8 l/ Q. g% J6 W1 _7 ]5 ]
    5. wait 命令是父进程等待子进程完成

    6 e6 N: I  \  P. D6 H, wNo.025 深入讨论<<
    1. 创建文本  ex. cat >> file <<end
    / I0 C! [+ V( k                 > (输入内容)
    4 R" |& R9 `( p7 o! }2 K) |                 > end 3 H8 P) x" D5 d) H
       (输入内容)将被追加到file中

    2 B, `" \/ P! \. _4 F5 W2 `No.026 shell工具
    1. 用日期做文件名,ex.  $ Myfile=`date +%Y%m%d%H%M%S`
    2 X- v' b# P# V1 o                        $ touch $Myfile % Y5 M/ Z, g# d! |: [
    2. 脚本中的临时文件名中加入进程号,可以保证文件名唯一,并在脚本结束时删掉文件
    ) O4 z$ S, {4 O2 s   ex. TmpFile1=/tmp/tempfile1.$$
    4 q, i* \* [- h       TmpFile2=/tmp/tempfile2.$$
      v$ G. z# F. A7 `2 p       rm /tmp/*.$$ 1 h9 a) K  y* I6 o
    3. 常用信号
      Y- @! u$ H& l3 B# t  U- e$ _   信号    信号名        含义 4 v* {% n  _. _& |
       1       SIGHUP        挂起或父进程被杀死
    / l; L% ?" i4 o- L+ \   2       SIGINT        来自键盘的中断信号,通常是<CTRL-C>
    6 h# n$ R  W- B   3       SIGQUIT       从键盘退出 + ^7 O5 ?8 d" N9 B
       9       SIGKILL       无条件终止
    0 I, _% W  Z, Z+ U* S   11      SIGSEGV       段(内存)冲突 ! L, x; D, z: O* M3 D! o
       15      SIGTERM       软件终止(缺省杀进程信号) : M$ D1 B( m5 ?
    4. trap 捕获信号 语法 trap "do-something" signal(s) ; E. N4 Q' E( }" \" ]
       ex.  trap "" 2 3           忽略信号2和信号3,用户不能终止该脚本   L9 w1 S4 G0 |( T5 B
            trap "commands" 2 3   如果捕捉到信号2和信号3,就执行相应的commands & a! |8 s( t0 I9 A6 L
            trap 2 3              复位信号2和3,用户可以终止该脚本
    2 y5 ]  S/ y5 R2 Q5. eval 对变量进行2次扫描 比如: * n& E* {0 p# U: f, q
            [wangyb@localhost bash]$ VAR1="cat a.sh" " W- B. P6 i7 u  k/ `$ _* s9 M
            [wangyb@localhost bash]$ echo $VAR1 3 U7 M1 ?! e* f- E( u$ f  f
            cat a.sh
    / {6 z6 V' x5 O        [wangyb@localhost bash]$ eval echo $VAR1  
    , A6 w! v- E! }7 O4 }8 ~7 V        cat a.sh
    , J9 w; }& N4 u% s5 T, l        [wangyb@localhost bash]$ eval $VAR1     
    0 _; T; x$ E. d5 o( ?        #!/bin/bash " }7 |% M9 O: E5 h/ g1 f
            TMP='HELLO' 9 T3 m7 X0 m9 m! r) ]
            sleep 2 ; z7 z$ ?  [6 @! D; t6 G
            times
    7 ~7 [: ^6 z! q! Z6. 获取命令行的最后一个参数: ex. $(eval echo \$$#)
    # G) f; T. B) I0 I; n5 K7. logger 命令记录日志
    : Q  f  h' B& l! F- s) T
    No.027 几个脚本例子
    # 作者常用的几个脚本
    No.028 运行级别脚本
    1. 确定当前的运行级别:who -r
    " I# w4 |8 |# z3 e5 @2. 运行级别含义
    + F9 ]- x1 i- X& h0 W6 ?7 ]- e   运行级别0    启动和停止整个系统
    $ C2 w3 x8 P, L; ]. ?6 N  `   运行级别1    单用户或管理模式 0 _( o, O# `( u+ d4 U; P: S  g5 ?
       运行级别2    多用户模式;部分网络服务被启动。
    ( s  `! D+ k# x) N  c; d, f9 Y& x   运行级别3    正常操作运行模式,启动所有的网络服务 # k2 h& X/ p! B
       运行级别4    用户定义的模式,可以使用该级别来定制所需要运行的服务 . F9 r  H( v- y! f$ p. z  e# F
       运行级别5    有些Unix操作系统变体叫起作为缺省X-windows模式 - B; b# R2 |5 F" t9 G- l0 k
       运行级别6    重启动

    6 E) I, ]9 A: ~0 X) [9 e8 N" [/ X4 ~No.029 cgi脚本
    # 感觉现在应该不会有人用bash来开发web程序了吧
    No.030 常用shell命令
    1. basename : basename path $ p& }, c) \4 k) S9 M, V
    2. cat : cat optiones file + J7 b( j! w: o  n; ^
           -v 显示控制字符
    8 t  C3 e0 U- k, ]3. compress : compress options files
    9 d: B4 \" t. F. d! _- j, D       -v 显示压缩结果 6 n, {0 k" X& F0 i! x1 ~
    4. cp : cp options file1 file2 7 v8 u4 c$ a/ d$ T9 U; S
           -i 覆盖文件之前提示用户确认
    2 D: n& v# x# C# q6 s, P7 L       -p 保留权限模式和更改时间 1 d& t) z% ~: ]/ u8 e# y
           -r 拷贝相应的目录及其子目录
    - j1 v( L* m8 ?3 o5. diff : diff options file1 file2
    - G. R/ C) K/ g! c! u5 n6 g6 r       -c 按照标准个数输出 % I  o  q( ?( E. R* A3 X6 Z
           -I 忽略大小写 , I# A2 g5 B5 F3 B1 [8 L
    6. dircmp : dircmp options directory1 directory2 * b# }( P0 D) @5 d% [" J- X: S+ B
           -s 不显示相同的文件 ( T4 X/ L; Y# B7 `# V
    7. dirname : dirname pathname ' }- D2 G' C, R8 d2 ^( B
    8. du : du options directory " y2 g* H/ A+ w2 }
           -a 显示每个文件的大小,不仅是整个目录所占用的空间
    ; S/ |8 o3 U. @) E  c       -s 只显示总计
    ( c) s, ]1 s- r7 n+ f; U1 @$ U9. file : file filename . s& j2 g+ V; m$ k
    10. fuser : fuser options file
    . q+ \5 d; E; @. H$ N" B       -k 杀死所有访问该文件或文件系统的进程 + e; m0 t9 Q9 f2 q! q4 M& o4 g# a! T
           -u 显示访问该文件或文件系统的进程 1 F& M4 ]" e$ T# ~: `8 C3 H/ S
    11. head : head -number files + A  x  ^' @/ e3 f
    12. logname : logname (显示当前使用的登陆用户名)
    # h% o9 g6 I+ `1 q13. mkdir : mkdir options directory - C* b- j) e2 F& K; G
            -m 在创建目录时按照该选项的值设置访问权限 % C! u/ y0 V+ z% |# B/ S
    14. more : more options files 8 b. F5 x" }1 m# |+ \
            -c 不滚屏,而是通过覆盖来换页 0 W) O+ ~5 x0 T, {
            -d 在分页处显示提示 ( `. M5 x/ e5 v1 ?- `+ V
            -n 每屏显示n行
    6 O7 r2 e+ f! {4 g) T  K8 H15. nl : nl options file
    " B$ ~- q5 o5 O        -I 行号每次增加n;缺省为1 8 @- v! y5 j- i; K
            -p 在新的一页不重新计数 - o- J2 m* G7 d- M
    16. printf : printf format arguments
      k* b1 w2 g8 i4 s0 l% ], e17. pwd : pwd
    $ S* I$ z& m- O) C! P: p8 M18. rm : rm options files
    % x3 Q( H, Y- m' C        -i 在删除文件之前给出提示(安全模式) + X( J0 b* `* h& b$ n
            -r 删除目录 6 |5 A" O3 z) i
    19. rmdir : rmdir options directory : Q# A4 c1 v/ e4 {; E) _) K
            -p 如果相应的目录为空目录,则删除该目录 1 ~* _" r% l+ |  W
    20. script : script option file 1 D& d3 }/ {# \$ r; ]3 H4 K4 g
            -a 将输出附加在文件末尾 % D1 |' Q+ c5 I& j$ [/ @- a
    21. shutdown : shutdown now
    2 C4 N' G/ O4 a( |  u3 P22. sleep : sleep number(秒数) 9 W# c! `( a- y
    23. strings : strings filename (查看二进制文件中的文本) 4 n4 a7 D' ?( m* ]: ^
    24. touch : touch options filename * r( u. |1 `4 [7 T1 g
            -t MMDDhhmm 创建一个具有相应月,日,时分时间戳的文件
    ' ?- }- ~5 i- x! X4 R* p/ D25. tty : tty 显示所连接的设备或终端
    % x$ x% s1 X% U26. uname : uname options   O. Q/ E" G2 a
            -a 显示所有信息
      V1 Z  C6 t. u+ D3 Y3 }* ^) y8 x        -s 系统名
    # n6 |+ Q1 s+ o$ u7 [: e) _" `        -v 只显示操作系统版本或其发布日期 # r  H* h& S2 B' n0 G" k4 s7 E
    27. uncompress : uncompress files ) v( t0 z8 z) x$ p2 \2 x8 t3 N% N
    28. wait : wait processID
    6 T: z  R  `4 k8 u29. wc : wc options files " y6 K) v+ c2 q
            -c 显示字符数 ( Z4 {" o; `1 L3 m6 O5 Y! Y
            -l 显示行数 $ P% Q& \) }! S  C. \
            -w 显示单词数
    5 G# \/ J2 c# h9 ]' G8 B/ E30. whereis : whereis command_name 9 @& [( d# j' ?- l& E
    31. who : who options
    ! q1 D3 g+ m( T3 r0 u& n7 k0 Q        -a 显示所有的结果
    & M2 [$ r; X  ^        -r 显示当前的运行级别 - E% Z  c: f2 l+ K
            -s 列出用户名及时间域
    # b  n. m# r5 J! k" A' ?6 u5 U
  • 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 01:25 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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