linux文件查找
Linux查找文件通过命令行可以快速的查找,两年前看过《鸟哥的Linux私房菜》,还记得有几个命令:which、whereis、locate、find用来查找文件。每个命令都有高级用法,现在来学习一下简单的常用用法。
1、which
which用来查找Linux命令程序所在的位置。
1.1、参数
which命令--help查看有如下的可选参数:
--version,-[vV] 打印版本并成功退出。
--help 打印此帮助并成功退出。
--skip-dot 跳过PATH中以点开头的目录。
--skip-tilde 跳过PATH中以波浪号开头的目录。
--show-dot 不要在输出中将点扩展到当前目录。
--show-tilde 为非根用户输出HOME目录的代字号。
--tty-only 如果不在tty上,则停止处理右侧的选项。
--all,-a 打印PATH中的所有匹配项,而不仅仅是第一个
--read-alias,-i 从stdin读取别名列表。
--skip-alias 忽略选项--read-alias; 不要读标准输入。
--read-functions 从stdin读取shell函数。
--skip-functions 忽略选项--read-functions; 不要读标准输入。
1.2、用法示例
查看git命令在哪里
which git
2、whereis
whereis命令用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
2.1、参数
whereis命令可选参数如下:
-b 仅搜索二进制文件
-B <dirs> 定义二进制文件查找路径
-m 仅搜索手册
-M <dirs> 定义人查找路径
-s 仅搜索源
-S <dirs> 定义源查找路径
-f 终止<dirs>参数列表
-u 搜索异常条目
-l 输出有效的查找路径
2.2、whereis示例
查找Linux中git的位置
whereis git输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径

3、locate 文件资料库搜索
前面介绍的几个查找命令只使用于命令、程序的查找,一般文件的定位需使用locate命令。locate命令实际上是去查Linux中的文件数据库(/var/lib/slocate/slocate.db),所以查找速度很快,但是可能新建的文件数据库没有及时更新而找不到。
3.1、参数
有些Linux发新版本竟然没有自带locate命令,需要自己安装。看看locate有哪些可选参数,这么多不需要都记住,只要记住几个常用的即可。
-A 所有仅打印匹配所有模式的条目
-b,-basename 仅匹配路径名的基本名称
-c,--count 仅打印找到的条目的数量
-d,--database DBPATH 使用DBPATH代替默认数据库(即/var/lib/mlocate/mlocate.db)
-e,--existing 仅打印当前现有文件的条目
-L,--follow 检查文件存在时遵循尾随的符号链接(默认)
-h,--help 打印此帮助
-i,--ignore-case 匹配模式时忽略大小写区别
-l,--limit,-n LIMIT 将限制输出(或计数)到LIMIT条目
-m,--mmap 被忽略,用于向后兼容
-P,-nofollow,-H 在检查文件存在时不遵循尾随的符号链接
-0,--null 在输出上使用NUL的单独条目
-S,-statistics 不会搜索条目,而是打印有关每个使用的数据库的统计信息
-q,--quiet 报告有关读取数据库的任何错误消息
-r,-regexp REGEXP 搜索基本的regexp REGEXP而不是模式
--regex 模式是扩展的正则表达式
-s,--stdio 被忽略,以实现向后兼容
-V,--version 打印版本信息
-w,--wholename 匹配整个路径名(默认)
3.2、示例
查找git文件
locate git4、find 全盘检索
和上面的locate命令不同,find查找文件速度比较慢,因为find是去硬盘查找文件。
4.1、参数
find命令更加强大,用法也比之前复杂的多:
find [path] [option] [action]
-name 按照“文件名”查找文件。要忽略大小写,使用 -iname 选项
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:b - 块设备文件;d - 目录;c - 字符设备文件;p - 管道文件;l - 符号链接文件。f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
4.2、用法
①查找当前目录下的指定文件
#查找当前目录下的.php结尾的文件
find *.php
②查找指定目录下的文件,所有的文件夹都会被递归地查找。
find /home/wwwroot/default/ -name "*.txt"③-perm查找当前目录下具有特点权限的文件
find ./ -perm 0777④查找空目录:先使用-type d限定目录,再筛选-empty空的
find ./ -type d -empty⑤查找隐藏文件:隐藏文件以.开头,所以使用.*通配符匹配,-name参数要用双引号“”
find -name ".*"⑥-mtime查找最近修改的文件,m代表modify
#最近一天之内修改过的文件
find -mtime -1⑦-atime查找最近访问的文件,a代表access
find -atime -1⑧-cmin最近小时更改过的文件,c代表change
#最近60分钟内变更过的文件
find -cmin -60
⑨查找特定范围大小的文件
#大小在1Mb~10Mb之间的文件
find -size +1M -size -10M
以上介绍常用的,通过组合查找功能非常强大!
参考资料:

