Scrierea de scripturi pentru a rula pe diferite computere Linux este dificilă. Nu poți presupune că vor avea aceleași caracteristici. getconf
comanda vă permite să verificați sute de valori ale sistemului de operare și ale sistemului de fișiere.
Scripturi hardware conștiente
Dacă ați scris vreodată un script care trebuie să ruleze pe o varietate de mașini Linux, s-ar putea să vă fi găsit cu fața la situația „Ciudat, funcționează foarte bine pe mașina mea …”. Diferențe mici între arhitectura computerului, sistemele de operare și sistemele de fișiere de pe mașinile țintă pot împiedica scripturile să funcționeze corect.
Dacă scripturile dvs. sunt simple și nimic din ceea ce fac – sau încearcă să lanseze – depinde de hardware compatibil sau de anumite capacități ale sistemului de fișiere, este posibil să nu aveți niciodată probleme. Dar cu cât scriptul dvs. devine mai complicat, cu atât sunt mai critice detaliile mașinii pe care rulează scriptul. De asemenea, merită menționat faptul că un singur computer poate avea mai multe sisteme de fișiere instalate pe acesta, montate pe diferite părți ale arborelui de directoare. Deoarece ceva funcționează într-un director nu înseamnă că va funcționa la fel în alt director.
getconf
comanda poate raporta literalmente sute de caracteristici diferite ale sistemului de operare și ale sistemului de fișiere. Unele dintre acestea iau forma unor perechi de valori, una păstrând sistemul maxim și cealaltă menținând minimul. Aceasta înseamnă că puteți testa hardware-ul sau valorile sistemului de fișiere pentru a vă asigura că scriptul dvs. va reacționa în consecință.
Desigur, scriptul dvs. nu poate fi folosit getconf
pe computerul țintă dacă nu este instalat pe acel computer. Toate distribuțiile care au fost testate la cercetarea acestui articol au avut getconf
deja instalate, inclusiv Ubuntu, Fedora și Manjaro. Interesant este că toți aveau aceeași versiune a getconf
de asemenea, versiunea 2.33.
Primii pași cu Comanda getconf
Puteți verifica dacă aveți getconf
instalat pe computerul dvs. și aflați ce versiune este, utilizând --version
opțiune.
getconf --version
Pentru a vedea câte articole getconf
poate raporta despre, utilizați -a
(all) opțiune și treceți-o prin wc
comanda. Aceasta va număra liniile, cuvintele și caracterele din ieșire.
getconf -a | wc
În ieșire există 320 de linii. Pentru a vedea întreaga listă într-un mod ușor de gestionat, vom introduce ieșirea în less
.
getconf -a | less
Puteți derula înainte și înapoi până la listă pentru a vedea ce getconf
poate raporta asupra.
Unele dintre elemente sunt duplicate. Multe dintre ele pot fi apelate printr-un nume mai scurt sau printr-un nume mai lung conform cu POSIX.
Raportarea valorilor unice
A cauza getconf
pentru a raporta o singură valoare, treceți numele valorii către getconf
pe linia de comandă. Rețineți că toate numele opțiunilor sunt cu majuscule.
getconf LONG_BIT
LONG_BIT
opțiunea raportează dacă kernelul dvs. – și, prin urmare, sistemul dvs. de operare – este pe 32 de biți sau pe 64 de biți. Nu există alți parametri necesari pentru această comandă, ci doar opțiunea LONG_BIT în sine. O altă valoare simplă de raportat este LOGIN_NAME_MAX
.
getconf LOGIN_NAME_MAX
Aceasta este o lungime maximă ciudat de mare pentru un nume de utilizator, dar este adevărat. Dacă doriți cu adevărat să creați un cont de utilizator cu un nume de utilizator absurd de lung, ați putea. În schimb, numele gazdei acestui computer are o lungime maximă de 64 de caractere:
getconf HOST_NAME_MAX
Pentru a vedea câte procese simultane poate rula un cont de utilizator, utilizați CHILD_MAX
opțiune:
getconf CHILD_MAX
OPEN_MAX
value returnează numărul maxim de fișiere deschise de un proces.
getconf OPEN_MAX
Pentru a vedea un subset al fișierului getconf
valorile pe care le putem folosi -a
(toate) opțiune pentru a genera toate valorile și utilizați grep
pentru a le filtra pe cele care ne interesează. De exemplu, pentru a vedea fiecare valoare care are „NAME” în titlu, utilizați:
getconf -a | grep NAME
La fel, pentru a vedea toate valorile cu „GROUP” în titlul lor, utilizați:
getconf -a | grep GROUP
Pentru a vedea valorile care au „INT_” în titlu, utilizați:
getconf -a | grep _INT
Aceasta arată valorile maxime și minime pe care o variabilă întreagă le poate deține pe acest computer.
LEGATE DE: Cum să căutați cu „grep” folosind șiruri într-un fișier
Utilizarea getconf cu valori ale sistemului de fișiere
Când utilizați oricare dintre opțiunile legate de caracteristicile sistemului de fișiere, trebuie să spuneți getconf
despre ce sistem de fișiere ar trebui să raporteze. Trebuie să faceți acest lucru chiar dacă aveți doar un singur hard disk și un singur sistem de fișiere instalat pe el. getconf
comanda nu va presupune nimic. Pentru a indica sistemul de fișiere getconf
ar trebui să raportați, trebuie să furnizați o cale către un director în acel sistem de fișiere.
Pentru a vedea lungimea maximă pentru un nume de fișier pentru sistemul de fișiere montat la rădăcina arborelui directorului sistemului de fișiere, tastați:
getconf NAME_MAX /
Pentru a vedea rezultatul pentru un alt sistem de fișiere, indicați spre un director situat în celălalt sistem de fișiere. Chiar dacă nu aveți diferite sisteme de fișiere montate permanent în arborele de directoare, vă puteți găsi cu un alt sistem de fișiere atașat temporar la arborele de directoare.
Exact acest lucru se întâmplă când introduceți un stick de memorie USB, ca în acest exemplu. Memory stick-ul se numește „PINK” și este montat la „/ media / dave /.”
getconf NAME_MAX /media/dave/PINK/
Putem verifica ce sistem de fișiere este pe stick-ul de memorie USB folosind df
comanda pentru a vedea la ce dispozitiv bloc este conectat. Apoi folosim lsblk
comanda cu -f
(sistem de fișiere) opțiune.
df /media/dave/PINK
lsblk -f /dev/sdb1
Memory Stick-ul este un dispozitiv bloc /dev/sdb1
iar sistemul de fișiere este FAT32
. Acesta este motivul pentru care obținem rezultate diferite pentru două directoare din același arbore de directoare. Sunt în același arbore de directoare, dar au sisteme de fișiere subiacente diferite.
LEGATE DE: Ce sistem de fișiere ar trebui să folosesc pentru unitatea mea USB?
Utilizarea getconf în Scripturi
Putem încorpora cu ușurință ieșirea din getconf
în deciziile din scripturile noastre shell.
De exemplu, pentru a efectua diferite acțiuni în funcție de faptul dacă scriptul rulează pe un sistem de operare pe 32 sau 64 de biți, puteți utiliza o secțiune de script ca aceasta.
#!/bin/bash # are we on a 32 or 64 bit OS? if [ $(getconf LONG_BIT) = "64" ] then # 64 bit echo "64-bit machine." else # 32 bit echo "32-Bit machine." fi
if
declarația compară rezultatul getconf LONG_BIT
comandă cu valoarea „64”. Dacă se potrivesc, then
clauza este executată în caz contrar else
clauza este executată. Puteți efectua acțiuni specifice versiunii în then/else
clauze sau setați steaguri variabile care pot fi verificate în altă parte a scriptului.
Copiați textul scriptului într-un editor și salvați fișierul ca „hw-test.sh”. Vom face scriptul executabil cu chmod
comandă și -x
(executabil) opțiune.
chmod +x hw-test.sh
Când rulăm scriptul, ne spune care dintre clauze au fost declanșate. Folosind această tehnică, puteți utiliza oricare dintre getconf
valori pentru a vă direcționa scriptul să ia măsurile corespunzătoare.
./hw-test.sh
Opțiune Overkill
Numărul mare de valori care getconf
poate raporta poate fi copleșitor. man
pagina este surprinzător de scurtă. Dacă vă așteptați să enumere opțiunile și să le explice pe fiecare, veți fi dezamăgiți.
Veți găsi câteva descrieri în man
pagini pentru sysconf
și confstr
. S-ar putea să fie nevoie să tăiați câteva caractere de pe partea din față a confstr
intrări. De exemplu, acest lucru nu a funcționat:
getconf _CS_GNU_LIBC_VERSION
dar acest lucru a făcut:
getconf GNU_LIBC_VERSION
Veți găsi, de asemenea, câteva descrieri în fișierul „limits.h”. Dacă nu știți unde se află acel fișier în sistemul dvs., utilizați:
unde este limită.h
You can then use less
pentru a revizui acel fișier.