Aix tech dica: Bye-Bye loops – use o comando ‘apply’ em vez

Fundo de tecnologia abstrata com formas hexagonais
um dos segredos mais bem guardados da linha de comando AIX é o comando “apply”.

nunca ouviu falar disso? Bem-vindo ao Clube. Dois colegas e eu tivemos mais de 60 anos de experiência combinada na AIX e, entre nós, nunca nos deparamos com “Aplicar”.

então, o que ele faz e por que você deve aprendê-lo? Muito simplesmente, “aplicar” executará um comando para um conjunto de parâmetros. É útil, por exemplo, se você deseja alterar um parâmetro de ajuste para todo um conjunto de discos ou outros dispositivos. Ou talvez você precise listar algumas informações de vários arquivos. Seu amigo é “aplicar”.

se você já está familiarizado com alguns scripts básicos, provavelmente verá algumas semelhanças com a execução de um loop” for”.

aqui está um uso básico do comando apply. Vamos aplicar o comando “echo” a uma lista de palavras.

apply "echo" all cows eat grassallcowseatgrass

não é muito emocionante, suponho, mas a sintaxe é muito mais fácil do que usar um loop “for”. Veja como ficaria:

for i in all cows eat grassdoecho $idone

Com “aplicar” você só precisa especificar “aplicar” e o comando”echo”, neste exemplo).

que tal substituir as palavras sobre hábitos culinários bovinos por algo um pouco mais técnico? Vou listar os atributos de um conjunto de volumes físicos.

o comando para listar os atributos seria:

lsattr –El hdiskN

então, para usar o comando “aplicar”, seria:

apply "lsattr –El" hdisk0

as chances são de que você gostaria de fazer isso para um número de discos; talvez até mesmo todos os discos em seu sistema AIX. Para listar os discos, você pode usar este comando:

lsdev –c disk –F name

isso produziria uma lista de discos, como:

hdisk0hdisk1hdisk2

e assim por diante.

no comando aplicar, em vez de listar esses discos um por um, você pode especificar o comando para listá-los. Ele precisa estar em backticks:

`lsdev –c disk –F name`

ou use a sintaxe $( command ) :

$(lsdev –c disk –F name)

agora é hora de juntar tudo. Como o comando lsattr que estamos aplicando à lista de discos contiver espaços, você precisa colocá-lo entre aspas:

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

Isso pode ser realmente útil se você quiser fazer mudanças, também.

Aqui está o comando para alterar a profundidade da fila para um disco:

chdev –l hdisk0 –a queue_depth=16 –P

fazer isso Para todos os discos, você deve substituir o nome do disco (hdisk0) com o %1. Isso é para indicar o primeiro parâmetro gerado em cada uma das listas do comando apply.

aqui vamos nós:

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

veja como fazer um comando tail para observar as últimas 20 linhas de vários arquivos de log:

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

você pode pensar que poderia apenas executar isso:

tail -20 *.log

mas o comando tail só pode processar um arquivo de cada vez.

aqui está outro exemplo. Suponha que você queira fazer um backup de um conjunto de arquivos antes de alterá-los. Existem muitas maneiras de fazer isso, mas o comando apply funcionaria muito bem:

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

depois de se acostumar com a sintaxe um pouco incomum do comando apply, você provavelmente começará a amá-la. Eu o uso o tempo todo, especialmente se precisar executar um comando em uma única linha.Tendo trabalhado em sistemas IBM desde 1991, Anthony English viu como Aix e virtualização podem gerenciar todos os tipos de ambientes de negócios. Ele é um autor bem reconhecido na área de TI e escreve sobre melhoria de sistemas de negócios através de seu blog em http://anthonyenglish.com.au. Anthony está baseado em Sydney, Austrália, com sua esposa e seus sete filhos.

Leave a Reply

Deixe uma resposta

O seu endereço de email não será publicado.