• Linux基础命令注释(3)


    Linux基础命令注释(3)

    安装压缩工具

    1. 挂载
    [root@hostnamectl ~]# mount /dev/cdrom /mnt/
    mount: /dev/sr0 写保护,将以只读方式挂载
    [root@hostnamectl ~]# ls /mnt/
    addons  extra_files.json  isolinux    Packages                 RPM-GPG-KEY-redhat-release
    EFI     GPL               LiveOS      repodata                 TRANS.TBL
    EULA    images            media.repo  RPM-GPG-KEY-redhat-beta
    [root@hostnamectl ~]# rpm -ivh /mnt/
    addons/                     images/                     RPM-GPG-KEY-redhat-beta
    .discinfo                   isolinux/                   RPM-GPG-KEY-redhat-release
    EFI/                        LiveOS/                     TRANS.TBL
    EULA                        media.repo                  .treeinfo
    extra_files.json            Packages/                   
    GPL                         repodata/                   
    [root@hostnamectl ~]# rpm -ivh /mnt/
    addons/                     images/                     RPM-GPG-KEY-redhat-beta
    .discinfo                   isolinux/                   RPM-GPG-KEY-redhat-release
    EFI/                        LiveOS/                     TRANS.TBL
    EULA                        media.repo                  .treeinfo
    extra_files.json            Packages/                   
    GPL                         repodata/ 
    

    1. 安装gzip
    [root@hostnamectl ~]# rpm -ivh /mnt/Packages/gzip-1.5-9.el7.x86_64.rpm 
    警告:/mnt/Packages/gzip-1.5-9.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    	软件包 gzip-1.5-9.el7.x86_64 已经安装
    
    

    1. 安装bzip2
    [root@hostnamectl ~]# rpm -ivh /mnt/Packages/bzip2-1.0.6-13.el7.x86_64.rpm 
    警告:/mnt/Packages/bzip2-1.0.6-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:bzip2-1.0.6-13.el7               ################################# [100%]
    

    1. 安装zip
    [root@hostnamectl ~]# rpm -ivh /mnt/Packages/zip-3.0-11.el7.x86_64.rpm 
    警告:/mnt/Packages/zip-3.0-11.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:zip-3.0-11.el7                   ################################# [100%]
    
    [root@hostnamectl ~]# rpm -ivh /mnt/Packages/unzip-6.0-16.el7.x86_64.rpm 
    警告:/mnt/Packages/unzip-6.0-16.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:unzip-6.0-16.el7                 ################################# [100%]
    

    1. 安装XZ
    [root@hostnamectl ~]# rpm -ivh /mnt/Packages/xz-5.2.2-1.el7.x86_64.rpm 
    警告:/mnt/Packages/xz-5.2.2-1.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY
    准备中...                          ################################# [100%]
    	软件包 xz-5.2.2-1.el7.x86_64 已经安装
    
    

    压缩解压缩

    gzip压缩与解压缩,不会保留源文件

    • 压缩
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# gzip 1 
    [root@hostnamectl tem]# ls
    1.gz  2  3  4  a  b  c  d  e  f
    
    • -d 解压缩
    [root@hostnamectl tem]# gzip -d 1.gz 
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# 
    
    

    bzip2 压缩与解压缩,不保留原文件

    • 压缩
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# bzip2 1
    [root@hostnamectl tem]# ls
    1.bz2  2  3  4  a  b  c  d  e  f
    
    • -d 解压缩
    [root@hostnamectl tem]# bzip2 -d 1.bz2 
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    
    
    • -k保留源文件
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# bzip2 -k 1
    [root@hostnamectl tem]# ls
    1  1.bz2  2  3  4  a  b  c  d  e  f
    

    zip 压缩与解压缩(归档),会保留源文件

    • 压缩(归档)
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# zip 1.zip 1
      adding: 1 (stored 0%)
    [root@hostnamectl tem]# ls
    1  1.zip  2  3  4  a  b  c  d  e  f
    
    • unzip 解压缩(拆包)
    [root@hostnamectl tem]# mv 1.zip a/
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# cd a
    [root@hostnamectl a]# unzip 1.zip
    Archive:  1.zip
     extracting: 1                       
    [root@hostnamectl a]# ls
    1  1.zip
    
    

    XZ 压缩解压缩,不保留原文件

    • 压缩
    [root@hostnamectl tem]# ls
    1.xz  2  3  4  a  b  c  d  e  f
    
    • -d解压缩
    [root@hostnamectl tem]# xz -d 1.xz 
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    
    • -k保留源文件
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# xz -k 1
    [root@hostnamectl tem]# ls
    1  1.xz  2  3  4  a  b  c  d  e  f
    

    归档工具tar

    • Usage: tar [OPTION...] [FILE]...

    • 常用的OPTION:

      -c:创建归档文件

      -f file.tar:指定要操作的归档文件

      -x:还原归档

      -v:显示归档过程

      -p:归档时保留权限信息。只有管理员才有权限用此选项

      -C:指定还原归档或解压时的目标目录

      -tf:不展开归档,直接查看归档了哪些文件

    • 例:归档

    [root@hostnamectl tem]# ls
    1  1.xz  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# tar cf holle.tar {a..f}
    [root@hostnamectl tem]# ls
    1  1.xz  2  3  4  a  b  c  d  e  f  holle.tar
    
    • 例:解包
    [root@hostnamectl tem]# mv holle.tar f
    [root@hostnamectl tem]# ls f
    holle.tar
    [root@hostnamectl tem]# cd f
    [root@hostnamectl f]# tar xf holle.tar 
    [root@hostnamectl f]# ls
    a  b  c  d  e  f  holle.tar
    
    • 常用的组合项:

      -zcf file.tar.gz:归档并调用gzip进行压缩

      -jcf file.tar.bz2:归档并调用bzip2进行压缩

      -Jcf file.tar.xz:归档并调用xz进行压缩

      -xf file.tar.xz; 可以自动选择解压工具

    • -zcf归档压缩

    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# ls e
    [root@hostnamectl tem]# tar zcf war3.tar.gz *
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f  war3.tar.gz
    
    • 解压缩拆包
    [root@hostnamectl tem]# mv war3.tar.gz e/
    [root@hostnamectl tem]# ls e
    war3.tar.gz
    [root@hostnamectl tem]# cd e
    [root@hostnamectl e]# tar zxf war3.tar.gz
    [root@hostnamectl e]# ls
    1  2  3  4  a  b  c  d  e  f  war3.tar.gz
    
    • -jcf归档压缩
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# tar jcf LOL.tar.bz2 *
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f  LOL.tar.bz2
    
    
    • 解压缩拆包
    [root@hostnamectl tem]# mv LOL.tar.bz2 b
    [root@hostnamectl tem]# ls b
    LOL.tar.bz2
    [root@hostnamectl tem]# cd b
    [root@hostnamectl b]# tar jxf LOL.tar.bz2 
    [root@hostnamectl b]# ls
    1  2  3  4  a  b  c  d  e  f  LOL.tar.bz2
    
    • -Jcf归档压缩
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f
    [root@hostnamectl tem]# tar Jcf HELLDIVRS.tar.xz *
    [root@hostnamectl tem]# ls
    1  2  3  4  a  b  c  d  e  f  HELLDIVRS.tar.xz
    
    • 解压缩拆包
    [root@hostnamectl tem]# ls c
    [root@hostnamectl tem]# mv HELLDIVRS.tar.xz c/
    [root@hostnamectl tem]# cd c
    [root@hostnamectl c]# tar Jxf HELLDIVRS.tar.xz 
    [root@hostnamectl c]# ls
    1  2  3  4  a  b  c  d  e  f  HELLDIVRS.tar.xz
    [root@hostnamectl c]# 
    

    通配符

    • 创建文件
    [root@hostnamectl y]# touch {A..z}
    [root@hostnamectl y]# touch {0..100}
    [root@hostnamectl y]# ls
    `  10   16  22  29  35  41  48  54  60  67  73  8   86  92  99  d  G  k  N  r  U  y
    ^  100  17  23  3   36  42  49  55  61  68  74  80  87  93  a   D  h  K  o  R  v  Y
    _  11   18  24  30  37  43  5   56  62  69  75  81  88  94  A   e  H  l  O  s  V  z
    [  12   19  25  31  38  44  50  57  63  7   76  82  89  95  b   E  i  L  p  S  w  Z
    ]  13   2   26  32  39  45  51  58  64  70  77  83  9   96  B   f  I  m  P  t  W
    0  14   20  27  33  4   46  52  59  65  71  78  84  90  97  c   F  j  M  q  T  x
    1  15   21  28  34  40  47  53  6   66  72  79  85  91  98  C   g  J  n  Q  u  X
    
    • *:匹配任意长度的任意字符
    [root@hostnamectl y]# ls *
    `  10   16  22  29  35  41  48  54  60  67  73  8   86  92  99  d  G  k  N  r  U  y
    ^  100  17  23  3   36  42  49  55  61  68  74  80  87  93  a   D  h  K  o  R  v  Y
    _  11   18  24  30  37  43  5   56  62  69  75  81  88  94  A   e  H  l  O  s  V  z
    [  12   19  25  31  38  44  50  57  63  7   76  82  89  95  b   E  i  L  p  S  w  Z
    ]  13   2   26  32  39  45  51  58  64  70  77  83  9   96  B   f  I  m  P  t  W
    0  14   20  27  33  4   46  52  59  65  71  78  84  90  97  c   F  j  M  q  T  x
    1  15   21  28  34  40  47  53  6   66  72  79  85  91  98  C   g  J  n  Q  u  X
    
    • ?:匹配任意单个字符
    [root@hostnamectl y]# ls ?
    `  [  1  4  7  a  B  d  E  g  H  j  K  m  N  p  Q  s  T  v  W  y  Z
    ^  ]  2  5  8  A  c  D  f  G  i  J  l  M  o  P  r  S  u  V  x  Y
    _  0  3  6  9  b  C  e  F  h  I  k  L  n  O  q  R  t  U  w  X  z
    
    • []:匹配指定范围内的任意单个字符
    [root@hostnamectl y]# ls [a-k]
    a  A  b  B  c  C  d  D  e  E  f  F  g  G  h  H  i  I  j  J  k
    
    [root@hostnamectl y]# ls [1-4][1-4]
    11  12  13  14  21  22  23  24  31  32  33  34  41  42  43  44
    
    • [[:punct:]]:表示标点符号
    [root@hostnamectl y]# ls [[:punct:]]
    `  ^  _  [  ]
    
    • [[:lower:]]:表示小写字母
    [root@hostnamectl y]# ls [[:lower:]]
    a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
    
    
    • [[:upper:]]:表示大写字母
    [root@hostnamectl y]# ls [[:upper:]]
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
    
    
    • [[:alpha:]]:表示大小写字母
    [root@hostnamectl y]# ls [[:alpha:]]
    a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
    
    
    • [[:digit:]]:表示数字
    [root@hostnamectl y]# ls [[:digit:]]
    0  1  2  3  4  5  6  7  8  9
    
    
    • [[:alnum:]]:表示数字和大小写字母
    [root@hostnamectl y]# ls [[:alnum:]]
    0  2  4  6  8  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
    1  3  5  7  9  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  
    
    • [^]:匹配指定范围之外的任意单个字符
    [root@hostnamectl y]# ls [^[:alnum:]]
    `  ^  _  [  ]
    

    文本排序

    • 创建多行文件
    [root@hostnamectl y]# ls
    [root@hostnamectl y]# cat > abc << ?    //问号表示以问号开头以问号结尾
    > 2
    > 4
    > 6
    > 8
    > 1
    > 3
    > 5
    > 6
    > 7
    > 9
    > ?
    

    [root@hostnamectl y]# cat > aaa <<??
    > 1 w
    > 2 r
    > 3 i
    > 4 k
    > 5 a
    > 6 d
    > 7 c
    > ??
    
    [root@hostnamectl y]# cat > bbb << ??
    > 1 A
    > 2 c
    > 3 D
    > 4 C
    > 5 a
    > 6 b
    > 7 B
    > ??
    

    • 文本排序命令

    sort
    Usage: sort [OPTION]... [FILE]...

    常用的OPTION:
    -n:以数值大小进行排序
    -r:逆序排序
    -t:字段分隔符
    -r:逆序排序
    -k:以哪个字段为关键字进行排序
    -t:字段分隔符
    -u:去重,排序后相同的行只显示一次
    -f:排序时忽略字符大小写

    • -n:以数值大小进行排序
    [root@hostnamectl y]# sort -n abc
    1
    2
    3
    4
    5
    6
    6
    7
    8
    9
    
    

    • -r:逆序排序
    [root@hostnamectl y]# sort -nr abc
    9
    8
    7
    6
    6
    5
    4
    3
    2
    1
    
    

    • -k[n]:以n个字段为关键字进行排序
    [root@hostnamectl y]# sort -k2 aaa
    5 a
    7 c
    6 d
    3 i
    4 k
    2 r
    1 w
    
    • -t:字段分隔符
    [root@hostnamectl y]# sort -t' ' -k2 aaa
    5 a
    7 c
    6 d
    3 i
    4 k
    2 r
    1 w
    

    • -f:排序时忽略字符大小写
    [root@hostnamectl y]# sort -t' ' -fk2 bbb 
    1 A
    5 a
    6 b
    7 B
    2 c
    4 C
    3 D
    [root@hostnamectl y]# sort -t' ' -k2 bbb 
    5 a
    1 A
    6 b
    7 B
    2 c
    4 C
    3 D
    

    • -u:去重,排序后相同的行只显示一次(需要先排序再去重)
    [root@hostnamectl y]# sort -nu abc
    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    文本去重命令uniq

    • Usage: uniq [OPTION]... [INPUT [OUTPUT]]

    常用的OPTION:
    -c:显示文件中行重复的次数
    -d:只显示重复的行
    -u:只显示未重复的行

    • -c:显示文件中行重复的次数
    [root@hostnamectl y]# sort -n abc | uniq -c
          1 1
          1 2
          1 3
          1 4
          1 5
          2 6
          1 7
          1 8
          1 9
    
    
    • -d:只显示重复的行
    [root@hostnamectl y]# sort -n abc | uniq -d
    6
    
    • -u:只显示未重复的行
    [root@hostnamectl y]# sort -n abc | uniq -u
    1
    2
    3
    4
    5
    7
    8
    9
    

    基础命令之cut

    • Usage: cut OPTION... [FILE]...

    常用的OPTION:
    -d:指定字段分隔符,默认是空格
    -f:指定要显示的字段
    -f 1,3:显示1和3字段
    -f 1-3:显示1到3字段
    显示第一个单词列和第三个单词列

    [root@hostnamectl y]# cp /etc/passwd .
    [root@hostnamectl y]# ls
    aaa  abc  bbb  passwd
    [root@hostnamectl y]# head passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@hostnamectl y]# cut -d:-f1,3 passwd
    cut: 分界符必须是单个字符
    Try 'cut --help' for more information.
    [root@hostnamectl y]# cut -d:-f1,3 passwd
    cut: 分界符必须是单个字符
    Try 'cut --help' for more information.
    [root@hostnamectl y]# cut -d: -f1,3 passwd
    root:0
    bin:1
    daemon:2
    adm:3
    lp:4
    sync:5
    shutdown:6
    halt:7
    mail:8
    operator:11
    games:12
    ftp:14
    nobody:99
    systemd-network:192
    dbus:81
    polkitd:999
    postfix:89
    chrony:998
    sshd:74
    tom:1000
    
    • --output-delimiter=" "输出用空格隔开
    [root@hostnamectl c]# cut -d: -f1,3 --output-delimiter=" " passwd 
    root 0
    bin 1
    daemon 2
    adm 3
    lp 4
    sync 5
    shutdown 6
    halt 7
    mail 8
    operator 11
    games 12
    ftp 14
    nobody 99
    systemd-network 192
    dbus 81
    polkitd 999
    postfix 89
    chrony 998
    sshd 74
    tom 1000
    
    
    • 显示第1到3单词列
    [root@hostnamectl y]# cut -d: -f1-3 passwd
    root:x:0
    bin:x:1
    daemon:x:2
    adm:x:3
    lp:x:4
    sync:x:5
    shutdown:x:6
    halt:x:7
    mail:x:8
    operator:x:11
    games:x:12
    ftp:x:14
    nobody:x:99
    systemd-network:x:192
    dbus:x:81
    polkitd:x:999
    postfix:x:89
    chrony:x:998
    sshd:x:74
    tom:x:1000
    

    高级命令之awk

    • 显示第1个单词列和第3个单词列
    [root@hostnamectl y]# awk -F: '{print $1,$3}' passwd
    root 0
    bin 1
    daemon 2
    adm 3
    lp 4
    sync 5
    shutdown 6
    halt 7
    mail 8
    operator 11
    games 12
    ftp 14
    nobody 99
    systemd-network 192
    dbus 81
    polkitd 999
    postfix 89
    chrony 998
    sshd 74
    tom 1000
    
    • 像df -h 这种不规则输出格式用awk能更方便显示
    [root@hostnamectl c]# df -h | awk '{print $2}'
    容量
    39G
    901M
    912M
    912M
    912M
    1014M
    19G
    183M
    
    • OFS 输出分隔符
    [root@hostnamectl c]# awk 'BEGIN{FS=":";OFS=":"} {print $1,$3}' passwd
    root:0
    bin:1
    daemon:2
    adm:3
    lp:4
    sync:5
    shutdown:6
    halt:7
    mail:8
    operator:11
    games:12
    ftp:14
    nobody:99
    systemd-network:192
    dbus:81
    polkitd:999
    postfix:89
    chrony:998
    sshd:74
    tom:1000
    
    

    高级命令之sed


    • 加-i才会修改源文件,不加-i也可生成新文件 (重定向)>[new filename]
    • -n '[n][n]p'只输出打印n行或包含n的行
    [root@hostnamectl c]# sed -n '/root/p' passwd 
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    
    • 输出答应第3到5行
    [root@hostnamectl c]# sed -n '3,5p' passwd 
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    

    • 删除第十行后面所有
    [root@hostnamectl y]# sed -i '10,$d' passwd
    [root@hostnamectl y]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    

    • 修改替换所有root为runtime(只是查看效果没有改动文件)
    [root@hostnamectl y]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@hostnamectl y]# cat passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    [root@hostnamectl y]# sed 's/root/runtime/g' passwd 
    runtime:x:0:0:runtime:/runtime:/bin/bash
    

    • 只替换第一个root为runtime
    [root@hostnamectl y]# sed 's/root/runtime/1' passwd 
    runtime:x:0:0:root:/root:/bin/bash
    
    • 只替换第二个root为runtime
    [root@hostnamectl y]# sed 's/root/runtime/2' passwd 
    root:x:0:0:runtime:/root:/bin/bash
    

    文本过滤命令grep

    • grep命令根据正则表达式搜索文本,并将符合正则表达式的文本显示出来。
      默认使用基本正则表达式来过滤文本。

    • Usage: grep [OPTION]... PATTERN [FILE]...

    • 常用的OPTION:

      -i:忽略大小写
      --color:匹配到的内容高亮显示
      -v:显示没有被正则表达式匹配到的内容
      -o:只显示被正则表达式匹配到的内容
      -E:使用扩展正则表达式
      -q:静默模式,不输出任何信息
      -A #:此处的#必须是数字。被正则匹配到的内容以及其后面#行的内容都显示出来
      -B #:此处的#必须是数字。被正则匹配到的内容以及其前面#行的内容都显示出来
      -C #:此处的#必须是数字。被正则匹配到的内容及其前后各#行的内容都显示出来

    [root@hostnamectl y]# grep 'var' passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    
    • -i 忽略大小写
    [root@hostnamectl y]# grep -i 'var' passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/Var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    
    • -color默认显示
    [root@hostnamectl y]# alias 
    alias cdnet='cd /etc/sysconfig/network-scripts'
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    
    • -v取反
    [root@hostnamectl y]# grep -v 'var' passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    lp:x:4:7:lp:/Var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    
    
    • -E同时过滤多个条件
    [root@hostnamectl c]# grep -E 'root|nologin' passwd 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    
    • -q 静默输出
    [root@hostnamectl c]# grep -Eq 'root|nologin' passwd 
    [root@hostnamectl c]# echo $?       //echo $? 表示上一条命令是否成功 ==0 就是成功 ,其他值表示不成功
    0
    
    
    • -B [n] 关键字上n行
    [root@hostnamectl y]# grep -B 3 'halt' passwd 
    lp:x:4:7:lp:/Var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    
    • -B [n] 关键字下n行
    [root@hostnamectl c]# grep -A 3 'halt' passwd 
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    
    
    • C [n] 关键字上下n行
    [root@hostnamectl y]# grep -C 1 'halt' passwd 
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    

    文件查找命令find

    • 语法:find [OPTION]... 查找路径 查找标准 查找到以后的处理动作

    • 查找路径:默认为当前目录

    • 查找标准:

      -name filename:对文件名精确匹配,支持通配符

      -iname filename:文件名匹配时不区分大小写

      -regex pattern:基于正则表达式进行文件名匹配

      -user:查找某用户的所有文件

      -group:查找某组的所有文件

      -uid:根据UID进行查找

      -gid:根据GID进行查找

      -nouser:查找没有拥有者的文件

      -nogroup:查找没有属组的文件

      -type:根据文件类型进行查找

      -size:根据文件大小进行查找。如1k、1M、+10k、+10M、-1k、-10M+表示大于,-表示小于

      -mtime:根据修改时间查找
      +5:表示查找5天以前修改的文件
      -5:表示查找5天以内修改的文件

      -atime:根据访问时间查找

      -ctime:根据改变时间查找

      -perm mode:根据权限精确查找

      -perm –mode:文件权限能完全包含此mode时才符合条件

      -perm /mode:9位权限中有任何一位权限匹配都视为符合查找条件

    • 多条件组合使用:
      -a 并且

      -o 或者

      -not 取反

      ! 取反

    • 处理动作:默认动作是显示到屏幕上

      -print:打印到屏幕上

      -ls:类似ls –l的形式显示每一个文件的详细信息

      -delete:删除查找到的文件

      -fls /path/to/somefile:将查找到的所有文件的长格式信息保存至指定文件中

      -ok COMMAND {} ;:对查找到的所有文件执行COMMAND,每次操作都需要用户确认

      -exec COMMAND {} ;:对查找到的所有文件执行COMMAND,操作不需要确认
      xargs:通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可

    • 当前路径用文件名查找

    [root@hostnamectl ~]# find tem
    tem
    

    • -name filename:当前路径用文件名查找,对文件名精确匹配,支持通配符
    [root@hostnamectl ~]# find -name tem
    ./tem
    
    • 指定路径超查找
    [root@hostnamectl ~]# find /etc/ -name tmp
    /etc/selinux/tmp
    

    • -iname filename:文件名匹配时不区分大小写
    [root@hostnamectl ~]# find -iname passwd 
    ./y/passwd
    

    • -user:查找某用户的所有文件
    [root@hostnamectl ~]# find -user root -name passwd
    ./y/passwd
    
    [root@hostnamectl ~]# find -user root
    .
    ./.bash_logout
    ./.bash_profile
    ./.cshrc
    ./.tcshrc
    ./anaconda-ks.cfg
    ./.bash_history
    ./.bashrc
    ./qwq
    ./a
    ./a/qwq
    ./a/c
    ./a/bbb
    ./a/a
    ./bbb
    ./c
    ./wqw
    ./cc
    ./abc
    ./vbn
    ./acb
    ./20190910
    ./.lesshst
    ./tem
    ./y
    ./y/abc
    ./y/aaa
    ./y/bbb
    ./y/passwd
    
    
    [root@hostnamectl ~]# find / -user root
    /mnt/addons/ResilientStorage/repodata/4e6f842c87e87b11e3ac4950ef74b8066660bb64ac386cc6f0b58688676bd707-other.sqlite.bz2
    /mnt/addons/ResilientStorage/repodata/5b1866be7d672aa3312ac506d752457999c61f76407fa00bfc8ffadbbe3acc7a-productid.gz
    /mnt/addons/ResilientStorage/repodata/5b501f162c7d546a3d92778f0d55382994b5a7b9da0122dfd862cf63310cae7e-primary.xml.gz
    /mnt/addons/ResilientStorage/repodata/660afe5874f40e7f8b336f677050024d2b056ad8fef7b83028eb48943870f6e1-comps-Server-ResilientStorage.x86_64.xml
    /mnt/addons/ResilientStorage/repodata/89eee7141f44a87ee60b6c83bb821c89d65a94f1ce7b27a0d7f7ff49b82af6d3-comps-Server-ResilientStorage.x86_64.xml.gz
    /mnt/addons/ResilientStorage/repodata/94da878a802a92f6f6147c43e892eabe2ecaf58fe475539ead8ee3bad4b6222e-primary.sqlite.bz2
    /mnt/addons/ResilientStorage/repodata/TRANS.TBL
    
    

    • -nouser:查找没有拥有者的文件
    [root@hostnamectl /]# find -nouser
    

    • -nogroup:查找没有属组的文件
    [root@hostnamectl /]# find -nogroup
    

    • -type:根据文件类型进行查找
    [root@hostnamectl /]# find -type b
    ./dev/dm-2
    ./dev/dm-1
    ./dev/dm-0
    ./dev/sr0
    ./dev/sda2
    ./dev/sda1
    ./dev/sda
    
    • -size:根据文件大小进行查找。如1k、1M、+10k、+10M、-1k、-10M
      +表示大于,-表示小于
    [root@hostnamectl ~]# find -size +1k
    ./anaconda-ks.cfg
    ./.bash_history
    ./vbn
    
    [root@hostnamectl ~]# find -size -1k
    ./a/bbb
    ./bbb
    ./20190910
    
    

    • -mtime:根据修改时间查找
      +5:表示查找5天以前修改的文件
      -5:表示查找5天以内修改的文件
    [root@hostnamectl ~]# find -mtime -1
    .
    ./.bash_history
    ./a
    ./a/a
    ./tem
    ./y
    ./y/abc
    ./y/aaa
    ./y/bbb
    ./y/passwd
    
    • -a并且,多条命令
    [root@hostnamectl c]# find -mtime -5 -a -name a
    ./a
    
    

    • -print:打印到屏幕上
    • -ls:类似ls –l的形式显示每一个文件的详细信息
    [root@hostnamectl ~]# find -type f -name anaconda-ks.cfg 
    ./anaconda-ks.cfg
    ···
    ···bash
    [root@hostnamectl ~]# find -type f -name anaconda-ks.cfg -print
    ./anaconda-ks.cfg
    
    [root@hostnamectl ~]# find -type f -name anaconda-ks.cfg -ls
    100663362    4 -rw-------   2 root     root         1451 9月  6 22:57 ./anaconda-ks.cfg
    

    • -fls :将查找到的所有文件的长格式信息保存至指定文件中
    [root@hostnamectl c]# find -type f -fls acc.txt
    [root@hostnamectl c]# ls
    a  acc.txt  passwd
    [root@hostnamectl c]# rm -f acc
    [root@hostnamectl c]# cat acc.txt 
    100663381    4 -rw-r--r--   1 root     root          883 9月 15 15:01 ./passwd
    100663405    0 -rw-r--r--   1 root     root            0 9月 15 17:41 ./acc.txt
    [root@hostnamectl c]# 
    
    

    • -delete:删除查找到的文件
    [root@hostnamectl ~]# ls
    20190910  a  abc  acb  anaconda-ks.cfg  bbb  c  cc  qwq  tem  vbn  wqw  y
    [root@hostnamectl ~]# find . -name tem -type d -delete
    [root@hostnamectl ~]# ls
    20190910  a  abc  acb  anaconda-ks.cfg  bbb  c  cc  qwq  vbn  wqw  y
    

    • -exec COMMAND {} ;:对查找到的所有文件执行COMMAND,操作不需要确认
    [root@hostnamectl ~]# ls
    20190910  a  abc  acb  anaconda-ks.cfg  bbb  c  cc  qwq  vbn  wqw  y
    [root@hostnamectl ~]# find . a -type d -exec rm -rf {} ;
    rm: refusing to remove "." or ".." directory: skipping "."
    find: ‘./a’: 没有那个文件或目录
    find: ‘./c’: 没有那个文件或目录
    find: ‘./y’: 没有那个文件或目录
    find: ‘a’: 没有那个文件或目录
    [root@hostnamectl ~]# ls
    20190910  abc  acb  anaconda-ks.cfg  bbb  cc  qwq  vbn  wqw
    [root@hostnamectl ~]# 
    
    [root@hostnamectl ~]# ls
    a  anaconda-ks.cfg  c
    [root@hostnamectl ~]# find -name a -type d -exec mv {} c ;
    find: ‘./a’: 没有那个文件或目录
    [root@hostnamectl ~]# ls
    anaconda-ks.cfg  c
    [root@hostnamectl ~]# ls c
    a
    
    

    • -ok COMMAND {} ;:对查找到的所有文件执行COMMAND,每次操作都需要用户确认
    [root@hostnamectl ~]# ls
    anaconda-ks.cfg  ccc
    [root@hostnamectl ~]# find . ccc -type d -ok rm -rf {} ;
    < rm ... . > ? y
    rm: refusing to remove "." or ".." directory: skipping "."
    < rm ... ./ccc > ? y
    find: ‘./ccc’: 没有那个文件或目录
    find: ‘ccc’: 没有那个文件或目录
    [root@hostnamectl ~]# ls
    anaconda-ks.cfg
    
    • xargs:通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可
    [root@hostnamectl c]# ls
    a  acc.txt  passwd
    [root@hostnamectl c]# find -type d | xargs rm -rf
    rm: refusing to remove "." or ".." directory: skipping "."
    [root@hostnamectl c]# ls
    acc.txt  passwd
    
  • 相关阅读:
    几款JS地图插件比较
    Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换2,使用导航栏控制,以及视图之间传值。
    学习嵌入式—导火线
    Linux MySQL 5.1源码安装
    QT 一些非常常用的操作
    QT 下把编辑框内的中文字符转换为 char*
    delphi datasnap 心跳包
    ddd
    Qt 如何处理密集型耗时的事情(频繁调用QApplication::processEvents)
    Python基础-输入输出(IO)
  • 原文地址:https://www.cnblogs.com/guilai/p/11527536.html
Copyright © 2020-2023  润新知