1) 等级 0 关机模式
2) 等级 1 单用户模式
3) 等级 2 无网络的多用户命令行模式
4) 等级 3 有网络的多用户命令行模式
5) 等级 4 被系统保留
6) 等级 5 带图形界面的多用户模式
7) 等级 6 重启模式
[命令] 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 RPM 软件包的解压 (判断安装一个 RPM 文件之后哪些目录和文件会被创建)
内容一:RPM 简介
1) RPM 的全名是 RPM Package Manager
1) RPM 是 CentOS、RHEL、openSUSE、SUSE 的软件安装包
2) RPM 是使用 cpio 格式压缩成的包
内容二:解压 RPM 文件的方法
# rpm2cpio <文件名> | cpio -div
(补充:解压之后就可以看到如果安装这个 RPM 文件的话,有哪些目录和文件会被创建)
[命令] Linux 命令 screen (防终端断开)
内容一:创建 screen 窗口
# screen -S <screen window name>
(补充:这样会同时创建并且进入 screen 窗口中)
内容二:挂起 screen 窗口
2.1 进入 screen 窗口后或者已经在 screen 窗口中时挂起
2.1.1 进入 screen 窗口或者确保已经在 screen 窗口中
(步骤略)
2.1.2 挂起 screen 窗口
同时按下 “ctrl” 键和 “a” 键和 “d” 键
(补充:这里 d 代表的是 Detached 的意思)
2.2 直接挂起某一个 screen 窗口
# screen -d <screen window name>
内容三:显示所有存在的 screen 窗口
# screen -ls
6474.1 (Attached)
29438.2 (Detached)
(
补充:这里以显示
1) 激活状态(Attached)的 screen 窗口 1 为例
2) 挂起状态(Detached)的 screen 窗口 2 为例
)
内容四:进入已存在的 screen 窗口
4.1 进入处于挂起状态的 screen 窗口
# screen -r <screen window name>
4.2 进入处于工作状态的 screen 窗口
4.2.1 方法一:强制将这个 screen 窗口设置为挂起状态后再进入
4.2.1.1 先挂起 screen 窗口再进入 screen 窗口
4.2.1.1.1 挂起 screen 窗口
# screen -d <screen window name>
(注意:此时正在使用这个 screen 窗口的人会断开)
4.2.1.1.2 进入 screen 窗口
# screen -r <screen window name>
4.2.1.2 同时挂起 screen 窗口并进入 screen 窗口
# screen -d -r <screen window name>
(注意:此时正在使用这个 screen 窗口的人会断开)
4.2.2 方法二:共享这个 screen 窗口
# screen -x <screen window name>
内容五:删除 screen 窗口
5.1 进入 screen 窗口或者确保已经在 screen 窗口中
(步骤略)
5.2 删除 screen 窗口
# exit
内容六:给某个 screen 再创建一个窗口
6.1 进入 screen 窗口或者确保已经在 screen 窗口中
(步骤略)
6.2 给某个 screen 窗口再创建一个窗口
同时按下 “ctrl” 键和 “a” 键和 “c” 键
内容七:切换 screen 窗口
7.1 进入 screen 窗口或者确保已经在 screen 窗口中
(步骤略)
7.2 切换 screen 窗口
同时按下 “ctrl” 键和 “a” 键和 “<screen window name code>”
内容八:在进入 screen 窗口的状态下显示窗口列表
8.1 进入 screen 窗口或者确保已经在 screen 窗口中
(步骤略)
8.2 在进入 screen 窗口的状态下显示窗口列表
同时按下 “ctrl” 键和 “a” 键和 “w” 键
[步骤] CentOS Linux DNF 的使用 (通过阿里源实现)
内容一:DNF 简介
1.1 DNF 软件简介
1) 从 CentOS8&RHEL8 开始默认使用 dnf 管理软件和补丁安装
2) dnf 也是 yum v4
3) dnf 的命令参数和 yum 一样
4) dnf 软件源的配置方法和 yum 一样
1.2 DNF 软件源简介
1) BaseOS 系统和基础的软件包
2) AppStream 其余所有官方的软件包
内容二:DNF 软件源的配置案例
2.1 删除原有的软件源配置文件
# rm /etc/yum.repos.d/*.repo
2.2 配置 AppStream 库
# vim /etc/yum.repos.d/CentOS-AppStream.repo
创建以下内容:
[AppStream]
name=CentOS-$releasever - AppStream
baseurl=http://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2.3 配置 Base 库
# vim /etc/yum.repos.d/CentOS-Base.repo
创建以下内容:
[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2.4 配置 Epel 库
# vim /etc/yum.repos.d/CentOS-Epel.repo
创建以下内容:
[epel]
name=CentOS-$releasever - Epel
baseurl=http://mirrors.aliyun.com/epel/8/Everything/$basearch
enabled=1
gpgcheck=0
2.5 配置 Media 库
# vim /etc/yum.repos.d/CentOS-Media.repo
创建以下内容:
[c8-media-BaseOS]
name=CentOS-BaseOS-$releasever - Media
baseurl=file:///media/CentOS/BaseOS/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[c8-media-AppStream]
name=CentOS-AppStream-$releasever - Media
baseurl=file:///media/CentOS/AppStream/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
2.6 清除 DNF 缓存
# dnf clean all
2.7 刷新并列出 DNF 软件源列表
# dnf repolist
