• 查找和压缩


    • 查找工具
      • locate
      • find
        • find语法
        • 查找路径
        • 查找类型
        • 查找条件
        • 查找动作
    • 压缩工具
      • compress
      • gzip
      • bzip
      • xz
      • zip
      • tar
      • cpio

    locate

    特点查找速度很快,原因是linux系统会将索引生成一个数据库,locate根据这个数据库查找,如果数据库没有文件,需要用updatedb更新数据库(生产环境忙的时候别用)

    工作特点:

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

    选项

    -i 不区分大小写的搜索

    -n N 只列举前N 个匹配项目 locate conf

    搜索名称或路径中带有“conf ”的文件

    locate -r ‘.conf$’

    使用Regex 来搜索以“.conf

    find

    实时查找工具,通过遍历指定路径完成文件查找

    工作特点:

    • 查找速度略慢
    • 精确查找
    • 实时查找
    • 可能只搜索用户具备读取和执行权限的目录 #在find例用到*号要转义或者用双引号引起来

    find语法:

    find [OPTION]... [ 查找路径] [ 查找条件] [ 处理动作]

    查找路径:指定具体目标路径;默认为当前目录
    
    查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
    
    处理动作:对符合条件的文件做操作,默认输出至屏幕

    查找条件

    指搜索层级

    -maxdepth level  最大搜索目录深度,  #找到第几层路径
    
    例: find -maxdepth 1 -name f
    find -maxdepth 2 -name f
    
    -mindepth level  最大 搜索目录深度

    #从第几层路径开始找

    例:find -mindepth 2 -name f   #从第二层开始往下层路径找

    面试题让你找第二层的名叫f的文件

    find -mindepth 2 -maxdepth 2 -name f

    查找条件

    文件名和inode查找

    -name " 文件名称" :支持使用glob
    
    *, ?, [], [^]
    
        

    查找条件

    根据属主、属组查找:

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

    根据文件类型查找: -type TYPE:

    f:  普通文件
    
    d:  目录文件
    
    l:  符号链接文件
    
    s :套接字文件
    
    b:  块设备文件
    
    c:  字符设备文件
    
    p: 管道文件

    组合条件:

    与:-a

    或:-o

    非:-not, !

    例:find /etc/ ( -name "*.conf" -o -type f ) -ls

    德· 摩根 定律:

    (非 非 P) 或 或 (非 非 Q) = 非(P 且 且 Q)

    (非 非 P) 且 且 (非 非 Q) = 非(P 或 或 Q)

    示例:

    !A -a !B = !(A -o B)
    !A -o !B = !(A -a B)

    find示例:

    找出/tmp 目录下,属主不是root ,且 文件名 不以f 开头的 文件。

    find /tmp ( -not -user root -a -not -name 'f*' ) -ls
    find /tmp -not ( -user root -o -name 'f*' ) –ls

    查找条件 根据文件大小来查找:

    -size [+|-]#UNIT

    常用单位:k, M, G

    10k的意思是9k-10k不包括9k

    -size -10k   #表示0-9k

    #UNIT: [#-1, #]

    如:6k 表示(5k,6k]

    -#UNIT :[0,#-1]

    如: :-6k 表示[0,5k]

    +#UNIT :(#, ∞ )

    如: :+6k 表示(6k ,∞ )

    根据时间戳: 以“天”为单位:

      -atime [+|-]n       #+多少天以前,-多少天以内,n或刚好多少天被访问过
    
      n:[n,n+1)    #大于等于我们给的数字,但是小于这个数字加1
    
      +n:[n+1,oo]  #n天以前+1到无穷大
    
      -n:[0,n]       #从n这个时间到我们现在的时间
    
      -mtime   #修改时间
    
      -ctime   #改变时间

    以“分钟”为单位:

      -amin
    
      -mmin
    
      -cmin

    查找条件——权限 根据权限查找:

      -perm [/|-]MODE

    MODE: 精确权限匹配

    /MODE :任何一类(u,g,o) 对象的权限中只要能一位匹配即 可,或关系,+ 从centos7 开始淘汰,用/来代替

      例:find /etc -perm /222 -ls          # 只要一个人有权限就能匹配到
    
      -MODE :每一类对象都必须同时拥有指定权限,与关系
    
      例:find /etc -perm -222 -ls         #只要一个人条件不匹配就不显示
    
      例:find /etc -perm 220              #220在前面没有+号的情况下表示精确匹配,有就表示不关心。   0  表示不关注
    
      find -perm 755 会匹配权限模式恰好是755 的文件
    
      只要当任意人有写权限时,find -perm +222 就会匹配
    
      只有当每个人都有写权限时,find -perm -222 才会匹配
      
      只有当其它人(other )有写权限时,find -perm -002才 才会匹配

    处理动作:

      -print:默认的处理动作,显示至屏幕
    
      -ls:类似于对查到的文件执行“ls -l”命令
    
      -delete:删除查找到的文件:
    
      -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中:
    
      -ok COMMAND {}; 对查找到的每个文件执行由COMMAND指定的命令:
      对于每个文件执行命令之前,都会交互式要求用户确认.
    
      -exec COMMAND {}; 对查找到的每个文件执行由COMMAND指定的命令;

    {}:用于引用查找到的文件名名称自身。

    注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;有些命令不能接受过多参数,此时命令执行可能会失败。

    另一种方式可规避此问题:

    find | xargs COMMADN

    处理动作 -exec COMMAND {} ;

    对查找到的每个文件执行由后面命令指定的命令
    
    {}:  用于引用查找到的文件名称自身
    
    find 传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
    
    例:find /etc -perm 002 -exec chmod o-w {} ;

    参数代换:xargs 用于 产生 某个命令 的 参数。 。 xargs 入 可以读入 stdin 的数据,并且以 空格符 或 回车符将 将 stdin 的数据 分隔 成为arguments

    注意:文件 名 或者是其他意义的名词内含 有 空格符 的情况 有些命令不能接受过多参数 ,命令执行 可能会 失败,xargs可以解决

    示例:
    find | xargs COMMAND
    find /sbin -perm +7000 | xargs ls -l
    #find命令是将结果(参数)全部传给你,而xargs是将其一个个的传给你
    
    
     1 find 示例
     2 find -name “*.conf” -exec cp {} {}.orig ;
     3 
     4 备份配置文件,添加.orig 这个扩展名
     5 find /tmp -ctime +3 -user joe -ok rm {} ;
     6 
     7 提示删除存在时间超过3天以上的joe 的临时文件
     8 find ~ -perm -002 -exec chmod o-w {} ;
     9 
    10 在你的主目录中寻找可被其它用户写入的文件
    11 
    12 find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} ;
    13 find /home –type d -ls
    View Code

    压缩、解压缩及归档工具

    file-roller
    
    compress/uncompress: .Z
    
    gzip/gunzip: .gz
    
    bzip2/bunzip2: .bz2
    
    xz/unxz: .xz
    
    zip/unzip
    
    tar
    
    cpio

    compress/uncompress

    compress [-dfvcVr] [-b maxbits] [file ...]
    -d:  解压缩 ,相当于uncompress
    -c:  结果输出至标准输出, 不删除原文件        #默认删除源文件,-c不会压缩文件,只是打印压缩的数据,一般会将结果重定向为一个文件来进行压缩。
    compress -c m > m.z
    -v:  显示详情
    uncompress 解压缩
    zcat file.Z >file          #和-c原理差不多也是可以重定向出去

    gzip/gunzip

    gzip [OPTION]... FILE ...      #会将原本文件压缩后删除原文件
    
        -d:  解压缩,相当于gunzip
    
        -c:  将压缩或解压缩的结果输出至标准输出
    
        -# :1-9 ,指定压缩比,值越大压缩比越大
         
        zcat :不显式解压缩的前提下查看文本文件内容

    实例:

    gzip -c messages >messages.gz
    
    gzip -c -d messages.gz > messages
    
    zcat messages.gz > messages

    bzip2/bunzip2/bzcat

    bzip2 [OPTION]... FILE ...
    
      -k: keep,  保留原文件
    
      -d :解压缩
    
      -# :1-9 ,压缩比,默认为6
    
      bzcat :不显式解压缩的前提下查看

    xz/unxz/xzcat

    #最新的压缩方式,压缩性能更好,但使用的人还不多

    xz [OPTION]... FILE ...

      -k: keep,  保留 原文件
      
      -d :解压缩
    
      -# :1-9 ,压缩比,默认为 为6
    
      xzcat:  不显式解压缩的前提下查看

    zip/unzip

    #可打包目录压缩,他压缩的时候会把绝对路径变成相对路径进行压缩,防止加压覆盖 打包压缩

      zip –r /testdir/sysconfig /etc/sysconfig/

    解包解压缩

      unzip sysconfig.zip
    
      cat /var/log/messages | zip message -
    
      unzip -p message > message

    tar 工具

    Tar (Tape ARchive ,磁带归档的 缩写) tar [OPTION]...

    (1)  创建归档
        tar -cf / path/tosomefile .tar FILE...      #-f 表示最终文件名
    (2) : 追加文件至归档:  注:不支持对压缩文件追加
        tar -rf /PATH/TO/SOMEFILE.tar FILE...
    (3)  查看归档文件中的文件列表
        tar -tf  /PATH/TO/SOMEFILE .tar    #-t是预览
    (4)  展开归档
        tar -xf  /PATH/TO/SOMEFILE .tar
        tar -xf  /PATH/TO/SOMEFILE .tar -C  /PATH/   #-C指定解压的文件
    (5)  结合 压缩工具实现:归档并压缩
        -j: bzip2, -z: gzip, -J: xz
    
    tar 工具
    -T 选项指定输入文件,-X 选项指定包含要排除的文件列表
    tar zcvf mybackup.tgz -T /root/includefilelist 
    tar zcvf mybackup.tgz -X /root/excludefilelist   
    分割大的 tar  文件为多份小文件:
    split –d -b Size tar-file-name prefix-name
    split –d -b 1M mybackup.tgz mybackup-parts
    合并:
    cat mybackup-parts* > mybackup.tar.gz
    View Code
     

    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
  • 相关阅读:
    不舍
    java 笔记
    Javascript 行为委托
    JavaScript 函数调用的 this词法
    Javascript 闭包
    Javascript 原型链
    理解css的BFC
    多模态检索之CCA算法
    MySQL 基础概念、基础配置、密码破解
    Python的进程和线程
  • 原文地址:https://www.cnblogs.com/songcheng/p/6690452.html
Copyright © 2020-2023  润新知