Linux中的文件搜索 locate,find,grep ,whereis和which命令的使用

1.文件搜索locate

Linux locate命令用于查找符合条件的文档,它会去保存文档和目录名称的数据库mlocate内,查找合乎范本样式条件的文档或目录。一般情况我们只需要输入查找指定文件名字就可以。(locate只能搜索文件名

locate命令和find -name功能差不多,但是比find搜索要快。因为find命令查找的是具体目录文件,而locate搜索的是一个数据库/var/lib/mlocate/mlocate.db,这个数据库中存有本地所有的文件信息,该数据库是Linux自动创建并每天自动更新维护。相关的配置信息在/etx/updatedb.conf,定时任务信息在/etc/cron.daily/mlocate

但对于刚建立的文件,使用该命令进行查找将会搜索不到所创建的文件,如果想使刚创建的文件被locate命令搜索到,可以使用updatedb命令,更新mlocate数据库,之后在使用locate命令才能搜索到,否则要等到第二天才能搜索到该文件,该后台数据库默认一天更新一次。

命令格式:

locate 参数 文件名

命令参数:

  • -e 将排除在寻找的范围之外。
  • -1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
  • -f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。
  • -q 安静模式,不会显示任何错误讯息。
  • -n 至多显示 n个输出。
  • -r 使用正规运算式 做寻找的条件。
  • -o 指定资料库存的名称。
  • d 指定资料库的路径
  • -h 显示辅助讯息
  • -V 显示程式的版本讯息

举例:

查找指定文件名字:locate 文件名
在这里插入图片描述
查找和pwd相关的所有文件,只显示5条数目
在这里插入图片描述
搜索etc目录下所有以sh开头的文件
在这里插入图片描述
忽略大小写

locate -i 文件名

更新数据库

updatedb

2.文件名搜索find命令

语法格式:

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {
    
    } \;

常用参数:

  • -name filename #查找名为filename的文件
  • -perm #按执行权限来查找
  • -user username #按文件属主来查找
  • -group groupname #按组来查找
  • -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
  • -atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
  • -ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
  • -nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
  • -nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
  • -type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
  • -size n[c] #查长度为n块[或n字节]的文件
  • -mount #查文件时不跨越文件系统mount点
  • -follow #如果遇到符号链接文件,就跟踪链接所指的文件
  • -prune #忽略某个目录

举例:

查找某一个文件
一般使用find命令搜索文件名时,可以使用通配符匹配(通配符是完全匹配)。

  • 表示匹配任意内容;
  • ? 表示匹配任意一个字符;
  • [] 表示匹配任意一个中括号内的字符;
find / -name 文件名

查找以cu 开头的文件

find ./ -name "cu*"

查找文件不区分大小写

find /root -iname 文件名

查找 目录下文件类型是目录 (f表示文件,d表示目录,l表示软链接)

find /home -type d

在 /etc 目录下查找5 分钟内被修改过属性的文件和目录

find /etc -cmin -5

查大于512k的文件

find   /home   -size   +512k     

查小于512k的文件

find   /home   -size   -512k    

在根目录下查找大于 100M 的文件(+n 表示大于,-n 表示小于,n 表示等于)

1 数据块 == 512 字节 0.5KB,也就是1KB等于2数据块 100MB == 102400KB204800数据块

find / -size +204800

查硬连接数大于2的文件或目录

find   /home   -links   +2     

查权限为700的文件或目录

find   /home   -perm   0700  

查找在系统中最后10分钟访问的文件

find    /   -amin    -10   

查找在系统中最后48小时访问的文件

find    /   -atime   -2      

查找在系统中为空的文件或者文件夹

find    /   -empty           

查找在系统中最后5分钟里修改过的文件

find    /   -mmin   -5  

查找在系统中最后24小时里修改过的文件

find    /   -mtime   -1   

3.grep命令

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

格式:
grep [选项] [文件]
常用参数:
  • -n:显示匹配行及 行号。
  • -i 表示忽略大小写;
  • -v 表示排除指定字符串;
  • -b 表示将可执行文件(binary)当作文本文件(text)来搜索;
  • -c 表示仅显示找到的行数;
  • -v 表示反向选择—仅列出没有“关键词”的行;
  • –color=auto :可以将找到的关键词部分加上颜色的显示。
  • -A n:显示匹配到的字符串所在的行及其后n行,after
  • -B n:显示匹配到的字符串所在的行及其前n行,before
  • -C n:显示匹配到的字符串所在的行及其前后各n行,context

显示匹配行及 行号
在这里插入图片描述
仅显示找到的行数
在这里插入图片描述
显示所有以d开头的文件中包含 test的行

 grep 'test' d*

在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件

grep 'test' *file 

以递归的方式查找符合条件的文件

例如,查找指定目录/etc/acpi,及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,

grep -r update /etc/acpi 

显示匹配到的字符串所在的行及其后n行
在这里插入图片描述
显示匹配到的字符串所在的行及其前n行
在这里插入图片描述

4.which 命令

which和whereis命令都是Linux操作系统下查找可执行文件路径的命令。
在这里插入图片描述
which 命令的原理:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which 查找的可执行文件,必须是要在 PATH 下的可执行文件,而不能是没有加入 PATH 的可执行文件,即使他就是可执行文件,但是没有加入到系统搜索路径,他仍然无法被 which 发现。

5.whereis命令

Linux whereis命令用于查找文件。

该指令会在特定目录中查找符合条件的文件,可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广,一般文件的定位需使用locate命令。

常用参数:
  • -b  只查找二进制文件。
  • -B<目录>  只在设置的目录下查找二进制文件。
  • -f  不显示文件名前的路径名称。
  • -m  只查找说明文件。
  • -M<目录>  只在设置的目录下查找说明文件。
  • -s  只查找原始代码文件。
  • -S<目录>  只在设置的目录下查找原始代码文件。
  • -u  查找不包含指定类型的文件。
举例:

使用指令"whereis"查看指令"bash"的位置,输入如下命令:
在这里插入图片描述
注意:以上输出信息从左至右分别为查询的程序名bash路径bash的man 手册页路径。

显示bash 命令的二进制程序
在这里插入图片描述
显示bash 命令的帮助文件
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38819889/article/details/107837950