はじめに
いつもマシンスペックを調査するのにコマンドを思い出しながらやっていたけど、面倒になったので、簡単に調査するスクリプトを作ってみたくなったからGemini CLIに作ってもらうことにしました。
Gemini CLIのインストール
以下の記事にまとめてあるのでご参照下さい。
プロジェクト管理ファイルの作成
project.mdとTODO.mdの2つのファイルを作成します。
project.md
# 概要
マシンスペックを調査するスクリプトを作成したい。
# 調査内容
- CPU
- RAM
- HDD / SSD
- GPU
- メーカーおよび型式
# 調査方法
ターミナルで使用できるコマンドを使用して、調査内容のデータを調べる
# 出力
調査内容を可読性の高い一覧で表示する
TODO.md
以下にプロジェクトのタスクを書き出し、進捗を管理する。
プロンプトを入力する
TODOの作成
このディレクトリの内容を調査して、TODO.mdファイルを更新して下さい。
するとTODO.mdが以下のように更新されました。
TODO.md
- [ ] **CPU Information:** Use `lscpu` to extract relevant CPU details.
- [ ] **RAM Information:** Use `free -h` for a summary and potentially `sudo lshw -short -C memory` for more details if needed.
- [ ] **Disk Information:** Use `lsblk` and `df -h` to get disk and partition information.
- [ ] **GPU Information:** Use `lspci -k | grep -EA3 'VGA|3D|Display'` for general GPU info. If NVIDIA, check for `nvidia-smi`.
- [ ] **Manufacturer and Model:** Use `sudo dmidecode -s system-manufacturer` and `sudo dmidecode -s system-product-name`.
- [ ] **Script Creation:** Combine these commands into a single shell script.
- [ ] **Output Formatting:** Format the output for readability, using clear headings and consistent presentation.
- [ ] **Error Handling:** Add basic error handling for commands that might require `sudo` or might not be installed.
- [ ] **Testing:** Test the script on a Linux environment.
スクリプト開発
TODOに従ってスクリプトを作成して下さい。開発の進捗状況をTODO.mdで管理し、適宜更新しながら開発を進めて下さい。
以降は"2. Yes, allow always"を指定して完成するまで放置します。
シェルスクリプトを実行するときにsudoのパスワードが必要な時があったので、"Ctrl+F"を押してパスワードを入力することがありました。
detect_spec.sh
#!/bin/bash
# Function to check if a command exists
check_command() {
command -v "$1" >/dev/null 2>&1
}
# --- Data Collection ---
cpu_info=$(lscpu)
ram_info=$(free -h)
disk_info_lsblk=$(lsblk -d -o NAME,SIZE,TYPE)
gpu_info_lspci=$(lspci -k)
if check_command dmidecode && check_command sudo; then
manufacturer=$(sudo dmidecode -s system-manufacturer)
model=$(sudo dmidecode -s system-product-name)
fi
# --- Summary Extraction ---
cpu_model=$(echo "$cpu_info" | grep "モデル名" | sed 's/モデル名:[[:space:]]*//')
ram_total=$(echo "$ram_info" | grep "Mem:" | awk '{print $2}')
disk_total=$(echo "$disk_info_lsblk" | grep "disk" | head -n 1 | awk '{print $2}')
gpu_model=$(echo "$gpu_info_lspci" | grep -A3 -E 'VGA|3D|Display' | grep "controller" | sed 's/.*controller: //')
# --- Summary Display ---
echo "--- System Specification Summary ---"
echo "Manufacturer: $manufacturer"
echo "Model: $model"
echo "CPU: $cpu_model"
echo "RAM: $ram_total"
echo "Disk: $disk_total"
echo "GPU: $gpu_model"
echo ""
# --- Detailed Report ---
echo "--- Detailed System Specification Report ---"
echo ""
# CPU Information
echo "--- CPU ---"
echo "$cpu_info"
echo ""
# RAM Information
echo "--- RAM ---"
echo "$ram_info"
echo ""
# Disk Information
echo "--- Disk ---"
if check_command lsblk; then
lsblk
else
echo "WARNING: lsblk not found. Skipping Disk information."
fi
echo ""
if check_command df; then
df -h
else
echo "WARNING: df not found. Skipping Disk information."
fi
echo ""
# GPU Information
echo "--- GPU ---"
if check_command lspci; then
echo "$gpu_info_lspci" | grep -A3 -E 'VGA|3D|Display'
else
echo "WARNING: lspci not found. Skipping GPU information."
fi
if check_command nvidia-smi; then
echo ""
nvidia-smi
fi
echo ""
# Manufacturer and Model
echo "--- Manufacturer and Model ---"
if [ -n "$manufacturer" ] && [ -n "$model" ]; then
echo "$manufacturer"
echo "$model"
else
echo "WARNING: Could not determine Manufacturer and Model. dmidecode or sudo might not be available."
fi
echo ""
echo "--- Report End ---"
実行
$ ./detect_spec.sh
結果は以下のとおり。
--- System Specification Summary ---
Manufacturer: NEC
Model: PC-MK32MBZEF
CPU: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
RAM: 11Gi
Disk: 119.2G
GPU: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
--- Detailed System Specification Report ---
--- CPU ---
アーキテクチャ: x86_64
CPU 操作モード: 32-bit, 64-bit
Address sizes: 36 bits physical, 48 bits virtual
バイト順序: Little Endian
CPU: 4
オンラインになっている CPU のリスト: 0-3
ベンダー ID: GenuineIntel
モデル名: Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
CPU ファミリー: 6
モデル: 58
コアあたりのスレッド数: 1
ソケットあたりのコア数: 4
ソケット数: 1
ステッピング: 9
CPU(s) scaling MHz: 80%
CPU 最大 MHz: 3600.0000
CPU 最小 MHz: 1600.0000
BogoMIPS: 6385.18
フラグ: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts vnmi md_clear flush_l1d
仮想化: VT-x
L1d キャッシュ: 128 KiB (4 instances)
L1i キャッシュ: 128 KiB (4 instances)
L2 キャッシュ: 1 MiB (4 instances)
L3 キャッシュ: 6 MiB (1 instance)
NUMA ノード数: 1
NUMA ノード 0 CPU: 0-3
Vulnerability Gather data sampling: Not affected
Vulnerability Ghostwrite: Not affected
Vulnerability Itlb multihit: KVM: Mitigation: Split huge pages
Vulnerability L1tf: Mitigation; PTE Inversion; VMX conditional cache flushes, SMT disabled
Vulnerability Mds: Mitigation; Clear CPU buffers; SMT disabled
Vulnerability Meltdown: Mitigation; PTI
Vulnerability Mmio stale data: Unknown: No mitigations
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec rstack overflow: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Retpolines; IBPB conditional; IBRS_FW; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
Vulnerability Srbds: Vulnerable: No microcode
Vulnerability Tsx async abort: Not affected
--- RAM ---
total used free shared buff/cache available
Mem: 11Gi 3.9Gi 1.5Gi 213Mi 6.6Gi 7.7Gi
Swap: 4.0Gi 1.0Mi 4.0Gi
--- Disk ---
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 4K 1 loop /snap/bare/5
loop2 7:2 0 73.9M 1 loop /snap/core22/2045
loop3 7:3 0 11.1M 1 loop /snap/firmware-updater/167
loop4 7:4 0 516M 1 loop /snap/gnome-42-2204/202
loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop6 7:6 0 576K 1 loop /snap/snapd-desktop-integration/315
loop7 7:7 0 49.3M 1 loop /snap/snapd/24792
loop8 7:8 0 10.8M 1 loop /snap/snap-store/1270
loop9 7:9 0 50.9M 1 loop /snap/snapd/25577
loop10 7:10 0 18.5M 1 loop /snap/firmware-updater/210
loop11 7:11 0 250.1M 1 loop /snap/firefox/7355
loop12 7:12 0 74M 1 loop /snap/core22/2163
loop13 7:13 0 516.2M 1 loop /snap/gnome-42-2204/226
loop14 7:14 0 250.6M 1 loop /snap/firefox/7423
sda 8:0 0 119.2G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
└─sda2 8:2 0 118.2G 0 part /
sr0 11:0 1 1024M 0 rom
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.2G 3.0M 1.2G 1% /run
/dev/sda2 116G 24G 87G 21% /
tmpfs 5.8G 4.0K 5.8G 1% /dev/shm
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
efivarfs 128K 44K 80K 36% /sys/firmware/efi/efivars
/dev/sda1 1.1G 6.2M 1.1G 1% /boot/efi
tmpfs 1.2G 2.6M 1.2G 1% /run/user/1000
--- GPU ---
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
Subsystem: NEC Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
Kernel driver in use: i915
Kernel modules: i915
--- Manufacturer and Model ---
NEC
PC-MK32MBZEF
--- Report End ---
できた!
便利すぎる!!
そして、PCが古すぎる!