前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LInux中的查找

LInux中的查找

作者头像
matt
发布2022-10-25 15:56:21
16.1K0
发布2022-10-25 15:56:21
举报
文章被收录于专栏:CSDN迁移CSDN迁移

LInux中的查找

一、grep

Global Regular Expression Print,表示全局正则表达式版本。grep 命令用于查找文件里符合条件的字符串的一列。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

1、查找时不区分字符串的大小写

代码语言:javascript
复制
grep -i ${“查找的字符串”文件名}

2、查找时使用正则表达式,匹配符合的字符串

代码语言:javascript
复制
grep -e ${“正则表达式”文件名}

3、查找不匹配指定字符串的行:

代码语言:javascript
复制
grep -v ${“被查找的字符串”文件名}

4、查找时显示被查找字符串所在的行数

代码语言:javascript
复制
grep -n ${“查找的字符串”文件名}

5、其他

代码语言:javascript
复制
-q 或 --quiet或--silent : 不显示任何信息。
-w 或 --word-regexp : 只显示全字符合的列。

5、其他

代码语言:javascript
复制
-c <显示符合条件的个数>
-C <显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-r <递归查询目录>
-f <规则文件>  --file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

参考文章

二、find

2.1 基本用法

用于在文件树中(目录结构下)查找文件,并作出相应的处理 。

  • 命令参数 pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find命令将匹配的文件输出到标准输出。 -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。 -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
  • 命令选项 -name 按照文件名查找文件。 -perm 按照文件权限来查找文件。 -mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。 -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 -type 查找某一类型的文件,诸如: b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 -fstype,- aount,- follow在文件系统、挂载点、链接文件中查询。
  • 时间 atime(access time):在读取文件或者执行文件时更改,即文件最后一次被读取或执行的时间。 mtime(modify time):在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。 ctime(change time):在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态(属性)最后一次被改变的时间。
代码语言:javascript
复制
-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件
  • 示例
  1. 根据关键字查找
代码语言:javascript
复制
# 在当前目录查找以.log结尾的普通文件,并排序
find . -type f -name "*.log" | sort
  1. 按照目录或文件的权限来查找文件
代码语言:javascript
复制
# 查找opt下查找权限为777,大小大于1K的文件
find /opt/ -size +1000c -perm 777

2.2 -exec 命令选项

find命令将所有匹配到的文件,以{}表示,一起传递给exec执行。 -exec 参数后面跟的是command命令,它的终止是以;为结束标志的,考虑到各个系统中分号会有不同的意义,前面加反斜杠\

  • 示例
  1. 在目录中查找更改时间在n日以前的文件并删除它们
代码语言:javascript
复制
find . -type f -mtime +14 -exec rm {} \; 

在shell中用任何方式删除文件之前,应当先查看相应的文件,建议使用-exec的安全模式-ok

  1. 查找文件移动到指定目录
代码语言:javascript
复制
find . -name "*.log" -exec mv {} /home/logs \;
  1. -exec中使用grep命令
代码语言:javascript
复制
find /etc -name "account*" -exec grep "username" {} \;

查找文件名包含“account”中,匹配“root”字段的行。

2.3 配合 xargs 命令

有些系统对能够传递给exec的命令长度有限制,容易出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。使用 -exec 选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行,效率不高。 而使用 xargs 命令则只有一个进程,是否分批获取参数视情况而定。

  1. 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
代码语言:javascript
复制
# 显示为:
# ./log2013.log: empty
# ./log2012.log: ASCII text
find . -type f | xargs file
  1. 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中
代码语言:javascript
复制
 find / -name "core" -print | xargs echo "" >/tmp/core.log
  1. 在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限·
代码语言:javascript
复制
find . -perm -7 -print | xargs chmod o-w

三、awk

awk工作流程是这样的:读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,1表示第一个域,n表示第n个域。NF 表示的是浏览记录的域的个数,NF 表示的最后一个Field(列),即输出最后一个字段的内容默认域分隔符是"空白键" 或 “[tab]键”。

代码语言:javascript
复制
# 查找/opt/app/conf中properties文件格式的文件名,去掉前面的路径,只保留文件名
find /opt/app/conf -name "*.properties"|awk -F "/" '{print $NF}'
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LInux中的查找
  • 一、grep
  • 二、find
    • 2.1 基本用法
      • 2.2 -exec 命令选项
        • 2.3 配合 xargs 命令
        • 三、awk
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档