linux下查看电池电量最直接的方法是读取/sys/class/power_supply/bat0/capacity(返回整数百分比),并配合status和online文件判断充放电及ac接入状态;若路径不符,需先用ls /sys/class/power_supply/确认实际设备名。

Linux下直接读取/sys/class/power_supply/里的电量值
Linux内核通过sysfs暴露电池状态,路径通常是/sys/class/power_supply/BAT0/(部分设备可能是BAT1或axp288_battery等)。关键文件有:capacity(当前剩余百分比)、status(充电中/放电/满电)、online(AC是否接入)。
实操建议:
- 先确认电池目录存在:
ls /sys/class/power_supply/,看输出里有没有以BAT开头或含battery的目录 - 读取电量:
cat /sys/class/power_supply/BAT0/capacity,返回纯数字,如72 - 注意:该值是整数,不带
%符号;若读取失败,可能是权限问题(但通常无需root)或设备无电池(如台式机)
用upower命令查电量(更友好、带单位)
upower是D-Bus封装工具,能统一处理不同电源后端(ACPI、sysfs、hidpp等),输出更易读,还包含时间预估、健康度等信息。
实操建议:
- 查所有电源设备:
upower -e,找到类似/org/freedesktop/UPower/devices/battery_BAT0的路径 - 查详细状态:
upower -i /org/freedesktop/UPower/devices/battery_BAT0 - 只取百分比(适合脚本):
upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "percentage|state" - 注意:
upower可能未预装(Ubuntu系需sudo apt install upower;Arch系在upower包里)
终端里快速显示电池状态的常用一行命令
不想记长路径?用以下命令可快速获取简洁结果,适合加到shell提示符或定时任务中。
实操建议:
- 基础版(依赖sysfs):
echo $(cat /sys/class/power_supply/BAT0/capacity)% $(cat /sys/class/power_supply/BAT0/status) - 兼容版(自动探测BAT*目录):
for d in /sys/class/power_supply/BAT*; do [ -d "$d" ] && echo "$(basename $d): $(cat $d/capacity)% $(cat $d/status)"; done - 注意:如果系统用的是
intel_pmc_core或某些ARM平台(如树莓派),/sys/class/power_supply/可能为空,此时upower是唯一可靠选择
常见错误:为什么cat /sys/.../capacity返回Permission denied或No such file?
不是权限或硬件坏了,大概率是路径不对或驱动没加载。
排查步骤:
-
No such file:运行ls /sys/class/power_supply/确认目录名;有些轻量发行版(如Alpine)默认不挂载sysfs,需检查mount | grep sysfs -
Permission denied:极少见,多数是SELinux或某些容器环境限制;普通桌面环境几乎不会出现 - 返回
Unknown或空值:说明ACPI电池表(SBST或BIF)未被正确解析,可尝试更新内核或加启动参数acpi_enforce_resources=lax
ls /sys/class/power_supply/,再决定用cat还是upower。











