[内容] Linux SELinux 标签的设置

内容一:开启 SELinux 标签

1.1 修改 SELinux 配置文件

# vim /etc/selinux/config

将以下内容:

......
SELINUX=disabled
......

修改为:

......
SELINUX=enforcing
......

或者:

......
SELINUX=perssive
......

1.2 重启系统

# reboot

内容二:SELinux 的常见特性

2.1 SELinux 特性一:创建的文件或目录会自动继承其父目录的 SELinux 标签

2.1.1 在 /var/www/html/ 目录下新创建 index.html 文件
# echo website > /var/www/html/index.html

(补充:这里以在 /var/www/html/ 目录下生成 index.html 文件为例)

2.1.2 显示 /var/www/html/ 目录的 SELinux 标签
# ls -dZ /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
2.1.3 显示新生成的 /var/www/html/index.html 标签
# ls -Z /var/www/html/index.html/index.html 
unconfined_u:object_r:httpd_sys_content_t:s0 index.html

(补充:从内容 1.1.2 和内容 1.1.3 命令的结果可以看出新生成的文件或其父目录的 SELinux 标签一致)

2.2 SELinux 特性二:移动文件或目录和保留属性复制文件或目录不会改变其 SELinux 标签,普通复制会改变 SELinux 标签

2.2.1 在 /tmp/ 目录下新创建 file1,file2,file3 文件
# touch /tmp/file{1,2,3}
2.2.2 显示 /tmp 目录的 selinux 标签
# ls -Zd /tmp
unconfined_u:object_r:user_tmp_t:s0 /tmp/
2.2.3 显示新创建文件的标签
# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1  unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
unconfined_u:object_r:user_tmp_t:s0 /tmp/file3
2.2.4 将 /tmp/file1 复制到 /var/www/html/
# cp /tmp/file1 /var/www/html/
2.2.5 将 /tmp/file2 移动到 /var/www/html/
# mv /tmp/file2 /var/www/html/
2.2.6 将 /tmp/file2 复制到 /var/www/html/,并使用 -a 选项保留文件属性
# cp -a /tmp/file3 /var/www/html/
2.2.7 显示这些文件的 SELinux 标签
# ls -Z /var/www/html/file*
unconfined_u:object_r:httpd_sys_content_t:s0 file1           unconfined_u:object_r:user_tmp_t:s0 file3
unconfined_u:object_r:user_tmp_t:s0 file2

(补充:从内容 2.2.3 和内容 2.2.7 命令的结果可以看出只有普通复制会改变 SELinux 标签 )

内容三:显示某个文件、目录或进程 SELinux 标签

3.1 显示某个文件 SELinux 标签

# ls -Z <file>

3.2 显示某个目录 SELinux 标签

# ls -Zd <directory>

3.3 显示某个进程 SELinux 标签

# ps -auxZ | grep <process>

内容四:显示所有 SELinux 标签

4.1 显示所有文件和目录的 SELinux 标签

# semanage fcontext -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.2 显示所有端口的 SELinux 标签

# semanage port -l

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

4.3 显示所有进程的 SELinux 标签

# ps -auxZ

内容五:设置 SELinux 标签

5.1 设置文件和目录 SELinux 标签

5.1.1 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.1 semanage fcontext 命令的常用选项

1) -a 添加或变更 SELinux 标签
2) -d 删除 SELinux 标签
3) -l 显示所有的 SELinux 标签
4) -t 指定上下文 SELinux 标签
5) -v 显示修改 SELinux 标签的内容
6) -R 递归设置 SELinux 标签
7) -m 变更 SELinux 标签

5.1.1.2 使用 semanage fcontext 命令和 restorecon 命令设置文件和目录的 SELinux 标签
5.1.1.2.1 使用 smanage fcontext 命令设置 SELinux 标签
# semanage fcontext -a -t httpd_sys_content_t "/tmp(/.*)?"

(补充:这里以将 /tmp(/.*) 的 SELinux 标签设置为 httpd_sys_content_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

5.1.1.2.2 使用 restorecon 命令修改默认上下文
# restorecon -Rv /tmp
Relabeled /tmp from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
5.1.2 使用 chcon 命令设置 SELinux 标签
# chcon -t httpd_sys_content_t /tmp/*

(补充:这里以将 /tmp/* 的 SELinux 标签设置为 httpd_sys_content_t 为例)

5.2 设置端口 SELinux

# semanage port -a -t http_port_t -p tcp 82

(补充:这里以将 TCP 82 端口的 SELinux 标签设置为 http_port_t 为例)

(注意:需要单独安装 policycoreutils-python-utils 后才能使用 semanage 命令)

[内容] Linux SELinux 布尔 (boolean) 值的设置

内容一:开启 SELinux 布尔(boolean)值

1.1 显示当前 SELinux 状态

# getenforce

1.2 将 SELinux 的状态设置为 Enforcing 以开启布尔(boolean)值

1.2.1 当当前 SELinux 的状态为 Disabled 时开启布尔(boolean)值的方法
1.2.1.1 修改 SELinux 配置文件
# vim /etc/selinux/config

将以下内容:

......
SELINUX=disabled
......

修改为:

......
SELINUX=enforcing
......
1.2.1.2 重启系统
# reboot
1.2.2 当当前 SELinux 的状态为 Perssive 时开启布尔(boolean)值的方法
# setenfoce 1

(补充:系统重启后失效)

内容二:显示所有 SELinux 布尔(boolean)值

# semanage boolean -l

内容三:布尔(boolean)值的管理

3.1 允许某一个 SELinux 布尔(boolean)值开启

3.1.1 临时允许某一个 SELinux 布尔(boolean)值开启
3.1.1.1 临时允许某一个 SELinux 布尔(boolean)值开启的格式
# setsebool <boolean value> 1

或者:

# setsebool <boolean value> on
3.1.1.2 临时允许某一个 SELinux 布尔(boolean)值开启的案例
# setsebool httpd_can_network_connect 1

或者:

# setsebool httpd_can_network_connect on
3.1.2 永久允许某一个 SELinux 布尔(boolean)值开启
3.1.2.1 永久允许某一个 SELinux 布尔(boolean)值开启的格式
# setsebool -P <boolean value> 1

或者:

# setsebool -P <boolean value> on
3.1.2.2 永久允许某一个 SELinux 布尔(boolean)值开启的案例
# setsebool -P httpd_can_network_connect 1

或者:

# setsebool -P httpd_can_network_connect on

3.2 取消某一个 SELinux 布尔(boolean)值开启

3.2.1 临时取消某一个 SELinux 布尔(boolean)值开启
3.2.1.1 临时取消某一个 SELinux 布尔(boolean)值开启的格式
# setsebool <boolean value> 0

或者:

# setsebool <boolean value> off
3.2.1.2 临时取消某一个 SELinux 布尔(boolean)值开启的案例
# setsebool httpd_can_network_connect 0

或者:

# setsebool httpd_can_network_connect off
3.2.2 永久取消某一个 SELinux 布尔(boolean)值关闭
3.2.2.1 永久取消某一个 SELinux 布尔(boolean)值开启的格式
# setsebool -P <boolean value> 0

或者:

# setsebool -P <boolean value> off
3.2.2.2 永久取消某一个 SELinux 布尔(boolean)值开启的案例
# setsebool -P httpd_can_network_connect 0

或者:

# setsebool -P httpd_can_network_connect off

[命令] Linux 命令 vi 和 vim (文件编辑)

内容一:vi 和 vim 简介

1.1 vi 和 vim 模式简介

1) 命令模式:主要用于对文件进行批量编辑
2) 末行模式:主要用于保存退出文件
3) 输入模式:主要用于编辑文件

1.2 使用 vi 或 vim

1.2.1 通过 vi 或 vim 打开某个文件
# vi <file>

或者:

# vim <file>

(补充:此时将自动进入命令模式)

1.2.2 通过 vi 或 vim 打开某个文件,并自动进入到某行
# vi +<line number> <file>

或者:

# vim +<line number> <file>

(补充:此时将自动进入命令模式)

内容二:vi 或 vim 在命令模式下的操作

2.1 在命令模式下让光标移动

2.1.1 在命令模式下让光标移动
2.1.1.1 在命令模式下让光标向上移动
2.1.1.1.1 在命令模式下让光标向上移动 (在行内移动)

按下 “g” 键再按下 “上方向” 键

或者:

按下 “g” 键再按下 “j” 键

(注意:此方法还可以实现让光标跨分布或跨终端移动)

2.1.1.1.2 在命令模式下让光标向上移动 (不在行内移动)

按下 “上方向” 键

或者:

按下 “k” 键

(注意:此方法还可以实现让光标跨分布或跨终端移动)

或者:

按下 “<any number>” 键再按下 “上方向” 键

(补充:此方法会向上方移动对应数字个光标位)

或者:

按下 “<any number>” 键再按下 “k” 键

(补充:此方法会向上方移动对应数字个光标位)

(注意:此方法还可以实现让光标跨分布或跨终端移动)

2.1.1.2 在命令模式下让光标向下移动
2.1.1.2.1 在命令模式下让光标向下移动 (在行内移动)

按下 “g” 键再按下 “下方向” 键

或者:

按下 “g” 键再按下 “k” 键

(注意:此方法还可以实现让光标跨分布或跨终端移动)

2.1.1.2.2 在命令模式下让光标向下移动 (不在行内移动)

按下 “下方向” 键

或者:

按下 “j” 键

(注意:此方法还可以实现让光标跨分布或跨终端移动)

或者:

按下 “<any number>” 键再按下 “下方向” 键

(补充:此方法会向下方移动对应数字个光标位)

或者:

按下 “<any number>” 键再按下 “j” 键

(补充:此方法会向下方移动对应数字个光标位)

(注意:此方法还可以实现让光标跨分布或跨终端移动)

2.1.1.3 在命令模式下让光标向左移动

按下 “左方向” 键

或者:

按下 “h” 键

(注意:此方法还可以实现让光标跨分布或跨终端移动)

或者:

按下 ““<any number>” 键之后再按下 “左方向” 键

(补充:此方法会向左方移动对应数字个光标位)

或者:

按下 ““<any number>” 键之后再按下 “h” 键

(补充:此方法会向左方移动对应数字个光标位)

(注意:此方法还可以实现让光标跨分布或跨终端移动)

2.1.1.4 在命令模式下让光标向右移动

按下 “右方向” 键

或者:

按下 “l” 键

(注意:此方法还可以实现让光标跨分布或跨终端移动)

或者:

按下 ““<any number>” 之后再按下 “右方向” 键

(补充:此方法会向右方移动对应数字个光标位)

或者:

按下 ““<any number>” 之后再按下 “l” 键

(补充:此方法会向右方移动对应数字个光标位)

(注意:此方法还可以实现让光标跨分布或跨终端移动)

2.1.1.5 在命令模式下让光标移动到文件的指定行数

按下 ““<any number>” 键之后再按下 “G” 键

(补充:此方法会让光标移动到对应数字的行)

2.1.2 在命令模式下让光标移动到行的首尾
2.1.2.1 在命令模式下让光标移动到行的首部
2.1.2.1.1 在命令模式下让光标移动到行的首部

按下 “0” 键

2.1.2.1.2 在命令模式下让光标移动到行的首部 (第一个非空白字符)

按下 “^” 键

2.1.2.2 在命令模式下让光标移动到行的尾部

按下 “$” 键

2.1.3 在命令模式下让光标移动到当前窗口的首尾或中间
2.1.3.1 在命令模式下让光标移动到当前窗口的首行

按下 “H” 键

2.1.3.2 在命令模式下让光标移动到当前窗口的中间行

按下 “M” 键

2.1.3.2 在命令模式下让光标移动到当前窗口的尾行

按下 “L” 键

2.1.4 在命令模式下让光标移动到文件的首尾
2.1.4.1 在命令模式下让光标移动到文件的首行

按下 “g” 键之后再按下 “g” 键

2.1.4.2 在命令模式下让光标移动到文件尾行

按下 “G” 键

2.2 在命令模式下翻屏

2.2.1 向上翻屏

同时按下 “ctrl” 键和 “b” 键

2.2.2 向下翻屏

同时按下 “ctrl” 键和 “f” 键

2.2.3 向上翻半屏

同时按下 “ctrl” 键和 “u” 键

2.2.4 向下翻半屏

同时按下 “ctrl” 键和 “e” 键

2.2.5 移动到文件指定百分比的位置

输入百分比后再按下 “%” 键

2.2.6 将当前行视为当前窗口的中间

按下 “z” 键之后再按下 “z” 键

2.2.7 将当前行视为当前窗口的首行

按下 “z” 键之后再按下 “t” 键

2.2.8 将当前行视为当前窗口的首行

按下 “z” 键之后再按下 “b” 键

2.3 在命令模式下删除数据

2.3.1 在某行的范围内删除数据
2.3.1.1 删除单词
2.3.1.1.1 删除 1 个单词

按下 “d” 键之后再按下 “w” 键

2.3.1.1.2 删除多个单词

按下 “d” 键之后再按下 “<any number>” 键之后再按下 “w”

(补充:此方法会在光标所在行的范围内从光标所在位置开始向后删除对应数字个单词)

2.3.1.2 删除光标前面的内容
2.3.1.2.1 删除光标之前多个字符

按下 “d” 键之后再按下 “<any number>” 键之后再按下 “h”

(补充:此方法会在光标所在行的范围内从光标所在位置开始向前删除对应数字个字符)

2.3.1.2.2 在光标所在行的范围内删除光标之前的所有字符

同时按下 “d” 键和 “0” 键

2.3.1.3 删除光标后面的内容
2.3.1.3.1 删除光标之后多个字符

按下 “d” 键之后再按下 “<any number>” 键之后再按下 “l”

(补充:此方法会在光标所在行的范围内从光标所在位置开始向后删除对应数字个字符)

2.3.1.3.2 在光标所在行的范围内删除光标之后的所有字符

同时按下 “d” 键和 “$” 键

或者:

按下 “D” 键

2.3.2 删除行
2.3.2.1 删除光标所在行

按下 “d” 键之后再按下 “d” 键

2.3.2.2 删除某行到某行里的所以有行

按下 “<start number>” 键之后再按下 “,” 键之后再按下 “<end number>” 之后再按下 “d” 键

(补充:此方法会删除从对应数字到对应数字的行)

2.3.2.3 从光标所在行开始删除多行

按下 “<any number>” 键之后再按下 “d” 键之后再按下 “d” 键

(补充:此方法会从光标所在行开始向后删除对应数字个行)

2.3.2.4 从光标所在行开始删除此行和后面的所有行

按下 “d” 键之后再按下 “G” 键

2.3.2.5 从光标所在行开始删除此行和前面的所有行

按下 “d” 键之后再按下 “1” 键之后再按下 “G” 键

或者:

按下 “d” 键之后再按下 “g” 键之后再按下 “g” 键

2.3.3 重复相同的删除操作

按下 “c” 键

2.4 在命令模式下剪切数据

2.4.1 在某行的范围内删除 1 个字符
2.4.1.1 在光标所在行的范围内删除光标之前的 1 个字符

按下 “X” 键

2.4.1.2 在光标所在行的范围内删除光标之后的 1 个字符

按下 “x” 键

2.4.2 在某行的范围内删除多个字符
2.4.2.1 在光标所在行的范围内删除光标之后的多个字符

按下 “<any number>” 键之后再按下 “X” 键

(补充:此方法会在光标所在行的范围内从光标所在位置开始向后删除对应数字个字符)

2.4.2.2 在光标所在行的范围内删除光标之前的多个字符

按下 “<any number>” 键之后再按下 “x” 键

(补充:此方法会在光标所在行的范围内从光标所在位置开始向前删除对应数字个字符)

2.5 在命令模式下复制数据

2.5.1 在某行的范围内复制数据
2.5.1.1 复制单词
2.5.1.1.1 复制 1 个单词

按下 “y” 键之后再按下 “w” 键

2.5.1.1.2 复制多个单词

按下 “y” 键之后再按下 “<any number>” 键之后再按下 “w”

(补充:此方法会在光标所在行的范围内从光标所在位置开始向后复制对应数字个单词)

2.5.1.2 复制光标前面的内容
2.5.1.2.1 复制光标之前多个字符

按下 “y” 键之后再按下 “<any number>” 键之后再按下 “h”

(补充:此方法会在光标所在行的范围内从光标所在位置开始向前复制对应数字个字符)

2.5.1.2.2 在光标所在行的范围内复制光标之前的所有字符

同时按下 “y” 键和 “0” 键

2.5.1.3 复制光标后面的内容
2.5.1.3.1 复制光标之后多个字符

按下 “y” 键之后再按下 “<any number>” 键之后再按下 “l”

(补充:此方法会在光标所在行的范围内从光标所在位置开始向后复制对应数字个字符)

2.5.1.3.2 在光标所在行的范围内复制光标之后的所有字符

同时按下 “y” 键和 “$” 键

2.5.2 复制行
2.5.2.1 复制光标所在行

按下 “y” 键之后再按下 “y” 键

2.5.2.2 复制某行到某行里的所以有行

按下 “<start number>” 键之后再按下 “,” 键之后再按下 “<end number>” 之后再按下 “y” 键

(补充:此方法会复制从对应数字到对应数字的行)

2.5.2.3 从光标所在行开始复制多行

按下 “<any number>” 键之后再按下 “y” 键之后再按下 “y” 键

(补充:此方法会从光标所在行开始向后复制对应数字个行)

2.5.2.4 从光标所在行开始复制此行和后面的所有行

按下 “y” 键之后再按下 “G” 键

2.5.2.5 从光标所在行开始复制此行和前面的所有行

按下 “y” 键之后再按下 “1” 键之后再按下 “G” 键

或者:

按下 “y” 键之后再按下 “g” 键之后再按下 “g” 键

2.6 在命令模式下粘贴数据

2.6.1 从光标所在行开始向上复制

按下 “p” 键

2.6.2 从光标所在行开始向上复制

按下 “P” 键

2.7 在命令模式下进入其他模式

2.7.1 在命令模式下进入输入模式

1) 按下 “i” 键,在光标所在位置进入输入模式
2) 按下 “a” 键,在光标所在位置的后 1 个字符进入输入模式
3) 按下 “I” 键,在光标所在行行首的第 1 个非空格字符进入插入模式
4) 按下 “A” 键,在光标所在行的行尾进入插入模式
5) 按下 “O” 键,在光标所在行的上 1 行新建 1 行,并在行首进入输入模式
5) 按下 “o” 键,在光标所在行的下 1 行新建 1 行,并在行首进入输入模式

2.7.2 在命令模式下进入末行模式

按下 “:” 键

2.7.3 在命令模式下进入视图模式
2.7.3.1 以行的方式进入视图模式

按下 “v” 键

或者:

按下 “V” 键

2.7.3.2 以字符的方式进入视图模式

同时按下 “ctrl” 键和 “v” 键

2.7.3.3 视图模式下的操作案例
2.7.3.3.1 案例一:批量删除行首字符

在光标所在行行首,同时按下 “ctrl” 键和 “v” 键再选择对应的行首再按下 “d” 键或者 “x”键,删除在这些行行首的字符

2.7.3.3.2 案例二:批量行首插入字符

在光标所在行行首,同时按下 “ctrl” 键和 “v” 键再选择对应的行首再按下 “I” 键再输入 <content>再按 “esc” 键,在这些行行首插入 <content>

2.7.3.3.3 案例三:在光标所在行以及前面的所有行的行首插入字符

在光标所在行行首,同时按下 “ctrl” 键和 “v” 键再按下再按 “I” 键再按下 “g” 键再按 “g” 键再输入<content> 再按 “esc” 键,在光标所在行以及前面的所有行的行首插入 <content>

2.7.3.3.4 案例四:在光标所在行以及后面的所有行的行首插入字符

在光标所在行行首,同时按下 “ctrl” 键和 “v” 键再按下再按 “I” 键再按下 “G” 键再输入 <content> 再按 “esc” 键,在这光标所在行以及后面的所有行的行首插入 <content>

2.7.4 在命令模式下进入替换模式

按下 “R” 键

2.8 在命令模式下的其他操作

2.8.1 将光标所在行与下面的行合并

按下 “J” 键

2.8.2 重复上 1 个操作

按下 “ctrl” 键和 “r” 键

或者:

按下 “.“ 键

2.8.3 撤销上 1 个操作

按下 “u” 键

2.8.4 保存此文当并退出 Vi 或 vim 模式

按下 “Z” 键之后再按下 “Z” 键

内容三:vi 或 vim 在末行模式下的操作或设置

3.1 在末行模式下的常用操作

1) :w 保存当前内容
2) :w! 强制保存当前内容
3) :w <file> 保存当前内容到另 1 个名为 <file> 文件
4) :w! <file> 强制保存当前内容到另 1 个名为 <file> 文件
5) :q 退出
6) :q! 强制推出
7) :wq 或者 : x 保存当前内容并退出
8) :wq! 强制保存当前内容并退出
9) :wq <file> 或者 :saveas <file> 保存当前内容到另 1 个名为 <file> 文件并退出
10) :wq! <file> 强制保存当前内容到另 1 个名为 <file> 文件并退出
11) :e! 放弃当前所有修改,将内容恢复到上次保存时
12) :! <command> 使用 Linux 命令
13) :r <file> 在当前行插入名为 <file> 文件里的内容
14) :<n>r <file> 在第 n 行插入名为 <file> 文件里的内容

3.2 在末行模式下的设置

1) :set nu 或者 :set number 开启行号
2) :set nonu 或者 :set nonumber

3.3 在末行模式下搜索

3.3.1 在末行模式下搜索关键字
3.3.1.1 向下查找匹配的关键字

: /<key word> 之后按 “n” 键或者 “N” 键显示下 1 个匹配的关键字

3.3.1.2 向上查找匹配的关键字

:?<key word> 之后按 “n” 键或者 “N” 键显示下 1 个匹配的关键字

3.3.2 在末行模式下搜索行号

:<line number> 之后按 “回车” 键

3.4 在末行模式下替换关键字的使用案例

3.4.1 案例一:以 <new keyword> 替换光标所在行的第 1 个 <old keyword>
:s/<old keyword>/<new keyword>
3.4.2 案例二:以 <new keyword> 替换光标所在行的所有 <old keyword>
:s/<old keyword>/<new keyword>/g
3.4.3 案例三:以 <new keyword> 替换从 <start number> 行到 <end number> 行的所有 <old keyword>
<start number>,<end number>s/<old keyword>/<new keyword>/g
3.4.4 案例四:以 <new keyword> 替换从光标所在行开始到 <any number> 行的所有 <old keyword>
:,+<any number>s/<old keyword>/<new keyword>/g
3.4.5 案例五:以 <new keyword> 替换从 <any number> 行到最后行的所有 <old keyword>
:<any number>,%s/<old keyword>/<new keyword>/g
3.4.6 案例六:以 <new keyword> 替换全文的所有 <old keyword>
:%s/<old keyword>/<new keyword>/g

3.5 在末行模式进入命令模式

:按下 “esc” 键

内容四:vi 或 vim 在输入模式下的操作

4.1 在输入模式下输入内容

正常键入内容即可

4.2 在输入模式下进入命令模式

按下 “esc” 键

[内容] Linux 通佩符

内容一:Linux 通佩符

1.1 匹配任意一个字符

1.2 匹配任意多个字符

*

1.3 匹配任意多个字符中的一个

[<character><character><character>]

或者:

{<character>,<character>,<character>}

1.4 不匹配任意多个字符中的一个

[^<character><character><character>]

或者:

[!<character><character><character>]

1.5 匹配一段连续的字符

{<head character>...<tail character>}

内容二:Linux 通佩符的使用案例

2.1 案例一:多循环匹配文件或目录

# touch {a..b}{1..3}.txt
# ls
a1.txt  a2.txt  a3.txt  b1.txt  b2.txt  b3.txt

2.2 案例二:匹配所有文件和目录,包括隐藏文件和目录

# cd /tmp
# tar -zcvf /home/zhumingyu/all.tar.gz .[!.]* *