每天一点Linux-23文件查找
文件查找
grep: 文件内容过滤
find: 文件查找,针对文件名
一、命令文件
which ls //从PATH环境变量 (echo $PATH)
whereis vim
[yang@ecs-ea9d ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yang/.local/bin:/home/yang/bin
[1]+ Stopped sudo echo
二、任意文件
A. locate (查询的数据库: /var/lib/mlocate/mlocate.db) 可能会找到一个刚删除的文件,或者刚建立的文件
计划任务:每天自动更新数据库 /etc/cron.daily/mlocate.cron
手动更新数据库:updatedb
- locate ifcfg-eth0
- locate ifcfg-enp0s25
B. find (可递归,包括隐藏文件)
- find [options] [path…] [expression] [action]
===expression===
按文件名:
[root@ecs-ea9d ~]# find /etc -name “ifcfg-eth0”
[root@ecs-ea9d ~]# find /etc -iname “ifcfg-eth0” //-i忽略大小写
[root@ecs-ea9d ~]# find /etc -iname “ifcfg-eth*” //文件以ifcfg-eth开头的查找
按文件大小:
[root@ecs-ea9d ~]# find /etc -size +5M //大于5M
[root@ecs-ea9d ~]# find /etc -size 5M
[root@ecs-ea9d ~]# find /etc -size -5M
[root@ecs-ea9d ~]# find /etc -size +5M -ls //-ls找到的处理动作,不同于ls
指定查找的目录深度:
-maxdepth levels
-mindepth levels
[root@ecs-ea9d ~]# find / -maxdepth 3 -a -name “ifcfg-eth0”
按时间找(atime:谁访问过,mtime:时间,ctime:权限改变):
[root@ecs-ea9d ~]# find /etc -mtime +5 //修改时间超过5天
[root@ecs-ea9d ~]# find /etc -mtime 5 //修改时间等于5天
[root@ecs-ea9d ~]# find /etc -mtime -5 //修改时间5天以内
按文件属主、属组找:
[root@ecs-ea9d ~]# find /home -user jack //属主是jack的文件
[root@ecs-ea9d ~]# find /home -group hr //属组是hr组的文件
[root@ecs-ea9d ~]# find /home -user jack -group hr
[root@ecs-ea9d ~]# find /home -user jack -a -group hr //与的意思
[root@ecs-ea9d ~]# find /home -user jack -o -group hr
[root@ecs-ea9d ~]# find /home -nouser
[root@ecs-ea9d ~]# find /home -nogroup
[root@ecs-ea9d ~]# find /home -nouser -o -nogroup //-o或者的意思
按文件类型:
[root@ecs-ea9d ~]# find /dev -type f //f普通
[root@ecs-ea9d ~]# find /dev -type d //d目录
[root@ecs-ea9d ~]# find /dev -type l //l链接
[root@ecs-ea9d ~]# find /dev -type b //b块设备
[root@ecs-ea9d ~]# find /dev -type c //c字符设备
[root@ecs-ea9d ~]# find /dev -type s //s套接字
[root@ecs-ea9d ~]# find /dev -type p //p管道文件
按文件权限:
[root@ecs-ea9d ~]# find . -perm 644 -ls //当文件权限与664完全相同,满足
[root@ecs-ea9d ~]# find . -perm -644 -ls //当文件权限包含664(例:744)或等于644,满足
[root@ecs-ea9d ~]# find . -perm -600 -ls
[root@ecs-ea9d ~]# find . -perm -222 -ls //全局可写
[root@ecs-ea9d ~]# find /usr/bin /usr/sbin -perm -4000 -ls //包含set uid
[root@ecs-ea9d ~]# find /usr/bin /usr/sbin -perm -2000 -ls //包含set gid
[root@ecs-ea9d ~]# find /usr/bin /usr/sbin -perm -1000 -ls //包含sticky
按正则表达式:
-regex pattern
[root@ecs-ea9d ~]# find /etc -regex ‘.* ifcfg-eth[0-9]’
- .* 任意多个字符
[0-9] 任意一个数字
[root@localhost ~]# find /etc -regex ‘.*ifcfg-enp0s25’
/etc/sysconfig/network-scripts/ifcfg-enp0s25
[root@localhost ~]# find /etc -regex ‘.*ifcfg-enp0s[0-9]+’ //+表示前面数字可重复
/etc/sysconfig/network-scripts/ifcfg-enp0s25
找到后处理的动作 ACTIONS: (默认动作-print)
-print
-ls
-delete
-exec 后面跟自定义的shell命令(一般建议使用少量文件)
-ok 后面跟自定义的shell命令,覆盖或者删除时会提醒
[root@ecs-ea9d ~]# find /etc -name “ifcfg “
[root@ecs-ea9d ~]# find /etc -name “ifcfg “ -print
[root@ecs-ea9d ~]# find /etc -name “ifcfg “ -ls
[root@ecs-ea9d ~]# find /etc -name “ifcfg “ -exec cp -rvf {} /tmp \; //慎用
[root@ecs-ea9d ~]# find /etc -name “ifcfg* “ -ok cp -rvf {} /tmp \; //慎用
[root@ecs-ea9d ~]# find /etc -name “ifcfg* “ -exec rm -rf {} \; //慎用
扩展知识:find结合xargs
[root@ecs-ea9d ~]# find . -name “yang*.txt” |xargs rm -rf
[root@ecs-ea9d ~]# find /etc -name “ifcfg-eth0” |xargs -I {} cp -rf {} /var/tmp //-I定义一个对象
find test:
- 将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变
- 将/etc目录复制到/var/tmp/
将/var/tmp/etc中的所有目录设置权限777(仅目录)
将/var/tmp/etc中所有文件权限设置为666 - 以下命令的区别是什么?
[root@ecs-ea9d ~]# find /etc -name “ifcfg “ -exec rm -rf {} \;
[root@ecs-ea9d ~]# find /etc -name “ifcfg “ -exec rm -rf {} \ +
案例1:
[root@ecs-ea9d ~]# mkdir dir1
[root@ecs-ea9d ~]# touch dir1/file{1..20}
[root@ecs-ea9d ~]# find /root/dir1 -name “file5”
[root@ecs-ea9d ~]# find /root/dir1 ! -name “file5”
[root@ecs-ea9d ~]# find /root/dir1 -name “file5” -o -name “file9”
/root/dir1/file5
/root/dir1/file9
[root@ecs-ea9d ~]# find /root/dir1 -name “file5” -o -name “file9” -ls
1466515 0 -rw-r–r– 1 root root 0 6月 5 11:15 /root/dir1/file9
[root@ecs-ea9d ~]# find /root/dir1 -name “file5” -ls -o -name “file9” -ls
1466499 0 -rw-r–r– 1 root root 0 6月 5 11:15 /root/dir1/file5
1466515 0 -rw-r–r– 1 root root 0 6月 5 11:15 /root/dir1/file9
[root@ecs-ea9d ~]# find /root/dir1 \ ( -name “file5” -o -name “file9” \ ) -ls // \是一个转义符号在括号前
1466499 0 -rw-r–r– 1 root root 0 6月 5 11:15 /root/dir1/file5
1466515 0 -rw-r–r– 1 root root 0 6月 5 11:15 /root/dir1/file9
[root@localhost ~]# find /root/dir1 \ ( -name “file5” -o -name “file9” \ ) -exec rm -rvf {} \;
removed ‘/root/dir1/file5’
removed ‘/root/dir1/file9’
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2924854739@qq.com
文章标题:每天一点Linux-23文件查找
本文作者:DROBP
发布时间:2019-09-01, 10:54:18
最后更新:2019-09-01, 19:54:57
原始链接:https://DROBP.github.io/2019/09/01/每天一点Linux-23文件查找/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。