文件搜索工具

文件查找工具

      非查找工具locate

      实时查找工具find
            find黄金搭档组合xargs

locate PATH

      默认模糊搜索 搜索速度快,但数据文件不会实时更新,也可使用updataedb手动更新,鉴于非生产环境或磁盘空间较小的环境下,全局搜索会造成一瞬间或者一段时间的磁盘I/O提升
常用选项:

-i 不区分大小写搜索
-n N 只显示前N个匹配项目
-r 支持使用基本正则表达式,不支持扩展

错误提示
locate: can not stat ()`/var/lib/mlocate/mlocate.db': No such file or directory

分析
  默认系统安装生成数据库文件放置索引信/var/lib/mlocate/mlocate.db;如果系统才装好,或没怎么运行过命令,就不会或只有少量索引数据  

解决
updatedb 该命令可以在磁盘空间扫描所有文件并建立索引生成/var/lib/mlocate/mlocate.db文件

find 实时寻找,效率过低,速度慢

find [option]… [查找路径] [查找条件] [处理动作]
查找路径: 默认为当前目目录
可执行查找条件: 如文件名、大小、类型、权限等,默认为当前目录递归搜索
处理动作: 默认输出屏幕

指定所搜层次:
-maxdepth level最大深度  从1-levelnumber
-mindepth level最小深度  从1-最后一层
find /etc/ --maxdepth 3 --mindepath 3 组合使用表示搜索第三层表示一个区间
-depth 先处理目录中的文件在处理目录,根据文件名和inode查找;配合-prune可是不显示指定目录下的文件
-name "filename": 支持使用glob *,?,[],[^]
-iname "filename": 不区分大小写
-inum n 按照inode号查找
-samefile name 相同inode号的文件
-links n 连接数为n的文件
-regex "PATTERN" :以扩展的正则,匹配整个文件路径,而非文件名称
例:# find /usr/share/pixmaps -regex ".*\.jpg$"
根据属主、数组查找:
-user USERNAME
-group GROUPNAME
-uid UserID
-gid GroupID
-nouser 没有属主的文件,如某普通用户被删除后,其家目录仍在的用户此时就属于该类
-nogroup
根据文件类型查找
-type TYPE
f 普通文件
d 目录文件
l 链接文件
s 套接字文件
b 块设备文件
c 字符设备文件
p 管道文件
空文件或空目录
-empty 
示例: find /  -type d -empty
      file /   -type f -empty
组合条件
    与: -a 同时满足
[root@centos7 ~]# find / -name f2 -a -type f
    或: -o 满足任意一个条件即可
# find /root -maxdepth 1 -name f2 -o -type d
    非: -not ! 取反
# find /tmp  -not -type d  

德.摩根定律:
    (非A)或(非B) = 非(A且B)
# find /tmp -not \( -name 10a -a -type d \) 
# find /tmp ! -name 10a -o ! -type d    

    (非A)且(非B)= 非(A或B)

表示为:
    !A -a !B = !( A -o B)
    !A -o !B = !(A  -a  B)
根据大小查询
-size [+|-] #UNIT (K,M,G,c(byte))
        6k (#-1,#] --> (5k,6k]
        -6k [0,#-1]--> [0,5k]
        +6k (#,∞)--> (6k,∞)

根据时间戳
    -atime [+|-]#, 访问
        #: [#,#+1)
        +#: [#+1,∞]
        #: [0,#)
    -mtime 文件的数据最后一次修改是在n*24小时之前
    -ctime 改变
    -amin
    -mmin 文件的数据最后一次修改是在n分钟之前。
    -cmin
根据文件权限查找
-perm [/|-] MODE
    MODE: 精确查找
    /MODE: 模糊查找任意一小类(u,g,o)满足都可以
    -MODE:  任何一大项满足都可以

例子:
(1)MODE
必须是700
[root@centos7 dev]# find /root -maxdepth 1 -perm 700 -ls 
35647347    0 drwx------   3 root     root           19 Sep 19 21:21 /root/.local
68729848    4 drwx------  15 root     root         4096 Sep 19 21:23 /root/.cache
68729852    0 drwx------   3 root     root           25 Jul 20 00:06 /root/.dbus
68729884    0 drwx------  15 root     root          273 Sep 19 21:27 /root/.config
36339083    0 drwx------   2 root     root           80 Aug 31 10:21 /root/.ssh

(2) /MODE
包含其中任意小权限即可,u=r|w|x 都可以
[root@centos7 dev]# find /root -maxdepth 1 -perm /700 -ls 
100663361    8 dr-xr-x---  31 root     root         4096 Oct  3 11:01 /root
102270905    4 -rw-r--r--   1 root     root           18 Dec 29  2013 /root/.bash_logout
35647347    0 drwx------   3 root     root           19 Sep 19 21:21 /root/.local
2104765    0 drwxr-xr-x   2 root     root            6 Sep 19 21:21 /root/Desktop
36056676    0 drwxr-xr-x   2 root     root            6 Sep 19 21:21 /root/Downloads
102496820    0 drwxr-xr-x   2 root     root            6 Sep 19 21:21 /root/Videos
102270908    4 -rw-r--r--   1 root     root          100 Dec 29  2013 /root/.cshrc

(3)-MODE
包含有u=7满足,其他任意即可
[root@centos7 dev]# find /root -maxdepth 1 -perm -700 -ls
35647347    0 drwx------   3 root     root           19 Sep 19 21:21 /root/.local
2104765    0 drwxr-xr-x   2 root     root            6 Sep 19 21:21 /root/Desktop
36056676    0 drwxr-xr-x   2 root     root            6 Sep 19 21:21 /root/Downloads
102496820    0 drwxr-xr-x   2 root     root            6 Sep 19 21:21 /root/Videos
68729848    4 drwx------  15 root     root         4096 Sep 19 21:23 /root/.cache
68729852    0 drwx------   3 root     root           25 Jul 20 00:06 /root/.dbus
68729884    0 drwx------  15 root     root          273 Sep 19 21:27 /root/.config
处理动作:
    -print 默认项
    -ls 列出找到的结果
    -delete 删除
    -fls file 相当于> 重定向结果到某个文件中
    -ok COMMAND {} \; 对查找的结果执行COMMAND执行时会询问用户是否执行
    -exec COMMAND {} \; 直接执行不询问
    {}: 引用查找的文件名称本身

注: 执行处理动作是相当于有默认 [-a] 处理动作,-a是隐藏的,但不可忽略其存在性 

如:
查找/root目录下名称为.ssh的文件和精确权限为700的文件,并使用ls列出其结果
36339083    0 drwx------   2 root     root           80 Aug 31 10:21 /root/.ssh
加上-ls后发现.ssh文件没有正常显示出来,分析下面的命令为 # find /root -maxdepth 1 -name.ssh -o -perm 700 -a -ls  模式权限执行时先执行了后面的与操作-a得到结果,再到生成结果后去或-o操作,找.sh所以没找到,解决方法先加上()先执行前面的或操作

[root@centos7 dev]# find /root -maxdepth 1 -name .ssh -o -perm 700 -ls 
35647347    0 drwx------   3 root     root           19 Sep 19 21:21 /root/.local
68729848    4 drwx------  15 root     root         4096 Sep 19 21:23 /root/.cache
68729852    0 drwx------   3 root     root           25 Jul 20 00:06 /root/.dbus
68729884    0 drwx------  15 root     root          273 Sep 19 21:27 /root/.config
102480395    0 drwx------   4 root     root           27 Aug 25 14:18 /root/.ansible
68728660    0 drwx------   5 root     root           66 Sep 19 21:21 /root/.mozilla

[root@centos7 dev]# find /root -maxdepth 1 -name .ssh -o -perm 700 
/root/.local
/root/.cache
/root/.dbus
/root/.config
/root/.ssh
/root/.ansible
/root/.mozilla

注: ()需要加转义符\转义,且(  )里面有空格作为间隔
[root@centos7 dev]# find /root -maxdepth 1 \( -name .ssh -o -perm 700 \) -ls  
35647347    0 drwx------   3 root     root           19 Sep 19 21:21 /root/.local
68729848    4 drwx------  15 root     root         4096 Sep 19 21:23 /root/.cache
68729852    0 drwx------   3 root     root           25 Jul 20 00:06 /root/.dbus
68729884    0 drwx------  15 root     root          273 Sep 19 21:27 /root/.config
36339083    0 drwx------   2 root     root           80 Aug 31 10:21 /root/.ssh
102480395    0 drwx------   4 root     root           27 Aug 25 14:18 /root/.ansible
68728660    0 drwx------   5 root     root           66 Sep 19 21:21 /root/.mozilla

xargs参数替换命令

      xargs满足管道或其他命令只能传递标准输入,而不能传递参数而应运而生,可用于生成命令参数,把标准输入作为参数传递处来。xargs—从标准输入构建和执行命令行

可取一个文件中的指令或一个命令结果

[root@centos7 ~]#  seq 100 |xargs echo 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[root@centos7 ~]# cat f12|xargs whatis
vim (1)              - Vi IMproved, a programmers text editor
vi (1)               - Vi IMproved, a programmers text editor
vi (1p)              - screen-oriented (visual) display editor
nano (1)             - Nano's ANOther editor, an enhanced free Pico clone
bc (1)               - An arbitrary precision calculator language
bc (1p)              - arbitrary-precision arithmetic language
touch (1)            - change file timestamps
touch (1p)           - change file access and modification times
useradd (8)          - create a new user or update default new user information
usermod (8)          - modify a user account
userdel (8)          - delete a user account and related files

[root@centos7 ~]# find /root -maxdepth 1 -name “f*” | xargs cat
ate default new user information
usermod (8) - modify a user account
userdel (8) - delete a user account and related files

>[root@centos7 ~]# find /root  -maxdepth 1  -name "f*" | xargs cat 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值