AIX tech Tips: Bye-bye loops-använd kommandot ”apply” istället

Abstrakt teknikbakgrund med sexkantiga former
en av de bäst bevarade hemligheterna i AIX-kommandoraden är kommandot ”apply”.

aldrig hört talas om det? Välkommen till klubben. Två kollegor och jag hade över 60 års samlad erfarenhet av AIX och mellan oss hade vi aldrig en gång stött på ”apply”.

så, vad gör det och varför ska du lära dig det? Mycket enkelt,” apply ” kommer att köra ett kommando för en uppsättning parametrar. Det är till exempel användbart om du vill ändra en inställningsparameter för en hel uppsättning skivor eller andra enheter. Eller kanske du behöver lista lite information från ett antal filer. Din vän är ”ansök”.

om du redan är bekant med några grundläggande skript kommer du förmodligen att se några likheter med att köra en ”för” – slinga.

här är en grundläggande användning av kommandot apply. Låt oss tillämpa kommandot ”echo” på en lista med ord.

apply "echo" all cows eat grassallcowseatgrass

inte fruktansvärt spännande, antar jag, men syntaxen är mycket lättare än att använda en ”för” – slinga. Så här skulle det se ut:

for i in all cows eat grassdoecho $idone

med ” apply ”behöver du bara ange” apply”och kommandot (”echo”, i det här exemplet).

vad sägs om att ersätta orden om nötkreaturs kulinariska vanor med något lite mer tekniskt? Jag kommer att lista attributen för en uppsättning fysiska volymer.

kommandot för att lista attributen skulle vara:

lsattr –El hdiskN

så, för att använda kommandot ”apply”, skulle det vara:

apply "lsattr –El" hdisk0

chansen är stor att du vill göra detta för ett antal diskar; kanske till och med alla diskar på ditt AIX-system. För att lista skivorna kan du använda det här kommandot:

lsdev –c disk –F name

det skulle producera en lista över diskar, till exempel:

hdisk0hdisk1hdisk2

och så vidare.

i kommandot apply, istället för att lista dessa skivor en efter en, kan du ange kommandot för att lista dem. Det måste vara antingen i backticks:

`lsdev –c disk –F name`

eller använd syntaxen $( kommando ) :

$(lsdev –c disk –F name)

nu är det dags att sätta ihop allt. Eftersom lsattr-kommandot som vi tillämpar på listan över diskar har mellanslag i det, måste du lägga det i citat:

apply "lsattr –El" $(lsdev –c disk –F name)

detta kan vara riktigt praktiskt om du vill göra ändringar, för.

här är kommandot för att ändra ködjupet för en disk:

chdev –l hdisk0 –a queue_depth=16 –P

för att göra det för alla diskar, skulle du ersätta disknamnet (hdisk0) med %1. Detta är för att ange den första parametern som genereras i var och en av listorna i kommandot apply.

här går vi:

apply "chdev –l %1 –a queue_depth=16 –P" $(lsdev –c disk –F name)

så här gör du ett svanskommando för att titta på de sista 20 raderna i flera loggfiler:

apply "tail -20 %1" $(ls *.log)

du kanske tror att du bara kan köra detta:

tail -20 *.log

men tail-kommandot kan bara bearbeta en fil i taget.

här är ett annat exempel. Antag att du vill göra en säkerhetskopia av en uppsättning filer innan du ändrar dem. Det finns många sätt att göra detta, men kommandot apply skulle fungera mycket bra:

apply "cp %1 %1.bak" $(ls *.cfg)

när du väl är van vid den lite ovanliga syntaxen för kommandot apply kommer du förmodligen att börja älska det. Jag använder det hela tiden, speciellt om jag behöver få ett kommando som körs i en enda rad.

efter att ha arbetat med IBM-System sedan 1991 har Anthony English sett hur AIX och virtualisering kan hantera alla typer av affärsmiljöer. Han är en välkänd författare inom IT-området och han skriver om förbättring av affärssystem genom sin blogg på http://anthonyenglish.com.au. Anthony är baserad i Sydney, Australien, med sin fru och hans sju barn.

Lämna ett svar

Lämna ett svar

Din e-postadress kommer inte publiceras.