GNU Linux操作系统的哲学思想之一即是一切皆是文件,因此使用必要的手段对文件进行搜索、匹配、处理、压缩解压,以实现快速定位、快速处置是十分必要的。
文件的搜索查找底层原理分为两类:实时的、非实时的。其中非实时的文件查找是基于数据库的,而实时查找则是基于查找条件对文件系统上的所有文件进行搜索、匹配,且是穷尽查找。
非实时查找的代表命令是locate;实时查找的代表是find命令。
查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb);因为索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:查找速度快;模糊查找;非实时查找;搜索的是文件的全路径,不仅仅是文件名;可能只搜索用户具备读取和执行权限的目录
Locate 选项 文件
-i不区分大小写的搜索
-n N只列举前N个匹配项目
-r 使用正则表达式
例:搜索名称或路径中带有“conf”的文件
asd
实时查找工具,通过遍历指定路径完成文件查找
工作特点:查找速度略慢;精确查找;实时查找;可能只搜索用户具备读取和执行权限的目录
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
查找条件
find 查找路径
-mindepth N 最小搜索深度
-maxdepth N 最大搜索深度
-mindepth N -maxdepth N 只搜索指定深度
-name 以名称为搜索条件 默认精确查找
"*name*" 模糊查找
-iname 以名称为搜索条件并忽略大小写
-inum inode号 以inode号为查找条件
-samefile file1 找出与file1 inode相同的文件
-links n 找到硬链接数为n的文件
-regextype posix-extended -regex '/app/.(r..t)...\1er' ( 正则部分要用引号引起来,同时要表示文件的完整路径,搜索当前目录时,用./,搜索指定目录时如/app,则用/app/....)
根据属主、属组查找
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uidUserID:查找属主为指定的UID号的文件
-gidGroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找
-type
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
例:find /app -path '/app/other' -a -prune -o -name "*test*"
根据文件大小来查找:
根据时间戳:
根据权限查找:
-ls 查找的结果显示详细信息
-delete 将查找的结果删除,不交互
练习:•
1、查找/var目录下属主为root,且属组为mail的所有文件
2、查找/var目录下不属于root、lp、gdm的所有文件
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
压缩
gzip messages 权限不变
gzip -#(1-9) messages 数字越小,压缩速度越快,压缩比越低,数字越大,压缩速度越慢,压缩比越高,生 成的压缩文件越小,默认压缩比为6.
gzip -c messages > messages.gz 原文件保留,但权限根据umask来设置
解压
gunzip message.gz 或 gzip -d messages.gz 权限不变
gunzip -c messages.gz > messages 或 gzip -dc messages.gz > messages 或zcat messages.gz > message 压缩包保留,但权限根据umask来设置
-v 压缩或解压时,显示详细过程
压缩
bzip2 messages 权限不变,原文件消失
bzip2 -k message 权限不变,原文件保留,可用在压缩和解压缩
bzip -# (1-9) messages 数字越小,压缩速度越快,压缩比越低,数字越大,压缩速度越慢,压缩比越高,生成的压缩文件 越小,默认压缩比为9.
bzip2 -c messages > messages.bz2 原文件保留,但权限根据umask来设置
解压
bunzip -k message.bz2 或 bzip2 -kd messages.bz2 权限不变,压缩包保留
bunzip -c messages.bz2 > messages 或 bzip2 -dc messages.bz2 > messages 或bzcat messages.bz2 > message 压缩包保留,但权限根据umask来设置
-v 压缩或解压时,显示详细过程
xz messages 权限不变,原文件消失
xz -k message 权限不变,原文件保留,可用在压缩和解压缩
xz -# (1-9) messages 数字越小,压缩速度越快,压缩比越低,数字越大,压缩速度越慢,压缩比越高,生成的压缩文件越 小,默认压缩比为6.
xz -c messages > messages.xz原文件保留,但权限根据umask来设置
unxz -k message.xz 或 xz -kd messages.xz 解压权限不变,压缩包保留
unxz -c messages.xz > messages 或 xz -dc messages.xz > messages 或xzcat messages.xz > message 压缩包保留,但权限根据umask来设置
-v 压缩或解压时,显示详细过程
tar
-c 创建包
-v 打包或解包显示过程
-f 指定文件
-t 查看包中的内容
-x 从包中解开文件,可解开指定文件或全部文件
-xf user.tar passwd 仅解出passwd
-xf user.tar 解出全部文件
-C 与-x 配合,指定解压到的目的目录
-j 压缩与解压缩时使用bzip2
tar jcvf userfile.tar.bz2 group gshadow passwd shadow
-z 压缩与解压缩时使用gzip
tar zcvf userfile.tar.gz group gshadow passwd shadow
-J 压缩与解压缩时使用xz
tar Jcvf userfile.tar.xz group gshadow passwd shadow
解压时不需要表明用什么压缩工具压缩,tar命令会自动识别 解压只需 tar -xvf 压缩包