Linux 文件查找

文件查找命令

which

which查找可执行文件,例如which ls就可以找到ls的存放地址,默认会展示第一个的地址,如果有多个需要加上-a指令,这个指令的原理是根据PATH去寻找可执行程序的位置。

where is

这个命令主要针对/bin/sbin下面的可执行文件

1
2
3
4
5
-l 可以列出 whereis 会去查询的几个主要目录而已
-b 只找 binary 格式的文件
-m 只找在说明文档 manual 路径下的文件
-s 只找 source 来源文件
-u 搜寻不在上述三个项目当中的其他特殊文件

locate

非常好用、快速的文件查找,这个命令每天会自动更新,把数据从硬盘存入数据库。

如果添加了新的内容可能无法及时查出,需要使用updatedb命令进行手动更新

1
2
3
4
5
-i 忽略大小写的差异 
-c 不输出文件名,仅计算找到的文件数量
-l 仅输出几行的意思,例如输出五行则是-5
-s 输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r 后面可接正则表达式的显示方式

find

功能强大,缺点就是慢,要从硬盘里面读取数据。

1
find [path] [expression]

path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。

expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

expression的命令非常多,具体的可以使用man find进行查看。

1
2
3
4
5
6
-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找

时间参数

1
2
3
4
-mtime n :n为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件
-mtime +n :列出在 n 天之前 (不含 n 天本身)被更动过内容的文件文件名
-mtime -n :列出在 n 天之内 (含 n 天本身) 被更动过内容的文件文件名
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

这里需要注意n+n-n的区别,n只是指定当天的内容

image-20230526125633962

群组参数

1
2
3
4
5
6
-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在/etc/passwd 里面与帐号名称对应的数字
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在/etc/group
-user name :name 为使用者帐号名称喔 !例如 dmtsai
-group name :name 为群组名称喔,例如 users ;
-nouser :寻找文件的拥有者不存在 /etc/passwd 的人!
-nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。

权限参数

使用-perm 777就可以查找该权限的文件

案例

查找系统24小时内改动的文件

1
find / -mtime 0

查找系统3天前24小时内改动的文件

1
find / -mtime 3

查找名为password的文件

1
find / -name password

查找关键字为password的文件

1
find / -name "*password*"

找出/run目录下,文件类型为socket的文件名

1
find /run -type s

参考

《鸟哥的Linux私房菜》(第四版)