Come posso riprodurre i comandi eseguiti su un computer su un altro computer?


8

Vorrei installare alcuni software su una macchina linux che ho eseguito in VirtualBox. Quindi vorrei fare la stessa cosa su un Linux-VPS.

Penso di poter salvare tutti i comandi che eseguo usando il historycomando. Esiste un modo per eseguire questi comandi su un'altra macchina? O qual è il modo di fare queste cose?

Risposte:


5

Bene, immagino 2 situazioni qui:

  1. Se avessi bisogno di eseguire un piccolo numero di comandi, li avrei semplicemente eseguiti di nuovo su qualsiasi altra macchina (per piccolo numero intendo meno di 10)

  2. Se avessi bisogno di eseguire molti comandi, li inserivo in uno script bash ed eseguivo lo script su tutte le altre macchine. Lo script dovrebbe apparire così:

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

Se non si è sicuri dell'esito di alcuni comandi, è possibile separare i comandi &&, il che significa che il comando successivo verrà eseguito solo se il precedente ha avuto esito positivo. command1 && command2significa che command2 non verrà eseguito se command1 fallisce.


Grazie per un'ottima risposta Installerò PHP + Nginx + PostgreSQL, quindi immagino che la soluzione di script sia la strada da percorrere.
Jonas,

Dipende da quanto sai già come fare e quante volte prevedi di duplicare questo processo. (Sebbene non sia automatizzato, l'approccio più completo per una o due volte è probabilmente quello di conservare un documento di grandi dimensioni che includa frammenti di codice funzionanti e pensieri e note sulla procedura di installazione a cui puoi fare riferimento in seguito ...) Una volta che sai come funziona tutto, quindi dovresti assolutamente scrivere un grande script Bash o Puppet o altro.
Kevin Cantu,


3

Patkos ha ragione, probabilmente è meglio creare una sceneggiatura. Tuttavia, per questo, a volte devi sperimentare fino a quando non hai capito bene e hai bisogno di un registro di ciò che hai fatto e qual è stato il risultato. Qui lo strumento scriptè utile.

Crea una registrazione di tutte le attività nel terminale in cui è in esecuzione:

Script crea un dattiloscritto di tutto ciò che è stampato sul tuo terminale. È utile per gli studenti che necessitano di una registrazione cartacea di una sessione interattiva come prova di un compito, poiché il file dattiloscritto può essere stampato in seguito con lpr (1).


Grazie, imparerò di più al riguardo. Sembra interessante
Jonas,

che ne dici di fare tutto su una macchina, quindi controllare il file della cronologia (come ~ / .bash_history per bash o ~ / .histfile per zsh) e forse copiarne un po '?
phunehehe,

La cronologia è probabilmente troncata agli ultimi 100 comandi o ad altri limiti di dimensione arbitraria, quindi dovresti verificarlo.
Kevin Cantu,


2

Ho creato uno strumento open source chiamato Overcast per semplificare questo genere di cose.

Puoi far girare le macchine Virtualbox localmente (usa Vagrant sotto il cofano) o su un gruppo di diversi fornitori di cloud, e quindi eseguire qualsiasi comando o file di script su tutti loro:

# 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

Bella documentazione!

1

Se vuoi prima eseguire i comandi in modo interattivo su una macchina e quindi avere uno script per eseguirli su altre, apri il tuo .bash_history (o qualunque cosa usi la tua shell) in un editor di testo e rimuovi qualsiasi errore tu abbia fatto la prima volta in giro. Ecco! Hai uno script che puoi copiare su altre macchine (con scp, rsync, qualunque cosa).

In alcuni casi potrebbe essere necessario elaborare prima leggermente il file. Ad esempio, uso zsh e l'ho configurato per aggiungere vari metadati (datestamps). Ovviamente dovresti rimuoverlo. Puoi farlo facilmente in vim o TextMate, o probabilmente in qualsiasi editor decente usando la selezione dei blocchi. Oppure puoi usare awk o cut per produrre tutto tranne i metadati. Ecco un modo per farlo:

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

Ma la maggior parte delle volte scoprirai che il tuo file di cronologia è solo un semplice elenco di comandi, quindi probabilmente non dovrai preoccuparti di questo massaggio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.