首页 > 代码库 > Linux初学之文件查找
Linux初学之文件查找
Linux哲学思想有一条是一切皆文件,Linux中一切东西都以文件的形式存在。面对如此多的文件查找和处理起来比较困难。因此需要借助一些命令来查找和定位文件。
文件查找:按照文件名或文件属性来搜索文件
locate:
用于模糊搜索:
基于专用的数据库进行查找,数据库应该事先创建并且定期更新
可以使用updatedb命令手动更新locate数据库
查找速度较快,精确度较低
find:
精确查找:
查找精度高,速度慢
在指定位置进行文件名或文件属性的遍历扫描;不建议对根目录进行find操作
实时查找
使用find命令只能搜索当前用户具有读和执行权限的目录
find
search for files in a directory hierarchy
find [OPTIONS] [查找路径] [查找条件] [ 处理动作]
查找路径:默认为当前工作目录,可以指定具体的目录路径
查找条件:进行本次搜索的标准,可以是文件名,文件大小,文件类型,文件权限;默认是指定 目录中所有文件
处理动作:对于符合条件的文件进行处理操作;默认是将查找结果输出到显示器
根据文件名查找:
-name 文件名称,支持使用 通配符(* ? [] [^])
-iname 文件名称,忽略字母大小写,支持通配符
根据文件的inode编号 进行查找:
-inum inode编号:硬链接有相同的inode编号:通过给定的inode编号查找对应文件名和路径
-samefile name:通过给定的文件名查找对应的inode编号,进而确定具有相同inode编号文件
和路径
-link n:查找连接数为n的所有文件
根据正则表达式来匹配:
-regex pattern:以pattern匹配整个文件路径字符串,而不仅仅是给定文件的名称
根据文件的属主和属组进行查找:
-user uname:根据属主为指定用户的用户名进行查找
-uid UID:根据属主为某个UID进行查找
-group gname
-gid GID
-nogroup:在文件的额属组上没有对应的组名
-nouser:在文件的属主上没有对应的用户名
根据文件理性查找
-type 文件类型
b:块设备
c: 字符设备
d:目录文件
f:普通文件
l:符号链接文件
p:普通文件
s:套接字文件
-xtype 文件类型: 符号链接文件的匹配需要配合其他选项
根据时间戳进行查找:
-atime [+|-]n:根据访问时间进行查找,以天为单位
-ctime [+|-]n:根据改变时间进行查找
-mtime [+|-]n:根据修改时间进行查找
n:[n-n+1)
+n:[n+1- 之前的很长时间)
-n:[n- now)
-amin [+|-]n: 以分钟为单位
-cmin [+|-]n
-mmin [+|-]n
例子:查找/etc目录下最近一周内内容修改过且不属于root及suse用户的文件;
find /etc -ctime -7 -a -user root -a -user suse
在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:
find logs -type f -mtime +5 -exec -ok rm {} \;
根据文件的大小进行查找
-size[+|-]n[cwbkMG]
n:(n-1,n]
-n:[0,n-1]
+n:(n,zhengwuqiong)
例子:
find -size +2k
当前目录下所有大于2KB的文件;
find -size 2k
当前目录下所有1KB-2KB之间的文件;
find -size -2k
当前目录下所有小于1KB的文件;
组合条件:
-a:逻辑与 默认可省略
-o:逻辑或
-not,| :逻辑非
逻辑组合条件遵循德摩根定律
例:查找/usr目录下不属于root、bin、centos等用户的文件;
find /usr -not -user root -a -not -user bin -a -not -user centos
根据权限查找:
-perm [/|-]mode
mode:精确匹配指定的权限
/mode:隐含了逻辑或的关系,任何一个权限位的权限中只要有一个权限位匹配就为真
-mode:隐含了逻辑与的关系,每个权限位都必须同时包含指定的权限位
例:查找/etc/rc.d/init.d目录下,所有用户都有执行权限并且其他用户有写权限的文件;
find /etc/rc.d/init.d -prem /111 -a -perm -002
所有都有 取反 任意一个没有
! ( a与b与c ) = !a 或 !b 或 !c
所有都没有 取反 任意一个有
! ( !a与!b与!c ) = a 或 b 或 c
所有都有 取反 任意一个没有
!(a与b与c) = !a 或 !b 或!c
所有都没有 取反 任意一个有
!(!a与!b与!c) = a或b或c
处理动作:
-print:输出到显示屏幕,默认的动作
-ls:对于查找道的结果执行 ls -li命令显示
-exec COMMAND {} \; 非交互式
-ok COMMAND {} \; 交互式
对于查找到的结果执行COMMAND命令
{}:占位符,用来引用被find命令查找到的所有文件的信息
-exec和-OK的取代操作
chmod a-r $(find -perm -444 -type f)
find -perm -444 -type f | xargs chmod a-r
xargs
Linux初学之文件查找