Essentials Pagina 6

De la Wiki Linux Advanced
Sari la navigare Sari la căutare

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

Pagina anterioară | Următoarea pagină