[内容] Linux 进程状态介绍

内容一:Linux 的第一进程状态

(1)R 处于运行状态或者等待运行状态
(2)S 处于休眠状态
(3)T 处于停止状态或者处于被追踪的状态
(4)Z 处于僵尸进程的状态
(5)W 处于进入内存交换的状态
(6)X 处于被杀死进程的状态
(7)D 处于不可中断的休眠状态

(注意:D 状态通常由存储进程中断导致,无法被 kill 命令杀死,但可以通过重启系统清除)

内容二:Linux 的第二进程状态

(1)< 代表此进程具有高优先级
(2)N 代表此进程具有低优先级
(3)L 代表此进程有些部分被所进了内存
(4)s 代表此进程包含子进程
(5)+ 代表此进程处于后台的状态
(6)l 代表此进程是被克隆出来的多线程

内容三:Linux 显示进程状态的命令

# ps -aux

[命令] CentOS Linux & RHEL 命令 yum-config-manager (管理软件源)

案例一:添加某个软件源

# yum-config-manager --add-repo=http://192.168.101.254/CentOS7/
已加载插件:fastestmirror
adding repo from: http://192.168.101.254/CentOS7/

[192.168.101.254_CentOS7_]
name=added from: http://192.168.101.254/CentOS7/
baseurl=http://192.168.101.254/CentOS7/
enabled=1

(补充:这里以添加 http://192.168.101.254/CentOS7/ 为例)

案例二:禁用某个软件源

# yum-config-manager --disable 192.168.101.254_CentOS7_

(补充:这里以禁用 192.168.101.254_CentOS7_ 为例)

案例三:启用某个软件源

# yum-config-manager --enable 192.168.101.254_CentOS7_

(补充:这里以启用 192.168.101.254_CentOS7_ 为例)

[命令] Linux 命令 rpm (Red Hat Package Manager) (管理软件)

案例一:安装软件

1.1 安装软件

# rpm -i proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --install proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以安装 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

1.2 安装软件并显示详细信息

# rpm -ivh proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --install --verbose --hash proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以安装 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

1.3 重复安装软件

# rpm -ivh --replacepkgs proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --install --verbose --hash --replacepkgs proxychains-ng-4.11-lp152.3.5.x86_64.rpm


补充:
1) 这里以安装 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例
2) 重复安装软件时,没有 –replacepkgs 参数则会安装失败

1.4 忽略依赖问题安装软件

# rpm -ivh --nodeps proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --install --verbose --hash --nodeps proxychains-ng-4.11-lp152.3.5.x86_64.rpm


补充:
1) 这里以安装 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例
2) 忽略依赖问题安装软件时,如果有依赖问题的话,没有 –nodeps 参数则会安装失败

1.5 强制安装软件 (不建议)

# rpm -ivh --force proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --install --verbose --hash --force proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以安装 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

案例二:删除软件

2.1 删除软件

# rpm -e proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --erase proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以删除 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

2.2 删除软件并显示详细信息

# rpm -evh proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --erase --verbose --hash proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以删除 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

案例三:升级软件

3.1 升级软件

# rpm -U proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --upgrade proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以升级 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

3.2 升级软件并显示详细信息

# rpm -Uvh proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --upgrade --verbose --hash proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以升级 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

3.3 忽略依赖问题升级软件

# rpm -Uvh --nodeps proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --upgrade --verbose --hash --nodeps proxychains-ng-4.11-lp152.3.5.x86_64.rpm


补充:
1) 这里以升级 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例
2) 忽略依赖问题升级软件时,如果有依赖问题的话,没有 –nodeps 参数则会安装失败

3.4 强制升级软件 (不建议)

# rpm -Uvh --force proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --upgrade --verbose --hash --force proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以升级 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

案例四:显示软件

4.1 显示所有已安装的软件

# rpm -qa

或者:

# rpm --query --all

4.2 显示所有已安装的软件的安装时间

# rpm -qa --last

或者:

# rpm --query --all --last

4.3 显示所有已安装的软件所属的系统版本

# rpm -qa --queryformat "%{DISTRIBUTION}\n" | sort | uniq

或者:

# rpm --query --all --queryformat "%{DISTRIBUTION}\n" | sort | uniq

4.4 显示软件的文件信息

# rpm -qp log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --package log4j-1.2.17-18.el7_4.noarch

(补充:这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的信息为例)

4.5 显示软件的全部信息 (包括安装时间、大小等等)

# rpm -qi log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --info log4j-1.2.17-18.el7_4.noarch

(补充:这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的信息为例)

4.6 显示软件的所有文件

4.6.1 显示软件的所有文件
# rpm -ql log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --list log4j-1.2.17-18.el7_4.noarch

(补充:这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的信息为例)

4.6.2 显示软件的所有文件和这些文件的详细信息
# rpm -qlv log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --list --verbose log4j-1.2.17-18.el7_4.noarch


补充:
1) 这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的信息为例
2) v 参数在这里的作用类似 ls 命令中的 -l 参数

4.7 显示软件所有文件的状态

4.7.1 显示软件所有文件的状态
# rpm -qs log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --state log4j-1.2.17-18.el7_4.noarch

(补充:这里以显示 log4j-1.2.17-18.el7_4.noarch 软件所有文件的状态为例)

4.7.2 显示软件所有文件的状态和这些文件的详细信息
# rpm -qsv log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --state --verbose log4j-1.2.17-18.el7_4.noarch


补充:
1) 这里以显示 log4j-1.2.17-18.el7_4.noarch 软件所有文件的状态为例
2) v 参数在这里的作用类似 ls 命令中的 -l 参数

4.8 显示软件的配置文件

4.8.1 显示软件的配置文件
# rpm -qc log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --configfiles log4j-1.2.17-18.el7_4.noarch

(补充:这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的信息为例)

4.8.2 显示软件的配置文件和这些文件的详细信息
# rpm -qcv log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --configfiles --verbose log4j-1.2.17-18.el7_4.noarch


补充:
1) 这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的信息为例
2) v 参数在这里的作用类似 ls 命令中的 -l 参数

4.9 显示软件的文档文件 (man 手册、info 手册、READMEs 等等)

4.9.1 显示软件的文档文件 (man 手册、info 手册、READMEs 等等)
# rpm -qd log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --docfiles log4j-1.2.17-18.el7_4.noarch

(补充:这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的文档为例)

4.9.2 显示软件的文档文件 (man 手册、info 手册、READMEs 等等)
# rpm -qdv log4j-1.2.17-18.el7_4.noarch

或者:

# rpm --query --docfiles --verbose log4j-1.2.17-18.el7_4.noarch


补充:
1) 这里以显示 log4j-1.2.17-18.el7_4.noarch 软件的文档为例
2) v 参数在这里的作用类似 ls 命令中的 -l 参数

4.10 显示软件的变更历史

4.10.1 显示软件的变更历史
# rpm -q --changelog openssh-clients

或者:

# rpm --query --changelog openssh-clients

(补充:这里以显示 openssh-clients 软件的变更历史为例)

4.10.2 显示软件 CVE 信息的变更历史
# rpm -q openssh-clients --changelog | grep -i cve

或者:

# rpm --query openssh-clients --changelog | grep -i cve

(补充:这里以显示 openssh-clients 软件的 CVE 信息的变更历史为例)

4.10.3 显示软件现在的版本是否修复 CVE 漏洞
# rpm -qpi --changelog redis-6.0.14-6.8.1.x86_64.rpm |grep -E '32675'
- Fix CVE-2021-32675, Denial Of Service when processing RESP request
  (CVE-2021-32675, bsc#1191303)
  * cve-2021-32675.patch

或者:

# rpm --query --package --info --changelog redis-6.0.14-6.8.1.x86_64.rpm |grep -E '32675'
- Fix CVE-2021-32675, Denial Of Service when processing RESP request
  (CVE-2021-32675, bsc#1191303)
  * cve-2021-32675.patch

(补充:这里以确认 redis-6.0.14-6.8.1.x86_64.rpm 软件是否已修复 CVE-2021-32675 为例)

4.11 显示文件所属软件

# rpm -qf /usr/share/java/log4j.jar

或者:

# rpm --query --file /usr/share/java/log4j.jar

(补充:这里以显示 /usr/share/java/log4j.jar 文件属于哪个软件为例)

案例五:验证软件

5.1 验证软件

# rpm -V proxychains-ng-4.11-lp152.3.5.x86_64

或者:

# rpm --verify proxychains-ng-4.11-lp152.3.5.x86_64


补充:
1) 这里以验证 proxychains-ng-4.11-lp152.3.5.x86_64 软件为例
2) 如果显示 c 则代表是配置文件 (config file)
3) 如果显示 d 则代表是普通文件 (documentation)
4) 如果显示 g 则代表是鬼文件 (ghost file),此文件不该被此 RPM 包含,此情况很少见
5) 如果显示 l 则代表是授权文件 (license file)
6) 如果显示 r 则代表是描述文件 (read me)
7) 如果显示 . 或者什么也没有显示则代表什么都没有改变
8) 如果显示 5 则代表文件 MD5 校验码发生改变
9) 如果显示 S 则代表文件大小 (size) 发生改变
10) 如果显示 L 则代表链接 (link) 发生改变
11) 如果显示 T 则代表文件修改时间 (time) 发生改变
12) 如果显示 D 则代表设备文件号发生改变
13) 如果显示 U 则代表所属主 (owner) 发生改变
14) 如果显示 G 则代表所属组 (group) 发生改变
15) 如果显示 M 则代表权限和文件类型 (mod) 发生改变

5.2 验证包含文件的软件是否正确

# rpm -Vf /etc/proxychains

或者:

# rpm --verify --file /etc/proxychains


补充:
1) 这里以验证 /etc/proxychains 文件为例
2) 如果显示 c 则代表是配置文件 (config file)
3) 如果显示 d 则代表是普通文件 (documentation)
4) 如果显示 g 则代表是鬼文件 (ghost file),此文件不该被此 RPM 包含,此情况很少见
5) 如果显示 l 则代表是授权文件 (license file)
6) 如果显示 r 则代表是描述文件 (read me)
7) 如果显示 . 或者什么也没有显示则代表什么都没有改变
8) 如果显示 5 则代表文件 MD5 校验码发生改变
9) 如果显示 S 则代表文件大小 (size) 发生改变
10) 如果显示 L 则代表链接 (link) 发生改变
11) 如果显示 T 则代表文件修改时间 (time) 发生改变
12) 如果显示 D 则代表设备文件号发生改变
13) 如果显示 U 则代表所属主 (owner) 发生改变
14) 如果显示 G 则代表所属组 (group) 发生改变
15) 如果显示 M 则代表权限和文件类型 (mod) 发生改变

5.3 验证所有已经安装的软件

# rpm -Va

或者:

# rpm --verify --all /etc/proxychains


补充:
1) 如果什么都不显示,则代表什么都没有改变
2) 如果显示 c 则代表是配置文件 (config file)
3) 如果显示 d 则代表是普通文件 (documentation)
4) 如果显示 g 则代表是鬼文件 (ghost file),此文件不该被此 RPM 包含,此情况很少见
5) 如果显示 l 则代表是授权文件 (license file)
6) 如果显示 r 则代表是描述文件 (read me)
7) 如果显示 . 或者什么也没有显示则代表什么都没有改变
8) 如果显示 5 则代表文件 MD5 校验码发生改变
9) 如果显示 S 则代表文件大小 (size) 发生改变
10) 如果显示 L 则代表链接 (link) 发生改变
11) 如果显示 T 则代表文件修改时间 (time) 发生改变
12) 如果显示 D 则代表设备文件号发生改变
13) 如果显示 U 则代表所属主 (owner) 发生改变
14) 如果显示 G 则代表所属组 (group) 发生改变
15) 如果显示 M 则代表权限和文件类型 (mod) 发生改变

5.4 通过 RPM 文件 (安装包) 验证已安装的软件

# rpm -Vp proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --verify --package proxychains-ng-4.11-lp152.3.5.x86_64.rpm


补充:
1) 这里以使用 proxychains-ng-4.11-lp152.3.5.x86_64.rpm RPM 文件进行验证为例
2) 如果显示 c 则代表是配置文件 (config file)
3) 如果显示 d 则代表是普通文件 (documentation)
4) 如果显示 g 则代表是鬼文件 (ghost file),此文件不该被此 RPM 包含,此情况很少见
5) 如果显示 l 则代表是授权文件 (license file)
6) 如果显示 r 则代表是描述文件 (read me)
7) 如果显示 . 或者什么也没有显示则代表什么都没有改变
8) 如果显示 5 则代表文件 MD5 校验码发生改变
9) 如果显示 S 则代表文件大小 (size) 发生改变
10) 如果显示 L 则代表链接 (link) 发生改变
11) 如果显示 T 则代表文件修改时间 (time) 发生改变
12) 如果显示 D 则代表设备文件号发生改变
13) 如果显示 U 则代表所属主 (owner) 发生改变
14) 如果显示 G 则代表所属组 (group) 发生改变
15) 如果显示 M 则代表权限和文件类型 (mod) 发生改变

案例六:测试软件

6.1 测试安装软件

# rpm -ivh --test proxychains-ng-4.11-lp152.3.5.x86_64.rpm

或者:

# rpm --install --verbose --hash --test proxychains-ng-4.11-lp152.3.5.x86_64.rpm

(补充:这里以测试安装 proxychains-ng-4.11-lp152.3.5.x86_64.rpm 软件为例)

6.2 测试删除软件

# rpm --erase --test proxychains-ng-4.11-lp152.3.5.x86_64


补充:
1) 这里以测试删除 proxychains-ng-4.11-lp152.3.5.x86_64 软件为例
2) 这里会显示 proxychains-ng-4.11-lp152.3.5.x86_64 软件被哪些软件依赖

[命令] Linux 命令 rsync (差异同步)

案例一:将一个地方里的所有差异数据同步到另一个地方

# rsync -avDogp <source directory>/* <target directory>

案例二:将一个地方里的所有差异数据同步到另一个地方,并且被同步的地方有的数据而原地方没有的数据都将被删除

# rsync -avDogp --delete <source directory>/* <target directory>

[步骤] SFTP 安全 (限制 SFTP 用户可以进入的目录和禁止 SFTP 用户 SSH 登录版)

步骤一:限制 SFTP 用户可以进入的目录

1.1 限制 SFTP 用户可以进入的目录

# vim /etc/ssh/sshd_config

如果是 RHEL & CentOS Linux,将以下内容:

......
Subsystem       sftp    /usr/libexec/openssh/sftp-server
......

修改为:

......
# Subsystem       sftp    /usr/libexec/openssh/sftp-server
......

如果是 openSUSE & SLE, 将以下内容:

......
Subsystem       sftp    /usr/lib/ssh/sftp-server
......

修改为:

......
# Subsystem       sftp    /usr/lib/ssh/sftp-server
......

并添加以下内容:

......
Subsystem       sftp    internal-sftp
ChrootDirectory /%u
ForceCommand    internal-sftp
AllowTcpForwarding no
X11Forwarding no


补充:
1) 这里以 SFTP 用户可以进入的目录只能为 /<user>
2) 其它配置方案可以参考

1.2 让限制 SFTP 用户可以进入的目录的设置生效

# systemctl restart sshd

步骤二:禁止 SFTP 用户 SSH 登录

2.1 创建 SFTP 用户

# useradd sftpuser

(补充:这里以创建名为 sftpuser 的用户为例)

2.2 禁止 SFTP 用户 SSH 登录

# usermod -s /bin/false sftpuser

(补充:这里以将用户 sftpuser 的解释器修改成 /bin/false 为例)

或者:

# usermod -s /sbin/nologin sftpuser

(补充:这里以将用户 sftpuser 的解释器修改成 /sbin/nologin 为例)

2.3 给 SFTP 用户设置密码

# passwd sftpuser

(补充:这里以给 sftp 用户设置密码为例)

2.4 创建 SFTP 用户的 SFTP 目录

2.4.1 创建 SFTP 用户的 SFTP 目录
# mkdir /sftpuser

(补充:这里以创建 /sftp 目录为例)

2.4.2 设置此 SFTP 目录的所属主
# chown root: /sftpuser

(补充:这里以设置 /sftp 目录的所属主为 root 为例)

(注意:SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错)

2.4.3 设置此 SFTP 目录的权限
# chmod 755 /sftpuser

(补充:这里以给 /sftp 目录设置 755 权限为例)

(注意:SFTP 目录的所属主必须是 root,权限最高只能是 755,否则就算此目录的所属主是此 SFTP 用户也会报错)