29Jun
Zelo pogosta naloga spletnega razvijalca je naložitev ene datoteke iz podimenika v vašem razvojnem polju v isti podimenik na oddaljenem strežniku. Na žalost se vedno konča kot nadležen ročni postopek, ki vključuje preklapljanje imenikov na obeh strežnikih in veliko časa izgubi.
Torej, sem si vzel sam, da napišem lupinski skript, da ga samodejno avtomatiziram z uporabo SCP za varno kopiranje datotek.(Pomembna stranska opomba: ftp je grozno nezanesljiv, namesto tega uporablja WinSCP)
Glavna težava za rešitev je bila, da je moj namestitveni program WordPress na mojem razvojnem računalniku drugačen osnovni imenik kot namestitev na mojem strežniku. Na mojem razvojnem računalniku je /var/ www, na mojem strežniku pa je nekaj bolj kot /var/www/howtogeek/docs/.Odločil sem se, da jih prestavim v spremenljivke na začetku scenarija, kot je ta:
[email protected]
RDIR = /var/www/howtogeek/ docs
LDIR = '\ / var \ / www'
Upoštevajte, da je lokalni imenik( LDIR) v skriptu ima \ pred vsakim / na poti. To je zato, ker bomo to v sedem zaporedju prenesli v ukaz sed, zato se moramo izogniti tem vrednostim. Prepričan sem, da obstaja drugačna pot okoli tega, vendar se tega ne zavedam.
Nato sem nastavil avtomatizirane prijave ssh.Če želite to narediti, morate najprej zagnati programsko opremo ssh keygen, kot je na primer:
ssh-keygen -t rsa
Potem morate datoteko ~ /.ssh/ id_rsa.pub kopirati v datoteko ~ /.ssh/ authorized_keys na oddaljenem strežniku.Če je imenik ~ /. ssh že ustvarjen na oddaljenem strežniku( morda želeli preveriti), lahko ta ukaz zaženete s tem, da kopirate ključe:
cat ~ /.ssh/ id_rsa.pub |ssh uporabnik @ ime gostitelja 'cat & gt; & gt;.ssh / authorized_keys "
Zdaj imamo avtomatizirane prijave ssh, ki omogočajo uporabo pripomočka scp brez gesla. Zdaj pa si oglejte ukaz scp, ki ga bomo uporabili v skriptu:
scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/` echo $ 1 | sed 's /.* \ /// ''
$ 1 je parameter, ki ga boste prenesli v skript za ime datoteke, ki ga poskušate naložiti.$ SSHSERVER in $ RDIR so spremenljivke, ki jih bomo določili na začetku skripte, da nastavimo uporabniško ime gostitelja in prejšnjo oddaljeno pot.
Prvi blok, ki se začne s pwd | sed, poteka po trenutni poti v imeniku in izstopi iz prejšnjega dela poti, ki se ne ujema z oddaljenim strežnikom, ampak pušča preostalo pot. Na primer, če ste bili v /var/www/ wp-vsebini / ko ste zagnali ukaz, bi blok sed odstranil /var/ www na podlagi naše spremenljivke LDIR, vendar pustite vsebino / wp-vsebino / njen del.
Drugi blok samo poskrbi, da bo celotno predhodno pot oddaljena od imena filma, prenesenega v skript, tako da boste le dobili ime datoteke.
Če ste na primer poimenovali skript up.sh in ste ga zagnali iz vašega lokalnega /var/www/ wp-content /plugins/ imenika v datoteki:
up.sh myplugin.php
To bi bilo razširjeno z lupino kot sledi:
scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-vsebina /plugins/ myplugin.php
Namesto da bi poskušal ustvariti lastno skriptno datoteko na podlagi članka, sem vam jo priskrbel, da ga prenesete. Na ta način ne bo nobenih težav s posebnimi znaki, ki ne delajo. .. in ja, sem uporabil skript za nalaganje sebe =)
Prenesi geek-uploader.sh
Postavite ga nekam na svojo pot in ga poimenujte kar hočete. Preimenoval sem svoj "samo" gor, tako da lahko prenesem samo "up filename.txt".Zapomnite si tudi, da jo odprete in spremenite spremenljivke na začetku skripte, da se ujemajo z vašim okoljem.
Ta skript bi moral delati z vsemi z * shell nix in scp utility. Jaz uporabljam Ubuntu, vendar bi moral delati na Solarisu, OS X ali celo v Windowsu z Cygwinom.