本节所讲内容:

      文件查找find

 

find搜索文件系统、实时搜索

find [目录] [条件][动作]

 

[目录]

不输入代表当前目录

例:

find

find  /boot

 

[条件]

用户和组:-user -group

例:查找home目录下所有的属于追梦的文件

[root@localhost ~]# find/home/  -user zhuimeng

 

类型:-type( f 文件 , d 目录 , l 连接 , p 管道 ,c 字符文件 ,b 块文件,s socket文件 )

 

[root@localhost ~]# find/home/ -type f

[root@localhost ~]# find/home/ -type d

 

名字:-name

[root@localhost ~]# useradduser1

[root@localhost ~]# useraddvipuser3

[root@localhost ~]# touch/home/user1/aaausercccc

[root@localhost ~]# find/home/ -name *user*

 

大小:-size     +NM 大于N兆   -NG 小于NGB

[root@localhost ~]# find/boot/ -size +2M

 

时间:-mtime  -atime  -ctime

 

任务:百度一下如何针对分钟进行查找

 

扩展:linux中ctime,mtime,atime的区别

[root@localhost ~]# touchyy.txt

[root@localhost ~]# statyy.txt

  File: ‘yy.txt’

  Size: 0           Blocks:0          IO Block: 4096   regular empty file

Device: fd01h/64769d  Inode: 35698271    Links: 1

Access: (0644/-rw-r--r--)  Uid: (   0/    root)   Gid: (   0/    root)

Access: 2015-12-0820:59:28.293035474 +0800

Modify: 2015-12-0820:59:28.293035474 +0800

Change: 2015-12-0820:59:28.293035474 +0800

 

ctime:“改变时间(changetime)”

mtime :“修改时间(modificationtime)”

atime :“访问时间(accesstime)”

 

例:

改变和修改之间的区别在于是改文件的属性还是更改它的内容。

chmod a-w myfile,那么这是一个改变;改变的ctime

echo  aaa > bajie那么这是一个修改。mtime :“修改时间

atime,改变是文件的索引节点发生了改变;mtime 修改是文本本身的内容发生了变化。

 

[root@localhost ~]#chmod u+x yy.txt

[root@localhost ~]#stat yy.txt

  File: ‘yy.txt’

  Size: 0           Blocks:0          IO Block: 4096   regular empty file

Device: fd01h/64769d  Inode: 35698271    Links: 1

Access:(0744/-rwxr--r--)  Uid: (    0/   root)   Gid: (    0/   root)

Access: 2015-12-0820:59:28.293035474 +0800

Modify: 2015-12-0820:59:28.293035474 +0800

Change: 2015-12-08 21:02:06.612034204 +0800

可以看到,文件的ctime发生了改变

 

[root@localhost ~]# statyy.txt

  File: ‘yy.txt’

  Size: 4           Blocks:8          IO Block: 4096   regular file

Device: fd01h/64769d  Inode: 35698271    Links: 1

Access: (0744/-rwxr--r--)  Uid: (   0/    root)   Gid: (   0/    root)

Access: 2015-12-0820:59:28.293035474 +0800

Modify: 2015-12-08 21:03:41.775033441 +0800

Change: 2015-12-08 21:03:41.775033441 +0800

可以看到文件的ctime和mtime发生了改变

结论:无论是文件的属性还是内容发生变化,文件的ctime都会发生改变,只有文件内容发生修改的时候,文件的mtime才会发生变化

 

[root@localhost ~]# cat yy.txt

aaa

[root@localhost ~]# statyy.txt

  File: ‘yy.txt’

  Size: 4           Blocks:8          IO Block: 4096   regular file

Device: fd01h/64769d  Inode: 35698271    Links: 1

Access: (0744/-rwxr--r--)  Uid: (   0/    root)   Gid: (   0/    root)

Access: 2015-12-0821:06:45.223031969 +0800

Modify: 2015-12-0821:03:41.775033441 +0800

Change: 2015-12-0821:03:41.775033441 +0800

可以看到文件的atime发生了改变

结论:只要对文件内容进行了查看,那么atime就会发生改变

 

ls(1) 命令可用来列出文件的 atime、ctime和 mtime。
ls -lc filename 
        列出文件的 ctime     ll  -c
ls -lu filename 
        列出文件的 atime          ll  -u
ls -l filename 
         列出文件的 mtime     ll

 

[root@localhost ~]# date-s  2015-12-11

Fri Dec 11 00:00:00 CST 2015

[root@localhost ~]# find/root/  -mtime +1 | grep yy.txt

/root/yy.txt

 

[root@localhost ~]# find/root/  -mtime 2 | grep yy.txt

/root/yy.txt

 

权限:-perm

[root@localhost ~]# find/boot/ -perm 755                  #等于0775权限的文件或目录

 

4   SUID  2 SGID   1  sticky

 

[root@localhost ~]# find /tmp/-perm -777                  #至少有777权限的文件或目录

 

例:

[root@localhost ~]# mkdir ccc

[root@localhost ~]# chmod 777ccc

[root@localhost ~]# mkdir test

[root@localhost ~]# chmod 1777test/

[root@localhost ~]# touch b.sh

[root@localhost ~]# chmod 4777b.sh

 

查找:

 

[root@localhost ~]# find/root/  -perm 777

/root/ccc

[root@localhost ~]# find/root/ -perm 1777

/root/test

[root@localhost ~]# find/root/ -perm 4777

/root/b.sh

[root@localhost ~]# find/root/ -perm -777

/root/ccc

/root/test

/root/b.sh

 

查找的目录深度:

[root@localhost ~]# find/boot/ -maxdepth 2              #只查找目录第二层的文件和目录

 

多条件:

-a  -o  !   或  -and  -or -not

[root@localhost ~]#find -type f -a -perm -002

[root@localhost ~]#find -type f -and -perm /o+w

./b.sh

 

[root@localhost ~]# find! -type f -and -perm -001

 

[动作]

-ls

-ok

-exec

-print

-printf

 

[root@localhost ~]# cp/etc/passwd test2/

[root@localhost ~]# cp-r /boot/  test2/

[root@localhost ~]#find /root/test2/  -type f -exec rm {} \;

[root@localhost ~]# lstest2/

boot

[root@localhost ~]#find /root/test2/  -type f | xargs rm -rf

[root@localhost ~]# lstest2/

boot

 

参数解释:

 -exec             执行命令 

 rm 要执行的命令

 {} 表示find -type f 查找出来了文件内容

 \;   {} 和 \;之间要有空格。 固定语法,就是以这个结尾

 学习过程中如果问题,请留言。更多内容请加:
学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589