zoukankan      html  css  js  c++  java
  • linux 文件的查找和压缩

    1、使用 locate 命令
      需要安装:yum install mlocate -y
      创建或更新 slocate/locate 命令所必需的数据库文件:updatedb
      作用:搜索不经常改变的文件如配置文件等,否则需要搜索前更新数据库
      文件查找:非实时查找(数据库查找),查询系统上预建的文件索引数据库
        /var/lib/mlocate/mlocate.db
      依赖于事先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
      索引构建过程需要遍历整个根文件系统,极消耗资源

      工作特点:
        查找速度快
        模糊查找
        非实时查找
        搜索的是文件的全路径,不仅仅是文件名
        可能只搜索用户具备读取和执行权限的目录

    locate 语法:
    locate
    keyword   -i 不区分大小写的搜索   -n N 只列举前 N 个匹配项目   -r 使用正则表达式
    # 例:
    [root@centos7 ~]#yum install mlocate -y
    [root@centos7 ~]#ll bin/hello.sh 
    -rwxr-xr-x. 1 root root 58 2月   4 17:10 bin/hello.sh
    [root@centos7 ~]#locate hello.sh
    locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 没有那个文件或目录
    [root@centos7 ~]#updatedb    # 更新数据库
    [root@centos7 ~]#locate hello.sh
    /root/bin/hello.sh
    # 例:
    # 搜索名称或路径中带有 "conf" 的文件
    locate conf
    
    # 使用 Regex 来搜索以 ".conf" 结尾的文件
    locate -r '.conf$'

    2、 使用 find 命令(功能强大)
      实时查找工具,通过遍历指定路径完成文件查找
      工作特点:
        查找速度慢
        精确查找
        实时查找
        可能只搜索用户具备读取和执行权限的目录(搜索考虑权限问题)

    find 语法:
    find [OPTION]… [查找路径] [查找条件] [处理动作]
      查找路径:指定具体目标路径;默认为当前目录
      
      查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件。
        指搜索层级:
          -maxdepth level 最大搜索目录深度,指定目录为第一级
          -mindepth level 最小搜索目录深度

      处理动作:对符合的文件做操作,默认输出至屏幕     
    -print:默认的处理动作,显示至屏幕     -ls:类似于对查找到的文件执行 "ls -l" 命令     -delete:删除查找到的文件     -fls file:查找到的所有文件的长格式信息保存至指定文件中     -ok COMMAND {} ;对查找到的每个文件执行由 COMMAND 指定的命令。对于每个文件执行命令之前,都会交互式要求用户确认。     -exec COMMAND {} ; 对查找到的每个文件执行由 COMMAND 指定的命令。       {}:用于引用查找到的文件名称自身       find 传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令。

      1> 根据文件名和 inode 查找:

    -name "文件名称":支持使用 glob
      *,?,[ ],[^]
    -iname "文件名称":不区分字母大小写
    -inum n:按 inode 号查找
    -samefile name:相同 inode 号的文件
    -links n:链接数为 n 的文件
    -regex "PATTERN":以 PATTERN 匹配整个文件路径字符串,而不仅仅是文件名称。

      2> 根据属组、属主查找:

    -user USERNAME:查找属主为指定用户(UID)的文件
    -group GRPNAME:查找属组为指定组(GID)的文件
    -uid UserID:查找属主为指定的 UID 号的文件
    -nouser:查找没有属主的文件
    -nogroup:查找没有属组的文件

      3> 根据文件类型查找:

    -type TYPE:
      f:普通文件
      d:目录文件
      l:符号链接文件
      s:套接字文件
      b:块设备文件
      c:字符设备文件
      p:管道文件
    空文件或目录
    -empty
    # 例:
    # find /etc/ -name passwd                # 查找/etc/目录下名为 passwd 的文件
    /etc/passwd
    /etc/pam.d/passwd
    
    #
    find /etc/ -maxdepth 1 -name passwd # maxdepth 指定最大深度,mindepth 相反指定最小深度 /etc/passwd
    #
    find /data/ -name f1 # 搜索/data 目录下文件名为 f1 的文件,也可以使用 "*f1" 指包含 f1 的文件名(通配符)
    #
    find /home -user yang # 查找属主为 yang 的文件
    # find /home -nouser -o -nogroup # -o 或者

    # 找出/tmp 目录下,属主不是 root,且文件名不以 f 开头的文件: find /tmp ( ! -user root -a ! -name 'f*' ) -ls find /tmp ! ( -user root -o -name 'f*' ) -ls
    # 排除目录示例:
    # 查找/etc/下,除/etc/sane.d 目录的其他所有.conf 后缀的文件
    # find /etc -path '/etc/asne.d' -a -prune -o -name "*.conf"    # -path '/etc/asne.d' -a -prune 如果是这个目录剪切掉
    
    # 查找
    /etc/下,除/etc/sane.d 和/etc/fonts 两个目录的所有.conf 后缀的文件 # find /etc ( -path '/etc/sand.d' -o -path '/etc/fonts' ) -prune -o -name "*.conf" # ( -path "/etc/sane.d" -o -path "/etc/fonts" ) # 过滤多个目录 # 查找/data/目录下 的空文件夹
    # find /data -type d -empty # find /home -type d -maxdepth 1 # find /data/ -empty -type f -ls # 查找目录下空文件,-ls 列出长属性

      4> 组合条件、德摩根定律

    组合条件:
      与:-a
      或:-o
      非:not,! 德摩根定律: (非 A)或(非 B)= 非(A 且 B) (非 A)且(非 B)= 非(A 或 B)
    # 例:
    !A -a !B = !(A -o B)  !A -o !B = !(A -a B)
    # find /data/ ! ( -empty -o -type f )    # 查找/data目录下不是空文件

      5>根据文件大小来查找:

    -size [+|-]#UNIT     # 按单位搜索,搜索出来的并不是精确的
      常用单位:k,M,G,c(byte)
      #UNIT: (#-1,#]
        如:6k 表示(5k,6k]
      -UNIT: [0,#-1]
        如:-6k 表示[0,5k]
      +UNIT: (#,00)
        如:+6k 表示(6k,00

      6> 根据时间戳查找:

    以 "天" 为单位:
    -atime [+|-]#
      -#:[0,#) #:[#,#+1) +#:[#+1,00]-mtime -ctime
    以 "分钟" 为单位:
    -amin -mmin -cmin

      7> 根据权限查找:

    -prem [/|-]MODE
      MODE:精确权限匹配
        # find -prem 755 会匹配权限模式恰好是 755 的文件
      /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从 centos7 开始淘汰
        # find /data/ -perm /666 -ls    # 三者之间是或的关系
      -MODE:每一类对象都必须同时拥有指定权限,与关系
      /和-的时候,0 表示不检查 1 表示检查(二进制);-是交集,/是并集
      只要当每个人有写权限时,find -perm +222 就会匹配
      只有当每个人都有写权限时,find -perm -222 才会匹配
      只有当其他人(other)有写权限时,find -prem -002 才会匹配

      8> 参数替换:xargs

    由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了 xargs 命令
    xargs 用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为 arguments
    注意:文件名或者是其他意义的名词内含有空格符的情况
    有些命令不能接受过多参数,命令执行可能会失败,xargs 可以解决

    # 例:
    echo f{1..100000} | xargs -n1 touch # -n 表示一次传一个参
    # find示例:
    # 备份配置文件,添加.orig 这个扩展名
    # find -name "*.conf" -exec cp {} {}.orig ;
    
    # 提示删除存在时间超过
    3 天以上的 joe 的临时文件 # find /tmp -ctime +3 -user joe -ok rm {} ;
    # 在主目录中寻找可被其它用户写入的文件 #
    find ~ -perm -002 -exec chmod o-w {} ;
    # 查找
    /data 下的权限为 644 ,后缀为 sh 的普通文件,增加执行权限 # find /data -type f -perm 644 -name "*.sh” -exec chmod 755 {} ;
    # 查看/home 的目录 # find /home -type d -ls

    3、压缩和解压缩

      1> compress [-dcv] [file…](.Z)    # 老旧
      新系统默认不安装,若要学习,需要安装包:yum install ncompress -y
        -d:解压缩,相当于 uncompress
        -c:结果输出至标准输出(屏幕),不删除原文件,后可重定向至文件
        -v:显示详情
        uncompress 解压缩
        zcat file.Z >file    # zcat 也是解压缩 file.Z 压缩包输出信息至屏幕,后跟重定向至文件

    示例:
    [root@centos7 ~]#ls
    file
    [root@centos7 ~]#compress file    # 默认删除原文件,compress -c file >file.Z 重定向可以保留原文件
    [root@centos7 ~]#ls
    file.Z
    [root@centos7 ~]#compress -d file.Z
    [root@centos7 ~]#ls
    file

      2> gzip [OPTION]…FILE…(.gz)
        -d:解压缩,相当于 gunzip
        -c:将压缩或解压缩的结果输出至标准输出(屏幕)
        -#:1-9,指定压缩比,值越大压缩比越大
        zcat:不显示解压缩的前提下查看文本文件内容

    示例:
    gzip file                 # 压缩文件(大概为-6),-d 解压缩文件(默认删除原文件)
    gzip -c file >file.gz     # 使用-c 重定向标准输出至文件可保留原文件
    gzip -c -d file.gz >file  # 解压缩+重定向
    zcat file.gz >file        # 相当于解压缩重定向

      3> bzip2 [OPTION]…FILE…(.bz2)
        -k:keep,保留原文件
        -d:解压缩
        -#:1-9,压缩比,默认为 9
        bzcat:不显示解压缩的前提下查看文本文件内容

      4> xz [OPTION]…FILE…(.xz)
        -k:keep,保留原文件
        -d:解压缩
        -#:1-9,压缩比,默认为 6
        xzcat:不显示解压缩的前提下查看文本文件内容

    4、zip/unzip 打包压缩

    打包压缩
    zip -r /testdir/sysconfig /etc/sysconfig/    # 压 缩 /etc/sysconfig/ 文件夹到/testdir/sysconfig 文件(-r 压缩目录,不跟-r 压缩文件)
    解包解压缩
    unzip sysconfig.zip
    cat /var/log/messages | zip messages –       # 把前面的标准输出传到后面
    unzip -p message > message

    5、 tar 打包工具
      tar(Tape Archive,磁盘归档的缩写)
      tar [OPTION]…

      1> 创建归档

    tar -cpvf /PATH/TO/SOMEFILE.tar FILE…    # -c 创建打包文件 f 后跟文件名 p 保留属性 v 显示信息
    du -sh 显示原有文件夹大小,ll -h 显示打包后文件大小,大小不变
    tar -tvf -t 预览打包文件 -x 解压缩(tar -xvf data.tar -C /tmp/ -C 跟解压目录)

      2> 追加文件至归档:注:不支持对压缩文件追加

    tar -r -f /PATH/TO/SOMEFILE.tar FILE…

      3> 查看归档文件中的文件列表

    tar -t -f /PATH/TO/SOMEFILE.tar

      4> 展开归档

    tar -x -f /PATH/TO/SOMEFILE.tar
    tar -x -f /PATH/TO/SOMEFILE.tar -C /PATH/

      5> 结合压缩工具实现:归档并压缩

    -j:bzip2,-z:gzip,-J:xz
    -T 把那些文件打包了,-X 那些文件不打包 cat list.txt # 可以将打包的文件放在一个文件中 /etc/ /boot/ cat exlist.txt # 将排除的文件也放在一个文件中 /etc/shadow /boot/symvers-3.10.0-693.el7.x86_64.gz
    tar zcvf list.tar.gz -T list.txt -X exlist.txt # 过滤打包
    分割大的 tar 文件为多份小文件 split -b size -d tar-file-name(文件名称) prefix-name(前缀) split -b 10M -d list.tar.gz a.tar # -b 切割成 10M 一个文件,-d 指定后缀为数字 -rw-r--r--. 1 root root 10485760 28 13:22 a.tar00 -rw-r--r--. 1 root root 10485760 28 13:22 a.tar01 …… -rw-r--r--. 1 root root 2855994 28 13:22 a.tar09 合并: cat a.tar0* >a.tar.gz # 查看重定向至文件

      6> 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
  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/zyybky/p/12760574.html
Copyright © 2011-2022 走看看