sre工程师第二周

1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。

文本处理工具

cat:

cat [OPTION]... [FILE]...

-E:显示行结束符$
-A:显示所有控制符
-n:对显示出的每一行进行编号
-b:非空行编号
-s:压缩连续的空行成一行

nl:
显示行号,相当于 cat -b
tac :
逆向显示文本内容
rev:
将同一行的内容逆向显示

分页查看文件内容

more
​
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
​
less
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配

显示文本前面或后面的行内容

head [OPTION]... [FILE]...
​
-c # 指定获取前#字节
-n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
-# 同上
​
tail [OPTION]... [FILE]...
​
-c # 指定获取后#字节
-n # 指定获取后#行,如果#是负数,表示从第#行开始到文件结束
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新
建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文
件
tailf 类似 tail –f,当文件不增长时并不访问文件,节约资源,CentOS8已经无此工具

按列抽取文本cut

cut [OPTION]... [FILE]...
​
-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
     #: 第#个字段,例如:3
     #,#[,#]:离散的多个字段,例如:1,3,6
     #-#:连续的多个字段, 例如:1-6
     混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符

合并多个文件paste

paste [OPTION]... [FILE]...
​
-d  #分隔符:指定分隔符,默认用TAB
-s  #所有行合成一行显示

分析文本的工具

文本数据统计:wc
整理文本:sort
比较文件:diff和patch
收集文本统计数据 wc
wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数
可以对文件或STDIN中的数据统计
​
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

文本排序 sort
把整理过的文本显示在STDOUT,不改变原始文件
​
sort [options] file(s)
​
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-h 人类可读排序,如: 2K 1G 
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique),合并重复项,即去重
-t c 选项使用c做为字段界定符
-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次

去重uniq
uniq命令从输入中删除前后相接的重复的行
​
uniq [OPTION]... [FILE]...
​
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行

比较文件
diff 命令比较两个文件之间的区别
-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

patch
patch 复制在其它文件中进行的改变(要谨慎使用)
​
-b 选项来自动备份改变了的文件
vimdiff
相当于 vim -d

文本处理三剑客之 grep

grep [OPTIONS] PATTERN [FILE...]
​
--color=auto 对匹配到的文本着色显示
-m  # 匹配#次后停止
-v 显示不被pattern匹配到的行,即取反
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 不支持正则表达式,相当于fgrep
-P 支持Perl格式的正则表达式
-f file 根据模式文件处理
-r   递归目录,但不处理软链接
-R   递归目录,但处理软链接

文本处理三剑客之 sed

sed [option]... 'script;script;...' [inputfile...]
​
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
-s           将多个文件视为独立文件,而不是单个连续的长文件流
#说明: 
-ir   不支持
-i -r 支持
-ri   支持
-ni   危险选项,会清空文件

sed 高级用法

P 打印模式空间开端至\n内容,并追加到默认输出之前
h 把模式空间中的内容覆盖至保持空间中
H 把模式空间中的内容追加至保持空间中
g 从保持空间取出数据覆盖至模式空间
G 从保持空间取出内容追加至模式空间
x 把模式空间中的内容与保持空间中的内容进行互换
n 读取匹配到的行的下一行覆盖至模式空间
N 读取匹配到的行的下一行追加至模式空间
d 删除模式空间中的行
D 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

文本处理三剑客之 awk

格式:

awk [options]   'program' var = value   file…
awk [options]   -f programfile     var = value file…
常见选项:
-F “ 分隔符 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
-v var=value 变量赋值
动作 printf
printf 可以实现格式化输出
格式:
printf “FORMAT”, item1, item2, ...
说明:
必须指定 FORMAT
不会自动换行,需要显式给出换行控制符 \n
FORMAT 中需要分别为后面每个 item 指定格式符

格式符:与item一一对应

%s :显示字符串
%d, %i :显示十进制整数
%f :显示为浮点数
%e, %E :显示科学计数法数值
%c :显示字符的 ASCII
%g, %G :以科学计数法或浮点形式显示数值
%u :无符号整数
%% :显示 % 自身
修饰符
#[.#] 第一个数字控制显示的宽度;第二个 # 表示小数点后精度,如: %3.1f
- 左对齐(默认右对齐) 如: %-15s
+   显示数值的正负符号   如: % + d


2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。

基本正则表达式

通配符

.   匹配任意单个字符 ( 除了 \n) ,可以是一个汉字或其它国家的文字
[]   匹配指定范围内的任意单个字符,示例: [wang]   [0-9]   [a-z]   [a-zA-Z]
[^] 匹配指定范围外的任意单个字符 , 示例: [^wang]
[: alnum:] 字母和数字
[: alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[: lower:] 小写字母 , 示例 :[[:lower:]], 相当于 [a-z]
[: upper:] 大写字母
[: blank:] 空白字符(空格和制表符)
[: space:] 包括空格、制表符 ( 水平和垂直 ) 、换行符、回车符等各种类型的空白 , [:blank:] 包含的范围广
[: cntrl:] 不可打印的控制字符(退格、删除、警铃 ...
[: digit:] 十进制数字
[: xdigit:] 十六进制数字
[: graph:] 可打印的非空白字符
[: print:] 可打印字符
[: punct:] 标点符号
\s     # 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\r\t\v] 。注意 Unicode正则表达式会匹配全角空格符
\S     # 匹配任何非空白字符。等价于 [^\f\r\t\v]
\w # 匹配一个字母 , 数字 , 下划线 , 汉字 , 其它国家文字的字符,等价于 [_[: alnum:] ]
\W # 匹配一个非字母 , 数字 , 下划线 , 汉字 , 其它国家文字的字符,等价于 [^_[: alnum:] ]

匹配次数

* # 匹配前面的字符任意次,包括 0 次,贪婪模式:尽可能长的匹配
.* # 任意长度的任意字符
\? # 匹配其前面的字符出现 0 次或 1 , : 可有可无
\+ # 匹配其前面的字符出现最少 1 , : 肯定有且 >=1
\{n\} # 匹配前面的字符 n
\{m,n\} # 匹配前面的字符至少 m 次,至多 n
\{,n\}   # 匹配前面的字符至多 n ,<=n
\{n,\}   # 匹配前面的字符至少 n

位置锚定

^ # 行首锚定 , 用于模式的最左侧
$ # 行尾锚定,用于模式的最右侧
^PATTERN $ # 用于模式匹配整行
^ $ # 空行
^[[:space:]]* $ # 空白行
\< \b   # 词首锚定,用于单词模式的左侧
\> \b         # 词尾锚定,用于单词模式的右侧
\<PATTERN\>     # 匹配整个单词
# 注意 : 单词是由字母 , 数字 , 下划线组成

分组

分组: () 将多个字符捆绑在一起,当作一个整体处理,如: \(root\)+
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名
方式为 : \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
注意 : \0 表示正则表达式匹配的所有字符

或者

或者: \|

扩展正则表达式

通配符

. 任意单个字符
[wang] 指定范围的字符
[^wang] 不在指定范围的字符
[: alnum:] 字母和数字
[: alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[: lower:] 小写字母 , 示例 :[[:lower:]], 相当于 [a-z]
[: upper:] 大写字母
[: blank:] 空白字符(空格和制表符)
[: space:] 水平和垂直的空白字符(比 [:blank:] 包含的范围广)
[: cntrl:] 不可打印的控制字符(退格、删除、警铃 ...
[: digit:] 十进制数字
[: xdigit:] 十六进制数字
[: graph:] 可打印的非空白字符
[: print:] 可打印字符
[: punct:] 标点符号

次数匹配

*   匹配前面字符任意次
? 0 1
+ 1 次或多次
{n} 匹配 n
{m,n} 至少 m ,至多 n

位置锚定

^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾

分组其他

() 分组
后向引用: \1, \2, ... 注意 : \0 表示正则表达式匹配的所有字符
| 或者
a|b #a b
C|cat #C cat
(C|c)at #Cat cat


3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。

变量命名规则:

命名要求:

区分大小写
不能使程序中的保留字和内置变量:如: if, for
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ” ,和主机名相反

命名习惯:

见名知义,用英文单词命名,并体现出实际作用,不要用简写,如: ATM
变量名大写
局部变量小写
函数名小写
大驼峰 StudentFirstName, 由多个单词组成,且每个单词的首字母是大写,其它小写
小驼峰 studentFirstName , 由多个单词组成,第一个单词的首字母小写,后续每个单词的首字母是
大写,其它小写
下划线 : student_name

变量定义和引用:

普通变量:生效范围为当前 shell 进程;对当前 shell 之外的其它 shell 进程,包括当前 shell 的子 shell
进程均无效
环境变量:生效范围为当前 shell 进程及其子进程
本地变量:生效范围为当前 shell 进程中某代码片断,通常指函数
变量赋值:
name='value'
value 可以是以下多种形式
直接字串: name='root'
变量引用: name="$USER"
命令引用: name=`COMMAND` 或者 name=$(COMMAND)
变量引用:
$name
${name}  
"$name" 弱引用,其中的变量引用会被替换为变量值
'$name' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串

不同类型变量的使用方法:

环境变量:

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
一般只在系统配置文件中使用,在脚本中较少使用
变量声明和赋值:
# 声明并赋值
export name = VALUE
declare -x name = VALUE
# 或者分两步实现
name = VALUE
export name

变量引用:

$name
${name}
显示所有环境变量:
env
printenv
export
declare -x
查看指定进程的环境变量
cat /proc/ $PID /environ

删除变量:
unset name

只读变量:

只读变量:只能声明定义,但后续不能修改和删除,即常量
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly [-p]
declare -r

位置变量:

位置变量:在 bash shell 中内置的变量 , 在脚本代码中调用通过命令行传递给脚本的参数
$1 , $2 , ... 对应第 1 个、第 2 个等参数, shift [n] 换位置
$0 命令本身 , 包括路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
注意: $@ $* 只在被双引号包起来的时候才会有差异
清空所有位置变量
set --
状态变量
进程执行后,将使用变量 $? 保存状态码的相关数字,不同的值反应成功或失败, $? 取值范例 0-255
$? 的值为 0 # 代表成功
$? 的值是 1 255   # 代表失败


4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?


5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。


6. 磁盘存储术语总结: head, track, sector, sylinder.

1. Head(磁头):磁盘驱动器上的读写装置,用于在磁盘表面上读取和写入数据。通常,每个盘片上都有一个磁头,而多盘片的磁盘驱动器会有多个磁头。

2. Track(磁道):磁盘表面上的一个圆形轨道,由磁头沿着其半径运动以读取或写入数据。磁道通常被划分为多个扇区。

3. Sector(扇区):磁道上的一个小的数据存储单元,通常是一个物理数据块的最小单元。扇区是磁盘上的最小可寻址存储单位,通常为512字节或4KB。

4. Cylinder(柱面):多个磁道在多个盘片上相同位置的集合,形成一个立体的圆柱状区域。磁盘驱动器的磁头会同时移动到同一柱面上的不同磁道以提高读写效率。


7. 总结MBR,GPT结构。

MBR:

1. 分区表格式:MBR使用传统的分区表格式,它将硬盘分成四个主要分区,或者使用扩展分区来支持更多分区,但存在一些限制。

2. 引导信息:MBR中的第一个扇区(512字节)用于存储引导代码和分区表。这个引导代码通常由操作系统的引导加载程序占用。

3. 兼容性:MBR在旧的计算机系统上广泛使用,但存在一些限制,如每个磁盘最多支持四个主分区,或者三个主分区和一个扩展分区。

GPT:

1. 分区表格式:GPT使用一种更现代的分区表格式,它能够支持更大的硬盘容量,并允许更多分区。它不受主分区和扩展分区的限制。

2. 引导信息:GPT的引导信息存储在硬盘的起始和结尾部分,而不像MBR放在第一个扇区,这提高了数据安全性。

3. 兼容性:GPT适用于新一代计算机系统,特别是支持UEFI(统一可扩展固件接口)的系统。它不受MBR的容量和分区数限制。


8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff

1.fdisk:用于分区管理的命令。
-l:列出磁盘上的分区。
示例:fdisk -l /dev/sda

2.parted:用于分区管理的命令,提供更多高级选项。
mklabel:创建新的分区表。
示例:parted /dev/sda mklabel gpt

3.mkfs:用于创建文件系统。
-t:指定文件系统类型(如ext4、xfs等)
示例:mkfs -t ext4 /dev/sda1

4.tune2fs:用于调整ext文件系统的参数
-L:设置卷标。
示例:tune2fs -L mylabel /dev/sda1

5.xfs_info:用于获取XFS文件系统的信息。
无选项,直接运行以查看文件系统信息。
示例:xfs_info /dev/sda1

6.fsck:用于检查和修复文件系统错误。
-a:自动修复错误。
示例:fsck -a /dev/sda1

7.mount:用于挂载文件系统。
-t:指定文件系统类型。
示例:mount -t ext4 /dev/sda1 /mnt/mydata

8.umount:用于卸载已挂载的文件系统。
示例:umount /mnt/mydata

9.swapon:用于启用交换分区。
示例:swapon /dev/sdb1

10.swapoff:用于禁用交换分区。
示例:swapoff /dev/sdb1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非自然降水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值