设为首页 收藏本站
查看: 392|回复: 0

[经验分享] Linux文件查找之locate与find

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-23 09:59:01 | 显示全部楼层 |阅读模式
大纲
一、locate命令
二、find命令
三、locate与find优缺点对比
四、find实例

一、locate命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
locate - find files by name        # 通过文件名查找文件

SYNOPSIS
       locate [OPTION]... PATTERN...
        
[iyunv@soysauce scripts]# locate inittab
-bash: locate: command not found            # 系统上没有安装locate
[iyunv@soysauce scripts]# yum install -y mlocate    # 安装mlocate包
[iyunv@soysauce scripts]# locate inittab            # 查找inittab这个文件
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory # 文件数据库未建立
[iyunv@soysauce scripts]# updatedb          # 手动生成文件数据库
[iyunv@soysauce scripts]# locate inittab    # 可以看到此时文件数据库已生成,查找到包含inittab字符串的文件
/etc/inittab
/usr/share/man/man5/inittab.5.gz
/usr/share/terminfo/a/ansi+inittabs
/usr/share/vim/vim70/syntax/inittab.vim




二、find命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
find - search for files in a directory hierarchy    #  在目录层次中寻找文件

SYNOPSIS
       find [-H] [-L] [-P] [path...] [expression]
find简单用法:
           find 查找路径 查找标准 查找到以后的处理运作
            
查找路径:默认为当前目录,可自定义
查找标准:默认为指定路径下的所有文件,下面1-7都是查找标准
处理运作:默认为显示
            -print: 显示
            -ls:类似ls -l的形式显示每一个文件的详细
            -ok COMMAND {} \; 每一次操作都需要用户确认
            -exec COMMAND {} \;
            |xargs  COMMAND
            -delete            删除



1.依据文件类型查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-type
        f:普通文件   
        d:目录文件
        c:字符设备文件
        b:块设备文件
        l:软连接文件
        p:命名管道文件
        s:套接字文件
         
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 root 4096 Nov 21 15:00 a
-rw-r--r-- 1 user2 root    0 Nov 21 15:00 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:00 c -> /etc/inittab
[iyunv@soysauce test]# find . -type d    # 查找当前目录下是目录的文件
.
./a





2.依据文件权限查找
(1).-perm MODE:精确匹配
1
2
3
4
5
6
7
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 root 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 root    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -perm 644    # 查找当前目录下权限为644的文件
./b



(2).-perm -MODE:文件权限能完全包含此MODE时才符合条件
1
2
3
4
5
6
7
8
9
10
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 root 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 root    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -perm -644  # 查找当前目录下属主可读可写,属组和其他用户可读的文件
.
./a
./b
./c



(3).-perm /MODE:9位当中任意一位匹配即满足条件
1
2
3
4
5
6
7
8
9
10
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 root 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 root    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -perm /441   # 查找当前目录下属主或属组有读权限或其他人有执行权限的文件
.
./a
./b            # b的第三位虽然没有可执行权限,但是属主有读权限,所以也满足
./c





3.依据文件属主查找
(1).-user USERNAME
1
2
3
4
5
6
7
[iyunv@soysauce test]# ll   
total 4
drwxr-xr-x 2 user1 root 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 root    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -user user1    # 查找属主是user1的文件
./a



(2).-uid UID
1
2
3
4
5
6
7
8
9
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 root 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 root    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# id user2
uid=501(user2) gid=501(user2) groups=501(user2)
[iyunv@soysauce test]# find . -uid 501    # 查找属主uid是501的文件
./b



(3).-nouser
1
2
3
4
5
6
7
8
9
10
[iyunv@soysauce test]# userdel -r user1    # 删除user1用户
[iyunv@soysauce test]# id user1         # 此时可以看到user1用户已经不存在
id: user1: No such user
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2   500 root 4096 Nov 21 15:22 a   # 此时a的属主位已经变成了原先属主的uid
-rw-r--r-- 1 user2 root    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root   12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -nouser        # 查找当前目录下没有属主的文件
./a




4.依据文件属组查找
(1).-group GROUPNAME
1
2
3
4
5
6
7
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 user1 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 user2    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root    12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -group user1    # 查找当前目录下属组为user1的文件
./a



(2).-gid GID
1
2
3
4
5
6
7
8
9
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 user1 4096 Nov 21 15:22 a
-rw-r--r-- 1 user2 user2    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root    12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# id user2
uid=501(user2) gid=501(user2) groups=501(user2)
[iyunv@soysauce test]# find . -gid 501    # 查找属组uid是501的文件   
./b




(3).-nogroup
1
2
3
4
5
6
7
8
9
10
[iyunv@soysauce test]# userdel -r user2      # 删除user2用户
[iyunv@soysauce test]# id user2            # 此时可以看到user2用户已经不存在
id: user1: No such user
[iyunv@soysauce test]# ll
total 4
drwxr-xr-x 2 user1 user1 4096 Nov 21 15:22 a
-rw-r--r-- 1   501   501    0 Nov 21 15:22 b
lrwxrwxrwx 1 root  root    12 Nov 21 15:22 c -> /etc/inittab
[iyunv@soysauce test]# find . -nogroup        # 查找当前目录下没有属组的文件     
./b





5.依据文件大小查找
(1).-size #k|M|G
1
2
3
4
5
6
7
8
[iyunv@soysauce test]# ls -lh
total 29M
drwxr-xr-x 2 user1 user1 4.0K Nov 21 15:22 a
-rw-r--r-- 1 user2 user2 9.7M Nov 21 16:06 b
lrwxrwxrwx 1 root  root    12 Nov 21 15:22 c -> /etc/inittab
-rw-r--r-- 1 root  root   19M Nov 21 16:08 d
[iyunv@soysauce test]# find . -size 10M    # 查找当前目录下文件大小在9M-10M之间的文件
./b



(2).-size +#k|M|G
1
2
3
4
5
6
7
8
[iyunv@soysauce test]# ls -lh
total 29M
drwxr-xr-x 2 user1 user1 4.0K Nov 21 15:22 a
-rw-r--r-- 1 user2 user2 9.7M Nov 21 16:06 b
lrwxrwxrwx 1 root  root    12 Nov 21 15:22 c -> /etc/inittab
-rw-r--r-- 1 root  root   19M Nov 21 16:08 d
[iyunv@soysauce test]# find . -size +10M        # 查找当前目录下文件大小大于10M的文件
./d



(3).-size -#k|M|G
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@soysauce test]# ls -lh
total 46M
drwxr-xr-x 2 user1 user1 4.0K Nov 21 15:22 a
-rw-r--r-- 1 root  root  8.0M Nov 21 16:13 b
-rw-r--r-- 1 user2 user2 9.7M Nov 21 16:06 c
-rw-r--r-- 1 root  root   19M Nov 21 16:08 d
-rw-r--r-- 1 root  root  9.0M Nov 21 16:16 f
[iyunv@soysauce test]# find . -size -10M        # 查找当前目录下大小在0-9M之间的文件,包括9M
.
./a
./b
./f





6.依据文件时间戳查找
(1).-atime [+|-]#
1
2
3
[iyunv@soysauce test]# find /etc/ -atime 10   # 查找/etc目录下距现在刚好10天访问过的文件
[iyunv@soysauce test]# find /etc/ -atime +10  # 查找/etc目录下距现在至少10天没访问过的文件
[iyunv@soysauce test]# find /etc/ -atime -10  # 查找/etc目录下距现在10天内访问过的文件



(2).-mtime [+|-]#
1
2
3
[iyunv@soysauce test]# find /etc/ -mtime 10   # 查找/etc目录下距现在刚好10天修改过的文件
[iyunv@soysauce test]# find /etc/ -mtime +10  # 查找/etc目录下距现在至少10天没修改过的文件
[iyunv@soysauce test]# find /etc/ -mtime -10  # 查找/etc目录下距现在10天内修改过的文件



(3).-ctime [+|-]#
1
2
3
4
5
[iyunv@soysauce test]# find /etc/ -ctime 10   # 查找/etc目录下距现在刚好10天改变过的文件
[iyunv@soysauce test]# find /etc/ -ctime +10  # 查找/etc目录下距现在至少10天没改变过的文件
[iyunv@soysauce test]# find /etc/ -ctime -10  # 查找/etc目录下距现在10天内改变过的文件

同样的以分钟为单位进行查找还有一组amin、mmin、cmin





7.依据文件名查找
(1).-name
1
2
3
[iyunv@soysauce test]# find /etc -name "passwd"
/etc/pam.d/passwd
/etc/passwd



(2).-iname
1
2
3
4
5
6
7
8
[iyunv@soysauce test]# ls -lh
total 8.1M
drwxr-xr-x 2 user1 user1 4.0K Nov 21 15:22 a
-rw-r--r-- 1 root  root  8.0M Nov 21 16:13 b
-rw-r--r-- 1 root  root     0 Nov 21 16:21 B
[iyunv@soysauce test]# find . -iname "b"       # 查找当前目录下文件名是b的文件,忽略大小写
./B
./b




三、locate与find优缺点对比
1.locate命令
  • 优点:速度快
  • 缺点:非实时,模糊匹配,查找是根据全系统文件数据库进行的


2.find命令
  • 缺点:遍历指定目录中的所有文件完成查找,速度慢(相对于locate)
  • 优点:实时,精确查找,支持众多查找标准



四、find实例
1、查找/var目录下属主为root并且属组为mail的所有文件
1
[iyunv@soysauce ~]# find /var -user root -group mail



2、查找/usr目录下不属于root,bin,或student的文件
1
[iyunv@soysauce ~]#  find /usr -not \( -user root -o -user bin -o -user student \)



3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
1
[iyunv@soysauce ~]#  find /etc -mtime -7 -not \ ( -user root -o -user student \)



4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root
1
[iyunv@soysauce ~]#  find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;



5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中
1
[iyunv@soysauce ~]#  find /etc -size +1M >> /tmp/etc.largefiles



6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息
1
[iyunv@soysauce ~]#  find /etc -not -perm /222 -ls   



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-142476-1-1.html 上篇帖子: CentOS6.5启停脚本例子 下篇帖子: 使用mutt命令发送邮件(Centos/RHEL) For Gmail Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表