1. 文件查找:
在linux系统中由于文件的众多,往往需要在众多的文件当中查找某一个文件,如果时间一长,很难记得文件存放至何处,不过,这一点,你不比担心,因为开发人员为我们提供了强大的文件搜索工具,下面将介绍两款常用的文件查找工具locate,和find,这两款查找工具只能是从文件系统中查找不能在内存当中查找,因为内存是没有文件系统的。
2. locate命令:
locate命令是基于数据库来查找文件的,命令查找速度快,一般查找跟新慢的,名字变化少的,如:配置文件,可以用locate查找,因为数据库需要更新,所以就会有一点延迟,locate命令一般是每天更新一次数据库,所以有可能最新创建的文件找不到,或者刚刚删除的文件任在数据库当中。可以使用updatedb更新数据库信息,数据库文件:/var/lib/mlocate/mlocate.db
locate 用法:
locate 选项 参数
选项:
-e 排除在寻找范围之外。
-q 安静模式,不显示任何错误信息
-n 最多显示#个输出
-r 支持正则表达式
-i 忽略大小写
-b 基名
示例:
[root@cnode6_8 etc]# locate -r'\<functions$' -n 3 /etc/rc.d/init.d/functions /etc/sysconfig/network-scripts/network-functions /lib/lsb/init-functions
3. find命令:
用来在指定目录下查找文件。功能十分强大,可以根据各种条件进行查找,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:
find 选项 查找路径 查找条件 处理动作
选项:
根据文件名和iNode查找:
-name 支持使用通配符* ? [] [^] 根据文件名查找
-iname 不区分大小写的根据文件名查找
-inum # 根据#指定的iNode号查找
-samefile 相同iNode号相同的文件,也就是硬链接
-link # 链接数为#的文件
-regex 使用正则表达式匹配文件
根据文件属组和属主查找:
-user 根据属组为指定用户UID查找文件
-grop 查找属组问指定组的文件
-gid根据gid号码查找文件
-nouser查找没有属主的文件
-nogrop查找没有属组的文件
根据文件类型:
-type
f 普通文件
d 目录文件
l 符号链接文件
s 套接字文件
b 块设备文件
c 字符设备文件
p 管道文件
组合条件:
-a 与
-o 或
-not !非
根据文件大小查找:可以查找指定范围大小(带单位k,M,G)的文件
-size [+|-]#unit
# unit (#-1,#] 区间前开后闭
-#unit [0.#-1]
+#unit (#,∞)
根据时间戳查找:可以以天或分钟为单位
[+|-]#参数意义:#:[#,#+1],+#:[#+1, ∞], -# [0,#)
-atime 访问时间
-mtime 修改时间
-ctime 改变时间
以分钟为单位的三种时间
-amin
-mmin
-cmin
根据权限查找:-perm [/-] mode
mode 精确权限匹配
/mode 每一位只要有一类匹配的就行
-mode 每一类必须同时拥有mode指定的权限
0 表示不关注,权限随意
查找完成的处理动作:
-ls 类似于ls –l 命令可以显示文件详细列表
-delete 删除查找到的文件
-fls 查找到的文件都以长格式形式保存在文件当中
-ok command {} \;对查找到的文件执行command之前都会交互式的询问用户
-exec command {} \;类似于上一个命令,不需要交互,直接默认执行
排除查找的目录:
-prune(修减)不包含的文件或目录
补充:
关于时间大小方面参数数字的意义和示例:如查找文件大小为12k,表示查找的文件是大于等于11k,小于12k,是指定的值减1得到的,+6k表示查找文件7k(大于6k)到正无穷
-6k表示0到5k(包含5k,小于6k)的文件
4. find查找文件实例:
1、查找/var目录下属主为root,且属组为mail的所有文件
[root@centos7 ~]# find /var/ -user root-group mail -ls 201334650 0 drwxrwxr-x 2 root mail 50 Aug 13 12:54/var/spool/mail 205749525 0 -rw------- 1 root mail 0 Aug 13 12:54 /var/spool/mail/root
2、查找/var目录下不属于root、lp、gdm的所有文件
[root@centos7 ~]# find /var/ -not \( -user root -o -user lp -o -user gdm\)
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
[root@centos7 ~]# find /var/ -mtime -7 -not\( -user root -o -user postfix \)
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
[root@centos7 ~]# find / -nouser -nogroup-atime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件
[root@centos7 ~]# find /etc/ -size +1M-type -f find: Arguments to -type should containonly one letter [root@centos7 ~]# find /etc/ -size +1M-type f /etc/selinux/targeted/policy/policy.29 /etc/udev/hwdb.bin /etc/brltty/zh-tw.ctb
6、查找/etc目录下所有用户都没有写权限的文件
[root@centos7 ~]# find /etc/ -not -perm/222 –ls
7、查找/etc目录下至少有一类用户没有执行权限的文件
[root@centos7 ~]# find /etc/ -perm -111 -ls
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
[root@centos7~]# find /etc/init.d/ -perm -113 /etc/init.d/test
9. 实际生产环境可能使用到的案例:
如果需要对某一个目录批量设置权限,但是文件和目录的权限不一致时可以用find命令分别设定
这里给出一个循环递归得到对文件夹和文件分别有效的设置方法:
[root@centos7~]#find /path -type f -exec chmod 644 {} \; #对目录和子目录里的文件
[root@centos7~]#find /path -type d -exec chmod 755 {} \; #对目录和子目录path 是路径 type 类型 d 是目录 f是 文件 exec 执
附:德·摩根定律
非(P 且Q) = (非P) 或(非Q)
非(P 或Q) = (非P) 且(非Q)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。