文件查找

文件查找

文件查找命令locate和find

locate

  • 文件查找:在文件系统上查找符合条件的文件
  • 非精确非实时查找,查找时依赖于/var/lib/mlocate/mlocate.db数据库
  • 依赖于事先构建的索引
      索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
  • 索引过程需要遍历整个根文件系统,极其消耗资源
  • 工作特点:
      查找速度快
      模糊查找
      非实时查找
      搜索的是文件的全路径,不仅仅是文件名
      可能只搜索用户具备读和执行权限的目录
      注意:查找时注意用户权限
  • locate - 根据文件名查找文件(外部命令)
  • locate - Usage: locate [OPTION]… [PATTERN]…
  • 常见选项:
       -i:忽略大小搜索
       -n #:只列出前面#个匹配的文件
       -r:使用基本正则表达式
示例:
    1、搜索名称或路径中带有“conf”的文件
        [root@centos6 ~]#locate -in3  Conf 
        /boot/config-2.6.32-754.el6.x86_64
        /boot/grub/grub.conf
        /etc/Trolltech.conf
    2、使用Regex来搜索以“.conf”结尾的文件
        [root@centos6 ~]#locate -n3 -r "\.conf$"
        /boot/grub/grub.conf
        /etc/Trolltech.conf
        /etc/asound.conf

find命令

  • 实时查找工具,通过遍历指定路径完成文件的查找
  • find 命令的工作特点:
      ①实时查找
      ②精确查找
      ③查找速度略慢
      ④ 查找时会增加磁盘的读取压力
      ⑤可能只搜索用户具备读和执行权限的目录
      注意:查找时注意用户权限
  • find - 查找文件(外部命令)
  • Usage:find [选项] [搜索路径] [查找条件] [处理动作]
      ①搜索路径:指明具体的搜索路径,默认是当前目录
      ②查找条件:指定查找文件的标准
      ③处理动作:对符合条件的文件执行操作,默认打印至当前终端
  • find 的查找条件有:
      ①从文件元数据查询:类型,权限,大小,时间,属主,属主
      ②从文件夹属性查询:文件名称,查询文件的深度(find默认递归查找)
  • find查找详解
1)常用选项:
    -H:
    -L:
    -P:
2)搜索路径:
    默认在当前目录下搜索
3)查找条件:
    -name:按名称查找(支持使用glob)
        -iname:不区分大小写
        -inum #:inode为#的文件
        -samefile name:同一文件;指的是相同文件系统    相同inode的文件
        -link #:链接数为#的文件
        -regex pattern:使用正则表达式匹配文件名
    !注意:此处pattern建议双引号引起来;而且find是搜索的是全径,
        因此搜索以.conf结尾的文件时表示为'.*\.conf' .*必须存在
    
    -perm:按权限查找
        -perm  mode:精确权限查找
        -perm /mode:表示或者  / | + :但是+从centos7开始淘汰
        -perm -mode:表示并且
        给定mode时将权限展开:其中表示-的权限代表不关心(精确匹配除外)
            eg:(640)rw-r----- ,0表示不关心,即-表示不关心此处权限
        具体实例: 
            -perm  640  表示精确匹配权限位640的文件
            -perm -640  
                此处-640满足条件的a:rw g:r这三个权限均在的文件,其
                他权限不关心
            -perm +640  此时将权限展开:rw-r----- 
                此处+640满足条件的a:rw g:r这三个权限中有一个即可的
                文件,其他权限不关心    
    
    -user:按文件属主查找
    -group:按文件属组查找
        -uid useUID:按属主为指定的useUID查找
        -gid useGID:按属组为指定的useGID查找
        -nouser:查找无属主的文件
        -nogroup:查找无属组的文件
    
    -size:按文件大小进行查找
        -size [+|-] #[K|M|G..] 下面以单位为M举例
             # M:表示范围是(#-1M;#M]
           - # M:表示范围是(0,#-1M]
           + # M:表示范围是(#M,∞)
        !注意:计算时带单位
            eg: 50K表示
                 50K:(49K,50K]
                -50K:(0,49K]
                +50K:(50K,∞)
    
    按时间查找:time以天为单位,min以分钟为单位,
    -atime:
    -mtime:
    -ctime:
     -amin:
     -mmin:
     -cmin:
        时间查找也涉及[+|-]问题,原理同上,直接以天为例 
        当前时间:2019-8-3 00:00
        find命令认为24小时之内为0天
            -atime  1:2019-8-2 00:00 - 2019-8-3 00:00
            -atime -1:2019-8-3 00:00 - 当前时间
            -atime +1:2019-8-2 00:00 以前

    -type:按文件类型进行查找
        l:符号链接
        f:普通文件
        b:块设备
        c:字符设备
        s:套接字
        p:管道文件
        d:目录
    -maxdepth level:指定最大搜索目录深度
    -mindepth level:指定最小搜索目录深度
    -depth:先处理目录内的文件,再处理目录

    查找条件的与或非:
        默认find查找多个条件同时写是与的关系:
    eg:
        find /data -perm /111 -regex '.*\.sh' -type f -ls
        
        组合条件:
            与:-a(默认)
            或:-o
            非: !  -not
        摩根定律:
            (!A) -o (!B)=!(A -a B)
            (!A) -a (!B)=!(A -o B)
        find 命令后面添加()时()需要转义:即\( \)
    eg:
        find /data \( -perm 640 -o -regex '.*\.sh$' \) -ls

4)处理动作:对满足查找条件的文件执行的处理动作
    -print:默认的处理动作,打印至当前终端
    -ls:类似于ls -l的长格式显示满足查找条件的文件
    -delete:删除满足查找条件的文件
    -fls file:将满足查找条件的文件的长格式信息保存至指定的file文件中
    -ok CMD {} \; 将满足查找条件的文件执行CMD的命令,
        默认带--interactive(提示)选项;执行命令会交互让用户确认
    --exec CMD {} \; 将满足查找条件的文件执行CMD的命令,不提示
        {}:用于引用查找到的文件名
    find传递查找到的文件至后面的CMD时,将查找的全部文件名一次性全部传递

xargs命令

  • 简述xargs的一般用法,xargs是将STDIN的数据以空格符或者回车传给后面的命令作为参数
  • xargs其后面默认带echo命令;即将STDIN的数据以空格符或者回车显示
  • 若当命令不支持参数较多时,xargs还可将参数分割,指定参数一个一个传给此命令
  • 注意:文件名或者是其他有意义的名词内含有空格,处理比较麻烦
  • xargs 常用选项:
      -0 --null:输入项由空字符(null)作为终止符,而不是空格
      -n max-args:指定一行最多显示几个参数
  • 示例
   xargs支持STDIN意味着可以使用管道将命令输出传给xargs 然后xargs 把这
些作为参数传给xargs后面的命令
    CMD1| xargs CMD2
eg:批量添加用户:useradd默认其后只能跟一个参数,此时可以使用xargs实现
    [root@centos7 data]# echo user{1..5}|xargs -n1 useradd
    [root@centos7 data]# tail -5 /etc/passwd
    wang:x:1003:1005::/home/wang:/bin/bash
    user2:x:1004:1006::/home/user2:/bin/bash
    user3:x:1005:1007::/home/user3:/bin/bash
    user4:x:1006:1008::/home/user4:/bin/bash
    user5:x:1007:1009::/home/user5:/bin/bash
    [root@centos7 data]# echo user{1..5}|xargs -n1 userdel -r
        这样就批量的把五个用户删除啦!

eg:利用xargs实现文件内容转置(有规律的文件默认以空格作为分隔符时可以用xargs)
    [root@centos7 test]# cat nameage.txt 
    tom:18	job:20	jerry:19
    [root@centos7 test]# cat nameage.txt | xargs -n1
    tom:18
    job:20
    jerry:19
    [root@centos7 test]# cat -A nameage.txt 
    tom:18^Ijob:20^Ijerry:19$
    [root@centos7 test]# cat nameage.txt | xargs -n1| paste -s
    tom:18	job:20	jerry:19
    [root@centos7 test]# 

eg:xargs经常结合find命令使用
    [root@centos7 test]# find /data/ -perm /111 -type f | xargs chmod -x
    去掉了/data目录下所有具有执行权限的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值