Shell Script pentru a încărca un fișier în același subdirector pe un server de la distanță
O sarcină foarte comună pentru un dezvoltator web este încărcarea unui singur fișier dintr-un subdirector pe caseta de dezvoltare în același subdirector pe un server la distanță. Din nefericire, aceasta întotdeauna sfârșește prin a fi un proces manual enervant care implică comutarea directoarelor pe ambele servere și deșeurile o mare cantitate de timp.
Deci, am luat-o pe mine însumi să scriu un script shell pentru a automatiza acest lucru pentru mine, folosind scp pentru copierea sigură a fișierelor. (Notă importantă: FTP este nesigur, folosiți WinSCP)
Principala problemă de rezolvat a fost că instalarea mea WordPress pe mașina mea de dezvoltare are un director de bază diferit de instalarea pe serverul meu. Pe mașina mea de dezvoltare este / var / www, iar pe serverul meu este ceva mai mult ca / var / www / howtogeek / docs /. Am decis să le mișcăm doar în variabilele de la începutul scenariului, astfel:
[email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
Rețineți că directorul local (LDIR) din script are un \ înainte de fiecare / în cale. Acest lucru se datorează faptului că vom trece acest lucru într-o comandă sed mai târziu în scenariu, așa că trebuie să scăpăm de aceste valori. Sunt sigur că există altă cale în jurul acestui lucru, dar nu sunt conștient de asta.
Apoi, am creat login-uri automate ssh. Pentru a face acest lucru, trebuie să executați mai întâi utilitarul ssh keygen cum ar fi:
ssh-keygen -t rsa
Apoi trebuie să copiați fișierul ~ / .ssh / id_rsa.pub în fișierul ~ / .ssh / authorized_keys de pe serverul de la distanță. Dacă directorul ~ / .ssh este deja creat pe serverul de la distanță (poate doriți să verificați), puteți rula această comandă pentru a copia cheile deasupra:
cat ~ / .ssh / id_rsa.pub | ssh utilizator @ hostname 'cat >> .ssh / authorized_keys'
Acum avem login-uri ssh automate, ceea ce va permite utilizarea utilitarului scp fără parolă. Acum, să aruncăm o privire la comanda scp pe care o vom folosi în scenariu:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" '/' echo $ 1 | sed 's /.*\/// "
$ 1 este parametrul pe care îl veți transmite scriptului pentru numele fișierului pe care încercați să îl încărcați. $ SSHSERVER și $ RDIR sunt variabile pe care le vom seta la începutul scriptului pentru a seta numele de utilizator @ hostname și calea de acces la distanță.
Primul bloc care începe cu pwd | sed duce calea directă a directorului și se desprindă de partea anterioară a căii care nu se potrivește cu serverul de la distanță, dar lasă restul căii. De exemplu, dacă v-ați afla în / var / www / wp-content / atunci când ați executat comanda, blocul sed ar desprinde / var / www pe baza variabilei LDIR, dar lăsa / wp-content /.
Cel de-al doilea bloc vă asigură că eliminați întreaga cale precedentă în afara numelui de fișier transmis scriptului, astfel încât să obțineți numele fișierului.
De exemplu, dacă ați denumit scriptul up.sh și l-ați executat din directorul local / var / www / wp-content / plugins / pe un fișier:
up.sh myplugin.php
Acest lucru ar fi fost extins de shell, după cum urmează:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
În loc să încercați să creați propriul fișier de script bazat pe articol, l-am furnizat pentru descărcare. În acest fel nu vor exista probleme cu caractere speciale care nu funcționează ... și da, am folosit scriptul pentru a se încărca =)
Descarcă geek-uploader.sh
Doar puneți-l undeva în calea voastră și numiți-o cum vreți. Am redenumit-o pe a mea doar "sus", așa că pot să tip "up filename.txt" pentru a încărca. De asemenea, nu uitați să o deschideți și să schimbați variabilele de la începutul scriptului pentru a se potrivi mediului înconjurător.
Acest script ar trebui să funcționeze pe orice cu un shell nix și utilitarul scp. Folosesc Ubuntu, dar ar trebui să funcționeze pe Solaris, OS X, sau chiar pe Windows cu Cygwin instalat.