Nieskazitelne moduły użytkownika. Beznadziejny. Instalowanie modułów jądra systemu Linux

]

Moduły służą do rozszerzania i modyfikowania sposobu działania ZNC. Użytkownicy wchodzą w interakcję z modułami najczęściej poprzez wysyłanie wiadomości do specjalnego użytkownika na IRC. Na przykład, aby wyświetlić najważniejsze słowa kluczowe na liście obserwowanych, wyślij /msg *lista obserwowanych. Kiedy ZNC widzi, że nick, do którego wysyłasz wiadomość, zaczyna się od gwiazdki, nie przekazuje wiadomości do IRCd/serwera, ale zamiast tego wysyła ją do odpowiedniego modułu w celu przetworzenia. W takim przypadku moduł zegarka otrzyma wiadomość i odpowie listą słów kluczowych. Zapewnia to bardzo wygodny i standardowy sposób konfigurowania lub innej komunikacji z załadowanymi modułami, a także powszechny i ​​standardowy sposób wyświetlania statusu lub innych informacji przez załadowane moduły. Zauważ, że dotyczy to załadowanych modułów. Musisz załadować dany moduł np /znc zegarek loadmod, zanim będziesz mógł połączyć się z modułem zegarka. Większość modułów odpowie na /msg *pomoc modułu z listą dostępnych poleceń.

Ładowane są również moduły ZNC globalnie, na sieć lub na a na użytkownika podstawa. Każdy moduł sam określa, czy jest dostępny do załadowania jako globalny, specyficzny dla sieci i/lub specyficzny dla użytkownika. Moduły na poziomie użytkownika i sieci mogą wykonywać różne czynności, od manipulowania przychodzącymi/wychodzącymi wiadomościami po implementację pełnego klienta Twittera. Mogą również wykonywać bardziej tradycyjne zadania IRC, takie jak automatyczna operacja oparta na wyzwaniach, ustawianie cię lub logowanie na dysk. Każdy użytkownik może załadować i skonfigurować własny zestaw modułów, aby dostosować swoje wrażenia do swoich preferencji.

Moduły globalne są ładowane przez administratorów i zapewniają funkcjonalność lub zmianę zachowania dla wszystkich użytkowników. Na przykład moduł partyline musi być globalny, ponieważ zapewnia funkcjonalność dla wszystkich użytkowników danej instancji ZNC, aby mogli komunikować się ze sobą z samego ZNC. Moduły globalne mogą robić wszystko, co mogą robić moduły na poziomie użytkownika, a także kilka dodatków. Mogą zastąpić system uwierzytelniania ZNC, modyfikować proces pisania konfiguracji, radzić sobie z CAP itp.

Nie krępuj się tworzyć stron wiki o modułach, które stworzyłeś, ale nie zapomnij dodać linku do pobrania, informacji kontaktowych i używać tego samego układu, co pozostałe moduły.Wkład jest zawsze bardzo ceniony.

Lista modułów [edytować]

Moduły globalne [edytować]

adminlog Rejestruj połączenia, rozłączenia i nieudane logowania użytkowników do pliku i/lub do syslog. blockuser Blokuje niektórym użytkownikom możliwość korzystania z ZNC, informując, że ich konto zostało wyłączone. certauth Ten moduł umożliwia użytkownikom logowanie za pomocą kluczy klienta SSL. cyrusauth Ten moduł jest przeznaczony dla administratorów, którzy prowadzą serwer shell/web/email/etc i chcą zapewnić dostęp do ZNC swoim istniejącym użytkownikom. fail2ban Blokuj adresy IP na jakiś czas po nieudanym logowaniu. identfile Wysyła identyfikator użytkownika do pliku, gdy próbuje się połączyć. imapauth Zezwalaj użytkownikom na uwierzytelnianie przez IMAP. lastseen Rejestruje, kiedy użytkownik ostatnio logował się do ZNC. modperl Ładuje skrypty Perla jako moduły ZNC. modpython Umożliwia korzystanie z modułów napisanych w Pythonie. notify_connect Wysyła powiadomienie do wszystkich administratorów, gdy użytkownik loguje się lub wylogowuje z ZNC. partyline Umożliwia użytkownikom ZNC dołączanie do kanałów wewnętrznych i wysyłanie zapytań do innych użytkowników ZNC na tym samym ZNC. webadmin Umożliwia dodawanie/usuwanie/edycję użytkowników i ustawień w locie za pośrednictwem przeglądarki internetowej.

Moduły użytkownika [edytować]

admin (Panel sterowania teraz) Umożliwia dodawanie/usuwanie/edycję użytkowników i ustawień w locie za pośrednictwem wiadomości IRC. autoattach Obserwuje odłączone kanały i automatycznie łączy cię ponownie, gdy na kanale dodanym do listy automatycznego dołączania pojawi się określona aktywność. automatyczna odpowiedź Daje automatyczną odpowiedź, jeśli ktoś napisze do Ciebie podczas Twojej nieobecności. block_motd Blokuje Wiadomość Dnia serwera bouncedcc Odbija transfery DCC przez serwer znc zamiast wysyłać je bezpośrednio do użytkownika buffextras Dodaj zmiany nicków, przyłączeń, części, zmiany tematów itp. do bufora odtwarzania chansaver Zapisuje kanały do ​​konfiguracji, kiedy user joins and parts.charset Normalizuje (tj. konwertuje) kodowanie znaków.clearbufferonmsg Ten moduł próbuje wypełnić lukę między byciem zalanym starym buforem, jeśli masz KeepBuffer=true; =false.clientnotify Powiadamiaj o nowych połączeniach przychodzących do twojego user.controlpanel Zezwala możesz dodawać/usuwać/edytować użytkowników i ustawienia w locie poprzez wiadomości IRC. ctcpflood Ten moduł próbuje zablokować CTCP floods.dcc Ten moduł pozwala na przesyłanie plików do iz ZNC disconkick Ten moduł wyrzuci twojego klienta ze wszystkich kanałów jeśli ZNC rozłącza się z serwerem. ch są zalane. listsockets Ten moduł wyświetla listę wszystkich otwartych gniazd w ZNC. log Rejestruj aktywność czatu w pliku. missmotd Ten moduł użytkownika wyśle ​​422 do klientów podczas logowania. notatki Zachowaj i odtwarzaj notatki. To jest przykład WebModów. sample To jest przykładowy moduł, który pomaga w pisaniu modułów do robienia wszystkiego, co chcesz. send_raw Umożliwia wysyłanie surowego ruchu do IRC od innych użytkowników. shell Uzyskaj dostęp do powłoki Uniksa poprzez zapytanie bezpośrednio w kliencie IRC.

Moduły sieciowe [edytować]

autocykl Dołącz ponownie do kanału, gdy jesteś na nim sam (aby uzyskać status operatora). autoop Automatycznie nadaj dobrym ludziom status operatora. modtcl Umożliwia uruchamianie skryptów Tcl w ZNC. autovoice Automatycznie nadaj głos wszystkim, którzy dołączą do jakiegoś kanału. awaynick Zmień swój nick podczas nieobecności. awaystore Gdy zostaniesz oddzielony lub odłączony, ten moduł zapisze dla Ciebie wszystkie prywatne wiadomości. Wiadomości można czytać, dopóki ich nie usuniesz. Ten moduł odstraszy Cię również, gdy będziesz przez jakiś czas bezczynny. cert Ten moduł pozwala użytkownikom używać własnego certyfikatu SSL do łączenia się z serwerem. crypt Szyfrowanie kanałów/prywatnych wiadomości. keepnick Próbuje zdobyć i zachować twój główny nick, jeśli jest zajęty. kickrejoin Implementuje automatyczne ponowne dołączanie po kopnięciu. modules_online Fałszuje stan online modułów ZNC, aby naprawić niektórych klientów. nickserv Autoryzuje cię z NickServ. wykonaj Wykonaj polecenia podczas łączenia. Uwierzytelnia cię za pomocą Q (i trochę więcej). raw Zobacz cały surowy ruch. route_replies Kieruje odpowiedzi z powrotem do właściwego klienta, gdy jest połączony z wieloma klientami. sasl Umożliwia uwierzytelnienie w sieci IRC przez SASL savebuff Zapisuje bufory kanałów w zaszyfrowanym pliku, aby mogły przetrwać restarty i restarty. schat SSL (szyfrowane) czaty DCC. simple_away Automatycznie ustawia cię na IRC po rozłączeniu z bramkarzem. stickychan Utrzymuje cię w określonych kanałach. oglądaj Monitoruj aktywność pod kątem określonych wzorców tekstowych od określonych użytkowników i wysyłaj tekst do specjalnego okna zapytania.

Więcej modułów [edytować]

Zarządzanie modułami [edytować]

Moduły można łatwo dodawać lub usuwać. Moduły mogą być domyślnie przechowywane w ~/.znc/modules i /usr/local/lib/znc. ZNC instaluje swoje moduły w tym drugim katalogu, którym w rzeczywistości jest $(prefix)/lib/znc , ale można to zmienić za pomocą ./configure --module-prefix=DIR przed kompilacją.

ZNC będzie najpierw szukać modułów w lokalnych podkatalogach podczas wyszukiwania modułów. Tylko pliki kończące się na „.so” będą postrzegane jako moduły. Aby usunąć moduły, możesz po prostu usunąć je z folderu. Żadne inne zmiany konfiguracji ani ponowne uruchomienie nie są konieczne. Aby usunąć, ale także zachować moduł do późniejszego wykorzystania, możesz również zmienić nazwę, na przykład: mv sample.so sample.so_ .

Aby skompilować nowy moduł, musisz najpierw zapisać źródło jako plik „.cpp”. Moduły kompilacji szczegółowo opisują proces.

Moduły globalne, użytkownika i sieciowe można (wyjmować) ładować z poziomu webadmina lub za pomocą okna zapytania *status, na przykład:

/msg *status LoadMod [--type=global|użytkownik|sieć] /msg *status UnloadMod [--type=global|użytkownik|sieć]

  • konfiguracja
  • [--type=global|user|network] opcjonalnie określa, czy (rozładować) moduł jako moduł globalny, użytkownika lub sieciowy. nie wszystkie moduły można załadować na wszystkich poziomach; zapoznaj się z dokumentacją poszczególnych modułów, aby dowiedzieć się, gdzie można je załadować.
  • opiera się na nazwie pliku modułów, z wyłączeniem rozszerzenia „.so”.
  • Są specyficzne dla każdego modułu i nie są wymagane: Możesz podać parametry podczas ładowania modułu lub skonfigurować moduł po jego załadowaniu.

Tak więc, aby załadować dziennik moduł na światowy poziomu (w przeciwieństwie do użytkownika lub sieci) i usuń wszystkie kody kontrolne koloru/formatowania za pomocą -zdezynfekować parametr, należy wpisać:

/msg *status LoadMod --type=global log -sanitize

W przypadku starszych wersji ZNC nie będziesz mieć możliwości określenia [--type=global|user|network] . W takim przypadku po prostu użyj:

/msg *status LoadMod /msg *status WyładujMod

Należy pamiętać, że użytkownik nie może załadować modułu, jeśli dyrektywa „DenyLoadMod” jest ustawiona na wartość true. Próba załadowania modułu zakończy się niepowodzeniem z komunikatem „Nie można załadować [ ]Brak dostępu.".

Jeśli moduł uniemożliwia uruchomienie ZNC i dlatego nie możesz wyładować modułu za pomocą webadmin, możesz edytować znc.conf i usunąć odpowiednią linię LoadModule.

za pomocą modułów [edytować]

Zaleca się przeczytanie strony wiki modułu, jeśli chcesz dowiedzieć się, jak działa moduł. Alternatywnie można użyć następującego polecenia, aby uzyskać listę poleceń:

/wiadomość* Wsparcie

  • * to StatusPrefix ustawiony w twojej konfiguracji. Zwykle jest to po prostu gwiazdka („*”).

WĘZEŁ.JS- narzędzie programowe do wykonywania js.

Nodejs = V8 + I/O + Biblioteki

V8: szybki, nowoczesny, ekonomiczny

Zalety

  • javascript
  • Wspólny kod na kliencie i serwerze
  • Podstawowe zadania internetowe
  • Wiele połączeń i zadań jednocześnie
  • Łatwo stworzyć działający prototyp
  • Poręczny menedżer pakietów npm
  • Wspólnota

Instalacja

podczas instalacji nodejs zapisuje się do zmiennej PATH (+ npm), [administracja - zmienne środowiskowe]; można sprawdzić w wierszu poleceń:
ustaw ŚCIEŻKĘ

Z reguły pliki są uruchamiane pod nodejs: napiszmy prosty skrypt i uruchommy go z linii poleceń:


Skrypt zostanie wykonany, a wynik zostanie wyświetlony w wierszu poleceń.

dokumentacja nodejs

moduły nodejs

Aby zrozumieć, jak działają wbudowane moduły nodejs, musisz pobrać archiwum źródłowe ze strony nodejs (kod źródłowy). I przejdź do katalogu lib. (polecenie dir - pobierz listę plików za pomocą wiersza poleceń; Jeśli chcesz wyświetlić listę plików we wszystkich podfolderach, zamiast „ dir ” użyj „ dir / s ”). Jeśli zainstalowałeś nodejs z pakietu, nie znajdziesz plików w folderze lib.

Nodejs ma moduły o różnym stopniu stabilność. (np. 0 - nie używaj; 1 , 2 - możesz używać, ale API modułu może ulec zmianie).

Funkcje rosną (projekt się rozwija) iz czasem trzeba będzie przenieść funkcję konstruktora USER do osobnego pliku. Tutaj do gry wchodzą moduły.

Moduły są rodzajem sposobu, w jaki nodejs oferuje organizację projektu.

Projekty mają tendencję do rozrastania się, co prowadzi do chęci podzielenia projektu na kilka plików - tu do gry wchodzą moduły.

wymagać

W przypadku stron HTML tag script służy do łączenia skryptów. Istnieje specjalne polecenie require w nodejs.

var użytkownik = wymagaj("./użytkownik");

W naszym przykładzie uzyskujemy dostęp do pliku (user.js) w tym samym katalogu (rozszerzenie (.js) jest opcjonalne).

//wymagaj("./użytkownik"); // .js jest opcjonalny // w tym przypadku plik zostanie wykonany, ale zmienna USER // nie będzie // jest to główna różnica w stosunku do znaczników skryptu z nodejs // W node.js funkcje i zmienne każdego modułu są // globalne dla tego pliku (samego modułu) i nie stają się automatycznie // dostępne, gdy są dołączone (require("./user")) // Ale jak uzyskać dostęp? // Każdy moduł posiada specjalną zmienną exports - jest to obiekt i // to co tam wstawię zwróci w wyniku require var user = require("./user.js"); // wynik: użytkownik = ( Użytkownik: funkcja )

Pierwsza różnica między modułowym systemem nodejs a skryptami przeglądarki polega na tym, że jeśli przeglądarka ma dwa tagi script, to funkcja zdefiniowana globalnie w jednym z nich jest dostępna w drugim, ale nie w nodejs. W nodejs funkcje i zmienne są globalne dla danego pliku (nie są udostępniane przez wymaganie). W ten sposób nodejs pozwala pisać prawdziwie niezależne moduły. Ale aby moduł był dostępny, jest używany systemie eksportowym. Każdy moduł ma specjalną zmienną exports.

Katalog modułów DIR/index

Łączymy folder bezpośrednio var user = require("./user"); , który zawiera odpowiedni plik index.js .

Na przykład

Function User(name)( this.name = name; ) User.prototype.hello = function(kto)( console.log(phrases.Hello + ", " + kto.name); ); eksport.Użytkownik = Użytkownik;

Podłączanie i używanie konstruktora User w pliku ./server.js

//server.js var użytkownik = wymagaj("./użytkownik"); var Wasya = nowy użytkownik.Użytkownik("Wasya");

„./” — względem bieżącego folderu

exports jest obiektem i wszystko, co się tam znajdzie, zostanie zwrócone jako wynik require(exports.jpg). W ten sposób moduł może zadeklarować swoje prywatne zmienne/funkcje i eksportować tylko to, co jest potrzebne.


Dla zmiennych globalnych itp. istnieje obiekt globalny

Globalny.Użytkownik = Użytkownik;

Wynik

  • Połączenie wymaga
  • Zmienne: var (prywatne dla modułów), exports , global (rzadko używane)
  • Typy modułów: js , node (z rozszerzeniem .node), json (z rozszerzeniem .json) . Moduły json są używane, gdy wymagane jest przechowywanie prostych informacji w pliku.
  • Katalog modułów DIR/index

obiekt modułu

  • obiekt modułu
  • moduł-funkcja moduł.eksport = funkcja
  • Buforowanie modułu (moduł nigdy nie jest ponownie czytany)
  • Lokalizacja modułu: Kolejność wyszukiwania
  • Przekazywanie parametrów: fabryka modułów

Obiekt modułu (podstawowy obiekt dla modułów) jest zmienną, która istnieje w każdym module (pliku, można wypisać console.log(moduł);). . Treść: właściwość id - zwykle ścieżka do pliku,
parent - link do modułu nadrzędnego (module.parent - link do modułu nadrzędnego, który tego wymaga),
dzieci (module.children - te moduły, które są połączone przez require),
eksportuje nieruchomości i inne.

Moduł czy aplikacja? moduł.rodzic

Moduł można uruchomić bezpośrednio, a jeśli nie, jeśli funkcjonalność jest połączona z innym modułem, to pozwól mu wyeksportować tę funkcjonalność. Możesz rozdzielić te dwa przypadki, zaznaczając:

If(module.parent) ( exports.run = run; ) else ( run(); )


ps: jak mówi na stackoverflow.com, rodzicem jest moduł, który wywołał skrypt do interpretacji

// $ węzeł foo.js console.log(module.parent); // null // require("./foo") console.log(module.parent); // ( ... )

Właściwe użycie module.exports

W ramach modułu:

module.exports = exports = this (te konstrukcje są równoważne)

Jeśli chcesz przekazać funkcję nie w obiekcie, ale bezpośrednio, użyj następującej składni:

Module.exports = Użytkownik;


Buforowanie modułu

Kiedy Nodejs ładuje moduł, całkowicie tworzy odpowiedni obiekt modułu (biorąc pod uwagę parent , exports i inne podobne właściwości) i zapamiętuje go w sobie (module.id (pełna ścieżka do pliku) służy jako identyfikator wewnętrznej pamięci podręcznej) i następnym razem, gdy uzyskamy dostęp (połączenie) z dowolnym modułem (plikiem), nodejs pobierze ten sam obiekt z pamięci podręcznej. Czyli np. wystarczy raz zainicjować moduł w dowolnym pliku, w przyszłości można go po prostu użyć.

W naszym przypadku for var db = require("../db");
i dla var db = require("./db"); wziąć ten sam przedmiot. Dlatego zasada jest następująca: przy pierwszym użyciu modułu jest on inicjowany, a w przyszłości tylko go podłączamy i używamy (czyli w naszym przypadku nie musimy używać db.connect() dwa razy, czyli w różnych plikach).


Lokalizacja modułu: kolejność wyszukiwania modułów w nodejs

Jak sprawić, by db zawsze łączył się bez określania określonej ścieżki:

vardb = wymagaj("../db"); //lub var db = require("./db");

ale tak:

vardb = wymagaj("db");

bez względu na to, w którym pliku znajduje się db.

Aby to zrobić, musisz zrozumieć kolejność, w jakiej przeszukiwane są moduły w nodejs (co się dzieje, gdy wywoływane jest require). Istnieje wiele wbudowanych modułów w nodejs, takich jak require("fs"); , które połączą się bez problemów. Jeśli określisz określoną ścieżkę w require, na przykład, require("../db"); , wtedy wyszukiwanie będzie oparte na podanej ścieżce i plik zostanie znaleziony lub nodejs spróbuje pobrać ten plik jako katalog (i będzie szukał index.js wewnątrz kategorii).

Jeśli określisz require("db"); a moduł nie jest wbudowany, to katalog node_modules zostanie przeszukany względem aktualnej pozycji (jeśli zostanie znaleziony, spróbuje pobrać z niego moduł). Jeśli brakuje katalogu node_modules, to katalog node_modules zostanie przeszukany powyżej i tak dalej.

Oprócz określenia określonej ścieżki dla modułu, nodejs może szukać takich modułów:

Wprowadzenie do npm - menedżera pakietów dla Node.JS

  1. utwórz plik z opisem pakietu (package.json), który zawiera informacje o module (nazwę, wersję itp.). Albo ręcznie, albo za pomocą polecenia
    npm init
    (poprosi o odpowiednie informacje)
  2. Aby opublikować moduł:
    1. Dodaj użytkownika za pomocą polecenia npm adduser (musisz podać nazwę użytkownika i hasło). Teraz cała praca z npm będzie wykonywana w imieniu tego użytkownika. Użytkownik może zalogować się do https://www.npmjs.com/~name_user i obserwować swoje moduły.
    2. Publikuj: npm publikuj
  3. Co więcej, ktoś może skorzystać z Twojego modułu dodanego do bazy danych, a sam użytkownik może wprowadzać zmiany.
  4. Uzyskaj wszystkie polecenia npm za pomocą polecenia npm help
  5. Wyszukaj moduł w bazie danych: słowa kluczowe npm s lub słowa kluczowe wyszukiwania npm (na przykład super moduł npm s)
  6. Zainstaluj moduł: npm install name_module lub npm i name_module
  7. Podczas instalowania modułów nodejs najpierw wyszukuje folder node_modules w bieżącym katalogu (potem wyżej i wyżej itd.) lub (jeśli brakuje node_modules) szuka package.json (również idzie w górę; projekt) i odpowiednio, jeśli znajdzie package.json, tworzy folder node_modules w odpowiednim katalogu; jeśli obie opcje zawiodą, nodejs tworzy folder node_modules w bieżącym katalogu. Jeśli chcesz umieścić moduł w określonym katalogu, musisz utworzyć folder node_modules w tym katalogu.
  8. npm up zaktualizuj moduł (sprawdzi, czy moduły znajdują się w folderze node_modules pod kątem aktualizacji)
  9. npm usuń nazwa_modułu (usuń moduł)

wyjście npm:

npm init
użytkownik nmp
npm opublikuj
słowa kluczowe wyszukiwania npm
moduł instalacyjny npm
moduł aktualizacji npm
npm usuń moduł
polecenie pomocy npm

Struktura pakietu NPM

Instalowanie żądanej wersji, na przykład: npm i [e-mail chroniony]

Najnowszą wersję modułu można uzyskać, jeśli moduł jest rozwijany przy użyciu systemu wersjonowania git, na przykład na github. Wystarczy pobrać Git Read-Only (url): https://github.com/strongloop/express.git i w konsoli:

npm i https://github.com/strongloop/express.git

zależności w pliku package.json

zależności wskazują na moduły, od których ten zależy.

devZależności

Moduły zarejestrowane w devDependencies nie są instalowane, jeśli moduł jest pobierany jako zależność. Są instalowane tylko w celach rozwojowych i można je zainstalować, jeśli np. przejdziesz do modułu w folderze node_modules i napiszesz npm i (lub podczas ustawiania flagi npm config).

pole główne określa punkt wejścia do paczki

Globalne moduły

Każdy moduł można zainstalować globalnie, ustawiając flagę -g: npm -g module

Globalne środki do katalogu systemowego.

Katalog modułów globalnych pod oknami:

C:\users\Nazwa_użytkownika\AppData\Roaming\npm

Moduły globalne są umieszczane w standardowym katalogu systemowym. Te pliki binarne, które znajdują się w package.json, zostaną dostarczone do ścieżki systemowej (jest to główne zastosowanie modułów globalnych), czyli w przyszłości będą mogły być wywoływane przez konsolę.

Na podstawie materiałów kursów I. Kantora

Cm … Słownik synonimów

beznadziejny, beznadziejny, beznadziejny; beznadziejny, beznadziejny, beznadziejny (książka). Nieodwracalny, niekończący się. Beznadziejny smutek. Słownik wyjaśniający Uszakowa. DN Uszakow. 1935 1940... Słownik wyjaśniający Uszakowa

ZDECYDOWANE, och, och; legowisko, dno (książka). O żalu, smutku: bez rezultatu, bez końca. Beznadziejna tęsknota. | rzeczownik beznadziejność i żony. Słownik wyjaśniający Ożegowa. SI. Ozhegov, N.Yu. Szwedowa. 1949 1992... Słownik wyjaśniający Ożegowa

beznadziejny- beznadziejna tragedia... Słownik rosyjskich idiomów

ja przym. Długie, niekończące się. II przym. 1. Nie pozostawia nadziei na pomyślny wynik lub poprawę; beznadziejny 1.. 2. Nie rokujący sukcesu, skazany na porażkę; beznadziejny 2.. 3. Wyrażanie braku nadziei, rozpaczy, beznadziejności; … Współczesny słownik wyjaśniający języka rosyjskiego Efremova

Beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, beznadziejny, ... ... Formy słów

beznadziejny- bezish jeden; krótko kształt legowiska, dno... Słownik pisowni rosyjskiej

beznadziejny- kr.f. beznadziejnie / legowisko, beznadziejnie / dno, dno, dno; beznadziejny / dzień ... Słownik ortograficzny języka rosyjskiego

Aja, och; dno, dno, dno. = Beznadziejny (1, 3 cyfry). Druga sytuacja. Moja potrzeba. tęsknota Boga. Być w beznadziejnej sytuacji. ◁ Beznadziejnie, adw. B. bolesne minuty. Beznadzieja i; oraz. Poczucie beznadziei... słownik encyklopedyczny

beznadziejny- och, och; legowisko, dno, dno.; = beznadziejny 1), 3) patrz też. beznadziejna, beznadziejna sytuacja Bai. Moja potrzeba. Boża tęsknota... Słownik wielu wyrażeń

Książki

  • Wspaniały lekarz, A. I. Kuprin. „Niech Bóg sprawi, aby nadchodzący rok traktował was trochę bardziej protekcjonalnie niż ten, a co najważniejsze, nie traćcie ducha” – powiedział dr Pirogow rodzinie Mercałowów. Nawet w najbardziej beznadziejnym momencie...
  • Prima Aprilis, Josip Nowakowicz. Czego osoba urodzona w Prima Aprilis może oczekiwać od życia? Zwłaszcza jeśli jest rok 1948 i dyktator Tito dochodzi do władzy w rodzinnej Chorwacji? Pełen nadziei i ambicji Ivan Dolinar wkracza…

Jak wiesz z artykułu Czym jest jądro Linuksa, jądro jest monolityczne. Oznacza to, że cały kod wykonywalny jest skoncentrowany w jednym pliku. Ta architektura ma pewne wady, takie jak niemożność zainstalowania nowych sterowników bez przebudowy jądra. Ale programiści znaleźli rozwiązanie tego problemu, dodając system modułów.

Jądro Linuksa umożliwia osobną kompilację sterowników sprzętowych, systemów plików i niektórych innych komponentów - jako modułów, a nie jako część samego jądra. W ten sposób możesz aktualizować sterowniki bez przebudowy jądra, a także dynamicznie rozszerzać jego funkcjonalność. Oznacza to również, że możesz zawrzeć tylko najbardziej potrzebne rzeczy w jądrze, a wszystko inne połączyć za pomocą modułów. To jest bardzo proste.

W tym artykule omówimy moduły jądra Linuksa, podstawy pracy z nimi, przeglądanie już załadowanych modułów, ładowanie, instalowanie i wyłączanie modułów. Oprócz całkowitego wyłączenia, dodania do czarnej listy i dodania nowych modułów jądra.

Moduły jądra Linuksa są budowane tylko dla określonej wersji jądra, istnieje sposób na uruchomienie modułu niezależnie od wersji jądra, jeśli są one kompatybilne z dkms, ale porozmawiamy o tym później.

Wszystkie moduły znajdują się w folderze /lib/modules/. Biorąc pod uwagę, że moduły są przeznaczone tylko dla określonej wersji jądra, w tym folderze tworzony jest osobny podfolder dla każdej wersji jądra zainstalowanej w systemie. Ten folder zawiera same moduły i dodatkowe pliki konfiguracyjne, moduły są posortowane na kategorie, w zależności od celu, na przykład:

ls /lib/modules/4.1.20-11-default/kernel/

arch Dokumentacja fs lib net sound
bezpieczeństwo mm jądra sterownika kryptograficznego

Zanim przejdziemy do ćwiczeń, przyjrzyjmy się pokrótce podstawowym komendom służącym do zarządzania modułami.

  • lsmod- zobacz załadowane moduły
  • informacje o modach- informacje o module
  • insmod- moduł obciążenia
  • rmmod- wyjąć moduł

Praca z modułami jądra Linuksa odbywa się głównie za pomocą tych poleceń, ale można również użyć innych.

Wszystkie moduły

Nie jest to częste zadanie, ale jeśli chcesz zobaczyć wszystkie zainstalowane moduły jądra Linuksa w swoim systemie, jest to bardzo łatwe. Wszystkie moduły znajdują się w folderze /lib/modules, dlatego bardzo łatwo jest obliczyć je wszystkie za pomocą jednego polecenia, a nawet po prostu przejść do folderu z menedżerem plików i spojrzeć.

W systemie Ubuntu polecenie będzie wyglądać następująco:

dpkg -S *.ko | grep /lib/moduły

Możesz wykonać tę konstrukcję za pomocą find:

znajdź /lib/modules -nazwa *.ko

Możemy wyszukać tylko bieżące jądro:

znajdź /lib/modules/$(uname -r) -name *.ko

Ponadto wszystkie moduły są zapisane w pliku konfiguracyjnym /lib/modules/modules.aliases, więc wystarczy spojrzeć na jego zawartość:

Jeśli chcemy sprawdzić, czy zainstalowany jest określony moduł jądra Linuksa, możemy przefiltrować dane wyjściowe dowolnego polecenia za pomocą grep:

znajdź /lib/modules -nazwa *.ko | grep vbox

/lib/modules/4.1.20-11-default/weak-updates/misc/vboxnetadp.ko
/lib/modules/4.1.20-11-default/weak-updates/misc/vboxvideo.ko

Co jest załadowane?

Wszystkie informacje o załadowanych modułach są przechowywane w pliku /proc/modules, możemy je wyświetlić poleceniem:

kot /proc/modules

tun 32768 2 - Na żywo 0xffffffffa07a9000
vboxpci 28672 0 - Na żywo 0xffffffffa07a1000 (O)
vboxnetadp 28672 0 - Na żywo 0xffffffffa0632000 (O)
vboxnetflt 32768 0 - Na żywo 0xffffffffa06f3000 (O)
af_packet 40960 8 - Na żywo 0xffffffffa065b000

Ale są na to bardziej cywilizowane metody. To jest narzędzie lsmod i modinfo. Aby wyświetlić załadowane moduły jądra Linuksa, uruchom:

Rozmiar modułu używany przez
16384 2
ccm 20480 2
bezpiecznik 106496 3
bnep 20480 2
bluetooth 532480 5 szt

Wygodnie jest sprawdzić, czy moduł jest załadowany za pomocą grep:

sudo lsmod | grep vbox

Bardziej szczegółowe informacje o każdym module można uzyskać za pomocą narzędzia modinfo:

nazwa pliku: /lib/modules/4.1.20-11-default/kernel/fs/fuse/fuse.ko
alias:nazwa programu:bezpiecznik
pseudonim: char-major-10-229
alias: fs-fuseblk
alias: fs-fuse
licencja: GPL
opis: System plików w przestrzeni użytkownika
Autor: Miklos Szeredi
alias: fs-fusectl
wersja źródła: 739DE4A12CE441C9FBD74C7

Tutaj możesz zobaczyć plik modułu, jego licencję, autora i zależności. Zależności to te moduły, które muszą zostać załadowane, aby działały poprawnie. Niestety nie jest dostępny normalny opis dla wszystkich modułów, ale można spróbować zajrzeć do opisu zależności modułów.

Uruchamianie modułów jądra

Możesz załadować moduł jądra Linuksa za pomocą poleceń modprobe lub insmod.

Na przykład załadujmy moduł vboxdrv

sudo modprobe vboxdrv

Aby załadować moduł jądra Linuksa za pomocą insmod, musisz podać adres pliku modułu:

sudo insmod /lib/modules/4.1.20-11-default/weak-updates/misc/vboxdrv.ko

Przypominam, że można go znaleźć za pomocą polecenia modinfo. Uruchamianie modułu jądra Linuksa najlepiej wykonywać za pomocą modprobe, ponieważ to polecenie nie tylko znajduje plik modułu w systemie plików, ale także ładuje wszystkie jego zależności.

Usuwanie modułów jądra

Tutaj podobnie mamy do dyspozycji dwie komendy - modprobe, która pozwala usunąć moduł po przekazaniu mu opcji -r, jest też komenda rmmod. Zacznijmy od modprobe:

sudo modprobe -r vboxdrv

Inne polecenie w tym przypadku wygląda nieco prościej:

sudo rmmod vboxdrv

rmmod: BŁĄD: Moduł vboxdrv jest używany przez: vboxnetadp vboxnetflt vboxpci

Jeśli podczas wyładowywania modułu pojawi się błąd, oznacza to, że jest on nadal używany przez inne moduły i należy je najpierw wyładować. Poprawnie wykonane polecenie nie powinno nic zwracać.

rmmod vboxnetadp vboxnetflt vboxpci

Blokowanie ładowania modułów

Czasami podczas uruchamiania systemu dla urządzeń, których używamy, ładowane są niewłaściwe moduły jądra Linuksa, które albo nie obsługują pożądanej funkcjonalności, albo powodują konflikt z innymi modułami. Uderzającym przykładem jest ładowanie sterownika b43 zamiast brcmsmac dla kart bezprzewodowych Broadcom. Aby rozwiązać ten problem, możesz dodać moduły do ​​czarnej listy. Aby to zrobić, wystarczy dodać jedną linię do pliku /etc/modprobe.d/blacklist.conf:

vi /etc/modprobe.d/blacklist.conf

Ten kod umieści moduł b43 na czarnej liście.

Instalowanie modułów jądra systemu Linux

Możesz po prostu skopiować moduły skompilowane dla tej wersji jądra do żądanego folderu, w rzeczywistości robimy to, gdy budujemy jądro ze źródła. Ale w przypadku zastrzeżonych sterowników i innych zewnętrznych sterowników, które nie są dołączone do jądra, sytuacja wygląda inaczej. Moduły te obsługują kilka wersji jądra, ale są instalowane przy użyciu specjalnej technologii - DKMS (Dynamic Kernel Module Support). Co więcej, raz zainstalowany w ten sposób moduł będzie automatycznie przebudowywany dla każdej nowej wersji jądra.

wget http://tenet.dl.sourceforge.net/project/e1000/ixgbe%20stable/4.3.15/ixgbe-4.3.15.tar.gz
$ sudo tar -xf ixgbe-4.3.15.tar.gz -C /usr/local/src
$ Sudo mv /usr/local/src/ixgbe-4.3.15/src /usr/src/ixgbe-4.3.15

Stwórzmy plik konfiguracyjny:

sudo vi /usr/src/ixgbe-4.3.15/dkms.conf

PACKAGE_NAME="ixgbe"
PACKAGE_VERSION="4.3.15"
BUILT_MODULE_NAME="ixgbe"
DEST_MODULE_LOCATION="/kernel/drivers/net/ethernet/intel/ixgbe/"
AUTOINSTALL="tak"

Dodajmy moduł do drzewa jądra:

sudo dkms add -m ixgbe -v 4.3.15

Rozpoczynamy montaż dla bieżącego jądra:

sudo dkms build -m ixgbe -v 4.3.15

I zainstaluj:

sudo dkms install -m ixgbe -v 4.3.15

Instalacja modułów jądra została zakończona. Teraz możesz wyświetlić informacje o sterowniku lub pobrać go:

dkmsstan | grep ixgbe

wnioski

Są szanse, że rzadko będziesz musiał bawić się tymi modułami. Ale praca z modułami jądra będzie konieczna, jeśli twoja dystrybucja nie obsługuje sprzętu twojego urządzenia po wyjęciu z pudełka, a także kiedy pracujesz z oprogramowaniem innych firm, takim jak VirtualBox, Vmware itp. Ale bardzo przydatna jest wiedza, jak sobie z tym poradzić moduły, gdy trzeba je dodać lub usunąć. Nawet jeśli nie potrzebujesz go teraz, możesz przetestować, jak działa, aby później go uzbroić.