Linux基础命令注释(三)

Linux基础命令注释(三)

文章目录

  • Linux基础命令注释(三)
    • 安装压缩工具
    • 压缩解压缩
      • gzip压缩与解压缩,不会保留源文件
      • bzip2 压缩与解压缩,不保留原文件
      • zip 压缩与解压缩(归档),会保留源文件
      • XZ 压缩解压缩,不保留原文件
    • 归档工具tar
    • 通配符
    • 文本排序
    • 文本去重命令uniq
    • 基础命令之cut
    • 高级命令之awk
    • 高级命令之sed
    • 文本过滤命令grep
    • 文件查找命令find

安装压缩工具

  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

你可能感兴趣的:(linux)