29Jun
Velmi častým úkolem pro vývojáře webu je nahrání jediného souboru z podadresáře ve vývojovém poli do stejného podadresáře na vzdáleném serveru. Bohužel, to vždy skončí jako rušivý ruční proces zahrnující přepínání adresářů na obou serverech a zbytečně mnoho času.
Tak jsem si vzal na sebe napsat skript shell, který by mi automatizoval tohle, pomocí scp pro bezpečné kopírování souborů.(Důležitá poznámka: ftp je hrozně nejistý, místo toho použijte WinSCP)
Hlavní problém, který jsem vyřešil, bylo to, že můj WordPress instalace na vývojovém stroji má jiný základní adresář než instalace na mém serveru. Na vývojovém stroji je /var/ www, a na mém serveru je něco podobného /var/www/howtogeek/docs/.Já jsem se rozhodl prostě přesunout ty na proměnné na začátku skriptu, jako je toto:
[email protected]
RDIR = /var/www/howtogeek/ docs
LDIR = '\ / var \ / www'
Všimněte si, že místní adresář( LDIR) ve skriptu má \ před každým / v cestě.Důvodem je to, že to uděláme později v příkazu sed do skriptu, takže musíme uniknout těmto hodnotám. Jsem si jistý, že tohle je jiný způsob, ale o tom nevím.
Poté jsem nastavil automatické přihlašování ssh. Chcete-li to provést, musíte nejprve spustit nástroj ssh keygen takto:
ssh-keygen -t rsa
Poté musíte zkopírovat soubor ~ /.ssh/ id_rsa.pub do souboru ~ /.ssh/ authorized_keys na vzdáleném serveru. Pokud je adresář ~ /. ssh již vytvořen na vzdáleném serveru( možná byste chtěli zkontrolovat), můžete tento příkaz spustit a zkopírovat klíče:
cat ~ /.ssh/ id_rsa.pub |ssh jméno uživatele @ hostname 'cat & gt; & gt;.ssh / authorized_keys '
Nyní máme automatické přihlašovací ssh, které umožní použití nástroje scp bez hesla. Nyní se podívejme na příkaz scp, který použijeme ve skriptu:
scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/ echo $ 1 | sed 's /.* \ /// ''
$ 1 je parametr, který předáte skriptu pro název souboru, který se pokoušíte nahrát.$ SSHSERVER a $ RDIR jsou proměnné, které nastavíme na začátku skriptu, abychom nastavili jméno uživatele host @ a předchozí vzdálenou cestu.
První blok, který začíná příkazem pwd | sed, přebírá aktuální cestu k adresáři a odděluje předcházející část cesty, která neodpovídá vzdálenému serveru, ale zanechává zbytek cesty. Například pokud jste byli v /var/www/ wp-content / když jste spustili příkaz, sed blok by odstranil /var/ www založený na naší proměnné LDIR, ale ponechat / wp-content / část.
Druhý blok pouze zajistí odstranění celé předchozí cesty z názvu souboru předaného skriptu, takže dostanete pouze název souboru.
Například pokud jste pojmenovali skript up.sh a spustili jej z místního adresáře /plugins/ /var/www/ wp-/plugins/ do souboru:
up.sh myplugin.php
Bylo by rozšířeno shell takto:
scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-content /plugins/ myplugin.php
Namísto pokusu o vytvoření vlastního souboru skriptu na základě článku jsem vám ji poskytl pro stažení.Takže tam nebudou žádné problémy se speciálními znaky, které nefungují. .. a ano, použil jsem skript na upload sám =)
Stáhnout geek-uploader.sh
Stačí dát někde na vaší cestě a pojmenujte jej cokoli chcete. Přejmenoval jsem se jen na "nahoru", takže mohu jen napsat "up filename.txt" na upload. Také nezapomeňte otevřít a změnit proměnné na začátku skriptu tak, aby odpovídaly vašemu prostředí.
Tento skript by měl pracovat na všechno, co má shell * nix a nástroj scp. Používám Ubuntu, ale měl by pracovat na Solarisu, OS X, nebo dokonce Windows s Cygwinem instalovaným.