Node.js OS 模組:獲取作業系統硬體與環境資訊
在開發伺服器應用或是自動化腳本時,了解硬體的即時狀態(如 CPU 分佈、可用記憶體)以及作業系統環境非常重要。Node.js 內建的 os 模組提供了一系列跨平台的工具函數,讓你輕鬆讀取底層資訊。
硬體規格與負載
這對於決定應用程式的併發策略(例如 Cluster 模式)非常有幫助。
1. CPU 核心詳細資訊
const os = require('os');
const cpus = os.cpus();
console.log(`核心數量:${cpus.length}`);
// 取得第一個核心的運作速度
console.log(`核心型號:${cpus[0].model} @ ${cpus[0].speed}MHz`);
2. 記憶體狀態監控
注意:os 返回的預設單位是 Bytes,通常需要除以 1024 的三次方來轉換為 GB。
const totalMem = os.totalmem();
const freeMem = os.freemem();
console.log(`系統總記憶體:${(totalMem / 1024 ** 3).toFixed(2)} GB`);
console.log(`當前剩餘記憶體:${(freeMem / 1024 ** 3).toFixed(2)} GB`);
console.log(`快載百分比:${((1 - freeMem / totalMem) * 100).toFixed(1)}%`);
3. 平均負載 (Load Average)
這在 Unix-like 系統(如 Linux/macOS)中非常有用,代表過去 1, 5, 15 分鐘的系統負載趨勢。
console.log('系統平均負載 (1, 5, 15m):', os.loadavg());
系統環境與使用者資訊
1. 平台與運行時間
console.log('平台 (Platform):', os.platform()); // 如 darwin (Mac), win32 (Windows)
console.log('系統類型 (Type):', os.type()); // 如 Windows_NT, Linux, Darwin
console.log('運行時間 (Uptime):', (os.uptime() / 3600).toFixed(1), '小時');
2. 使用者身分
const user = os.userInfo();
console.log(`當前使用者:${user.username}`);
console.log(`家目錄路徑:${user.homedir}`);
網路介面:獲取區域網路 IP
這是開發中非常實用的技巧。當你想讓手機連接電腦上的開發伺服器時,你需要知道電腦在 WiFi 下的內網 IP。
const nets = os.networkInterfaces();
const addresses = [];
for (const name of Object.keys(nets)) {
for (const net of nets[name]) {
// 篩選出 IPv4 且非內部迴圈 (Loopback) 的位址
if (net.family === 'IPv4' && !net.internal) {
addresses.push(`${name}: ${net.address}`);
}
}
}
console.log('偵測到的內網 IP:', addresses);
跨平台工具常數
os.EOL:根據作業系統自動切換換行符號(Windows 為\r\n,Unix 為\n)。os.homedir():穩定的獲取使用者家目錄方式。os.tmpdir():獲取暫存檔存放路徑。
總結
os模組是你進行系統調優(如決定 Worker 數量)的資料來源。- 處理跨平台檔案寫入時,務必使用
os.EOL確保格式正確。 - 利用
networkInterfaces()可以在複雜的網路環境中自動尋找正確的對外 IP。