Skip to content

Instantly share code, notes, and snippets.

@renfei
Created May 19, 2026 03:08
Show Gist options
  • Select an option

  • Save renfei/cd97b10c8d96dd52d6603afcd77210b1 to your computer and use it in GitHub Desktop.

Select an option

Save renfei/cd97b10c8d96dd52d6603afcd77210b1 to your computer and use it in GitHub Desktop.
服务器环境信息采集脚本
#!/bin/sh
OUT="env_collect_$(hostname 2>/dev/null || echo unknown)_$(date +%Y%m%d_%H%M%S).txt"
run() {
echo ""
echo "===== $1 ====="
shift
"$@" 2>&1
}
{
echo "环境采集时间: $(date)"
echo "主机名: $(hostname 2>/dev/null)"
echo "当前用户: $(whoami 2>/dev/null)"
run "UNAME" uname -a
run "ARCH" uname -m
echo ""
echo "===== OS RELEASE FILES ====="
for f in \
/etc/os-release \
/etc/issue \
/etc/redhat-release \
/etc/centos-release \
/etc/rocky-release \
/etc/almalinux-release \
/etc/openEuler-release \
/etc/kylin-release \
/etc/uos-release \
/etc/debian_version
do
if [ -f "$f" ]; then
echo "--- $f ---"
cat "$f" 2>&1
fi
done
echo ""
echo "===== PACKAGE TYPE ====="
if command -v rpm >/dev/null 2>&1; then
echo "rpm: yes"
rpm --version 2>&1 | head -n 1
else
echo "rpm: no"
fi
if command -v dpkg >/dev/null 2>&1; then
echo "dpkg: yes"
dpkg --version 2>&1 | head -n 1
else
echo "dpkg: no"
fi
if command -v yum >/dev/null 2>&1; then
echo "yum: yes"
fi
if command -v dnf >/dev/null 2>&1; then
echo "dnf: yes"
fi
if command -v apt >/dev/null 2>&1; then
echo "apt: yes"
fi
run "CPU lscpu" lscpu
run "CPU /proc/cpuinfo head" sh -c "cat /proc/cpuinfo 2>/dev/null | head -n 80"
run "MEMORY" sh -c "free -h 2>/dev/null || cat /proc/meminfo 2>/dev/null | head"
run "DISK df" df -h
run "DISK lsblk" lsblk
run "MOUNT" mount
run "GLIBC / LIBC" sh -c "ldd --version 2>&1 | head -n 5 || true"
run "SYSTEMD" sh -c "systemctl --version 2>&1 | head -n 3 || ps -p 1 -o comm= 2>/dev/null"
run "NETWORK ip addr" sh -c "ip addr 2>/dev/null || ifconfig -a 2>/dev/null"
run "ROUTE" sh -c "ip route 2>/dev/null || route -n 2>/dev/null"
run "DNS" cat /etc/resolv.conf
run "FIREWALL" sh -c "systemctl status firewalld 2>/dev/null | head -n 20; iptables -L -n 2>/dev/null | head -n 80"
run "SELINUX" sh -c "getenforce 2>/dev/null || sestatus 2>/dev/null || echo 'SELinux command not found'"
run "APPARMOR" sh -c "aa-status 2>/dev/null || echo 'AppArmor command not found'"
run "DOCKER" sh -c "docker --version 2>/dev/null; docker info 2>/dev/null | head -n 80"
run "PODMAN" sh -c "podman --version 2>/dev/null; podman info 2>/dev/null | head -n 80"
run "JAVA" sh -c "java -version 2>&1; echo JAVA_HOME=$JAVA_HOME"
run "PYTHON" sh -c "python --version 2>&1; python3 --version 2>&1"
run "GCC" sh -c "gcc --version 2>/dev/null | head -n 1"
run "VIRTUALIZATION" sh -c "systemd-detect-virt 2>/dev/null || virt-what 2>/dev/null || echo unknown"
run "PORTS" sh -c "ss -lntup 2>/dev/null || netstat -lntup 2>/dev/null"
} > "$OUT"
echo "采集完成:$OUT"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment