20170729 文件查找和压缩

一、文件非实时查找 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的普通文件
20170729 文件查找和压缩_第1张图片
  • 根据时间戳查找
    语法:

    • 以天为单位
      -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,每个文件的权限如下:
      20170729 文件查找和压缩_第2张图片

      2、执行命令find /app -perm 766,代表按照命令的权限要求精确搜索,结果如下:

      3、执行命令find /app -perm /111,代表只要文件的属主、属组、其他人中至少一方有可执行权限即匹配搜索条件,结果如下:
      20170729 文件查找和压缩_第3张图片

      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


    20170729 文件查找和压缩_第4张图片

(四)参数替换 xargs

  • xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为arguments
  • 有些命令不能接受过多参数,使用xargs可以突破命令的参数数量限制
  • find与xargs命令结合使用:find | xargs command
  • 实验:将/sbin目录下属主拥有读、写、可执行权限的文件列表用ls -l命令显示出来
    20170729 文件查找和压缩_第5张图片

三、压缩、解压缩和归档工具

(一)compress/uncompress

  • compress 压缩,生成.Z后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于uncompress
    -c 结果输出至标准输出,可使用重定向在压缩/解压缩时保留源文件
    -v 显示过程
  • uncompress 解压缩,程序对后缀名敏感
  • zcat 解压缩结果输出至标准输出,可视作uncompress -c
  • 实验:


    20170729 文件查找和压缩_第6张图片

(二)gzip/gunzip

  • gzip 压缩,生成.gz后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于gunzip
    -c 结果输出至标准输出,可使用重定向在压缩/解压缩时保留源文件
    -# 指定压缩比1-9,值越大压缩比越高,默认为6
  • gunzip 解压缩,程序对后缀名敏感
  • zcat 解压缩结果输出至标准输出,可视作gunzip -c
  • 实验:


    20170729 文件查找和压缩_第7张图片

(三)bzip2/bunzip2

  • bzip2 压缩,生成.bz2后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于bunzip2
    -k 保留源文件
    -# 指定压缩比1-9,值越大压缩比越高,默认为9
  • bunzip2 解压缩,程序对后缀名敏感
  • zcat 解压缩结果输出至标准输出,可视作gunzip -c
  • 实验:


    20170729 文件查找和压缩_第8张图片

(四)xz/unxz/xzcat

  • xz 压缩,生成.xz后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于unxz
    -k 保留源文件
    -# 指定压缩比1-9,值越大压缩比越高,默认为6
  • unxz 解压缩,程序对后缀名敏感
  • xzcat 解压缩结果输出至标准输出,可视作unxz -c
  • 实验:
    20170729 文件查找和压缩_第9张图片

    从结果可以看出,当改变压缩文件的后缀.xz后无法解压。unxz解压对文件后缀名敏感。上文的uncompress,gunzip,bunzip2都是后缀名敏感的。

(五)zip/unzip

  • 可以打包压缩解压缩,而之前的compress,gzip,bzip2,xz只能压缩单个文件
  • 语法:
    zip 压缩后文件 压缩前文件
    -r 递归压缩文件夹,用于打包压缩
    -p 解压缩结果输出至标准输出,可重定向至文件
  • 实验:


    20170729 文件查找和压缩_第10张图片

(六)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目录
    20170729 文件查找和压缩_第11张图片

    4、分割file.tar.gz文件,以3k为分割单位,分割文件前缀为file-part
    5、将分割的文件合并为文件file1.tar.gz
    20170729 文件查找和压缩_第12张图片

(七)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

你可能感兴趣的:(20170729 文件查找和压缩)