Essentials Pagina 6
Laborator 6
Procesul de pornire a sistemului de operare
O sarcina importanta a oricarui administrator de sistem este de a stabili ce servicii pornesc automat la butare, ce servicii trebuie oprite etc. Etapele butarii unei calculator care ruleaza Linux sunt urmatoarele:
1) BIOS executa POST (Power on Self Test) si conform cu configuratia sa (de unde este configurat sa buteze: Hard Disk, CD-ROM, DVD-ROM etc) citeste MBR-ul care reprezinta primul sector al hard diskului (primii 512 bytes); pe sisteme moderne intrarea catre un fisier de pe partitia de boot unde procesul de instalare va plasa boot loader-ul.
2) In MBR (Master Boot Record - primul sector al Hard diskului; sisteme moderne au partitie de boot montata de obicei /boot/efi) se gaseste un boot loader (GRUB sau rEFInd) care incarca in memorie de pe disk, kernelul si initrd inainte sa monteze root file system. Functionalitatea interna a lui GRUB permite sa citeasca de pe disk kernelul si initrd si sa le incarce in memorie intainte sa monteze partitia pe care acestea se gasesc. Kernelul se decomprima si foloseste modulele din initrd (monteaza initrd) pentru a buta de pe disk. Daca nu exista initrd funtionalitatea pt. a buta de pe disk trebuie sa fie compilata in kernel.
Nota: initrd reprezinta un RAMDISK (unitate de stocare in ram). Fizic acesta este un fisier. Exemplu: /boot/initrd.img-2.6.22-14-server initrd contine module necesare kernelului in prima faza a procesului de butare inainte sa monteze root file system. Exemplu: initrd ar putea contine un modul care reprezinta un driver pentru a putea monta hard diskul.
3) Primul program pe care kernelul il executa de pe disk este init
Istoric, acesta era de obicei SysVinit si executa script-uri pe baza script-urilor:
/etc/inittab # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 – unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id: 5:initdefault:
Acum, programul de init folosit de catre distributiile tipice este Systemd. Serviciile pot fi atat script-uri cat si programe de sine statatoare sau module interne; acestea functioneaza intai pe post de target-uri la pornirea sistemului:
# systemctl list-units --type target UNIT LOAD ACTIVE SUB DESCRIPTION > basic.target loaded active active Basic System > blockdev@dev-mapper-nvme0n1p3_crypt.target loaded active active Block Device Prepar> bluetooth.target loaded active active Bluetooth > cryptsetup.target loaded active active Local Encrypted Vol> getty.target loaded active active Login Prompts > graphical.target loaded active active Graphical Interface> local-fs-pre.target loaded active active Local File Systems > local-fs.target loaded active active Local File Systems > multi-user.target loaded active active Multi-User System > network-online.target loaded active active Network is Online > network.target loaded active active Network > nfs-client.target loaded active active NFS client services> paths.target loaded active active Paths > remote-fs-pre.target loaded active active Remote File Systems> remote-fs.target loaded active active Remote File Systems> rpcbind.target loaded active active RPC Port Mapper > slices.target loaded active active Slices > sockets.target loaded active active Sockets > sound.target loaded active active Sound Card > swap.target loaded active active Swap > sysinit.target loaded active active System Initializati> time-set.target loaded active active System Time Set > time-sync.target loaded active active System Time Synchro> timers.target loaded active active Timers
Comportamentul acestora a fost imprumutat de catre programele alternative de init relevante la ora actuala, S6 si Dinit, folosite de cateva distributii, spre exemplu:
# dinitctl list [[+] ] boot [{+} ] system [{+} ] login.target (has console) [{+} ] local.target [{+} ] pre-local.target [{+} ] early-fs-local.target [{+} ] early-fs-pre.target [{+} ] early-devices.target [{+} ] udevd-early [{+} ] early-prepare.target [{+} ] root-ro [{+} ] pseudofs [{+} ] cgroups [{+} ] tmpfs [{+} ] elogind (pid: 433) [{+} ] hostname [{+} ] swap <...>
X Windows system/GUI
4) Init-ul porneste serviciile relevante de sistem si va ajunge la cel responsabil de interfata: Display manager
Acesta mai departe porneste sesiunea utilizatorului si X Window System - de pe care desktop-ul va porni.
Exemplu - sddm
systemd(1)───sddm(1642)───Xorg(1645)─┬─{Xorg}(1647) ├─{Xorg}(1648) ├─{Xorg}(1649) ├─{Xorg}(1650) <...> /etc/sddm.conf.d/autologin.conf [Autologin] User=john Session=plasma <...>
Managementul serviciilor
Pornirea unui serviciu:
sudo systemctl start application.service
După cum am menționat mai sus, systemd stie să caute *.servicedosare pentru comenzi de gestionare a serviciului, astfel încât comanda ar putea fi tastată astfel:
sudo systemctl start application
Deși puteți utiliza formatul de mai sus pentru administrație generală, pentru claritate, vom folosi .serviceSufix pentru restul comenzilor, pentru a fi explicit cu privire la ţinta pe care ne despădăm.
Pentru a opri un serviciu care rulează în prezent, puteți utiliza stop:
sudo systemctl stop application.service
Reîncărcarea
Pentru a reporni un serviciu de funcționare, puteți utiliza restart:
sudo systemctl restart application.service
Dacă aplicația în cauză este capabilă să-și reîncarce fișierele de configurare (fără a reporni), puteți emite reload pentru a iniția acest proces:
sudo systemctl reload application.service
Dacă nu sunteți sigur dacă serviciul are funcționalitatea de a reîncărca configurația acestuia, puteți emite reload-or-restart- Deţinută. Acest lucru va reîncărca configurația în loc dacă este disponibilă. În caz contrar, va reporni serviciul, astfel încât noua configurație este preluată:
sudo systemctl reload-or-restart application.service
Activarea şi dezactivarea unui serviciu
Comenzile de mai sus sunt utile pentru începerea sau oprirea serviciilor în timpul sesiunii curente. Pentru a spune systemdPentru a începe automat serviciile la portbagaj, trebuie să le activați.
Pentru a începe un serviciu la pornirea automată, utilizați enable:
sudo systemctl enable application.service
Acest lucru va crea un link simbolic din copia sistemului a fișierului de serviciu (de obicei în /lib/systemd/systemsau /etc/systemd/system) în locaţia de pe disc unde systemdcaută fișiere autostart (de obicei /etc/systemd/system/some_target.target.wants. . Vom trece peste ce este o țintă mai târziu în acest ghid).
Pentru a dezactiva serviciul de la pornirea automată, puteți tasta:
sudo systemctl disable application.service
Aceasta va elimina link-ul simbolic care indica faptul că serviciul trebuie început automat.
Rețineți că permiterea unui serviciu nu o începe în sesiunea curentă. Dacă doriți să începeți serviciul și, de asemenea, să-l activați în portbagaj, va trebui să emiteți ambele startȘi enablecomenzi. Verificarea stării serviciilor
Pentru a verifica starea unui serviciu în sistemul dvs., puteți utiliza status:
systemctl status application.service
Acest lucru vă va oferi starea de serviciu, ierarhia grupului și primele câteva linii de jurnal.
De exemplu, atunci când verificați starea unui server Nginx, puteți vedea ieșirea astfel:
Output ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2015-01-27 19:41:23 EST; 22h ago Main PID: 495 (nginx) CGroup: /system.slice/nginx.service ├─495 nginx: master process /usr/bin/nginx -g pid /run/nginx.pid; error_log stderr; └─496 nginx: worker process Jan 27 19:41:23 desktop systemd[1]: Starting A high performance web server and a reverse proxy server... Jan 27 19:41:23 desktop systemd[1]: Started A high performance web server and a reverse proxy server.
Acest lucru vă oferă o imagine de ansamblu frumoasă a stării actuale a aplicației, notificând-o cu privire la orice probleme și orice acțiuni care pot fi necesare.
Există, de asemenea, metode de verificare pentru anumite stări. De exemplu, pentru a verifica dacă o unitate este activă în prezent (alergare), puteți utiliza is-active:
systemctl is-active application.service
Acest lucru va returna starea unității actuale, care este de obicei active sau inactive. Codul de ieșire va fi „0” dacă este activ, făcând rezultatul mai simplu de analizat în scripturi.
systemctl is-enabled application.service systemctl is-failed application.service
Afișarea dependențelor
Pentru a vedea arborele de dependență al unei unități, puteți utiliza list-dependencies:
systemctl list-dependencies sshd.service
Acest lucru va afișa o ierarhie care cartografiat dependențele care trebuie tratate pentru a începe unitatea în cauză. Dependelele, în acest context, includ acele unități care sunt cerute fie de către, fie dorite de unitățile de deasupra acesteia.
Output sshd.service ├─system.slice └─basic.target ├─microcode.service ├─rhel-autorelabel-mark.service ├─rhel-autorelabel.service ├─rhel-configure.service ├─rhel-dmesg.service ├─rhel-loadmodules.service ├─paths.target ├─slices.target <...>
Printarea
În Linux, sistemul comun de imprimare UNIX (CUPS) este stratul responsabil pentru gestionarea imprimantei și a opțiunilor și serviciilor de imprimare, inclusiv imprimante, locuri de muncă de imprimare și cozi.
Stratul CUPS are multe opțiuni pentru a vă ajuta să configurați și să utilizați o imprimantă pe sistemul Linux. lp sau comanda „Line Printer” este unul dintre comenzile din stratul CUPS.
lp comanda depune un fișier pentru imprimare, în timp ce lpq, sau "Line Printer Queue", comanda vă permite să vizualizați lucrările de imprimare în coadă.
Ca majoritatea celorlalte comenzi de terminale Linux, lpComanda acceptă diverse opțiuni. Să ne uităm la unii dintre ei.
Cum se instalează comanda lp În unele cazuri, este posibil să nu aveți lp instalată pe sistemul dumneavoastră. Pentru a verifica dacă aveți comanda lp instalată, rulați which: which lp Dacă ați avut instalat, linia de comandă ar trebui să vă arate calea fișierului. Ieșire de exemplu: /usr/bin/lp Dacă nu aveți comanda Lp instalată, puteți utiliza managerul pachetului apt pentru a-l instala. sudo apt install lpring
Sintaxa generală pentru utilizarea comenzii lp este:
lp -d [[printer-id] ][[filename]
Înlocuiți [numele de fișier] cu calea către fișierul țintă.
Utilizarea comenzii lp pentru a lista imprimantele disponibile
Folosim lpstat cu opțiunea -a de a afișa imprimante conectate și disponibile și optiunea -d de a arăta imprimanta implicită. Sintaxa pentru aceasta este:
lpstat -a | awk '{print $1}"
Comanda de mai sus trebuie să returneze numele imprimantelor disponibile.
Utilizarea comenzii lp pentru a imprima la o imprimantă specifică
În cele mai multe cazuri, veți avea o singură imprimantă conectată la sistemul dvs. Astfel, va trebui să folosiți doar comanda lp urmată de numele de fișier pentru a imprima la imprimanta implicită.
Cu toate acestea, în unele cazuri, este posibil să aveți mai multe imprimante conectate. Va trebui să folosiți optiunea -d de a imprima la o imprimantă specifică dacă apare această situație.
De exemplu, pentru a imprima fișierul „/home/debian/mt/hello.txt” la imprimanta HP Ink-Tank 310, utilizați comanda:
lp -d "Ink-Tank-310" /home/debian/mte/hello.txt
Folosind comanda lpq pentru a arăta coada de imprimare. Notă: dacă comanda nu este disponibilă în sistemul dvs., instalați pachetul cups-bsd:
Sudo apt instalează cupe-bd
După ce aveți pachetul instalat, rulați comanda:
lpq -P (nume)
Comanda trebuie să dea output:
lpq -P "Ink-Tank-310" Ink-Tank- 310 este gata fără intrări
Aceasta arată că imprimanta specificată nu are nici un loc de muncă de imprimare și că puteți merge mai departe și imprima documentele. Utilizarea comenzii Lp pentru a imprima mai multe copii
Pentru a imprima un anumit număr de copii ale unui fișier, puteți utiliza opţiunea -n. Sintaxa pentru aceasta este:
lp -n
De exemplu, pentru a imprima zece copii ale unui fișier numit „hello.txt” la imprimanta „HP-ink-jet 315”, ruleaza comanda ca:
lp -d "Ink-Tank-310" -n 10 hello.txt
De asemenea, puteți utiliza comanda lp pentru a imprima în cele două orientări principale de imprimare: portret și peisaj.
Notă: optiunea -o este foarte versatilă. Pe lângă utilizarea acestuia pentru a specifica orientarea postului de imprimare, îl puteți utiliza și pentru a seta dimensiunea hârtiei.
Pentru a utiliza această opțiune pentru a imprima exemplul de lucru anterior în orientarea portret, comanda pentru asta ar fi:
lp -d "Ink-Tank-310" -n 10 -o portrait hello.txt
Pe de altă parte, pentru a imprima în peisaj, am specifica „peisaj” în sintaxa ca:
lp -d "Ink-Tank-310" -n 10 -o landscape hello.txt
După cum am menționat, -oopțiunea are multe alte opțiuni. De exemplu, îl puteți folosi pentru a seta dimensiunea hârtiei.
Pentru a imprima fișierul anterior într-o dimensiune a literei, am specifica dimensiunea folosind comanda lp și atributul "media". Un exemplu pentru aceasta ar fi:
lp -d "Ink-Tank-310" -n 10 -o portret -o media media=lertter hello.txt