ANALYSIS
PRTCL // SHELL
#要求: #显示系统版本,系统名称 #显示用户名称 #显示 cpu 型号,核心数量 #显示内存大小,可用内存大小 #显示系统盘总大小,还有多少 GB 可用PRTCL // SHELL
#!/bin/bash# 说明:这是一个 Bash 脚本,用于收集并显示当前 Linux 系统的基本信息
# 打印标题,用于视觉分隔echo "===== 系统数据 ====="
# 强制使用英文环境运行 lscpu 命令# 原因:你的系统是中文,但英文字段名更容易在脚本中解析(如 "Model name" 而不是 "型号名称")CPU_INFO=$(LANG=C lscpu)
# === 获取 CPU 相关信息 ===
# 提取 CPU 型号名称(例如:Intel(R) Core(TM) 5 220H)# - echo "$CPU_INFO":把 lscpu 的输出传给 awk# - -F ':':指定分隔符为冒号(:)# - /^Model name/:只处理以 "Model name" 开头的行# - {print $2}:打印该行的第 2 个字段(冒号后面的部分)# - | xargs:自动去除开头和结尾的空格(非常重要!)CPU_MODULE=$(echo "$CPU_INFO" | awk -F ':' '/^Model name/ {print $2}' | xargs)
# 获取逻辑线程数(即系统看到的 CPU 个数,包括超线程)# nproc 是一个专门用于返回逻辑 CPU 数量的命令,简单可靠CPU_THREAD=$(nproc)
# 获取物理 CPU 插槽数(笔记本通常是 1,服务器可能是 2 或更多)# 注意:括号 ( 和 ) 在正则中是特殊字符,必须用 \ 转义为 \( 和 \)CPU_SOCKETS=$(echo "$CPU_INFO" | awk -F ':' '/^Socket\(s\)/ {print $2+0}')
# 获取每个 CPU 插槽的物理核心数# 同样,括号需要转义;+0 是为了自动去除空格并转为数字CORES_PER_SOCKET=$(echo "$CPU_INFO" | awk -F ':' '/^Core\(s\) per socket/ {print $2+0}')
# 计算总物理核心数 = 每插槽核心数 × 插槽数# 适用于多 CPU 服务器,也适用于你的单 CPU 笔记本CPU_CORE=$(( CORES_PER_SOCKET * CPU_SOCKETS ))
# 打印 CPU 信息echo "cpu:$CPU_MODULE"echo "核心数:$CPU_CORE"echo "线程数:$CPU_THREAD"
# === 获取操作系统和用户信息 ===
# 从系统文件 /etc/os-release 中提取操作系统的完整名称# - grep "^PRETTY_NAME=":找出以 PRETTY_NAME= 开头的行# - cut -d '"' -f2:以双引号 " 为分隔符,取第 2 段(即引号中间的内容)OS_NAME=$(grep "^PRETTY_NAME=" /etc/os-release | cut -d '"' -f2)
# 获取当前登录的用户名USERID=$(whoami)
# 打印系统和用户信息echo "系统名称:$OS_NAME"echo "用户名:$USERID"
# === 获取内存信息 ===
# 使用 free -m 命令获取内存数据(单位:MB,纯数字,适合计算)# NR==2 表示只处理第 2 行(即 "Mem:" 行)# $2 = 总内存, $3 = 已用内存(含缓存), $7 = 可用内存(真正可分配)TOTAL_MEM=$(free -m | awk 'NR==2 {print $2}')USED_MEM=$(free -m | awk 'NR==2 {print $3}')FREE_MEM=$(free -m | awk 'NR==2 {print $7}')
# 计算内存使用百分比(整数)# 注意:必须先乘 100 再除,否则结果会是 0!USED_PERCENT=$(( USED_MEM * 100 / TOTAL_MEM ))
# 将 MB 转换为 GB(使用整数除法,自动舍去小数)TOTAL_GB=$(( TOTAL_MEM / 1024 ))USED_GB=$(( USED_MEM / 1024 ))FREE_GB=$(( FREE_MEM / 1024 ))
# 打印内存信息echo "总内存:${TOTAL_GB}GB"echo "已使用: ${USED_GB}GB 占用: ${USED_PERCENT}%"echo "可用内存:${FREE_GB}GB"
# === 获取磁盘信息(根分区 /)===
# 获取根分区(/)的总容量(人类可读格式,如 937G)TOTAL_DISK=$(df -h / | awk 'NR==2 {print $2}')
# 获取根分区的可用空间FREE_DISK=$(df -h / | awk 'NR==2 {print $4}')
# 获取根分区的使用百分比(如 7%)USED_PERCENT=$(df -h / | awk 'NR==2 {print $5}')
# 打印磁盘信息echo "盘大小:$TOTAL_DISK"echo "可用:$FREE_DISK"echo "已使用:$USED_PERCENT"R P
Rhine Lab Pioneer Division
Auth_Verified: 2026.04.08
Auth_Verified: 2026.04.08
