Linux工具之find命令
在Linux系统中有两个查找文件的命令,一个是locate,另一个则是find。这两个命令都是在文件系统上查找符合条件的文件,在这里简要介绍下locate,再详细介绍下find,locate是基于数据库来查找文件的。假如说把文件系统比作一本书,locate是根据目录来查找符合条件的文件,而find是通过对整本书进行查找,所以对于查找命令来说,locate的速度比find的速度快,但是find比locate要更精确。
find是一个实时查找的一个工具。
find的选项是也分很多类,这里只说一些常用的选项:
1.可以根据文件名来查找:
如 find . -name "clean*" 被引号引起来的名字支持globbing文件扩展匹配,而不是正则表达式。
注意:下面的find后面都有一个点,表示在当前目录下查找,请勿忽略
find . -iname "clean*" -iname:表示忽略匹配的文件名的大小写
find . -user root -user:是查找属主为root的文件
find . -group root -group:是查找属组为root的文件
find . -uid 1001 -uid:是查找文件属主的uid为1001的文件
find . gid 1001 -gid:是查找文件属组的gid为1001的文件
2.可以根据文件类型查找:
find /tmp -type f 查找/tmp目录下的普通文件
find /tmp -type d 查找/tmp目录下的所有目录
find /tmp -type l 查找/tmp目录下的所有链接文件
... ...
以此类推b(块设备文件),c(字符文件),s(套接字文件),p(管道文件)
说明一点:以上所有命令后都可以接 -ls以显示匹配出的文件的详细信息。
3.也可以进行逻辑的组合查找:
与:-a
或:-o
非:!或者-not
举个栗子:find /tmp -nouser -a -type f -ls -nouser:是匹配没有属主的文件(同样也可以使用-nogroup没有属组的文件)
这个例子的意思是在/tmp目录下查找没有属主且文件类型为普通文件并列出其详细信息。
4.还可以根据文件的大小来查找:
选项为-size,如:find /tmp -size 174k 查找的文件的大小经过单位换算后为174k的文件
还可以find /tmp -size +174k 表示查找的文件大于174k的
find /tmp -size -174k 表示查找的文件大小小于174k的正常文件
5.还可以根据权限来查找:
选项为-perm [mode|/mode|-mode]三种模式
mode为精确权限的查找:find /tmp -perm 666 查找文件权限为只能是666的文件
find /tmp -perm /666 表示任何一类用户(u,g,o三类用户)的权限任何一类用户满足perm的权限即可
find /tmp -perm -666 表示每一类用户的权限中的每一位同时符合条件即可满足
例如:find /tmp -perm -222 表示每类用户都有写权限
find / -perm /022 -ls 表示在根目录查找g有w权限或者o有w权限的并详细列出文件信息。注意:022中的0表示不是属主的权限,而是表示不关心属主到底是什么权限,什么都行。。
查找出的文件可以直接用find使用命令来进行处理,常见的有
-ls:列出符合条件的文件的详细信息
-print:为打印输出到屏幕,默认为此选项
-delete:把匹配出来的删除,动作极其危险。
-ok COMMAND {} \;对查找出的文件由COMMAND来执行,每个文件都需要用户来再次确认当文件数很多时就不适用了。此时可以使用下面的命令。
-exec COMMAND {} \; 和上一个命令一样,但不用每个文件都确认执行
-fls /path/to/somefile:把查找出来的文件的长格式信息存储到somefile文件中
还可以根据时间戳来查找
以天为单位进行查找
-atime:访问时间
#:过去的第#天,距此刻为止# * 24 =< x < (#+1) * 24
-#:#天内
+#:过去无穷时间到#+1天
e.g:
假设3天
-atime 3:表示过去的4天前3天或3天后
-atime -3:表示3天内的文件
-atime +3:表示4天之前的文件
-mtime:修改时间
-ctime:改变时间
以分钟为单位进行查找
-amin
-mmin
-cmin
最后再写个练习
查找/tmp目录下不属于root,bin或hadoop的所有文件或目录;用两种方法;
find /tmp -not -user root -a -not -user bin -a -not -user hadoop -ls
find /tmp -not \( -user root -o -user bin -o -user hadoop \)