Linux ftpcount命令用于显示当前FTP服务器的连接计数和用户数量统计。
ftpcount [选项]
| 选项 | 说明 |
|---|---|
-v |
显示详细信息 |
-V |
显示版本信息 |
-h |
显示帮助信息 |
--help |
显示帮助信息 |
# 查看当前FTP服务器的连接计数
ftpcount
# 输出示例:
# Service class all - 2 users (no maximum)
# Service class anonymous - 1 users ( 5 maximum)
# Service class real - 1 users ( 20 maximum)
# 解释:
# 每行显示一个服务类的统计
# 格式:服务类名称 - 当前用户数 (最大允许用户数)
# "no maximum" 表示没有限制
# 显示详细的连接计数信息
ftpcount -v
# 输出可能包含更多信息,如:
# - 每个用户的IP地址
# - 连接时间
# - 当前状态
# - 使用的服务类详细信息
#!/bin/bash
# 自动监控FTP连接数的脚本
# 获取总的FTP连接数
TOTAL_USERS=$(ftpcount | grep "Service class all" | awk '{print $5}')
# 获取匿名连接数
ANON_USERS=$(ftpcount | grep "Service class anonymous" | awk '{print $5}')
# 获取真实用户连接数
REAL_USERS=$(ftpcount | grep "Service class real" | awk '{print $5}')
# 获取最大允许连接数(如果设置)
MAX_USERS=$(ftpcount | grep "Service class all" | awk '{print $7}' | tr -d '()')
echo "FTP服务器连接统计"
echo "=================="
echo "当前总连接数: $TOTAL_USERS"
echo "匿名用户数: $ANON_USERS"
echo "真实用户数: $REAL_USERS"
# 计算连接使用率(如果设置了最大连接数)
if [ "$MAX_USERS" != "maximum" ]; then
USAGE_PERCENT=$((TOTAL_USERS * 100 / MAX_USERS))
echo "连接使用率: $USAGE_PERCENT% ($TOTAL_USERS/$MAX_USERS)"
# 如果使用率超过80%,发送警告
if [ $USAGE_PERCENT -gt 80 ]; then
echo "警告:FTP服务器连接使用率超过80%!"
# 这里可以添加发送邮件或其他通知的代码
fi
fi
# 只查看匿名用户的连接计数
ftpcount | grep "anonymous"
# 只查看真实用户的连接计数
ftpcount | grep "real"
# 查看所有服务类的摘要
ftpcount | grep "Service class"
# 每10秒刷新一次连接计数
watch -n 10 ftpcount
# 使用循环实现类似效果
while true; do
clear
echo "FTP连接计数监控 - $(date)"
echo "=========================="
ftpcount
sleep 10
done
# 先查看连接计数摘要
ftpcount
# 然后查看详细的连接信息
ftpwho
# 在一个命令中显示两者
echo "=== 连接计数 ==="
ftpcount
echo ""
echo "=== 连接详情 ==="
ftpwho
#!/bin/bash
# FTP连接数日志记录和告警脚本
LOG_FILE="/var/log/ftp_connection.log"
ALERT_THRESHOLD=50
EMAIL_ADMIN="admin@example.com"
# 获取当前连接数
CONNECTIONS=$(ftpcount | grep "Service class all" | awk '{print $5}')
# 记录到日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - 当前FTP连接数: $CONNECTIONS" >> "$LOG_FILE"
# 检查是否超过阈值
if [ "$CONNECTIONS" -gt "$ALERT_THRESHOLD" ]; then
echo "警告:FTP连接数超过阈值 ($ALERT_THRESHOLD)!当前: $CONNECTIONS" >> "$LOG_FILE"
# 发送邮件通知(需要配置邮件系统)
echo "FTP服务器连接数告警" | mail -s "FTP连接数超过阈值" "$EMAIL_ADMIN" << EOF
FTP服务器连接数报告:
时间: $(date)
当前连接数: $CONNECTIONS
阈值: $ALERT_THRESHOLD
详细连接信息:
$(ftpwho)
EOF
fi
# 保留最近30天的日志
find "$LOG_FILE" -mtime +30 -delete
ftpcount命令显示的服务类通常在FTP服务器配置文件中定义:
| 服务类 | 说明 | 典型配置 |
|---|---|---|
| all | 所有用户的总计 | class all real,guest,anonymous * |
| real | 真实用户(有系统账户的用户) | class real real * |
| anonymous | 匿名用户 | class anonymous anonymous * |
| guest | 访客用户 | class guest guest * |
# /etc/ftpaccess 或 /etc/wu-ftpd/ftpaccess 配置示例
# 定义服务类
class all real,guest,anonymous *
limit all 100 Any /etc/msgs/msg.toomany
class real real *
limit real 50 Any /etc/msgs/msg.toomany
class anonymous anonymous *
limit anonymous 20 Any /etc/msgs/msg.toomany
class guest guest *
limit guest 10 Any /etc/msgs/msg.toomany
| 特性 | ftpcount | ftpwho |
|---|---|---|
| 主要功能 | 连接计数统计 | 详细连接信息 |
| 输出详细程度 | 摘要信息 | 详细信息 |
| 性能影响 | 较低 | 较高(尤其连接多时) |
| 适用场景 | 快速查看服务器负载 | 调试和详细监控 |
| 输出示例 | Service class all - 2 users (no maximum) | 10477 ? S 0:00 ftpd: 192.168.1.100: anonymous... |
# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install wu-ftpd
# CentOS/RHEL系统(可能需要EPEL仓库)
sudo yum install epel-release
sudo yum install wu-ftpd
# 验证安装
which ftpcount
ftpcount --version
# 编辑wu-ftpd配置文件
sudo nano /etc/wu-ftpd/ftpaccess
# 设置连接限制示例
# 限制所有用户最多100个连接
limit all 100 Any /etc/msgs/msg.toomany
# 限制匿名用户最多20个连接
limit anonymous 20 Any /etc/msgs/msg.toomany
# 限制真实用户最多50个连接
limit real 50 Any /etc/msgs/msg.toomany
# 创建超过限制时显示的消息文件
echo "服务器连接数已达到上限,请稍后再试。" | sudo tee /etc/msgs/msg.toomany
# 重启FTP服务器使配置生效
sudo systemctl restart wu-ftpd
可能原因: FTP服务器未运行或配置错误
解决: 检查FTP服务器状态
# 检查FTP服务器是否运行
systemctl status wu-ftpd
# 检查配置文件
sudo wu-ftpd -l
可能原因: 未设置连接限制
解决: 在配置文件中设置limit指令
# 在ftpaccess文件中添加
limit all 100 Any /etc/msgs/msg.toomany
解决: 安装wu-ftpd软件包
# Ubuntu/Debian
sudo apt-get install wu-ftpd
# CentOS/RHEL
sudo yum install wu-ftpd
解决: 重启FTP服务器或检查配置
# 重启FTP服务
sudo systemctl restart wu-ftpd
# 检查配置文件语法
sudo wu-ftpd -d
对于现代FTP服务器,可能有不同的监控工具:
systemctl statusftptop或查看日志pure-ftpwho或管理工具netstat、ss统计连接# 使用netstat统计FTP连接数
netstat -tan | grep :21 | grep ESTABLISHED | wc -l
# 使用ss命令统计
ss -tan 'sport = :21' | grep ESTAB | wc -l
# 统计匿名连接(端口21的ESTABLISHED连接)
netstat -tan | grep ':21' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
ftpwho - 显示详细的FTP连接信息ftpshut - 计划关闭FTP服务器ftprestart - 重启FTP服务器netstat - 显示网络连接统计ss - 套接字统计工具ps - 显示进程状态