文件查找在linux系统运维使用极为广泛。本文从以下几个方面阐述linxu中文件查找的用法
1、查找命令及概述
在linux中,文件查找使用的命令有locate 和find两个命令。其中locate命令是查找系统的文件数据库。速度快,但是有时候可能不准确,需要和updatedb配合使用。find命令是根据匹配模式逐一查找的。速度慢,但是比较准确。
2、命令使用的格式
locate FILENAME
[root@localhost ~]# touch upfile
[root@localhost ~]# updatedb
[root@localhost ~]# locate upfile
/opt/lampp/modules/mod_authz_groupfile.so
/root/upfile
# 需要注意的是:locate要和updatedb配合使用
# locate是查不到在/tmp下的文件的
find [路径] 标准 处理动作
路径:可以省略,如果省略,那么查找的当前文件
标准:可以省略,如果省略,就显示查找路径下的所有文件
处理动作:默认是显示操作
3、使用方法及示例
-name:表示根据文件名查找
[root@localhost testdir]# find . -name abc
./abc
#注意:-name abc 那么是abc的精确匹配。如果需要使用模糊匹配,需要使用正则表达式。.表示当前目录 -iname 表示根文件名查找,并且忽略文件名的大小写
[root@localhost testdir]# find . -name abc\*
./abc123
./abc
# 查找在当前目录下以abc开头的文件
-type :根据文件类型查找
[root@localhost testdir]# find . -type d
.
./dir2
./02-04
./sh
# d:表示文件夹;l:链接文件;c:字符设备文件;b:块设备文件;p:管道文件;s:套接字文件;-f表示普通文件
-size [+|-]# :根据文件大小查找。单位是 K M G
root@hndroot-virtual-machine:~# find /etc -size +1M
/etc/brltty/zh-tw.ctb
#注意,+表示大于,-表示小于,没有表示等于
-user USERNAME 根据用户名查找
[root@localhost testdir]# find . -user user1
./abc
#同理,-group GROUPNAME 根据组名查找
-uid UID 根据UID查找
-gid GID 根据GID查找
-nouser 表示查找没有属主的文件
-nogroup 表示查找乜有属组的文件
[root@localhost testdir]# userdel -r user1
[root@localhost testdir]# find . -nouser
./abc
对没有属主,属组的文件,是危险文件,应该尽快将其属主改为root
-amin -atime -cmin -ctime
-amin [+|-]# 表示文件最新被访问+#表示#分之前,-#表示在#分之后
-atime 类似-amin 不过以天为单位。
-perm [+|-] mode:根据权限查找文件
[root@localhost testdir]# man find
[root@localhost testdir]# find . -perm u-x
./abc
[root@localhost testdir]# find . -perm o-x
./abc
4、find的处理动作
[root@localhost testdir]# find . -nouser -exec chown root {} \;
[root@localhost testdir]# ll
#查找到没有属主的文件,将其属主改为root,要注意写法。 {} 是对查找到的结果的引用
[root@localhost testdir]# find -size +1k -a -type f -exec mv {} {}.new \;
[root@localhost testdir]# ll
-rw-r--r--. 1 root root 1717 Oct 19 19:57 passwd.new
# -a 表示条件的与 -o表示条件或,-not 表示条件非。
# 需要理解find 路径 条件 操作的命令格式。{} 是查找到的结果。上述命令是把查找到的结果文件名后加上.new
4、小结
find命令有很多查询条件,还可以使用正则表达式,也可以进行条件的组合,同时,对查找到的结果还可以用命令进行处理。