菜鸟科技网

如何在Linux系统中高效使用check命令进行系统检查与故障排查?

在标准的 Linux 发行版中,没有一个叫做 check 的通用命令

如何在Linux系统中高效使用check命令进行系统检查与故障排查?-图1
(图片来源网络,侵删)

check 这个名称通常出现在特定的软件包或工具集中,作为其功能的一部分,最常见和最重要的两个与 check 相关的命令是:

  1. rpm 命令中的 -q --check (或 -K) 选项,用于检查 RPM 包的完整性和签名。
  2. test 命令(其别名是 [),在 Shell 脚本中用于检查条件。

下面我将详细解释这两个,并补充一些其他可能相关的工具。


使用 rpm 命令检查 RPM 包 (适用于 RHEL, CentOS, Fedora, SUSE 等系统)

对于使用 RPM 包管理器的系统来说,checkrpm 命令的一个功能,它主要用于验证一个已安装的 RPM 包是否被修改过,或者检查一个 RPM 文件的数字签名

a) 验证已安装的 RPM 包

这个功能会检查已安装包的文件与原始包中的信息是否一致,它会对比以下几个属性:

如何在Linux系统中高效使用check命令进行系统检查与故障排查?-图2
(图片来源网络,侵删)
  • 文件大小 (Size)
  • 文件权限 (Permissions)
  • 文件类型/所有者/组 (Type, owner, group)
  • MD5 校验和 (MD5 sum) - (注意:新版本可能使用 SHA256)

基本语法:

rpm -q --checksig <包名>
# 或者简写为
rpm -q -K <包名>

选项说明:

  • -q (query): 查询模式。
  • --checksig (或 -K): 检查包的签名和完整性。

示例: 假设你想验证 coreutils 这个包是否完整。

# 查询已安装的 coreutils 包的完整性
rpm -q --checksig coreutils
# 输出示例:
# coreutils-8.32-34.el8.x86_64 rsa/sha256 RSA/8, 2025-03-05 15:23:46, (none)
# MD5SUM = 5d41402abc4b2a76b9719d911017c592  OK
# SHA1   = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d  OK
# SHA256 = 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08  OK
# DIGESTS THIS IS A TEST
# 状态 OK 表示文件未被篡改

如果某个文件被修改过,你会看到类似 MISSINGNOT OK 的状态。

如何在Linux系统中高效使用check命令进行系统检查与故障排查?-图3
(图片来源网络,侵删)

b) 检查 RPM 文件(未安装的包)的签名

在安装一个从外部获取的 RPM 文件前,最好先检查它的签名,以确保来源可信且文件未被篡改。

基本语法:

rpm -K <rpm文件名>

示例:

# 检查一个名为 my-software-1.0.rpm 的文件
rpm -K my-software-1.0.rpm
# 输出示例:
# my-software-1.0.rpm: rsa/sha256 RSA/8, 2025-10-27 10:00:00, (none) RSA/8, 2025-10-01 09:00:00, (none) OK
# 如果签名有效,会显示 OK

Shell 内建命令 test (别名 [) - 用于条件检查

这是 Shell 脚本编程中最核心的“检查”命令,它不直接执行,而是由 Shell(如 Bash)在解释脚本时直接处理,它用于检查一个条件是否为真,并根据结果返回一个退出状态码(0 为真,非 0 为假)。

test 命令有一个非常常见的别名:[,所以你经常看到 if [ ... ]; then ... fi 这样的写法,它实际上等同于 if test ...; then ... fi

基本语法:

# test 的用法
test <表达式>
# [ (左括号) 的用法 (注意:[ 后面和 ] 前面都需要有空格)
[ <表达式> ]

常见的检查类型:

检查类型 语法 示例 说明
文件检查 [ -f <文件名> ] [ -f /etc/passwd ] 检查是否为普通文件且存在
[ -d <目录名> ] [ -d /tmp ] 检查是否为目录且存在
[ -e <路径> ] [ -e /home/user ] 检查路径是否存在(文件或目录)
[ -r <文件名> ] [ -r script.sh ] 检查文件是否可读
[ -w <文件名> ] [ -w output.txt ] 检查文件是否可写
[ -x <文件名> ] [ -x /bin/ls ] 检查文件是否可执行
数值比较 [ <num1> -eq <num2> ] [ "$a" -eq 10 ] 等于 (Equal)
[ <num1> -ne <num2> ] [ "$b" -ne 20 ] 不等于 (Not Equal)
[ <num1> -gt <num2> ] [ "$c" -gt 5 ] 大于 (Greater Than)
[ <num1> -lt <num2> ] [ "$d" -lt 100 ] 小于 (Less Than)
[ <num1> -ge <num2> ] [ "$e" -ge 0 ] 大于或等于 (Greater or Equal)
[ <num1> -le <num2> ] [ "$f" -le 255 ] 小于或等于 (Less or Equal)
字符串检查 [ -z <字符串> ] [ -z "$name" ] 检查字符串是否为空 (Zero length)
[ -n <字符串> ] [ -n "$name" ] 检查字符串是否非空 (Not zero length)
[ "<str1>" = "<str2>" ] [ "$user" = "root" ] 字符串是否相等
[ "<str1>" != "<str2>" ] [ "$os" != "Windows" ] 字符串是否不相等
逻辑组合 [ ! <条件> ] [ ! -f "file.txt" ] 逻辑非 (NOT)
[ <条件1> -a <条件2> ] [ -f "a.txt" -a -r "a.txt" ] 逻辑与 (AND)
[ <条件1> -o <条件2> ] [ "$user" = "root" -o "$user" = "admin" ] 逻辑或 (OR)

示例脚本 (check_example.sh):

#!/bin/bash
file="/etc/hosts"
num1=10
num2=20
user="root"
# 1. 检查文件是否存在并可读
if [ -f "$file" ] && [ -r "$file" ]; then
  echo "文件 $file 存在且可读。"
else
  echo "文件 $file 不存在或不可读。"
fi
# 2. 检查数值大小
if [ "$num1" -gt "$num2" ]; then
  echo "$num1 大于 $num2"
else
  echo "$num1 不大于 $num2"
fi
# 3. 检查用户身份
if [ "$user" = "root" ]; then
  echo "当前用户是 root。"
else
  echo "当前用户不是 root。"
fi

其他可能相关的“检查”工具

除了上面两个最常见的,还有一些工具的名字或功能里也包含 "check"。

  • syscheck / rkhunter / chkrootkit: 这些是Rootkit 检查工具,它们用于扫描系统是否被植入了后门、木马等恶意软件。

    • rkhunter: rkhunter --check
    • chkrootkit: chkrootkit
  • smartctl: 用于检查硬盘的健康状态 (S.M.A.R.T. 监测)。

    • sudo smartctl -a /dev/sda (检查 /dev/sda 硬盘的详细信息)
  • dmidecode: 检查硬件的底层信息 (DMI 表)。

    • sudo dmidecode -t memory (检查内存信息)
  • file: 检查文件的类型。

    • file my_program (输出 my_program: ELF 64-bit LSB executable, x86-64)

总结与如何查找

命令/工具 主要用途 适用系统
rpm -q --checksig 验证 RPM 包的完整性和签名 RHEL, CentOS, Fedora, SUSE
test[ 在 Shell 脚本中进行条件检查 几乎所有 Linux/Unix Shell
rkhunter / chkrootkit 检查系统是否被植入 Rootkit 所有 Linux
smartctl 检查硬盘健康状态 所有支持 S.M.A.R.T. 的系统
file 检查文件的真实类型 所有 Linux/Unix

如果你在终端输入 check 后提示 "command not found",你应该:

  1. 明确你的目标:你想检查什么?是包的完整性?文件的存在?还是脚本里的条件?
  2. 根据目标选择正确的命令
    • 检查包 -> 使用 rpm
    • 写脚本判断条件 -> 使用 test[
    • 检查系统安全 -> 使用 rkhunter
    • 检查硬盘 -> 使用 smartctl
  3. 使用 man--help:如果你不确定一个命令的详细用法,最好的方法是查看它的手册页。
    • man rpm
    • man test
    • man rkhunter
分享:
扫描分享到社交APP
上一篇
下一篇