65 行
1.8 KiB
Bash
実行ファイル
65 行
1.8 KiB
Bash
実行ファイル
#!/bin/sh -e
|
|
|
|
__memory_detail() {
|
|
if [ "$(uname)" = "OpenBSD" -o "$(uname)" = "FreeBSD" ]; then
|
|
# OpenBSD / FreeBSD
|
|
top -b -d 1
|
|
elif [ "$(uname)" = "Darwin" ]; then
|
|
# macOS
|
|
top -l 1 -s 0 -n 0 | grep PhysMem
|
|
else
|
|
# Linux
|
|
free
|
|
fi
|
|
}
|
|
|
|
__memory() {
|
|
local total="" free="" unit_total="" unit_free=""
|
|
local total_mb=0 free_mb=0 used_mb=0
|
|
|
|
case "$(uname)" in
|
|
Linux)
|
|
while read -r name value _; do
|
|
case "$name" in
|
|
MemTotal:*) total=$((value/1024));;
|
|
MemFree:*) free=$((value/1024));;
|
|
Buffers:*) free=$((free + value/1024));;
|
|
Cached:*) free=$((free + value/1024));;
|
|
esac
|
|
done < /proc/meminfo
|
|
used_mb=$((total - free))
|
|
;;
|
|
OpenBSD)
|
|
total=$(($(sysctl -n hw.physmem) / 1024 / 1024))
|
|
used_mb=$(vmstat | tail -1 | awk '{print substr($3, 1, length($3)-1)}')
|
|
;;
|
|
FreeBSD)
|
|
total=$(($(sysctl -n hw.realmem) / 1024 / 1024))
|
|
pagesize=$(sysctl -n hw.pagesize)
|
|
inactive_count=$(sysctl -n vm.stats.vm.v_inactive_count)
|
|
free_mb=$((inactive_count * pagesize / 1024 / 1024))
|
|
used_mb=$((total - free_mb))
|
|
;;
|
|
Darwin)
|
|
total=$(printf "%.1f" "$(echo "$(sysctl -n hw.memsize_usable) / 1024 / 1024" | bc -l)")
|
|
used_mb=$(printf "%.1f" "$(echo "$(vm_stat | grep 'Pages active' | awk '{print $3}') * 4096 / (1024 * 1024)" | bc -l)")
|
|
;;
|
|
esac
|
|
|
|
if [ $total -ge 1024 ]; then
|
|
total=$(printf "%.1f" $(echo "$total / 1024" | bc -l))
|
|
unit_total="G"
|
|
else
|
|
unit_total="M"
|
|
fi
|
|
|
|
if [ $used_mb -ge 1024 ]; then
|
|
used_mb=$(printf "%.1f" $(echo "$used_mb / 1024" | bc -l))
|
|
unit_used="G"
|
|
else
|
|
unit_used="M"
|
|
fi
|
|
|
|
color b g W; printf "%s%s" "$used_mb" "$unit_used"; color -; color b g W; printf "/%s%s" "$total" "$unit_total"; color --
|
|
}
|