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

check 这个名称通常出现在特定的软件包或工具集中,作为其功能的一部分,最常见和最重要的两个与 check 相关的命令是:
rpm命令中的-q --check(或-K) 选项,用于检查 RPM 包的完整性和签名。test命令(其别名是[),在 Shell 脚本中用于检查条件。
下面我将详细解释这两个,并补充一些其他可能相关的工具。
使用 rpm 命令检查 RPM 包 (适用于 RHEL, CentOS, Fedora, SUSE 等系统)
对于使用 RPM 包管理器的系统来说,check 是 rpm 命令的一个功能,它主要用于验证一个已安装的 RPM 包是否被修改过,或者检查一个 RPM 文件的数字签名。
a) 验证已安装的 RPM 包
这个功能会检查已安装包的文件与原始包中的信息是否一致,它会对比以下几个属性:

- 文件大小 (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 表示文件未被篡改
如果某个文件被修改过,你会看到类似 MISSING 或 NOT OK 的状态。

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 --checkchkrootkit: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",你应该:
- 明确你的目标:你想检查什么?是包的完整性?文件的存在?还是脚本里的条件?
- 根据目标选择正确的命令:
- 检查包 -> 使用
rpm。 - 写脚本判断条件 -> 使用
test或[。 - 检查系统安全 -> 使用
rkhunter。 - 检查硬盘 -> 使用
smartctl。
- 检查包 -> 使用
- 使用
man或--help:如果你不确定一个命令的详细用法,最好的方法是查看它的手册页。man rpmman testman rkhunter
