linux文件查找_which_find_locate

7.1 文件查找

7.1.1 简介

which:命令查找
​
find:文件查找,针对文件名
​
locate:文件查找,依赖数据库

7.1.2 which

which命令用于查找文件。
​
which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

which命令的基本语法如下:

which [文件...]

参数说明

  • -n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

  • -p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。

  • -w  指定输出时栏位的宽度。

  • -V  显示版本信息。

例:

使用指令"which"查看指令"bash"的绝对路径,输入如下命令:

which bash/ls/mkdir/pwd/cd/touch/cp/mv/useradd

上面的指令执行后,输出信息如下所示:

/bin/bash                   #bash可执行程序的绝对路径 

7.1.3 find

find 命令用于在指定目录下查找文件和目录。
​
它可以使用不同的选项来过滤和限制查找的结果。

find命令的基本语法如下:

find [path] [expression] [option] [action]
       路径     表达式                动作

参数说明

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

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

expression 中可使用的选项有二三十个之多,以下列出最常用的部份:

  • -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:按文件所属组查找。

find 命令中用于时间的参数如下:

  • -amin n:查找在 n 分钟内被访问过的文件。

  • -atime n:查找在 n*24 小时内被访问过的文件。

  • -cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。

  • -ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。

  • -mmin n:查找在 n 分钟内被修改过的文件。

  • -mtime n:查找在 n*24 小时内被修改过的文件。

在这些参数中,n 可以是一个正数、负数或零。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。

例如:-mtime 0 表示查找今天修改过的文件,-mtime -7 表示查找一周以前修改过的文件。

关于时间 n 参数的说明:

  • +n:查找比 n 天前更早的文件或目录。

  • -n:查找在 n 天内更改过属性的文件或目录。

  • n:查找在 n 天前(指定那一天)更改过属性的文件或目录。

例:

  1. 按文件名查找

查找/etc下面的hosts文件

find /etc -name hosts
​
find /etc -name HOSTS
find /etc -iname hosts   # -i表示忽略文件大小写
​
find /etc -iname hos*    # 模糊查找
  1. 按文件大小查找

查找/etc下大于,小于,等于5M的文件

find /etc/  -size  +5M    # 大于5M
ls -l /etc/udev/hwdb.bin -h
​
dd if=/dev/zero of=/tmp/5M.txt bs=1M count=5
find / -size 5M  # 等于5M
ls -lh /tmp/5M.txt
​
find /etc/  -size  -5M    # 小于5M
  1. 指定查找的目录深度

ls /etc/sysconfig/network-scripts/ifcfg-ens33
find / -maxdepth 3 -a -name "ifcfg-en*"
find / -maxdepth 4 -a -name "ifcfg-en*"
  1. 按文件属主、属组查找

查找属于li用户的文件

id li
find /home -user li    # 属主
find /home -group li   # 属组
​
ls -lh /home/li/.bashrc
  1. 按文件类型查找

ls -l -d ./1.txt  /tmp  /dev/sda  /dev/cdrom   # 查看文件类型
find /tmp -type f    # 查找普通文件类型
find /dev -type b   # 查找块文件类型
find /etc -type l
  1. 按文件权限查找

touch 714.txt
chmod 714 714.txt
find . -perm 714    # 当前目录下查找
find . -perm 714 -ls    # -ls为action
  1. 找到文件后处理动作

find . -perm 714 -print  # 默认自带动作
find /etc/ -name ifcfg* -ok cp -rvf {} /data1 \;   # 找到之后复制-ok连接,{}引用;\;结束

查找当前目录下名为 file.txt 的文件:

find . -name file.txt

将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:

find . -name "*.c"

将当前目录及其子目录中的所有文件列出:

find . -type f

查找 /home 目录下大于 1MB 的文件:

find /home -size +1M

查找 /var/log 目录下在 7 天前修改过的文件:

find /var/log -mtime +7

将当前目录及其子目录下所有最近 20 天前更新过的文件列出,不多不少正好 20 天前的:

find . -ctime  20

将当前目录及其子目录下所有 20 天前及更早更新过的文件列出:

find . -ctime  +20

将当前目录及其子目录下所有最近 20 天内更新过的文件列出:

find . -ctime  20

查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:

find /var/log -type f -mtime +7 -ok rm {} \;

查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

find . -type f -perm 644 -exec ls -l {} \;

查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:

find / -type f -size 0 -exec ls -l {} \;

7.1.3 locate

locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。
​
一般情况我们只需要输入 **locate your_file_name** 即可查找指定文件。

locate命令的基本语法如下:

locate [-d ][--help][--version][范本样式...]

参数说明

  • -b, --basename -- 仅匹配路径名的基本名称

  • -c, --count -- 只输出找到的数量

  • -d, --database DBPATH -- 使用 DBPATH 指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db

  • -e, --existing -- 仅打印当前现有文件的条目

  • -1 -- 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。

  • -0, --null -- 在输出上带有NULL的单独条目

  • -S, --statistics -- 不搜索条目,打印有关每个数据库的统计信息

  • -q-- 安静模式,不会显示任何错误讯息。

  • -P, --nofollow, -H -- 检查文件存在时不要遵循尾随的符号链接

  • -l, --limit, -n LIMIT -- 将输出(或计数)限制为LIMIT个条目

  • -n -- 至多显示 n个输出。

  • -m, --mmap -- 被忽略,为了向后兼容

  • -r, --regexp REGEXP -- 使用基本正则表达式

  • --regex --使用扩展正则表达式

  • -q, --quiet -- 安静模式,不会显示任何错误讯息

  • -s, --stdio -- 被忽略,为了向后兼容

  • -o -- 指定资料库存的名称。

例:

查找 passwd 文件,输入以下命令:

locate passwd

搜索 etc 目录下所有以 sh 开头的文件 :

locate /etc/sh

忽略大小写搜索当前用户目录下所有以 r 开头的文件 :

locate -i ~/r

附加说明

locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。

locate 的速度比 find 快,它并不是真的查找,而是查数据库,一般文件数据库在 /var/lib/slocate/slocate.db 中,所以 locate 的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:

updatedb

默认情况下 updatedb 每天执行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guff_hys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值