linux服务器获取信息的命令
Bash:
#!/bin/bash
# Server & Docker Asset Collector for Dify RAG
# Output format: Markdown
echo "### 节点 ID: \`$(hostname)\`"
echo "- **采集时间**: $(date '+%Y-%m-%d %H:%M:%S')"
# 1. System Info
echo "- **系统概况**:"
echo " - **OS**: $(grep -E "PRETTY_NAME" /etc/os-release | cut -d'"' -f2)"
echo " - **Kernel**: $(uname -r)"
echo " - **CPU**: $(lscpu | grep 'Model name' | awk -F: '{print $2}' | xargs) ($(nproc) Cores)"
echo " - **RAM**: $(free -h | grep Mem | awk '{print $2}') Total / $(free -h | grep Mem | awk '{print $3}') Used"
echo " - **Disk**: $(df -h / | tail -1 | awk '{print $2}') Total / $(df -h / | tail -1 | awk '{print $5}') Used"
# 2. Network Info
echo "- **网络信息**:"
IP_INFO=$(ip -br a | grep -vE "lo|docker|veth|br-")
while IFS= read -r line; do
IFACE=$(echo $line | awk '{print $1}')
IP=$(echo $line | awk '{print $3}')
echo " - **$IFACE**: \`$IP\`"
done <<< "$IP_INFO"
# 3. Ports
echo "- **监听端口**:"
PORTS=$(ss -tulpn | grep LISTEN | awk '{print $5}' | cut -d: -f2 | sort -un | tr '\n' ', ')
echo " - \`$PORTS\`"
# 4. Docker Info
if command -v docker >/dev/null 2>&1; then
echo "- **Docker 容器列表**:"
echo ""
echo "| 容器名称 | 镜像 | 状态 | 端口映射 | 挂载卷 (部分) |"
echo "| :--- | :--- | :--- | :--- | :--- |"
docker ps -a --format "table {{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.Mounts}}" | sed '1d' | awk -F'|' '{printf "| `%s` | `%s` | %s | `%s` | %s |\n", $1, $2, $3, $4, $5}'
echo ""
echo "### 部署详情 (Deployment Config)"
# Attempt to find docker-compose files from running containers
# Logic: Find working_dir label -> check for docker-compose.yml -> cat and sanitize
CONTAINER_IDS=$(docker ps -q)
DECLARED_DIRS=""
for CID in $CONTAINER_IDS; do
WORK_DIR=$(docker inspect --format '{{ index .Config.Labels "com.docker.compose.project.working_dir" }}' $CID)
if [ ! -z "$WORK_DIR" ] && [[ "$DECLARED_DIRS" != *"$WORK_DIR"* ]]; then
DECLARED_DIRS="$DECLARED_DIRS $WORK_DIR"
YML_FILE="$WORK_DIR/docker-compose.yml"
if [ ! -f "$YML_FILE" ]; then
YML_FILE="$WORK_DIR/docker-compose.yaml"
fi
if [ -f "$YML_FILE" ]; then
echo ""
echo "**项目路径**: \`$WORK_DIR\`"
echo "\`\`\`yaml"
# Read file, remove blank lines, mask sensitive keys
cat "$YML_FILE" | \
sed -E 's/(password|secret|key|token)([:=] *).*/\1\2 ****** (Auto-Sanitized)/I' | \
grep -vE "^\s*#"
echo "\`\`\`"
fi
fi
done
else
echo "- **Docker**: 未安装"
fi
echo ""
echo "---"
最后编辑: