文章目录
- 1. 磁盘空间不足-排查流程
- 2. 李导推荐书籍
- 2.1 大话存储
- 2.2 性能之巅
- 3. 特殊符号
- 3.1 引号系列(面试题)
- 3.2 重定向符号
- 3.2.1 cat与重定向
- 3.2.2 tr命令:替换字符
- 3.2.3 xargs:参数转换
- 3.2.4 标准全量追加重定向
- 4. 正则表达式
- 4.1 基础正则
- 4.1.1 测试文件
- 4.1.2 查找以I开头的行
- 4.1.3 查找以m结尾的行
- 4.1.4 查找非空行
- 4.1.5 排除sshd配置文件中空行和以#开头的行
- 4.1.6 过滤出以I开头以!结尾的行
- 4.1.7 过滤出含有大写字符的行
- 4.1.8 过滤出含有大写字符或数字的行
- 4.1.9 过滤出文件中以I或m或n开头的并且以!或数字结尾的行
- 4.1.10 过滤出以.结尾的行
- 4.2 扩展正则
- 4.2.1 查询sshd或rsyslog进程
- 4.2.2 统计文件中单词次数,取出前5
- 4.2.3 统计文件中字母次数,取出前5
- 4.2.4 过滤最少有3个最多有5个连续数字的行
- 4.2.5 小括号():表示一个整体
- 5. awk和正则
- 5.1 取出passwd文件中第1、2列和最后一列
- 5.2 取出ip a命令中的ip地址
- 5.3 获取文件中系统的运行时间
- 5.4 awk取行
- 6. 思维导图
1. 磁盘空间不足-排查流程
2. 李导推荐书籍
2.1 大话存储
2.2 性能之巅
3. 特殊符号
3.1 引号系列(面试题)
引号 | 说明 |
---|---|
反引号 | 执行命令 |
单引号 | 所见即所得。单引号中的内容不会被解析,直接进行输出。 |
双引号 | 一些特殊符号会被解析:``,$(),$…… |
不加引号 | 特殊符号会被解析,额外支持{}、*通配符 |
3.2 重定向符号
重定向符号 | 说名 | 使用 |
---|---|---|
>或1> | 标准输出重定向 | 创建文件并写入内容 |
>>或1>> | 标准输出追加重定向 | 修改配置文件 |
2> | 标准错误输出重定向 | 较少单独使用 |
2>> | 标准错误输出追加重定向 | 较少单独使用 |
>>oldboy.log 2>&1; &>>oldboy.log | 正确输出和错误输出都写入到同一个文件 | 运行脚本或命令时经常使用 |
<或0< | 标准输入重定向,与特定命令使用,读取文件内容:tr、xargs | 其他命令几乎不会用 |
<<或0<< | 标准输入追加重定向,cat命令向文件中批量写入多行内容 | cat常用 |
3.2.1 cat与重定向
- cat命令写文件
- EOF为标识符标识内容的结束,用其他符号也行。
3.2.2 tr命令:替换字符
[root@oldboy99-Kylin /oldboy]# cat w.txt 16:26:42 up 83 days, 7:42, 1 user, load average: 0.00, 0.00, 0.0007:05:48 up 18:42, 2 users, load average: 0.01, 0.01, 0.00
[root@oldboy99-Kylin /oldboy]# tr 'a-z' 'A-Z' < w.txt 16:26:42 UP 83 DAYS, 7:42, 1 USER, LOAD AVERAGE: 0.00, 0.00, 0.0007:05:48 UP 18:42, 2 USERS, LOAD AVERAGE: 0.01, 0.01, 0.00
- tr接受标准输入的数据,将数据中的小写字符都替换成本大写字符
3.2.3 xargs:参数转换
- xargs的作用:从标准输入接受多个参数并转换成多行
- seq num:形成一列的序列数字
[root@oldboy99-Kylin /oldboy]# seq 10 > num.txt
[root@oldboy99-Kylin /oldboy]# cat num.txt
1
2
3
4
5
6
7
8
9
10
[root@oldboy99-Kylin /oldboy]# xargs -n 3 < num.txt
1 2 3
4 5 6
7 8 9
10
3.2.4 标准全量追加重定向
- >>oldboy.log 2>&1
- &>>oldboy.log
[root@oldboy99-Kylin /oldboy]# echo skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo1 skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo1 skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# echo1 skx >> oldboy.log 2>&1
[root@oldboy99-Kylin /oldboy]# cat oldboy.log
skx
skx
skx
-bash: echo1: command not found
-bash: echo1: command not found
-bash: echo1: command not found
4. 正则表达式
正则表达式:regular expression,对字符进行查找或过滤。
正则表达式 | 符号 | 命令 |
---|---|---|
基础正则 | ^、&、.、*、[] | grep、sed、awk |
扩展正则 | |、+、{}、()、? | egrep/grep -E、sed -r、awk |
4.1 基础正则
4.1.1 测试文件
cat >/oldboy/re.txt<<EOF
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and
chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF
4.1.2 查找以I开头的行
[root@oldboy99-Kylin /oldboy]# grep '^I' re.txt -n
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
4.1.3 查找以m结尾的行
- 文件中以m结尾的行最后还有空格
- cat -A:显示文件中的隐藏字符
[root@oldboy99-Kylin /oldboy]# cat -A re.txt
I am oldboy teacher!$
I teach linux.$
$
I like badminton ball ,billiard ball and chinese chess!$
my blog is http://oldboy.blog.51cto.com $
our size is http://blog.oldboyedu.com $
$
my qq is 49000448$
not 4900000448.$
$
my god ,i am not oldbey,but OLDBOY!$
[root@oldboy99-Kylin /oldboy]# grep 'm $' re.txt
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
4.1.4 查找非空行
- ^$:表示过滤空行
[root@oldboy99-Kylin /oldboy]# grep -vn '^$' re.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
6:our size is http://blog.oldboyedu.com
8:my qq is 49000448
9:not 4900000448.
11:my god ,i am not oldbey,but OLDBOY!
4.1.5 排除sshd配置文件中空行和以#开头的行
grep -Evn '^$|^#' /etc/ssh/sshd_config
4.1.6 过滤出以I开头以!结尾的行
- .:表示任意字符
- *:表示前一个字符出现0次或多次
[root@oldboy99-Kylin /oldboy]# grep '^I.*!$' re.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
4.1.7 过滤出含有大写字符的行
[root@oldboy99-Kylin /oldboy]# grep -n '[A-Z]' re.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
11:my god ,i am not oldbey,but OLDBOY!
4.1.8 过滤出含有大写字符或数字的行
[root@oldboy99-Kylin /oldboy]# grep -n '[A-Z0-9]' re.txt
1:I am oldboy teacher!
2:I teach linux.
4:I like badminton ball ,billiard ball and chinese chess!
5:my blog is http://oldboy.blog.51cto.com
8:my qq is 49000448
9:not 4900000448.
11:my god ,i am not oldbey,but OLDBOY!
4.1.9 过滤出文件中以I或m或n开头的并且以!或数字结尾的行
[root@oldboy99-Kylin /oldboy]# grep '^[Imn].*[0-9!]$' re.txt
I am oldboy teacher!
I like badminton ball ,billiard ball and chinese chess!
my qq is 49000448
my god ,i am not oldbey,but OLDBOY!
4.1.10 过滤出以.结尾的行
[root@oldboy99-Kylin /oldboy]# grep -n '\.$' re.txt
2:I teach linux.
9:not 4900000448.
####################################################
[root@oldboy99-Kylin /oldboy]# grep -n '[.]$' re.txt
2:I teach linux.
9:not 4900000448.
4.2 扩展正则
4.2.1 查询sshd或rsyslog进程
[root@oldboy99-Kylin /oldboy]# ps -ef |grep -E '[s]shd|[r]syslog'
root 866 1 0 08:27 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 908 1 0 08:27 ? 00:00:01 /usr/sbin/rsyslogd -n -i/var/run/rsyslogd.pid
root 1670 866 0 09:55 ? 00:00:00 sshd: root [priv]
root 1696 1670 0 09:55 ? 00:00:00 sshd: root@pts/0
4.2.2 统计文件中单词次数,取出前5
- +:前一个字符出现一次或多次
- -o:输出匹配的字符
[root@oldboy99-Kylin /oldboy]# grep -Eo '[a-zA-Z]+' re.txt |sort |uniq -c |sort -k1nr |head -53 blog3 I3 is3 my2 am
4.2.3 统计文件中字母次数,取出前5
[root@oldboy99-Kylin /oldboy]# grep -Eo '[a-zA-Z]' re.txt |sort |uniq -c |sort -k1nr |head -518 o15 l12 b11 i11 t
4.2.4 过滤最少有3个最多有5个连续数字的行
[root@oldboy99-Kylin /oldboy]# grep -E '[0-9]{3,5}' re.txt
my qq is 49000448
not 4900000448.
4.2.5 小括号():表示一个整体
[root@oldboy99-Kylin /oldboy]# lscpu |grep -E 'L(1d|1i|2|3)'
L1d cache: 32 KiB
L1i cache: 32 KiB
L2 cache: 256 KiB
L3 cache: 8 MiB
#############################################################
[root@oldboy99-Kylin /oldboy]# lscpu |grep -E 'L(1[di]|[23])'
L1d cache: 32 KiB
L1i cache: 32 KiB
L2 cache: 256 KiB
L3 cache: 8 MiB
5. awk和正则
- -F:Field Separator,字段分隔符
5.1 取出passwd文件中第1、2列和最后一列
[root@oldboy99-Kylin ~]# awk -F ':' '{print $1,$2,$NF}' /etc/passwd |head -5 |column -t
root x /bin/bash
bin x /sbin/nologin
daemon x /sbin/nologin
adm x /sbin/nologin
lp x /sbin/nologin
5.2 取出ip a命令中的ip地址
- awk按照空格或斜线作为分隔符
[root@oldboy99-Kylin ~]# ip a show ens33 |awk -F '[ /]+' 'NR==3{print $3}'
10.0.0.200
5.3 获取文件中系统的运行时间
文件内容:
cat >> w.txt <<EOF
16:26:42 up 83 days, 7:42, 1 user, load average: 0.00, 0.00, 0.00
07:05:48 up 18:42, 2 users, load average: 0.01, 0.01, 0.00
EOF
[root@oldboy99-Kylin /oldboy]# awk -F 'up +|, +[0-9]+ +user' '{print $2}' w.txt
83 days, 7:42
18:42
5.4 awk取行
- awk ‘NR==3’
- awk ‘NR>=3’
- awk ‘NR>=3&&NR<=10’
- awk ‘/匹配行的正则表达式/’ 文件名
- 在passwd文件中过滤包含root或oldboy的用户信息
[root@oldboy99-Kylin ~]# awk '/^root|^oldboy/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
oldboy:x:1000:1000::/home/oldboy:/bin/bash
6. 思维导图
【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX