Come rendere compatibili i tuoi script Bash con l'hardware

Contenuti

Bash Shell

Scrivere script da eseguire su diversi computer Linux è difficile. Non si può presumere che avranno le stesse caratteristiche. il getconf Il comando consente di controllare centinaia di impostazioni del sistema operativo e del file system.

Scripting con accreditamento hardware

Se in qualsiasi momento hai scritto uno script che dovrebbe essere eseguito su una gamma di macchine Linux, es factible que se haya enfrentado al dilema de “Strano, funziona bene sulla mia macchina …”. Piccole differenze tra l'architettura del computer, i sistemi operativi e i file system sui computer di destinazione possono impedire il corretto funzionamento degli script.

Se i tuoi script sono semplici e non fanno nulla, o prova ad iniziare, dipende dall'hardware supportato o da determinate capacità del file system, è possibile che non abbia mai un ostacolo. Ma più il tuo script diventa complesso, più critici sono i dettagli della macchina che esegue lo script. È anche importante notare che un singolo computer può avere diversi file system installati, montato in diverse parti dell'albero delle directory. Solo perché qualcosa funziona in una directory non significa che funzionerà allo stesso modo in un'altra directory.

il getconf Il comando può segnalare letteralmente centinaia di diversi sistemi operativi e funzionalità del filesystem. Alcuni di questi assumono la forma di coppie di valori, uno con il massimo del sistema e l'altro con il minimo. Ciò significa che puoi testare il tuo file system o le impostazioni hardware per assicurarti che il tuo script reagisca di conseguenza..

In ogni caso, il tuo script non può essere utilizzato getconf sul computer di destinazione se non è installato su quel computer. Tutte le distribuzioni che sono state testate durante la ricerca di questo post avevano getconf già installato, incluso Ubuntu, Fedora e Manjaro. curiosamente, avevano tutti la stessa versione di getconf Cosa c'è di più, la versione 2.33.

Iniziare con il comando getconf

Puoi controllare quello che hai getconf installato sul tuo computer e scopri di che versione si tratta, usando il --version opzione.

getconf --version

Per vedere quanti post getconf può informare, Utilizzare il -a (tutti) e incanalarlo attraverso il wc comando. Questo conterà le linee, parole e caratteri nell'output.

getconf -a | WC

Ci sono 320 file all'uscita. Per visualizzare l'elenco completo in modo gestibile, canalizzeremo l'output su less .

getconf -a | meno

Puoi scorrere avanti e indietro nell'elenco per vedere cosa getconf può informare.

Getconv -a output nel visualizzatore di file meno

Alcuni degli articoli sono duplicati. Molti di loro possono essere chiamati con un nome più breve o con un nome più lungo conforme a POSIX.

Segnala valori univoci

Causa getconf riferire su un unico valore, passa il nome del valore a getconf sulla riga di comando. Nota che tutti i nomi alternativi sono in maiuscolo.

getconf LONG_BIT

il LONG_BIT L'opzione informa se il kernel, e così, il tuo sistema operativo, è 32 pezzi di 64 bit. Non sono richiesti altri parametri per questo comando, solo l'opzione LONG_BIT stessa. Un altro semplice valore da segnalare è LOGIN_NAME_MAX .

getconf LOGIN_NAME_MAX

È una lunghezza massima stranamente alta per un nome utente, ma è vero. Se volevi davvero creare un account utente con un nome utente ridicolmente lungo, potrebbe farlo. al contrario, Il nome host di questo computer ha una lunghezza massima di 64 caratteri:

getconf HOST_NAME_MAX

Per vedere quanti processi simultanei può eseguire un account utente, Utilizzare il CHILD_MAX opzione:

getconf CHILD_MAX

il OPEN_MAX value restituisce il numero massimo di file che una procedura può avere aperti.

getconf OPEN_MAX

Per visualizzare un sottoinsieme di getconfvalori possiamo usare il -a (Tutto quanto) opzione per generare tutti i valori e utilizzare grep per filtrare quelli che ci interessano. Come esempio, para ver todos los valores que disponen “NOME” nel tuo titolo, utilizzo:

getconf -a | grep NOME

Nello stesso modo, para ver todos los valores conGRUPO” nel tuo titolo, utilizzo:

getconf -a | GRUPPO grip

Para ver los valores que disponenINT_” nel tuo titolo, utilizzo:

getconf -a | grep _INT

Questo mostra i valori massimo e minimo che una variabile intera può contenere su questo computer.

IMPARENTATO: Come cercare con “grep” usando le stringhe in un file

Usa getconf con i valori del file system

Quando si utilizza una delle alternative associate alle funzionalità del file system, deve indicare getconf su quale file system segnalare. Devi farlo anche se hai solo un singolo disco rigido e un singolo filesystem installato. il getconf Il comando non assumerà nulla. Per indicare il file system getconf deve informare, devi fornire un percorso a una directory su quel filesystem.

Per visualizzare la lunghezza massima di un nome file per il file system montato alla radice dell'albero delle directory del file system, scriba:

getconf NAME_MAX /

Per visualizzare l'output per un file system diverso, puntare a una directory situata nell'altro file system. Anche se non hai diversi file system montati in modo permanente nella tua struttura di directory, potresti ritrovarti con un altro filesystem temporaneamente allegato al tuo albero di directory.

Questo è esattamente ciò che accade quando inserisci una chiavetta USB, come in questo esempio. La tarjeta de memoria se llamaPINKy está montada en “/ media / dave /”.

getconf NOME_MAX /media/dave/ROSA/

Possiamo controllare quale file system è sulla chiavetta USB usando il df comando per vedere a quale dispositivo a blocchi è connesso. Successivamente usiamo il lsblk comando con il -f (File System) opzione.

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

La scheda di memoria è un dispositivo di blocco. /dev/sdb1 e il file system è FAT32. Ecco perché otterremo risultati diversi per due directory nello stesso albero di directory.. Sono nello stesso albero di directory, ma hanno file system sottostanti diversi.

IMPARENTATO: Quale file system dovrei usare per la mia unità USB?

Utilizzo di getconf negli script

Possiamo facilmente incorporare l'output di getconf nelle decisioni all'interno dei nostri script di shell.

Come esempio, per eseguire azioni diverse a seconda che lo script sia in esecuzione su un sistema operativo di 32 pezzi di 64 bit, puede usar una sección de secuencia de comandos como esta.

#!/cestino/bash

# are we on a 32 o 64 bit OS?
Se [ $(getconf LONG_BIT) = "64" ]
poi
  # 64 bit
  echo "64-bit machine."
altro
  # 32 bit
  echo "32-Bit machine."
essere

il if declaración compara la salida de la getconf LONG_BIT comando con el valor de “64”. Si coinciden, il then la cláusula se ejecuta caso contrario el else se ejecuta la cláusula. Puede realizar acciones específicas de la versión en el then/elsecláusulas o establezca indicadores de variables que se pueden verificar en otra parte de su secuencia de comandos.

Copie el texto del script en un editor y guarde su archivo como “hw-test.sh”. Renderemo eseguibile lo script con il chmod comando e il -x (eseguibile) opzione.

chmod +x hw-test.sh

Quando eseguiamo lo script, ci dice quale delle clausole è stata attivata. Usando questa tecnica, puoi usare uno qualsiasi dei getconf valori per indirizzare il tuo script a intraprendere l'azione appropriata.

./hw-test.sh

Eccesso di alternative

Il gran numero di valori che getconf può essere travolgente. il man La pagina è sorprendentemente corta. Se ti aspetti che elenchi le alternative e le spieghi ciascuna, rimarrai deluso.

Troverai alcune descrizioni nel man pagine per sysconf e confstr. Potrebbe essere necessario ritagliare alcuni caratteri dalla parte anteriore del confstr Biglietti. Come esempio, questo non funziona:

getconf _CS_GNU_LIBC_VERSION

ma questo lo ha fatto:

getconf GNU_LIBC_VERSION

Además encontrará algunas descripciones en el archivolimits.h”. Se non sai dove si trova quel file sul tuo sistema, utilizzo:

dove è limts.h 

Prossimo, Puoi usare less per controllare quel file.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.