首页 > 系统相关 >Linux 文件检索 | locate、grep、find

Linux 文件检索 | locate、grep、find

时间:2023-06-13 13:12:45浏览次数:52  
标签:locate 文件 检索 grep 查找 Linux test txt find

Linux 中查找文件或关键词检索文件内容是很常用的功能

合理使用命令,高效检索需要的结果

本文系统 Amazon Linux 2


locate

通常 locate 命令系统会自带,如果没有则需要安装 mlocate

locate 搜索文件速度很快,因为它不去实际目录中找文件,而是在文件数据库对应的文件中直接查找

数据库中含有本地所有本地文件信息,但是不包含当天新建的文件,因为数据库文件每天自动更新一次

数据库文件通常在 /var/lib/mlocate/mlocate.db/var/lib/locatedb

每天更新数据库的 cron 在 /etc/cron.daily/mlocate

如果想要查找当天新建的文件,可以执行 updatedb 手动更新数据库文件

用法

  • 常用参数

    -c 返回查找的数量

    -l [数字] 限制返回行数

    -r 通过正则匹配查找

  • 常用方式

# 查找所有包含 test 的文件
locate test

# 查找所有 /etc 目录下的 conf 文件,并显示两条
locate -l 2 /etc/*.conf

grep

使用正则表达式搜索过滤文件内容

在一个文件中检索关键词

# 在 test.txt 文件中检索关键词 ha
grep ha test.txt

多个文件中检索

# 在 三个 test 文件中检索关键词 哈
grep ha test1.txt test2.txt test3.txt

检索除外内容 -v

# 检索不包含 hello 的文件内容
grep -v hello test.txt

正则表达式检索 -E

# 检索包含小写字母的内容
grep -E '[a-z]+' test.txt

# 或

egrep '[a-z]+' test.txt

统计检索到的行数 -c

# 检索包含小写字母的内容,并统计行数
grep -Ec '[a-z]+' test.txt

检索内容显示行号 -n

# 检索包含关键词 ha 的内容,并显示行号
grep -n 'ha' test.txt

检索内容输出文件名 -l

# 在两个 test 文件中检索包含关键词 ha 的文件
grep -l 'ha' test1.txt test2.txt

递归检索 -r

# 在当前目录的所有文件中检索关键词 ha,并在结果中显示行号
grep -rn 'ha' ./

忽略大小写 -i

# 检索包含 hello 或 HELLO 的内容
grep -i 'hello' test.txt

排除指定关键词 -v

# 排除包含 ha 的行,输出其他行
grep -v 'ha' test.txt

同时检索多个关键词 -e

# 检索包含 ha 或 hello 的内容
grep -e 'ha' -e 'hello' test.txt

调用关键词文件 -f

# key 文件中列出了所有要检索的关键词或正则规则
# 在 test 文件中检索包含 key 中任意关键词的内容
grep -f key test.txt

检索时包含或排除指定文件 --include、--exclude

# 在当前目录的所有 php 和 html 文件中检索 hello 关键词
grep -rl 'hello' ./ --include *.{php.html}

# 在当前目录下,除 back 文件以外的文件中检索 hello 关键词
grep -rl 'hello' ./ --exclude 'back'

# 将排除的多个文件写入 exclude_key 文件中并调用
grep -rl 'hello' ./test/ --exclude-from exclude_key

# 排除指定目录 --exclude-dir
grep -rl 'hello' ./ --exclude-dir={BACK,OLD,old,TEMP,temp,templates_c,cache}

输出匹配内容之前或之后的行 -A、-B、-C

# 显示匹配内容的后面三行
grep 'test' test.txt -A 3

# 显示匹配内容的前面三行
grep 'test' test.txt -B 3

# 显示匹配内容的前三行和后三行
grep 'test' test.txt -C 3

find

可以用来查找不同大小、不同类型、不同创建时间、不同名字的文件

根据文件名查找 -name -iname

# 查找当前目录及子目录下,test.txt 文件
find ./ -name test.txt

¥ 根据一部分文件名查找,文件名一定要有
find ./ -name te*.*

# 没有文件名只有后缀,则需要引号
find ./ -name '*.txt'

# 查找隐藏文件
find ./ -name '.*'

# 文件名不区分大小写 iname
find ./ -iname test.*

根据文件类型查找 -type

# 查找当前目录下及子目录的所有文件
find ./ -type f

# 查找软连接
find ./ -type l

# 查找目录
find ./ -type d

根据文件修改时间查找 -mtime、-atime、-ctime

每个文件有三个时间:

  • mtime 文件最后修改时间

  • atime 文件最后访问时间

  • ctime 文件权限最后修改时间

# 查找当前目录及子目录下 7 天前修改过的 txt 文件
find ./ -mtime +7 -name '*.txt'

根据文件大小查找 -size

用到的单位有以下几种:

  • G GB

  • M MB

  • k KB

  • w 双字节字

  • c 字节

  • b 512 字节块(默认)

# 查找当前目录及子目录下,大于 2M 小于 10M 的所有 txt 文件
find ./ -size +2M -size -10M -name '*.txt'

根据文件权限查找 -perm

# 查找当前目录及子目录中,权限为 600 的文件
find ./ -perm 600 -type f

# 必须包含指定的所有权限 rw-------,比如 rwxr--r-- 包含会被查出来
find ./ -perm -600 -type f

# 只要包含其中一个 rw-------,比如 r-xr--r-- 包含会被查出来
find ./ -perm +600 -type f

根据文件用户、用户组查找 -user、-group、-uid、-gid、-nouser

# 查找当前目录及子目录中,属于 test 用户的所有文件
find ./ -user test

# 查找没有所属用户的文件
find ./ -nouser -type f

# 查找组 ID 为 200 的文件
find ./ -gid 200 -type f

指定查找深度

# 查找当前目录下的文件
find ./ -maxdepth 1 -type f

使用逻辑运算

  • -a 逻辑与

  • -o 逻辑或

  • -not 逻辑非

# 查找文件大于 2M 且后缀为 txt 的文件
find ./ -size +2M -a -name '*.txt'

# 查找名字为 test 或 back 的文件
find ./ -name back.* -o -name test.*

# 查找文件名不是 test 的文件
find ./ -not -name test.*

查找后执行其他命令 -exec、-ok

  • find 命令的结果放在 {} 中,并作为后面的 -exec 命令的输入值

  • -ok-exec 作用相同,但前者在执行第二个命令前会询问

# 查找 test 的文件后,执行 ls -l 查看文件具体信息
# {} 和 \ 之间必须有空格,且这两块是必须的
find ./ -name test.txt -exec ls -l {} \;

# 执行 ls -l 前会询问
find ./ -name test.txt -ok ls -l {} \;


Linux 中检索文件,检索过滤内容,这三个命令几乎都能满足。

在高级一点儿还有 sed、awk。

初次之外第三方扩展工具还有很多很多。

标签:locate,文件,检索,grep,查找,Linux,test,txt,find
From: https://www.cnblogs.com/rendd/p/17466546.html

相关文章

  • oracle linux 7.9 静默安装oracle 11g
    搭建虚拟机步骤配置ip,步骤省略。 下载linux版本11gOracle安装包,通过sftp上传到虚拟机。oracle11.2.4安装包及补丁包链接如下:链接:https://pan.baidu.com/s/1TaVNOqXCoSjsJJZ-ADLkmw提取码:ycxi前两个zip包为oracle,第三个为grid安装包,只安装数据,则下载1和2即可,如需搭建......
  • c++ linux基础学习第一课
    课程目标:1.shell命令解析器shell就是命令解析器,将用户命令翻译成内核能够识别的指令。shell常用的快捷键:tab:补齐命令,补齐文件(包括目录和文件)ctrl+a光标移动到头部,ctrl+e光标移动到尾部2.linux下主要目录:/bin保存着二进制文件、可执行程序和shell命令/sbins是superu......
  • 【Linux】CentOS防火墙操作:开启端口、开启、关闭、配置
    ......
  • Linux打包C++应用deb脚本
    目录结构├──CMakeLists.txt├──README.md├──scripts│  └──build_deb.sh├──src│  └──app.cpp└──VERSION打包脚本#!/bin/bashPROJECT_NAME="my-app"PROJECT_PATH=$(cd"$(dirname${BASH_SOURCE[0]})";cd..;pwd)MAINTAINER="jojo......
  • linux系统nfs搭建-cnblog
    Linux系统nfs搭建首先介绍一下NFS:​ NFS(NetworkFileSystem)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。1、虚拟机nfs环......
  • #yyds干货盘点#linux之curl使用技巧
    获取页面内容>curlhttps://json.im显示HTTP头>curl-Ihttps://json.imHTTP/1.1200OKServer:openrestyDate:Fri,04Jun202107:38:32GMTContent-Type:text/htmlContent-Length:12864Last-Modified:Thu,29Apr202101:39:01GMTConnection:keep-aliveVa......
  • Linux shell 之 for循环变量有空格的问题——IFS变量
    在使用shell的for循环时,如果循环的字符串中间有空格,那么循环时会自动分割,下面是解决的方法 1只需要更改shell分隔符即可2在for循环之前修改IFS变量,示例:3OLDIFS="$IFS"#备份旧的IFS变量4IFS=$'\n'#修改分隔符为换行符56foriin`cataaa`#aaa文件......
  • Linux驱动开发
      本文为一个简单的字符设备驱动,涉及驱动编写、测试程序编写、Makefile编写、驱动加载/卸载,运行于Linux虚拟机,不涉及底层配置。撰写本文的主要目的为记录一下驱动的开发流程,参考了正点原子的驱动开发指南。 驱动代码  创建文件夹1_chrdevbase/,下属APP/与Driver/两个......
  • linux内存回收策略
    1、64位操作系统进程可以最大申请多大的虚拟内存?64位操作系统的进程可以最大申请的虚拟内存取决于操作系统的架构和其对虚拟内存的管理方式。在理论上,64位操作系统可以支持非常大的虚拟内存空间。在大多数64位操作系统中,每个进程最大可以申请的虚拟内存大小通常为2^64字节,也就是......
  • Linux基础命令
    Linux基础命令(1)ctrlc:取消命令,并且换行(2)ctrlu:清空本行命令(3)tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项(4)ls:列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件(5)pwd:显示当前路径(6)cdXXX:进入X......