Eines der bestgehüteten Geheimnisse der AIX-Befehlszeile ist der Befehl „apply“.
Noch nie davon gehört? Willkommen im Club. Zwei Kollegen und ich hatten zusammen über 60 Jahre Erfahrung mit AIX und wir waren noch nie auf „apply“ gestoßen.
Also, was macht es und warum sollten Sie es lernen? Sehr einfach, „apply“ führt einen Befehl für eine Reihe von Parametern aus. Dies ist beispielsweise nützlich, wenn Sie einen Abstimmparameter für einen ganzen Satz von Festplatten oder anderen Geräten ändern möchten. Oder Sie müssen einige Informationen aus einer Reihe von Dateien auflisten. Dein Freund ist „bewerben“.
Wenn Sie bereits mit einigen grundlegenden Skripten vertraut sind, werden Sie wahrscheinlich einige Ähnlichkeiten mit dem Ausführen einer „for“ -Schleife feststellen.
Hier habe ich eine grundlegende Verwendung des Befehls apply . Wenden wir den Befehl „echo“ auf eine Liste von Wörtern an.
apply "echo" all cows eat grassallcowseatgrass
Nicht besonders aufregend, nehme ich an, aber die Syntax ist viel einfacher als die Verwendung einer „for“ -Schleife. So würde es aussehen:
for i in all cows eat grassdoecho $idone
Mit „apply“ müssen Sie nur „apply“ und den Befehl (in diesem Beispiel „echo“) angeben.
Wie wäre es, die Worte über die kulinarischen Gewohnheiten von Rindern durch etwas Technischeres zu ersetzen? Ich werde die Attribute für eine Reihe von physischen Volumes auflisten.
Der Befehl zum Auflisten der Attribute wäre:
lsattr –El hdiskN
Um den Befehl „apply“ zu verwenden, wäre es also:
apply "lsattr –El" hdisk0
Die Chancen stehen gut, dass Sie dies für eine Reihe von Festplatten tun möchten; vielleicht sogar alle Festplatten auf Ihrem AIX-System. Um die Festplatten aufzulisten, können Sie diesen Befehl verwenden:
lsdev –c disk –F name
Das würde eine Liste von Festplatten erzeugen, wie zum Beispiel:
hdisk0hdisk1hdisk2
und so weiter.
Anstatt diese Datenträger einzeln aufzulisten, können Sie im Befehl apply den Befehl zum Auflisten angeben. Es muss entweder in Backticks sein:
`lsdev –c disk –F name`
oder verwenden Sie die Syntax $( command ):
$(lsdev –c disk –F name)
Jetzt ist es Zeit, alles zusammenzusetzen. Da der Befehl lsattr, den wir auf die Liste der Festplatten anwenden, Leerzeichen enthält, müssen Sie ihn in Anführungszeichen setzen:
apply "lsattr –El" $(lsdev –c disk –F name)
Dies kann sehr praktisch sein, wenn Sie auch Änderungen vornehmen möchten.
Hier ist der Befehl zum Ändern der Warteschlangentiefe für eine Festplatte:
chdev –l hdisk0 –a queue_depth=16 –P
Um dies für alle Datenträger zu tun, würden Sie den Datenträgernamen (hdisk0) durch% 1 ersetzen. Dies soll den ersten Parameter angeben, der in jeder der Listen des Befehls apply generiert wird.
Los geht’s:
apply "chdev –l %1 –a queue_depth=16 –P" $(lsdev –c disk –F name)
So führen Sie einen Tail-Befehl aus, um die letzten 20 Zeilen mehrerer Protokolldateien anzuzeigen:
apply "tail -20 %1" $(ls *.log)
Sie könnten denken, Sie könnten dies einfach ausführen:
tail -20 *.log
der Befehl tail kann jedoch jeweils nur eine Datei verarbeiten.
Hier ist ein weiteres Beispiel. Angenommen, Sie möchten eine Sicherungskopie einer Reihe von Dateien erstellen, bevor Sie sie ändern. Es gibt viele Möglichkeiten, dies zu tun, aber der Befehl apply würde sehr gut funktionieren:
apply "cp %1 %1.bak" $(ls *.cfg)
Sobald Sie sich an die etwas ungewöhnliche Syntax des Befehls apply gewöhnt haben, werden Sie es wahrscheinlich lieben. Ich benutze es die ganze Zeit, besonders wenn ich einen Befehl in einer einzigen Zeile ausführen muss.
Anthony English arbeitet seit 1991 an IBM-Systemen und hat gesehen, wie AIX und Virtualisierung alle Arten von Geschäftsumgebungen verwalten können. Er ist ein anerkannter Autor im IT-Bereich und schreibt über die Verbesserung von Geschäftssystemen in seinem Blog unter http://anthonyenglish.com.au. Anthony lebt mit seiner Frau und seinen sieben Kindern in Sydney, Australien.