Comment rendre vos scripts Bash conscients du matériel

0
185

Écrire des scripts à exécuter sur différents ordinateurs Linux est difficile. Vous ne pouvez pas supposer qu'ils auront les mêmes caractéristiques. La commande getconf vous permet de vérifier des centaines de valeurs de système d'exploitation et de système de fichiers.

Scripts compatibles avec le matériel

Si vous avez déjà écrit un script qui doit s'exécuter sur une variété de machines Linux, vous vous êtes peut-être retrouvé face à l'”étrange, il fonctionne très bien sur ma machine”…” dilemme. De petites différences entre l'architecture informatique, les systèmes d'exploitation et les systèmes de fichiers sur les machines cibles peuvent empêcher vos scripts de fonctionner correctement.

Si vos scripts sont simples et qu'ils ne font rien ou qu'ils essaient de lancer des charnières sur du matériel compatible ou certaines fonctionnalités du système de fichiers, vous n'aurez peut-être jamais de problème. Mais plus votre script devient compliqué, plus les détails de la machine qu'il exécute sont critiques. Il est également intéressant de noter qu'un même ordinateur peut avoir plusieurs systèmes de fichiers installés dessus, montés sur différentes parties de l'arborescence de répertoires. Parce que quelque chose fonctionne dans un répertoire ne veut pas dire qu'il fonctionnera de la même manière dans un autre répertoire.

La commande getconf peut rapporter des centaines de caractéristiques de système d'exploitation et de système de fichiers différents. Certaines d'entre elles prennent la forme de paires de valeurs, l'une contenant le maximum du système et l'autre le minimum. Cela signifie que vous pouvez tester les valeurs du matériel ou du système de fichiers pour vous assurer que votre script réagira en conséquence.

Bien sûr, votre script ne peut pas utiliser getconf sur l'ordinateur cible s'il n'est pas installé sur cet ordinateur. Toutes les distributions qui ont été testées lors de la recherche de cet article avaient déjà installé getconf, y compris Ubuntu, Fedora et Manjaro. Fait intéressant, ils avaient tous la même version de getconf, la version 2.33.

Premiers pas avec la commande getconf

Vous pouvez vérifier que getconf est installé sur votre ordinateur et savoir de quelle version il s'agit, en utilisant l'option –version.

getconf –version

Advertisement

Pour voir combien d'éléments getconf peut signaler, utilisez l'option -a (all) et redirigez-la via la commande wc. Cela comptera les lignes, les mots et les caractères de la sortie.

getconf -a | wc

Il y a 320 lignes en sortie. Pour voir la liste entière d'une manière gérable, nous allons rediriger la sortie dans less .

getconf -a | moins

Vous pouvez faire défiler la liste en avant et en arrière pour voir sur quoi getconf peut rapporter.

Certains éléments sont des doublons. Beaucoup d'entre eux peuvent être appelés par un nom plus court ou par un nom plus long compatible POSIX.

Rapport sur des valeurs uniques

Pour que getconf fasse un rapport sur une seule valeur, transmettez le nom de la valeur à getconf sur la ligne de commande. Notez que tous les noms d'options sont en majuscules.

getconf LONG_BIT

Publicité

L'option LONG_BIT indique si votre noyau—et donc votre système d'exploitation—est 32 bits ou 64 bits. Il n'y a pas d'autres paramètres requis pour cette commande, juste l'option LONG_BIT elle-même. Une autre valeur simple à signaler est LOGIN_NAME_MAX .

getconf LOGIN_NAME_MAX

C'est étrangement élevé longueur maximale pour un nom d'utilisateur, mais c'est vrai. Si vous vouliez vraiment créer un compte utilisateur avec un nom d'utilisateur ridiculement long, vous le pouviez. En revanche, le nom d'hôte de cet ordinateur a une longueur maximale de 64 caractères :

getconf HOST_NAME_MAX

Pour voir combien de processus simultanés un compte utilisateur peut exécuter, utilisez l'option CHILD_MAX :

getconf CHILD_MAX

La valeur OPEN_MAX renvoie le nombre maximal de fichiers qu'un processus peut ouvrir.

getconf OPEN_MAX

Pour voir un sous-ensemble des getconfvalues, nous pouvons utiliser l'option -a (all) pour générer toutes les valeurs, et utiliser grep pour filtrer celles qui nous intéressent. Par exemple, pour voir chaque valeur qui a & #8220;NOM” dans son titre, utilisez :

getconf -a | grep NAME

De même, pour voir toutes les valeurs avec “GROUP” dans leur titre, utilisez :

getconf -a | GROUPE grep

Publicité

Pour voir les valeurs qui ont “INT_” dans leur titre, utilisez :

getconf -a | grep _INT

Ceci affiche les valeurs maximales et minimales qu'une variable entière peut contenir sur cet ordinateur.

CONNEXES : Comment effectuer une recherche avec “grep” à l'aide de chaînes dans un fichier

Utilisation de getconf avec les valeurs du système de fichiers

Lorsque vous utilisez l'une des options liées aux caractéristiques du système de fichiers, vous devez indiquer à getconf sur quel système de fichiers il doit faire rapport. Vous devez le faire même si vous n'avez qu'un seul disque dur et qu'un seul système de fichiers installé dessus. La commande getconf ne suppose rien. Pour indiquer le système de fichiers sur lequel getconf doit faire rapport, vous devez fournir un chemin vers un répertoire dans ce système de fichiers.

Pour voir la longueur maximale d'un nom de fichier pour le système de fichiers monté à la racine du fichier arborescence des répertoires système, tapez :

getconf NAME_MAX/

Pour voir le résultat pour un système de fichiers différent, pointez sur un répertoire situé dans l'autre système de fichiers. Même si vous n'avez pas de systèmes de fichiers différents montés en permanence dans votre arborescence de répertoires, vous pouvez vous retrouver avec un autre système de fichiers temporairement attaché à votre arborescence de répertoires.

C'est exactement ce qui se passe lorsque vous insérez une clé USB, comme dans cet exemple. La clé USB s'appelle “ROSE” et il est monté sur “/media/dave/.”

getconf NAME_MAX /media/dave/PINK/

Publicité

Nous pouvons vérifier quel système de fichiers se trouve sur la clé USB en utilisant la commande df pour voir à quel périphérique de bloc elle est connectée. Nous utilisons ensuite la commande lsblk avec l'option -f (système de fichiers).

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

La clé USB est un périphérique de bloc /dev/sdb1 et le système de fichiers est FAT32. C'est pourquoi nous obtenons des résultats différents pour deux répertoires dans la même arborescence de répertoires. Ils se trouvent dans la même arborescence de répertoires, mais ils ont des systèmes de fichiers sous-jacents différents.

CONNEXES : Quel système de fichiers dois-je utiliser pour ma clé USB ?< /strong>

Utiliser getconf dans les scripts

Nous pouvons facilement incorporer la sortie de getconf dans les décisions à l'intérieur de nos scripts shell.

Par exemple, pour effectuer différentes actions selon que le script s'exécute sur un système d'exploitation 32 bits ou 64 bits, vous pouvez utilisez une section de script comme celle-ci.

#!/bin/bash # sommes-nous sur un système d'exploitation 32 ou 64 bits ? if [ $(getconf LONG_BIT) = “64” ] then # 64 bits echo “machine 64 bits.” else # 32 bits echo “Machine 32 bits.” fi

L'instruction if compare la sortie de la commande getconf LONG_BIT avec la valeur de “64.” S'ils correspondent, la clause then est exécutée, sinon la clause else est exécutée. Vous pouvez soit effectuer des actions spécifiques à la version dans les clauses then/else, soit définir des indicateurs de variable qui peuvent être vérifiés ailleurs dans votre script.

Copiez le texte du script dans un éditeur et enregistrez votre fichier sous “hw -test.sh.” Nous allons rendre le script exécutable avec la commande chmod et l'option -x (exécutable).

chmod +x hw-test.sh

Publicité

Lorsque nous exécutons le script, il nous indique quelles clauses ont été déclenchées. En utilisant cette technique, vous pouvez utiliser l'une des valeurs getconf pour demander à votre script d'effectuer l'action appropriée.

./hw-test.sh

Option Overkill

Le nombre de valeurs que getconf peut signaler peut être écrasant. La page de manuel est étonnamment brève. Si vous vous attendez à ce qu'il répertorie les options et explique chacune d'entre elles, vous allez être déçu.

Vous trouverez des descriptions dans les pages de manuel de sysconf et confstr. Vous devrez peut-être supprimer quelques caractères au début des entrées confstr. Par exemple, cela n'a pas fonctionné :

getconf _CS_GNU_LIBC_VERSION

mais cela n'a pas fonctionné :

getconf GNU_LIBC_VERSION

Vous trouverez également des descriptions dans les “limites. h” déposer. Si vous ne savez pas où se trouve ce fichier sur votre système, utilisez :

whereis limts.h

Vous pouvez alors utiliser moins pour examiner ce fichier.