文件查找和压缩
之前,我们已经了解了系统的中有关文件创建,文件和目录的复制,目录创建,目录删除等相关的命令,但是很多时候,这些操作,都是需要指定文件的绝对路径的(相对于根目录的路径),如果我们只知道文件或者目录本身的名称,但是不知道,文件以及目录的上级目录的名称时,或者,我们需要查找一个历史文件所在的位置,这个情况下,我们可以使用文件查找相关的命令搜寻到我们需要的信息,并直接显示在屏幕上,以便我们进行获取使用。
文件查找工具有两个:locate 和 find 。文件查找命令分为非实时查找和实时查找,非实时查找是根据索引查找的,索引不是自动生成的,是需要提前建立的,若是很长时间没有建立索引目录,那么文件查找过程就不会准确。实时查找是从磁盘的指定目录,遍历目录下的所有文件进行文字匹配,将匹配的项进行反馈的查找方式。
使用locate命令
locate 命令属于非实时查找,需要对整个文件系统中的文件预先构建索引。系统中有周期性的任务,及时且自动的创建索引,若是,需要当前重新建立索引,可以使用 updatedb 命令构建索引,这个过程是遍历根目录下的所有的文件的,一般会比较占用系统的资源,耗费比较多的时间,建议在系统比较空闲的时间进行操作,同时,系统中周期性任务就是在空闲时段更新索引的。
locate 工具的特点包括:查找文件速度快;精度有所欠缺;同时是模糊形式的查找;搜索的是文件的全路径,不仅仅是文件名,下面是locate 命令的具体用法。
使用find命令
find 命令查找工具是实时精确的搜索,会对指定的目录中,所有的文件进行匹配。所以它的特点是:查找速度慢,但是有较高的准确率。
find 和locate 这两个命令在特性中是相互补充的,都是非常的实用,但是,对应命令的使用者来说,一些没有权限访问的目录,find 和 locate 可能是逃过查找的 ,这一点在使用中需要注意。
find 命令的使用语法:
find [选项] [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径;若是没有指定,默认是对当前目录下可访问文件进行查询
查找条件:指定的查找要求,比如文件名要求,大小要求,文件类型要求,权限要求,时间属性要求。这个缺省的情况下,是指没有要求,默认是显示所有的文件。
处理动作:当查找出符合要求的文件后,可以同时指定对文件进行某些操作,缺省的情况下,是将搜索的结果标准输出到屏幕。
查找路径直接写目录的绝对路径即可,比较复杂的是查找条件,处理动作相对复杂,这里分别进行说明。
一、查找条件(单横线连接)
1、指定搜索层级(目录最后面不要加斜线)
-maxdepth n 这个是指最大搜索目录深度,指定目录为第1级,也可以理解为查找到第n层
-mindepth n 最小搜索目录深度,可以理解为,从第n层开始进行查找
2、指定文件名称和inode 进行查找
-name “文件名称”:支持使用glob *, ?, [], [^]
-iname “文件名称”:不区分字母大小写
-inum n 按inode号查找
-samefile name 相同inode号的文件
-links n 链接数为n的文件
-regex “PATTERN”:以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
3、根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
4、根据文件类型查找:
-type TYPE:
- f: 普通文件
- d: 目录文件
- l: 符号链接文件
- s:套接字文件
- b: 块设备文件
- c: 字符设备文件
- p: 管道文件
5、根据文件大小来查找:
-size [+|-]#UNIT
- 常用单位:k, M, G,c(byte)
- #UNIT: (#-1, #] 如: -size 6k 表示(5k,6k] 理解为“接近 6k ”大小的 ,
- -#UNIT:[0,#-1] 如:-size -6k 表示 [0,5k] 大小小于“接近 6k” 范围的
- +#UNIT:(#,∞) 如: -size +6k 表示(6k,∞) 大小大于“ 接近 6k ”范围的
- 注意:根据文件大小查找,不应该是查找确定的数字,因为不同的单位(unit)之间是更小单位的范围的,所以指定数字本身有范围确认的功能。
6、根据时间戳:
以“天”为单位; atime是代表(Access time)
-atime [+|-]#,
- #: [#,#+1) 如 :-atime 1 理解为昨天之前第1天(24小时)。不包括昨天
- +#: [#+1,∞] 如:-atime +1 昨天之前第1天,之前的所有时间
- -#: [0,#) 如: -atime -1 当前时间到昨天之前第1天,
-mtime 表示(Modify time) -ctime 表示(Change time)
注意:在时间上进行判断时,是向前进行推算的。
以“分钟”为单位: -amin -mmin -cmin
7、根据权限查找:
-perm [/|-]MODE
MODE 是权限的数字表示法
- MODE: 精确权限匹配
- /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配 即可,或关系,+ 从centos7开始淘汰
- -MODE:每一类对象都必须同时拥有指定权限,与关系
有三个数字,分别对应 user ,group ,other 的权限,数字0表示,权限不关心
7、多条件的组合使用
组合条件:
与:-a
或:-o
非:-not, !
德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
find -not \( -user joe -o -user jane \)
find /etc/httpd ! \( -regex .*conf\.. -o -not -name conf \)
find /etc/httpd -not \( -regex .*conf\.. -o ! -name conf \)
查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的其它所有.conf后缀的文件
find /etc \(–path ‘/etc/sane.d’ –o –path ‘/etc/fonts’ \) -a -prune –o -name “*.conf”
目录进行剪切操作是,顺序进行的(先扫描文件夹),剪切了就不会进入了,所以剪切掉的文件夹中什么都不会出现。
多个条件使用的情况下,默认是且的关系
二、处理动作
-print:默认的处理动作,显示至屏幕(缺省默认)
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND 指定的命令,对于每个文件执行命令之前,都会交互式要求用 户确认
-exec COMMAND {} \; 对查找到的每个文件执行由 COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合 条件的文件一次性传递给后面的命令 ,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数 据,并且以空格符或回车符将 stdin 的数据分隔成为 arguments
注意:文件名或者是其他意义的名词内含有空格符的情况 v有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决。
示例:
ls f* |xargs rm
find /sbin -perm +7000 | xargs ls –l
find和xargs格式:find | xargs COMMAND
xargs是将标准输出作为管道后面命令的参数的,和标准输入不同。
压缩和解压缩工具
1、cpio
功能:复制文件从或到归档
cpio命令是通过重定向的方式将文件进行打包备份,还原恢复 的工具,它可以解压以“.cpio”或者“.tar”结尾的文件
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项 -o 将文件拷贝打包成文件或者将文件输出到设备上
-i 解包,将打包文件解压或将设备上的备份还原到系统
-t 预览,查看文件内容或者输出到设备上的文件内容
-v 显示打包过程中的文件名称
-d 解包生成目录,在cpio还原时,自动的建立目录
-c 一种较新的存储方式
将etc目录备份: find ./etc -print |cpio -ov >etc.cpio
内容预览 cpio –tv < etc.cpio
解包文件 cpio –idv < etc.cpio
2、tar 不会删除原文件
打包工具,可以是多个文件或者目录,结合选项可以压缩和解压缩
-c 创建
-f 指定存储文件 一般都有
-t 查看
-r 追加
-x 展开 -C 展开后的文件存放到指定的目录(必须先存在)
压缩工具 -j:bzip2 ;-z:gzip;-J:xz;
-T:指定输入文件的表格(批量设置)
-X:排除指定文件列表中的文件(批量设置)
split 分割大的tar文件 -b 指定大小 -d数字结尾,不加是字母
split -b 1M -d 源文件 指定的小文件前缀
合并 cat 指定的小文件前缀* > 源文件名
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/91068