Linux教程

Linux中find命令与三剑客之grep和正则

本文主要是介绍Linux中find命令与三剑客之grep和正则,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

image

昨日内容回顾

1.每个月的3号、5号和15号,且这天时周六时 执行
	00 00 3,5,15 * 6
    
2.每天的3点到15点,每隔3分钟执行一次
	*/3 3-15 * * *
    
3.每周六早上2点半执行
	30 02 * * 6
    
4.每隔两个月的一号下午10点执行
	00 22 01 */2 *
    
5.root密码忘记的解决方法
	1、重启
	2、在启动选择系统内核界面,按 e 键进入单用户模式
	3、找到 linux16 开头行,删除 ro , 并且在 ro 处添加 rw init=/sysroot/bin/sh
	4、按 ctrl + x 进行系统重新引导
	5、执行 chroot /sysroot
	6、执行 passwd root
	7、执行 touch /.autorelabel
	8、执行 Ctrl + D 重启系统
    
6.yum私有仓库的搭建步骤
	1、安装工具
		yum install createrepo yum-utils nginx -y
        
	2、创建目录
		mkdir /opt/test
        
	3、创建包目录
		mkdir /opt/test/Packages
        
	4、下载安装包
		下载到Packages目录中
		https://repo.huaweicloud.com/centos/7/os/x86_64/Packages/zsh-5.0.2-34.el7_8.2.x86_64.rpm
            
	5、初始化仓库
		createrepo /opt/test
        
	6、本地测试
    
	7、修改nginx配置文件
		[root@localhost /mnt]# vim /etc/nginx/nginx.conf
		# include /etc/nginx/conf.d/*.conf;
		root         /opt/test;
		autoindex on;
        
	8、启动Nginx
		systemctl start nginx 
        
	9、添加yum源
		yum-config-manager --add-repo=http://192.168.15.100
            
	10、远程测试

image

今日内容概要

  • find命令
  • 三剑客之grep
  • 正则表达式

内容详细

find命令

# 主要用于:根据文件的名称或者属性查找文件

# 语法格式
	find 查找范围 参数
    
	# 参数:
		-name :		按照文件的名字查找文件 
	案例1:查询/etc目录下hosts文件
		[root@localhost ~]#  find /etc/ -name 'hosts'
            
		* :		通配符
	案例2:查询/etc目录下名称中包含hosts文件
		[root@localhost ~]# find /etc/ -name '*hosts*'
            
		-iname :	按照文件的名字查找文件 忽略字母大小写
        
		-size :		按照文件的大小查询文件
			+ :	大于
			- :	小于
			没有符号 :	等于
	案例3:查询当前目录下大于5M的文件
		[root@localhost ~]# find ./ -size +5M
		[root@localhost ~]# find ./ -size -100M
    
		-mtime :	按照修改时间查询文件
			+(不写符号默认就是加号) n :	n天以前
			- n :				n天以内
	案例4:查询当前目录下三天以前的文件
		[root@localhost ~]# find ./ -mtime 3
        
		-atime 与 -ctime 都与 -mtime 用法一致
        
		-user :		按照用户的属主查询
		[root@localhost ~]# find ./ -user test10
        
		-group :	按照用户的属组查询
    
		-type :		按照文件的类型查询
		[root@localhost ~]# find ./ -type f
		d :	文件夹
		l :	链接文件
		s :	套接字文件
		p :	管道文件
		c :	字符文件
		b :	磁盘文件
		f :	普通文件
        
		-perm :		按照文件的权限查询
		[root@localhost ~]# find ./ -perm 644
        
		-inum :		根据index node号码查询
		[root@localhost ~]# find ./ -inum 134319695
        
	以下参数不能单独使用,必须配合其他参数一起使用:
		-a :	并且(可以省略,默认就是并且)
		-o :	或者
		-maxdepth n :	 查询n层的目录深度(必须放置与第一个参数位) 
	案例5:查询/etc/目录下hosts文件 并且目录深度2层即可
		[root@localhost ~]# find /etc/ -maxdepth 2 -a -name 'hosts'
		也可以省略
		[root@localhost ~]# find /etc/ -maxdepth 2 -name 'hosts'
        
		-exec :		将find处理好的结果交给其他命令继续处理
	案例6:要求把/etc目录下,所有的普通文件打包压缩到/tmp目录
		[root@localhost /tmp]# tar -czPf /tmp/etcv2.tar.gz `find /etc/ -type f | xargs`
        
# 知识拓展:
	dd if=/dev/zore of=100.txt bs=10M count=10
	dd :	生成文件
	if :	从什么地方读
	of :	写入到什么文件
	bs :	每次写入多少内容
	count :	写入多少次
        
	| :	前面一个命令的结果交给后面一个命令处理
        
	xargs :	把处理的文本变成以空格分割的一整行显示
        
	``(反向引号) :	提前执行命令,然后将结果交给其他命令来处理

image

三剑客之grep

# linux三剑客之一,文本过滤器(根据文本内容过滤文件)

# 语法格式:
	grep [参数] [匹配规则] [操作对象]
    
	# 参数:
		常用的有标记(***)
		-n :	过滤文本时,将过滤出来的内容在文件内的行号显示出来(***)
		-A :	匹配成功之后,将匹配行的后n行显示出来
		-B :	匹配成功之后,将匹配行的前n行显示出来
		-C :	匹配成功之后,将匹配行的前后各n行显示出来
		-c :	只显示匹配成功的行数(***)
		-o :	只显示匹配成功的内容(***)
		-v :	反向过滤(***)
		-q :	静默输出
		-i :	忽略大小写
		-l :	匹配成功之后,将文本的名称打印出来
		-R或-r :递归匹配 

		-E :	使用拓展正则   等价于  egrep    
        
案例:在/etc目录下,有多少个文件包含root
	[root@localhost ~]# grep -rl 'root' /etc/ | wc -l
        
# 知识拓展:
	$? :	上一行命令执行的结果,0代表执行成功,其他数字代表执行失败
			一般搭配 echo $? 输出结果
        
	wc :		匹配行数
		-l :	打印匹配行数
		-c :	打印匹配的字节数

image

正则表达式

# 正则表达式的分类(grep)
	普通正则表达式(grep语法不需要加 -E)
	拓展正则表达式

    
# 1.普通正则表达式
	^ :	以某字符开头
	案例1:在/etc/passwd文件中,匹配以ftp开头的行
		[root@localhost ~]# grep '^ftp' /etc/passwd
        
	$ :	以某字符结尾
	案例2:在/etc/passwd文件中,匹配以bash结尾的行
		[root@localhost ~]# grep 'bash$' /etc/passwd
        
	. :	匹配除换行符之外的任意单个字符
	* :	匹配前导字符的任意个数
	[] :	某组字符串的任意一个字符
	案例3:在/etc/passwd文件中,匹配以 r或q 开头的行
		[root@localhost ~]# grep '^[rq]' /etc/passwd
        
	[^] :	取反
	[a-z] :	匹配小写字母
	[A-Z] :	匹配大写字母
	[a-zA-Z] :匹配字母
	[0-9] :	匹配数字
	\ :	取消转义
	案例4:在/etc/passwd文件中,匹配f及后一个字符
		[root@localhost ~]# grep 'f.' /etc/passwd
		只会匹配 f. 内容 
		[root@localhost ~]# grep 'f\.' /etc/passwd
        
	() :		分组
		\n :	代表第n个分组
        
		匹配两个分组
		[root@localhost ~]# grep '\(ew\)\(qr\)\.*\1\2' /etc/passwd
        
		匹配一个分组(有两个分组 但是只会匹配一个)
		[root@localhost ~]# grep '\(ew\)\(qr\)\.*\1' /etc/passwd
        
# 2.拓展正则
	{} :	匹配的次数
	{n} :	匹配n次
	{n,} :	至少匹配n次
	{n,m} :	匹配 n 到 m 次(n次 中间次 m次)
	{,m} :	最多匹配m次
	+ :	匹配至少有一个前导字符
	? :	匹配一个或零个前导字符
	| :	或
    
	案例4:匹配本机中有哪些ip
		[root@localhost ~]# ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
		匹配0-9数字三位 匹配. 匹配3位 匹配0-9数字三位
        
		ip a | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
		匹配0-9数字三位 匹配. 匹配0-9数字三位 匹配. 匹配0-9数字三位 匹配. 匹配0-9数字三位 匹配. 
        
	案例5:要求将/etc/fstab中的去掉包含 # 开头的行,且要求 # 后至少有一个空格
		[root@localhost ~]# grep -vE '^#\ +' /etc/fstab
        
	案例6:找出文件中至少有一个空格的行
		[root@localhost ~]# grep -E '\ +' xxx
        
	案例7:将 nginx.conf 文件中以#开头的行和空行,全部删除
		[root@localhost ~]# grep -vE '^\ *#|^$' /etc/nginx/nginx.conf

image

这篇关于Linux中find命令与三剑客之grep和正则的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!