Linux文本处理---文本查找

  • 文件查找

所谓的文件查找时根据文件的各种属性在特定的路径下找到对应文件的过程。

一、文件查找的方式

  • 实时查找:遍历所有文件进行条件匹配。查找精确,但是速度慢。

这种查找通过find命令来实现。

  • 非实时查找:根据索引进行查找。查找速度快,但是查找不精确。

这种查找locate命令,它只依赖于索引查找的,索引的创建时在系统空闲的时候由系统自动进行的。手动更新数据库的命令式upadtedb。

二、实时查找

通过find命令来实现。find是根据查找条件,在查找路径中查找到对应的文件,根据处理动作做出相应的操作。

Usage: find [options]... [查找路径] [查找条件] [处理动作]

查找路径:默认是当前路径

查找条件:默认是指定路径下的所有文件

处理动作:默认的处理动作时显示到屏幕上

查找条件类型:

查找条件类型 具体意义 示例

-name

-iname


支持通配符

-name 文件名

-iname 文件名(不区分大小写)


查找当前路径下s开头的文件名

find ./ -name "s*"

查找当前路径下s|S开头的文件名

find ./ -iname "s*"


-uid -user -nouser

-gid -group -nogroup


-uid 根据文件属主的UID查找

-user 根据文件属主名查找

-nouser 没有属主的文件


查找当前路径下文件属主uid为500文件

find ./ -uid 500

查找当前路径下文件没有属主的文件

find ./ -nouser

-type 
-type 根据文件类型查找

文件类型:f,d,l,b,c,s,p


查找当前路径下是目录的文件

find ./ -type d

-size
-size 根据文件大小查找

-size 12M 精确查找(11-12M之间都满足)

-size +12M 大于12M的文件

-size -12M 小于12M的文件


查找当前路径下文件名s开头的并且大于100G的文件

find ./ -size +100G -a -name ‘s*‘


-atime -mtime -ctime

-amin -mmin -cmin


-atime 根据访问时间查找单位是天,-amin的单位是分

-mtime -mmin 文件内容修改时间

-ctime -cmin 文件元数据信息修改时间

-atime 2 修改时间是2天之前(2-3天)

-atime -2 修改时间是2天之内

-atime +2 修改时间是3天之外(>3天)


查找/etc/目录下最近一周内其内容修改过的

find /etc/ -mtime -7

查找/etc/目录下最近一周内其内容没有修改过的

find /etc/ -mtime +7

-perm
-perm 根据文件权限查找

-prem 644 文件权限就是644的

-prem +222 只要有任意一类用户可写权限即可(222对应的权限是-w--w--w-,查找文件的权限中,只要有一个对应位有w权限即可)

-prem -222  每一用户至少有可写权限,属主,属组,其他每个都至少有可写权限


查找/etc/目录所有用户都没有写权限的文件

find /etc/ -not -perm +222

查找/etc/目录所有用户都可写权限的文件

find /etc/ -perm -222

注意:在使用查找条件是可使用组合条件查询:-a(&&),-o(||),-not(!)。

处理动作:

处理动作 具体意义 示例
-print 默认处理动作,打印 find /etc/ -mtime -7 -print
-exec
-exec COMMAND {} \;

一次性查找符合条件的所有文件,并一同传递给CMOMANDD作为参数

find /etc/ -mtime -7 -exec rm -f {} \;
-ok
-ok COMMAND {} \;

同exec一样,只是在执行命令的时候会有所提示

find /etc/ -nane ‘i..ue‘ -ok rm -f {} \;

在使用exex后ok参数的时候,有些命令接受的参数有长度有限,运行过程中出现“参数列表过长”的类似信息。此时需要用另一个命令xargs。通常的用法是 find [option] [查找路径] [查找条件] | xargs COMMAND。

执行过程是:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

三、非实时查找

通过locate命令来查找,是一种模糊匹配。

Usage: locate [option]... [PATTERN](通配符)

常用参数:

-d 指定数据库(索引)的路径,默认是/var/lib/mlocate/mlocate.db

-b ‘\NAME‘精确匹配

[[email protected] ~]# locate -b ‘\root‘ 
/root
/etc/selinux/targeted/contexts/users/root
/usr/src/kernels/2.6.32-358.el6.x86_64/include/config/usb/ehci/root
/var/spool/cron/root
/var/spool/mail/root
###locate ‘root‘ 如果是这样的话,查询的是 *root* 这种模式

我们一般都是使用精确查找,所以这里只对locate做大致了解。

四、练习

#1、查找/var/目录属主为centos且属组为mail的所有文件;
 find /var -user centos -a -group mail

#2、查找/usr目录下不属于root、bin或hadoop的所用文件;
find /usr -not -user root -a -not -user bin -a -not -user hadoop
#这里使用小括号时需要转义,并且小括号前后都有空格
find /usr -not \( -user root -o -user bin -o -user hadoop \)

#3、查找/etc/目录下最近一周内其内容修改过的,且不属于root且不属于hadoop的文件;
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)

#4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件;
find / \( -nouser -o -nogroup \) -a -atime -30

#5、查找/etc/目录下大于1M且类型为普通文件的所有文件;
find /etc -size +1M -type f

#6、查找/etc/目录所有用户都没有写权限的文件;
find /etc/ -not -perm +222

#7、查找/etc/目录下至少有一类用户没有写权限;
find /etc/ -not -perm -222

#8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件;
find /etc/init.d/ -perm -113

Linux文本处理---文本查找

时间: 2024-08-03 05:36:55

Linux文本处理---文本查找的相关文章

Linux之关于文本编辑器

关于文本编辑器 文本编辑器有很多,比如图形模式的gedit.kwrite.OpenOffice ... ... ,文本模式下的编辑器有vi.vim(vi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器.我们有必要介绍一下vi(vim)最简单的用法,以让Linux入门级用户在最短的时间内学会使用它.  nano 工具和DOS操作系统下的edit操作相似,使用简单,我们不作介绍了,如果您有兴趣,不妨尝试一下: vi 编辑器 为什么要学会简单应用vi vi或vim

第二章 Linux文件系统和文本编辑器

用户分为三类: 1.root用户 2.虚拟用户:不具有登录系统的能力,一般系统自身拥有,比如bin,daemon,ftp,mail 3.普通用户 useradd: -g:指定用户私有组 -G:添加附加组 -d:指定用户家目录,如果不存在可以结合-m创建 -m:如果家目录不存在则自动创建 -u:指定UID,和-o一起可以重复使用其他用户的UID,必须>=100 注意useradd的用户没有密码还不能登录 usermod:修改用户账号 -d[directory]:改变用户登录时的目录,注意不是改变家

Linux 系统中文本处理“三剑客”之grep

我们写脚本的时候,经常要截取命令输出的某项数据,比如:我要知道主机上有多少块硬盘 这是很方便的.使用grep搜索出我们想要的数据再使用 sed .或 cup 切割就可以取得我们主机的设备名称了,这是我们取数据的一种方法. Egreq 是grep 的升级版,支持扩展表达式.fgrep不支持正则表达式. 使用格式: 1 2 3 4 5 grep [OPTIONS] PATTERN [FILE...]      -o     只打印输出匹配到字符串      -i      做匹配时候忽略大小写   

linux操作系统-给文本添加 ' -单引号,一般转成CSV格式时使用

[[email protected] ~]# cat 1.txt1ms2ms3ms4ms5ms [[email protected] ~]# cat 1.txt | awk '{print $1"\047"}'1ms'2ms'3ms'4ms'5ms' [[email protected] ~]# cat 1.txt | awk '{print $1"\047"}' > 2.txt[[email protected] ~]# cat 2.txt1ms'2ms'3

linux 中的 文本处理工具

文本处理工具 在linux系统中 文本工具有很多 现在具体介绍几款 如 抽取文本的工具 和文件三剑客 文件内容:less和 cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep egrep 首先 有 查看文件的cat tac cat [OPTION]... [FILE]... -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非空行编号 -s:压缩连续的空行成一行 tac 与cat 命令 一样 不过是取反 more: 分页查看文件 m

Linux中关于文本查看和处理的常用命令

            Linux中关于文本查看和处理的常用命令 一.学习目标         掌握以下命令:             查看文本: cat .tac.more.less.head.tail             文本处理:cut.sort.uniq.wc.tr 二.查看文本命令        cat : 连接并显示文本 cat [options] file,... -n :显示行号 -E :显示结束符$ more :分屏查看文件 space键: 向后翻一屏 b键:向前翻一屏 e

如何在Linux上提高文本的搜索效率

对于系统管理员或程序员来说,当需要在复杂配置的目录中或者在大型源码树中搜寻特定的文本或模式时,grep类型的工具大概是最受欢迎的. 如果grep是你最喜欢的工具之一,那么你可能会更喜欢ack.ack是一个基于Perl的类似于grep的命令行工具,但是搜索速度更快,能力比grep更强.尤其是当你是程序员时,我强烈推荐你使用ack来取代grep. ack的用法非常适用与代码搜索,因此程序员可以在源码树中进行复杂的查询,而只需要更少的按键. ack的特性 ack的一些非常强大的特性: 默认搜索当前工作

Linux文本处理---文本搜索

在linux中,因为一切皆文件,而大部分程序的配置文件是文本形式的.所以对文本的处理就显得相当的重要了.对文本的处理包括对文本内容的搜索,文本内容的处理.下面就介绍文本的搜索相关知识. 文本内容搜索 文本搜索的含义是:根据用户指定的文本搜索模式(搜索条件)对目标文件进行逐行的扫扫描,将匹配到的行打印在屏幕上.文本搜索的主要作用是用于统计相关信息. 一.正则表达式 1.正则表达式的概念 是一类字符的书写模式,这些个字符不代表本字符的意义,而是具有特殊意义.一般是对控制或通配的功能. 2.正则表达式

Linux 第一章文本安装 red hat

享受生活  热爱挑战 明远分享 Linux 第一章文本安装 red hat 每章一段话 有些人似荷,只能远观:有些人似茶,可以细细品味:有些人似风,不必在意:有些人是树,值得依靠.人生就像是一场修行,修的就是一颗心.心顺,一切就会完美:心静,出境就会美好:心乐,人生就幸福了.多点踏实,少点浮躁,活得真实才能自在. 目标:   学会用文本方式安装red hat (建议先练习图形化安装,对比着学习文本安装) 理论部分: 一丶了解linux的系统内核 对于操作系统来说,内核就好像是人的"心脏"