[步骤] Linux Kdump 的开启 (临时版)

步骤一:理解 Kdump 的作用

开启 core dump 之后,如果出现了 C 语言程序的 crash,则会将 crash 的结果记录到一个文件里

步骤二:临时开启 Kdump

2.1 设置可生成 Kdump 大小的参数

2.1.1 显示当前允许生成 Kdump 的大小
# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31722
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31722
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
2.1.2 将允许生成 Kdump 大小的参数设置为无限大
# ulimit -c unlimited
2.1.3 确认修改结果
# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31722
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31722
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2.2 设置 Kdump 生成的位置

# sysctl -w kernel.core_pattern=/tmp/corefile/core-%e-%p

步骤三:此时如果有 C 语言的程序 crash 了,则会被自动记录

[命令] Linux 命令 grep (显示文本的行)

案例一:grep 使用 perl 正则表达式匹配的案例

4.1 匹配以某内容开头的行

# grep -P '^root' /etc/passwd

或者:

# grep --perl-regexp '^root' /etc/passwd

(补充:这里以匹配 /etc/passwd 文件里开头为 root 的行为例)

4.2 匹配包含任意多个空格 “ ” 的行

# grep -P 'name\\s*=\\s*mingyuzhu' test.txt

或者:

# grep --perl-regexp 'name\\s*=\\s*mingyuzhu' test.txt

(补充:这里以在 test.txt 文件里匹配包含内容 name=mingyuzhu 的行,等号 “=” 两边可以有任意多个空格 “ ” 为例)

4.3 匹配美元 “$” 符号

# grep -rE "^\\\$InputTCPServerRun" /etc/rsyslog.conf

(补充:这里以在 /etc/rsyslog.conf 文件里匹配包含内容以内容 $InputTCPServerRun 开头的行为例)

(注意:匹配美元 “$” 符号时需要前面有 3 个斜杠 “\”)

4.4 任意内容出现后则匹配

# grep -rEi "(mingyuzhu|zhumingyu)?"  test.txt

(补充:这里以在 test.txt 文件里匹配出现内容 mingyuzhu 或内容 zhumingyu 的行为例)

案例二:grep 使用正则表达式匹配的案例

# grep -e '^root' /etc/passwd

或者:

# grep --regexp=PATTERN '^root' /etc/passwd

(补充:这里以匹配 /etc/passwd 文件中开头为 root 的行为例)

案例三:grep 使用扩展正则表达式匹配的案例

3.1 grep 使用扩展正则表达式匹配的格式的案例

# grep -E '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# grep -P '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# grep --extended-regexp '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行为例)

3.2 grep 使用扩展正则表达式匹配的案例

3.2.1 查找某个字符串前面的内容 (正则表达式: ?=)
# ip route get 127.0.0.1
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 
    cache <local> 
# ip route get 127.0.0.1 | grep -P '\d+\.\d+\.\d+\.\d+(?= dev)'
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001

(补充:这里以匹配字符串 ‘ dev’ (dev 前面有 1 个空格) 前面的 IP 地址为例)

(注意:这里匹配到的是第 1 个 127.0.0.1)

3.2.2 查找某个字符串后面的内容 (正则表达式: ?<=)
# ip route get 127.0.0.1
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 
    cache <local> 
# ip route get 127.0.0.1 | grep -Po '(?<=dev )\S+'
lo

(补充:这里以匹配字符串 ‘dev ‘ (dev 后面有 1 个空格) 后面任意多个非空字符为例)

3.2.3 匹配前面不是某个内容的字符串 (正则表达式: ?<!)
# ip route get 127.0.0.1
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 
    cache <local> 
ip route get 127.0.0.1 | grep -P '(?<!local )127.0.0.1'
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 

(补充:这里以匹配前面不是 ‘local ‘ (local 后面有 1 个空格) 的 127.0.0.1 为例)

(注意:这里匹配到的是第 2 个 127.0.0.1)

3.2.4 匹配后面不是某个内容的字符串 (正则表达式: ?!)
# ip route get 127.0.0.1
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 
    cache <local> 
# ip route get 127.0.0.1 | grep -P '127.0.0.1(?! dev)'
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 

(补充:这里以匹配后面不是 ‘ dev’ (dev 前面有 1 个空格) 的 127.0.0.1 为例)

(注意:这里匹配到的是第 2 个 127.0.0.1)

案例四:grep 显示行号的案例

4.1 显示某些关键字所在行行号的案例

# egrep -n '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep --line-number '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep --line-buffered '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并显示行号为例)

4.2 显示哪些行号是空行的案例

# egrep -n ^$ /etc/resolv.conf

或者:

# egrep --line-number ^$ /etc/resolv.conf

或者:

# egrep --line-buffered ^$ /etc/resolv.conf

(补充:这里以匹配 /etc/resolv.conf 里的空行并显示行号为例)

案例五:grep 取反匹配的案例

5.1 取反不匹配某些关键字的案例

# egrep -v '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep --invert-match '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里不含有 IP 地址的行并显示行号为例)

5.2 取反不显示空行的案例

# egrep -v ^$ /etc/resolve.conf

或者:

# egrep --invert-match ^$ /etc/resolve.conf

(补充:这里以匹配 /etc/resolve.conf 文件里不为空的行为例)

5.3 取反不显示以井号 “#” 开头的行的案例

# grep '^[^#]' /etc/resolve.conf

(补充:这里以匹配 /etc/resolve.conf 文件里不以井号 “#” 开头的行为例)

5.4 取反不显示以井号 “#” 或空格 “ ” 开头的行的案例

# grep '^[^#| ]' /etc/resolve.conf

(补充:这里以匹配 /etc/resolve.conf 文件里不以井号 “#” 和空格 “ ” 开头的行为例)

案例六:grep 只显示匹配的部分的案例

# egrep -o '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep --only-matching '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 里的 IP 地址为例)

(注意:这里匹配后只显示 IP 地址,而不显示 IP 地址所在行里的其他内容)

案例七:grep 匹配时忽略大小写的案例

# egrep -i '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep --ignore-case '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并忽略大小写为例)

案例八:grep 统计匹配成功次数的案例

# egrep -c '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

或者:

# egrep --count '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行的数量为例)

案例九:grep 将匹配成功的部分自动添加颜色的案例

# egrep --color=auto '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并自动添加颜色为例)

案例十:grep 将匹配成功的部分自动取消颜色的案例

# egrep --color=no '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192  

(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并取消自动添加颜色为例)

案例十一:grep 1 次匹配多个参数的案例

# grep -e root -e zhumingyu /etc/passwd

(补充:这里以匹配 /etc/passwd 文件中包含 root 或 zhumingyu 的行为例)

案例十二:grep 显示匹配内容附近的内容的案例

12.1 显示匹配内容的前 10 行的案例

# grep -a 10 eternalcenter test.txt

或者:

# grep --text 10 eternalcenter test.txt

(补充:这里以匹配 test.txt 文件中包含 eternalcenter 的行并显示其前 10 行为例)

12.2 显示匹配内容的后 10 行的案例

# grep -b 10 eternalcenter test.txt

或者:

# grep --byte-offset 10 eternalcenter test.txt

(补充:这里以匹配 test.txt 文件中包含 eternalcenter 的行并显示其后 10 行为例)

12.3 显示匹配内容的前后 10 行的案例

# grep -a -b 10 eternalcenter test.txt

或者:

# grep --text --byte-offset 10 eternalcenter test.txt

(补充:这里以匹配 test.txt 文件中包含 eternalcenter 的行并显示其前后 10 行为例)

案例十三:grep 安静匹配的案例

# grep -q root /etc/passwd

或者:

# grep --quiet root /etc/passwd

或者:

# grep --silent root /etc/passwd
# echo $?
0


补充:
1) 这种方法主要用于在 Shell 脚本中,随后使用 if 判断判断匹配是否成功
2) 这里以匹配 /etc/passwd 中是否包含 root 用户为例

案例十四:匹配比较难匹配的特殊字符

14.1 匹配金钱 “$” 符号

# grep -rE "^\\\$InputTCPServerRun" /etc/rsyslog.conf /etc/rsyslog.d/*

(补充:这里以在 /etc/rsyslog.conf 文件和 /etc/rsyslog.d/* 文件里匹配以$InputTCPServerRun 内容开头的行为例)

14.2 匹配 2 个横向 “–”

# grep -R -- '--autologin' test.txt 

(补充:这里以在 test.txt 文件里匹配包含 –autologin 内容的行为例)

[内容] Linux 日志消息优先级简介

内容一:系统日志的存放路径

/var/log/messages

内容二:显示系统对应优先级的日志的方法

# grep -i <priority> /var/log/messages

内容三:显示系统对应优先级的日志的案例

# cat /var/log/messages | egrep -iv "Interrup|deferred|override|sealert|erratum"  | egrep -i "EMERG|ALERT|CRIT|ERR"

内容四:日志消息的优先级

级别关键字描述 内容
0 EMERG 致命级 (KERN_EMESG) 紧急,系统本身已经无法再运行必须马上拯救
1 ALERT 警戒级 (KERN_ALERT) 警报,系统出现了重大错误必须马上处理的情况
2 CRIT 临界级 (KERN_CRIT) 严重,系统出现了严重的情况
3ERR 错误级 (KERN_ERR) 错误,系统出现了错误的情况
4 WARNING告警级 (KERN_WARN) 警告,系统出现了需要警告的情况
5 NOTICE 注意级 (KERN_NOTICE) 注意,系统出现了需要注意的情况
6 INFO 通知级 (KERN_INFO) 信息,系统出现了一些情况
7 DEBUG 调试级 (KERN_DEGUG) 调试,系统出现了程序或服务调试的情况

(注意:优先级是按照从紧急到无所谓的顺序进行排列的)

[命令] Linux 命令 journalctl (显示日志)

内容一:journalctl 日志工具的常用用法

1.1 显示包含某 1 个服务名的关键字的日志

# journalctl | grep <server name keywords>

1.2 显示某 1 个服务某 1 个优先级的日志

# journalctl -u <service> -p <priority>

或者:

# journalctl --unit <service> --priority <priority>

1.3 显示某 1 个编号的日志

# journalctl -n <number of messages>

或者:

# journalctl --lines <number of messages>

1.4 显示从某 1 个日期开始到某 1 个日期结束的日志

# journalctl -S="<yyyy-mm-dd> <HH:MM:SS>" -U="<yyyy-mm-dd> <HH:MM:SS>"

或者:

# journalctl --since="<yyyy-mm-dd> <HH:MM:SS>" --until="<yyyy-mm-dd> <HH:MM:SS>"

内容二:journalctl 日志工具的使用案例

2.1 案例一:显示最近 5 条重要程度在 ERR 及以上的日志信息

# journalctl -p err -n 5

或者:

# journalctl --priority err --lines 5

2.2 案例二:显示所有与服务 httpd 相关的日志信息

# journalctl -u httpd

或者:

# journalctl --unit=UNIT httpd

2.3 案例三:显示所有于 root 用户相关的日志

# journalctl -u root

或者:

# journalctl --user-unit root

或者:

# journalctl _UID=0

2.4 案例四:显示前 5 个小时内的日志信息

# journalctl -S "2019-05-01 14:00" -U "2019-05-01 19:00"

或者:

# journalctl --since "2019-05-01 14:00" --until "2019-05-01 19:00"

2.5 案例五:显示 boot 日志,并在有解释的地方显示解释

# journalctl -bx

或者:

# journalctl --boot --catalog

2.6 案例六:显示内核日志

# journalctl -k

或者:

# journalctl --dmesg

2.7 案例七:显示日志,按页显示,并在有解释的地方显示解释

# journalctl -ex

或者:

# journalctl --pager-end --catalog

2.8 案例八:持续显示日志

# journalctl -f

或者:

# journalctl --follow

2.9 案例九:按时间反序显示日志

# journalctl -r

或者:

# journalctl --reverse