我正在尝试在 CentOS 虚拟机上运行命令,而我用来运行此命令的 API 似乎不允许 >、>> 或 |运营商。另外,我必须使用命令的完全限定路径(例如 /bin/ls 而不仅仅是 ls)。
我希望能够将某个命令的输出发送到文件。在这种情况下我怎样才能做到这一点?理论上我可以执行一个脚本,在“正确的”shell 中执行重定向,但这是一个非常不方便的选项。
答案1
答案2
如果您有多个虚拟机,您可能需要研究一个名为 pdsh 的程序。它可用于在多台远程计算机(真实或虚拟)上并行运行命令(通过 ssh)。
它是为在 HPC 集群中使用而编写的,但它是一个有用的系统管理工具,可用于任何 Linux/Unix 机器组。
https://computing.llnl.gov/linux/pdsh.html
例如,如果我有一堆使用属性“compute”定义的机器(openstack 部署中的 nova-compute 节点),我可以运行以下命令来找出有多少个节点有 16 个或更多空闲核心(每个节点有 24 个核心)节点)并且是否能够运行 xxlarge 16 核 VM:
# pdsh -g 计算 "ps hwwu -Ckvm | sed -e 's/.*-smp //' -e 's/,.*//' | awk '{VMS += 1 ; CPUS += \$1} END {打印 VMS、CPUS、24-CPUS}'" | \ awk '$4 > 15 {print}' |排序-k4-n 比较 17: 6 8 16 比较 19: 6 8 16 比较 23:6 8 16 26 班:7 8 16 比较 51:7 8 16 比较 56:6 8 16 比较71:7 8 16 比较78:7 8 16 比较 81:6 8 16 比较 11:6 7 17 比较47:6 7 17 比较 79: 6 7 17 补偿09:5 6 18 比较 29: 5 5 19 比较 27:4 4 20
(真实使用输出,为匿名而编辑的主机名)
双引号内的命令在远程计算机上执行(应用 shell 引用规则,因此第一个 awk 中的 \$1),其余部分(第二个 awk 和排序)在本地计算机上执行。