如何重现在一台计算机上另一台计算机上运行的命令?


8

我想在VirtualBox中运行的linux机器上安装一些软件。然后,我想在linux-VPS上做同样的事情。

我认为我可以保存使用该history命令运行的所有命令。有什么办法可以在另一台计算机上运行这些命令吗?或做这种事情的方式是什么?

Answers:


5

好吧,我想这里有两种情况:

  1. 如果我需要运行少量命令,则只需在其他任何机器上再次运行它们(如果数量少,我的意思是少于10个)

  2. 如果我需要运行许多命令,可以将它们放入bash脚本中,然后在所有其他计算机上运行该脚本。该脚本应如下所示:

    #!/bin/bash
    command 1
    command 2
    command 3
    command 4

如果不确定某些命令的结果,可以用分隔命令&&,这意味着只有前一个命令成功执行后,下一个命令才会执行。command1 && command2表示如果command1失败,则不会执行command2。


感谢您的好回答。我将设置PHP + Nginx + PostgreSQL,所以我想脚本解决方案是可行的方法。
乔纳斯(Jonas)2010年

取决于您已经知道如何做以及打算重复此过程的次数。(尽管它不是自动化的,但是一两次的最彻底的方法可能是保留一个大文档,其中包括工作代码段以及关于安装过程的想法和说明,您可以在以后参考...)知道一切工作原理,那么您绝对应该编写一个大型的Bash或Puppet脚本或其他内容。
凯文·坎图


3

Patkos是正确的,可能最好创建一个脚本。但是,为此,有时您必须反复试验,直到正确,并需要一些记录您所做的事情以及结果是什么。工具script在这里非常方便。

它在其运行的终端中创建所有活动的记录:

脚本将对您终端上打印的所有内容进行打字。这对于需要交互式会话的硬拷贝记录作为作业证明的学生很有用,因为以后可以使用lpr(1)打印出打字稿文件。


谢谢,我将进一步了解。看起来很有趣。
乔纳斯(Jonas)2010年

如何在一台机器上进行所有操作,然后检查历史记录文件(例如bash的〜/ .bash_history或zsh的〜/ .histfile)并可能复制一些?
phunehehe

历史记录可能会被截断为最后100个命令或其他任意大小限制,因此您必须进行检查。
凯文·坎图


2

我构建了一个名为Overcast的开源工具,以简化此类操作。

您可以在本地(在后台使用Vagrant)或在许多其他云提供商上启动Virtualbox计算机,然后在所有虚拟机上运行任何命令或脚本文件:

# Spin up Ubuntu 14.04 instances on Virtualbox, DigitalOcean, and Linode:
overcast virtualbox create vm.01
overcast digitalocean create vm.02
overcast linode create vm.03
# Run an arbitrary sequence of commands and scripts across all of them:
overcast run vm.* uptime "free -m" ./path/to/my-script.sh

不错的文档!

1

如果要首先在一台计算机上交互式运行命令,然后让脚本在其他计算机上运行,​​只需在文本编辑器中打开.bash_history(或您的Shell使用的任何内容),然后删除第一次遇到的任何错误即可周围。瞧!您已经有了一个脚本,可以将其复制到其他计算机上(使用scp,rsync等)。

在某些情况下,您可能必须先稍微处理文件。例如,我使用zsh,并将其配置为添加各种元数据(datestamp)。显然,您需要删除它。您可以在vim或TextMate或任何使用块选择的不错的编辑器中轻松地做到这一点。或者,您可以使用awk或cut来输出除元数据以外的所有内容。这是执行此操作的一种方法:

cat .zhistory | cut -d';' -f2- 

但是大多数时候,您会发现历史记录文件只是命令的直接列表,因此您可能无需担心任何此类按摩。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.