一、Linux中的文件查找工具:
grep是一个文本查找工具,而非文件查找工具
locate : 根据数据库进行查找,不精确,不实时,但是查找快速
find : 实时查找,精确快速
1. locate 的使用格式:
locate keyword(关键字)
-c # keyword 统计出关键字出现的次数
-n # keyword 只显示符合关键字的前# 行
2. find 的使用格式:
find [dir1,….] [criteria,….](标准) [action….](动作)
(1)[criteria]
-name : 根据文件名查找,严格区分大小写的,支持Globbing方式的文件名 通配
如:find /etc –name “passwd*”
find /etc –name “*passwd*”
find /etc –name “passwd?”
-iname : 不区分文件名中的大小写
-regex “pattern” :查找文件名中符合pattern的文件
-user username/UID : 查找文件属主
-group GID : 查找文件属组
-uid uid : 根据Uid号来查找
-gid gid : 根据gid 号来查找
-nouser :查找没有属主的文件
-nogroup :查找没有属组的文件
-type :根据文件类型进行查找
f :普通文件
d :目录文件
l :符号链接文件
b :块设备文件
c : 字符设备文件
p :管道文件
s :套接字文件
查找条件之间也可以进行组合:-a 表示“与” ,-o 表示“或” –not/! 表示“非”
-size # :查找指定文件大小的文件,#可以为k/M/G
-atime # :根据访问时间查找,默认时间为“天”
-mtime # : 根据修改时间查找
-ctime # :根据改变时间查找
-perm : 根据权限查找文件
+mode或者/mode : 任何一类用户某一个权限位符合条件就行
-mode : 所有类别用户的所有权限位符合条件
(2)action 动作,查找到文件后做什么操作,默认为显示到屏幕上。
-print :默认将查找到的结果显示到桌面上
-ls :将查找到的文件内容以长文件格式显示出来
-ok : 查找到文件后执行别的命令(提示确认信息)
-exec :查找到文件后执行别的命令(不提示确认信息)
-exec rm {} \; :{}为引用前面查找到的文件,此句意思是将查找的内容删除掉
-ok 和 -exec 后面跟的所要执行命令,在shell中可以对文件发出的任何操作的命令都可以使用,如删除文件,修改权限等
3.需要特别强调的是:
(1)find无法通过管道来实现查找,能通过命令替换实现。
如: ls -l `find /tmp -user redhat`
(2)find命令可以管道给xargs
如:find ./ -perm 644 | xargs chmod 755
find命令习题范例:
1、查找/var目录下属主为root并且属组为mail的所有文件;
# find /var -user root -group mail
2、查找/usr目录下不属于root,bin,或student的文件;
# find /usr -not -user root -a -not -user bin -a -not -user student
# find /usr -not \( -user root -o -user bin -o -user student \)
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;
# find /etc -mtime -7 -a -not -user root -a -not -user student
# find /etc -mtime -7 -a -not \( -user root -o -user student \)
4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;
# find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;
# find /etc -size +1M -exec basename {} >> /tmp/etc.largefiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;
# ls -l `find /etc -not -perm /222`
转载于:https://blog.51cto.com/linuxg/785413