
लिनक्स कर्नेल प्रबंधक और गतिविधि मॉनिटर 🐧💻
कर्नेल ऑपरेटिंग सिस्टम का वह हिस्सा है जो हार्डवेयर और सॉफ्टवेयर घटकों के बीच परस्पर क्रिया को सुविधाजनक बनाता है। अधिकांश सिस्टमों पर, यह बूटलोडर के बाद स्टार्टअप पर लोड होता है और I/O अनुरोधों के साथ-साथ कीबोर्ड, मॉनिटर, नेटवर्क एडेप्टर और स्पीकर जैसे परिधीय उपकरणों को संभालता है। आमतौर पर, कर्नेल मेमोरी प्रबंधन, प्रक्रिया प्रबंधन, डिवाइस प्रबंधन, सिस्टम कॉल और सुरक्षा के लिए जिम्मेदार होता है।
एप्लिकेशन ऑपरेटिंग सिस्टम से सेवा का अनुरोध करने के लिए सिस्टम कॉल तंत्र का उपयोग करते हैं और अधिकांश समय, यह अनुरोध संबंधित कर्नेल फ़ंक्शन को लागू करने के लिए ऑपरेटिंग सिस्टम द्वारा प्रदान की गई लाइब्रेरी का उपयोग करके कर्नेल को भेजा जाता है। जबकि कर्नेल ये निम्न-स्तरीय कार्य करता है, यह मेमोरी के एक अलग हिस्से में रहता है जिसे संरक्षित कर्नेल स्पेस कहा जाता है, जो एप्लिकेशन और सिस्टम के अन्य भागों के लिए सुलभ नहीं होता है। इसके विपरीत, ब्राउज़र, टेक्स्ट एडिटर, विंडो मैनेजर या ऑडियो/वीडियो प्लेयर जैसे एप्लिकेशन मेमोरी के एक अलग क्षेत्र, यूज़र स्पेस का उपयोग करते हैं। यह पृथक्करण उपयोगकर्ता डेटा और कर्नेल डेटा को एक-दूसरे के साथ हस्तक्षेप करने और अस्थिरता और धीमी गति पैदा करने से रोकता है, साथ ही खराबी वाले एप्लिकेशन प्रोग्राम को पूरे ऑपरेटिंग सिस्टम को क्रैश करने से भी रोकता है।
सिस्टम कॉल और संसाधनों के प्रबंधन के विभिन्न तरीकों के कारण कर्नेल डिज़ाइन अलग-अलग होते हैं। उदाहरण के लिए, जहाँ मोनोलिथिक कर्नेल गति के लिए सभी ऑपरेटिंग सिस्टम निर्देशों को एक ही एड्रेस स्पेस में चलाते हैं, वहीं माइक्रोकर्नेल मॉड्यूलरिटी के लिए उपयोगकर्ता और कर्नेल सेवाओं के लिए अलग-अलग स्पेस का उपयोग करते हैं। इनके अलावा, हाइब्रिड कर्नेल, नैनोकर्नेल और एक्सोकर्नेल भी हैं। हाइब्रिड कर्नेल आर्किटेक्चर माइक्रोकर्नेल और मोनोलिथिक कर्नेल के पहलुओं के संयोजन पर आधारित है।
लिनक्स कर्नेल एक ओपन-सोर्स, मोनोलिथिक और यूनिक्स-जैसा ऑपरेटिंग सिस्टम कर्नेल है जो लिनक्स वितरणों, राउटर जैसी विभिन्न एम्बेडेड प्रणालियों और सभी एंड्रॉइड-आधारित सिस्टम में उपयोग किया जाता है। लिनस टॉर्वाल्ड्स ने 1991 में लिनक्स कर्नेल की कल्पना की और इसे बनाया, और आज भी हजारों डेवलपर्स द्वारा इसका विकास जारी है। यह मुक्त और ओपन सोर्स सॉफ्टवेयर का एक प्रमुख उदाहरण है और इसका उपयोग अन्य मुक्त सॉफ्टवेयर परियोजनाओं, विशेष रूप से GNU ऑपरेटिंग सिस्टम में किया जाता है। हालाँकि लिनक्स-आधारित ऑपरेटिंग सिस्टम अधिकांश कंप्यूटिंग पर हावी हैं, फिर भी उनमें कुछ डिज़ाइन दोष हैं जो लिनक्स के शुरुआती दिनों में काफी बहस का विषय थे। उदाहरण के लिए, इसमें अन्य प्रकार के कर्नेल की तुलना में सबसे बड़ा पदचिह्न और सबसे अधिक जटिलता है। लेकिन यह एक डिज़ाइन विशेषता है जो मोनोलिथिक कर्नेल में निहित होती है। इस प्रकार के डिज़ाइन मुद्दों ने डेवलपर्स को लिनक्स कर्नेल में नई सुविधाएँ और तंत्र जोड़ने के लिए प्रेरित किया, जो अन्य कर्नेल में नहीं होते हैं।
मानक मोनोलिथिक कर्नेल के विपरीत, लिनक्स कर्नेल मॉड्यूलर भी है, जो लोडेबल कर्नेल मॉड्यूल (LKM) को स्वीकार करता है जो आमतौर पर नए हार्डवेयर (डिवाइस ड्राइवर के रूप में) और/या फ़ाइल सिस्टम के लिए समर्थन जोड़ने, या सिस्टम कॉल जोड़ने के लिए उपयोग किए जाते हैं। चूंकि LKM को रनटाइम पर सिस्टम में लोड और अनलोड किया जा सकता है, उनके पास रीबूट और पुन: संकलन के बिना कर्नेल का विस्तार करने का लाभ है। इस प्रकार, मॉड्यूल द्वारा प्रदान की गई कर्नेल कार्यक्षमताएं उपयोग के बिना मेमोरी में नहीं रहेंगी, और संबंधित मॉड्यूल को मेमोरी और अन्य संसाधनों को मुक्त करने के लिए अनलोड किया जा सकता है।
लोडेबल कर्नेल मॉड्यूल लिनक्स में .ko (kernel object) एक्सटेंशन के साथ /lib/modules में स्थित होते हैं। जहाँ 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 लाइब्रेरीज़ का उपयोग करता है।
cargo install kmon
न्यूनतम समर्थित Rust संस्करण (MSRV) `1.74.1` है।
### Arch Linux
**kmon** को Arch Linux [आधिकारिक रिपॉजिटरी](https://www.archlinux.org/packages/extra/x86_64/kmon/) से स्थापित किया जा सकता है।```
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) के लिए उपलब्ध है। इसे [समुदाय रिपॉजिटरी](https://wiki.alpinelinux.org/wiki/Repositories) को सक्षम करने के बाद [apk](https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper) के माध्यम से स्थापित किया जा सकता है।```
apk add kmon
```
docker run -it --cap-add syslog orhunp/kmon:tagname
#### निर्माण```
docker build -t kmon .
docker run -it --cap-add syslog kmon
### मैनुअल
1. नवीनतम बाइनरी को [releases](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 की कॉपी/पेस्ट कमांड का उपयोग करने के लिए स्थापित करना चाहिए।
जैसे: Debian/Ubuntu के लिए libxcb1-dev पैकेज स्थापित करें* और Fedora/openSUSE/Void Linux के लिए libxcb-devel पैकेज।
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` | बाहर निकलें |
## विशेषताएँ
### सहायता
टर्मिनल UI चलाते समय कुंजी बाइंडिंग देखने के लिए '`?`' दबाएँ।

### नेविगेट करना और स्क्रॉल करना
'एरो कीज़' का उपयोग ब्लॉकों के बीच नेविगेट करने और स्क्रॉल करने के लिए किया जाता है।

#### कर्नेल गतिविधियों को स्क्रॉल करना
कुछ कर्नेल संदेश इतने लंबे हो सकते हैं कि वे कर्नेल गतिविधियों ब्लॉक में फिट नहीं होते क्योंकि वे रैप नहीं होते। इस स्थिति में, कर्नेल गतिविधियों को `alt-h और alt-l` कुंजियों से क्षैतिज रूप से स्क्रॉल किया जा सकता है। लंबवत स्क्रॉलिंग तंत्र अन्य ब्लॉकों के समान है।

#### स्मूथ स्क्रॉलिंग
`alt-j और alt-k` कुंजियों का उपयोग कर्नेल गतिविधि और मॉड्यूल जानकारी ब्लॉकों को धीरे-धीरे स्क्रॉल करने के लिए किया जा सकता है।

### विकल्प मेनू
`m` और `o` कुंजियों का उपयोग कर्नेल प्रबंधन संचालन के शॉर्टकट के रूप में किया जा सकता है। दबाने पर, वर्तमान में चयनित कर्नेल मॉड्यूल के प्रबंधन के लिए एक विकल्प मेनू प्रदान किया जाएगा।

### ब्लॉक आकार
`alt-e और alt-s` कुंजियों का उपयोग चयनित ब्लॉक को विस्तार/संकुचित करने के लिए किया जा सकता है।

### ब्लॉक स्थितियाँ
`ctrl-x` कुंजी का उपयोग ब्लॉकों की स्थिति बदलने के लिए किया जा सकता है।

### कर्नेल जानकारी
कर्नेल रिलीज़, संस्करण और प्लेटफ़ॉर्म जानकारी के बीच स्विच करने के लिए `\, tab, backtab` कुंजियों में से किसी एक का उपयोग करें।

### मॉड्यूल जानकारी
चयन पर कर्नेल मॉड्यूल की स्थिति दिखाई जाती है।

#### आश्रित मॉड्यूल प्रदर्शित करना
चयनित मॉड्यूल के सभी आश्रित मॉड्यूल दिखाने के लिए `d, alt-d` कुंजियों में से किसी एक का उपयोग करें।

#### आश्रित मॉड्यूल पर जाना
अपने पैरेंट मॉड्यूल से एक आश्रित कर्नेल मॉड्यूल पर जाने के लिए, _Used By_ कॉलम में मॉड्यूल का इंडेक्स निर्दिष्ट करने के लिए `number keys` (1-9) का उपयोग किया जा सकता है।

### मॉड्यूल खोजना
एरो कीज़ या `/, s, enter` में से किसी एक का उपयोग करके खोज क्षेत्र पर स्विच करें और मॉड्यूल नाम के लिए खोज क्वेरी प्रदान करें।

### मॉड्यूल लोड करना
Linux कर्नेल में एक मॉड्यूल जोड़ने के लिए, `+, i, insert` कुंजियों में से किसी एक के साथ लोड मोड पर स्विच करें और लोड करने के लिए मॉड्यूल का नाम प्रदान करें। फिर `y/n` के साथ लोड कमांड के निष्पादन की पुष्टि/रद्द करें।

मॉड्यूल लोड करने के लिए उपयोग किया जाने वाला कमांड:```
modprobe <module_name> || insmod <module_name>.ko
चयनित मॉड्यूल को Linux कर्नेल से हटाने के लिए -, 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

Also the `-r, --reverse` फ़्लैग का उपयोग कर्नेल मॉड्यूल सूची को उलटने के लिए किया जाता है।```
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

### यूनिकोड प्रतीक
ब्लॉक शीर्षकों के लिए यूनिकोड प्रतीक दिखाने हेतु `-u, --unicode` फ्लैग का उपयोग करें।```
kmon --unicode

-t, --tickrate विकल्प का उपयोग टर्मिनल UI के रिफ्रेश अंतराल को मिलीसेकंड में सेट करने के लिए किया जा सकता है।

-E, --regex विकल्प का उपयोग रेगुलर एक्सप्रेशन द्वारा मॉड्यूल खोजने के लिए किया जा सकता है।
kmon का लक्ष्य अधिकांश लिनक्स वितरणों का समर्थन करते हुए लिनक्स कर्नेल प्रबंधन के लिए एक मानक उपकरण बनना है।
इस लक्ष्य को प्राप्त करने के लिए, kmon को विभिन्न पैकेज मैनेजरों जैसे Snap* और RPM से सुलभ होना चाहिए।
kmon के अपेक्षित रूप से काम करने के लिए सिस्टम पर dmesg और kmod जैसे आवश्यक उपकरणों का होना आवश्यक है। इस प्रकार अगला कदम इन कार्यों के लिए केवल सिस्टम संसाधनों का उपयोग करना होगा।
कमांड लाइन और अन्य उपकरणों पर निर्भरता को कम करने के लिए kmon में लिनक्स कर्नेल के बारे में प्रबंधन क्रियाएँ लागू होनी चाहिए।
आगे के विकास और समर्थन के लिए विभिन्न आर्किटेक्चर पर kmon का परीक्षण और रिपोर्ट किया जाना चाहिए।
| Fedora 31 | Debian 10 | Manjaro 19 |
|---|---|---|
![]() | ![]() | ![]() |
| Ubuntu 18.04 | openSUSE | Void Linux |
|---|---|---|
![]() | ![]() | ![]() |
GitHub Sponsors पर मुझे समर्थन करके मेरी परियोजनाओं के विकास में सहायता करें।
बैकर या प्रायोजक बनकर ओपन सोर्स विकास प्रयासों का समर्थन करें।
ग्नू जनरल पब्लिक लाइसेंस (3.0)
कॉपीराइट © 2020-2024, Orhun Parmaksız