Linux查找命令

  • find查找文件
  • grep查找字符串

1. find命令

有多种使用方式:

  • 根据文件名搜索
  • 根据文件大小搜索
  • 根据文件类型搜索
  • 根据修改时间搜索
  • 根据文件权限搜索
  • 根据文件所有者搜索

上面的各种方式可以利用逻辑与或非组合起来使用。

功能一:按文件名搜索

常用用法

find path -option content

参数说明

参数

说明

path

搜索路径,可以为多个目录,默认为当前目录“.

-option

搜索选项,用来指定搜索的依据,比如指定文件名"-name"

content

搜索内容,一般是文件名

关于第二个参数-option的选项非常多,按文件名搜索常用的有:

  • -name: 按照文件名搜索
  • -iname:按照文件名搜索,不区分大小写
  • -inum: 按照inode号搜索

举个例子

在根目录下査找文件名是yum.conf的文件:

find / -name yum.conf
find / -iname YUM.CONF	#可以不区分大小写,这样也可以搜出来

在当前目录根据inode号搜索文件:

find . -inum 262147

这是区分硬链接文件的重要手段,硬链接文件的 inode 号是一致的。

功能二:按文件大小搜索
find path -option content

参数

说明

path

搜索路径,可以为多个目录,默认为当前目录“.

-option

搜索选项,按照文件大小搜索需指定为"-size"

content

搜索内容,指定文件大小,用“+,-”指定范围

关于第二个参数-option搜文件大小要指定为-size

关于第三个参数content的选项在按照文件大小搜索时可以指定文件的大小

  • +:表示大于
  • -:表示小于
  • c:表示单位为字节
  • k:表示单位为KB
  • M:表示单位为MB
  • G:表示单位为GB

举个例子

査找当前目录下大小刚好是25KB的文件

find . -size 25k

查找当前目录下小于25MB的文件

find . -size -25M

查找当前目录下大于25Byte的文件

find . -size +25c
功能三:按文件类型搜索

-option的选项:

  • -type d:查找目录
  • -type f:查找普通文件
  • -type l:查找软链接文件

举个例子

查找/etc目录下有哪些子目录:

find /etc -type d
功能四:按修改时间搜索

-option的选项:

  • -atime [±]时间: 按照文件中的数据最后被访问的时间搜索
  • -mtime [±]时间: 按照文件内容被修改的最后时间搜索
  • -ctime [±]时间: 按照文件的权限、拥有者、所属的组、链接数发生改变的时间搜索

举个例子

查找当前目录5天内修改过的文件

find . -mtime -5
功能五:按文件权限搜索

第二个参数-option要指定为-perm

第三个参数content可以指定权限,如777,

指定权限时可以支持[+/=]:

  • 777表示查找权限等于"777"的文件
  • -777表示包含"777"全部权限的文件
  • +777表示包含“777”任一权限的文件

举个例子

查找当前目录包含200权限的文件:

find . -perm -200

这个命令可以查找出当前目录权限为2xx6xx7xx权限的文件。

功能六:按文件所有者搜索

-option的选项有:

  • -uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
  • -gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
  • -user 用户名:按照用户名査找所有者是指定用户的文件
  • -group 组名:按照组名査找所属组是指定用户组的文件
  • -nouser:査找没有所有者的文件

举个例子

查找文件所有者是root的文件

find . -user root
组合搜索
find path -option1 content1 -logic -option2 content2

-logic的选项有:

  • -a:and逻辑与
  • -o:or逻辑或
  • -not:not逻辑非

默认缺省时是-a逻辑与的关系。

举个例子

在当前目录下搜索大于2KB,并且文件类型是普通文件的文件

find . -size +2k -a -type f
#等价于
find . -size +2k -type f

在当前目录下搜索文件名要么是hello.c的文件,要么是main.c的文件

find . -name hello.c -o -name main.c

2. grep命令

功能:用来搜索文件内容含指定字符串的行。

基本用法:

grep -option "string" pathfile

关于第二个选项-option是grep命令的关键,可以指定搜索的方式:

选项

功能

-r

recursive递归查找

-v

invert,反向查找,即不包含"string"的行

-n

num,同时显示行号

-i

ignore,不区分大小写

-l

显示内容包含“string”的文件

-L

显示内容不包含“string”的文件

-A1

after 1,同时显示查找到的内容的后1行

-B2

before 2,同时显示查找到的内容的前2行

-C3

相当于after 3 + before 3,同时显示前后3行

-e

相当于egrep,扩展正则表达式

举个例子

找出当前目录及子目录中.sh文件内容含有"test"的文件,并显示行号和前后1行

grep -nrC1 "test" *.sh

linux grep 目录中查找文件 linux grep搜索文件名_c语言

找出当前目录中的所有txt文件内容中含有first单词的文件

grep -l "first" *.txt

反向操作只需把 -l 变成 -L 即可。

利用管道将find和grep联合使用

从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 “ERROR” 的行:

find / -type f -name "*.log" | xargs grep "ERROR"

从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 “thermcontact” 的行:

find . -name "*.in" | xargs grep "thermcontact"

2022.04.21

参考:C语言中文网 菜鸟教程