文件命令查找之find:
个人理解的(文件查找)就是按照某种需要的条件对符合条件的文件进行筛选。 find和grep是不一样的,grep是用来查找文本内容的,查找字符串的,而find是用来查找文件的。{grep找文本,find找文件}。find是实时查找工具也就是说它随时都可以查找出更新或删除的文件。find工作时是遍历整个文件系统的,根据给的条件在文件系统中一个一个的找。
find的特性,因为查找时要遍历整个文件系统,所以它的查找速度会慢下来,find查找具有实时性,它是精确查找,支持glob通配符。 下面是一些实例。
find用法:find 路径 (告诉find去哪里找) 命令参数[查找条件] 输出形式(处理动作)
根据文件名查找:-name 实例
-iname 不区分文件名大小写
[[email protected] ~]# find /etc -name default
/etc/default
/etc/sysconfig/networking/profiles/default
一、 根据文件从属关系查找:-user
[[email protected] ~]# find /tmp -user root -exec ls -la {} \;
total 12
drwxrwxrwt. 3 root root 4096 Dec 19 15:45 .
通过上面这个例子就知道 这个文件属主的确是 root,后面的 -exec ls -la {} \;是处理动作,意思就是把找到的内容做什么样的处理。
-ok 作用和exec一样意思 只是要询问操作者而已。来看看实例
-print为标准输出(默认就为标准输出)
-delete删除查找出的文件
-fls把找出的信息保存到指定文件
[[email protected] ~]# find /tmp -user root -ok ls -ld {} \;
< ls ... /tmp > ? y(此处是询问)
drwxrwxrwt. 3 root root 4096 Dec 19 15:45 /tmp
注意使用格式:-exec 你希望怎么处理查找出来的文件 {} \;一定要注意{}和\之间的空格
-exec 命令 {} \;
1、根据组查找:-group
[[email protected] ~]# find /tmp -group root -exec ls -ld {} \;
drwxrwxrwt. 3 root root 4096 Dec 19 15:45 /tmp
drwxrwxrwt 2 root root 4096 Dec 19 14:36 /tmp/.ICE-unix
2、根据uid查找我们先来指定一个用户的uid
useradd -u clown
[[email protected] ~]# find /home -uid 520 -exec ls -ld {} \;
drwx------ 4 clown clown 4096 Dec 19 16:57 /home/clown
-rw-r--r-- 1 clown clown 124 Jul 24 02:55 /home/clown/.bashrc
3、根据gid来查:-gid
[[email protected] ~]# find /home -gid 520 -exec ls -ld {} \;
drwx------ 4 clown clown 4096 Dec 19 16:57 /home/clown
-rw-r--r-- 1 clown clown 124 Jul 24 02:55 /home/clown/.bashrc
4、根据文件大小来查找: -size
-size查找大于100M的文件,可根据自己先需要加上G,M,k
[[email protected] ~]# find /var -size +100M -exec ls -lh {} \;
[[email protected] ~]# echo $?
0
没有这样的 .........但是命令是执行成功的,状态码返回值为0.
如果返回值是1-255则说明命令执行失败。
要查看小于一百的有很多很多的
5、根据文件名查找:-name 实例
-iname 不区分文件名大小写
[[email protected] ~]# find /etc -name default
/etc/default
/etc/sysconfig/networking/profiles/default
6、根据文件类型来查找 -type
在Linux中文件类型有如下几种:
f:普通文件
d:目录
c:字符
b:块
p:管道
s:套接字
l:符号链接文件
实例:
[[email protected] ~]# find /tmp -type d -exec ls -ld {} \;
drwxrwxrwt. 3 root root 4096 Dec 19 15:45 /tmp
drwxrwxrwt 2 root root 4096 Dec 19 14:36 /tmp/.ICE-unix
-nouser与-nogroup:查找没有属组和属主的文件
二、组合测试
如果给了find多个条件,那么find默认逻辑就是 -a ,
[[email protected] ~]# find /etc -nogroup -type f -ls
[[email protected] ~]# echo $?
0
1、-a就是与运算 --- 只有两个条件都满足才符合条件
-a表示与关系:
[[email protected] ~]# find /etc -nogroup -a -type f | wc -l
0
2、-o表示或运算---只要其中有一个条件满足就符合条件
-o表示或关系:
[[email protected] ~]# find /etc -nogroup -o -type f | wc -l <------
1346<-----
前面这两个命令一样,能看出分别吧
3、-not表示与条件相反的:
[[email protected] ~]# find /tmp -not -user root -a -not -group root
[[email protected] ~]# echo $?
0
没有这样的文件
三、根据时间戳来查找:
1、以天数为时间
-mtime修改时间
-ctime改变时间
2、以分钟为时间
这是以分钟为单位
-amin访问
-mmin修改
-cmin改变
[[email protected] ~]# find /home -mtime -10 十天内被修改过的文件
/home
/home/po
/home/clown
-ctime,十天内没有被修改过的文件
[[email protected] ~]# find /home -ctime +10
/home/po/.bash_logout
/home/kim/.bashrc
/home/kim/.bash_history
根据权限来查找-perm
-perm [/-mode]
mode:为精确查找
/mode:只要有一位查找中的权限就符合条件
[[email protected] ~]# find /etc -perm /007 | wc -l
1777
-mode:007相当于777,-006相当与666
[[email protected] ~]# find /etc -perm -007 | wc -l
556
查找权限为700的
[[email protected] ~]# find /etc -perm 700 -ls
表示精确查找
917860 4 drwx------ 7 root root 4096 Dec 7 13:27 /etc/polkit-