在命令行上,我可以将输出重定向到不带 >、>> 或 | 的文件吗?运营商?

在命令行上,我可以将输出重定向到不带 >、>> 或 | 的文件吗?运营商?

我正在尝试在 CentOS 虚拟机上运行命令,而我用来运行此命令的 API 似乎不允许 >、>> 或 |运营商。另外,我必须使用命令的完全限定路径(例如 /bin/ls 而不仅仅是 ls)。

我希望能够将某个命令的输出发送到文件。在这种情况下我怎样才能做到这一点?理论上我可以执行一个脚本,在“正确的”shell 中执行重定向,但这是一个非常不方便的选项。

答案1

重定向由 shell 解释。如果您使用 API,则执行的命令可能不是通过 shell 执行,而是直接执行(人3系统人 3 执行)。

要使用重定向,只需启动一个 shell 并在其中使用重定向,例如:

/bin/sh -c "command > redirect"

答案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 和排序)在本地计算机上执行。

相关内容