firewall-cmd --zone=$zone --query-port=$1/tcp >> "${logfile}"
这个命令使用了 `firewall-cmd`,这是 `firewalld` 的命令行工具,用于管理 Linux 系统上的防火墙规则。`firewalld` 是许多 Linux 发行版中默认的防火墙管理工具。
命令的详细解释如下:
1. **firewall-cmd**: 这是 `firewalld` 的命令行工具。
2. **--zone=$zone**: 这指定了查询或修改哪个区域(zone)的防火墙规则。`$zone` 是一个变量,代表一个特定的区域名称,例如 `public`、`home`、`work` 等。不同的区域可以有不同的防火墙规则。
3. **--query-port=$1/tcp**: 这部分命令用于查询某个 TCP 端口是否在指定的区域中开放。`$1` 是脚本或命令行参数,代表你想查询的 TCP 端口的号码。例如,如果 `$1` 的值是 `80`,那么命令就会查询 TCP 端口 80 是否在 `$zone` 指定的区域中开放。
4. **>> "${logfile}"**: 这部分命令将 `firewall-cmd` 的输出追加到 `${logfile}` 指定的文件中。如果文件不存在,它会被创建。如果文件已经存在,新的输出会被追加到文件的末尾,而不是覆盖原有内容。`${logfile}` 是一个变量,代表日志文件的路径和名称。
### 举例说明
假设你有一个名为 `check_ports.sh` 的脚本,它接受一个端口号作为参数,并检查该端口是否在 `public` 区域中开放。此外,你还希望将结果记录到一个名为 `firewall_logs.txt` 的日志文件中。
脚本内容可能如下:
#!/bin/bash
# 定义变量
zone="public"
logfile="firewall_logs.txt"
# 检查端口是否在指定区域中开放,并将结果追加到日志文件中
firewall-cmd --zone=$zone --query-port=$1/tcp >> "${logfile}"
你可以通过以下方式运行这个脚本,检查 TCP 端口 80 是否在 `public` 区域中开放:
./check_ports.sh 80
如果端口 80 在 `public` 区域中开放,`firewall-cmd` 会返回 `yes`,这个信息会被追加到 `firewall_logs.txt` 文件中。如果端口没有开放,它会返回 `no`。