本文目录导读:

我来帮您编写一个自动收集诊断信息的脚本,这里提供几个常用系统的版本:
Linux 系统诊断收集脚本
#!/bin/bash
# 系统诊断信息收集脚本
# 文件名: collect_diagnostics.sh
# 设置输出目录
OUTPUT_DIR="./diagnostics_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$OUTPUT_DIR"
echo "开始收集系统诊断信息..."
# 1. 系统基本信息
echo "=== 系统基本信息 ===" > "$OUTPUT_DIR/system_info.txt"
uname -a >> "$OUTPUT_DIR/system_info.txt"
cat /etc/os-release 2>/dev/null >> "$OUTPUT_DIR/system_info.txt"
echo "主机名: $(hostname)" >> "$OUTPUT_DIR/system_info.txt"
# 2. CPU 信息
echo "=== CPU 信息 ===" > "$OUTPUT_DIR/cpu_info.txt"
lscpu >> "$OUTPUT_DIR/cpu_info.txt"
echo "CPU 使用率:" >> "$OUTPUT_DIR/cpu_info.txt"
top -bn1 | head -5 >> "$OUTPUT_DIR/cpu_info.txt"
# 3. 内存信息
echo "=== 内存信息 ===" > "$OUTPUT_DIR/memory_info.txt"
free -h >> "$OUTPUT_DIR/memory_info.txt"
echo -e "\n内存详细:" >> "$OUTPUT_DIR/memory_info.txt"
cat /proc/meminfo >> "$OUTPUT_DIR/memory_info.txt"
# 4. 磁盘信息
echo "=== 磁盘信息 ===" > "$OUTPUT_DIR/disk_info.txt"
df -h >> "$OUTPUT_DIR/disk_info.txt"
echo -e "\n磁盘分区:" >> "$OUTPUT_DIR/disk_info.txt"
lsblk >> "$OUTPUT_DIR/disk_info.txt"
# 5. 网络信息
echo "=== 网络信息 ===" > "$OUTPUT_DIR/network_info.txt"
ip addr >> "$OUTPUT_DIR/network_info.txt"
echo -e "\n路由表:" >> "$OUTPUT_DIR/network_info.txt"
route -n >> "$OUTPUT_DIR/network_info.txt"
echo -e "\nDNS 配置:" >> "$OUTPUT_DIR/network_info.txt"
cat /etc/resolv.conf >> "$OUTPUT_DIR/network_info.txt"
# 6. 进程信息
echo "=== 进程信息 ===" > "$OUTPUT_DIR/process_info.txt"
ps aux --sort=-%cpu | head -20 >> "$OUTPUT_DIR/process_info.txt"
echo -e "\n\n内存占用前10:" >> "$OUTPUT_DIR/process_info.txt"
ps aux --sort=-%mem | head -11 >> "$OUTPUT_DIR/process_info.txt"
# 7. 服务状态
echo "=== 服务状态 ===" > "$OUTPUT_DIR/services_info.txt"
systemctl list-units --type=service --state=running >> "$OUTPUT_DIR/services_info.txt"
# 8. 日志信息(最近100条)
echo "=== 系统日志 ===" > "$OUTPUT_DIR/system_logs.txt"
journalctl -n 100 --no-pager >> "$OUTPUT_DIR/system_logs.txt"
# 9. 安全信息
echo "=== 安全信息 ===" > "$OUTPUT_DIR/security_info.txt"
echo "登录用户:" >> "$OUTPUT_DIR/security_info.txt"
who >> "$OUTPUT_DIR/security_info.txt"
echo -e "\n最近登录:" >> "$OUTPUT_DIR/security_info.txt"
last -5 >> "$OUTPUT_DIR/security_info.txt"
# 10. 打包诊断文件
echo "正在打包诊断文件..."
tar -czf "${OUTPUT_DIR}.tar.gz" -C "$OUTPUT_DIR" .
echo "诊断收集完成!文件保存在: ${OUTPUT_DIR}.tar.gz"
# 清理临时文件
rm -rf "$OUTPUT_DIR"
Windows 系统诊断收集脚本 (PowerShell)
# 系统诊断信息收集脚本
# 文件名: collect_diagnostics.ps1
$outputDir = "diagnostics_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
New-Item -ItemType Directory -Path $outputDir -Force | Out-Null
Write-Host "开始收集系统诊断信息..." -ForegroundColor Green
# 1. 系统基本信息
Get-ComputerInfo | Out-File "$outputDir\system_info.txt"
# 2. CPU 信息
Get-CimInstance Win32_Processor | Format-List * | Out-File "$outputDir\cpu_info.txt"
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 |
Format-Table Name, CPU, WorkingSet, StartTime | Out-File "$outputDir\process_cpu.txt"
# 3. 内存信息
Get-CimInstance Win32_OperatingSystem |
Select-Object TotalVisibleMemorySize, FreePhysicalMemory, TotalVirtualMemorySize, FreeVirtualMemory |
Format-Table | Out-File "$outputDir\memory_info.txt"
# 4. 磁盘信息
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
Select-Object DeviceID, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}},
@{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}} |
Format-Table | Out-File "$outputDir\disk_info.txt"
# 5. 网络信息
Get-NetAdapter | Format-Table Name, Status, LinkSpeed, MacAddress | Out-File "$outputDir\network_info.txt"
Get-NetIPAddress | Where-Object AddressFamily -eq IPv4 |
Select-Object InterfaceAlias, IPAddress, PrefixLength |
Format-Table | Out-File -Append "$outputDir\network_info.txt"
# 6. 服务状态
Get-Service | Where-Object Status -eq "Running" |
Select-Object Name, DisplayName, Status |
Format-Table | Out-File "$outputDir\services_info.txt"
# 7. 事件日志(最近100条系统日志)
Get-EventLog -LogName System -Newest 100 |
Select-Object TimeGenerated, EntryType, Source, Message |
Format-Table -Wrap | Out-File "$outputDir\system_logs.txt"
# 8. 硬件信息
Get-CimInstance Win32_SystemEnclosure |
Select-Object Manufacturer, Model, SerialNumber |
Format-Table | Out-File "$outputDir\hardware_info.txt"
# 打包
Compress-Archive -Path "$outputDir\*" -DestinationPath "$outputDir.zip"
Write-Host "诊断收集完成!文件保存在: $outputDir.zip" -ForegroundColor Green
Remove-Item -Path $outputDir -Recurse -Force
用法说明
Linux 系统:
# 赋予执行权限 chmod +x collect_diagnostics.sh # 运行脚本 ./collect_diagnostics.sh
Windows 系统:
# 如果执行策略限制,先设置 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # 运行脚本 .\collect_diagnostics.ps1
增强版本(带参数和错误处理)
#!/bin/bash
# 增强版诊断收集脚本
VERSION="1.0"
usage() {
echo "用法: $0 [选项]"
echo "选项:"
echo " -o, --output DIR 指定输出目录"
echo " -l, --log-count N 收集的日志数量(默认100)"
echo " -v, --verbose 详细输出"
echo " -h, --help 显示帮助信息"
exit 1
}
# 参数解析
while [[ $# -gt 0 ]]; do
case $1 in
-o|--output)
OUTPUT_DIR="$2"
shift 2
;;
-l|--log-count)
LOG_COUNT="$2"
shift 2
;;
-v|--verbose)
VERBOSE=true
shift
;;
-h|--help)
usage
;;
*)
echo "未知参数: $1"
usage
;;
esac
done
# 设置默认值
OUTPUT_DIR=${OUTPUT_DIR:-"./diagnostics_$(date +%Y%m%d_%H%M%S)"}
LOG_COUNT=${LOG_COUNT:-100}
# 检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
echo "警告: 命令 $1 未找到"
return 1
fi
return 0
}
# 主函数
main() {
echo "诊断收集工具 v$VERSION"
echo "输出目录: $OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR" || {
echo "错误: 无法创建输出目录"
exit 1
}
# 收集信息...
# (这里插入上面的诊断收集代码)
# 错误处理示例
if [ $? -eq 0 ]; then
echo "诊断收集成功完成"
else
echo "诊断收集过程中出现错误"
exit 1
fi
}
main
这些脚本可以:
- 收集系统核心信息
- 自动生成时间戳文件
- 打包压缩便于传输
- 添加了错误处理和参数选项
根据您的具体需求,可以调整收集的内容和格式。