终于下决心写这个命令的详解,挑站下自己的毅力,争取尽量写多点。
find命令,跟英文意思一致,用于在磁盘内查找文件、目录等。
--help可以获得命令格式等简单帮助信息。
语法:
find 路径 -选项 [ -print ] [ -exec commdnd ] {} \;
如果路径是空字符串,则使用当前路径。
如果后面的表达式为空,那么则使用默认的表达式。
如图所示,路经后没有表达式,效果相当于查找任意,包括目录。
-print选项和-print0选项,选项为True,将在标准输出打印搜索结果完整的文件名(包含路径)。
一般来说输出的文件名最后有结束符、换行符。如果你不想输出它们,那么你就需要使用-print0选项。
-type选项,定义本次搜索文件的类型,f代表普通文件,d代表目录,l代表软连接文件,p代表管道名,b代表块文件,s代表sock文件,c代表字符设备文件
例1:查找名为bcd的目录
find ./ -type d -name bcd
如图,搜索到两个名为bcd的目录
-name选项和-iname选项,查找指定名的文件,-iname选项不区分大小写
例2:查找以b开头的普通文件(区分大小写)
find ./ -type f -name "b*"
例3:查找以b开头的普通文件(不区分大小写)
find ./ -type f -iname "b*"
如图,-iname搜索结果包含b和B开头的文件,-name仅包含b开头的文件。
这里有个细节,例子中使用了通配符“*”,此时必须使用引号括起来代表文件名,否则搜索结果未空。本图第一行运行结果为空。
如果没有“-type f”,那么除了普通文件,目录等其他类型文件也会被搜索到。
例4:查找以b开头的文件(不区分大小写)
find ./ -iname "b*"
-perm选项,按文件权限来查找文件
例5:查找权限为777的普通文件
find ./ -type f -perm 0777 -print
如图,b3.txt文件权限是777,其他文件不是。搜索结果只有b3.txt
例6:下面3个命令用法分别针对查找设置了SUID、SGID、粘着位(sticky)文件
find ./ -type f -perm 4755 或 find ./ -type f -perm /u=s
find ./ -type f -perm 2755 或 find ./ -type f -perm /g=s
find ./ -type f -perm 1755 或 find ./ -type f -perm /o=t
对创建者设置了强制位,执行这个文件时,将会以文件所有者身份执行该文件。
粘贴位只对目录有效,它可以让普通用户对该目录下文件可写,但是只有文件主和root用户可以删除。
-empty选项,查找空文件(文件长度为零)
例7:查找bcd目录下的空文件
find ./bcd -empty
如图,bcd下有两个文件,其中B1.txt为空。该命令只搜索了bcd目录,没有搜索其他目录,afg目录下的空文件b3.txt没有出现在搜索结果内。
"!"符号,搜索选项取反。这个符号放在选项之前,条件将会是相反的。
例7:查找不为空的文件,权限不是777的普通文件
find -type f ! -empty ! -perm 777
如图,b1.txt和b4.txt都不是空文件,b4.txt权限是777。所以搜索结果是b1.txt
-delete选项,找到文件并删除。
例8:找到b3.txt并删除
find -type f -name b3.txt -print -delete
如图,afg目录下有文件b3.txt,执行命令后b3.txt已经不存在了。
-user选项,按文件属主查找
例9:查找属主是root的文件
find ./ -user root
如图,属主是root的文件和目录各有1个。搜索结果正确。
-group选项,按文件所属组查找
例10:查找属组是root的文件
find ./ -group root
如图,属组的文件有2个,目录有1个。搜索结果正确。
-nouser选项,查找无有效属主文件
-nogroup选项,查找无有效属组文件
例11:查找无有效属主文件,查找无有效属组文件
find ./ -nouser
find ./ -nogroup
如图,c4.txt文件是属组无效文件,c1.txt文件是无有效属主和无有效属组文件。
这两个选项,在系统中删除用户后,用来查找垃圾文件。
----------待续...----------