随着电脑里的文件越来越多,或者,有些文件被搁置了很久,突然要用了,但一时又想不起来这个文件放哪了,这时候如果可以使用文件查找的方式来定位文件,那将是一件非常幸福的事。windows系统中有内置搜索或者第三方工具,但linux系统中又改如何查找文件呢?
1、find查找命令
语法格式:
find [路径] [选项] [操作]
选项:
-name:根据文件名查找,区分大小写;-iname:忽略大小写 -perm:根据文件权限查找 -prune:该选项可以排除某些查找目录,通常和-path一起使用,用于将特定目录排除在搜索条件之外 -user:根据文件属主查找 -group:根据文件属组查找 -mtime -n|+n:根据文件更改时间查找;-n:n天内;+n:n天前 -mmin -n|+n:根据文件更改时间查找;-n:n分钟内;+n:n分钟前 -nogroup:查找无有效属组的文件 -nouser:查找无有效属主的文件 -newer file1 ! file2:查找更改时间file1新但比file2旧的文件 -type:按文件类型查找 -size -n|+n:按文件大小查找,-n:小于n;+n:大于n -mindepth n:从n级子目录开始搜索 -maxdepth n:最多搜索到n级子目录
选项可以连续写
find /etc -mtime +10 -user root //(查找etc下10天前修改的属于root的文件) find . -path ./test_1 -prune -o -path ./test -prune -o -type f //(查找当前目录下除test_1、test外的文件)
操作:
-print:输出
-exec :对搜索到的文件执行特定的操作;
-exec [操作命令] {} \; //'{}'表示前面find选项的结果
find /var/log/ -name '*log' -mtime +7 -exec rm -rf {} \; (把log下修改时间在7天以上的.log文件删除)
-ok:功能和-exec一样,不过-ok会有提示
逻辑运算:
-a:与 -o:或 -not|!:非
查找包含指定内容的特定文件,并删除:
find . -type f -name '*.txt' | xargs grep -l 'findrootx' | xargs rm -rf //查找当前路径下包含'findrootx'内容的txt文件 find . -name '*.txt' | xargs grep -l 'findrootx' | xargs rm -rf //查找当前路径下包含'findrootx'内容的txt文件
(xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令)
2、find、locate、whereis 、which使用场景分析
locate:
文件查找命令,所属软件包mlocate
不同于find命令是在整块磁盘中搜索,locate命令在数据库文件中查找
find默认全部匹配,locate默认部分匹配
updatedb:(更新数据库文件,新建文件要通过updatedb更新放到数据库文件中才可以使用locate来查找)
更新/var/lib/mlocate/mlocate.db(默认由系统定时任务定时更新)
所使用配置文件/etcc/updatedb.cnf
whereis:
查找二进制程序文件,查找二进制程序文件的帮助文档,查找二进制程序源代码文件
选项:
-b:只返回二进制文件 -m:只返回帮助文档 -s:只返回源代码文件
which:
仅查找二进制程序文件
-b: 只返回二进制文件
命令使用场景推荐
find:查找某一类文件,比如文件名部分一致,功能强大,速度慢 locate:只能查找单个文件,功能单一,速度快 whereis:查找程序的可执行文件、帮助文档等,不常用 which: 值查找程序的可执行文件,常用于查找程序的绝对路径