LX-SVS-INFO-ftpclient
Updated sep/16/10 7:22
FTP client
FTP is een protocol: File Transfer Protocol. Het bestaat al sedert 1971 (
RFC114) en in zijn huidige vorm sedert 1985 (
RFC959). File transfert is dan ook één van de belangrijkste activiteiten op netwerken. Printen over het netwerk, doe je door een file naar de printer te sturen, bittorrent is een vorm van file transfert, file sharing is een meer intelligente vorm. Maar de basisnoodzaak is in die 40 jaar nooit veranderd: "We willen file A op computer 1 ook op computer 2, en kan dat asjeblief via het netwerk"
Er bestaan heel veel grafische ftp clients. Firefox, Konqueror, FileZilla, gFTP, WS-ftp, ... om er maar een paar te noemen. Ondanks de middelbare leeftijd van dit protocol, is het nog altijd razend populair.
Er bestaan ook talloze ftp clients voor de shell. Midnight Commander, TNftp, lftp en wget om er maar een paar te noemen. In dit hoofdstuk focussen we echter op de standaard ftp client zoals die in 4.2BSD unix zijn intrede deed. Deze ftp client komt standaard voor bij alle linux, bsd en unix versies, Mac en Windows. Wie de moeite doet om deze ftp client onder de knie te krijgen wordt hiervoor beloond met een universele tool die wereldwijd vanop elke netwerkcomputer beschikbaar is.
In mijn voorbeelden maak ik gebruik van het pakket ftp versie 0.17-19build1
Meer weten:
http://en.wikipedia.org/wiki/Ftp
-
ftp gebruiken als anonymous user
Veruit het meeste ftp verkeer gebeurt als anonymous user, om files te downloaden van een publieke server. Zo een publieke server is ftp.belnet.be. Je kan hem bereiken via http, rsync en ftp.
-
ftp starten en inloggen
We voeren de volgende commando's aan de shell prompt uit. Wat we moeten intikken is vetjes weergegeven, wat de server antwoordt, staat schuin.
Tik hetvolgende in:
$ ftp ftp.belnet.be
Connected to hydra.belnet.be.
220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
This archive is provided through a cluster of 12 double dual cores Intel Xeon 3 GHz processors machines, each having 4 GB of RAM. The 16 TB FTP archives is taken from an iSCSI SATA SAN.
This cluster is located in Brussels, Belgium and operated by BELNET, the belgian Education and Research Network. If you have any problem, question or mirror request, please send them to ftpmaint@belnet.be
This archive is also available through the following means:
RSYNC rsync.belnet.be (IPv4)
HTTP http://ftp.belnet.be (IPv4 + IPv6)
FTP ftp://ftp.belnet.be (IPv4 + IPv6)
Note: opening too many parallel connections to this host is considered an abuse.
Currently used storage capacity : 15T
220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
Name (ftp.belnet.be:jan): anonymous
331 Anonymous login ok, send your complete email address as your password
Password: whateveryouwant
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.
$
De server wacht nu op een reactie van ons met de ftp> prompt.
We tikken geen url in zoals bij firefox of bij wget maar gewoon het commando ftp gevolgd door de servernaam of zijn ip-adres.
De server geeft dan een heleboel informatie over zichzelf, en over wat er mag gebeuren door wie.
Dan vraagt hij om een usernaam. In ons geval loggen we in als anonymous.
Welk paswoord dat we daarna intikken heeft bij ftp.belnet.be geen enkel belang. Bij sommige ftp-servers wordt een email-adres gevraagd als paswoord, maar om spam te vermijden tik je dan best iets in van de vorm napoleon@france.fr
Om ftp te verlaten tikken we quit.
Een ftp server is altijd beleefd en geeft een leesbaar antwoordt na elke <ENTER> van jouw kant. Voor jouw client software geeft de server ook nog een drie cijferige code mee. Die hebben we in het hogere voorbeeld onderlijnd weergegeven.
Meer over deze codes vind je hier:
http://en.wikipedia.org/wiki/List_of_FTP_server_return_codes
Soms gebeurt het dat we een tikfout maken bij de servernaam. Bekijk even het volgende voorbeeld:
$ ftp ft.belnet.be
ftp: ft.belnet.be: Unknown host
ftp> open ftp.belnet.be
Connected to hydra.belnet.be.
220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
...
ftp> close
221 Goodbye.
ftp>
Na de melding unknown host, blijft de ftp prompt wachten op je commando's. In plaats van quit in te tikken en van vooraf aan te herbeginnen kunnen we de verbinding openen met het open commando. Indien we een sessie afsluiten met close, blijft de ftp prompt staan.
-
wat nu: ?
Welke commando's je in ftp allemaal ter beschikking hebt zie je als je het vraagteken "?" intikt aan de ftp prompt:
$ ftp
ftp> ?
Commands may be abbreviated. Commands are:
! debug mdir qc send
$ dir mget sendport site
account disconnect mkdir put size
append exit mls pwd status
ascii form mode quit struct
bell get modtime quote system
binary glob mput recv sunique
bye hash newer reget tenex
case help nmap rstatus tick
cd idle nlist rhelp trace
cdup image ntrans rename type
chmod lcd open reset user
close ls prompt restart umask
cr macdef passive rmdir verbose
delete mdelete proxy runique ?
ftp>
Indien je meer informatie wenst over één specifiek ftp-commando, kun je hulp opvragen als volgt:
ftp> ? close
close terminate ftp session
ftp> ? quit
quit terminate ftp session and exit
ftp> ? exit
exit terminate ftp session and exit
ftp> ? bye
bye terminate ftp session and exit
In de man pagina's staat er echter meer uitleg:
$ man ftp
FTP(1) BSD General Commands Manual FTP(1)
NAME
ftp — Internet file transfer program
SYNOPSIS
ftp [-pinegvd] [host [port]]
pftp [-inegvd] [host [port]]
DESCRIPTION
Ftp is the user interface to the Internet standard File Transfer Protocol. The program allows a user to transfer files to and from a remote network site.
Options may be specified at the command line, or to the command interpreter.
...
close Terminate the FTP session with the remote server, and return
to the command interpreter. Any defined macros are erased.
bye Terminate the FTP session with the remote server and exit
ftp. An end of file will also terminate the session and exit.
-
ls / dir / cd
Het leren werken met de ftp prompt is gelukkig niet zo moeilijk. De commando's zijn unix achtig. De root directory is gewoon / en de directories zijn van mekaar gescheiden door diezelfde forward slash "/"
Eén van de eerste dingen die we willen doen op een onbekende server, is kijken wat er allemaal op zo'n server staat. Dat doen we met het commando ls. Naar een andere directory hoppen doen we met cd. dir doet hetzelfde als ls. Met pwd vinden we terug waar we ons op dat ogenblik in de directoryhiërarchie van de server bevinden.
ftp> open ftp.belnet.be
Connected to hydra.belnet.be.
220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
Name (ftp.belnet.be:jan): anonymous
331 Anonymous login ok, send your complete email address as your password
Password: ********
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
lrw-r--r-- 1 ftp ftp 28 Jun 17 2009 debian -> mirror/ftp.debian.org/debian
-rw-r--r-- 1 ftp ftp 0 Mar 4 2010 keepalive.txt
drwxr-xr-x 96 ftp ftp 4096 May 21 18:30 mirror
lrw-r--r-- 1 ftp ftp 6 Jun 17 2009 mirrors -> mirror
drwxr-xr-x 2 ftp ftp 4096 May 10 08:35 packages
lrw-r--r-- 1 ftp ftp 1 Jun 17 2009 pub -> .
226 Transfer complete
ftp> dir
200 PORT command successful
150 Opening ASCII mode data connection for file list
lrw-r--r-- 1 ftp ftp 28 Jun 17 2009 debian -> mirror/ftp.debian.org/debian
-rw-r--r-- 1 ftp ftp 0 Mar 4 2010 keepalive.txt
drwxr-xr-x 96 ftp ftp 4096 May 21 18:30 mirror
lrw-r--r-- 1 ftp ftp 6 Jun 17 2009 mirrors -> mirror
drwxr-xr-x 2 ftp ftp 4096 May 10 08:35 packages
lrw-r--r-- 1 ftp ftp 1 Jun 17 2009 pub -> .
226 Transfer complete
ftp> cd mirror
250 CWD command successful
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
drwxr-xr-x 2 ftp ftp 4096 Jun 17 2009 BELNET-honeypot
drwxr-xr-x 8 ftp ftp 4096 Sep 15 10:00 FOSDEM
-rw-r--r-- 1 ftp ftp 853 Sep 15 20:00 HEADER.html
drwxr-xr-x 2 ftp ftp 4096 Jun 17 2009 Mandrakelinux
drwxr-xr-x 5 ftp ftp 4096 Sep 15 01:00 PortablePython
drwxr-xr-x 5 ftp ftp 4096 May 16 2006 apt.bxlug.be
drwxr-xr-x 11 ftp ftp 507904 Apr 4 13:27 archlinux.org
drwxr-xr-x 8 ftp ftp 4096 May 1 13:43 backports.org
drwxr-xr-x 2 ftp ftp 4096 Mar 4 2010 backtrack
drwxr-xr-x 4 ftp ftp 4096 May 8 06:07 baron.haiku-os.org
drwxr-xr-x 3 ftp ftp 4096 Jun 17 2009 blastwave.org
drwxr-xr-x 3 ftp ftp 4096 Jun 17 2009 cdimage.ubuntu.com
...
drwxr-xr-x 23 ftp ftp 4096 Sep 14 04:05 www.tldp.org
drwxr-xr-x 4 ftp ftp 4096 Jun 23 2009 xorp.org
drwxr-xr-x 4 ftp ftp 4096 Apr 7 14:33 yoper.com
226 Transfer complete
ftp> cd ..
250 CWD command successful
ftp> pwd
257 "/" is the current directory
ftp> quit
221 Goodbye.
-
passive or not passive
Soms lukt de verbinding met een ftp-server wel, maar zodra we het commando ls intikken gaat er wat fout. De machine van waarop we de volgende ftp sessie draaien staat achter een firewall.
jan@gogo1:~$ ftp ftp.belnet.be
Connected to hydra.belnet.be.
220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
Name (ftp.belnet.be:jan): anonymous
331 Anonymous login ok, send your complete email address as your password
Password: <ENTER>
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful
Na "200 PORT command successful" gebeurt er niets meer. We wachten ongeveer een minuut en drukken dan ongeduldig <CTRL><C>.
^C
421 Service not available, remote server has closed connection
receive aborted
waiting for remote to finish abort
Het probleem vindt zijn oorzaak in het ftp protocol zelf: bij het downloaden (en met ls wordt de catalog van een directory gedownload) is het de server die het initiatief neemt om een sessie open te zetten naar de client, en NAT-routers houden dit standaard tegen.
Met het commando passive, draaien we de synchronisatie om: de server biedt een socket aan om op te verbinden, en de client initialiseert de verbinding:
ftp> open ftp.belnet.be
Connected to hydra.belnet.be.
220-Welcome to the BELNET public FTP cluster server ftp.belnet.be !
220 ProFTPD 1.3.2 Server (BELNET FTPD Server) [193.190.67.15]
Name (ftp.belnet.be:jan): anonymous
331 Anonymous login ok, send your complete email address as your password
Password: <enter>
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> ls
227 Entering Passive Mode (193,190,67,15,201,218).
150 Opening ASCII mode data connection for file list
lrw-r--r-- 1 ftp ftp 28 Jun 17 2009 debian -> mirror/ftp.debian.org/debian
-rw-r--r-- 1 ftp ftp 0 Mar 4 2010 keepalive.txt
drwxr-xr-x 96 ftp ftp 4096 May 21 18:30 mirror
lrw-r--r-- 1 ftp ftp 6 Jun 17 2009 mirrors -> mirror
drwxr-xr-x 2 ftp ftp 4096 May 10 08:35 packages
lrw-r--r-- 1 ftp ftp 1 Jun 17 2009 pub -> .
226 Transfer complete
ftp>
-
downloaden met get en mget
Het doel van anonymous ftp is meestal een download. Dat doen we met het commando get.
ftp> pwd
257 "/mirror/ftp.debian.org/debian/pool/contrib/g/googleearth-package" is the current directory
ftp> ls
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 ftp ftp 835 Apr 18 2008 googleearth-package_0.5.4.dsc
-rw-r--r-- 1 ftp ftp 19720 Apr 18 2008 googleearth-package_0.5.4.tar.gz
-rw-r--r-- 1 ftp ftp 9428 Apr 18 2008 googleearth-package_0.5.4_all.deb
-rw-r--r-- 1 ftp ftp 943 Dec 8 2009 googleearth-package_0.5.7.dsc
-rw-r--r-- 1 ftp ftp 21418 Dec 8 2009 googleearth-package_0.5.7.tar.gz
-rw-r--r-- 1 ftp ftp 10696 Dec 8 2009 googleearth-package_0.5.7_all.deb
226 Transfer complete
ftp> get googleearth-package_0.5.7_all.deb
local: googleearth-package_0.5.7_all.deb remote: googleearth-package_0.5.7_all.deb
200 PORT command successful
150 Opening BINARY mode data connection for googleearth-package_0.5.7_all.deb (10696 bytes)
226 Transfer complete
10696 bytes received in 0.24 secs (43.5 kB/s)
Dat werkt goed, maar get houdt niet van wildcards. Indien we meerdere files willen downloaden met gebruik van wildcards, gebruiken we mget.
ftp> get *
local: 01_123.jpg remote: *
200 PORT command successful
550 *: No such file or directory
ftp> mget *
mget googleearth-package_0.5.4.dsc? y
200 PORT command successful
150 Opening BINARY mode data connection for googleearth-package_0.5.4.dsc (835 bytes)
226 Transfer complete
835 bytes received in 0.02 secs (36.3 kB/s)
mget googleearth-package_0.5.4.tar.gz? y
200 PORT command successful
150 Opening BINARY mode data connection for googleearth-package_0.5.4.tar.gz (19720 bytes)
226 Transfer complete
19720 bytes received in 0.38 secs (50.6 kB/s)
...
Het vervelende van mget is dat het telkens om bevestiging vraagt. Na het commando prompt off vraagt mget dat niet meer:
ftp> prompt off
Interactive mode off.
ftp> mget *
local: googleearth-package_0.5.4.dsc remote: googleearth-package_0.5.4.dsc
200 PORT command successful
150 Opening BINARY mode data connection for googleearth-package_0.5.4.dsc (835 bytes)
226 Transfer complete
835 bytes received in 0.01 secs (116.7 kB/s)
local: googleearth-package_0.5.4.tar.gz remote: googleearth-package_0.5.4.tar.gz
200 PORT command successful
150 Opening BINARY mode data connection for googleearth-package_0.5.4.tar.gz (19720 bytes)
226 Transfer complete
19720 bytes received in 0.10 secs (185.4 kB/s)
...
ftp>
-
ascii en binary
Als we wat downloaden met get of mget gaat ftp er meestal van uit dat het om 'binary' files gaat. Indien we echter tekstfiles willen downloaden, komt het EOF karakter in binary mode niet altijd goed mee. Om hieraan te verhelpen kunnen we de download mode switchen tussen binary en ascii. Met het commando type brengen we de download mode op scherm.
Kijk even naar het volgende voorbeeld:
...
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ascii
200 Type set to A
ftp> type
Using ascii mode to transfer files.
ftp> binary
200 Type set to I
ftp> type
Using binary mode to transfer files.
ftp>
-
wget als alternatief
Met de utility wget lukt een ftp download dikwijls beter dan met ftp zelf. Bij een onverwacht verbreken van de verbinding, herstelt wget deze eigenhandig, en downloadt hij verder vanaf het punt waar hij reeds gekomen was. wget is een één-regel-commando dat zich via echo makkelijk laat 'pipen' naar at. Op die manier kunnen we een download schedulen.
$ wget ftp://ftp.debian.org/debian/pool/contrib/g/googleearth-package/*
--2010-09-16 00:13:06-- ftp://ftp.debian.org/debian/pool/contrib/g/googleearth-package/*
=> `.listing'
Resolving ftp.debian.org... 130.89.149.226, 2001:610:1908:a000::149:226
Connecting to ftp.debian.org|130.89.149.226|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /debian/pool/contrib/g/googleearth-package ... done.
==> PASV ... done. ==> LIST ... done.
[ <=> ] 655 --.-K/s in 0s
2010-09-16 00:13:06 (90.7 MB/s) - `.listing' saved [655]
Removed `.listing'.
--2010-09-16 00:13:06-- ftp://ftp.debian.org/debian/pool/contrib/g/googleearth-package/googleearth-package_0.5.4.dsc
=> `googleearth-package_0.5.4.dsc'
==> CWD not required.
==> PASV ... done. ==> RETR googleearth-package_0.5.4.dsc ... done.
Length: 835
100%[==========================================================>] 835 --.-K/s in 0.008s
...
$ echo "wget ftp://ftp.belnet.be/mirror/linuxmint/linuxmint-debian-201009-gnome-dvd-i386.iso" | at now +100 minutes
warning: commands will be executed using /bin/sh
job 4 at Thu Sep 16 01:57:00 2010
-
ftp gebruiken op je webserver of je eigen multi-purpose ftp-server
Naast het gebruik als downloadmotor van alles en nog wat als anonymous user, wordt ftp ook bijna overal ingezet als updatemotor van websites. Je krijgt dan een account (username en paswoord) waarmee je kan inloggen. In je eigen root-directory heb je dan upload, create en delete rechten, en bijgevolg meer commando's. Je kan natuurlijk ook een gewone ftp account hebben, ergens, in je organisatie, ... of je draait zelf een server.
Bij het uploaden gebeurt het veel vaker, dat je de lokale directorystructuur wenst te doorbladeren. Daarvoor zijn er enkele commando's beschikbaar. Die gaan we even testen.
Tot slot bekijken we ook enkele manieren om ftp te gebruiken vanuit een script, om zo sneller updates te kunnen uitvoeren.
-
inloggen
Inloggen is hetzelfde voor elke user, ook anonymous. Al is het natuurlijk wel belangrijk dat je een veilig paswoord gebruikt bij je persoonlijke account.
Als je inlogt als anonymous kom je dikwijls in een directory /pub terecht. Gewone gebruikers komen eerder in een chrooted /home/<username> soort van directory terecht (al kun je daarvan het path niet zomaar zien). De chroot zorgt ervoor dat andere gebruikers jouw directory niet kunnen zien, en jij de directories van een ander niet.
Een voorbeeld:
$ ftp ftp.lx800.be
Connected to ftp.lx800.be.
220 "Stand and deliver, login or be assimilated ..."
Name (ftp.lx800.be:piet): jan
331 Please specify the password.
Password: <password>
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1004 100 80 Sep 16 16:31 Documents
drwxr-xr-x 2 1004 100 48 Sep 16 16:31 bin
drwxr-xr-x 2 1004 100 80 Sep 16 16:31 public_html
226 Directory send OK.
ftp> ls public_html
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> quit
221 Goodbye.
Nu gebeurt het wel eens dat we een tikfout maken in ons paswoord, of zelfs in onze gebruikersnaam. ftp verlaten is dan niet nodig. Met het commando user proberen we gewoon opnieuw:
...
Name (ftp.lx800.be:piet): jan
331 Please specify the password.
Password: <verkeerd>
530 Login incorrect.
Login failed.
ftp> user jan
331 Please specify the password.
Password: <password>
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
...
-
cd en lcd
Het commando cd wordt uitgevoerd op de ftp server. Maar als we files willen uploaden, moeten we soms ook lokaal van directory wisselen. Dat doen we met lcd. Een voorbeeld:
ftp> lcd
Local directory now /home/www/linux800
ftp> lcd ..
Local directory now /home/www
ftp> lcd
Local directory now /home/www
ftp> cd public_html
250 Directory successfully changed.
ftp> pwd
257 "/public_html"
ftp>
Het voorbeeld verduidelijkt de werking. lcd ingetikt zonder argument, brengt de lokale directory op scherm. Dit is verglijkbaar met het commando pwd op de server. Omdat we aan de commandprompt niet kunnen zien waar we ons lokaal noch remote bevinden, zullen we regelmatig pwd en lcd moeten intikken.
-
!
Aan de ftp prompt heeft het uitroepteken een speciale betekenis. Het gaat commando's vooraf die uitgevoerd worden in de lokale shell. We kunnen dus met !ls zien wat er op onze lokale directory te vinden is. Met !vim <filenaam> kunnen we nog snel een file editeren, we kunnen een pas afgehaald bestand met !mv op een andere plaats zetten, enz.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1004 100 80 Sep 16 16:31 Documents
drwxr-xr-x 2 1004 100 48 Sep 16 16:31 bin
drwxr-xr-x 2 1004 100 80 Sep 16 16:31 public_html
226 Directory send OK.
ftp> cd public_html
250 Directory successfully changed.
ftp> lcd
Local directory now /home/www/linux800
ftp> !ls *ftp*
lx-svs-info-ftpclient.html
lx-svs-info-vsftpd.php
lx-svs-prak-vsftpd.html
lx-svs-info-ftpclient.php
lx-svs-info-vsftpd-virtualhosts.html
lx-svs-prak-vsftpd.php
lx-svs-info-vsftpd.html
lx-svs-info-vsftpd-virtualhosts.php
ftp> mput lx-svs-info-*virt*
mput lx-svs-info-apache2-virtualhosts.html? n
mput lx-svs-info-apache2-virtualhosts.php? n
mput lx-svs-info-vsftpd-virtualhosts.html? y
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
4175 bytes sent in 0.01 secs (752.9 kB/s)
mput lx-svs-info-vsftpd-virtualhosts.php? y
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
521 bytes sent in 0.00 secs (2469.8 kB/s)
ftp> quit
221 Goodbye.
-
zeven commando's
put, mput, delete, mdelete, mkdir, rmdir, chmod zijn zeven commando's die je nodig hebt om structuren aan te maken, te beheren en te verwijderen op je server. Het gebruik van deze commando's ligt voor de hand. Voor mput verwijs ik naar het voorbeeld in de vorige paragraaf.
Voor de zes andere commando's nog een kort voorbeeld:
ftp> cd public_html
250 Directory successfully changed.
ftp> lcd
Local directory now /home/www/linux800
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 1004 100 4175 Sep 16 17:33 lx-svs-info-vsftpd-virtualhosts.html
-rw------- 1 1004 100 521 Sep 16 17:33 lx-svs-info-vsftpd-virtualhosts.php
226 Directory send OK.
ftp> chmod 644 lx-svs-info-vsftpd-virtualhosts.php
200 SITE CHMOD command ok.
ftp> put index.php
local: index.php remote: index.php
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
495 bytes sent in 0.01 secs (84.6 kB/s)
ftp> chmod 644 index.php
200 SITE CHMOD command ok.
ftp> mkdir test
257 "/public_html/test" created
ftp> mkdir jpgs
257 "/public_html/jpgs" created
ftp> rmdir test
250 Remove directory operation successful.
ftp> mdelete *virtual*
mdelete lx-svs-info-vsftpd-virtualhosts.html? y
250 Delete operation successful.
mdelete lx-svs-info-vsftpd-virtualhosts.php? y
250 Delete operation successful.
ftp> delete index.php
250 Delete operation successful.
-
not interactive mode met switches / wput
Wie veel ftp uploads doet, wordt het tikken van servernaam, usernaam, paswoord en directory al snel beu. Kunnen we ftp opnemen in een script?
Dat kan, maar wees zeer voorzichtig met het opnemen van je paswoord in zo'n script. Zorg dat alleen jij leesrechten hebt op je script. Zorg dat het zich in een directory bevindt waar alleen jijzelf leesrechten hebt.
#!/bin/bash
HOST='ftp.lx800.be'
USER='jan'
PASSWD='sdf12345'
FILE=$1
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd httpdocs
put $FILE
quit
END_SCRIPT
wput is een ander paar mouwen. Hoewel het gebruik van wput veel makkelijker is dan het script van hierboven, is het nog onveiliger.
gebruik:
$ wput filenaam ftp://user:password@ftp.example.com/httpdocs/
voorbeeld:
$ wput -uv lx-svs-info-vsftpd.php \
> ftp://jan:sdf12345@ftp.lx800.be/httpdocs/
--21:43:45-- `lx-svs-info-vsftpd.php'
=> ftp://ftp.lx800_be:xxxxx@97.13.196.2:21/httpdocs/lx-svs-info-vsftpd.php
Connecting to 97.13.196.2:21... connected!
==> AUTH TLS ... failed (AUTH not understood).
Logging in as jan ... Logged in!
==> CWD httpdocs
==> TYPE I ... done.
==> SIZE lx-svs-info-vsftpd.php ... done (508 bytes)
Remote file size is equal to local size. Restarting at 0
==> PASV ... done.
==> STOR lx-svs-info-vsftpd.php ... done.
Length: 508
21:43:45 (lx-svs-info-vsftpd.php) - `10.38K/s' [508]
FINISHED --21:43:45--
Transfered 508 bytes in 1 file at 2.23K/s
Wat er nu precies zo onveilig is aan dit script: je paswoord komt terecht in .bash_history en iemand die ps -aux intikt op dezelfde computer terwijl wput loopt ziet jouw hele commando, inclusief je paswoord.
Gebruik wput dan ook alleen op je eigen single user pc.
Meer info over wput:
http://www.debuntu.org/2006/04/07/21-wget-wput-or-how-to-easily-download-upload-over-internet
-
appendix:
-
ftp onder microsoft
http://www.nsftools.com/tips/MSFTP.htm
-
alle ftp commando's
De in deze tekst behandelde commando's staan vetjes:
! escape to the shell
? print local help information
$ execute macro
account send account command to remote server
append append to a file
ascii set ascii transfer type
bell beep when command completed
binary set binary transfer type
bye terminate ftp session and exit
case toggle mget upper/lower case id mapping
cd change remote working directory
cdup change remote working directory to parent directory
chmod change file permissions of remote file
close terminate ftp session
cr toggle carriage return stripping on ascii gets
debug toggle/set debugging mode
delete delete remote file
dir list contents of remote directory
disconnect terminate ftp session
exit terminate ftp session and exit
form set file transfer format
get receive file
glob toggle metacharacter expansion of local file names
hash toggle printing `#' for each buffer transferred
help print local help information
idle get (set) idle timer on remote side
image set binary transfer type
lcd change local working directory
ls list contents of remote directory
macdef define a macro
mdelete delete multiple files
mdir list contents of multiple remote directories
mget get multiple files
mkdir make directory on the remote machine
mls list contents of multiple remote directories
mode set file transfer mode
modtime show last modification time of remote file
mput send multiple files
newer get file if remote file is newer than local file
nlist nlist contents of remote directory
nmap set templates for default file name mapping
ntrans set translation table for default file name mapping
open connect to remote ftp
passive enter passive transfer mode
prompt force interactive prompting on multiple commands
proxy issue command on alternate connection
put send one file
pwd print working directory on remote machine
qc print ? in place of control characters on stdout
quit terminate ftp session and exit
quote send arbitrary ftp command
recv receive file
reget get file restarting at end of local file
rename rename file
reset clear queued command replies
restart restart file transfer at bytecount
rhelp get help from remote server
rmdir remove directory on the remote machine
rstatus show status of remote machine
runique toggle store unique for local files
send send one file
sendport toggle use of PORT cmd for each data connection
site send site specific command to remote server; try "rhelp site" or "site help" for more information
size show size of remote file
status show current status
struct set file transfer structure
sunique toggle store unique on remote machine
system show remote system type
tenex set tenex file transfer type
tick toggle printing byte counter during transfers
trace toggle packet tracing
type set file transfer type
umask get (set) umask on remote side
user send new user information
verbose toggle verbose mode