Kirjoittaja Aihe: ftp siirto  (Luettu 3316 kertaa)

os_fin

  • Käyttäjä
  • Viestejä: 7
    • Profiili
ftp siirto
« : 30.10.06 - klo:10.39 »
Moi

Olen tässä siirtynyt win maailmasta Linux:in pariin. Perus asiat on käynyt loppujen lopuksi
aika kivuttomasti, mistä yllätyin postiivisesti. Ainut et olen tottunut win maailmassa valmiisiin
softiin ( mitkä ei kyllä aina toiminut ), nyt pitäs opetella tekee Linuksiin scriptejä. Löytyskö täältä
vikkejä misä löytys parhaat oppaat, netissä kun niitä löytyy satoja eri tasoisia.

Nyt esm. aluksi tarviisin sciptin joka siirtää ja hakee tietoa FTP:llä automaattisesti 1 min välein.

-aloittelija-

raimo

  • Käyttäjä
  • Viestejä: 4168
  • openSUSE Tumbleweed
    • Profiili
Re: ftp siirto
« Vastaus #1 : 30.10.06 - klo:10.47 »
Moi

Olen tässä siirtynyt win maailmasta Linux:in pariin. Perus asiat on käynyt loppujen lopuksi
aika kivuttomasti, mistä yllätyin postiivisesti. Ainut et olen tottunut win maailmassa valmiisiin
softiin ( mitkä ei kyllä aina toiminut ), nyt pitäs opetella tekee Linuksiin scriptejä. Löytyskö täältä
vikkejä misä löytys parhaat oppaat, netissä kun niitä löytyy satoja eri tasoisia.

Nyt esm. aluksi tarviisin sciptin joka siirtää ja hakee tietoa FTP:llä automaattisesti 1 min välein.

-aloittelija-

On linuksillekin olemassa valmiita ohjelmia, jopa monta! ;D
Tuolta http://packages.ubuntu.com/edgy/ löytyy Ubuntun oletusohjelmat, ja internetistä sitten lisää, käytännössä kaikki Linux-ohjelmat toimivat myös Ubuntussa, koska Ubuntu on Linux. :)

Huomasitkos tuon http://forum.ubuntu-fi.org/index.php?topic=303.0 ketjun, joka on oikein "stikittynä" tämän alueen yläosaan, sieltä löytyy muutamakin linkki hyviin ohjeisiin.

Minä tekisin tuollaisen Perlillä, niin siitä tulisi hieno, ja helposti jopa.
libwww-perl paketti tosin pitää asentaa jotta Perliin tulee tarvittavat palikat, mutta se ei ole tämän vaikeampi juttu. sudo apt-get install libwww-perl
taikka jopa tämä taitaa riittää: sudo apt-get install libnet-perl tai vaikka molemmat.

Haen kahvia ja teen yksinkertaisen mallin, joten odota hetki... :)

Tosin wget ohjelmallahan tuo esim onnistuu ihan suoraan, taikka ftp -ohjelmalla
kts. man wget ja man ftp
mutta tehdään nyt huvikseen Perlillä, koska Perli on siistiä ja ihkua! :)


e. typo oli yms.
« Viimeksi muokattu: 30.10.06 - klo:11.23 kirjoittanut raimo »
Tietä käyden tien on vanki. Vapaa on vain umpihanki.
Aaro Hellaakoski

raimo

  • Käyttäjä
  • Viestejä: 4168
  • openSUSE Tumbleweed
    • Profiili
Re: ftp siirto
« Vastaus #2 : 30.10.06 - klo:12.19 »
Noniin, Ihan vain malliksi, hyvin yksinkertainen mutta silti täysin toimiva (beta).
Löytyy myös osoitteesta http://dash.atspace.org/sec/munftp.txt
josta sen saa kätevästi wgetillä komennolla
Koodia: [Valitse]
wget -O ~/munftp.txt http://dash.atspace.org/sec/munftp.txt
Yritin kommentoida mahd. paljon, mutta kysyä saa. :)
Koodia: [Valitse]
#!/usr/bin/perl
# hyvin yksinkertainen FTP-esimerkki :: raimo 20061030.2 (beta)
# hakee kamaa halutuin väliajoin.

my $lic = "http://creativecommons.org/licenses/publicdomain/";

# asenna ensin libnet-perl: sudo apt-get libnet-perl (tai/ja libwww-perl)
# joo, asenna molemmat: sudo apt-get libnet-perl libwww-perl
# manuaali: http://search.cpan.org/~gbarr/libnet-1.19/Net/FTP.pm
#
#ASENNUS (tämä skripti):
# wget http://dash.atspace.org/sec/munftp.txt
# sudo cp munftp.txt /usr/bin/munftp
# sudo chmod 755 /usr/bin/munftp
# katso ohje komennolla: munftp --help
#
# esim: munftp -k 10 -i 900
# haetaan 10 kertaa, nukutaan hakujen välillä 15 minuuttia
#
# Säädä ASETUKSET alla, tai/ja kopioi tarvittavat ~/.munftp.conf tiedostoon
# Säädä sisään haettavien tiedostojen NIMET alekkain ~/munftp.get tiedostoon
# ~/munftp.get tiedostoon siis tulee pelkät ETÄtiedostonimet, esim:
# kukka1.png
# kukka2.png
#

use strict;
use Net::FTP;

my $home = $ENV{"HOME"}; # kotihakemisto
my $name = $0;           # ohjelman polku/nimi
   $name =~ s/^.*\///;   # pelkkä ohjelman nimi
my $ver  = 20061030;     # versio

# ------------- ASETUKSET ------------- #
# nämä voi olla myös tiedostossa ~/.munftp.conf
# ko. tiedosto pitää olla Perliä, joten kopioi tarvittavat rivit tästä.

our $server  = "ftp.serveri.moon";      # serverin URL: mun.serveri.fi
our $user    = "aku-ankka";             # käyttäjätunnus
our $pssw    = "iines";                 # salasana
our $path    = "/etä/hakemisto/polku";  # ETÄhakemisto,
                                        # $path alkaa aina / -merkillä, ei / -merkkiä loppuun!
our $pwd     = $ENV{"PWD"};             # nykyinen hakemisto, tai muuta polku halutuksi
our $binary  = 1;                       # 0/1 binary-mode, kuville yms. pitää olla 1
our $debug   = 0;                       # 0/1 debug, jos 1 niin pölpöttää kauheasti.
our $timeout = 60;                      # timeout sekunttia, oletus 60
our $passive = 1;                       # 0/1 passive mode, käytä 1 jos mahdollista
our $int     = 60;  # -i SEK            # ikuluupin nukkumisaika sekunttia
our $limit   = -1;  # -k KPL            # hakukertojen määrä, -1 = ikuisesti
# nukkumisajan voi säätää käynnistysparametrillä -i SEKUNTTIA, 60 on minimi
# hakukerrat säädetään tarvittaessa -k KPL parametrillä

# ------------------------------------- #

# asetukset voi siis olla myös kotihakemistossa, ja nepä liitetään nyt tässä
do "$home/.munftp.conf" if -f "$home/.munftp.conf";

my $help = <<HELP; # helppiä ei unohdeta, tämä onkin hieno aktiivihelppi! :)
$name [$0] $ver
aja: $name [-i AIKA -k KERTAA] --help
säädä asetukset tiedostossa: $0 tai $home/.munftp.conf
asettele haettavien tiedostojen lista: $home/munftp.get
serveri: $server
etähakemisto: $path
paikallinen hakemisto: $pwd
uniaika: $int, aseta -i parametrillä: $name -i SEKUNTIA
hakukerrat: $limit, aseta tarvittaessa -k KPL parametrillä

lisenssi: $lic
HELP

# poistutaan esitellen helppi jos sitä pyydetään, tai etätiedostoasetuksia ei löydy
exit print "\n$help\n" if (grep/^-h$|-help$/, @ARGV) || !-f "$home/munftp.get";

my $o; # apumuuttuja joka sisältää aina edellisen parametrin, eli esim. $o on -i kun $_ on 60
 foreach (@ARGV){ # käynnistysparametrit
  $limit = $_ if $o eq "-k" && $_ =~ /^\d+$/; # hakukertaraja, ts montako kertaa haetaan.
  $int   = $_ if $o eq "-i" && $_ =~ /^\d+$/; # unisaika -i SEK, tarkastetaan myös numerous
  # tähän voi sitten laittaa vaikkapa serverin URL:n
  # $server = $_ if $o eq "--server" && $_ ne "";
  # jne. vaikka tunnukset ja ties mitä
 $o = $_; # vanha parametri muistiin
}

my $cnt = 0; # kierroslukumittari
   $int = 60 if $int < 60; # lyhyin mahdollinen uniaika on 60 sekuntia
print "Yhdistän -> $server\n",
      "uniaika: $int, kerrat: $limit\n",
      "hommeli: $pwd <- $server$path\n";

# jep, yhdistelläänpä nyt sinne sitten,
# komento touch ~/munftp.stop pysäyttää tämän vehkeen..
# niin no, viimeistään $int ajan jälkeen Ctrl+C pysäyttää heti

while (!-f "$home/munftp.stop"){

my $ftp = Net::FTP -> new($server,
                          Debug => $debug,
                          Timeout => $timeout,
                          Passive => $passive)
                          or die "Ei yhteyttä: $server: $@";
 if ($ftp){
  # pulistaan TERMINAALIIN tietoja tapahtumista
    print $ftp -> message;

  # kirjaudutaan jos yhteys muodostui, elikkä jos $ftp on olemassa
    $ftp -> login($user, $pssw) or die "Tunnusvirhe: ", $ftp -> message;
    print $ftp -> message;

  # vaihdetaan etähakemistoon $path
    $ftp -> cwd("$path") or die "Etähakemistoa ei ole tms ", $ftp -> message;
    print $ftp -> message;
    $ftp -> binary if $binary == 1;

  # haetaan kaikki ~/munftp.get tiedostossa määrätyt tiedostot serveriltä
   if (-s "$home/munftp.get" > 0){
    print "$pwd <- $server$path\n";

  # tähän tiedostoon ne sisäänsiirrettävät TIEDOSTONIMET, omille riveilleen
    open FILE, "< $home/munftp.get" or print "$home/munftp.get $!\n";

     while (<FILE>){ # luetaan koko tiedosto läpi
   chomp $_; # rivinvaihtomerkki pois tiedostonimestä

    # okay, siis nyt sitten haetaan se kama
        $ftp -> get($_) if $_ ne "";
       # ja tulostetaan TERMINAALIIN miten kävi
       print $ftp -> message;

     }
    close FILE;

   } else {

    print "Ei haettavia tiedostoja $pwd <- $server\n",
          "Lisää halutut ETÄTIEDOSTONIMET tiedostoon $home/munftp.get";

   } ### if (-s "$home/munftp.get" > 0) loppuu tähän

    # ka ne tuli jo, joten katkaistaanpa yhteys
    print "Katkaistaan yhteys.. ";
    $ftp -> quit;
    # ja höpötetään katkesiko, Goodbye tms. tarkoittaa että katkesi se
    print $ftp -> message;

 } ### if ($ftp) loppuu tähän

 $cnt++; # kierroslaskuri

 # lopetus jos hakukertalimiitti on käytössä (> -1) ja tulee täyteen
 exit print "$name -k > $limit, heippa\n" if $cnt >= $limit && $limit > -1;

 print "\nKierros $cnt, nukun $int sekuntia\n",
       "homma: $pwd <- $server$path\n";
 # nukutaan määrätty aika
 sleep $int;
 #huomenta, suraava kierros käyntiin..

 } ### while-ikuluuppi loppuu tähän

 # poistetaan stoppifilee, jos semmoisen joku jo hädissään teki
 unlink "$home/munftp.stop" if -f "$home/munftp.stop";

 # sulkeudutaan heheihetyksin
 print "$name sanoo: hehei!\n";

exit 0;

# http://creativecommons.org/licenses/publicdomain/


edit: parannettu painos
« Viimeksi muokattu: 30.10.06 - klo:19.51 kirjoittanut raimo »
Tietä käyden tien on vanki. Vapaa on vain umpihanki.
Aaro Hellaakoski

os_fin

  • Käyttäjä
  • Viestejä: 7
    • Profiili
Re: ftp siirto
« Vastaus #3 : 22.11.06 - klo:22.33 »
Toi ftp homma menikin moni mutkaiseksi  ??? :P Mun pitääkin hakee paketti koneelta a koneelle b , tallentaa se koneelle y b jonka jälkeen paketti heittää koneelle c. Jotta ei menis aivan yksin kertaiseksi niin koneella c pitää ensin muutta edeltävän paketin nimi jonka jälkeen voi uuden paketin heitää koneelle. Tietysti vois tehdä niin et kone a heittää suoraa koneelle c ja b hakee koneelta c. jep jep. Mistä löytyy  muuten parhaa perl itse opiskelu sivut.

-Aloitteleva Linux käyttäjä -

raimo

  • Käyttäjä
  • Viestejä: 4168
  • openSUSE Tumbleweed
    • Profiili
Re: ftp siirto
« Vastaus #4 : 22.11.06 - klo:23.26 »

Mistä löytyy  muuten parhaa perl itse opiskelu sivut.
Kuulostaa mielenkiintoiselta siirtelyoperaatiolta... :)

Joro, "just another lamer in Perliini" on tehnyt loistavan "Perl tutti" -sarjan (suomeksi).
Hyvä itseopiskeluopas, hiukan erikoisesta toteutustavasta huolimatta, tai ehkä juuri siksi. ;)
http://roivas.org/perl/  (http://roivas.org/)
7. osaa täyttä asiaa, lue järjestyksessä että et sekoa järjestyksessä, tai jopa jotenkin muuten. ;D

Loput asiat selvinnee sitten näistä, hiukan perinteisemmin toteutetuista sivustoista:
http://perldoc.perl.org/
http://www.perl.com/pub/q/documentation

Tämä sivusto on minusta kenties jopa paras:
http://www.cs.cf.ac.uk/Dave/PERL/node1.html

edit, hups unohdin Korpelan:
http://www.cs.tut.fi/~jkorpela/perl/per.html
http://www.cs.tut.fi/~jkorpela/perl/course.html
« Viimeksi muokattu: 23.11.06 - klo:00.03 kirjoittanut raimo »
Tietä käyden tien on vanki. Vapaa on vain umpihanki.
Aaro Hellaakoski