一、文件非实时查找 locate
- locate查询系统预建文件索引数据库
/var/lib/mlocate/mlocate.db
,所以查询速度很快 - 由于数据库不能实时更新文件变动,所以locate可能查询不到新建立、修改的文件
- 文件索引构建更新为周期任务,文件遍历过程非常消耗系统资源,一般在系统空闲时进行,手动更新使用命令
updatedb
- 属于模糊查找,查找结果是文件的全路径,可能只能搜索到用户具有读取和可执行权限的目录
- 语法:
locate [option] keyword
- 选项:
-i //不区分大小写搜索
-n # //只显示前#行匹配结果
-r regex //搜索符合正则表达式描述的文件
二、文件实时查找 find
通过遍历指定目录实时查找文件,属于精确查找,所以速度较慢,同样可能只能搜索到用户具有读取和可执行权限的目录
(一)语法:
find [option] [查找路径] [查找条件] [处理动作]
- 查找路径:指定具体目标路径;默认为当前目录
- 查找条件:指定查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
- 处理动作:对符合条件的文件做操作,默认输出至屏幕
(二)查找条件详述
- 指定搜索层级
-maxdepthlevel //最大搜索目录深度,指定目录为第1级
-mindepthlevel //最小搜索目录深度
- 根据文件名和inode查找
-name //文件名称:支持使用glob
-iname //文件名称:不区分字母大小写
-inum n //按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 f //普通文件
-type d //目录文件
-type l //符号链接文件
-type b //块设备文件
-type c //字符设备文件
-
组合条件
- 并且 -a
- 或者 -o
- 非 !, -not
- 德摩根定律
!A -o !B = ! (A -a B)
!A -a !B = ! (A -o B) - 三种条件的判断先后:“非”优先级最高,“并且”次之,“或者”最低,当不按照此顺序判断时需要增加括号
\(\)
,注意转义字符
-purne 排除目录
实验:
-
根据文件大小来查找
语法:-size [+|-]#UNIT, UNIT: k, M, G
#UNIT: (#-1, #] UNIT,如-size 6M
表达的范围为(5, 6]M
-#UNIT: [0, #-1] UNIT,如-size -6M
表达的范围为[0, 5]M
+#UNIT: (#, ∞) UNIT,如-size +6M
表达的范围为(6, ∞)M- 实验:查找/etc目录下大小大于1M的普通文件
-
根据时间戳查找
语法:- 以天为单位
-atime [+|-]#
-mtime [+|-]#
-ctime [+|-]# - 以分钟为单位
-amin [+|-]#
-mmin [+|-]#
-cmin [+|-]# - 范围的意义
#: [#,#+1)
+#: [#+1,∞]
-#: [0,#)
- 以天为单位
-
根据权限查找
- 语法:
--perm [/|-] MODE
MODE 精确匹配权限
/ MODE 只要u,g,o至少一方的权限与MODE声明匹配,即权限或关系
-MODE 必须u,g,o都具有MODE声明权限,即权限与的关系 - 注意:当使用
/
或者-
时,当MODE声明中存在0,即表明对此位置的权限设置不关注 - 实验:
1、/app目录下有10个文件file1至file10,每个文件的权限如下:
2、执行命令find /app -perm 766
,代表按照命令的权限要求精确搜索,结果如下:
3、执行命令find /app -perm /111
,代表只要文件的属主、属组、其他人中至少一方有可执行权限即匹配搜索条件,结果如下:
4、执行命令find /app -perm -424
,代表只有文件属主有读权限、属组有写权限、其他人有读权限三个条件同时匹配才能被搜索到,结果如下:
5、执行命令find /app -perm -402
,代表只有文件属主有读权限、其他人有写权限两个条件同时匹配才能被搜索到,而属组的权限设置搜索过程不关心,结果如下:
- 语法:
(三)处理动作
-
-print
默认动作,搜索结果输出至屏幕 -
-ls
对搜索结果执行ls -l
命令后的结果 -
-delete
删除查找到的文件 -
-fls file
将搜索结果的长格式信息保存至文件file -
-ok COMMAND {} \;
对搜索结果执行COMMAND命令,每个搜索文件执行COMMAND命令前有交互式确认,大括号指代搜索结果,命令结尾必须用\;
结束 -
-exec COMMAND {} \;
对搜索结果执行COMMAND命令,命令直接执行没有提示,语法类似-ok -
实验:将/app目录下其他人拥有写权限的文件名称增加后缀.bak
(四)参数替换 xargs
- xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为arguments
- 有些命令不能接受过多参数,使用xargs可以突破命令的参数数量限制
- find与xargs命令结合使用:find | xargs command
- 实验:将/sbin目录下属主拥有读、写、可执行权限的文件列表用
ls -l
命令显示出来
三、压缩、解压缩和归档工具
(一)compress/uncompress
- compress 压缩,生成.Z后缀压缩文件,程序对后缀名敏感
-d 解压缩,相当于uncompress
-c 结果输出至标准输出,可使用重定向在压缩/解压缩时保留源文件
-v 显示过程 - uncompress 解压缩,程序对后缀名敏感
- zcat 解压缩结果输出至标准输出,可视作uncompress -c
-
实验:
(二)gzip/gunzip
- gzip 压缩,生成.gz后缀压缩文件,程序对后缀名敏感
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,可使用重定向在压缩/解压缩时保留源文件
-# 指定压缩比1-9,值越大压缩比越高,默认为6 - gunzip 解压缩,程序对后缀名敏感
- zcat 解压缩结果输出至标准输出,可视作gunzip -c
-
实验:
(三)bzip2/bunzip2
- bzip2 压缩,生成.bz2后缀压缩文件,程序对后缀名敏感
-d 解压缩,相当于bunzip2
-k 保留源文件
-# 指定压缩比1-9,值越大压缩比越高,默认为9 - bunzip2 解压缩,程序对后缀名敏感
- zcat 解压缩结果输出至标准输出,可视作gunzip -c
-
实验:
(四)xz/unxz/xzcat
- xz 压缩,生成.xz后缀压缩文件,程序对后缀名敏感
-d 解压缩,相当于unxz
-k 保留源文件
-# 指定压缩比1-9,值越大压缩比越高,默认为6 - unxz 解压缩,程序对后缀名敏感
- xzcat 解压缩结果输出至标准输出,可视作unxz -c
- 实验:
从结果可以看出,当改变压缩文件的后缀.xz
后无法解压。unxz
解压对文件后缀名敏感。上文的uncompress
,gunzip
,bunzip2
都是后缀名敏感的。
(五)zip/unzip
- 可以打包压缩解压缩,而之前的compress,gzip,bzip2,xz只能压缩单个文件
- 语法:
zip 压缩后文件 压缩前文件
-r 递归压缩文件夹,用于打包压缩
-p 解压缩结果输出至标准输出,可重定向至文件 -
实验:
(六)tar 磁带归档
- 语法:
tar [option...] [file]...
- 用法:
tar cf file.tar file... //创建归档
tar rf file.tar file... //追加文件至归档,不支持对压缩文件追加归档
tar tf file.tar //查看归档文件中的文件列表
tar xf file.tar //展开归档,解包文件输出至当前目录
tar xf file.tar -C path //展开归档,解包文件输出至指定目录path
tar zcf file.tar.gz file... //创建归档并使用gzip压缩,bzip2使用选项j,xz使用选项J
tar zxf file.tar.gz
//解压缩tar.gz压缩包,bzip2使用选项j,xz使用选项J,系统会自动识别压缩文件类型,z、j、J可以省略
tar zcf file.tar.gz -T includefilelist -X excludefilelist
//T选项指定压缩文件列表includefilelist,X选项指定排除压缩文件列表excludefilelist
- split 分割压缩文件
split -b size -d tar-file-name prefix-name
- -b选项指定分割单位,-d选项指定被分割的压缩文件和分割后的文件群前缀
- 使用cat配合重定向合并被分割压缩文件
cat file-part* > file.tar.gz
- 实验:
1、将/etc
目录下所有以f开头的文件和目录压缩为file.tar.gz
文件
2、查看file.tar.gz
文件内的文件列表的前5行
3、将file.tar.gz
文件解压缩,解压缩文件输出至/boot
目录
4、分割file.tar.gz
文件,以3k为分割单位,分割文件前缀为file-part
5、将分割的文件合并为文件file1.tar.gz
(七)cpio 从文件复制或复制文件到
- cpio 通过重定向方式将文件进行打包,或者恢复打包文件,可以解压后缀名为.cpio或.tar的文件
- 语法:
cpio [option] < filename
cpio [option] > filename
- 选项:
-o 打包
-i 解包
-t 预览
-v 显示过程
-d 解包生成目录
- 实验:
1、将/app/etc目录下的所有文件打包到/app下的etc.cpio文件
cd /app
find ./etc | cpio -ov > etc.cpio
2、查看etc.cpio文件内容
cpio -tv < etc.cpio
3、解包etc.cpio 文件到/mnt目录下
cd /mnt
cpio -idv < /app/etc.cpio