wiwjxx

请叫我红领巾
管理成员
2022/05/11
2,946
87
12
38
金币
60,072金币
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 "---"
 
最后编辑:

wiwjxx

请叫我红领巾
管理成员
2022/05/11
2,946
87
12
38
金币
60,072金币
群辉系统ssh获取信息的命令
  1. vi collect.sh
  2. 输入 dG (这是 vi 的命令:删除全部内容)
  3. 按 i 进入插入模式,粘贴下面的新代码。
  4. :wq 保存退出。
  5. bash collect.sh 运行。
Bash:
#!/bin/bash
# Synology DSM Optimized V2 - Asset Collector
# Output format: Markdown

echo "### 节点 ID: \`$(hostname)\`"
echo "- **采集时间**: $(date '+%Y-%m-%d %H:%M:%S')"

# 1. System Info
echo "- **系统概况**:"
# 获取 DSM 版本
OS_NAME=$(grep -E "PRETTY_NAME" /etc/os-release 2>/dev/null | cut -d'"' -f2)
[ -z "$OS_NAME" ] && OS_NAME="Synology DSM $(cat /etc/VERSION | grep productversion | cut -d'"' -f2)"

echo "    - **OS**: $OS_NAME"
echo "    - **Kernel**: $(uname -r)"
# 优化 CPU 获取逻辑
CPU_MODEL=$(grep 'model name' /proc/cpuinfo | head -1 | awk -F': ' '{print $2}')
echo "    - **CPU**: $CPU_MODEL ($(grep -c 'processor' /proc/cpuinfo) 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 "- **网络信息**:"
# 过滤掉无用接口,忽略错误信息
for iface in $(ls /sys/class/net/ | grep -vE "lo|docker|veth|br-|sit|tun"); do
    IP_ADDR=$(ip addr show $iface 2>/dev/null | grep "inet " | awk '{print $2}' | cut -d/ -f1 | head -1)
    if [ ! -z "$IP_ADDR" ]; then
        echo "    - **$iface**: \`$IP_ADDR\`"
    fi
done

# 3. Ports
echo "- **监听端口**:"
if command -v netstat >/dev/null 2>&1; then
    PORTS=$(netstat -tunlp 2>/dev/null | grep LISTEN | awk '{print $4}' | awk -F: '{print $NF}' | sort -un | tr '\n' ', ')
    echo "    - \`$PORTS\`"
else
    echo "    - (无法获取: 缺少 netstat 命令)"
fi

# 4. Docker Info
export PATH=$PATH:/usr/local/bin
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)"
    
    CONTAINER_IDS=$(docker ps -q)
    DECLARED_DIRS=""
    FOUND_ANY=0
    
    for CID in $CONTAINER_IDS; do
        # 获取 Working Dir 标签
        WORK_DIR=$(docker inspect --format '{{ index .Config.Labels "com.docker.compose.project.working_dir" }}' $CID)
        
        # 如果有 Working Dir 且没处理过
        if [ ! -z "$WORK_DIR" ] && [[ "$DECLARED_DIRS" != *"$WORK_DIR"* ]]; then
            DECLARED_DIRS="$DECLARED_DIRS $WORK_DIR"
            
            # 尝试找 yaml 文件
            YML_FILE=""
            if [ -f "$WORK_DIR/docker-compose.yml" ]; then
                YML_FILE="$WORK_DIR/docker-compose.yml"
            elif [ -f "$WORK_DIR/docker-compose.yaml" ]; then
                YML_FILE="$WORK_DIR/docker-compose.yaml"
            fi
            
            if [ ! -z "$YML_FILE" ]; then
                FOUND_ANY=1
                PROJECT_NAME=$(basename "$WORK_DIR")
                echo ""
                echo "#### 项目: $PROJECT_NAME"
                echo "**路径**: \`$WORK_DIR\`"
                echo "\`\`\`yaml"
                cat "$YML_FILE" | \
                sed -E 's/(password|secret|key|token)([:=] *).*/\1\2 ****** (Auto-Sanitized)/I' | \
                grep -vE "^\s*#"
                echo "\`\`\`"
            else
                # 有路径但没文件
                echo "- **$WORK_DIR**: 检测到项目路径,但未找到 YAML 文件 (可能已被删除或通过 UI 管理)"
            fi
        fi
    done
    
    if [ "$FOUND_ANY" -eq 0 ]; then
        echo "> 未扫描到基于文件存储的 Docker Compose 配置。容器可能通过 Portainer/UI 或命令行直接创建。"
    fi
else
    echo "- **Docker**: 未安装或未运行"
fi
echo ""
echo "---"