26.11.2014 Views

Январь - Xakep Online

Январь - Xakep Online

Январь - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

UNIXOID ///// ISSUE<br />

ÈÑÏÎËÜÇÓß ÎÄÈÍ ÑÊÐÈÏÒ, ÌÎÆÍÎ ÎÐÃÀÍÈÇÎÂÀÒÜ<br />

ÑÎÅÄÈÍÅÍÈÅ ÑÐÀÇÓ Ñ ÍÅÑÊÎËÜÊÈÌÈ FTP-ÑÅÐÂÅÐÀÌÈ.<br />

Óñòàíîâè ïîëíûå ïðàâà íà ýòîò ôàéë:<br />

$ chmod 777 ~/ppp-auto<br />

Âñå. Òåïåðü òåáå íóæíî åãî çàïîëíèòü, ñêîïèðîâàòü â êàòàëîã /tmp è<br />

íàçíà÷èòü âðåìÿ ñîåäèíåíèÿ ñ ïîìîùüþ at:<br />

if [ $# != 0 ]; then<br />

VER=$1<br />

else<br />

exit<br />

fi<br />

$ cp ~/ppp-auto /tmp/ppp-auto<br />

$ at 02:10<br />

at> /usr/sbin/ppp-on<br />

Çàìåíè /usr/sbin/ppp-on íà êîìàíäó, ñ ïîìîùüþ êîòîðîé òû óñòàíàâëèâàåøü<br />

ñîåäèíåíèå. Îáðàòè âíèìàíèå, ÷òî òàêèå êîìàíäû îáû÷íî<br />

òðåáóþò ïðèâèëåãèé root, ïîýòîìó ìîæíî: a) íàñòðîèòü sudo (ñì. íèæå)<br />

èëè á) çàïóñòèòü at îò root'à.<br />

Êîíå÷íî, ðåøåíèå íåñêîëüêî òîïîðíîå, íî çàòî î÷åíü ïðîñòîå.<br />

 äàííîì ñëó÷àå õîðîøèì äîïîëíåíèåì ìîæåò ñòàòü çàïèñü ðåçóëüòàòîâ<br />

âûïîëíåíèÿ êîìàíä â ôàéë è îòïðàâêà åãî ïî ïî÷òå ñ ïîìîùüþ<br />

êîìàíäû /usr/bin/mail (èëè mailx).<br />

ÍÅ ÏÐÈÂÛÊÀÉ Ê ÁÐÀÓÇÅÐÓ<br />

Ñ ñîåäèíåíèåì ðàçîáðàëèñü, òåïåðü ïîãîâîðèì îá àâòîìàòè÷åñêîì<br />

ñêà÷èâàíèè ôàéëîâ. Äëÿ íà÷àëà ïîïðîáóåì çàñòàâèòü ftp-êëèåíò ðàáîòàòü<br />

â àâòîíîìíîì ðåæèìå. Äëÿ îñóùåñòâëåíèÿ çàäóìàííîãî íàì<br />

ïîíàäîáèòñÿ ïðîäâèíóòûé lftp (åñòü â ëþáîì äèñòðèáóòèâå). Âûïîëíåíèå<br />

êîìàíä â ïàêåòíîì ðåæèìå ÿâëÿåòñÿ îäíîé èç åãî îñîáåííîñòåé.<br />

×òîáû âîñïîëüçîâàòüñÿ åþ, ñîçäàé ôàéë ~/lftp.auto ïðèìåðíî ñ<br />

òàêèì ñîäåðæèìûì:<br />

$ vi ~/lftp.auto<br />

# çàäàåì èìÿ è ïàðîëü ïîëüçîâàòåëÿ (ïóñòîé ïàðîëü — "")<br />

user name passwd<br />

# ïîäêëþ÷àåìñÿ ê ñåðâåðó<br />

lftp ftp.kernel.org<br />

# äàëåå èäóò ëþáûå ñòàíäàðòíûå êîìàíäû ftp-ïðîòîêîëà (get, put, ls)<br />

get ...<br />

# îòêëþ÷àåìñÿ<br />

exit<br />

Çàäàé ïðàâèëüíûå ïðàâà äîñòóïà íà ýòîò ôàéë (÷òîáû íèêòî íå<br />

ïîäñìîòðåë ïàðîëü):<br />

$ chmod 600 ~/lftp.auto<br />

È çàïóñòè lftp òàêîé êîìàíäîé:<br />

$ lftp -f ~/lftp.auto > ~/lftp.log<br />

Ftp-êëèåíò âûïîëíèò âñå òâîè êîìàíäû è îòêëþ÷èòñÿ îò ñåðâåðà. Îòâåòû<br />

ñåðâåðà íà ïðèâåäåííûå êîìàíäû çàïèøóòñÿ â ôàéë ~/lftp.log<br />

(ïî óìîë÷àíèþ îíè âûâîäÿòñÿ íà ýêðàí). Ýòîò ôàéë ìîæåò ñòàòü<br />

î÷åíü ïîëåçíûì, åñëè â ñêðèïòå ïðèìåíÿåòñÿ êîìàíäà ðåêóðñèâíîãî<br />

îáõîäà êàòàëîãîâ (ls -R). Èñïîëüçóÿ îäèí ñêðèïò, ìîæíî îðãàíèçîâàòü<br />

ñîåäèíåíèå ñðàçó ñ íåñêîëüêèìè ftp-ñåðâåðàìè.<br />

Ñîåäèíåíèÿ ñ ftp ìîæíî ñäåëàòü åùå áîëåå àâòîíîìíûìè, åñëè èñïîëüçîâàòü<br />

ðàñøèðåíèå zsh ïîä íàçâàíèåì zftp. Ýòî âñòðîåííûé â<br />

øåëë ftp-êëèåíò, ïîçâîëÿþùèé èíòåãðèðîâàòü êîìàíäû ftp-ïðîòîêîëà<br />

ïðÿìî â ñêðèïòû. Äëÿ äåìîíñòðàöèè ìîùè òàêîé òåõíîëîãèè ðàññìîòðèì<br />

ñëåäóþùèé ñêðèïò:<br />

zmodload zsh/zftp<br />

echo -n "Connecting to $FTP... "<br />

zftp open $FTP<br />

zftp login anonymous "" >/dev/null 2>&1<br />

zftp binary<br />

zftp cd pub/linux/kernel/v`echo $VER | cut -d "." -f 1-2`/<br />

echo "Checking for new kernel..."<br />

zftp ls | grep linux-${VER}<br />

if [[ $? == 0 ]]; then<br />

echo -n "Downloading... "<br />

zftp get linux-${VER}.tar.bz2 > linux-${VER}.tar.bz2<br />

zftp close<br />

else<br />

echo "Kernel $VER doesn't exist."<br />

zftp close<br />

fi<br />

Ñêðèïò ïðåäíàçíà÷åí äëÿ çàêà÷êè ÿäðà Linux ñ îôèöèàëüíîãî ftp-ñåðâåðà.<br />

Çàïóñêàòü ñëåäóåò ñ îäíèì ïàðàìåòðîì — âåðñèåé ÿäðà. Êàê<br />

ìîæíî çàìåòèòü, zftp îïåðèðóåò ñòàíäàðòíûìè êîìàíäàìè ëþáîãî ftpêëèåíòà<br />

ñ òîé ëèøü ðàçíèöåé, ÷òî ïîñëå èñïîëíåíèÿ êàæäîé êîìàíäû<br />

óïðàâëåíèå âîçâðàùàåòñÿ îáðàòíî ê øåëëó. Áëàãîäàðÿ ýòîé îñîáåííîñòè<br />

ìîæíî ïîëíîñòüþ êîíòðîëèðîâàòü âåñü äèàëîã êëèåíòà ñ ñåðâåðîì,<br />

äëÿ ÷åãî ðàíüøå ïðèõîäèëîñü èñïîëüçîâàòü expect.<br />

Åñëè åñòü íåîáõîäèìîñòü ñëèòü ôàéëû ñ http-ñåðâåðà, ìîæíî âîñïîëüçîâàòüñÿ<br />

íåèíòåðàêòèâíûì http-êëèåíòîì wget. ß ïðèìåíÿþ åãî<br />

â àâòîíîìíûõ èíòåðíåò-ñîåäèíåíèÿõ, êàê áûëî ïîêàçàíî â ïðåäûäóùåì<br />

ðàçäåëå.<br />

$ wget URL<br />

Ôàéë áóäåò ñêà÷àí â<br />

òåêóùèé êàòàëîã. Òû<br />

ìîæåøü ñòîëêíóòüñÿ ñ<br />

ñèòóàöèåé, êîãäà ôàéë<br />

èìååò ñëèøêîì áîëüøîé<br />

ðàçìåð è íå ìîæåò<br />

áûòü ñëèò â ðàìêàõ îäíîãî<br />

ñîåäèíåíèÿ. Êàê<br />

áûòü? Åñëè çíà÷èòåëüíàÿ<br />

÷àñòü ôàéëà óæå<br />

ñêîïèðîâàíà, à âðåìÿ<br />

ïîäæèìàåò, òî ìîæíî<br />

ïðèáèòü wget ëèáî êîìàíäîé<br />

«killall wget»,<br />

ëèáî êîìáèíàöèåé<br />

«CTRL+C». Âî âðåìÿ<br />

ñëåäóþùåãî ñåàíñà ñîåäèíåíèÿ<br />

íàäî âîçîáíîâèòü<br />

ïðîöåññ ñêà÷èâàíèÿ<br />

êîìàíäîé:<br />

$ vi ~/get_kernel.zsh<br />

$ wget -c URL<br />

#!/bin/zsh<br />

FTP=ftp.kernel.org<br />

À åùå wget ìîæíî<br />

ïðåâðàòèòü â íàñòîÿíàø<br />

ñêðèïò ðàáîòàåò!<br />

102 XÀÊÅÐ 01 /85/ 06

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!