Redirecționare I/O Linux. Cum să afișați informații complete despre un computer și să salvați aceste informații în html, pdf. Despre acest serial

Unul dintre cele mai interesante și utile subiecte pentru administratorii de sistemși utilizatori noi care abia încep să înțeleagă cum să lucreze cu terminalul - aceasta este redirecționarea fluxurilor de intrare/ieșire Linux. Această caracteristică de terminal vă permite să redirecționați ieșirea comenzilor către un fișier sau conținutul unui fișier către intrarea comenzilor, să combinați comenzile împreună și să formați conducte de comandă.

În acest articol, ne vom uita la modul în care se realizează redirecționarea fluxului I/O în Linux, ce operatori sunt utilizați pentru aceasta și unde pot fi utilizate toate acestea.

Toate comenzile pe care le executăm ne returnează trei tipuri de date:

  • Rezultatul comenzii, de obicei date text solicitate de utilizator;
  • Mesaje de eroare - informează despre procesul de execuție a comenzii și circumstanțe neașteptate care au apărut;
  • Codul de returnare este un număr care vă permite să evaluați dacă programul a funcționat corect.

În Linux, toate substanțele sunt considerate fișiere, inclusiv fluxurile de intrare/ieșire Linux - fișiere. Fiecare distribuție are trei fișiere de flux principal pe care programele le pot folosi, acestea sunt definite de shell și identificate prin numărul de descriptor al fișierului:

  • STDIN sau 0- acest fișier este asociat cu tastatura și majoritatea comenzilor primesc date pentru a funcționa de aici;
  • STDOUT sau 1- aceasta este ieșirea standard, programul trimite aici toate rezultatele muncii sale. Este conectat la ecran, sau mai precis, la terminalul în care rulează programul;
  • STDERR sau 2- toate mesajele de eroare sunt trimise în acest fișier.

Redirecționarea I/O vă permite să înlocuiți unul dintre aceste fișiere cu al dvs. De exemplu, puteți forța un program să citească datele dintr-un fișier în sistem de fișiere, mai degrabă decât tastatura, puteți, de asemenea, să afișați erori într-un fișier și nu pe ecran, etc. Toate acestea se fac folosind simboluri "<" Şi ">" .

Redirecționați rezultatul către fișier

Este foarte simplu. Puteți redirecționa ieșirea către un fișier folosind simbolul >. De exemplu, să salvăm rezultatul comenzii de sus:

top -bn 5 > top.log

Opțiunea -b face ca programul să ruleze în modul lot non-interactiv, iar n - repetă operația de cinci ori pentru a obține informații despre toate procesele. Acum să vedem ce s-a întâmplat cu pisica:

Simbol ">" suprascrie informații dintr-un fișier dacă există deja ceva acolo. Pentru a adăuga date la utilizarea finală ">>" . De exemplu, redirecționați ieșirea către fișier linux de asemenea pentru top:

top -bn 5 >> top.log

În mod implicit, un descriptor de fișier este utilizat pentru redirecționare ieșire standard. Dar puteți specifica acest lucru în mod explicit. Această comandă va da același rezultat:

top -bn 5 1>top.log

Redirecționați erorile către fișier

Pentru a redirecționa rezultatul erorii către un fișier, trebuie să specificați în mod explicit descriptorul de fișier pe care urmează să-l redirecționați. Pentru erori, acesta este numărul 2. De exemplu, când încercați să obțineți acces la directorul de superutilizator, ls va afișa o eroare:

Puteți redirecționa eroarea standard către un fișier ca acesta:

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Pentru a adăuga date la sfârșitul fișierului, utilizați același simbol:

ls -l /root/ 2>>ls-error.log

Redirecționați rezultatul standard și erorile către fișier

De asemenea, puteți redirecționa toate rezultatele, erorile și ieșirile standard către un singur fișier. Există două moduri de a face acest lucru. Primul, mai vechi, este să treci ambele mânere:

ls -l /root/ >ls-error.log 2>&1

Mai întâi, rezultatul comenzii ls va fi trimis în fișierul ls-error.log folosind primul caracter de redirecționare. Apoi toate erorile vor fi trimise în același fișier. A doua metodă este mai simplă:

ls -l /root/ &> ls-error.log

De asemenea, puteți utiliza adăugarea în loc de rescrie:

ls -l /root/ &>> ls-error.log

Intrare standard din fișier

Majoritatea programelor, cu excepția serviciilor, primesc date pentru activitatea lor prin intrare standard. În mod implicit, intrarea standard așteaptă intrare de la tastatură. Dar puteți forța programul să citească date dintr-un fișier folosind operatorul "<" :

pisică

De asemenea, puteți redirecționa imediat rezultatul către un fișier. De exemplu, să resortăm lista:

sorta sortare.ieșire

Astfel, redirecționăm intrarea/ieșirea către Linux într-o singură comandă.

Utilizarea tunelurilor

Puteți lucra nu numai cu fișiere, ci și redirecționați ieșirea unei comenzi ca intrare a alteia. Acest lucru este foarte util pentru efectuarea de operațiuni complexe. De exemplu, să afișăm cinci fișiere modificate recent:

ls -lt | cap -n 5

Cu utilitarul xargs, puteți combina comenzi astfel încât intrarea standard să fie transmisă ca parametri. De exemplu, să copiem un fișier în mai multe foldere:

echo test/tmp/ | xargs -n 1 cp -v testfile.sh

Aici opțiunea -n 1 specifică că trebuie furnizat un singur parametru per comandă, iar opțiunea -v pentru cp permite tipărirea informațiilor detaliate despre mișcări. O altă comandă utilă în astfel de cazuri este tee-ul. Citește date de la intrarea standard și scrie în fișiere sau fișiere standard. De exemplu:

echo "Test de funcționare Tee" | dosar tee1

În combinație cu alte comenzi, acestea pot fi folosite pentru a crea instrucțiuni complexe cu mai multe comenzi.

Concluzii

În acest articol, am acoperit elementele de bază ale redirecționării fluxului I/O Linux. Acum știți cum să redirecționați ieșirea către un fișier Linux sau ieșirea dintr-un fișier. Este foarte simplu și convenabil. Dacă aveți întrebări, întrebați în comentarii!

Dacă tastatura ta este marcată pentru latină sau chirilică și trebuie să tastați texte într-o altă limbă, în special folosind scripturi complexe, non-alfabetice, atunci această notă despre sistemele de introducere în Linux (pur și simplu „dispoziții de tastatură”) poate fi de interes pentru dvs. .


Îmi cer scuze anticipat pentru terminologia neclară și nu pretind a fi o descriere tehnică exhaustivă. Scopul principal al articolului este de a descrie capacitățile, nu implementarea.

Metode de intrare

Metoda principală de introducere (IM) în Linux este XKB, este instalată implicit și este activată imediat după instalarea sistemului de operare. XKB este proiectat să funcționeze cu scripturi alfabetice și nu poate gestiona scripturi complexe, cum ar fi caracterele chinezești sau silabare din India și Africa. Sistemul poate fi configurat să funcționeze cu cel mult 4 aspecte. Ultima limitare poate fi ocolită prin utilizarea tastelor rapide pentru a apela o comandă cu combinația necesară de parametri pentru fiecare limbă.


Dacă este necesară mai multă flexibilitate, atunci ar trebui să treceți la cadrele metodelor de introducere. Principalii reprezentanți ai unor astfel de sisteme în Linux: IBus, SCIM, Fcitx. Cadrul în sine nu poate introduce text, iar diferite scripturi trebuie conectate sub formă de pluginuri (motoare). Din experiența utilizării IBus și Fcitx, pot spune că ambele sisteme acceptă aproximativ același număr de pluginuri. Adesea, acestea pot fi aproape aceleași pluginuri. De exemplu, metoda de introducere Pinyin pentru chineză este implementată ca o bibliotecă libpinyin autonomă și oferă capabilități identice atunci când este conectată prin IBus sau Fcitx.



În primul rând, IBus poate folosi în mod transparent xkb si toate posibilitatile ei. Singura problemă este că IBus nu poate genera dinamic configurații XKB. Cele mai populare dintre ele sunt preînregistrate în fișierul /usr/share/ibus/component/simple.xml, care poate fi modificat și completat după caz. (La actualizarea IBus, fișierul va fi înlocuit cu cel standard.)


De exemplu, aspectul rusesc este descris după cum urmează:


xkb:ru::rus ru GPL Peng Huang ru rusă rusă tastatura ibus 99

Pe lângă aspect, puteți specifica layout_variant alți parametri setxkbmap nu sunt disponibili, inclusiv faimosul aspect tipografic al lui Ilya Birman, care este setat în xkb prin argumentul misc:typo. Pentru a ocoli această limitare sau pentru a crea pur și simplu un aspect pentru propriile scopuri, trebuie să o descrieți complet. Pentru a face acest lucru, în folderul /usr/share/X11/xkb/symbols trebuie să creați un fișier personalizat (dacă adăugați la fișierele existente, acestea vor fi suprascrise la actualizarea sistemului) și să setați configurația aspectului. De exemplu, rusă cu adăugiri de Ilya Birman:


taste alfanumerice parțiale xkb_symbols „ru-typo” ( include „ru(winkeys)” include „typo(base)” include „level3(ralt_switch)” // Tasta de rând al 1-lea tastatură ([NoSymbol,NoSymbol,U0301,NoSymbol]); // "~" );

Unde liniile de includere colectează configurația din șabloane gata făcute. În consecință, versiunea layout-ului rusesc „winkeys” este preluată din fișierul „ru”. Apoi este completat cu aspectul „de bază” din fișierul „typo” și este setat al treilea strat AltGr (vezi fișierul „level3”), care este similar cu comanda:


setxkbmap -layout ru -variant winkeys -option lv3:ralt_switch,misc:typo

Dacă doriți, puteți face propriile modificări. În exemplul de mai sus, semnul de accent „U+0301” (Combinarea accentului acut) este plasat pe combinația AltGr+~. Pozițiile în care este specificat NoSymbol folosesc definițiile din modelele anterioare: „ё” și „Ё” din „winkeys”, „≈” din „typo”:


cheie ( [ Cyrillic_io, Cyrillic_IO, NoSymbol, NoSymbol ] ); // cheie winkeys ( [ NoSymbol, NoSymbol, NoSymbol, aprox.] ); // cheie de scriere ([NoSymbol,NoSymbol,U0301,NoSymbol]); // obicei

xkb:ru:typo:rus ru personalizat, noi greșeală de tipar, Rusă (cu greșeli de scriere) Rusă (cu greșeli de scriere) tastatura ibus 1

Unde personalizat este numele fișierului din folderul /usr/share/X11/xkb/symbols, iar ru-typo indică aspectul pe care îl conține. Aspectul us suplimentar este specificat astfel încât tastele rapide (Ctrl+C, Ctrl+V etc.) să funcționeze corect. După repornirea IBus (repornire ibus), în setări va apărea un nou aspect „Rusian (with Typo)”.


A doua metodă de introducere - m17n. Aceasta este o bibliotecă destul de bogată de aspecte de tastatură pentru o varietate de scripturi. IBus are propria metodă de introducere similară ibus-masa, care este descris ca având „capacitate ceva mai mică”. A trebuit să-l folosesc pe acesta din urmă pentru a crea un aspect cu o corespondență unu-la-unu între literele latine și literele alfabetului necesar, fără a implica o logică complexă, așa că nu pot judeca care dintre cele două sisteme este mai funcțional și mai expresiv - o descriere a layout-ul în format m17n sau ibus-table. Metoda ibus-table include un aspect curios „LaTeX” pentru introducerea caracterelor în notația corespunzătoare: „\Delta” pentru „Δ”, „\ge” pentru „≥”, etc.


Următoarea dintre metodele universale de introducere este KMFL. Aceasta este metoda de introducere Keyman pentru Windows. Un IM nu foarte comun care acceptă cele mai rare scripturi. Spre deosebire de Keyman original, care pretindea că poate imprima în peste 1000 de scripturi, KMFL nu este la fel de avansat, dar poate fi totuși util. Formatul pentru descrierea machetelor este text, există un program pentru crearea acestora pentru Ms Windows. Folosesc aspectul EuroLatin, care convertește textul „2//3” în fracția „⅔” și secvența „-a” în macronul „ā”. Amintește de cheia Compose din xkb, dar nu necesită un modificator separat - KMFL însuși recunoaște secvențele în timpul tastării.


Restul metodelor de introducere sunt specializate pentru scripturi individuale: „ibus-libpinyin” pentru chineză, „ibus-unikey” pentru vietnameză etc. Setările pentru aceste plugin-uri se află și în /usr/share/ibus/component/ . Este posibil ca fișierele corespunzătoare să fie setate la un aspect de bază pentru tastatură, altfel nu vor funcționa atunci când treceți de la un aspect non-latin. De exemplu, în libpinyin.xml trebuie să găsiți parametrul „layout” și să introduceți „us” pentru o tastatură QWERTY sau „fr” pentru AZERTY etc.


S.U.A

Schimbarea layout-urilor

De cele mai multe ori lucrez cu perechi de limbi: rusă-engleză, chineză-spaniolă etc. Prin urmare, prefer să am o tastă rapidă pentru a comuta între ultimele două aspecte (CapsLock), iar machetele în sine sunt comutate folosind taste rapide separate (Win + 1...9 pe tastatura numerică). Astfel, mai întâi am setat layout-urile de lucru, Win+1 (en) și Win+2 (ru), apoi comut între ele folosind CapsLock (ro<->ru).


În IBus puteți seta două taste rapide: una pentru parcurgerea listei de layout-uri, a doua pentru ultimele două layout-uri. De asemenea, puteți selecta aspectul dorit prin consolă și, în consecință, să atribuiți script-ul unei taste rapide.


Vă rugăm să rețineți că nu va fi posibilă realocarea CapsLock folosind xmodmap, deoarece IBus resetează astfel de setări. Prin urmare, prefer să înlocuiesc la nivel global CapsLock ca F14 prin udev (fișier /etc/udev/hwdb.d/90-custom-keyboard.hwdb):


evdev:input:b0003v1A2Cp0E24* # ID-ul tastaturii mele KEYBOARD_KEY_70039=f14 # leagă majuscule la f14

Și folosiți F14 ca tastă rapidă în IBus. Din experiența mea, aceasta oferă cea mai stabilă configurație.


Pentru mai multe informații despre configurarea udev, consultați sfârșitul articolului.

Tastatură virtuală

Tastaturile sunt produse comercial, marcate pentru un anumit script, numai pentru limbi cu un număr mare de utilizatori - de exemplu, pentru rusă (YTSUKEN). Nici în Armenia, nici în Georgia nu veți putea cumpăra o tastatură cu taste etichetate cu literele alfabetelor naționale. În mod similar, în Kazahstan și Uzbekistan folosesc tastaturi ruso-engleză și sunt nevoiți să învețe unde se află literele care nu sunt incluse în alfabetul standard latin sau chirilic.


Dacă înveți un aspect nou, recomand să folosești tastatura virtuală. Îmi place Onboard, deoarece se adaptează automat la aspectul activ și se actualizează atunci când treceți la altul. Dar acest lucru funcționează numai cu xkb (și atunci când utilizați xkb prin IBus).


Onboard este foarte convenabil pentru testarea machetelor xkb și vă permite să vizualizați simbolurile atribuite pe toate straturile (AltGr, etc.).

Concluzie

Nu toate programele acceptă corect cadrele lingvistice. În special, Sublime Text 3 funcționează doar cu SCIM, iar folosind IBus, indiferent de aspectul selectat, va tipări exclusiv litere latine.


Folosesc IBus de ceva timp, iar cunoștințele mele despre alte sisteme sunt foarte superficiale. Potrivit recenziilor de pe Internet, Fctix este descris ca fiind mai funcțional și mai bine adaptat pentru introducerea textului chinezesc. În orice caz, sunt complet mulțumit de IBus atunci când lucrez cu texte chineze și diferențele nu ar trebui să fie fundamentale. Ultima dată când am folosit Fctix (acum 2 ani), framework-ul nu mi-a permis să schimb aspectele decât dacă cursorul se afla într-un câmp de text. Sper că această problemă a fost corectată până acum.


Un alt ajutor pentru lucrul cu o varietate de scripturi este husele din silicon pentru tastatură. Piețele online chineze oferă suprapuneri (保护膜 sau 键盘膜) pentru Apple Magic Keyboard pentru o mare varietate de scripturi. Exemplu de distribuitor care nu este chinez. Dar rețineți că au fost produse trei generații de Apple Magic (și fiecare cu modificări pentru SUA, Europa și Japonia), iar replicile chinezești diferă în dimensiuni liniare și aspectul cheilor. Uneori, regret că nu există un standard unic pentru tastaturile computerelor.


O referire rapidă la conversia semnalului apăsat de taste

Codul digital al tastei apăsate își schimbă valoarea de mai multe ori.

  1. cod de scanare: Când o tastă este apăsată, tastatura (sau driverul?) trimite către kernel-ul Linux cod de scanare.
  2. cod cheie: Următorul în nucleu cod de scanare convertit la codul cheie(subsistemul API de intrare Linux). Puteți controla conversia folosind programele udev, keyfuzz, setkeycodes.
  3. keysym: Sistemul X Window primește de la kernel codul cheieși îl difuzează către keysym- acesta este caracterul final pe care programul client îl va primi ca intrare. Conversia este configurată prin XKB sau xmodmap (învechit).

Din secvența de mai sus este clar că reatribuirea tastelor la etapă cod de scanare > codul cheie de preferat deoarece nu provoacă interferențe cu KXB.


instrucțiuni de configurare udev

Difuzare cod de scanare V codul cheie se face pentru fiecare dispozitiv de intrare independent, așa că mai întâi trebuie să aflați identificatorul unic al tastaturii (de fapt, evdev funcționează și cu o clasă mare de dispozitive periferice care au butoane - de la șoareci la imprimante și camere web). Utilizatorii Arch Linux pot folosi următorul script (pentru alte distribuții, căile ar putea fi nevoite să fie ajustate):


#!/bin/sh pentru DEVICE în /dev/input/by-id/*; do echo $(nume de bază $DEVICE) DEVID=$(nume de bază $(readlink $DEVICE)) printf "evdev:input:b%sv%sp%se%s*\n\n" \ `cat /sys/class/input /$DEVID/device/id/bustype` \ `cat /sys/class/input/$DEVID/device/id/vendor` \ `cat /sys/class/input/$DEVID/device/id/product` \ ` cat /sys/class/input/$DEVID/device/id/version` gata

Același dispozitiv poate fi prezentat în sistem în mai multe copii sub denumiri diferite, dar identificatorul va fi același. De exemplu, tastatura mea este definită ca două dispozitive:


usb-SEM_USB_Keyboard-event-if01 evdev:input:b0003v1a2cp0e24e0110* usb-SEM_USB_Keyboard-event-kbd evdev:input:b0003v1a2cp0e24e01*

Notă: identificatorul poate fi scurtat (de exemplu, la b0003v1a2cp0e24*), ceea ce poate fi util atunci când se creează reguli uniforme pentru o serie de modele de același tip. Asteriscul „*” joacă aici rolul unui wildcard.


Acum trebuie să creați un fișier 90-custom-keyboard.hwdb în /etc/udev/hwdb.d/ cu următorul conținut (pentru exemple, consultați /usr/lib/udev/hwdb.d/60-keyboard.hwdb) :


evdev:input:b0003v5c0ap0003e0110* # ID-ul dvs. KEYBOARD_KEY_70039=f14 # reatribuirea tastei

Linia KEYBOARD_KEY începe cu un spațiu, acest lucru este important. Actualizați configurația:


sudo udevadm hwdb --update && udevadm trigger

Ulterior, atunci când dispozitivul este repornit sau reconectat, configurația va fi actualizată automat.


Realocarea cheii este specificată în perechi KEYBOARD_KEY_ =. Valori codul cheie(obligatoriu cu litere mici) se află în /usr/include/linux/input-event-codes.h (pentru Ubuntu 14.04 în /usr/include/linux/input.h).

Adăugați etichete

Sistem I/O în LINUX.

În sistemul I/O, toate dispozitivele externe sunt tratate ca fișiere pe care pot fi efectuate operațiuni normale cu fișiere. Desigur, există drivere de dispozitiv, dar interfața cu acestea este concepută pentru utilizator ca accesarea unui fișier special. Fișierele speciale sunt un mijloc de unificare a sistemului de intrare/ieșire.

Fiecărui dispozitiv conectat (terminal, discuri, imprimantă etc.) îi corespunde cel puțin un fișier special. Cele mai multe dintre aceste fișiere speciale sunt stocate în directorul /dev:
$ cd /dev
$ ls -l
panoul de control al sistemului onsole
porțiuni dsk de pe disc
dischetă fd0 1
memorie mem
imprimanta lp
lр0 port paralel 0
. . .
porțiunea rădăcină de pe disc pentru sistemul de fișiere rădăcină
porțiune de schimb swap
nume alternativ syscon pentru consolă
systty este un alt nume pentru consola de sistem
director de termeni pentru terminale
ttyS0 portul serial 0 (COM1)
. . .

Când un program scrie într-un astfel de fișier special, sistemul de operare le interceptează și le trimite către un dispozitiv, cum ar fi o imprimantă). Când citiți date din acest tip de fișier, acestea sunt de fapt primite de pe un dispozitiv, cum ar fi un disc. Programul nu trebuie să țină cont de caracteristicile de funcționare ale dispozitivului de intrare/ieșire. În acest scop, sunt utilizate fișiere speciale (drivere), care servesc ca interfață între componentele nucleului OS și programele de aplicație de uz general.

Sistemul detectează diferența dintre un fișier obișnuit și un fișier special numai după ce a analizat inodul corespunzător referit de intrarea în director.
Inodul special al fișierului conține informații despre clasa, tipul și numărul dispozitivului. Clasa de dispozitiv definește atât dispozitivele bazate pe caractere, cât și pe blocuri. Un exemplu de dispozitiv caracter cu caracter este o tastatură. Fișierele speciale care asigură comunicarea cu dispozitive de acest tip se numesc orientate pe octeți. Dispozitivele bloc sunt caracterizate prin schimbul de blocuri mari de informații, acest lucru accelerează schimbul și îl face mai eficient. Toate dispozitivele de disc acceptă schimbul de blocuri, iar fișierele speciale care le servesc se numesc orientate pe blocuri. Fișierele speciale nu conțin nicio informație simbolică, așa că lungimea lor nu este indicată în lista de director.

Tipul și numărul dispozitivului sunt, de asemenea, principalele caracteristici ale fișierelor speciale (numerele principale și suplimentare ale dispozitivului corespunzător sunt plasate în câmpul de lungime). Primul dintre ele determină tipul de dispozitiv, al doilea îl identifică printre dispozitivele similare. Sistemul de operare poate servi simultan mai multe zeci și chiar sute de terminale. Fiecare dintre ele trebuie să aibă propriul fișier special, astfel încât prezența unui număr principal și suplimentar vă permite să stabiliți corespondența necesară între dispozitiv și un astfel de fișier.

Puteți crea mai multe sisteme de fișiere pe un singur disc. Unele sisteme folosesc un sistem de fișiere pe disc, în timp ce altele folosesc mai multe. Un nou sistem de fișiere poate fi creat folosind comanda mkfs (make file system). De exemplu, expresia # /sbin/mkfs /dev/dsk/fl1 512 înseamnă: creați o dischetă b: cu dimensiunea de 512 blocuri.

Opțional, puteți specifica dimensiunea sistemului de fișiere în blocuri și numărul de i-noduri (adică numărul maxim de fișiere care pot fi stocate în sistemul de fișiere). În mod implicit, numărul de i-noduri este egal cu numărul de blocuri împărțit la patru. Numărul maxim de i-noduri per sistem de fișiere este de 65.000 Dacă dintr-un motiv oarecare aveți nevoie de mai mult de 65.000 de i-noduri pe un disc, trebuie să creați două sau mai multe sisteme de fișiere pe acel disc.

Orice sistem de fișiere poate fi atașat (montat) la un arbore de directoare partajat în orice punct al acestuia. De exemplu, directorul / este directorul rădăcină al sistemului, în plus, este baza sistemului de fișiere, care este întotdeauna montat. Directorul /usr1 se află în directorul /, dar în acest caz este un sistem de fișiere separat de sistemul de fișiere rădăcină, deoarece toate fișierele din acesta se află pe o parte separată a discului sau pe un disc cu totul separat. Sistemul de fișiere /usr1 este sistemul de fișiere montat - rădăcina în punctul în care directorul /usr1 există în ierarhia generală (Figurile 1 și 2).

Orez. 1. Sistem de fișiere înainte
montarea /dev/dsk/os1

Orez. 2. Sistem de fișiere după
montați /dev/dsk/os1 ca /usr/

Pentru a monta un sistem de fișiere, utilizați comanda /sbin/mount. Această comandă permite ca sistemul de fișiere dat să fie localizat oriunde în structura de directoare existentă:
#/sbin/mount/dev/dsk/osl/usr1 montează /dev/dsk/osl pe /usr1
#/sbin/mount/dev/dsk/flt/a montează /dev/dsk/flt pe /a

Dacă doriți să montați un sistem de fișiere pe discuri care trebuie să fie protejate la scriere, astfel încât sistemul să fie doar în citire, trebuie să adăugați opțiunea -r la comanda /sbin/mount.
Directorul în care este montat sistemul de fișiere trebuie să fie momentan gol, deoarece conținutul său nu va fi accesibil în timp ce sistemul de fișiere este montat.

Pentru a obține informații despre sistemele de fișiere care sunt montate, de exemplu, pe un sistem LINUX, puteți utiliza comanda /sbin/mount fără argumente (Figura 3).

Orez. 3.

Această comandă tipărește directorul în care a fost montat sistemul de fișiere (de ex. usrl), dispozitivul /dev pe care se află și ora și data la care a fost montat. Pentru a demonta un sistem de fișiere, utilizați comanda /sbin/umount, care are efectul opus comenzii mount. Eliberează sistemul de fișiere și îl scoate complet din structura de directoare, astfel încât toate fișierele și directoarele proprii devin inaccesibile:
# /sbin/umount /b
# /sbin/umount /dev/dsk/0s2

Sistemul de fișiere rădăcină nu poate fi demontat. În plus, comanda umount va eșua dacă cineva folosește un fișier din sistemul de fișiere pe care încearcă să îl demonteze (acest lucru ar putea fi chiar la fel de simplu ca a fi într-unul dintre directoarele din sistemul de fișiere care este demontat).

În comenzile mount și unmount, utilizatorul folosește abrevierea dispozitivelor de disc fizic.
În LINUX, dispozitivele de disc au denumiri unice. În LINUX, utilizatorul nu se confruntă niciodată cu problema de a specifica exact dispozitivul fizic pe care se află informația. În LINUX, un număr arbitrar de dispozitive externe poate fi foarte mare, prin urmare, utilizatorul se ocupă doar de numele directorului în care se află fișierele de care are nevoie. Toate sistemele de fișiere sunt montate o dată, de obicei când sistemul pornește. Sistemele de fișiere de la computere la distanță pot fi, de asemenea, montate pe unele directoare.

Pentru dispozitivele fizice în LINUX, există directoare dsk și rdsk, care conțin fișiere corespunzătoare dispozitivelor de disc. De obicei, numele fișierelor din aceste directoare sunt aceleași și singura diferență dintre ele este că directorul rdsk conține dispozitive de disc cu acces special (raw), pe care unele dispozitive de sistem le folosesc pentru un acces mai rapid la disc. Un director tipic dsk conține următoarele dispozitive:
1 $ /dev/dsk
0s0 1s0 c0t0d0s0 c0tld0s0 f0 f05q f13dt fld8d
0sl 1sl c0t0d0sl c0tld0sl f03d f05qt f13h fld8dt
0s2 1s2 c0t0d0s2 c0tld0s2 f03dt f0d8d f13ht fld8t
. . .
$

Pe un sistem LINUX, dispozitivele de disc sunt împărțite logic în secțiuni, similar cu partițiile definite în Tabelul de partiții MasterBoot MS DOS. Fișierele 0s1, 0s2, 0s3 etc. corespund secțiunilor unu, doi, trei etc. ale discului numărul 0. Fișierele 1s0, 1sl, 1s2 etc. corespund secțiunilor unu, doi, a treia etc. Dacă sistemul are mai multe discuri, partițiile vor fi numerotate ns0, nsl etc. pentru fiecare număr de disc n.

Sistemele cu un număr mare de dispozitive de disc utilizează următorul sistem de numerotare:
cu controler d secțiunea discului

unde controller este numărul controlerului de disc; disc - numărul discului; secțiune - numărul secțiunii disc.
Astfel, 0s0 este de obicei echivalent cu c0t0d0s0, iar 0sl cu c0t0d0sl, iar numele partițiilor cu trei caractere sunt pur și simplu prescurtare pentru controlerul de disc numărul 0.

Fișierele ale căror nume încep cu f definesc diferite tipuri de dischete. Directorul rmt conține fișiere pe dispozitive cu bandă magnetică:
1 $ /dev/rmt
c0s0 cls0 c3s0 ntape ntapel bandă bandă

Fișierele c0s0, cls0, c2s0 și c3s0 definesc patru dispozitive de stocare a casetei. Fișierele cu bandă și bandă definesc dispozitivele de stocare magnetice cu două role. Fișierele ale căror nume încep cu n aparțin acelorași dispozitive, numai că banda nu se derulează după utilizare, în timp ce utilizarea altor fișiere determină derularea benzii când programul care o folosește se termină de rulare.

Pe unele sisteme, aceste fișiere au nume diferite, dar toate sunt întotdeauna localizate în /dev, iar dicționarul care vine de obicei cu sistemul conține descrieri detaliate ale dispozitivelor și fișierelor asociate acestora.

Sistemul de fișiere extX utilizează memoria tampon de date pentru operațiunile I/O. Când citește un bloc de informații, nucleul emite o solicitare I/O către mai multe blocuri adiacente. Astfel de operațiuni accelerează foarte mult recuperarea datelor atunci când citesc fișierele secvenţial. Când scrieți date într-un fișier, sistemul de fișiere extX, atunci când scrie un bloc nou, pre-aloca până la 8 blocuri adiacente în apropiere. Această metodă permite plasarea fișierelor în blocuri adiacente, ceea ce accelerează citirea lor și face posibilă obținerea unor performanțe ridicate ale sistemului.

Nota: practica arată că secțiunea de configurare Kerberos poate fi omisă. Se pare că Samba va configura în sine configurația Kerberos. Suficient pentru ca pachetul să stea în picioare utilizator krb5.

Responsabil

Adesea este nevoie de a aduce o mașină Linux într-un domeniu Windows existent. De exemplu, pentru a crea un server de fișiere folosind Samba. Acest lucru este foarte ușor de făcut, tot ce aveți nevoie este un client Kerberos, Samba și Winbind.

Înainte de instalare, este recomandabil să actualizați:

actualizare sudo aptitude

sudo aptitude upgrade

Puteți instala toate aceste lucruri cu comanda:

sudo aptitude install krb5-user samba winbind

De asemenea, poate fi necesar să instalați următoarele biblioteci:

sudo aptitude install libpam-krb5 libpam-winbind libnss-winbind

Sau, dacă utilizați Ubuntu Desktop, aceleași pachete pot fi instalate prin managerul de pachete Synaptic.

În continuare, va trebui să configurați toate instrumentele de mai sus pentru a funcționa cu domeniul dvs. Să presupunem că doriți să vă conectați la domeniul DOMAIN.COM, al cărui controler de domeniu este serverul dc.domain.com cu adresa IP 192.168.0.1. Același server este, de asemenea, serverul DNS principal al domeniului. În plus, să presupunem că aveți un al doilea controler de domeniu 1), cunoscut și sub numele de DNS-dc2.domain.com cu IP 192.168.0.2. Computerul dumneavoastră se va numi smbsrv01.

Setări DNS

Mai întâi, trebuie să modificați setările DNS de pe computer, înregistrând controlerul de domeniu 2 ca server DNS și domeniul dorit ca domeniu de căutare.

Dacă aveți o adresă IP statică, atunci în Ubuntu Desktop acest lucru se poate face prin Network Manager, în Ubuntu Server trebuie să modificați conținutul fișierului /etc/resolv.conf la ceva de genul acesta:

domeniul domain.com

searchdomain.com

serverul de nume 192.168.0.1

serverul de nume 192.168.0.2

În distribuțiile moderne, fișierul resolv.conf este creat automat și nu este nevoie să îl editați manual. Pentru a obține rezultatul dorit, trebuie să adăugați modificările necesare fișierului: /etc/resolvconf/resolv.conf.d/head Datele care vor fi adăugate la acesta vor fi inserate automat în fișierul /etc/resolv.conf

Dacă adresa IP este dinamică și este atribuită de un server DHCP, atunci după repornirea rezolv.conf, poate fi generat un rezoluv.conf „incorect”, de exemplu, există un singur server de nume 192.168.0.1, iar domeniul și căutarea nu sunt specificate Trebuie să editați /etc/dhcp/dhclient.conf Pentru a afișa domeniul și intrările de căutare, trebuie să eliminați comentariul înainte de linia de înlocuire a numelui de domeniu și să introduceți domeniul dvs.:

înlocuiți numele-domeniu „domeniu.com”;

Pentru a adăuga un alt server de nume, trebuie să eliminați comentariul înainte de a adăuga domain-name-server și să specificați IP-ul serverului:

adaugă servere-nume-domeniu 192.168.0.2;

Pentru a aplica modificările, trebuie doar să reporniți serviciul:

/etc/init.d/networking restart

Acum asigurați-vă că setați numele de gazdă corect în fișierul /etc/hostname:

smbsrv01

În plus, trebuie să editați fișierul /etc/hosts astfel încât să conțină o intrare cu numele de domeniu complet al computerului și neapărat un nume de gazdă scurt, referitor la unul dintre IP-urile interne:

# Numele acestui computer

127.0.0.1 localhost

127.0.1.1 smbsrv01.domain.com smbsrv01

Trebuie să verificăm imediat dacă controlerul nostru de domeniu face ping în mod normal, folosind numele său scurt și complet, astfel încât pe viitor să nu primim erori prin care controlerul de domeniu nu a fost găsit:

ping dc

ping dc.domain.com

Nu este necesar, dar dacă schimbați ceva, reporniți computerul pentru a aplica modificările.

N setare de sincronizare a timpului

În continuare, trebuie să configurați sincronizarea orei cu controlerul de domeniu. Dacă diferența este mai mare de 5 minute, nu vom putea primi o frunză de la Kerberos. Pentru sincronizarea unică, puteți utiliza comanda:

sudo net time set dc

Dacă există un server de timp exact în rețea, atunci îl puteți utiliza sau orice unul public:

ntpdate ntp.mobatime.ru

Sincronizarea automată este configurată folosind ntpd, acest demon va efectua periodic sincronizarea. Mai întâi trebuie să îl instalați:

sudo aptitude install ntp

Acum editați fișierul /etc/ntp.conf pentru a include informații despre serverul dvs. de timp:

# Trebuie să vorbiți cu un server NTP sau două (sau trei).

server dc.domain.com

Apoi reporniți demonul ntpd:

sudo /etc/init.d/ntp reporniți

Acum este timpul să configurați interacțiunea directă cu domeniul.

Default_realm = DOMAIN.COM

Kdc_timesync = 1

Ccache_type = 4

Forwardable = adevărat

Proxiable = adevărat

V4_instance_resolve = false

V4_name_convert = (

Gazdă = (

Rcmd=gazdă

Ftp = ftp

simplu = (

Ceva = altceva

Fcc-mit-ticketflags = adevărat

DOMAIN.COM = (

Kdc = dc

Kdc = dc2

Admin_server = dc

Default_domain = DOMAIN.COM

Domain.com = DOMAIN.COM

Domain.com = DOMAIN.COM

Krb4_convert = fals

Krb4_get_tickets = fals

Desigur, va trebui să schimbați domain.com în domeniul dvs. și dc și dc2 în controlerele dvs. de domeniu. Apropo, poate fi necesar să scrieți numele complete ale controlorilor de domeniu dc.domain.com și dc2.domain.com. Deoarece am un domeniu de căutare înregistrat în DNS, nu trebuie să fac asta.

Acordați o atenție deosebită cazului de scriere a numelui de domeniu - oriunde domeniul este scris cu litere mari, acesta trebuie scris cu litere mari. Altfel, nimic nu va funcționa magic.

Acestea nu sunt toate opțiunile de configurare Kerberos posibile, ci doar cele de bază. Cu toate acestea, de obicei sunt suficiente.

Acum este timpul să verificăm dacă ne putem conecta la domeniu. Pentru a face acest lucru, executați comanda

kinit [email protected]

În loc de nume de utilizator, ar trebui să introduceți în mod natural numele unui utilizator de domeniu existent.

Numele de domeniu trebuie scris cu majuscule!

Dacă nu primiți nicio eroare, atunci ați configurat totul corect și domeniul vă oferă un bilet Kerberos. Apropo, mai jos sunt enumerate câteva greșeli frecvente.

Puteți verifica dacă biletul a fost primit executând comanda

klist

Puteți șterge toate biletele (nu aveți nevoie de ele deloc) cu comanda

kdestroy

R erori comune de kinit

kinit(v5): Ceasul este prea mare în timp ce obțineți acreditările inițiale

Aceasta înseamnă că ora computerului dvs. nu este sincronizată cu controlerul de domeniu (vezi mai sus).

kinit(v5): Preautentificarea a eșuat la obținerea acreditărilor inițiale

Ați introdus o parolă greșită.

kinit(v5): răspunsul KDC nu s-a potrivit așteptărilor la obținerea acreditărilor inițiale

Cea mai ciudată greșeală. Asigurați-vă că numele domeniului din krb5.conf, precum și domeniul din comanda kinit, sunt introduse cu majuscule:

DOMAIN.COM = (

# ...

kinit [email protected]

kinit(v5): Clientul nu a fost găsit în baza de date Kerberos în timp ce obținerea acreditărilor inițiale

Utilizatorul specificat nu există în domeniu.

N Configurare Samba și autentificare la domeniu

Pentru a vă autentifica în domeniu, trebuie să specificați setările corecte în fișierul /etc/samba/smb.conf. În această etapă, ar trebui să fii interesat doar de unele dintre opțiunile din secțiune. Mai jos este un exemplu de parte dintr-un fișier de configurare Samba cu comentarii despre semnificația parametrilor importanți:

# Aceste două opțiuni trebuie scrise cu majuscule și grupul de lucru fără

# din ultima secțiune după punct, iar domeniul este numele complet al domeniului

Grup de lucru = DOMAIN

Tărâm = DOMAIN.COM

# Aceste două opțiuni sunt responsabile pentru autorizarea prin AD

Securitate = ADS

Criptează parole = adevărat

# Doar important

Dns proxy = nr

Opțiuni socket = TCP_NODELAY

# Dacă nu doriți ca Samba să încerce ocazional să devină lider într-un domeniu sau într-un grup de lucru,

# sau chiar deveniți un controler de domeniu, apoi scrieți întotdeauna aceste cinci opțiuni exact în această formă

Master de domeniu = nr

Stăpân local = nr

Maestrul preferat = nu

Nivel OS = 0

Conectări la domeniu = nr

# Dezactivează suportul pentru imprimantă

Încărcare imprimante = nr

Afișați expertul pentru adăugare imprimante = nu

Printcap nume = /dev/null

Dezactivați bobine = da

După ce editați smb.conf, rulați comanda

testparm

Va verifica configurația dvs. pentru erori și va oferi un rezumat al acesteia:

#testparm

Încărcați fișierele de configurare smb din /etc/samba/smb.conf

Fișierul de servicii încărcat OK.

Rol de server: ROLE_DOMAIN_MEMBER

Apăsați pe Enter pentru a vedea un dump al definițiilor serviciilor dvs

După cum puteți vedea, am setat parametrii corecti pentru ca computerul nostru să devină membru al domeniului. Acum este timpul să încercați să vă conectați direct la domeniu. Pentru a face acest lucru, introduceți comanda:

net ads join -U nume de utilizator -D DOMAIN

Și dacă reușește, vei vedea ceva similar cu:

# net ads se alătură -U nume de utilizator -D DOMAIN

Introduceți parola numelui de utilizator:

Folosind un nume de domeniu scurt -- DOMAIN

S-a alăturat „SMBSRV01” la domeniul „domain.com”

ŞI opțiunile de comandă net utilizate

U username%password: Parametru obligatoriu în loc de nume de utilizator, trebuie să înlocuiți un nume de utilizator cu drepturi de administrator de domeniu și să specificați o parolă.

D DOMAIN: DOMAIN este domeniul în sine, nu trebuie să specificați domeniul, dar este mai bine să o faceți întotdeauna - nu se va înrăutăți.

S win_domain_controller : win_domain_controller poate să nu fie specificat, dar există momente când serverul nu găsește automat un controler de domeniu.

createcomputer="OU/OU/..." : În AD, OU (Unitatea organizațională) este adesea folosită, există OU = Office în rădăcina domeniului, în el OU = Cabinet, astfel încât să îl puteți adăuga imediat celui pe care îl aveți nevoie, îl puteți specifica astfel: sudo net ads join -U username createcomputer="Office/Cabinet".

Dacă nu mai sunt mesaje, atunci totul este în regulă. Încercați să dați ping computerului după numele unui alt membru al domeniului pentru a vă asigura că totul este înregistrat în domeniu așa cum ar trebui.

De asemenea, puteți tasta comanda:

net ads testjoin

Dacă totul este bine, puteți vedea:

#net ads testjoin

Alăturarea este OK

Dar uneori, după un mesaj despre alăturarea unui domeniu, apare o eroare de genul 3):

Actualizarea DNS a eșuat!

Acest lucru nu este foarte bun, iar în acest caz este recomandat să citiți secțiunea despre configurarea DNS-ului din nou puțin mai sus și să înțelegeți ce ați greșit. După aceasta, trebuie să eliminați computerul din domeniu și să încercați să îl introduceți din nou. Dacă sunteți ferm încrezător că ați configurat totul corect, dar DNS-ul încă nu este actualizat, atunci puteți adăuga manual o intrare pentru computer pe serverul DNS și totul va funcționa. Desigur, dacă nu există alte erori și te-ai autentificat cu succes în domeniu. Cu toate acestea, este mai bine să ne dăm seama de ce DNS-ul nu este actualizat automat. Acest lucru se poate datora nu numai computerului, ci și setărilor AD incorecte.

Înainte de a afla de ce DNS-ul nu este actualizat, nu uitați să reporniți computerul după ce intrați în domeniu! Este foarte posibil ca acest lucru să rezolve problema.

Dacă totul a mers fără erori, atunci felicitări, te-ai autentificat cu succes în domeniu! Poți să te uiți în AD și să vezi singur. De asemenea, este o idee bună să verificați dacă puteți vedea resursele din domeniu. Pentru a face acest lucru, instalați smbclient:

sudo aptitude install smbclient

Acum puteți vizualiza resursele computerelor de domeniu. Dar pentru asta trebuie să ai un bilet Kerberos, adică. dacă le-am șters, le primim din nou prin kinit (vezi mai sus). Să vedem ce resurse sunt furnizate rețelei de computerul stației de lucru:

smbclient -k -L stație de lucru

Ar trebui să vedeți o listă de resurse partajate pe acest computer.

Configurarea Winbind

Dacă trebuie să lucrați cumva cu utilizatorii de domeniu, de exemplu, să configurați partajările SMB cu controlul accesului, atunci, pe lângă Samba în sine, veți avea nevoie și de Winbind - un daemon special care servește la conectarea utilizatorului Linux local și a sistemului de management al grupului cu Active. Server de directoare. Pur și simplu, Winbind este necesar dacă doriți să vedeți utilizatori de domeniu pe computerul Ubuntu.

Winbind vă permite să mapați toți utilizatorii și grupurile AD pe sistemul dvs. Linux, atribuindu-le ID-uri dintr-un interval dat. În acest fel, puteți atribui utilizatori de domeniu drept proprietari ai folderelor și fișierelor de pe computer și puteți efectua orice alte operațiuni legate de utilizatori și grupuri.

Pentru a configura Winbind, se folosește același fișier /etc/samba/smb.conf. Adăugați următoarele rânduri la secțiune:

# Opțiuni pentru potrivirea utilizatorilor de domeniu și a utilizatorilor virtuali în sistem prin Winbind.

# Intervale de ID pentru utilizatori virtuali și grupuri.

Idmap uid = 10000 - 40000

Idmap gid = 10000 - 40000

# Aceste opțiuni nu ar trebui să fie dezactivate.

Winbind enum groups = da

Winbind enumerarea utilizatorilor = da

# Utilizați domeniul implicit pentru numele de utilizator. Fără această opțiune, nume de utilizator și de grup

# va fi folosit cu un domeniu, de ex. în loc de nume de utilizator - DOMAIN\nume de utilizator.

# Acesta poate fi ceea ce doriți, dar de obicei este mai ușor să activați această opțiune.

Winbind folosește domeniul implicit = da

# Dacă doriți să permiteți utilizatorilor de domeniu să folosească linia de comandă, atunci

# adăugați următoarea linie, altfel shell-ul va apela /bin/false

Shell șablon = /bin/bash

# Pentru a actualiza automat biletul Kerberos cu modulul pam_winbind.so, trebuie să adăugați linia

Bilete de reîmprospătare Winbind = da

Parametri:

idmap uid = 10000 - 40000

idmap gid = 10000 - 40000

în noile versiuni de Samba sunt deja depășite și când se verifică configurația samba folosind testparm va fi emis un avertisment:

AVERTISMENT: Opțiunea „idmap uid” este depreciată

AVERTISMENT: Opțiunea „idmap gid” este depreciată

Pentru a elimina avertismentele, trebuie să înlocuiți aceste linii cu altele noi:

idmap config *: interval = 10000-20000

idmap config *: backend = tdb

Acum reporniți daemonul Winbind și Samba în următoarea ordine:

sudo /etc/init.d/winbind stop

sudo smbd restart

sudo /etc/init.d/winbind start

Hai să lansăm

sudo testparm

Să vedem dacă există erori sau avertismente, dacă apar următoarele:

„rlimit_max: rlimit_max (1024) sub limita minimă Windows (16384)”

Puteți remedia acest lucru fără a reporni astfel:

ulimit -n 16384

Pentru a salva după repornire, editați fișierul /etc/security/limits.conf

# Adăugați următoarele rânduri la sfârșitul fișierului:

* - nr. 16384

root - nofile 16384

După repornire, verificați dacă Winbind a stabilit o relație de încredere cu AD cu comanda:

# wbinfo -t

verificarea secretului de încredere pentru domeniul DCN prin apeluri RPC a reușit

Și, de asemenea, că Winbind a văzut utilizatori și grupuri din AD folosind comenzile 4):

wbinfo -u

wbinfo -g

Aceste două comenzi ar trebui să listeze utilizatorii și, respectiv, grupurile din domeniu. Fie cu sau fără prefixul DOMAIN\, în funcție de valoarea specificată pentru parametrul „winbind use default domain” din smb.conf.

Deci, Winbind funcționează, dar nu este încă integrat în sistem.

D adăugarea Winbind ca sursă de utilizatori și grupuri

Pentru ca Ubuntu să funcționeze transparent cu utilizatorii de domeniu, în special pentru a putea atribui utilizatori de domeniu drept proprietari de foldere și fișiere, trebuie să îi spuneți Ubuntu să folosească Winbind ca sursă suplimentară de informații despre utilizatori și grupuri.

Pentru a face acest lucru, modificați două linii în fișierul /etc/nsswitch.conf:

passwd:compat

grup: compat

adăugând winbind la sfârșit:

passwd: compat winbind

grup: compat winbind

fișiere: dns mdns4_minimal mdns4

server ubuntu 14.04, fișierul /etc/nsswitch.conf nu conținea linia „fișiere: dns mdns4_minimal mdns4” ci era: „gazde: fișiere mdns4_minimal dns wins” Pe care l-am convertit în: „gazde: dns mdns4_minimal mdns” after care totul a funcționat

Acum verificați dacă Ubuntu cere Winbind informații despre utilizator și grup rulând

getent passwd

grup getent

Prima comandă ar trebui să returneze întregul conținut al fișierului dvs. /etc/passwd, adică utilizatorii dvs. locali, plus utilizatorii de domeniu cu ID-uri din intervalul pe care l-ați specificat în smb.conf. Al doilea ar trebui să facă același lucru pentru grupuri.

Acum puteți lua orice utilizator de domeniu și îl puteți face, de exemplu, proprietarul unui fișier.

O autorizare în Ubuntu prin utilizatori de domeniu

În ciuda faptului că toți utilizatorii domeniului au devenit de fapt utilizatori cu drepturi depline ai sistemului (ceea ce poate fi verificat prin rularea ultimelor două comenzi din secțiunea anterioară), este încă imposibil să te autentifici în sistem ca oricare dintre ele. Pentru a activa capacitatea de a autoriza utilizatorii de domeniu pe un computer care rulează Ubuntu, trebuie să configurați PAM să funcționeze cu Winbind.

Pentru Ubuntu 10.04 și versiuni ulterioare, adăugați o singură linie în fișierul /etc/pam.d/common-session, deoarece PAM face deja o treabă bună cu autorizarea:

Pentru Ubuntu 13.10, pentru ca câmpul de intrare manuală de conectare să apară, trebuie să adăugați linia de mai jos la orice fișier din folderul /etc/lightdm/lightdm.conf/:

greeter-show-manual-login=adevărat

Pentru Ubuntu 9.10 și mai jos, va trebui să editați mai multe fișiere (dar nimeni nu interzice utilizarea acestei metode în 10.04 - funcționează și):

Succesiunea liniilor din fișiere contează!

/etc/pam.d/common-auth

auth required pam_env.so

auth suficient pam_unix.so likeauth nullok try_first_pass

auth suficient pam_winbind.so use_first_pass krb5_auth krb5_ccache_type=FILE

auth required pam_deny.so

/etc/pam.d/common-account

cont suficient pam_winbind.so

cont este necesar pam_unix.so

/etc/pam.d/common-session

sesiune opțională pam_mkhomedir.so skel=/etc/skel/umask=0077

sesiune opțională pam_ck_connector.so nox11

sesiune necesară pam_limits.so

sesiune necesară pam_env.so

sesiune necesară pam_unix.so

/etc/pam.d/common-password

parolă suficientă pam_unix.so try_first_pass use_authtok nullok sha512 shadow

parolă suficientă pam_winbind.so

parola necesară pam_deny.so

Și, în cele din urmă, trebuie să mutați lansarea Winbind la pornirea sistemului după toate celelalte servicii (în mod implicit începe la indexul 20). Pentru a face acest lucru, rulați următoarea comandă în terminal:

sudo bash -c "pentru i în 2 3 4 5; do mv /etc/rc$i.d/S20winbind /etc/rc$i.d/S99winbind; gata"

Ceea ce este echivalent cu rularea comenzii pentru fiecare nivel (4 în exemplu):

mv /etc/rc4.d/S20winbind /etc/rc4.d/S99winbind

În unele cazuri, winbind poate avea un nivel de rulare diferit (de exemplu, S02winbind). Deci mai întâi verificați numele fișierelor rulând comanda „ls /etc/rc(2,3,4,5).d/ | grep winbind" (fără ghilimele).

Gata, toate setările sunt finalizate. Reporniți și încercați să vă conectați cu un cont de utilizator de domeniu.

Adesea apare o situație când un controler de domeniu este indisponibil din diverse motive - întreținere, o întrerupere de curent sau ați adus laptopul acasă și doriți să lucrați. În acest caz, Winbind poate fi configurat să memoreze în cache conturile de utilizator de domeniu. Pentru a face acest lucru, trebuie să faceți următoarele. Adăugați următoarele linii la secțiunea /etc/samba/smb.conf a fișierului:

Winbind autentificare offline = da

# Perioada de stocare în cache a contului, implicit este de 300 de secunde

Timp cache Winbind = 300

# Setare opțională, dar elimină pauzele obositoare, specificați controlerul de domeniu dc,

# puteți specifica și ip, dar aceasta este o formă proastă

Server de parole = dc

De obicei, acest lucru este suficient. Dacă apar erori, trebuie să creați un fișier /etc/security/pam_winbind.conf cu următorul conținut 5):

Atenţie! Când utilizați sfaturile de mai jos, poate apărea o eroare complet aleatorie „Autentificare eșuată”! Prin urmare, tot ceea ce faci, îl faci pe riscul și riscul tău!

# fișier de configurare pam_winbind

# /etc/security/pam_winbind.conf

# activați depanarea

Depanare = nu

# solicitați o autentificare în cache, dacă este posibil

# (necesită „winbind offline logon = yes” în smb.conf)

Cached_login = da

# autentificați folosind kerberos

Krb5_auth = da

# când utilizați kerberos, solicitați un tip de cache de acreditări „FIȘIER” krb5

# (lăsați gol pentru a face doar autentificare krb5, dar nu aveți un bilet

#după)

Krb5_ccache_type = FIȘIER

# faceți ca autentificarea reușită să depindă de apartenența la un SID

# (poate lua și un nume)

;require_membership_of =

Silențios = da

Fișierul /etc/pam.d/gnome-screensaver are în acest caz forma:

auth suficient pam_unix.so nullok_secure

auth required pam_deny.so

Fișierul /etc/pam.d/common-auth este de asemenea modificat:

auth opțional pam_group.so

auth suficient pam_unix.so nullok_secure use_first_pass

auth suficient pam_winbind.so use_first_pass

auth required pam_deny.so

  • Traducere

Dacă ați stăpânit deja elementele de bază ale terminalului, este posibil să fiți gata să combinați comenzile pe care le-ați învățat. Uneori, executarea comenzilor shell pe rând este suficientă pentru a rezolva o anumită problemă, dar în unele cazuri introducerea comenzilor după comandă este prea plictisitoare și irațională. Într-o situație ca aceasta, unele simboluri speciale, cum ar fi parantezele unghiulare, sunt utile.

Pentru shell, interpretul de comandă Linux, aceste caractere suplimentare nu sunt o risipă de spațiu pe ecran. Sunt echipe puternice care pot lega împreună diferite informații, pot separa ceea ce era anterior întreg și pot face mult mai mult. Una dintre cele mai simple, dar mai puternice și utilizate pe scară largă caracteristici ale shell-ului este redirecționarea fluxurilor standard de intrare/ieșire.

Trei fluxuri I/O standard

Pentru a înțelege despre ce vom vorbi aici, este important să știm de unde provin și unde se duc datele care pot fi redirecționate. Linux are trei fluxuri I/O standard.

Primul este fluxul de intrare standard. În sistem, acesta este firul nr. 0 (deoarece în computere, numărarea începe de obicei de la zero). Numerele firelor sunt numite și descriptori. Acest flux reprezintă unele informații transmise terminalului, în special instrucțiuni transmise shell-ului pentru execuție. De obicei, datele intră în acest flux pe măsură ce utilizatorul îl introduce de la tastatură.

Al doilea flux este fluxul de ieșire standard, numerotat 1. Acesta este fluxul de date pe care shell-ul îl scoate după ce a efectuat o acțiune. De obicei, aceste date ajung în aceeași fereastră de terminal în care a fost introdusă comanda care a făcut să apară.

Și, în cele din urmă, al treilea flux este fluxul de eroare standard, are mânerul 2. Acest flux este similar cu fluxul de ieșire standard, deoarece de obicei ceea ce intră în el ajunge pe ecranul terminalului. Cu toate acestea, este în mod inerent diferit de ieșirea standard și, ca rezultat, aceste fluxuri pot fi controlate separat dacă se dorește. Acest lucru este util, de exemplu, în următoarea situație. Există o echipă care procesează o cantitate mare de date, efectuând o operație complexă și predispusă la erori. Doriți să vă asigurați că sarcina utilă pe care o generează această comandă nu este amestecată cu mesaje de eroare. Acest lucru se realizează prin redirecționarea separată a fluxurilor de ieșire și de eroare.

După cum probabil ați ghicit deja, redirecționarea I/O înseamnă lucrul cu fluxurile descrise mai sus și redirecționarea datelor acolo unde programatorul are nevoie de ele. Acest lucru se face folosind simbolurile > și< в diverse combinatii, a cărui utilizare depinde de unde ar trebui să ajungă în cele din urmă datele redirecționate.

Redirecționează ieșirea standard

Să presupunem că doriți să creați un fișier în care va fi scris data curentă si timp. Pentru a ușura lucrurile, există o comandă, denumită corect data , care returnează ceea ce avem nevoie. De obicei, comandă datele de ieșire la ieșirea standard. Pentru ca aceste date să apară în fișier, trebuie să adăugați simbolul > după comandă, înainte de numele fișierului țintă. Înainte și după > trebuie să puneți un spațiu.

Când utilizați redirecționarea, orice fișier specificat după > va fi suprascris. Dacă nu există nimic valoros în fișier și conținutul acestuia poate fi pierdut, în designul nostru este permis să îl folosim deja fișier existent. De obicei, este mai bine de utilizat un astfel de caz numele unui fișier care nu există încă. Acest fișier va fi creat după executarea comenzii. Să-i spunem date.txt . Extensia de fișier după punct de obicei nu contează prea mult, dar extensiile ajută la menținerea lucrurilor organizate. Deci, iată comanda noastră:

$date>date.txt
Acest lucru nu înseamnă că această comandă în sine este incredibil de utilă, cu toate acestea, pe baza ei, putem deja să facem ceva mai interesant. Să presupunem că doriți să știți cum se redirecționează traficul pe Internet către un punct final, înregistrând datele zilnic. Comanda traceroute va ajuta la rezolvarea acestei probleme, care raportează detalii despre ruta de trafic dintre computerul nostru și punctul final specificat la apelarea comenzii sub forma unui URL. Datele includ informații despre toate routerele prin care trece traficul.

Deoarece avem deja un fișier cu data, ar fi destul de justificat să atașăm pur și simplu datele primite de la traceroute la acest fișier. Pentru a face acest lucru, trebuie să utilizați două > simboluri, plasate unul după altul. Ca urmare echipa noua, care redirecționează ieșirea către un fișier, dar nu îl suprascrie, ci adaugă date noi după cele vechi, ar arăta astfel:

$ traceroute google.com >> date.txt
Acum tot ce trebuie să facem este să schimbăm numele fișierului cu ceva mai semnificativ folosind comanda mv, care ia numele fișierului original ca prim argument și noul nume al fișierului ca al doilea:

$ mv date.txt trace1.txt

Redirecționează intrarea standard

Folosind un semn< вместо >putem redirecționa intrarea standard prin înlocuirea acesteia cu conținutul unui fișier.

Să presupunem că există două fișiere: list1.txt și list2.txt, fiecare conținând o listă nesortată de șiruri. Fiecare listă are elemente unice, dar unele dintre elementele din listă sunt aceleași. Putem găsi liniile care sunt atât în ​​prima cât și în a doua listă folosind comanda comm, dar înainte de a o folosi, listele trebuie sortate.

Există comanda sortare, care returnează o listă sortată la terminal fără a salva datele sortate în fișierul din care au fost preluate. Puteți trimite o versiune sortată a fiecărei liste către fișier nou, folosind comanda > și apoi utilizați comanda comm. Cu toate acestea, această abordare va necesita cel puțin două comenzi, deși același lucru poate fi făcut într-o singură linie fără a crea fișiere inutile.

Deci putem folosi comanda< для перенаправления отсортированной версии каждого файла команде comm . Вот что у нас получилось:

$ com<(sort list1.txt) <(sort list2.txt)
Parantezele de aici au același sens ca la matematică. Shell-ul procesează mai întâi comenzile din paranteze și apoi totul. În exemplul nostru, liniile din fișiere sunt mai întâi sortate, iar apoi rezultatul este transmis comenzii comm, care afișează apoi rezultatul comparării listelor.

Se redirecționează fluxul de erori standard

În cele din urmă, să vorbim despre redirecționarea erorilor standard. Acest lucru poate fi necesar, de exemplu, pentru a crea fișiere jurnal cu erori sau pentru a combina mesajele de eroare și datele returnate de o anumită comandă într-un singur fișier.

De exemplu, ce se întâmplă dacă doriți să căutați în întregul sistem informații despre interfețele fără fir care sunt accesibile utilizatorilor care nu au privilegii de root? Pentru a face acest lucru, puteți folosi puternica comandă find.

În mod obișnuit, atunci când un utilizator normal rulează comanda find în întregul sistem, va scoate atât date utile, cât și erori către terminal. În același timp, există de obicei mai multe dintre acestea din urmă decât primele, ceea ce face dificil să găsiți ceea ce aveți nevoie în ieșirea comenzii. Soluția la această problemă este destul de simplă: doar redirecționați fluxul de erori standard către un fișier folosind comanda 2> (rețineți, 2 este un descriptor pentru fluxul de erori standard). Ca rezultat, pe ecran va apărea doar ceea ce comanda trimite către ieșirea standard:

$ find / -name wireless 2> denied.txt
Ce trebuie să faceți dacă trebuie să salvați rezultatele muncii echipei în dosar separat fără a amesteca aceste date cu informații despre eroare? Deoarece fluxurile pot fi redirecționate independent unul de celălalt, putem adăuga o comandă pentru a redirecționa ieșirea standard către un fișier la sfârșitul construcției noastre:

$ find / -name wireless 2> denied.txt > found.txt
Vă rugăm să rețineți că primul colț vine cu numărul - 2>, iar al doilea fără acesta. Acest lucru se datorează faptului că ieșirea standard are mâna 1, iar comanda > are scopul de a redirecționa ieșirea standard dacă nu este specificat niciun număr de mâner.

În cele din urmă, dacă doriți ca tot ceea ce iese comanda să ajungă într-un singur fișier, puteți redirecționa ambele fluxuri în aceeași locație folosind comanda &>:

$ find / -name wireless &> results.txt

Rezultate

Aici am examinat doar elementele de bază ale mecanismului de redirecționare a fluxurilor în interpret linie de comandă Linux însă, chiar și puținul pe care l-ați învățat astăzi vă oferă posibilități aproape nelimitate. Și apropo, ca orice altceva legat de lucrul în terminal, stăpânirea redirecționării fluxului necesită practică. Prin urmare, vă recomandăm să începeți propriile experimente cu > și< .

Dragi cititori! Știați exemple interesante folosiți redirecționarea firelor în Linux pentru a ajuta începătorii să se simtă mai confortabil cu această tehnică de terminal?