Na linha de comando, posso redirecionar a saída para um arquivo SEM, ou | operadores?

1

Estou tentando executar um comando em uma máquina virtual do CentOS, e a API que estou usando para executar este comando não parece permitir que o & gt ;, > & gt ;, ou | operadores. Além disso, devo usar caminhos totalmente qualificados para comandos (por exemplo, / bin / ls em vez de apenas ls).

Eu quero poder enviar a saída de um determinado comando para um arquivo. Como posso fazer isso sob essas condições? Eu poderia, em teoria, executar um script que faria o redirecionamento em um shell "adequado", mas essa é uma opção bastante inconveniente aqui.

    
por smcg 25.07.2012 / 17:39

2 respostas

7

Os redirecionamentos são interpretados pelo shell. Se você estiver usando uma API, os comandos executados provavelmente não serão executados através de um shell, mas diretamente ( sistema de 3 homens vs. man 3 exec ).

Para usar redirecionamentos, basta iniciar um shell e usar os redirecionamentos, por exemplo:

/bin/sh -c "command > redirect"
    
por 25.07.2012 / 18:09
1

Se você tiver várias VMs, convém procurar um programa chamado pdsh. Ele pode ser usado para executar comandos (via ssh) em várias máquinas remotas (reais ou virtuais) em paralelo.

Ele foi escrito para uso em clusters HPC, mas é uma ferramenta sysadmin útil para trabalhar com qualquer grupo de máquinas linux / unix.

link

por exemplo. se eu tiver várias máquinas definidas com o atributo "compute" (nova-compute nodes em uma implementação de openstack), posso executar o seguinte comando para descobrir quantos nós têm 16 ou mais núcleos livres (de 24 núcleos por nó ) e são capazes de executar uma VM xxlarge de 16 núcleos:

# pdsh -g compute "ps hwwu -Ckvm | sed -e 's/.*-smp //' -e 's/,.*//' | 
awk '{VMS += 1 ; CPUS += \} END {print VMS, CPUS, 24-CPUS}'" | \
awk '$4 > 15 {print}' | sort -k4 -n
comp17: 6 8 16
comp19: 6 8 16
comp23: 6 8 16
comp26: 7 8 16
comp51: 7 8 16
comp56: 6 8 16
comp71: 7 8 16
comp78: 7 8 16
comp81: 6 8 16
comp11: 6 7 17
comp47: 6 7 17
comp79: 6 7 17
comp09: 5 6 18
comp29: 5 5 19
comp27: 4 4 20

(saída de uso real, nomes de host editados para anonimato)

O comando dentro daspas duplas é executado nas máquinas remotas (as regras de cotação do shell se aplicam, portanto, o \ $ 1 no primeiro awk) e o restante (o segundo awk e o sort) são executados na máquina local.

    
por 26.07.2012 / 00:52