y_0034.gif

文件搜索工具的应用

当我们新创建了一个文件,或者忘记某一个文件存在的位置,在海量文件夹中一个一个找到那就很困难了



文件搜索工具之一locate

locate 非实时查找工具,基于数据库预建的文件索引查找文件,搜索速度——超音速!搜索是文件全路径不仅仅是文件名,采用模糊查找。索引构建过程需要遍历整个根文件系统,极其消耗资源,所以使用locate搜索文件是最好是搜索系统默认文件。重新更新最新索引命令updatedb,数据库文件为/var/lib/mlocate/mlocate.db

  • locate 选项

  locate -i 文件名 执行区分大小写的模糊搜索
 locate -n 只列举当前第几个匹配目录
 locate -r 模糊搜索
 locate -w 搜索目录
 locate -b 只搜索基名
  • 实例

#我新建了一个文件liaoxz.file1 
[root@centos6 ~]# touch /var/www/liaoxz.file1
[root@centos6 ~]# locate liaoxz.file1
[root@centos6 ~]# 
#查找发现没有查找到我刚刚新建的文件,是因为locate不是实时查找工具,依赖于数据库的索引搜索
查看数据库文件的ctime时间,发现不是当前时间,而我搜索的是刚刚新建的文件,就是说在库里面还
没有建立相关索引。
[root@centos6 mlocate]# stat mlocate.db 
  File: `mlocate.db'
  Size: 3346365   	Blocks: 6536       IO Block: 4096   regular file
Device: 802h/2050d	Inode: 129888      Links: 1
Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (   21/ slocate)
Access: 2016-08-12 03:32:03.123850382 +0800
Modify: 2016-07-27 03:32:03.599902173 +0800
Change: 2016-08-12 03:32:03.600902173 +0800
#使用命令重新建立系统索引关系
#ps:建议最好在系统空闲时执行updatedb。
[root@centos6 mlocate]# updatedb 
[root@centos6 mlocate]# locate liaoxz.file1
/var/www/liaoxz.file1
[root@centos6 mlocate]# 
#更新索引后搜索成功

[root@centos6 mlocate]# locate -r "\.sh$"
#使用模糊搜索文件



文件查找工具之二find

find是一个实时查找工具,查找的特点是可以精确查找,可以通过条件来搜索,缺点是查找速度慢,因为是在磁盘上递归查看。


find使用语法

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

                 查找路径:默认为当前目录;

    查找条件:指定查找条件默认查找为指定路径下的所有文件;

                处理动作:默认为打印至屏幕;


  

  • 查找路径

默认为当前目录,可以自己指定目录

  • 查找条件

#时间查找
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
-anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; 
-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算; 
-cmin<分钟>:查找在指定时间之时被更改过的文件或目录; 
-cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; 
-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算; 
-daystart:从本日开始计算时间;
#文件大小查找
-size 
[root@centos6 mlocate]# find /etc/ -size +10
文件大小查找指定时间的用法
-size +10k 指10k以上不包含10k
-size 10k 指9k(不包括)以上10k(包括)以下
-size -10k 指9k(包括)以上10k( 不包括)以下
以整数为准
例如
-size 2M 指的是1M以上(不包括)2M(包括)以下
#根据权限查找
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系
0 表示不关注
[root@centos6 mlocate]# find /testdir/ -perm /222 表示只要有一位有写入权限就显示出所匹
配的文件
[root@centos6 mlocate]# find /testdir/ -perm -222 表示必须每一位都要有写入权限
根据文件名和inode查找:
-name "文件名称":支持使用glob
*, ?, [], [^]
-iname"文件名称":不区分字母大小写
-inumn 按inode号查找
-samefilename 相同inode号的文件
-links n 链接数为n的文件
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
[root@centos6 mlocate]# find /etc/ -name issue 
/etc/issue
#根据文件名称查找文件
[root@centos6 mlocate]# find / -inum 2  
/
/sys/fs
/testdir
/dev/pts/ptmx
/proc/sys/fs/binfmt_misc/status
#inode号为2的文件
[root@centos6 mlocate]# stat /sys/fs/
  File: `/sys/fs/'
  Size: 0         	Blocks: 0          IO Block: 4096   directory
Device: 0h/0d	Inode: 2           Links: 4
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
#根据属主属组查找
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uidUserID:    查找属主为指定的UID号的文件
-gidGroupID:   查找属组为指定的GID号的文件
-nouser:       查找没有属主的文件
-nogroup:      查找没有属组的文件
属主为liaoxz的文件
[root@centos6 ~]# find /home/ -user liaoxz
/home/liaoxz
/home/liaoxz/.mozilla
/home/liaoxz/.mozilla/plugins
/home/liaoxz/.mozilla/extensions
/home/liaoxz/.bash_profile
/home/liaoxz/.bashrc
/home/liaoxz/haha.test2
/home/liaoxz/.bash_logout
/home/liaoxz/.Xauthority
/home/liaoxz/.bash_history
/home/liaoxz/.ssh
/home/liaoxz/.ssh/known_hosts
/home/liaoxz/haha.test
/home/liaoxz/haha.test1
/home/liaoxz/.gnome2
#属组为liaoxz文件
[root@centos6 ~]# find /home/ -group liaoxz
/home/liaoxz
/home/liaoxz/.mozilla
/home/liaoxz/.mozilla/plugins
/home/liaoxz/.mozilla/extensions
/home/liaoxz/.bash_profile
/home/liaoxz/.bashrc
/home/liaoxz/haha.test2
/home/liaoxz/.bash_logout
/home/liaoxz/.Xauthority
/home/liaoxz/.bash_history
/home/liaoxz/.ssh
/home/liaoxz/.ssh/known_hosts
/home/liaoxz/haha.test
/home/liaoxz/haha.test1
/home/liaoxz/.gnome2
#根据类型查找
-type TYPE:
      f: 普通文件
            d: 目录文件
            l: 符号链接文件
            s:套接字文件
            b: 块设备文件
            c: 字符设备文件
            p: 管道文件
查看/testdir/普通文件            
[root@centos6 ~]# find /testdir/ -type f 
/testdir/diskload.sh
/testdir/2
/testdir/.systeminfo.sh.swp
/testdir/disk.sh
/testdir/10.1.252.249
/testdir/systeminfo.sh


下面讲解组合条件

需要使用到摩尔定律

与:-a
或:-o
非:-not, !

用实例来说明比较绕脑的与 非 或

1.找出/tmp目录下,属主不是root,且文件名不是fstab的文件
[root@centos6 ~]# find /tmp/ -not -user root -not -name fstab
#找出/tmp/目录下属主不是root,文件名也不是fstab,因为默认就是 与 的关系所以不用加-a。
[root@centos6 ~]# find /tmp/ -not -user root -a -not -name fstab
#找出目录下属主不是root并且文件名也不是fstab的文件
[root@centos6 ~]# find /tmp/ -not \( -user root -o -name fstab \)
#找出目录下不是(属主为root 或者文件名为fatab;就是说两者都取)
2.查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@centos6 ~]# find /etc/init.d/ -perm -111 -a -perm /002
  • 处理动作 

-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件;
-flsfile:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题
#对查找的文件执行ls-l
[root@centos6 ~]# find /tmp/ -not -user root -ls
563228    4 drwx------   2 gdm      gdm          4096 Jul 25 22:03 /tmp/orbit-gdm
563250    0 srwxr-xr-x   1 gdm      gdm             0 Jul 25 22:01 /t



y_0033.gif