
مدير نواة لينكس ومراقب النشاط 🐧💻
النواة هي جزء من نظام التشغيل تسهل التفاعلات بين مكونات العَتاد و_البرمجيات_. في معظم الأنظمة، يتم تحميلها عند بدء التشغيل بعد مُحمل الإقلاع وتعالج طلبات الإدخال/الإخراج بالإضافة إلى الأجهزة الطرفية مثل لوحات المفاتيح والشاشات ومحولات الشبكة ومكبرات الصوت. عادةً، تكون النواة مسؤولة عن إدارة الذاكرة، إدارة العمليات، إدارة الأجهزة، استدعاءات النظام، والأمان.
تستخدم التطبيقات آلية استدعاء النظام لطلب خدمة من نظام التشغيل، وفي أغلب الأحيان، يُمرر هذا الطلب إلى النواة باستخدام مكتبة يقدمها نظام التشغيل لاستدعاء وظيفة النواة ذات الصلة. بينما تقوم النواة بهذه المهام منخفضة المستوى، فهي تقيم في جزء منفصل من الذاكرة يُسمى مساحة النواة المحمية، ولا يمكن للتطبيقات والأجزاء الأخرى من النظام الوصول إليها. في المقابل، تستخدم التطبيقات مثل المتصفحات ومحررات النصوص ومديري النوافذ أو مشغلات الصوت/الفيديو منطقة منفصلة مختلفة من الذاكرة، وهي مساحة المستخدم. هذا الفصل يمنع تداخل بيانات المستخدم وبيانات النواة مع بعضها البعض مما يسبب عدم الاستقرار والبطء، كما يمنع البرامج التطبيقية المعطلة من تعطيل نظام التشغيل بأكمله.
توجد تصاميم مختلفة للنواة بسبب الطرق المختلفة لإدارة استدعاءات النظام والموارد. على سبيل المثال، بينما تقوم النوى المتجانسة بتشغيل جميع تعليمات نظام التشغيل في نفس مساحة العنوان للسرعة، تستخدم النوى الدقيقة مساحات مختلفة لخدمات المستخدم والنواة للنمطية. بالإضافة إلى ذلك، هناك النوى الهجينة، النوى النانوية، والنوى الخارجية. تعتمد بنية النواة الهجينة على الجمع بين جوانب النوى الدقيقة والمتجانسة.
نواة لينكس هي النواة مفتوحة المصدر والمتجانسة والشبيهة بيونكس المستخدمة في توزيعات لينكس، والعديد من الأنظمة المدمجة مثل أجهزة التوجيه، وكذلك في جميع الأنظمة القائمة على أندرويد. لينوس تورفالدس هو من ابتكر وأنشأ نواة لينكس في عام 1991، وما زالت قيد التطوير من قبل آلاف المطورين حتى اليوم. إنها مثال بارز على البرمجيات الحرة ومفتوحة المصدر وتستخدم في مشاريع برمجية حرة أخرى، ولا سيما نظام تشغيل جي.إن.يو. على الرغم من أن أنظمة التشغيل القائمة على لينكس تهيمن على معظم أجهزة الحوسبة، إلا أنها لا تزال تحمل بعض عيوب التصميم التي كانت موضع جدل كبير في الأيام الأولى للينكس. على سبيل المثال، تحتوي على أكبر حجم وأعلى تعقيد مقارنة بالأنواع الأخرى من النوى. لكنها سمة تصميمية متأصلة في النوى المتجانسة. أدت هذه الأنواع من المشكلات التصميمية إلى قيام المطورين بإضافة ميزات وآليات جديدة إلى نواة لينكس لا تمتلكها النوى الأخرى.
على عكس النوى المتجانسة القياسية، فإن نواة لينكس هي أيضًا نمطية، حيث تقبل وحدات النواة القابلة للتحميل (LKM) والتي تُستخدم عادةً لإضافة دعم لعَتاد جديد (كوحدات تشغيل أجهزة) و/أو أنظمة ملفات، أو لإضافة استدعاءات نظام. نظرًا لأنه يمكن تحميل وحدات LKM وإلغاء تحميلها إلى النظام أثناء التشغيل، فإن لها ميزة تمديد النواة دون الحاجة لإعادة التشغيل وإعادة الترجمة. وبالتالي، فإن وظائف النواة التي توفرها الوحدات لا تبقى في الذاكرة دون استخدام، ويمكن إلغاء تحميل الوحدة ذات الصلة لتحرير الذاكرة والموارد الأخرى.
توجد وحدات النواة القابلة للتحميل في /lib/modules بامتداد .ko (كائن النواة) في لينكس. بينما يمكن استخدام الأمر lsmod لسرد وحدات النواة المحملة، يُستخدم modprobe أو insmod/rmmod لتحميل أو إلغاء تحميل وحدة نواة. تُستخدم insmod/rmmod للوحدات المستقلة عن modprobe ودون الحاجة إلى تثبيتها في /lib/modules/$(uname -r).
فيما يلي مثال بسيط لوحدة نواة لينكس تطبع رسالة عند تحميلها وإلغاء تحميلها. خطوات البناء والتثبيت للـوحدة باستخدام ملف Makefile موضحة أدناه.``` make # build sudo make install # install sudo modprobe lkm_example # load sudo modprobe -r lkm_example # unload
يستخدم الأمر [dmesg](https://linux.die.net/man/8/dmesg) أدناه لاسترجاع مخزن رسائل النواة.```
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon يُوفّر واجهة مستخدم نصية لإدارة وحدات نواة لينكس ومراقبة أنشطة النواة. من خلال الإدارة، يُقصد التحميل، الإلغاء، الإدراج في القائمة السوداء وعرض معلومات الوحدة. يمكن تتبّع التغييرات في وحدات النواة، سجلات الأجهزة ورسائل النواة الأخرى باستخدام مراقب الأنشطة الفوري في kmon. نظرًا لأن استخدام أدوات مختلفة مثل dmesg و kmod مطلوب لهذه المهام في لينكس، يهدف kmon إلى جمعها في نافذة طرفية واحدة وتسهيل الاستخدام قدر الإمكان مع الحفاظ على الوظائف.
kmon مكتوب بلغة Rust ويستخدم مكتبات Ratatui و termion لواجهته النصية.
يمكن تثبيت kmon من crates.io باستخدام Cargo إذا كان Rust مثبتًا.``` cargo install kmon
الحد الأدنى لإصدار Rust المدعوم (MSRV) هو `1.74.1`.
### Arch Linux
يمكن تثبيت **kmon** من [المستودع الرسمي](https://www.archlinux.org/packages/extra/x86_64/kmon/) لـ Arch Linux.```
pacman -S kmon
هناك أيضًا حزمة تطوير على AUR. استخدم AUR helper المفضل لديك لتثبيته. على سبيل المثال،``` paru -S kmon-git
### Nixpkgs
**kmon** يمكن تثبيته باستخدام [مدير حزم Nix](https://nixos.org/nix/) من قناة `nixpkgs-unstable`.```
nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update nixpkgs
nix-env -iA nixpkgs.kmon
على NixOS:``` nix-channel --add https://nixos.org/channels/nixos-unstable nix-channel --update nixos nix-env -iA nixos.kmon
### Alpine Linux
**kmon** متاح لـ [Alpine Edge](https://pkgs.alpinelinux.org/packages?name=kmon&branch=edge). يمكن تثبيته عبر [apk](https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper) بعد تمكين [المستودع المجتمعي](https://wiki.alpinelinux.org/wiki/Repositories).```
apk add kmon
```
docker run -it --cap-add syslog orhunp/kmon:tagname
#### بناء```
docker build -t kmon .
docker run -it --cap-add syslog kmon
### دليل الاستخدام
1. قم بتنزيل أحدث إصدار ثنائي من قسم [الإصدارات](https://github.com/orhun/kmon/releases) واختر بين [glibc](https://en.wikipedia.org/wiki/Glibc) أو [musl-libc](https://musl.libc.org/) ثنائي.
2. لتنزيل الحزمة المترجمة مع [glibc](https://en.wikipedia.org/wiki/Glibc) قم بتشغيل:```
wget https://github.com/orhun/kmon/releases/download/v[VERSION]/kmon-[VERSION]-x86_64-unknown-linux-gnu.tar.gz
3. استخراج الملفات.```
tar -xvzf kmon-*.tar.gz
5. قم بتشغيل الثنائي.```
./kmon
انقل الملف الثنائي إلى /usr/local/bin/ لتشغيله من الطرفية باستخدام الأمر kmon.
يتم إنشاء صفحة الدليل والإكمال التلقائي للصدفة في وقت البناء في دليل target.
يجب تثبيت libxcb لاستخدام أوامر النسخ/اللصق في X11.
مثال: قم بتثبيت حزمة libxcb1-dev لدبيان/أوبونتو* وحزمة libxcb-devel لفيدورا/openSUSE/فويد لينكس.
kmon [OPTIONS] [COMMAND]
### خيارات```
-a, --accent-color <COLOR> Set the accent color using hex or color name [default: white]
-c, --color <COLOR> Set the main color using hex or color name [default: darkgray]
-t, --tickrate <MS> Set the refresh rate of the terminal [default: 250]
-r, --reverse Reverse the kernel module list
-u, --unicode Show Unicode symbols for the block titles
-E, --regex Interpret the module search query as a regular expression
-h, --help Print help information
-V, --version Print version information
sort Sort kernel modules
#### فرز```
kmon sort [OPTIONS]
خيارات:``` -s, --size Sort modules by their sizes -n, --name Sort modules by their names -d, --dependent Sort modules by their dependent modules -h, --help Print help information
## ربط المفاتيح
| | |
| ----------------------- | ------------------------------------- |
| `[?], F1` | المساعدة |
| `right/left, h/l` | التبديل بين الكتل |
| `up/down, k/j, alt-k/j` | التمرير لأعلى/لأسفل [الكتلة المحددة] |
| `pgup/pgdown` | التمرير لأعلى/لأسفل [أنشطة النواة] |
| `</>` | التمرير لأعلى/لأسفل [معلومات الوحدة] |
| `alt-h/l` | التمرير يمينًا/يسارًا [أنشطة النواة] |
| `ctrl-t/b, home/end` | التمرير إلى الأعلى/الأسفل [قائمة الوحدات] |
| `alt-e/s` | توسيع/تصغير الكتلة المحددة |
| `ctrl-x` | تغيير موضع الكتلة |
| `ctrl-l/u, alt-c` | مسح المخزن المؤقت لحلقة النواة |
| `[d], alt-d` | عرض الوحدات التابعة |
| `[1]..[9]` | الانتقال إلى الوحدة التابعة |
| `[\], tab, backtab` | عرض معلومات النواة التالية |
| `[/], s, enter` | البحث عن وحدة نواة |
| `[+], i, insert` | تحميل وحدة نواة |
| `[-], u, backspace` | إلغاء تحميل وحدة النواة |
| `[x], b, delete` | وضع وحدة النواة في القائمة السوداء |
| `ctrl-r, alt-r` | إعادة تحميل وحدة النواة |
| `m, o` | عرض قائمة الخيارات |
| `y/n` | تنفيذ/إلغاء الأمر |
| `c/v` | نسخ/لصق |
| `r, F5` | تحديث |
| `q, ctrl-c/d, ESC` | خروج |
## الميزات
### المساعدة
اضغط على '`?`' أثناء تشغيل واجهة المستخدم الطرفية لرؤية ربط المفاتيح.

### التنقل والتمرير
تُستخدم `مفاتيح الأسهم` للتنقل بين الكتل والتمرير.

#### تمرير أنشطة النواة
قد تكون بعض رسائل النواة طويلة بما يكفي لعدم مناسبتها لكتلة أنشطة النواة نظرًا لعدم التفافها. في هذه الحالة، يمكن تمرير أنشطة النواة أفقيًا باستخدام المفاتيح `alt-h & alt-l`. آلية التمرير الرأسي مماثلة للكتل الأخرى.

#### التمرير السلس
يمكن استخدام المفاتيح `alt-j & alt-k` لتمرير كتلة نشاط النواة ومعلومات الوحدة ببطء.

### قائمة الخيارات
يمكن استخدام المفاتيح `m` و `o` كاختصار لعمليات إدارة النواة. عند الضغط عليهما، ستظهر قائمة خيارات لإدارة الوحدة النووية المحددة حاليًا.

### أحجام الكتل
يمكن استخدام المفاتيح `alt-e & alt-s` لتوسيع/تصغير الكتلة المحددة.

### مواضع الكتل
يمكن استخدام المفتاح `ctrl-x` لتغيير مواضع الكتل.

### معلومات النواة
استخدم أحد المفاتيح `\, tab, backtab` للتبديل بين معلومات إصدار النواة والإصدار والمنصة.

### معلومات الوحدة
يتم عرض حالة وحدة النواة عند التحديد.

#### عرض الوحدات التابعة
استخدم أحد المفاتيح `d, alt-d` لعرض جميع الوحدات التابعة للوحدة المحددة.

#### القفز إلى الوحدات التابعة
للقفز إلى وحدة نواة تابعة من الوحدة الأم، يمكن استخدام `مفاتيح الأرقام` (1-9) لتحديد فهرس الوحدة في عمود _مستخدم بواسطة_.

### البحث عن وحدة
انتقل إلى منطقة البحث باستخدام مفاتيح الأسهم أو باستخدام أحد المفاتيح `/, s, enter` وقدم استعلام بحث لاسم الوحدة.

### تحميل وحدة
لإضافة وحدة إلى نواة لينكس، انتقل إلى وضع التحميل باستخدام أحد المفاتيح `+, i, insert` وقدم اسم الوحدة المراد تحميلها. ثم قم بتأكيد/إلغاء تنفيذ أمر التحميل باستخدام `y/n`.

الأمر المستخدم لتحميل الوحدة:```
modprobe <module_name> || insmod <module_name>.ko
استخدم أحد المفاتيح -, u, backspace لإزالة الوحدة المحددة من نواة لينكس.

الأمر المستخدم لإزالة وحدة:``` modprobe -r <module_name> || rmmod <module_name>
### حظر الوحدة النمطية
[الحظر](https://wiki.archlinux.org/index.php/Kernel_module#Blacklisting) هو آلية لمنع تحميل وحدة النواة. لحظر الوحدة المحددة، استخدم أحد المفاتيح `x, b, delete` وأكد التنفيذ.

الأمر المستخدم لحظر وحدة نمطية:```
if ! grep -q <module_name> /etc/modprobe.d/blacklist.conf; then
echo 'blacklist <module_name>' >> /etc/modprobe.d/blacklist.conf
echo 'install <module_name> /bin/false' >> /etc/modprobe.d/blacklist.conf
fi
استخدم المفتاح ctrl-r أو alt-r لإعادة تحميل الوحدة المحددة.

الأمر المستخدم لإعادة تحميل الوحدة:``` modprobe -r <module_name> || rmmod <module_name> && modprobe <module_name> || insmod <module_name>.ko
### مسح المخزن المؤقت الحلقي
يمكن مسح المخزن المؤقت الحلقي للنواة باستخدام أحد المفاتيح `ctrl-l/u, alt-c`.
```
dmesg --clear
تم تعيين مفاتيح c/v لعمليات النسخ واللصق.

استخدم ctrl-c/ctrl-v للنسخ واللصق أثناء وجودك في وضع الإدخال.
يمكن استخدام الأمر الفرعي sort لفرز وحدات النواة حسب أسمائها أو أحجامها أو الوحدات التابعة.```
kmon sort --name
kmon sort --size
kmon sort --dependent

أيضًا، يُستخدم العلم `-r, --reverse` لعكس قائمة وحدات kernel.```
kmon --reverse

يستخدم kmon ألوان الطرفية كإعداد افتراضي، ولكن يمكن تحديد لون التمييز باستخدام الخيار -c, --color. بدلاً من ذلك، يمكن ضبط لون النص الافتراضي عبر الخيار -a, --accent-color.
الألوان الطرفية المدعومة هي black, red, green, yellow, blue, magenta, cyan, gray, darkgray, lightred, lightgreen, lightyellow, lightblue, lightmagenta, lightcyan, white.```
kmon --color red

#### استخدام لون مخصص
قم بتوفير قيمة سداسية عشرية للون المراد استخدامه.```
kmon --color 19683a

قد يتسبب لون النص الافتراضي في مشكلات في قابلية القراءة على بعض السمات التي تحتوي على شفافية. يمكن استخدام خيار -a, --accent-color بنفس طريقة استخدام خيار -c, --color للتغلب على هذه المشكلة.```
kmon --color 6f849c --accent-color e35760

### رموز Unicode
استخدم العلامة `-u, --unicode` لعرض رموز Unicode لعناوين الكتل.```
kmon --unicode

يمكن استخدام الخيار -t, --tickrate لضبط فترة التحديث لواجهة المستخدم الطرفية بالميلي ثانية.

يمكن استخدام الخيار -E, --regex للبحث عن الوحدات باستخدام التعبير المنتظم.
يهدف kmon ليكون أداة قياسية لإدارة نواة لينكس مع دعم معظم توزيعات لينكس.
لتحقيق هذا الهدف، يجب أن يكون kmon متاحًا من خلال مديري حزم مختلفين مثل Snap* و RPM.
يُشترط وجود الأدوات الأساسية مثل dmesg و kmod على النظام ليعمل kmon كما هو متوقع. وبالتالي، ستكون الخطوة التالية هي استخدام موارد النظام فقط لهذه الوظائف.
يجب أن تكون إجراءات الإدارة المتعلقة بنواة لينكس قابلة للتطبيق في kmon لتقليل الاعتماد على سطر الأوامر والأدوات الأخرى.
يجب اختبار kmon والإبلاغ عنه على بنى معمارية مختلفة لمزيد من التطوير والدعم.
| Fedora 31 | Debian 10 | Manjaro 19 |
|---|---|---|
![]() | ![]() | ![]() |
| Ubuntu 18.04 | openSUSE | Void Linux |
|---|---|---|
![]() | ![]() | ![]() |
ادعم تطوير مشاريعي من خلال دعمي على GitHub Sponsors.
ادعم جهود التطوير مفتوح المصدر بأن تصبح داعمًا أو راعيًا.
رخصة جنو العمومية العامة (الإصدار 3.0)
حقوق النشر © 2020-2024، Orhun Parmaksız