Linux运维笔记--第三部
第三部
3. Linux系统文件重要知识初步讲解
# ls -lhi (i: inode,每个文件前的数字代表文件身份ID;h: human 人类可读)
显示:25091 -rw-r--r-- 1 root root 81 4月 15 00:33 oldboy.txt
第1列:inode=>index node 索引节点编号。
第2列:文件类型及权限(共10个字符,第一个字符为类型,后9个字符为文件权限)。
第3列:硬链接个数( 详细参看ln命令的讲解)。硬链接是文件的又一个入口。
第4列:文件或目录所属的用户(属主)。
第5列: 文件或目录所属的组。
第6列:文件或目录的大小。
第7、8、9列:文件或目录的修改时间。
第10列:实际的文件名或目录名。
4. Linux系统文件系统重要知识整体介绍
第2列:2-10个字符 rw-r--r--. 文件权限(r: read ; w: write x: 执行; -: 无) 第11个字符是一个点符号,与SELinux相关。
5. Linux系统文件系统重要知识整体介绍
第四列:文件对应的属主或者用户。
第五列:文件对应的属组或用户主。
6. Linux系统文件系统重要知识inode深度详解
inode概述:硬盘要分区,然后格式化,创建文件系统。
Innode,中文意思是索引节点(index node)。在每个Linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘.......)被格式化为EXT4文件系统后,一般都有两部分:第一部分是Inode(很多个),第二部分是Block(很多个)。Block是用来存储实际数据用的,例如:照片、视频等普通文件数据。而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括文件大小、属主、归属的用户主、读写权限、文件类型、修改时间,还包含指向文件实体的指针的功能(inode节点 --block的对应关系)等。但是,inode里唯独不包含文件名。
查看inode大小的命令:
# dumpe2fs /dev/sda3(1) | grep -i "inode size"
显示:Inode size: 256字节
查看:inode各个分区总量(使用多少,空闲多少,使用百分比) # df -i
查看block总量(硬盘使用情况) # df -h
有关inode的小结:
a. 磁盘分区格式化为ext4文件系统后会生成一定数量的inode和block 。
b. inode是索引节点,作用是存放文件的属性信息以及作为文件的索引(指向文件的尸体block)
c. ext3/ext4文件系统的block存放的是文件的实际内容。
d. inode是一块存储空间,Centos6非启动分区inode默认大小256字节,Centos5是128字节。
e. inode是一串数字,不同的文件对应的inode(一串数字)在文件系统里是唯一的。
7. inode与block重点核心知识13点总结讲解
f. inode号相同的文件,互为硬链接文件(文件的又一个入口)
g. 一个额外你见被创建后至少要占用一个inode和一个 block.
h. block的大小一般有1k,2k,4k几种。其中引导分区等为1k,其他普通分区为4k(Centos6) (查看命令 # dumpe2fs /dev/sda/ | grep -i "block size" )
i. 如果一个文件很大,可能占多个block(4k).
j. 如果文件很小,至少占一个block,并且剩余空间浪费了。
k. inode大小和总量查看
# dumpe2fs /dev/sda3 |egrep -i "block size | inode size" ; # dumpe2fs /dev/sda3 | egrep -i "block count | inode count "
l. 查看inode的总量和使用量命令 df -i
m. 如何生成及指定inode大小 # mkfs . ext4 -b 2048 -I 256 /dev/sdb
8. block重点核心知识总结讲解
有关Block的知识总结:
a. 硬盘读取数据是按Block为单位读取的。
b. 一个文件可能占用多个block,每读取一个block就会消耗一次硬盘I/O 。
c. 如果要提升磁盘I/O性能,那么就要尽可能一次性读取数据尽量的多。
d. 一个block只能存放一个文件的内容,无论内容有多少。如果block 4k,那存放1k的文件,剩余3k 就浪费了。
e. Block并非越大越好。Block太大对于小文件存放就会浪费磁盘空间。例如:1000K的文件,BLOCK为4K,占用250个BLOCK,BLOCK为1k,占1000个BLOCK。 访问效率谁更高?消耗I/O分别为250次和1000次。
f. 大文件(大于16k)一般设置Block大一点,小文件(小于1K)一般设置BLOCK 小一点。
g. BLOCK太大例如4K,文件都是0.1k,大量浪费磁盘空间。
9. block重点核心知识10点总结讲解2
h. Block太大例如1K,文件都是1000K,消耗磁盘I/O。
i. 恩健较大时,block 设置大一些会提升磁盘访问效率。
j. ext3/ext4文件一般设置为4K.
k. Block的设置也是格式化分区时候,mkfs ext4 -b 2048 -l 2048 -l 256 /dev/sdb
10. 业务数据大小和block大小设置应用场景选择利弊说明
见视频画图说明block占用空间的理解
11. 企业生产有关inode与block面试题案例
企业面试题1:一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少个?
解答知识点:
a. 上面的考试题考察的是文件系统inode和block的知识。
b. inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小128 byte (C58),256 byte (C 64)
c. Block是存放文件实际内容的,默认大小1K(boot)或4K(非系统分区默认给4K),一般企业多用4K的block。
d. 一个文件至少要占用一个inode及一个block。
e. 默认较大分区常规企业真是场景情况下,inode数量是足够的,而block数量消耗的会更快。
正确答案:
a. 默认分区常规情况下,对大文件来讲inode是足够的。而block数量消耗的会更快,block为4k的情况,1M的文件不会有磁盘浪费情况,所以 文件数量大概为100/1=100个。
b. 对于小文件0.1K,inode会消耗的更快。默认分区的时候block数量是大于inode数量的。
每个小文件都会占用一个inode和一个block。所以最终文件的数量:inode会先消耗完,文件总量是inode的数量。
企业面试题2:如果想磁盘写入数据提示如下错误:No space left on device,通过df -h 查看磁盘空间,发现没满,请问可能原因是什么?
解答:可能是inode数量被消耗尽了。
a. df -i 查看是否耗尽了inode 数量。
b. 企业工作中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件沾满导致No space left on device的错误。clientmquene目录只有安装了sendmail,才会有。centos5.8默认就会装
sendmail ,centos6.6 默认没有sendmail。
12. Linux系统文件属性类型介绍及普通文件类型说明
a. windows里是通过扩展名(.txt)来区分文件类型的。oldboy.txt
b. linux里文件扩展名和文件类型没有关系。
c. 为了容易区分和兼容用户使用windows的习惯,我们也会用扩展名文件类型。oldboy.sh ,oldboy.tar.gz
在Linux系统中,可以说一切皆文件。文件类型包含有普通文件,目录文件,块设备文件,符号链接文件等等。
13. Linux系统文件属性更多类型介绍
Linux文件类型分为以下几种(带*号的必须要掌握):
**b: block(buffered) special 设备文件
c: character (unbuffered) special 字符文件
*****d: directory 目录文件
p: named pipe (FIFO) 管道文件
*****f : regular file (-) 普通文件
***l : symbolic link ; soft link 链接文件
s : socket 套接字文件
# mkmod oldboy c 5 1 创建oldboy为字符设备文件
文件类型小结:
- - : regular file 普通文件(*****)
- d : directory 目录(*****)
- l: link 符号链接或者软链接文件(***) 快捷方式,它指向文件的实体。
- 字符文件,块设备文件:c: character 串口设备、猫 b: block 硬盘、光驱
- *.sock进程之间通信会用到 s: sock
- p: 管道文件
14. Linux系统额外你见扩展名介绍
Linux系统里常见的文件扩展名如下:
- 源码 .tar .tat.gz tgz .zip .tar.bz 表示压缩文件,创建命令一般为tar 、gzip 、zip等。
- .sh表示shell脚本文件,通过shell语言开发的程序。
- .pl表示perl语言文件,通过perl语言开发的程序。
- .py表示python语言文件,通过python语言开发的程序。
- .html、.htm、.php、.jsp、.do表示网页语言的文件。
- .conf表示系统服务的配置文件。
- .rpm表示rpm安装包文件。
运维开发原因呢:shell/python/php三者之一,至少会一个,最好会两个。
15. Linux系统链接的概念介绍
在Linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一种为软链接或符号链接(symbolic link or soft link)。我们在前面讲解过ln这个命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建的链接是硬链接。
如果使用ln -s创建链接则为软链接。
实践直观演示理解。
硬链接:ln 源文件 目标文件
软链接:ln -s 源文件 目标文件(目标文件不能事先存在) -s (soft)
16. linux系统属性硬链接介绍及文件删除原理初步
硬链接是指通过索引节点(inode)来进行链接。在Linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为硬链接。提示:硬链接文件就相当于文件的另外一个入口。硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止"误删" 原数据。
在Linux系统中,删除静态文件(没有进程调用)(目录也是文件)的条件是与之相关的所有硬链接文件均被删除。
17. Linux系统硬链接知识总结与实践
硬链接的创建:
直接执行命令"ln 源文件 硬链接文件"即可完成创建硬链接。
硬链接知识小结:
- 具有相同inode节点号的多个文件是互为硬链接文件。
- 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除。
- 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
- 当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。
- 硬链接文件就是文件的另一个入口(相当于超市的门前,后门一样)。
- 可以通过给文件设置硬链接文件,来防止重要文件被误删。
- 通过执行命令"ln 源文件 硬链接文件",即可完成创建硬链接。
- 硬链接文件可以可以用rm命令删除。
- 对于静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为 0(i_link),文件就被删除。i_link的查看方法(ls -l结果的第三列就是)
创建硬链接命令:
- # touch oldboyfile
- # echo "I am raymond linux" >oldboyfile
- # cat oldboyfile
- # ls -l oldboyfile
- # ln oldboyfile oldboyfile_hard_link (显示硬链接数为2)
- # rm -f oldboyfile
- # cat oldboyfile_hard_link (I am oldboy linux)
- # cat oldboyfile (显示:没有那个文件或目录) 找相同inode编号的多个文件。(例如:inode=141175)
- # find / -type f |xargs ls -lhi | grep 141175
18. linux系统文件删除原理深度讲解
文件删除控制的变量。
i_link文件的硬链接数量。
i_count引用计数(有一个陈格许使用i_count+1)
文件删除的条件:i_link=0 and i_count=0
19. linux系统文件删除原理答疑
- 被进程占用的文件能不能删?能
- 如何查看文件是否被进程占用或者看i_count 。
- 如何找回没有链接指向但是被进程占用的文件。
20. 企业生产场景文件删除问题案例准备
企业案例:如果向磁盘写入数据提示如下错误:No space left on device,通过df -h 查看磁盘空间,发现没满,请问可能原因是什么?
解答:可能是 inode数量被消耗尽了。
- df -i 查看是否耗尽了inode数量。
- 企业工作中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件占满导致No space left on device的错误。clientmquene目录只有安装了sendmail服务,才会有。
Centos5.8默认就会装sendmail,centos6.6默认没有sendmail。
*保留视频实践知识。(多看)未了解 *****
21. 企业生产场景文件删除问题案例准备2
# df -h 磁盘分区信息命令
# du -sh /(*) 查看根(/)分区目录文件的大小
22. 企业生产场景文件删除原理案例与inode案例
企业案例:文件删除生产场景案例解决实战
WEB服务器磁盘满故障深入解析 (http://oldboy.blog.51cto.com/2561410/612351) 多看本视频,未了解 (*****)
23. linux系统目录的硬链接知识介绍
以点(.)开头的文件代表隐藏文件
# ls -a 显示隐藏文件 ls -al 显示所有隐藏文件
#每个目录与目录下的点(当前目录)互为硬链接文件。所以目录有2个入口
24. 有关硬链接数的深度企业面试试题-学生问题
如果一个目录含有8个硬链接数。说明该目录下含有一个当前目录(.)和7个目录文件里上一级目录(..)。
25. Linux系统软链接知识及实践详解
软链接(soft link)也称为符号链接(symbolic link),Linux里的软链接文件就类似于windows系统中的快捷方式。Linux里的软链接文件实际上是一个特殊的文件,文件类型是I 。软链接文件实际上可以
理解为一个文本文件,这个文件中包含有软链接指向另一源文件的位置信息内容。因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。
创建软链接命令: # ln -s oldboyfile oldboyfile_soft_link
26. Linux系统软链接核心知识7点小结
执行命令 "ln -s 源文件 软链接文件“ ,即可完成创建软链接。
误区:创建软链接源文件是需要存在的,要创建的软链接文件是不能存在的,是要用ln命令创建的。
软链接知识总结:
- 软链接类型windows的快捷方式(可通过readlink查看其指向)
- 软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
- 删除源文件,软链接文件依然存在,但是无法访问指向的源文件路径内容了。
- 失效的时候一般是白字红底闪烁提示。 oldboy_soft_link_file --> oldboy -file (红色区域)
- 执行命令" ln -s 源文件 软链接文件 " ,即可完成创建软链接(目标不能存在)
- 软链接和源链接是不同类型的文件,也是不同的文件。inode号也不相同。
- 删除软链接文件可以用rm命令。
27. 目录和文件的软硬链接知识实践
看视频实践
28. Linux系统文件链接核心知识7点小结
有关文件的链接小结:
通过以上的测试,我们可以得到以下几个结论:
- 删除软链接oldboyfile_soft_link,对oldboyfile,oldboyfile_hard_link无影响。 全局结论:删除软链接文件对源文件及硬链接文件无任何影响。
- 删除硬链接oldboyfile_hard_link,对oldboyfile,oldboyfile_soft_link都无影响。 全局结论:删除硬链接文件对源链接及软链接文件无任何影响。
- 删除源文件oldboyfile,对硬链接oldboyfile_hard_link 没有影响,但是会导致软链接oldboyfile_soft_link失效。全局结论:删除源文件,对硬链接文件没有影响,但是会导致软链接文件失效,白字红底闪烁。
- 同时删除源文件源文件oldboyfile,硬链接文件oldboyfile_hard_link,整个文件会真正的被删除。
- 很多硬件设备中的快照功能,就是利用了硬链接的原理。
- 源文件和硬链接文件具有相同的索引节点号,可以认为是同一个文件或一个文件的多个入口。
- 源文件和软链接文件索引节点号不同,是不同的文件,软链接相当于源文件的快捷方式,含有源文件的位置指向。
29. Linux系统文件链接核心知识9点小结
有关目录链接小结:
- 对于目录,不可以创建硬链接,但可以创建软链接。
- 对于目录的软链接是生产场景运维中常用技巧(例子第二关apache考试题)
- 目录的硬链接不能跨越文件系统(从硬链接原理可以理解)
- 每个目录下面都有一个硬链接"."号,和对应上级目录的硬链接".." 。
- 父目录里创建一个子目录,父奴鲁的链接数增加1(子目录都有..来指向父目录) ,但是在父目录里创建文件,父目录的链接数不会增加。
企业面试题:描述Linux下软链接和硬链接的区别
解答:在Linux系统中,链接分两种:一种被称为硬链接;另一种被称为符号链接或软链接。
- 弄人不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接。
- 硬链接文件与源链接的inode节点号相同,而软链接文件inode节点号与源文件不同。
- ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到。
- 删除软链接文件,对源文件及硬链接文件无任何影响。
- 删除文件的硬链接文件,对源文件及软链接文件无任何影响。
- 删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效。(红底白字闪烁状)
- 同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
- 很多硬件设备中的快照功能,使用的就类似链接的原理。
- 软链接可以跨文件系统,硬链接不可以跨文件系统。
30. 有关软链接的生产使用案例实战讲解
- 软链接的生产使用案例: 我们便宜apache软件时,编译路径带着版本号/application/apache2.2.21(为了区分版本用,因此路径比较大),而在访问目录时又希望简便,此时就可以通过建立一个简单的软链接路径文件ln -s /application/apache2.2.21 /application/apache,来达到方便访问的目的。有关软链接的使用建议:生产情况尽可能少或者说合理的创建软链接,不要过多的使用软链接,否则在数据进行迁移时会引起麻烦,软链接过多也会造成目录看起来很混乱。
- 企业生产目录软链接作用:
a. 编译软件时指定版本号(/application/apache2.2.23),访问时希望去掉版本号(/application/apache),可以设置软链接到编译的路径。所有程序都访问软链接文件(/application/apache),当软件升级高版 本后,只需删除链接文件重建到高版本路径的软链接即可(/application/apache)。
b. 企业代码发布时(php程序),需要把所有代码传到一个新发布的临时目录或者新的站点目录。发布时要么一个mv,也可以重建软链接指向到这个新的临时目录挥着新的站点。
c. 不方便目录移动,使用ln -s 。
31. 如何获取知识的源头
- Linux下通过mkdir命令创建一个新目录/oldboy/etc,它的硬链接数时多少,为什么?
- 如果在/oldboy/etc目录下再常见一个目录,那么/oldboy/etc的硬链接数是多少,为什么?
解答1:硬链接数2个,查看方法为:ls -ld /oldboy/etc
这是因为: a. 创建的目录本身为一个硬链接。
b. 新目录ett下的隐藏目录(点号)为创建的新目录的又一个硬链接 ,也算一个链接数。因此,硬链接数是2。
解答2:硬链接数3个。
通过上面的题,我们发现ett目录的inode节点数字编号,和ett目录下的(.)点目录。 inode编号是一样的,而ett目录下的(..) 两个点和ett的上级目录oldboy的inode数字编号是一样的。
32. Linux文件属性之用户和用户组介绍
用户的角色是通过UID和GID识别的。
UID: User Identify 用户ID,相当于各位的身份证,在系统中是唯一 的。
GID: Group Identify 组ID,相当于各位的家庭或者你们的学校。
用户分为三类:
a. 超级用户:root ( uid = 0 , gid = 0 , uid = 0 的用户就是超级用户) # vi /etc/passwd (修改passwd文件,可更改uid,gid)
b. 虚拟用户: 它存在Linux中,满足文件或程序运行的需要而创建的。不能登陆,不能使用,是傀儡。 uid-->gid (1-->499)
c. 普通用户:管理员root创建的用户,uid-->gid (500-->65535)
虚拟用户Linux安全优化:1. 安装系统后可以删除用不到的虚拟用户,但最好不删而是注释掉,万一回复过来。
2. 我们自己部署服务的时候,也会创建虚拟用户,满足服务的需求:例如:apache, nginx, mysql, nfs, rsync, nagios, zabbix, redis
33. Linux文件属性之用户和用户组关系介绍
用户和用户组的对应关系有:一对一,一对多,多对一和多对多。
一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。如 root 。
一对多:即一个用户可以存在于多个用户组中。
多对一:多个用户可以存在于一个组中,这些用户具有和组相同的权限。
多对多: 多个用户可以存在多个组中。并且几个用户可以归属相同的组。
34. Linux文件属性之用户和用户组的核心文件介绍
Linux系统下的账户文件主要有/etc/passwd , /etc/shadow , /etc/group , /etc/gshadow文件
- /etc/passwd 用户的配置文件
- /etc/shadow 用户影子口令文件
- /etc/group 用户组配置文件
- /etc/gshadow 用户组的影子文件
35. Linux文件属性之用户组对应文件内容介绍
- passwd文件中一行的各个字段简述
账号名称 账号密码 账号UID 账号组GID 用户说明 用户家目录 shell解释器
root :x :0 :0 :root :/root :/bin/bash
2. shadow文件中一行的各个字段详细说明
字段名称 注释说明
账号名称 用户的账号名称
账号密码 用户密码,这是加密的口令
最近更改密码的时间 从1970年1月1日起,到用户最近一次更改口令的天数
禁止修改密码的天数 从1970年1月1日起,到用户可以更改密码的天数
用户必须更改口令的天数 从1970年月1日起,到用户必须更改密码的天数
警告更改密码的天数 在用户密码过期前多少天提醒用户更改密码
不活动时间 在用户密码过期之后到禁用账户的天数
失效时间 从1970年1月1日起,到用户被禁用的天数(useradd -f)
标志 保留
3. group文件中一行的各个字段详细说明
字段名称 注释说明
用户组名 该组的名称
用户组密码 通常不需要设置该密码,由于安全原因,该密码被记录在/etc/gshadow中,因此,显示为"X"。这类似/etc/shadow
GID 就是用户组的ID
用户组成员 加入这个组的所有用户账号
4. gshadow文件中一行的各个字段详细说明
用户组名 注释说明
用户组密码 用户组密码,这个段可以是空的或!,如果是空的或有!。表示没有密码
用户组管理源账号 用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割
用户主成员 加入这个组的所有用户账号,对表中多个用户通过“,” 分割
36. Linux系统文件属性之各类时间戳介绍
# ls -l 显示的时间是修改时间 (文件名在上一级目录的block,删文件是产出上一级目录的block,block受上一级目录的权限控制)
# ls -l --time -style = long - iso (显示友好的长格式时间为:2018-03-23)
# stat /etc/hosts (显示文件的时间)(显示文件或文件系统的状态)
- access: 访问时间 (find -atime)
- modify: 修改时间,内容发生变化 (find -mtime)
- change: 变化时间,包含modify,权限,属主,用户组都发生改变(find -ctime)
37. Linux正则表达式介绍(*****)
什么是正则表达式?
简单的说,正则表达式就是为助理大量的字符串而定义的一套规则和方法。
例如:假设“@”代表oldboy,“!”代表oldgirl。 echo "@!"==" oldboyoldgirl "
通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
Linux正则表达式一般以行为为单位处理的。
Linux正则表达式只针对命令三剑客 (grep , egrep , awk, sed)
38. 为什么要使用正则表达式
在企业工作中,我们每天做的Linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序。命令输出及日志文件等。而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的
特定的字符串。这就要靠正则表达式。因此,可以说正则表达式就是为过滤这样字符串的需求而生的!
例如:ifconfig的输出取IP 。 例如:cat /var/log/message输出等。
39. 使用正则需要注意的若干问题事项
容易混淆的两个注意事项:
a. 正则表达式应用非常广泛,存在于各种语言中。例如:php, python,java等。但是,我们今天将的是Linux系统运维工作中的正则表达式。即Linux正则表达式,最常应用正则表达式的命令就是
grep (egrep),sed,awk换句话说Linux三剑客要想能工作的更高效,那一定离不开正则表达式配合的。
b. 正则表达式和我们常用的通配符特殊字符是有本质区别的。
例子: ls *.log这里的*就是通配符(表示所有),正则表达式的*表示。重复前面的一个字符的0次或多次。
注意事项:
a. linux正则一般以行为单位匹配处理。
b. alias grep = 'grep --color = auto',讲课是以grep为例(可以看到匹配颜色)
c. 注意字符集: (export LC_ALL=C)
我们要想玩好三剑客,首先就要掌握正则表达式 (找大量例子练习),Linux里正则表达式,主要是awk,sed,grep(egrep)三剑客的正则表达式。
40. Linux基础正则表达式实战讲解1
实战准备:
- 调整别名 : # alias grep = 'grep --color = auto'
2. 注意字符集可能带来的问题: # export LC_ALL = C
基础正则表达式
a. ^word 搜索以word开头的。 vi ^一行的开头
b. word$ 搜索以word结尾的。 vi $一行的开头
c. ^$ 表示空行,能理解么?
例: # grep "^m" a.txt (过滤以m开头的整行)
# grep "m$" a.txt (过滤以m结尾的整行)
# grep -v "^$" a.txt (过滤(去掉)空行所剩下的内容)
41. Linux基础正则表达式实战讲解2
d. . 点代表且只能代表任意一个字符。
e. \ 例\.就代表点本身,转义符号,让有着特殊身份意义的字符脱掉马甲,还原原型。
f. * 例0*重复0个或多个前面的一个字符。
g. .* 匹配所有字符。延伸^.*以任意多个字符开头。*¥ 以任意多个字符结尾。
例: # grep "." a.txt (匹配所有内容,空行除外)
# grep ".*" a.txt (匹配所有内容,包括空行)
# grep "raymo.d" raymond.txt (匹配raymo.d,点号代表任一字符)
# grep "\.$" raymond.txt (匹配以点(.)结尾的行的内容)
# grep "0* " raymond.txt (匹配以0开头的相同的字符串)
42. Linux 基础正则表达式实战讲解3
h. [abc] 匹配字符集合内的任意一个字符[a-z A-Z],[0-9]
i. [^abc] 匹配不包含^后的任意字符的内容,中括号例^为取反,注意和...开头区别。
j. a\{n,m\}重复n到m次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线。
\{n,\}重复至少n次,前一个重复的字符。如果用egrep/sed -r 可以去掉斜线。
注意:egrep或sed -r 过滤一般特殊字符可以不转义。
43. Linux核心命令grep多个参数总结
grep一般常用参数:
-a: 在二进制文件中,以文本文件的方式搜索数据。
-c: 计算找到 ‘搜索字符串’ 的次数。
-o: 反显示出匹配regxp的内容(用于统计出现在文中的次数)
-i : 忽略大小写的不同,所以大小写视为相同 *****
-n: 在行首显示行号 *****
-v: 反向选择,即显示没有‘搜索字符串’ 内容的那一行 *****
-E: 扩展的grep,即egrep *****
--color=auto : 以特定颜色高亮显示匹配关键字 ***
提示: -i , -v为常用参数
-A: After的意思,显示匹配字符串及其后几行的数据。
-B: Before的意思,显示匹配字符串及其前几行的数据。
-C: 显示匹配字符串及其前后各num 行。
44. 企业生产场景sed配合正则应用案例1
例:#ifconfig eth0 (取命令所打印出来的IP地址)
解答:1. #ifconfig eth0 | sed -n 'ip' | sed -r ' s# .*addr:##g ' | sed ' s#Bc.*$##g '
2. # ifconfig eth0 | sed -n 'ip' | sed ' s#^.*dr: ##g ' | sed ' s#B.*$##g '
45. 企业生产场景sed配合正则应用案例2
以44节例题为例 (取命令ifconfig eth0 打印内容中的IP字符串)
解答:a. # ifconfig eth0 | sed -n 'ip' | sed -r ' s#^.*dr:(.*) Bc.*$#\1#g '
b. # ifconfig eth0 | sed -nr ' 2s#^.*dr:(.*) Bc.*¥#、1#gP '