2026年3月23
知识点回顾
1.find命令
作用:查找系统中的文件
#按文件类型查找
find /opt -type f
#按名称查找
find /opt -name "*.txt"
#按文件大小查找
find /opt -size +10M
#按时间查找
find /opt -mtime 0
#按inode号查找
find /opt -inum inode号
#限制查找层级
find /opt -maxdepth 1
#并且关系
find /opt -type f -a -size 10
#或者关系
find /opt -type f -o -type d
2.find结果交给其他命令
1.xargs
find /opt -name ".txt"|xargs -i cp {} /tmp/
2.ecec
find /opt -name ".txt" -exec cp {} /tmp \;
3.``
mv `find /opt -name ".txt"` /tmp/
4.$()
mv $(find /opt -name ".txt") /tmp/
01.打包压缩
为什么打包?
1.减少带宽使用
2.占用磁盘空间
3.减少磁盘IO I INPUT(写入磁盘) OUTPUT(读取磁盘) 网站(看相当于读取磁盘,上传、评论写入磁盘)
4.打包压缩会极度消耗CPU、业务的低谷期进行打包
1. tar打包压缩
语法结构:
tar [参数选项] 压缩包的名字 压缩的文件或者目录
tar -zcvf all.tar.gz 1.txt 2.txt
打包 参数 框子 香蕉 黄瓜
-z #使用zip压缩
-c #创建文件create
-v #显示打包过程
-f #指定文件名称
-xf #解压
-C #指定解压的位置
-------------------------------------------
-tf #查看压缩包里都打包了哪些文件
--exclude=1.txt #排除1.txt
--exclude-from=/opt/ex.txt #从ex.txt文件获取文件名进行排除
-P #不提示/
-------------------------------------------
tar -zcvf a.tar.gz 1.txt 2.txt
tar -zcf b.tar.gz /etc/hosts 2.txt oldboy
tar -zcvf /opt/all.tar.gz /etc/hosts /etc/passwd
tar -xf a.tar.gz #解压到当前
tar -xf a.tar.gz -C /opt/ #指定解压到/opt目录下
案例1:打包当前的1.txt、压缩包的名字叫11.tar.gz
[root@oldboy ~]# tar -zcvf 11.tar.gz 1.txt
1.txt
[root@oldboy ~]# ll
总用量 12
-rw-r--r-- 1 root root 108 3月 23 02:15 11.tar.gz
-rw-r--r-- 1 root root 0 3月 23 00:10 1.txt
案例2:打包压缩多个文件
[root@oldboy ~]# tar -zcvf 2.tar.gz 2.txt oldboy/
2.txt
oldboy/
[root@oldboy ~]# ll
总用量 8
-rw-r--r-- 1 root root 108 3月 23 02:15 11.tar.gz
-rw-r--r-- 1 root root 0 3月 23 00:10 1.txt
-rw-r--r-- 1 root root 145 3月 23 02:17 2.tar.gz
案例3:打包当前的1.txt和/etc/hosts文件为3.tar.gz
[root@oldboy ~]# tar -zcvf 3.tar.gz 1.txt /etc/hosts
1.txt
tar: Removing leading `/' from member names #系统为了操作安全删除/
/etc/hosts
tar: Removing leading `/' from hard link targets #因为打包的是一个软连接
案例4:打包不想提示成员中删除/、最好到相对路径进行打包
[root@oldboy ~]# cd /etc/
[root@oldboy etc]# ll hosts
-rw-r--r-- 1 root root 158 Jun 23 2020 hosts
[root@oldboy etc]# tar -zcvf h.tar.gz hosts
hosts
[root@oldboy etc]# ll h.tar.gz
-rw-r--r-- 1 root root 167 Mar 23 02:25 h.tar.gz
案例5:将打包的文件放到一个指定的目录
[root@oldboy etc]# tar -zcvf /opt/h.tar.gz hosts
hosts
[root@oldboy etc]# ll /opt/
total 4
-rw-r--r-- 1 root root 167 Mar 23 02:27 h.tar.gz
案例6:不提示打包过程省略v
[root@oldboy ~]# tar -zcf all.tar.gz 1.txt 2.txt
[root@oldboy ~]# ll
total 4
-rw-r--r-- 1 root root 0 Mar 23 00:10 1.txt
-rw-r--r-- 1 root root 0 Mar 23 00:10 2.txt
-rw-r--r-- 1 root root 0 Mar 23 00:10 3.txt
-rw-r--r-- 1 root root 0 Mar 23 00:10 4.txt
-rw-r--r-- 1 root root 116 Mar 23 02:29 all.tar.gz
案例7:查看压缩包里都有啥
[root@oldboy ~]# tar -tf all.tar.gz
1.txt
2.txt
案例8:解压缩、将当前的all.tar.gz解压
[root@oldboy ~]# ll
total 4
-rw-r--r-- 1 root root 116 Mar 23 02:29 all.tar.gz
drwxr-xr-x 2 root root 6 Mar 23 02:16 oldboy
[root@oldboy ~]# tar -xf all.tar.gz
[root@oldboy ~]# ll
total 4
-rw-r--r-- 1 root root 0 Mar 23 00:10 1.txt
-rw-r--r-- 1 root root 0 Mar 23 00:10 2.txt
-rw-r--r-- 1 root root 116 Mar 23 02:29 all.tar.gz
drwxr-xr-x 2 root root 6 Mar 23 02:16 oldboy
案例9:注意解压的路径,默认你在哪里就解压到哪里
[root@oldboy opt]# ll
total 0
[root@oldboy opt]# tar -xf /root/all.tar.gz
[root@oldboy opt]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 00:10 1.txt
-rw-r--r-- 1 root root 0 Mar 23 00:10 2.txt
案例10.指定解压的位置,将all.tar.gz解压到/opt目录
[root@oldboy ~]# rm -rf /opt/*
[root@oldboy ~]# ll /opt/
total 0
[root@oldboy ~]# tar -xf all.tar.gz -C /opt/
[root@oldboy ~]# ll /opt/
total 0
-rw-r--r-- 1 root root 0 Mar 23 00:10 1.txt
-rw-r--r-- 1 root root 0 Mar 23 00:10 2.txt
案例11:排除打包当前的1.txt和3.txt(笔记)
[root@oldboy ~]# touch {1..4}.txt
[root@oldboy ~]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 04:15 1.txt
-rw-r--r-- 1 root root 0 Mar 23 04:15 2.txt
-rw-r--r-- 1 root root 0 Mar 23 04:15 3.txt
-rw-r--r-- 1 root root 0 Mar 23 04:15 4.txt
[root@oldboy ~]# tar -zcvf all.tar.gz --exclude=1.txt --exclude=3.txt *.txt
2.txt
4.txt
案例12:排除打包文件中的名字(笔记)
#/opt/ex.txt 中存放不打包的名字
[root@oldboy ~]# cat /opt/ex.txt
1.txt
2.txt
#打包的时候将ex.txt排除掉
[root@oldboy ~]# tar -zcvf all.tar.gz --exclude-from=/opt/ex.txt *.txt
3.txt
4.txt
2. zip打包压缩
语法案例:zip 名字 文件|目录
zip a.zip 1.txt 2.txt
zip /opt/b.zip /etc/hosts /etc/passwd #打包到/opt目录下
unzip b.zip #解压到当前 路径
unzip b.zip -d /opt #指定解压到/opt
案例1:打包1.txt、压缩包名为1.tar.gz
[root@oldboy ~]# zip 1.zip 1.txt
adding: 1.txt (stored 0%)
[root@oldboy ~]# ll
total 4
-rw-r--r-- 1 root root 0 Mar 23 04:15 1.txt
-rw-r--r-- 1 root root 160 Mar 23 04:26 1.zip
案例2:打包多个文件
[root@oldboy ~]# zip all.zip *.txt
adding: 1.txt (stored 0%)
adding: 2.txt (stored 0%)
adding: 3.txt (stored 0%)
adding: 4.txt (stored 0%)
案例3:解压
[root@oldboy ~]# unzip 1.zip
案例4:指定解压到/opt目录
[root@oldboy ~]# unzip 1.zip -d /opt/
3.包命名
主机名称:web01 web02 db01 db02 web01.tar.gz
`hostname`
`date +%F`
案例1:以主机名字或者IP地址命名
[root@oldboy ~]# tar -zcvf oldboy.tar.gz linux.txt
linux.txt
[root@oldboy ~]# ll
total 4
-rw-r--r-- 1 root root 0 Mar 23 04:34 linux.txt
-rw-r--r-- 1 root root 114 Mar 23 04:34 oldboy.tar.gz
案例2:以当前主机命名、通用的方式
[root@oldboy ~]# tar -zcvf `hostname`.tar.gz linux.txt
linux.txt
[root@oldboy ~]# ll
total 4
-rw-r--r-- 1 root root 0 Mar 23 04:34 linux.txt
-rw-r--r-- 1 root root 114 Mar 23 04:39 oldboy.tar.gz
--------
[root@oldboy ~]# echo `hostname`_`hostname -I|awk '{print $1}'`.tar.gz
oldboy_10.0.0.200.tar.gz
[root@oldboy ~]# tar -zcvf `hostname`_`hostname -I|awk '{print $1}'`.tar.gz linux.txt
linux.txt
[root@oldboy ~]# ll
total 8
-rw-r--r-- 1 root root 0 Mar 23 04:34 linux.txt
-rw-r--r-- 1 root root 114 Mar 23 04:42 oldboy_10.0.0.200.tar.gz
-rw-r--r-- 1 root root 114 Mar 23 04:39 oldboy.tar.gz
-------
拼着玩
[root@oldboy ~]# date +%F
2026-03-23
[root@oldboy ~]# tar -zcvf `date +%F`.tar.gz linux.txt
linux.txt
[root@oldboy ~]# ll 2026-03-23.tar.gz
-rw-r--r-- 1 root root 114 Mar 23 04:43 2026-03-23.tar.gz
[root@oldboy ~]# date +%F-%H-%M-%S
2026-03-23-04-44-47
[root@oldboy ~]# date +%F-%H-%M-%S
2026-03-23-04-44-59
4.特殊符号
; #命令的分隔符 前面命令不管成功还是失败都会继续执行;后面的命令
&& #前面的命令执行成功后才会继续执行&&后面的命令
|| #前面的命令执行失败后才会进行执行||后的命令
案例1:分号的用法、命令的拼接;
[root@oldboy ~]# echo aa ; mkdir oldboy ; cd oldboy;touch a.txt
aa
[root@oldboy oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 04:49 a.txt
[root@oldboy oldboy]# pwd
/root/oldboy
----------------
[root@oldboy ~]# echo a; mkdir oldboy;c oldboy;touch a.txt
a
-bash: c: command not found
[root@oldboy ~]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 05:34 a.txt
drwxr-xr-x 2 root root 6 Mar 23 05:34 oldboy
----------------
案例2:&&前面的命令必须成功
#成功
[root@oldboy ~]# echo a && mkdir oldboy && cd oldboy && touch a.txt
a
[root@oldboy oldboy]# pwd
/root/oldboy
[root@oldboy oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 05:36 a.txt
--------
#错误
[root@oldboy ~]# echo a && mkdir oldboy && c oldboy && touch a.txt
a
-bash: c: command not found
[root@oldboy ~]# ll
total 0
drwxr-xr-x 2 root root 6 Mar 23 05:38 oldboy
案例3:将ping的结果定向到空,输出我们想要的结果
[root@oldboy ~]# ping -c1 -W1 www.baidu.com &>/dev/null
[root@oldboy ~]# ping -c1 -W1 www.baidu.com &>/dev/null && echo ok
ok
[root@oldboy ~]# ping -c1 -W1 www.baidu.comaaaaa &>/dev/null && echo ok
案例4:|| 前面的命令必须失败才会执行后面的命令
[root@oldboy ~]# echo a || mkdir oldboy || c oldboy || touch a.txt
a
[root@oldboy ~]# ll
total 0
-----------
[root@oldboy ~]# ech a || mkdi oldboy || c oldboy || touch a.txt
-bash: ech: command not found
-bash: mkdi: command not found
-bash: c: command not found
[root@oldboy ~]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 05:44 a.txt
案例5:如果目录不存在则创建
[root@oldboy ~]# cd oldboy || mkdir oldboy
-bash: cd: oldboy: No such file or directory
[root@oldboy ~]# ll
total 0
drwxr-xr-x 2 root root 6 Mar 23 05:46 oldboy
案例6:ping的通输出ok 不通输出error
[root@oldboy ~]# ping -c1 -W1 www.baidu.com &>/dev/null && echo ok || echo error
ok
[root@oldboy ~]# ping -c1 -W1 www.baidu.comaaaa &>/dev/null && echo ok || echo error
error
02.正则表达式
作用:过滤文件内容 awk sed grep
普通正则
扩展正则
1.符号:^
作用:过滤文件中以啥字符开头的行
环境准备:
[root@oldboy ~]# head -10 /etc/passwd > oldboy.txt
[root@oldboy ~]# cat oldboy.txt
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
grep 语法结构
grep '字符串' file
df -h|grep '字符串'
[root@oldboy ~]# df -h|grep 'sda3'
/dev/sda3 48G 14G 35G 29% /
案例1:查找出文件中包含adm的行
[root@oldboy ~]# grep 'adm' oldboy.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
案例2:找出文件内容以r开头的行
[root@oldboy ~]# grep '^r' oldboy.txt
root:x:0:0:root:/root:/bin/bash
案例3:给grep临时配置一个颜色
[root@oldboy ~]# alias grep="grep --color=auto"
[root@oldboy ~]# grep 'adm' oldboy.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
案例4:找出以a开头的行
[root@oldboy ~]# grep "^a" oldboy.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
案例5:查找以adm开头的行
[root@oldboy ~]# grep "^adm" oldboy.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
2.符号:$
作用:过滤以字符串结尾的行
案例1:找出以h结尾的行
[root@oldboy ~]# grep 'h$' oldboy.txt
root:x:0:0:root:/root:/bin/bash
案例2:查找以n结尾的行
[root@oldboy ~]# grep 'n$' oldboy.txt
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
案例3:查找以h和空格结尾的行
[root@oldboy ~]# grep 'h$' oldboy.txt
[root@oldboy ~]# grep 'h $' oldboy.txt
root:x:0:0:root:/root:/bin/bash
案例4:查看行的末尾以什么结尾的?
cat -A #在每行内容结尾加$
[root@oldboy ~]# cat -A oldboy.txt
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$
案例5:过滤出文件中以#开头的行
[root@oldboy ~]# cat oldboy.txt
#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@oldboy ~]# grep '^#' oldboy.txt
#root:x:0:0:root:/root:/bin/bash
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
案例6:过滤出文件中的空行
[root@oldboy ~]# grep '^$' oldboy.txt
[root@oldboy ~]# grep -n '^$' oldboy.txt
4:
8:
案例7:对过滤到的注释进行取反
grep 取反 -v
[root@oldboy ~]# grep oldboy 1.txt
oldboy
[root@oldboy ~]# grep -v oldboy 1.txt
oldgirl
shell
mysql
-----------------
[root@oldboy ~]# grep '^#' oldboy.txt
#root:x:0:0:root:/root:/bin/bash
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
------------------------------
[root@oldboy ~]# grep -v '^#' oldboy.txt
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
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
案例8:过滤出文件中的注释和空格进行取反
[root@oldboy ~]# grep -v '^#' oldboy.txt | grep -v '^$'
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
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
今日重点
1.打包压缩
tar -zcvf a.tar.gz 1.txt
tar -zcvf /opt/a.tar.gz /etc/passwd
tar -xf a.tar.gz #解压到当前目录
tar -xf a.tar.gz -C /opt/ #指定解压到/opt目录
2.zip
zip a.zip 1.txt
zip /opt/a.zip /etc/passwd #打包指定压缩包的位置
unzip a.zip
unzip a.zip -d /opt/ #指定解压到/opt目录
3.特殊符号
;
&&
||
4.正则表达式
grep '^a' file #查找以a开头的行
grep 'h$' file #查找以h结尾的行
正文完