uulog 是UUCP(Unix to Unix Copy)工具集的日志查看工具,用于显示和分析UUCP系统的日志文件。它可以帮助管理员监控文件传输、远程命令执行、系统间通信等活动,是UUCP系统管理和故障排查的重要工具。
uulog 是较老的UUCP系统日志工具,现代Linux系统中通常使用journalctl、rsyslog等工具进行日志管理。但在某些遗留系统或特定应用中可能还会遇到。
# 基本格式
uulog [选项] [系统名]
# 常用格式
uulog -f # 持续监视日志
uulog -s remotesys # 查看特定系统的日志
uulog -u username # 查看特定用户的日志
uulog -x # 显示调试信息
UUCP系统使用多个日志文件记录不同活动:
/var/log/uucp/Log - 主日志文件/var/log/uucp/Debug - 调试日志/var/log/uucp/Stats - 统计信息/var/log/uucp/Admin - 管理日志/var/spool/uucp/.Log/* - 工作日志/var/spool/uucp/.Admin/* - 管理日志UUCP日志记录的活动类型:
现代Linux系统通常不预装UUCP工具,需要手动安装:
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install uucp
# RHEL/CentOS
sudo yum install uucp
# 或
sudo dnf install uucp
# Arch Linux
sudo pacman -S uucp
# 验证安装
which uulog
uulog --help
# 输出示例:uulog (GNU UUCP) 1.07
# 查看日志目录
ls -la /var/log/uucp/
# 如果没有目录,创建它
sudo mkdir -p /var/log/uucp
sudo chown -R uucp:uucp /var/log/uucp
sudo chmod 755 /var/log/uucp
# 创建示例日志文件(用于测试)
sudo mkdir -p /var/spool/uucp/.Log
sudo mkdir -p /var/spool/uucp/.Admin
echo "$(date) UUCICO started" | sudo tee -a /var/log/uucp/Log
echo "$(date) Connection to remotehost established" | sudo tee -a /var/spool/uucp/.Log/uucico/remotehost
查看UUCP系统的基本日志:
# 1. 查看主日志文件
uulog
# 或
cat /var/log/uucp/Log
# 输出示例:
# uucico[1234]: call to remotehost (00:30)
# uucico[1234]: login successful
# uucico[1234]: protocol i g
# uucico[1234]: conversation complete: 12 secs, 0.1 Kbytes sent, 0.5 Kbytes received
# 2. 查看最后20行日志
uulog -n 20
# 或
tail -20 /var/log/uucp/Log
# 3. 持续监视日志
uulog -f
# 类似 tail -f /var/log/uucp/Log
# 按Ctrl+C退出
# 4. 查看特定系统的日志
uulog -s remotehost
# 只显示与remotehost相关的日志
# 5. 查看多个系统的日志
uulog -s remotehost -s server1 -s server2
# 或
grep -E "(remotehost|server1|server2)" /var/log/uucp/Log
# 6. 查看今天的日志
uulog -t today
# 或
grep "$(date +'%b %d')" /var/log/uucp/Log
# 7. 查看最近1小时的日志
uulog -t "1 hour ago"
# 或
awk -v d1="$(date --date='1 hour ago' +'%b %d %H:%M:%S')" \
-v d2="$(date +'%b %d %H:%M:%S')" \
'$0 > d1 && $0 < d2' /var/log/uucp/Log
# 8. 反向显示日志(最新在前)
uulog -r
# 或
tac /var/log/uucp/Log | head -50
使用详细模式分析UUCP日志:
# 1. 查看调试日志
uulog -D
# 或
cat /var/log/uucp/Debug
# 输出详细的调试信息,包括:
# - 连接建立过程
# - 协议协商
# - 数据包传输
# - 错误诊断
# 2. 查看统计日志
uulog -S
# 或
cat /var/log/uucp/Stats
# 输出统计信息,包括:
# - 传输字节数
# - 连接时间
# - 文件数量
# - 错误计数
# 3. 详细模式查看
uulog -v
# 显示更多字段和信息
# 4. 查看特定用户的日志
uulog -u username
# 只显示username用户的UUCP活动
# 5. 查看特定工作目录的日志
ls -la /var/spool/uucp/.Log/
# 查看工作日志目录
cat /var/spool/uucp/.Log/uucico/remotehost
# 查看特定系统的详细工作日志
# 6. 查看管理日志
cat /var/spool/uucp/.Admin/remotehost
# 查看管理相关的日志
# 7. 使用awk分析日志
# 统计每个系统的连接次数
uulog | awk '/call to/ {print $5}' | sort | uniq -c | sort -rn
# 输出示例:
# 15 remotehost
# 8 server1
# 3 server2
# 8. 查找失败的连接
uulog | grep -i "failed\|error\|denied\|reject"
# 或
uulog -v | grep -B2 -A2 "fail"
# 9. 查看传输量最大的连接
uulog | grep "Kbytes\|Mbytes" | sort -k10 -rn | head -10
# 按传输量排序
# 10. 生成每日报告
#!/bin/bash
# 生成UUCP每日活动报告
DATE=$(date +%Y-%m-%d)
REPORT_FILE="/var/log/uucp/report-$DATE.txt"
{
echo "=== UUCP 每日活动报告 $DATE ==="
echo ""
echo "1. 连接统计:"
uulog -t "yesterday" | grep -c "call to"
echo "次连接"
echo ""
echo "2. 各系统连接次数:"
uulog -t "yesterday" | awk '/call to/ {print $5}' | sort | uniq -c | sort -rn
echo ""
echo "3. 传输总量:"
uulog -t "yesterday" | grep "Kbytes\|Mbytes" | awk '{sum += $9} END {print sum " Kbytes"}'
echo ""
echo "4. 失败连接:"
uulog -t "yesterday" | grep -c "failed\|denied"
echo "次失败"
echo ""
echo "5. 最近连接:"
uulog -n 10
} > $REPORT_FILE
echo "报告已生成: $REPORT_FILE"
使用uulog进行UUCP故障排查:
# 1. 实时监控UUCP活动
# 持续监视所有UUCP日志
uulog -f &
# 后台运行
# 查看特定系统
uulog -f -s remotehost &
# 查看调试信息
uulog -f -D &
# 2. 检查连接问题
# 查看最近的连接尝试
uulog | tail -50 | grep -E "call to|connected|failed|timeout"
# 输出示例:
# uucico[5678]: call to remotehost (01:15)
# uucico[5678]: login failed
# uucico[5678]: call failed
# 3. 查看详细的错误信息
uulog -D | grep -B5 -A5 "ERROR\|FAIL\|DENIED"
# 或查看调试日志
tail -100 /var/log/uucp/Debug | grep -v "^#"
# 4. 检查权限问题
uulog | grep -i "permission\|access\|owner"
# 或
grep -r "permission denied" /var/spool/uucp/.Log/
# 5. 查看文件传输问题
uulog | grep -i "transfer\|send\|receive\|file"
# 或
grep -B3 -A3 "transfer" /var/spool/uucp/.Log/*
# 6. 监控特定用户的UUCP活动
# 创建监控脚本
cat > monitor-uucp-user.sh << 'EOF'
#!/bin/bash
USER=$1
LOG_FILE="/var/log/uucp/monitor-$USER.log"
echo "开始监控用户 $USER 的UUCP活动..."
echo "日志文件: $LOG_FILE"
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
NEW_ACTIVITY=$(uulog -u $USER -t "5 minutes ago" 2>/dev/null)
if [ -n "$NEW_ACTIVITY" ]; then
echo "[$TIMESTAMP] 检测到新活动:" >> $LOG_FILE
echo "$NEW_ACTIVITY" >> $LOG_FILE
echo "---" >> $LOG_FILE
echo "检测到 $USER 的UUCP活动,已记录到 $LOG_FILE"
fi
sleep 300 # 5分钟检查一次
done
EOF
chmod +x monitor-uucp-user.sh
# 使用:./monitor-uucp-user.sh username
# 7. 自动故障检测脚本
#!/bin/bash
# 自动检测UUCP问题
LOG_FILE="/var/log/uucp/health-check.log"
THRESHOLD=5 # 失败阈值
check_uucp_health() {
echo "$(date) - 检查UUCP健康状况..." >> $LOG_FILE
# 检查最近1小时的失败连接
FAIL_COUNT=$(uulog -t "1 hour ago" | grep -c "failed\|denied\|timeout")
if [ $FAIL_COUNT -ge $THRESHOLD ]; then
echo "警告: 检测到 $FAIL_COUNT 次失败连接" >> $LOG_FILE
echo "发送警报..." >> $LOG_FILE
# 发送警报邮件
echo "UUCP系统检测到 $FAIL_COUNT 次失败连接" | mail -s "UUCP警报" admin@example.com
fi
# 检查uucico进程
if ! ps aux | grep -q "[u]ucico"; then
echo "错误: uucico进程未运行" >> $LOG_FILE
echo "尝试重启uucico..." >> $LOG_FILE
systemctl restart uucp
fi
# 检查日志文件大小
LOG_SIZE=$(du -m /var/log/uucp/Log | cut -f1)
if [ $LOG_SIZE -gt 100 ]; then
echo "警告: 日志文件过大 ($LOG_SIZE MB)" >> $LOG_FILE
echo "轮转日志文件..." >> $LOG_FILE
mv /var/log/uucp/Log /var/log/uucp/Log.old
systemctl restart uucp
fi
}
# 每小时检查一次
while true; do
check_uucp_health
sleep 3600
done
使用各种工具过滤和分析UUCP日志:
# 1. 使用grep过滤日志
# 查找特定模式的日志
uulog | grep "call to remotehost"
# 查找成功连接
uulog | grep "login successful\|conversation complete"
# 查找大文件传输
uulog | grep "Kbytes\|Mbytes" | grep -v "0.0 Kbytes"
# 2. 使用awk分析日志
# 提取时间戳和事件
uulog | awk '{print $1" "$2" "$3" "$4" "$5" "$6}'
# 统计每小时连接数
uulog | awk '/call to/ {print $3}' | cut -d: -f1 | sort | uniq -c
# 计算平均传输时间
uulog | awk '/secs/ {sum+=$8; count++} END {print "平均时间: " sum/count "秒"}'
# 3. 使用sed处理日志
# 删除调试信息
uulog | sed '/DEBUG/d'
# 提取特定时间范围的日志
uulog | sed -n '/Jan 10 10:00/,/Jan 10 11:00/p'
# 4. 使用cut提取字段
# 提取系统名
uulog | grep "call to" | cut -d' ' -f5
# 提取传输量
uulog | grep "Kbytes" | cut -d' ' -f9,11
# 5. 使用sort和uniq统计
# 统计最活跃的系统
uulog | grep "call to" | cut -d' ' -f5 | sort | uniq -c | sort -rn
# 统计最活跃的用户
uulog | grep "user" | cut -d' ' -f7 | sort | uniq -c | sort -rn
# 6. 使用find查找日志文件
# 查找所有UUCP日志文件
find /var/log -name "*uucp*" -type f
find /var/spool/uucp -name ".*" -type f
# 查找最近修改的日志
find /var/log/uucp -type f -mtime -1
# 7. 使用xargs批量处理
# 搜索所有日志文件中的特定内容
find /var/log/uucp -type f -name "*.log" | xargs grep -l "remotehost"
# 统计所有日志文件大小
find /var/log/uucp -type f -name "*.log" | xargs wc -l
# 8. 高级日志分析脚本
#!/bin/bash
# 高级UUCP日志分析
analyze_uucp_logs() {
LOG_DIR="/var/log/uucp"
OUTPUT="/tmp/uucp-analysis-$(date +%Y%m%d).txt"
echo "=== UUCP日志分析报告 ===" > $OUTPUT
echo "生成时间: $(date)" >> $OUTPUT
echo "" >> $OUTPUT
# 1. 总体统计
echo "1. 总体统计:" >> $OUTPUT
echo "日志文件数量: $(find $LOG_DIR -type f -name "*.log" | wc -l)" >> $OUTPUT
echo "总日志行数: $(find $LOG_DIR -type f -name "*.log" -exec cat {} \; | wc -l)" >> $OUTPUT
echo "" >> $OUTPUT
# 2. 时间范围
echo "2. 日志时间范围:" >> $OUTPUT
find $LOG_DIR -type f -name "*.log" -exec head -1 {} \; | grep -o "^\w\+ \w\+ [0-9]\+" | head -1 | \
xargs -I {} echo "最早: {}" >> $OUTPUT
find $LOG_DIR -type f -name "*.log" -exec tail -1 {} \; | grep -o "^\w\+ \w\+ [0-9]\+" | tail -1 | \
xargs -I {} echo "最近: {}" >> $OUTPUT
echo "" >> $OUTPUT
# 3. 最活跃系统
echo "3. 最活跃系统 (前10):" >> $OUTPUT
find $LOG_DIR -type f -name "*.log" -exec cat {} \; | \
grep "call to" | awk '{print $5}' | sort | uniq -c | sort -rn | head -10 >> $OUTPUT
echo "" >> $OUTPUT
# 4. 错误统计
echo "4. 错误统计:" >> $OUTPUT
echo "总错误数: $(grep -i "fail\|error\|denied\|timeout" $LOG_DIR/*.log 2>/dev/null | wc -l)" >> $OUTPUT
echo "按类型统计:" >> $OUTPUT
grep -i "fail\|error\|denied\|timeout" $LOG_DIR/*.log 2>/dev/null | \
awk '{for(i=1;i<=NF;i++) if(tolower($i)~/fail|error|denied|timeout/) {print $i; break}}' | \
sort | uniq -c | sort -rn >> $OUTPUT
echo "" >> $OUTPUT
# 5. 传输统计
echo "5. 传输统计:" >> $OUTPUT
echo "总传输量: $(grep -h "Kbytes\|Mbytes" $LOG_DIR/*.log 2>/dev/null | \
awk '{if($11=="Kbytes") sum+=$9; else if($11=="Mbytes") sum+=$9 * 1024} END {print sum " Kbytes"}')" >> $OUTPUT
echo "报告已生成: $OUTPUT"
cat $OUTPUT
}
analyze_uucp_logs
管理UUCP日志文件:
# 1. 查看当前日志状态
# 查看日志目录结构
tree /var/log/uucp/
# 或
ls -laR /var/log/uucp/
# 查看日志文件大小
du -sh /var/log/uucp/
du -sh /var/spool/uucp/.Log/
# 查看最老的日志文件
find /var/log/uucp -type f -name "*.log" -exec ls -lt {} + | tail -5
# 2. 手动轮转日志
# 备份当前日志
mv /var/log/uucp/Log /var/log/uucp/Log.$(date +%Y%m%d)
mv /var/log/uucp/Debug /var/log/uucp/Debug.$(date +%Y%m%d)
mv /var/log/uucp/Stats /var/log/uucp/Stats.$(date +%Y%m%d)
# 创建新日志文件
touch /var/log/uucp/Log /var/log/uucp/Debug /var/log/uucp/Stats
chown uucp:uucp /var/log/uucp/*.log
chmod 644 /var/log/uucp/*.log
# 重启UUCP服务
systemctl restart uucp
# 3. 清理旧日志
# 删除30天前的日志
find /var/log/uucp -name "*.log.*" -mtime +30 -delete
find /var/spool/uucp/.Log -type f -mtime +30 -delete
find /var/spool/uucp/.Admin -type f -mtime +30 -delete
# 压缩旧日志
find /var/log/uucp -name "*.log.*" -mtime +7 -exec gzip {} \;
# 4. 配置logrotate自动管理
# 创建logrotate配置文件
cat > /etc/logrotate.d/uucp << 'EOF'
/var/log/uucp/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 644 uucp uucp
sharedscripts
postrotate
systemctl reload uucp >/dev/null 2>&1 || true
endscript
}
/var/spool/uucp/.Log/*/* {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 640 uucp uucp
}
EOF
# 测试logrotate配置
logrotate -d /etc/logrotate.d/uucp
# 手动执行轮转
logrotate -f /etc/logrotate.d/uucp
# 5. 日志归档脚本
#!/bin/bash
# UUCP日志归档脚本
BACKUP_DIR="/backup/uucp-logs"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=90
# 创建备份目录
mkdir -p $BACKUP_DIR
# 归档当前日志
tar -czf $BACKUP_DIR/uucp-logs-$DATE.tar.gz \
/var/log/uucp/ \
/var/spool/uucp/.Log/ \
/var/spool/uucp/.Admin/ 2>/dev/null
# 记录归档信息
echo "$(date) - 归档完成: $BACKUP_DIR/uucp-logs-$DATE.tar.gz" >> $BACKUP_DIR/archive.log
# 清理旧备份
find $BACKUP_DIR -name "uucp-logs-*.tar.gz" -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name "archive.log" -mtime +365 -delete
# 6. 监控日志增长
#!/bin/bash
# 监控UUCP日志增长
LOG_DIR="/var/log/uucp"
THRESHOLD_MB=100
CHECK_INTERVAL=3600 # 1小时
while true; do
# 计算日志总大小
SIZE_MB=$(du -sm $LOG_DIR | cut -f1)
if [ $SIZE_MB -gt $THRESHOLD_MB ]; then
echo "$(date) - 警告: UUCP日志大小 ${SIZE_MB}MB 超过阈值 ${THRESHOLD_MB}MB" | \
tee -a /var/log/uucp-monitor.log
# 发送警报
echo "UUCP日志大小: ${SIZE_MB}MB" | mail -s "UUCP日志警报" admin@example.com
# 自动轮转
systemctl reload uucp
fi
sleep $CHECK_INTERVAL
done
# 7. 日志分析报告
#!/bin/bash
# 生成UUCP日志分析报告
REPORT_FILE="/var/log/uucp/report-$(date +%Y%m%d).html"
# 生成HTML报告
cat > $REPORT_FILE << EOF
<!DOCTYPE html>
<html>
<head>
<title>UUCP日志分析报告</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
.section { margin: 20px 0; padding: 15px; border: 1px solid #ddd; }
.error { color: #d00; }
.warning { color: #f90; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>UUCP日志分析报告</h1>
<p>生成时间: $(date)</p>
<div class="section">
<h2>总体统计</h2>
<pre>$(uulog | wc -l) 行日志</pre>
<pre>$(grep -c "call to" /var/log/uucp/Log) 次连接</pre>
</div>
<div class="section">
<h2>系统活跃度</h2>
<table>
<tr><th>系统</th><th>连接次数</th></tr>
$(uulog | grep "call to" | awk '{print $5}' | sort | uniq -c | sort -rn | \
awk '{print "<tr><td>" $2 "</td><td>" $1 "</td></tr>"}')
</table>
</div>
<div class="section">
<h2>错误统计</h2>
<table>
<tr><th>错误类型</th><th>次数</th></tr>
$(grep -i "fail\|error\|denied\|timeout" /var/log/uucp/Log | \
awk '{for(i=1;i<=NF;i++) if(tolower($i)~/fail|error|denied|timeout/) {print $i; break}}' | \
sort | uniq -c | sort -rn | \
awk '{print "<tr><td>" $2 "</td><td>" $1 "</td></tr>"}')
</table>
</div>
</body>
</html>
EOF
echo "报告已生成: $REPORT_FILE"
使用脚本自动化UUCP故障排查:
#!/bin/bash
# 文件名: uucp-troubleshoot.sh
# UUCP故障排查脚本
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志文件
LOG_FILE="/var/log/uucp-troubleshoot.log"
# 函数:记录日志
log() {
echo -e "$1"
echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}
# 函数:检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
log "${RED}错误: $1 命令未找到${NC}"
return 1
fi
return 0
}
# 函数:检查服务状态
check_service() {
log "${BLUE}[步骤1] 检查UUCP服务状态...${NC}"
# 检查uucico进程
if ps aux | grep -q "[u]ucico"; then
log "${GREEN}✓ uucico进程正在运行${NC}"
else
log "${RED}✗ uucico进程未运行${NC}"
log "${YELLOW}尝试启动UUCP服务...${NC}"
systemctl start uucp
sleep 2
fi
# 检查uuxqt进程
if ps aux | grep -q "[u]uxqt"; then
log "${GREEN}✓ uuxqt进程正在运行${NC}"
else
log "${RED}✗ uuxqt进程未运行${NC}"
fi
# 检查系统服务状态
if systemctl is-active uucp &> /dev/null; then
log "${GREEN}✓ UUCP系统服务正在运行${NC}"
else
log "${RED}✗ UUCP系统服务未运行${NC}"
fi
}
# 函数:检查日志文件
check_logs() {
log "${BLUE}[步骤2] 检查日志文件...${NC}"
# 检查日志目录
if [ -d "/var/log/uucp" ]; then
log "${GREEN}✓ 日志目录存在: /var/log/uucp${NC}"
# 检查主日志文件
if [ -f "/var/log/uucp/Log" ]; then
LOG_SIZE=$(du -h /var/log/uucp/Log | cut -f1)
LOG_LINES=$(wc -l < /var/log/uucp/Log)
log "${GREEN}✓ 主日志文件存在: $LOG_SIZE, $LOG_LINES 行${NC}"
# 检查最近错误
log "${YELLOW}最近错误:${NC}"
tail -20 /var/log/uucp/Log | grep -i "error\|fail\|denied\|timeout" | head -5 || \
log "${GREEN}没有发现最近错误${NC}"
else
log "${RED}✗ 主日志文件不存在${NC}"
fi
# 检查调试日志
if [ -f "/var/log/uucp/Debug" ]; then
log "${GREEN}✓ 调试日志文件存在${NC}"
fi
else
log "${RED}✗ 日志目录不存在${NC}"
log "${YELLOW}创建日志目录...${NC}"
mkdir -p /var/log/uucp
chown uucp:uucp /var/log/uucp
fi
}
# 函数:检查权限
check_permissions() {
log "${BLUE}[步骤3] 检查权限...${NC}"
# 检查spool目录权限
if [ -d "/var/spool/uucp" ]; then
PERM=$(stat -c "%a %U %G" /var/spool/uucp)
if [[ $PERM =~ "755 uucp uucp" ]]; then
log "${GREEN}✓ spool目录权限正确: $PERM${NC}"
else
log "${RED}✗ spool目录权限错误: $PERM${NC}"
log "${YELLOW}应为: 755 uucp uucp${NC}"
fi
fi
# 检查日志目录权限
if [ -d "/var/log/uucp" ]; then
PERM=$(stat -c "%a %U %G" /var/log/uucp)
if [[ $PERM =~ "755 uucp uucp" ]]; then
log "${GREEN}✓ 日志目录权限正确: $PERM${NC}"
else
log "${RED}✗ 日志目录权限错误: $PERM${NC}"
fi
fi
}
# 函数:检查配置
check_config() {
log "${BLUE}[步骤4] 检查配置...${NC}"
# 检查配置文件
CONFIG_FILES="/etc/uucp/sys /etc/uucp/config /etc/uucp/port"
for file in $CONFIG_FILES; do
if [ -f "$file" ]; then
log "${GREEN}✓ 配置文件存在: $file${NC}"
# 检查配置文件语法
if [ "$file" = "/etc/uucp/sys" ]; then
SYSTEMS=$(grep -c "^system" $file 2>/dev/null || echo 0)
log "${YELLOW} 配置了 $SYSTEMS 个系统${NC}"
fi
else
log "${RED}✗ 配置文件不存在: $file${NC}"
fi
done
}
# 函数:检查网络连接
check_network() {
log "${BLUE}[步骤5] 检查网络连接...${NC}"
# 从配置中获取系统列表
if [ -f "/etc/uucp/sys" ]; then
SYSTEMS=$(grep "^system" /etc/uucp/sys | awk '{print $2}' | head -3)
for system in $SYSTEMS; do
log "${YELLOW}测试连接系统: $system${NC}"
# 尝试解析主机名
if host $system &> /dev/null; then
log "${GREEN}✓ DNS解析成功: $system${NC}"
else
log "${RED}✗ DNS解析失败: $system${NC}"
fi
# 尝试ping
if ping -c 2 -W 1 $system &> /dev/null; then
log "${GREEN}✓ Ping成功: $system${NC}"
else
log "${RED}✗ Ping失败: $system${NC}"
fi
done
fi
}
# 函数:检查最近活动
check_recent_activity() {
log "${BLUE}[步骤6] 检查最近活动...${NC}"
# 检查最近24小时的活动
RECENT_COUNT=$(uulog -t "yesterday" 2>/dev/null | wc -l)
if [ $RECENT_COUNT -gt 0 ]; then
log "${GREEN}✓ 最近24小时有 $RECENT_COUNT 行日志${NC}"
# 显示最近活动
log "${YELLOW}最近5条日志:${NC}"
uulog -n 5 2>/dev/null || log "${RED}无法读取日志${NC}"
else
log "${RED}✗ 最近24小时没有日志活动${NC}"
fi
# 检查作业队列
if command -v uustat &> /dev/null; then
QUEUE_COUNT=$(uustat -a 2>/dev/null | wc -l)
if [ $QUEUE_COUNT -gt 0 ]; then
log "${YELLOW}有 $((QUEUE_COUNT-1)) 个作业在队列中${NC}"
uustat -a 2>/dev/null | head -5
else
log "${GREEN}✓ 作业队列为空${NC}"
fi
fi
}
# 函数:生成报告
generate_report() {
log "${BLUE}[步骤7] 生成故障排查报告...${NC}"
REPORT_FILE="/tmp/uucp-troubleshoot-$(date +%Y%m%d-%H%M%S).txt"
{
echo "=== UUCP故障排查报告 ==="
echo "生成时间: $(date)"
echo "主机名: $(hostname)"
echo ""
echo "1. 服务状态:"
ps aux | grep -E "[u]ucico|[u]uxqt"
echo ""
echo "2. 最近错误:"
tail -50 /var/log/uucp/Log 2>/dev/null | grep -i "error\|fail\|denied" | tail -10
echo ""
echo "3. 配置摘要:"
ls -la /etc/uucp/
echo ""
echo "4. 权限检查:"
ls -ld /var/spool/uucp /var/log/uucp
echo ""
echo "5. 日志文件状态:"
find /var/log/uucp -type f -exec du -h {} \;
} > $REPORT_FILE
log "${GREEN}报告已生成: $REPORT_FILE${NC}"
echo ""
log "${YELLOW}=== 故障排查完成 ===${NC}"
# 显示报告摘要
tail -20 $REPORT_FILE
}
# 主函数
main() {
echo -e "${BLUE}=== 开始UUCP故障排查 ===${NC}"
echo "日志文件: $LOG_FILE"
echo ""
# 检查必要命令
check_command uulog || exit 1
# 执行检查步骤
check_service
check_logs
check_permissions
check_config
check_network
check_recent_activity
generate_report
}
# 运行主函数
main
journalctlsystemd日志查看工具,替代uulog查看系统日志。
# 查看系统日志
journalctl
# 查看特定服务
journalctl -u uucp
# 实时查看
journalctl -f
# 按时间过滤
journalctl --since "2023-01-01" --until "2023-12-31"
# 查看错误
journalctl -p err
rsyslog现代系统日志守护进程,功能强大。
# 查看配置
cat /etc/rsyslog.conf
# 测试配置
rsyslogd -N1
# 查看日志
tail -f /var/log/syslog
# 自定义日志规则
# 在/etc/rsyslog.d/中添加配置
logrotate日志轮转工具,管理日志文件。
# 配置日志轮转
nano /etc/logrotate.d/myapp
# 手动轮转
logrotate -f /etc/logrotate.conf
# 测试配置
logrotate -d /etc/logrotate.d/myapp
multitail多窗口日志查看工具。
# 同时查看多个日志
multitail /var/log/uucp/Log /var/log/uucp/Debug
# 颜色高亮
multitail -cS syslog /var/log/syslog
# 合并显示
multitail -mergeall /var/log/*.log
可能原因和解决方案:
# 检查安装
which uulog
# 如未安装
sudo apt-get install uucp # Debian/Ubuntu
sudo yum install uucp # RHEL/CentOS
sudo mkdir -p /var/log/uucp
sudo chown uucp:uucp /var/log/uucp
sudo chmod 755 /var/log/uucp
# 创建空日志文件
sudo touch /var/log/uucp/Log
sudo chown uucp:uucp /var/log/uucp/*
ls -la /var/log/uucp/
# 应该是 uucp:uucp 和 755 权限
# 修复权限
sudo chown -R uucp:uucp /var/log/uucp
sudo chmod 755 /var/log/uucp
# 手动生成测试日志
sudo su - uucp -c "echo '测试日志' >> /var/log/uucp/Log"
# 然后查看
uulog
uulog -l /var/log/uucp/Log
# 或直接查看
cat /var/log/uucp/Log
迁移步骤:
# 编辑UUCP配置
sudo nano /etc/uucp/config
# 添加:
logfile = /var/log/syslog
# 或配置rsyslog转发
sudo nano /etc/rsyslog.d/10-uucp.conf
# 添加:
if $programname == 'uucp' then /var/log/uucp.log
# 重启服务
sudo systemctl restart rsyslog uucp
# 查看UUCP日志
journalctl -u uucp
# 实时查看
journalctl -u uucp -f
# 导出旧日志
journalctl -u uucp --since "2020-01-01" > uucp-history.log
# 创建logrotate配置
sudo nano /etc/logrotate.d/uucp
# 内容:
/var/log/uucp/*.log {
daily
rotate 30
compress
missingok
notifempty
create 640 uucp uucp
sharedscripts
postrotate
systemctl reload uucp >/dev/null 2>&1 || true
endscript
}
# 使用logwatch
sudo apt-get install logwatch
# 配置监控UUCP日志
# 或使用fail2ban
sudo apt-get install fail2ban
# 配置监控UUCP失败登录
#!/bin/bash
# 迁移UUCP日志到syslog
OLD_LOG="/var/log/uucp/Log"
NEW_LOG="/var/log/syslog"
if [ -f "$OLD_LOG" ]; then
# 转换时间戳格式
awk '{print strftime("%b %d %H:%M:%S"), $0}' "$OLD_LOG" >> "$NEW_LOG"
# 备份旧日志
mv "$OLD_LOG" "$OLD_LOG.$(date +%Y%m%d).bak"
# 配置UUCP使用syslog
echo "logfile = /var/log/syslog" >> /etc/uucp/config
fi
安全监控配置:
#!/bin/bash
# 实时监控UUCP安全事件
while true; do
# 检查失败登录
FAIL_COUNT=$(uulog -t "5 minutes ago" 2>/dev/null | grep -c "failed\|denied")
if [ $FAIL_COUNT -gt 3 ]; then
echo "警报: $FAIL_COUNT 次失败登录尝试" | \
mail -s "UUCP安全警报" admin@example.com
fi
# 检查异常时间活动
HOUR=$(date +%H)
if [ $HOUR -gt 22 ] || [ $HOUR -lt 6 ]; then
NIGHT_COUNT=$(uulog -t "1 hour ago" 2>/dev/null | grep -c "call to")
if [ $NIGHT_COUNT -gt 0 ]; then
echo "警报: 夜间UUCP活动" | \
mail -s "UUCP夜间活动警报" admin@example.com
fi
fi
sleep 300 # 5分钟检查一次
done
# 配置fail2ban监控UUCP
sudo nano /etc/fail2ban/jail.local
# 添加:
[uucp]
enabled = true
port = 540
filter = uucp
logpath = /var/log/uucp/Log
maxretry = 3
bantime = 3600
# 创建过滤器
sudo nano /etc/fail2ban/filter.d/uucp.conf
# 内容:
[Definition]
failregex = ^.*login failed.*$
^.*permission denied.*$
ignoreregex =
# 安装审计工具
sudo apt-get install auditd
# 监控UUCP相关文件
sudo auditctl -w /etc/uucp/ -p wa -k uucp_config
sudo auditctl -w /var/log/uucp/ -p wa -k uucp_logs
# 查看审计日志
ausearch -k uucp_config
#!/bin/bash
# UUCP安全扫描脚本
SCAN_DATE=$(date +%Y%m%d)
REPORT="/var/log/uucp/security-scan-$SCAN_DATE.txt"
{
echo "=== UUCP安全扫描报告 $SCAN_DATE ==="
echo ""
# 1. 检查配置文件权限
echo "1. 配置文件权限:"
find /etc/uucp -type f -exec ls -la {} \;
# 2. 检查日志中的可疑活动
echo ""
echo "2. 可疑活动检查:"
grep -i "failed\|denied\|error\|warning" /var/log/uucp/Log | tail -20
# 3. 检查异常连接
echo ""
echo "3. 异常连接检查:"
uulog | awk '/call to/ {print $5}' | sort | uniq -c | sort -rn
# 4. 检查系统账号
echo ""
echo "4. UUCP账号检查:"
grep -E "^uucp|^uucpa" /etc/passwd
grep -E "^uucp" /etc/shadow
} > $REPORT
echo "安全扫描完成: $REPORT"
日志备份和分析策略:
#!/bin/bash
# UUCP日志备份脚本
BACKUP_DIR="/backup/uucp-logs"
DATE=$(date +%Y%m%d)
RETENTION_DAYS=365
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份当前日志
cp -r /var/log/uucp/* $BACKUP_DIR/$DATE/
cp -r /var/spool/uucp/.Log $BACKUP_DIR/$DATE/
cp -r /var/spool/uucp/.Admin $BACKUP_DIR/$DATE/
# 压缩备份
tar -czf $BACKUP_DIR/uucp-logs-$DATE.tar.gz -C $BACKUP_DIR $DATE
# 清理临时目录
rm -rf $BACKUP_DIR/$DATE
# 删除旧备份
find $BACKUP_DIR -name "uucp-logs-*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "备份完成: $BACKUP_DIR/uucp-logs-$DATE.tar.gz"
# 创建数据库表
CREATE TABLE uucp_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
log_date DATETIME,
system_name VARCHAR(100),
event_type VARCHAR(50),
message TEXT,
bytes_sent INT,
bytes_received INT,
duration INT
);
# 导入日志到数据库
# 使用脚本解析日志并插入数据库
#!/bin/bash
while IFS= read -r line; do
# 解析日志行
# 插入数据库
mysql -u user -p db -e "INSERT INTO uucp_logs ..."
done < /var/log/uucp/Log
# 查询分析
# 最活跃系统
SELECT system_name, COUNT(*) as connections
FROM uucp_logs
GROUP BY system_name
ORDER BY connections DESC;
# 传输统计
SELECT DATE(log_date) as day,
SUM(bytes_sent) as sent,
SUM(bytes_received) as received
FROM uucp_logs
GROUP BY day;
# 配置Logstash收集UUCP日志
# logstash-uucp.conf
input {
file {
path => "/var/log/uucp/Log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{DATA:program}\[%{NUMBER:pid}\]: %{GREEDYDATA:message}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "uucp-%{+YYYY.MM.dd}"
}
}
# 在Kibana中可视化
# 创建仪表板显示:
# - 连接趋势图
# - 错误率
# - 传输量统计
# - 最活跃系统
# 归档到云存储
# 使用AWS S3
aws s3 cp /backup/uucp-logs-20230101.tar.gz s3://my-bucket/uucp-logs/
# 或使用rsync到远程服务器
rsync -avz /backup/uucp-logs-*.tar.gz user@backup-server:/backup/uucp/
# 设置保留策略
# 本地: 1年
# 云存储: 7年
# 磁带归档: 永久
# 验证备份完整性
sha256sum /backup/uucp-logs-20230101.tar.gz > /backup/uucp-logs-20230101.sha256
# 恢复时验证
sha256sum -c /backup/uucp-logs-20230101.sha256