学习运维第六天:文件查找和打包压缩

文件查找和打包压缩

文件查找

在文件系统上查找符合条件的文件

文件查找:

  • 非实时查找(数据库查找):locate

  • 实时查找:find

locate
  • locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db

  • 索引的构建是在系统较为空闲时自动进行(周期任务),执行updatedb可以更新数据库

  • 索引构建过程需要遍历整个根文件系统,很消耗资源

  • locate和update命令来自于mlocate包

工作特点:

  • 查找速度快

  • 模糊查找

  • 非实时查找

  • 搜索的是文件全路径,不仅仅是文件名

  • 可能只搜索用户具备读取和执行权限的目录

如果没有程序,可先安装

#rehl系列
yum install -y mlocate
#ubuntu
apt install -y Plocate

格式:

locate [OPTION]... [PATTERN]...

#常用选项
-A|--all             	#输出所有能匹配到的文件名,不管文件是否存在
-b|--basename         	#仅匹配文件名部份,而不匹配路径中的内容
-c|--count             	#只输出找到的数量
-d|--database DBPATH   #指定数据库
-e|--existing         	#仅打印当前现有文件的条目
-L|--follow         	#遇到软链接时则跟随软链接去其对应的目标文件中查找 (默认)
-i|--ignore-case       	#忽略大小写
-l|--limit|-n N 		#只显示前N条匹配数据
-P|--nofollow, -H     	#不跟随软链
-r|--regexp REGEXP     	#使用基本正则表达式
--regex           		#使用扩展正则表达式
-s|--stdio             	#忽略向后兼容
-w|--wholename         	#全路径匹配,就是只要在路径里面出现关键字(默认)


#注意
#文件新创建和删除,无法马上更新locate数据库,需要手动更新
updatedb
find

find 是实时查找工具,通过遍历指定路径完成文件查找;

工作特点:

  • 查找速度略慢

  • 精确查找

  • 实时查找

  • 找条件丰富

  • 只搜索用户具备读取和执行权限的目录

格式:

#find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

find [OPTION]... [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录

查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所 有文件

处理动作:对符合条件的文件做操作,默认输出至屏幕

指定搜索目录层级
-maxdepth N #最大搜索目录深度,指定目录下的文件为第1级
-mindepth N #最小搜索目录深度

#示例
#最大搜索深度
[root@ubuntu2204 ~]# find /etc/ -maxdepth 2

#最小搜索深度
[root@ubuntu2204 ~]# find /etc/ -mindepth 2

#仅搜索第二层目录
[root@ubuntu2204 ~]# find /etc/ -maxdepth 2 -mindepth 2
先处理文件再处理目录
-depth #先处理文件

#示例
[root@ubuntu2204 ~]# tree -a
.
├── dir1
│   ├── dir2
│   │   ├── dir3
│   │   │   ├── fx
│   │   │   └── fy
│   │   ├── fa
│   │   └── fb
│   ├── f1
│   └── f2
├── fstab
└── .issue
3 directories, 8 files

#默认先显示目录
[root@ubuntu2204 ~]# find
.
./dir1
./dir1/dir2
./dir1/dir2/dir3
./dir1/dir2/dir3/fx
./dir1/dir2/dir3/fy
./dir1/dir2/fa
./dir1/dir2/fb
./dir1/f1
./dir1/f2
./fstab
./.issue

#先显示文件
[root@ubuntu2204 ~]# find -depth
./dir1/dir2/dir3/fx
./dir1/dir2/dir3/fy
./dir1/dir2/dir3
./dir1/dir2/fa
./dir1/dir2/fb
./dir1/dir2
./dir1/f1
./dir1/f2
./dir1
./fstab
./.issue
.
根据文件名和inode查找
-name name 		#支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
-iname name 	#不区分字母大小写
-inum number 	#按inode号查找
-samefile name 	#相同inode号的文件
-links n   		#链接数为n的文件
-regex "PATTERN"   #以PATTERN匹配整个文件路径,而非文件名称
根据属主属组查找
-user USERNAME 		#查找属主为指定用户(UID)的文件
-group GRPNAME 		#查找属组为指定组(GID)的文件
-uid UserID 		#查找属主为指定的UID号的文件
-gid GroupID 		#查找属组为指定的GID号的文件
-nouser 			#查找没有属主的文件
-nogroup 			#查找没有属组的文件
根据文件类型查找
-type TYPE 	#指定文件类型
#type 值
f #普通文件
d #目录文件
l #符号链接文件
s #套接字文件
b #块设备文件
c #字符设备文件
p #管道文件
空文件或目录
-empty 	#空文件或空目录

#示例
#空文件或空目录
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty
dir1/dir2/dir3/fx
dir1/dir2/dir3/fy
dir1/dir2/dir3/dir4

#查找空目录
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty -type d
dir1/dir2/dir3/dir4

#查找空文件
[root@ubuntu2204 ~]# find dir1/dir2/dir3/ -empty -type f
dir1/dir2/dir3/fx
dir1/dir2/dir3/fy
组合条件
-a 		#与,多条件默认就是与关系,可省略
-o 		#或
-not|! #非

德·摩根定律:

  • (非A)且(非B)=非(A或B)

  • (非A)或(非B)=非(A且B)

排除目录
-prune #跳过,排除指定目录,必须配合 -path使用

#示例
#查找所有 txt文件
[root@ubuntu2204 ~]# find -name "*.txt"
./dir1/fa.txt
./dir1/fb.txt
./test-a.txt
./test-b.txt
./dir4/f-x.txt
./dir4/f-y.txt
#排除 dir1 目录中的 txt 文件,但还是会输出 dir1
[root@ubuntu2204 ~]# find -path './dir1' -prune -o -name "*.txt"
./dir1
./test-a.txt
./test-b.txt
./dir4/f-x.txt
./dir4/f-y.txt

#排除多个目录
[root@ubuntu2204 ~]# find \( -path './dir1' -o -path './dir4' \) -prune -o -
name "*.txt" -print
./test-a.txt
./test-b.txt
根据文件大小来查找
-size [+|-]N UNIT # N为数字,UNIT为常用单位 k, M, G, c(byte) 等

#解释
10k 		#表示(9k,10k],大于9k 且小于或等于10k
-10k 		#表示[0k,9k],大于等于0k 且小于或等于9k
+10k 		#表示(10k,∞),大于10k
根据时间戳
#以天为单位
-atime [+|-]N
-mtime [+|-]N
-ctime [+|-]N

#以分钟为单位
-amin [+|-]N
-mmin [+|-]N
-cmin [+|-]N

#解释
N #表示[N,N+1),大于或等于N,小于N+1,表示第N天(分钟)
+N #表示[N+1,∞],大于或等于N+1,表示N+1天之前(包括) 
-N #表示[0,N),大于或等于0,小于N,表示N天(分钟)内
根据权限查找
-perm [/|-]MODE

MODE 	#精确权限匹配
/MODE 	#任何一类(u,g,o)对象的权限中只要有一位匹配即可,表示或者(or)关系
+MODE 	#从CentOS 7开始己淘汰,+MODE就等于MODE精确权限匹配
-MODE 	#每一类对象都必须同时拥有指定权限,表示与(and)关系
 		#0 如果要找时权限位上的值为0,则表示不关注该角色权限
正则表达式
-regextype type #正则表达式类型,emacs|posix-awk|posix-basic|posixegrep|posix-extended
-regex pattern #正则表达式

#示例
[root@ubuntu2204 ~]# find -regextype posix-egrep -regex ".*log"
./ls.log
[root@ubuntu2204 ~]# find -regextype posix-egrep -regex ".*5.*"
./f-5.txt
处理动作
-print 		#默认的处理动作,显示至屏幕
-print0 	#不换行输出,常用于配合xargs
-ls 		#类似于对查找到的文件执行"ls -ils"命令格式输出
-fls file 	#查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete 	#删除查找到的文件,慎用!
-ok COMMAND {} \; #对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; #对查找到的每个文件执行由COMMAND指定的命令
{} 			#用于引用查找到的文件名称自身
参数替换 xargs

由于很多命令不支持管道|来传递参数,为了使用更灵活的参数,我们就要用 xargs 产生命令参数,

xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔,使其成为另一个命令的参 数,

另外,许多命令不能接受过多参数,命令执行可能会失败,xargs 也可以解决此问题;

格式:

xargs [OPTION]... COMMAND [INITIAL-ARGS]...

#常用选项
-0|--null 					#用 assic 中的0或 null 作分隔符
-a|--arg-file=FILE         	#从文件中读入作为输入
-d|--delimiter=CHARACTER   	#指定分隔符
-E END                     	#指定结束符,执行到此处时停止,不管后面的数据
-L|--max-lines=N   			#从标准输入一次读取N行送给 command 命令
-l               			#同上
-n|--max-args=MAX-ARGS     	#一次执行用几个参数
-p|--interactive           	#每次执行前确认
-r|--no-run-if-empty       	#当xargs的输入为空的时候则停止xargs,不用再去执行了
-s|--max-chars=MAX-CHARS   	#命令行最大字符数
-t|--verbose               	#显示过程,先打印要执行的命令
-x|--exit                   #退出,主要配合-s使用

压缩和解压缩

主要针对单个文件压缩,而非目录

compress 和 uncompress

此工具来自于ncompress包,此工具目前已经很少使用

对应的文件是 .Z 后缀

格式:

compress [OPTION]... [FILE]...
uncompress [OPTION]... [FILE]...

#常用选项
-d   #解压缩,相当于于uncompress
-c   #结果输出至标准输出,不删除原文件
-f   #覆盖己存在目标文件
-v   #显示过程
-r   #递归压缩目录里面所有文件
gzip和gunzip

来自于 gzip 包

对应的文件是 .gz 后缀

格式:

gzip [OPTION]... FILE ...
gunzip [OPTION]... FILE ...

#常用选项
-c|--stdout     #将压缩数据输出到标准输出中,并保留原文件
-d|--decompress #解压缩,相当于gunzip
-f|--force       #覆盖己存在目标文件
-k|--keep       #保留原文件
-l|--list       #显示原文件大小,压缩文件大小,压缩比,压缩前文件名
-q|--quiet       #安静模式,忽略警告
-r|--recursive     #递归压缩目录内所有文件
-S|--suffix=SUF #指定压缩文件后缀
-t|--test       #测试,检测压缩文件是否完整
-v|--verbose     #显示过程
-1|--fast       #最快压缩,压缩比最底,但压缩速度快
-9|--best       #最好压缩,压缩比最高,但压缩速度慢
-N #指定压缩等级,取值为1-9之间,默认6
bzip2和bunzip2

来自于 bzip2 包

对应的文件是 .bz2 后缀

格式:

bzip2 [OPTION]... FILE ...
bunzip2 [OPTION]... FILE ...

#常用选项
-d|--decompress 	#解压缩,相当于bunzip2
-z|--compress       #强制压缩
-k|--keep           #保留原文件
-f|--force         	#覆盖己存在目标文件
-t|--test           #测试,检测压缩文件是否完整
-c|--stdout       	#将压缩数据输出到标准输出中,并保留原文件
-q|--quiet         	#安静模式,忽略警告
-v|--verbose       	#显示过程
-N           		#指定压缩等级,取值为1-9之间,默认9
--fast             	#同 -1
--best             	#同 -9
xz 和 unxz

来自于 xz 包

对应的文件是 .xz 后缀

格式:

xz [OPTION]... FILE ...
unxz [OPTION]... FILE ...

#常用选项
-z|--compress       #强制压缩
-d|--decompress     #解压缩,相当于unxz
-t|--test           #测试,检测压缩文件是否完整
-l|--list           #查看压缩文件相关信息
-k|--keep           #保留原文件
-f|--force         	#覆盖己存在目标文件
-c|--stdout       	#将压缩数据输出到标准输出中,并保留原文件
-T|--threads=NUM   	#开多线程,默认1
-q|--quiet         	#安静模式,忽略警告
-v|--verbose       	#显示过程
-N           		#指定压缩等级,取值为1-9之间,默认6
zip 和 unzip

zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息

分别来自于 zip 和 unzip 包

对应的文件是 .zip 后缀

格式:

zip [OPTION]... zipfile [FILE]...
unzip [OPTION]... zipfile [FILE]...

#zip常用选项
-f   #更换较新的文件到压缩文件内
-u   #如果压缩包内有,则更新,如果没有,则追加进去
-d   #从压缩包内删除指定的文件
-m   #将文件压缩之后,删除原始文件
-r   #递归压缩目录      
-j   #只保存文件名称及其内容,而不存放任何目录名称              
-l   #压缩文件时,把LF字符置换成LF+CR字符,unzip -l 表示显示压缩文件的内容
-1   #最快压缩,数字1              
-9   #最高压缩比,数字9
-q   #安静模式             
-v   #显示过程
-c   #替每个被压缩的文件加上注释
-z   #给压缩包加注释,unzip -z 查看注释
-x   #压缩时排除指定文件
-i   #仅压缩指定文件
-D   #压缩文件内不建立目录名称
-T   #测试,检测压缩文件是否完整       
-X   #不保存额外的文件属性
-y   #直接保存符号连接,而非该链接所指向的文件
-n   #不压缩以特定字符串结尾的文件
-P 	 #加密码

#unzip常用选项
-p 		#将压缩内容通过管道传送     
-l 		#显示压缩文件内所包含的文件
-t 		#测试,检测压缩文件是否完整  
-z 		#查看注释
-v 		#列出包内文件信息
-x 		#指定不需要解压缩的文件
-d 		#指定解压后的目标目录
-n 		#解压缩时不要覆盖原有的文件        
-q 		#安静模式
-o 		#直接覆盖      
-a 		#对文本文件进行必要的字符转换
-j 		#不处理压缩文件中原有的目录路径   
-C 		#压缩文件中的文件名称区分大小写     
-L 		#将压缩文件中的全部文件名改为小写
-X 		#解压缩时同时回存文件原来的UID/GID                   
-V 		#保留VMS的文件版本信息
-K 		#解压缩后还原权限   
-M 		#将输出结果送到more程序处理
zcat

zcat 来源于 "zip cat" 的缩写,见字知义

其功能是在不解压的情况下查看压缩文件内容

格式:

zcat [OPTION]... [FILE]...

#常用选项
-c #将内容输出到标准输出,默认
-d #解压缩
-l #显示压缩文件(包)内的文件列表
-r #在目上递归操作
-t #测试压缩文件完整性

打包和解包

tar

tar 即 Tape ARchive 磁带归档,可以对目录和多个文件打包成一个文件进行归档;

其本身不具备压缩功能,但可以使用参数调用相应的压缩命令进行压缩;前提是当前系统中有安装该压 缩工具

此命令可以保留文件属性,推荐使用;

对应的文件是 .tar 后缀

格式:

tar [OPTION...] [FILE]...
#tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]

#UNIX 风格写法
tar -A [OPTIONS] ARCHIVE ARCHIVE
tar -c [-f ARCHIVE] [OPTIONS] [FILE...]
tar -d [-f ARCHIVE] [OPTIONS] [FILE...]
tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]
tar -r [-f ARCHIVE] [OPTIONS] [FILE...]
tar -u [-f ARCHIVE] [OPTIONS] [FILE...]
tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]

#GNU 风格写法
tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVE
tar --create [--file ARCHIVE] [OPTIONS] [FILE...]
tar {--diff|--compare} [--file ARCHIVE] [OPTIONS] [FILE...]
tar --delete [--file ARCHIVE] [OPTIONS] [MEMBER...]
tar --append [-f ARCHIVE] [OPTIONS] [FILE...]
tar --list [-f ARCHIVE] [OPTIONS] [MEMBER...]
tar --test-label [--file ARCHIVE] [OPTIONS] [LABEL...]
tar --update [--file ARCHIVE] [OPTIONS] [FILE...]
tar --update [-f ARCHIVE] [OPTIONS] [FILE...]
tar {--extract|--get} [-f ARCHIVE] [OPTIONS] [MEMBER...]


#常用选项
#必选项 {A|c|d|r|t|u|x}
-A|--catenate|--concatenate   #追加 tar 文件至归档
-c|--create               	#创建一个新归档
-d|--diff|--compare     	#找出归档和文件系统的差异
--delete               		#从归档(非磁带!)中删除
-r|--append               	#追加文件至归档结尾
-t|--list                 	#列出归档内容
--test-label           		#测试归档卷标并退出
-u|--update               	#仅追加比归档中副本更新的文件
-x|--extract|--get       	#从归档中解出文件

#-f 选项
-f|--file=ARCHIVE #指定压缩包文件,大多数必选

###OPTIONS选项
#OPTIONS选项 [GnSkUWOmpsMBiajJzZhPlRvwo],这些选项要注意位置
-G|--incremental 			#处理老式的 GNU 格式的增量备份
-n|--seek                 	#归档可检索
-S|--sparse               	#高效处理离散文件
-k|--keep-old-files 		#解包时不覆盖已有的文件
-U|--unlink-first         	#解压之前先删除文件的链接
-W|--verify               	#在写入以后尝试校验归档
-O|--to-stdout           	#解压文件至标准输出
 --to-command=COMMAND 		#将解压的文件通过管道传送至另一个程序
-m|--touch               	#不要解压文件的修改时间
-p|--preserve-permissions|--same-permissions 	#保留文件权限信息
-s|--preserve-order|--same-order 				#成员参数按归档中的文件顺序列出
-M|--multi-volume         	#创建/列出/解压多卷归档文件
-B|--read-full-records   	#读取时重新分块(只对 4.2BSD 管道有效)
-i|--ignore-zeros         	#忽略归档中的零字节块(即文件结尾)
-a|--auto-compress       	#使用归档后缀名来决定压缩程序
-j|--bzip2               	#使用 bzip2 压缩或解压缩
-J|--xz                   	#使用 xz 压缩或解压缩
   --lzip|--lzma|--lzop     #lzip|xz --format=lzma|lzop
-z|--gzip|--gunzip|--ungzip #通过 gzip 压缩或解压缩
-Z|--compress|--uncompress 	#通过 compress 压缩或解压缩
-h|--dereference 			#将软链接指向的目标文件也压缩打包
 --hard-dereference 		#将硬链接指向的目标文件也压缩打包
-P|--absolute-names       	#不要从文件名中清除引导符‘/’
-l|--check-links 			#只输出非链接文件的信息
-R|--block-number         	#每个信息都显示归档内的块数
-v|--verbose               	#列出文件详细信息
-w|--interactive|--confirmation #操作前手动确认
-o                         #用老旧的 V7 tar 格式打包或解包

###压缩选项
-z 		#相当于gzip压缩工具
-j 		#相当于bzip2压缩工具
-J 		#相当于xz压缩工具

###其它选项
--show-defaults       	#显示 tar 默认选项
--exclude 				#排除文件
-C|--directory=DIR 		#指定目录
-T|--files-from=FILE   	#从文件中读取要处理的文件
-X|--exclude-from=FILE 	#从文件中读取要排除的文件
--version 				#显示版本号
split

split 命令可以分割一个文件为多个文件

格式:

split [OPTION]... [FILE [PREFIX]]

#常用选项
-b|--bytes=SIZE       	#按大小指定分割单位
-C|--line-bytes=SIZE   	#同-b,但是在切割时将尽量维持每行的完整性
-d                   	#切割后小文件的后缀用数字表示
-l|--lines=NUMBER     	#指定行数,按多少行切一个小文件
--verbose     			#显示过程

#示例
#将test.txt 以6行为单位进行切切割成以 x 为前缀名称的小文件
[root@ubuntu2204 0510]# split -l 6 test.txt 

#同上
[root@ubuntu2204 0510]# split -6 test.txt

#以1M大小为单位切割,小文件以数字为后缀,etc.part 开头
[root@ubuntu2204 0510]# split -b 1M etc.tar.gz -d etc.part

#显示过程
[root@ubuntu2204 0510]# split --verbose -b 1M etc.tar.gz -d etc.part

#合并回去
[root@ubuntu2204 0510]# cat etc.part* > etc.tar.gz
  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值