Hur man gör dina Bash-skript hårdvara medvetna

0
179

Att skriva skript för att köras på olika Linux-datorer är svårt. Du kan inte anta att de kommer att ha samma egenskaper. Kommandot getconf låter dig kontrollera hundratals värden för operativsystem och filsystem.

Skript för hårdvaruproblem

Om du någonsin har skrivit en skript som måste köras på en mängd olika Linux-maskiner, kanske du har hittat dig själv inför & # 8220; konstigt, det går bra på min maskin & # 8230; & # 8221; dilemma. Små skillnader mellan datorarkitektur, operativsystem och filsystem på målmaskinerna kan förhindra att dina skript fungerar korrekt.

Om dina skript är enkla och ingenting gör eller försöker starta gångjärn på kompatibel hårdvara eller vissa funktioner i filsystemet kanske du aldrig har något problem. Men ju mer komplicerat ditt skript blir, desto mer kritisk är detaljerna i maskinen som skriptet kör. Det är också värt att notera att en enda dator kan ha flera filsystem installerade på sig, monterade på olika delar av katalogträdet. Eftersom något fungerar i en katalog betyder det inte att det fungerar på samma sätt i en annan katalog.

Kommandot getconf kan rapportera bokstavligen hundratals olika operativsystems- och filsystemegenskaper. Några av dessa har formen av par av värden, där den ena håller systemets maximala och den andra håller det lägsta. Det betyder att du kan testa värden för maskinvara eller filsystem för att säkerställa att ditt skript reagerar i enlighet med detta.

Naturligtvis kan ditt skript inte använda getconf på måldatorn om det inte är installerat på den datorn. Alla distributioner som testades när man undersökte den här artikeln hade getconf redan installerat, inklusive Ubuntu, Fedora och Manjaro. Intressant att de alla hade samma version av getconf också, version 2.33.

Första stegen Med kommandot getconf

Du kan kontrollera att du har getconf installerat på din dator och ta reda på vilken version det är med alternativet –version.

getconf –version

Annons

För att se hur många objekt getconf kan rapportera om, använd -a (allt) -alternativ och rör det genom kommandot wc. Detta räknar rader, ord och tecken i utdata.

getconf -a | wc

Det finns 320 rader i utgången. För att se hela listan på ett hanterbart sätt rör vi ut produktionen till mindre.

getconf -a | mindre

Du kan bläddra framåt och bakåt till listan för att se vad getconf kan rapportera om.

Några av objekten är dubbletter. Många av dem kan kallas med ett kortare namn eller med ett längre POSIX-kompatibelt namn.

Rapportering om enstaka värden

För att få getconf att rapportera om ett enda värde, skicka värdet till getconf på kommandoraden. Observera att alla alternativnamn är versaler.

getconf LONG_BIT

Annons < br>

Alternativet LONG_BIT rapporterar om din kärna och därmed ditt operativsystem är 32-bitars eller 64-bitars. Det finns inga andra parametrar som krävs för detta kommando, bara LONG_BIT-alternativet i sig. Ett annat enkelt värde att rapportera om är LOGIN_NAME_MAX.

getconf LOGIN_NAME_MAX

Det är konstigt hög maximal längd för ett användarnamn, men det är sant. Om du verkligen ville skapa ett användarkonto med ett förödande långt användarnamn, skulle du kunna. Däremot har den här datorns värdnamn en maximal längd på 64 tecken:

getconf HOST_NAME_MAX

För att se hur många samtidiga processer ett användarkonto kan köras använder du alternativet CHILD_MAX:

getconf CHILD_MAX

OPEN_MAX-värdet returnerar det maximala antalet filer en process kan ha öppna.

getconf OPEN_MAX

För att se en delmängd av getconfvalues ​​kan vi använda alternativet -a (all) för att generera alla värden och använda grep för att filtrera bort de vi är intresserade av. Till exempel, för att se alla värden som har & # 8220; NAMN & # 8221; i titeln, använd:

getconf -a | grep NAME

På samma sätt kan du se alla värden med & # 8220; GROUP & # 8221; i deras titel, använd:

getconf -a | grep GROUP

Annons

För att se värdena som har & # 8220; INT _ & # 8221; i deras titel, använd:

getconf -a | grep _INT

Detta visar max- och minimivärden som en heltalsvariabel kan innehålla på den här datorn.

RELATERAD: Hur man söker med “grep” med hjälp av strängar i en fil

Använda getconf med filsystemvärden

När du använder något av alternativen som relaterar till filsystemets egenskaper måste du berätta för getconf vilket filsystem det ska rapportera om. Du måste göra detta även om du bara har en enda hårddisk och ett enda filsystem installerat på den. Kommandot getconf kommer inte att anta någonting. För att ange vilket filsystem getconf ska rapportera om måste du ange en sökväg till en katalog i det filsystemet.

För att se den maximala längden för ett filnamn för filsystemet som är monterat vid filens rot systemkatalogträd, typ:

getconf NAME_MAX/

För att se resultatet för ett annat filsystem, peka på en katalog i den andra filsystem. Även om du inte har olika filsystem permanent monterade i ditt katalogträd kan du hitta dig själv med ett annat filsystem som tillfälligt är kopplat till ditt katalogträd.

Det är precis vad som händer när du sätter in ett USB-minne, som det här exemplet. Memory stick kallas & # 8220; PINK & # 8221; och den är monterad på & # 8220;/media/dave /.&# 8221;

getconf NAME_MAX/media/dave/PINK/

Annons

Vi kan kontrollera vilket filsystem som finns på USB-minnet genom att använda kommandot df för att se vilken blockenhet den är ansluten till. Vi använder sedan kommandot lsblk med alternativet -f (filsystem).

df/media/dave/PINK lsblk -f/dev/sdb1

Memory stick är block device/dev/sdb1 och filsystemet är FAT32. Det är därför vi får olika resultat för två kataloger i samma katalogträd. De finns i samma katalogträd, men de har olika underliggande filsystem.

RELATERAD: Vilket filsystem ska jag använda för min USB-enhet?

Använda getconf i skript

Vi kan enkelt integrera utdata från getconf i beslut i våra skalskript.

Till exempel, för att utföra olika åtgärder beroende på om skriptet körs på ett 32-bitars eller 64-bitars operativsystem, kan du använda ett sådant skriptavsnitt.

#!/Bin/bash # är vi på ett 32 eller 64-bitars operativsystem? om [$ (getconf LONG_BIT) = “64”] då # 64 bitars eko “64-bitars maskin.” annat # 32-bitars eko “32-bitars maskin.” fi

If-uttalandet jämför utdata från kommandot getconf LONG_BIT med värdet & # 8220; 64. & # 8221; Om de matchar exekveras då-klausulen annars körs den andra klausulen. Du kan antingen utföra versionsspecifika åtgärder i då/elseklausulerna eller ställa in variabelflaggor som kan kontrolleras någon annanstans i ditt skript.

Kopiera skripttexten till en redigerare och spara din fil som & # 8220; hw -test.sh. & # 8221; Vi kommer att göra skriptet körbart med chmod-kommandot och alternativet -x (körbar).

chmod + x hw-test.sh

Annons

När vi kör skriptet berättar det vilken av klausulerna som utlöstes. Med den här tekniken kan du använda valfritt getconf-värde för att styra ditt skript för att vidta lämpliga åtgärder.

./hw-test.sh

Option Overkill

Det stora antalet värden som getconf kan rapportera om kan vara överväldigande. Man-sidan är förvånansvärt kort. Om du förväntar dig att det listar alternativen och förklarar var och en kommer du att bli besviken.

Du hittar några beskrivningar på man-sidorna för sysconf och confstr. Du kan behöva klippa några tecken från framsidan av confstr-posterna. Till exempel fungerade det inte:

getconf _CS_GNU_LIBC_VERSION

men det här:

getconf GNU_LIBC_VERSION

Du hittar också några beskrivningar i gränserna & # 8220; h & # 8221; fil. Om du inte vet var den filen finns i ditt system, använd:

där detta är begränsat. H

Du kan sedan använda mindre för att granska filen.