So machen Sie Ihre Bash-Skripte hardwarebewusst

0
158

Das Schreiben von Skripten für die Ausführung auf verschiedenen Linux-Computern ist schwierig. Sie können nicht davon ausgehen, dass sie dieselben Eigenschaften haben. Mit dem Befehl getconf können Sie Hunderte von Betriebssystem- und Dateisystemwerten überprüfen.

Hardware Aware Scripts

Wenn Sie jemals ein Skript, das auf einer Vielzahl von Linux-Rechnern laufen muss, stehen Sie vielleicht vor dem “Seltsamen, auf meinem Rechner läuft es einwandfrei…” Dilemma. Kleine Unterschiede zwischen Computerarchitektur, Betriebssystemen und Dateisystemen auf den Zielcomputern können dazu führen, dass Ihre Skripte nicht richtig funktionieren.

Wenn Ihre Skripts einfach sind und nichts tun, oder versuchen, Scharniere auf kompatibler Hardware oder bestimmten Fähigkeiten des Dateisystems zu starten, haben Sie möglicherweise nie ein Problem. Aber je komplizierter Ihr Skript wird, desto kritischer sind die Details der Maschine, auf der das Skript ausgeführt wird. Es ist auch erwähnenswert, dass auf einem einzelnen Computer mehrere Dateisysteme installiert sein können, die in verschiedenen Teilen des Verzeichnisbaums eingehängt sind. Da etwas in einem Verzeichnis funktioniert, heißt das nicht, dass es in einem anderen Verzeichnis genauso funktioniert.

Der Befehl getconf kann buchstäblich Hunderte von verschiedenen Betriebssystem- und Dateisystemmerkmalen ausgeben. Einige davon haben die Form von Wertpaaren, wobei einer das Systemmaximum und der andere das Minimum enthält. Das bedeutet, dass Sie Hardware- oder Dateisystemwerte testen können, um sicherzustellen, dass Ihr Skript entsprechend reagiert.

Natürlich kann Ihr Skript getconf nicht auf dem Zielcomputer verwenden, wenn es nicht auf diesem Computer installiert ist. Alle Distributionen, die bei der Recherche zu diesem Artikel getestet wurden, hatten getconf bereits installiert, einschließlich Ubuntu, Fedora und Manjaro. Interessanterweise hatten sie auch alle dieselbe Version von getconf, Version 2.33.

Erste Schritte mit dem getconf-Befehl

Sie kann mit der Option –version überprüfen, ob getconf auf Ihrem Computer installiert ist und um herauszufinden, um welche Version es sich handelt.

getconf –version

Werbung

Um zu sehen, über wie viele Elemente getconf berichten kann, verwenden Sie -a (all) und leiten Sie sie durch den Befehl wc. Dadurch werden die Zeilen, Wörter und Zeichen in der Ausgabe gezählt.

getconf -a | wc

Die Ausgabe enthält 320 Zeilen. Um die gesamte Liste übersichtlich anzuzeigen, leiten wir die Ausgabe in less um.

getconf -a | weniger

Sie können vorwärts und rückwärts durch die Liste scrollen, um zu sehen, was getconf berichten können.

Einige der Elemente sind Duplikate. Viele von ihnen können mit einem kürzeren Namen oder einem längeren POSIX-konformen Namen aufgerufen werden.

Berichte über einzelne Werte

Um getconf zu veranlassen, einen einzelnen Wert zu melden, übergeben Sie den Namen des Werts in der Befehlszeile an getconf. Beachten Sie, dass alle Optionsnamen in Großbuchstaben geschrieben sind.

getconf LONG_BIT

Werbung< br>

Die Option LONG_BIT gibt an, ob Ihr Kernel und somit Ihr Betriebssystem 32-Bit oder 64-Bit ist. Für diesen Befehl sind keine weiteren Parameter erforderlich, nur die Option LONG_BIT selbst. Ein weiterer einfacher Wert für den Bericht ist LOGIN_NAME_MAX .

getconf LOGIN_NAME_MAX

Das ist eine seltsam hohe maximale Länge für einen Benutzernamen, aber es stimmt. Wenn Sie wirklich ein Benutzerkonto mit einem lächerlich langen Benutzernamen erstellen wollten, könnten Sie dies tun. Im Gegensatz dazu hat der Hostname dieses Computers eine maximale Länge von 64 Zeichen:

getconf HOST_NAME_MAX

Um zu sehen, wie viele gleichzeitige Prozesse ein Benutzerkonto ausführen kann, verwenden Sie die Option CHILD_MAX:

getconf CHILD_MAX

Der Wert OPEN_MAX gibt die maximale Anzahl von Dateien zurück, die ein Prozess geöffnet haben kann.

getconf OPEN_MAX

Um eine Teilmenge der getconfvalues ​​anzuzeigen, können wir die Option -a (all) verwenden, um alle Werte zu generieren, und grep verwenden, um diejenigen herauszufiltern, die uns interessieren. Zum Beispiel, um jeden Wert mit & #8220;NAME” Verwenden Sie im Titel:

getconf -a | grep NAME

Auch um alle Werte mit “GROUP&# zu sehen 8221; Verwenden Sie im Titel:

getconf -a | grep GROUP

Werbung

Um die Werte anzuzeigen, die “INT_” Verwenden Sie im Titel:

getconf -a | grep _INT

Dies zeigt die maximalen und minimalen Werte an, die eine Integer-Variable aufnehmen kann auf diesem Computer.

VERWANDTE: So suchen Sie mit “grep” mithilfe von Zeichenfolgen in einer Datei

Getconf mit Dateisystemwerten verwenden

Wenn Sie eine der Optionen verwenden, die sich auf Dateisystemeigenschaften beziehen, müssen Sie getconf mitteilen, über welches Dateisystem es berichten soll. Sie müssen dies auch dann tun, wenn Sie nur eine einzelne Festplatte und ein einzelnes Dateisystem darauf installiert haben. Der Befehl getconf nimmt nichts an. Um anzugeben, über welches Dateisystem getconf berichten soll, müssen Sie einen Pfad zu einem Verzeichnis in diesem Dateisystem angeben.

Um die maximale Länge eines Dateinamens für das Dateisystem anzuzeigen, das im Stammverzeichnis der Datei eingehängt ist Systemverzeichnisbaum, geben Sie ein:

getconf NAME_MAX/

Um das Ergebnis für ein anderes Dateisystem anzuzeigen, zeigen Sie auf ein Verzeichnis im anderen Dateisystem. Auch wenn Sie keine verschiedenen Dateisysteme dauerhaft in Ihrem Verzeichnisbaum eingehängt haben, können Sie sich mit einem anderen Dateisystem wiederfinden, das vorübergehend an Ihren Verzeichnisbaum angehängt ist.

Genau das passiert, wenn Sie einen USB-Speicherstick einstecken, wie in diesem Beispiel. Der Speicherstick heißt “PINK” und es wird unter “/media/dave/eingehängt.”

getconf NAME_MAX /media/dave/PINK/

Werbung

Wir können überprüfen, welches Dateisystem sich auf dem USB-Speicherstick befindet, indem wir den df-Befehl verwenden, um zu sehen, mit welchem ​​Blockgerät es verbunden ist. Anschließend verwenden wir den Befehl lsblk mit der Option -f (Dateisystem).

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

Der Speicherstick ist das Blockgerät /dev/sdb1 und das Dateisystem ist FAT32. Aus diesem Grund erhalten wir für zwei Verzeichnisse im selben Verzeichnisbaum unterschiedliche Ergebnisse. Sie befinden sich im selben Verzeichnisbaum, haben jedoch unterschiedliche zugrunde liegende Dateisysteme.

VERWANDTE: Welches Dateisystem sollte ich für mein USB-Laufwerk verwenden?< /strong>

Getconf in Skripten verwenden

Wir können die Ausgabe von getconf leicht in Entscheidungen in unseren Shell-Skripten einbinden.

Um zum Beispiel unterschiedliche Aktionen auszuführen, je nachdem, ob das Skript auf einem 32-Bit- oder 64-Bit-Betriebssystem ausgeführt wird, können Sie einen Skriptabschnitt wie diesen verwenden.

#!/bin/bash # are we on ein 32- oder 64-Bit-Betriebssystem? if [ $(getconf LONG_BIT) = “64” ] then # 64-Bit-Echo “64-Bit-Maschine.” else # 32-Bit-Echo “32-Bit-Maschine.” fi

Die if-Anweisung vergleicht die Ausgabe des Befehls getconf LONG_BIT mit dem Wert von “64.” Wenn sie übereinstimmen, wird die Then-Klausel ausgeführt, andernfalls wird die else-Klausel ausgeführt. Sie könnten entweder versionsspezifische Aktionen in den then/elseclauses ausführen oder Variablenflags setzen, die an anderer Stelle in Ihrem Skript überprüft werden können.

Kopieren Sie den Skripttext in einen Editor und speichern Sie Ihre Datei als “hw -test.sh.” Wir machen das Skript mit dem Befehl chmod und der Option -x (ausführbare Datei) ausführbar.

chmod +x hw-test.sh

Werbung

Wenn wir das Skript ausführen, erfahren wir, welche der Klauseln ausgelöst wurden. Mit dieser Technik können Sie jeden der getconf-Werte verwenden, um Ihr Skript anzuweisen, die entsprechende Aktion auszuführen.

./hw-test.sh

Option Overkill

Die schiere Anzahl von Werten, über die getconf berichten kann, kann überwältigend sein. Die Manpage ist überraschend kurz. Wenn Sie erwarten, dass es die Optionen auflistet und jede einzelne erklärt, werden Sie enttäuscht sein.

Sie finden einige Beschreibungen in den Manpages für sysconf und confstr. Möglicherweise müssen Sie einige Zeichen am Anfang der confstr-Einträge abschneiden. Das hat zum Beispiel nicht funktioniert:

getconf _CS_GNU_LIBC_VERSION

aber das hat funktioniert:

getconf GNU_LIBC_VERSION

Sie finden auch einige Beschreibungen in den “Limits. h” Datei. Wenn Sie nicht wissen, wo sich diese Datei auf Ihrem System befindet, verwenden Sie:

whereis limts.h

Sie können dann weniger verwenden, um diese Datei zu überprüfen.