项目介绍
sysinfo-cli 是一个 Bash 写的 Linux 服务器状态面板。SSH 登录后能先看一眼 CPU、内存、磁盘和网络;需要盯实时变化时,再运行 sysinfo。它不跑后台进程,适合个人 VPS、家用服务器和小团队机器。支持 Debian、Ubuntu、RHEL、Fedora、Alpine、Arch、openSUSE 等发行版,不支持 macOS。
🔐
登录状态栏
bash 和 zsh 登录后显示一次状态快照
📊
实时监控
运行 sysinfo 查看实时刷新面板
🔔
手机推送
通过 Bark 接收 CPU、流量、磁盘等告警
适合谁用?
适合个人 VPS、家用服务器和小团队运维。只要是 Linux 机器,又希望登录时先看一眼状态,就能用。
安装
选一种安装方式即可。脚本会识别包管理器,安装 yq、iproute/iproute2,并配置 SSH 登录状态栏。
系统要求
| 项目 | 说明 |
| 操作系统 | Linux(bash);不支持 macOS |
| 发行版 | Debian、Ubuntu、RHEL、CentOS、Rocky、Alma、Fedora、Alpine、Arch、openSUSE、Gentoo 等 |
| 包管理器 | apt、dnf、yum、apk、pacman、zypper、emerge(自动检测) |
| tc / ip | iproute2(Debian/Alpine/Arch)或 iproute(RHEL/Fedora) |
| yq | mikefarah 版,按 CPU 架构下载(amd64 / arm64 / arm) |
| 权限 | 安装与限速需要 root 或 sudo |
Alpine 提示
Alpine 默认 shell 是 ash。先装 bash:apk add bash。安装脚本会用 apk 安装 iproute2。
一键安装
bash <(curl -sSL baixiaosheng.de/sysinfo)
从 GitHub 安装
curl -sSL https://raw.githubusercontent.com/baixiaoshengofficial/sysinfo-cli/main/install.sh | bash
克隆后安装
git clone https://github.com/baixiaoshengofficial/sysinfo-cli.git
cd sysinfo-cli
sudo ./install.sh
安装参数
| 参数 | 说明 |
--lang zh|en | 指定界面语言,不写则按系统语言自动判断 |
--overwrite-config | 用默认模板覆盖已有配置(旧配置会自动备份) |
--uninstall | 卸载 sysinfo-cli |
小提示
再次执行 install.sh 会保留现有 config.yaml。只有加 --overwrite-config 才会重置,并且会先备份旧文件。
升级与卸载
升级
cd sysinfo-cli && git pull && sudo ./install.sh
如果想顺便把配置恢复成模板:
sudo ./install.sh --overwrite-config
卸载
sudo ./uninstall.sh
会删除脚本、配置文件、状态文件和 zsh 登录 hook。
常用命令
| 命令 | 做什么 |
sysinfo | 打开实时面板(默认 1 秒刷新) |
sysinfo 2 | 每 2 秒刷新一次 |
sysinfo -r | 重新加载 /etc/sysinfo/config.yaml |
sysinfo -c 文件.yaml | 从指定配置文件应用设置 |
sysinfo --reset-traffic | 清零本月流量统计 |
sysinfo --clear-nat | 清除 NAT 端口映射 |
sysinfo --notify-test | 发一条测试推送,确认 Bark 通道可用 |
sysinfo --notify-check | 检查告警规则(适合放 cron 定时跑) |
注意
配置只从 YAML 文件读取,通过 -c 或 -r 应用。旧的 --nat、--traffic 等参数已经移除。
面板说明
登录后或运行 sysinfo 时,面板会显示四块信息:
================================================================
系统信息面板 - 2026-06-29 17:49:12
================================================================
核心信息
CPU : Intel(R) Core(TM) i5-9600 @ 3.10GHz (6 core(s))
IPv4 : 10.103.241.153
运行时间 : 1 week, 4 days, 4 hours
资源使用
负载 : 71.3% 进程数 : 3725
内存 : 19Gi / 31Gi (62%)
网络
下载 : 55.5 KB/s 上传 : 0 KB/s
使用率 : [██████████] 48%
限速状态 : 未限速
磁盘
/ 162G 90G 59% [██████████]
================================================================
| 区域 | 内容 |
| 核心信息 | CPU 型号、IP 地址、NAT 映射、运行时间 |
| 资源使用 | CPU 负载、内存、交换分区、进程数、在线用户 |
| 网络 | 实时网速、本月流量、配额使用率、限速状态 |
| 磁盘 | 各挂载点的容量、已用、占比和进度条 |
进度条:白色方块表示已用,灰色方块表示剩余。
配置文件
配置文件是 /etc/sysinfo/config.yaml。改完后执行 sudo sysinfo -r。
完整示例
network:
interface: "" # 留空自动检测网卡
force_gateway_throttle: false # 网关模式下是否强制限速
nat:
enabled: false
mappings:
- "8080:80" # 公网端口:内网端口
- "9000:3000"
traffic:
enabled: true
limit: "1T" # 1T / 500G / 100M / UNLIMITED / 0
reset_day: 1 # 每月几号重置流量
mode: "both" # upload / download / both
throttle:
enabled: true
threshold: 95 # 用到 95% 开始限速
rate: "10mbps" # 限速到 10 Mbps
display:
language: "auto" # auto / zh / en
refresh_interval: 1
show_traffic: true
show_nat: true
show_throttle: true
notify:
enabled: false
bark:
url: "https://api.day.app"
key: ""
cooldown: 1800
rules:
cpu: { enabled: false, threshold: 90 }
net: { enabled: false, threshold: 90 }
nic: { enabled: false, threshold: 80, mode: both, upload_rate: 0, download_rate: 0 }
throttle: { enabled: false }
disk: { enabled: false, threshold: 90, paths: [] }
关于 NAT
NAT 配置只用于显示端口映射,不会修改 iptables 或 nftables。
流量统计与限速
流量怎么统计
- 从 /proc/net/dev 读取网卡收发字节数,按月累计
- 数据写入 /etc/sysinfo-traffic.json,到 reset_day 自动重置
- mode 可设为 upload、download 或 both
自动限速怎么工作
当本月流量达到 threshold 后,sysinfo-cli 会调用 Linux tc,把网速限制到 rate。
流量达到 95%
→
tc 限速到 10 Mbps
→
面板显示「限速中」
网关模式
如果服务器开启了 IP 转发(作为路由/网关),默认跳过限速,避免影响下游设备。确实要限速时,设置 force_gateway_throttle: true。
排查限速问题
bash scripts/test_throttle.sh
推送通知
告警通过 Bark 推到 iPhone。默认关闭,需要在 config.yaml 里手动开启。
怎么开启
- 在 iPhone 上安装 Bark App,拿到推送 Key
- 编辑 config.yaml,填上 bark.key,把 notify.enabled 改成 true
- 开启需要的规则,比如 cpu.enabled: true
- 执行 sudo sysinfo -r 应用配置
- 运行 sysinfo --notify-test,确认手机能收到
告警规则
| 规则 | 什么时候推送 |
cpu | CPU 使用率超过阈值 |
net | 本月流量达到配额阈值 |
nic | 网速达到带宽阈值,可分别监控上传/下载 |
throttle | 限速开始生效 |
disk | 某个磁盘分区使用率超过阈值 |
不会刷屏
告警只在状态变化时推送。同一条规则有 cooldown 冷却时间,默认 30 分钟。
定时检查(cron)
# 每 5 分钟检查一次告警规则
*/5 * * * * /usr/local/bin/sysinfo --notify-check
切换语言
在 config.yaml 里改 display.language:
display:
language: "zh" # auto / zh / en
auto — 跟随系统语言
zh — 中文界面
en — 英文界面
改完后运行 sysinfo 会立即使用新语言;执行 sudo sysinfo -r 后,SSH 登录状态栏也会切换。
SSH 登录横幅
安装后,SSH 登录会自动显示一次状态面板,不用手动敲 sysinfo。
- bash 用户:通过 /etc/profile.d/ 加载
- zsh 用户:通过 /etc/zsh/zprofile 加载
- scp、sftp、ssh host command 这类非交互操作不会显示
- 同一次登录只显示一次
文件路径
| 路径 | 用途 |
/usr/local/bin/sysinfo | 命令入口 |
/etc/sysinfo/config.yaml | 主配置文件 |
/etc/sysinfo-traffic.json | 流量计数和限速状态 |
/etc/sysinfo-lang | 持久化的界面语言 |
/var/tmp/sysinfo-notify-state-<用户> | 推送告警的去重状态 |
常见问题
支持哪些操作系统?
仅支持 Linux,并需要 bash。常见发行版包括 Debian、Ubuntu、RHEL、CentOS、Rocky、Alma、Fedora、Alpine、Arch、openSUSE、Gentoo。安装脚本会识别 apt、dnf、yum、apk、pacman、zypper、emerge。macOS 不支持,因为限速依赖 Linux tc、IFB 等能力。
yq 报 Exec format error?
通常是 ARM 服务器装到了 amd64 的 yq。先删除再重装:sudo rm -f /usr/local/bin/yq,然后重新执行 install.sh。脚本会按 uname -m 下载对应的 yq。可用 yq --version 和 yq eval '.display.language' /etc/sysinfo/config.yaml 验证。
SSH 登录没看到面板?
先确认这是正常 SSH 登录,不是 scp/sftp 传文件。zsh 用户如果仍然看不到,重新执行 sudo ./install.sh 修复 hook。
改了配置但没效果?
普通用户运行时会优先读取 ~/.config/sysinfo/config.yaml。这个文件如果存在,会覆盖系统配置。删掉它,或用 SYSINFO_CONFIG=/etc/sysinfo/config.yaml sysinfo 指定配置。
推送收不到?
先跑 sysinfo --notify-test 看 Bark 通道是否正常。再检查 notify.enabled 是否为 true、bark.key 是否正确。测试规则时,可以临时把 threshold 改成 0。
限速没生效?
开启 IP 转发的网关机器默认跳过限速。限速还需要 tc 命令和 root 权限。运行 bash scripts/test_throttle.sh 看诊断结果。
开发测试
项目根目录有 Makefile,常用命令:
| 命令 | 作用 |
make | 查看所有命令 |
make run | 本地跑一次面板 |
make test | 运行自动化测试 |
make install | 安装到系统 |
make deploy | 测试通过后安装 |
make docs-serve | 本地预览文档 |