مرحباً أيها المبرمجون الطموحون! اليوم، سنبني معاً أداة سطر أوامر بسيطة ومفيدة (CLI) باستخدام Node.js لعرض مواصفات نظام التشغيل وحالة الذاكرة.
سنتعلم كيفية التفاعل مع نظام التشغيل والحصول على معلومات حيوية باستخدام وحدات Node.js المدمجة، مما يمنحنا نظرة عميقة على بيئة عملنا.
الخطوة 1: تهيئة المشروع والحصول على معلومات أساسية عن النظام
سنبدأ بإنشاء ملف JavaScript جديد (مثل system_info.js) واستيراد وحدة os المدمجة في Node.js. هذه الوحدة توفر لنا العديد من الوظائف لجلب معلومات عن نظام التشغيل الذي يعمل عليه التطبيق.
ملاحظة تقنية: وحدة
osهي جزء أساسي من Node.js، ولا تتطلب أي تثبيت إضافي عبر npm. إنها توفر واجهة لبيانات نظام التشغيل مثل نوع النظام، المعمارية، الذاكرة، ووقت التشغيل.
// system_info.js
const os = require('os'); // استيراد وحدة os المدمجة لجلب معلومات نظام التشغيل
console.log('--- معلومات النظام الأساسية ---');
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">اسم الجهاز (Hostname): ${os.hostname()}</code>); // اسم الجهاز الذي يعمل عليه السكربت
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نظام التشغيل (Platform): ${os.platform()}</code>); // نوع نظام التشغيل (مثل 'win32', 'linux', 'darwin')
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">معمارية النظام (Architecture): ${os.arch()}</code>); // معمارية المعالج (مثل 'x64', 'arm')
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نوع نظام التشغيل (Type): ${os.type()}</code>); // اسم نظام التشغيل (مثل 'Windows_NT', 'Linux', 'Darwin')
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">إصدار نظام التشغيل (Release): ${os.release()}</code>); // إصدار نظام التشغيل
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">دليل المستخدم الرئيسي (Home Dir): ${os.homedir()}</code>); // المسار إلى الدليل الرئيسي للمستخدم الحالي
الخطوة 2: عرض معلومات الذاكرة ووقت تشغيل النظام
في هذه الخطوة، سنقوم بتوسيع سكربتنا لعرض معلومات مفصلة عن الذاكرة العشوائية (RAM) ووقت تشغيل النظام (Uptime). سنقوم بتحويل قيم الذاكرة من البايت إلى الجيجابايت لتسهيل القراءة.
ملاحظة تقنية: وظائف
os.totalmem()وos.freemem()تُرجع القيم بالبايت. من الممارسات الجيدة تحويل هذه القيم إلى وحدات أكبر (مثل MB أو GB) عند عرضها للمستخدمين لجعلها أكثر قابلية للفهم.
// أضف هذا الجزء إلى ملف system_info.js بعد الكود السابق
console.log('\n--- حالة الذاكرة ووقت التشغيل ---');
const totalMemoryBytes = os.totalmem(); // إجمالي الذاكرة العشوائية (RAM) بالنظام بالبايت
const freeMemoryBytes = os.freemem(); // الذاكرة العشوائية المتوفرة حالياً بالنظام بالبايت
// دالة مساعدة لتحويل البايت إلى جيجابايت مع تقريب لرقمين عشريين
const bytesToGB = (bytes) => (bytes / (1024 * 1024 * 1024)).toFixed(2);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">إجمالي الذاكرة (RAM Total): ${bytesToGB(totalMemoryBytes)} GB</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">الذاكرة الحرة (RAM Free): ${bytesToGB(freeMemoryBytes)} GB</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">الذاكرة المستخدمة (RAM Used): ${bytesToGB(totalMemoryBytes - freeMemoryBytes)} GB</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نسبة الذاكرة الحرة: ${((freeMemoryBytes / totalMemoryBytes) * 100).toFixed(2)}%</code>);
const uptimeSeconds = os.uptime(); // وقت تشغيل النظام بالثواني منذ آخر إقلاع
const days = Math.floor(uptimeSeconds / (3600 * 24));
const hours = Math.floor((uptimeSeconds % (3600 * 24)) / 3600);
const minutes = Math.floor((uptimeSeconds % 3600) / 60);
const seconds = Math.floor(uptimeSeconds % 60);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">وقت تشغيل النظام (Uptime): ${days} يوم, ${hours} ساعة, ${minutes} دقيقة, ${seconds} ثانية</code>);
الخطوة 3: عرض معلومات المعالج (CPU) والواجهات الشبكية
الآن، سنكمل أداة CLI الخاصة بنا بعرض تفاصيل عن المعالج المركزي (CPU) وجميع الواجهات الشبكية المتوفرة في النظام. هذا يعطينا صورة كاملة عن المكونات الأساسية للجهاز.
ملاحظة تقنية: تُرجع
os.cpus()مصفوفة من الكائنات، يمثل كل منها نواة منطقية للمعالج. بينما تُرجعos.networkInterfaces()كائناً يحتوي على معلومات عن كل واجهة شبكة، بما في ذلك عناوين IP و MAC.
// أضف هذا الجزء إلى ملف system_info.js بعد الكود السابق
console.log('\n--- معلومات المعالج (CPU) ---');
const cpus = os.cpus(); // جلب معلومات عن كل نواة (core) من أنوية المعالج
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">عدد الأنوية المنطقية (Logical Cores): ${cpus.length}</code>);
if (cpus.length > 0) {
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نموذج المعالج (CPU Model): ${cpus[0].model}</code>); // عرض نموذج أول نواة (عادة ما تكون متشابهة)
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">سرعة المعالج (CPU Speed): ${(cpus[0].speed / 1000).toFixed(2)} GHz</code>); // تحويل MHz إلى GHz
}
console.log('\n--- الواجهات الشبكية (Network Interfaces) ---');
const networkInterfaces = os.networkInterfaces(); // جلب معلومات عن الواجهات الشبكية
for (const interfaceName in networkInterfaces) {
const iface = networkInterfaces[interfaceName];
iface.forEach((details) => {
// عرض عناوين IPv4 الخارجية فقط وتجاهل الواجهات الداخلية (loopback)
if (details.family === 'IPv4' && !details.internal) {
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> ${interfaceName}:</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> العنوان (Address): ${details.address}</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> القناع (Netmask): ${details.netmask}</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> MAC: ${details.mac}</code>);
}
});
}
الكود النهائي الكامل
إليك السكربت كاملاً، والذي يمكنك نسخه ولصقه في ملف system_info.js ثم تشغيله باستخدام node system_info.js في سطر الأوامر.
// system_info.js
const os = require('os'); // استيراد وحدة os المدمجة لجلب معلومات نظام التشغيل
console.log('--- معلومات النظام الأساسية ---');
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">اسم الجهاز (Hostname): ${os.hostname()}</code>); // اسم الجهاز الذي يعمل عليه السكربت
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نظام التشغيل (Platform): ${os.platform()}</code>); // نوع نظام التشغيل (مثل 'win32', 'linux', 'darwin')
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">معمارية النظام (Architecture): ${os.arch()}</code>); // معمارية المعالج (مثل 'x64', 'arm')
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نوع نظام التشغيل (Type): ${os.type()}</code>); // اسم نظام التشغيل (مثل 'Windows_NT', 'Linux', 'Darwin')
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">إصدار نظام التشغيل (Release): ${os.release()}</code>); // إصدار نظام التشغيل
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">دليل المستخدم الرئيسي (Home Dir): ${os.homedir()}</code>); // المسار إلى الدليل الرئيسي للمستخدم الحالي
console.log('\n--- حالة الذاكرة ووقت التشغيل ---');
const totalMemoryBytes = os.totalmem(); // إجمالي الذاكرة العشوائية (RAM) بالنظام بالبايت
const freeMemoryBytes = os.freemem(); // الذاكرة العشوائية المتوفرة حالياً بالنظام بالبايت
// دالة مساعدة لتحويل البايت إلى جيجابايت مع تقريب لرقمين عشريين
const bytesToGB = (bytes) => (bytes / (1024 * 1024 * 1024)).toFixed(2);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">إجمالي الذاكرة (RAM Total): ${bytesToGB(totalMemoryBytes)} GB</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">الذاكرة الحرة (RAM Free): ${bytesToGB(freeMemoryBytes)} GB</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">الذاكرة المستخدمة (RAM Used): ${bytesToGB(totalMemoryBytes - freeMemoryBytes)} GB</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نسبة الذاكرة الحرة: ${((freeMemoryBytes / totalMemoryBytes) * 100).toFixed(2)}%</code>);
const uptimeSeconds = os.uptime(); // وقت تشغيل النظام بالثواني منذ آخر إقلاع
const days = Math.floor(uptimeSeconds / (3600 * 24));
const hours = Math.floor((uptimeSeconds % (3600 * 24)) / 3600);
const minutes = Math.floor((uptimeSeconds % 3600) / 60);
const seconds = Math.floor(uptimeSeconds % 60);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">وقت تشغيل النظام (Uptime): ${days} يوم, ${hours} ساعة, ${minutes} دقيقة, ${seconds} ثانية</code>);
console.log('\n--- معلومات المعالج (CPU) ---');
const cpus = os.cpus(); // جلب معلومات عن كل نواة (core) من أنوية المعالج
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">عدد الأنوية المنطقية (Logical Cores): ${cpus.length}</code>);
if (cpus.length > 0) {
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">نموذج المعالج (CPU Model): ${cpus[0].model}</code>); // عرض نموذج أول نواة (عادة ما تكون متشابهة)
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;">سرعة المعالج (CPU Speed): ${(cpus[0].speed / 1000).toFixed(2)} GHz</code>); // تحويل MHz إلى GHz
}
console.log('\n--- الواجهات الشبكية (Network Interfaces) ---');
const networkInterfaces = os.networkInterfaces(); // جلب معلومات عن الواجهات الشبكية
for (const interfaceName in networkInterfaces) {
const iface = networkInterfaces[interfaceName];
iface.forEach((details) => {
// عرض عناوين IPv4 الخارجية فقط وتجاهل الواجهات الداخلية (loopback)
if (details.family === 'IPv4' && !details.internal) {
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> ${interfaceName}:</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> العنوان (Address): ${details.address}</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> القناع (Netmask): ${details.netmask}</code>);
console.log(<code dir="ltr" style="background:#f3f4f6; color:#0056b3; padding:2px 6px; border-radius:4px; font-family:monospace; direction:ltr !important; display:inline-block;"> MAC: ${details.mac}</code>);
}
});
}
النتيجة المتوقعة
عند تشغيل السكربت node system_info.js في سطر الأوامر، ستحصل على مخرجات شبيهة بالآتي (تختلف التفاصيل بناءً على نظامك):
--- معلومات النظام الأساسية ---
اسم الجهاز (Hostname): MyComputerName
نظام التشغيل (Platform): win32
معمارية النظام (Architecture): x64
نوع نظام التشغيل (Type): Windows_NT
إصدار نظام التشغيل (Release): 10.0.19045
دليل المستخدم الرئيسي (Home Dir): C:\Users\YourUser
--- حالة الذاكرة ووقت التشغيل ---
إجمالي الذاكرة (RAM Total): 15.89 GB
الذاكرة الحرة (RAM Free): 5.12 GB
الذاكرة المستخدمة (RAM Used): 10.77 GB
نسبة الذاكرة الحرة: 32.22%
وقت تشغيل النظام (Uptime): 5 يوم, 12 ساعة, 30 دقيقة, 45 ثانية
--- معلومات المعالج (CPU) ---
عدد الأنوية المنطقية (Logical Cores): 8
نموذج المعالج (CPU Model): Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
سرعة المعالج (CPU Speed): 2.20 GHz
--- الواجهات الشبكية (Network Interfaces) ---
Wi-Fi:
العنوان (Address): 192.168.1.100
القناع (Netmask): 255.255.255.0
MAC: 00:11:22:33:44:55
Ethernet:
العنوان (Address): 10.0.0.5
القناع (Netmask): 255.255.255.0
MAC: AA:BB:CC:DD:EE:FF
تهانينا! لقد قمت ببناء أداة CLI بسيطة ولكنها قوية لعرض مواصفات نظامك. يمكنك الآن التوسع في هذا المشروع بإضافة المزيد من الميزات أو دمجها في أدوات مراقبة أكبر.