624 lines
19 KiB
Plaintext
624 lines
19 KiB
Plaintext
FTP mini-HOWTO
|
||
Matthew Borowski (mkb@yahoo.com )
|
||
v0.2, 9 January 2000
|
||
|
||
How to use ftp clients and servers
|
||
______________________________________________________________________
|
||
|
||
Table of Contents
|
||
|
||
|
||
1. Preamble
|
||
|
||
1.1 Contacting Me
|
||
1.2 Legalities and Distribution
|
||
1.3 History of this document
|
||
|
||
2. About FTP
|
||
|
||
3. Beginner's guide to using ftp
|
||
|
||
3.1 Running the
|
||
3.2 Logging into an FTP server
|
||
3.3 File transfer types
|
||
3.4 Navigating and listing directories
|
||
3.5 Downloading and uploading files
|
||
3.6 Running shell commands
|
||
3.7 Hash marks and tick
|
||
3.8 Other ftp commands
|
||
|
||
4. Console FTP clients
|
||
|
||
4.1 NcFTP
|
||
4.2 lukemftp
|
||
4.3 lftp
|
||
4.4 cftp
|
||
4.5 yafc
|
||
|
||
5. X Window FTP clients
|
||
|
||
5.1 gFTP
|
||
5.2 WXftp
|
||
5.3 LLNL XDIR and XFTP
|
||
5.4 guiftp
|
||
|
||
6. FTP Servers
|
||
|
||
6.1 How an FTP Server works
|
||
6.2 Help with FTP Servers
|
||
6.2.1 WU-FTPD
|
||
6.2.2 ProFTPD
|
||
|
||
|
||
______________________________________________________________________
|
||
|
||
1. Preamble
|
||
|
||
This document was written by Matthew Borowski for the Linux
|
||
Documentation Project. I have not yet finished adding everything I
|
||
want to add. There will be a section with information on operating an
|
||
FTP server.
|
||
|
||
|
||
1.1. Contacting Me
|
||
|
||
Please contact me if you have any additions or changes for this
|
||
document. Please do not ask for technical support -- you may purchase
|
||
Unix consulting and support through my company, WorldServe, or you can
|
||
ask for help on newsgroups such as comp.os.linux.*. Please also keep
|
||
in mind that I can only understand English and Farsi.
|
||
|
||
|
||
1.2. Legalities and Distribution
|
||
|
||
This document is Copyright 1999 by Matthew Borowski. You may freely
|
||
distribute this document as long as the copyright notice remains
|
||
unaltered. If you distribute this HOWTO as part of a commercial
|
||
product, I would like to recieve a copy, but this is not required. If
|
||
you wish to distribute a modified or translated version of this
|
||
document, please contact me first for permission.
|
||
|
||
|
||
1.3. History of this document
|
||
|
||
|
||
<20> 991203: FTP HOWTO first written. Still a work-in-progress.
|
||
|
||
|
||
2. About FTP
|
||
|
||
FTP (File Transfer Protocol) is a client/server protocol that allows a
|
||
user to transfer files to and from a remote network site. It works
|
||
with TCP and is most commonly used on the Internet, although it can
|
||
also be used on a LAN.
|
||
|
||
|
||
An FTP site is a computer that is running FTP server software (also
|
||
known an FTP daemon, or ftpd). A public ftp site can usually be
|
||
accessed by anybody by logging in as anonymous or ftp. There are many
|
||
excellent public ftp sites that make repositories of free Unix
|
||
software available. By learning how to use FTP, you give yourself
|
||
access to an indespensible resource.
|
||
|
||
|
||
Private FTP sites require a user name or password. If you have a shell
|
||
account with your ISP, you may be able to access your files via FTP
|
||
(contact your system administrator to check on this).
|
||
|
||
|
||
An FTP client is the userland application that provides access to FTP
|
||
servers. There are many FTP clients available. Some are graphical, and
|
||
some are text-based.
|
||
|
||
|
||
FTP was first developed by the University of California, Berkeley for
|
||
inclusion in 4.2BSD (Berkeley Unix). The RFC (Request for Comments) is
|
||
available at .
|
||
|
||
|
||
3. Beginner's guide to using ftp
|
||
|
||
A quick guide to using ftp.
|
||
|
||
|
||
The standard ftp program is the original ftp client. It comes standard
|
||
with most Linux distributions. It first appeared in 4.2BSD, which was
|
||
developed by the University of California, Berkeley.
|
||
|
||
|
||
3.1. Running the ftp program
|
||
|
||
It's easy to use ftp. Let's say you want to connect to the anonymous
|
||
ftp site metalab.unc.edu, to download the latest Linux kernel source.
|
||
At the command line, type:
|
||
|
||
|
||
|
||
$ ftp metalab.unc.edu
|
||
|
||
|
||
|
||
The ftp program will attempt to connect to metalab.unc.edu. Another
|
||
way to do this is to run ftp from the command line with no parameters,
|
||
and use the open command, with the site name as an argument:
|
||
|
||
|
||
|
||
$ ftp
|
||
ftp> open metalab.unc.edu
|
||
|
||
|
||
|
||
3.2. Logging into an FTP server
|
||
|
||
When you connect to an FTP site, it will ask you for a login (pressing
|
||
enter will log in as your local user name, in this case, foo: We log
|
||
in as anonymous or ftp, to get to the public archive.
|
||
|
||
|
||
|
||
220 helios.oit.unc.edu FTP server (Version wu-2.6.0(2) Wed Nov 17 14:44:12
|
||
EST 1999) ready.
|
||
Name (metalab.unc.edu:foo):
|
||
|
||
|
||
|
||
Now, we enter a complete e-mail address as the password (this is what
|
||
most public FTP sites request).
|
||
|
||
|
||
|
||
331 Guest login ok, send your complete e-mail address as password.
|
||
Password:
|
||
|
||
|
||
|
||
After a successful login, the following information is given to us:
|
||
|
||
|
||
|
||
Remote system type is UNIX.
|
||
Using binary mode to transfer files.
|
||
ftp>
|
||
|
||
|
||
|
||
3.3. File transfer types
|
||
|
||
After you log in to an ftp site, ftp will print out the file transfer
|
||
type. In our case, it is binary. Binary mode transfers the files, bit
|
||
by bit, as they are on the FTP server. Ascii mode, however, will
|
||
download the text directly. You can type ascii or binary to switch
|
||
between the types.
|
||
|
||
|
||
You want to download the kernel source, so you leave the file transfer
|
||
type at binary. The binary type is also what you would use for any
|
||
non-text files -- such as graphic images, zip/gzip archives,
|
||
executable programs, etc. If in doubt, use binary mode.
|
||
|
||
|
||
|
||
3.4. Navigating and listing directories
|
||
|
||
You do an ls to see a list of the files. The ls command on ftp servers
|
||
is executed on the remote server, so the command line options that you
|
||
can use with it vary from server to server. The most common options
|
||
are generally available, check the manpage for ls for details.
|
||
|
||
|
||
|
||
ftp> ls
|
||
200 PORT command successful.
|
||
150 Opening ASCII mode data connection for /bin/ls.
|
||
total 33590
|
||
-r--r--r-- 1 root other 34348506 Dec 03 03:53 IAFA-LISTINGS
|
||
lrwxrwxrwx 1 root other 7 Jul 15 1997 README -> WELCOME
|
||
-rw-r--r-- 1 root other 890 Nov 15 13:11 WELCOME
|
||
dr-xr-xr-x 2 root other 512 Jul 15 1997 bin
|
||
dr-xr-xr-x 2 root other 512 Jul 15 1997 dev
|
||
dr-xr-xr-x 2 root other 512 Jul 18 1997 etc
|
||
drwxrwxrwx 11 ftp 20 4608 Nov 28 16:00 incoming
|
||
lrwxrwxrwx 1 root other 13 Jun 04 1998 ls-lR -> IAFA-LISTINGS
|
||
dr-xr-xr-x 17 root root 512 Jun 08 11:43 pub
|
||
dr-xr-xr-x 3 root other 512 Jul 15 1997 unc
|
||
dr-xr-xr-x 5 root other 512 Jul 15 1997 usr
|
||
226 Transfer complete.
|
||
|
||
|
||
|
||
If the ls command lists so many files that they scroll off the top of
|
||
the screen, you can use Shift-PageUp to scroll up. This works in Linux
|
||
console mode as well as in xterm or rxvt.
|
||
|
||
|
||
On public FTP archives, the downloadable resources are usually held in
|
||
the /pub directory. In this example, you already know that the kernel
|
||
sources are in the directory /pub/Linux/kernel, so you type the
|
||
following to get into that directory:
|
||
|
||
|
||
|
||
ftp> cd pub/Linux/kernel
|
||
250-README for kernel
|
||
250-
|
||
250-What you'll find here: kernel sources and patches
|
||
250-
|
||
250-
|
||
250 CWD command successful.
|
||
|
||
The messages you see, which begin with "250", are information messages
|
||
sent by the server. In this case, the ftp server is configured to
|
||
automatically send you the README file when you cd into the directory.
|
||
|
||
|
||
3.5. Downloading and uploading files
|
||
|
||
Now, after doing another ls, you see that you want to cd into the v2.2
|
||
directory. You do yet another ls, and find the file you want to
|
||
download. It is linux-2.2.13.tar.gz. So you type this:
|
||
|
||
|
||
|
||
ftp> get linux-2.2.13.tar.gz
|
||
local: linux-2.2.13.tar.gz remote: linux-2.2.13.tar.gz
|
||
200 PORT command successful.
|
||
150 Opening BINARY mode data connection for linux-2.2.13.tar.gz (15079540
|
||
bytes).
|
||
|
||
|
||
|
||
The ftp program has started saving the remote file linux-2.2.13.tar.gz
|
||
as the local file linux-2.2.13.tar.gz.
|
||
|
||
|
||
If you wanted to save it as the local file foo.tar.gz, you could have
|
||
specified it like this:
|
||
|
||
|
||
|
||
ftp> get linux-2.2.13.tar.gz foo.tar.gz
|
||
local: foo.tar.gz remote: linux-2.2.13.tar.gz
|
||
200 PORT command successful.
|
||
150 Opening BINARY mode data connection for linux-2.2.13.tar.gz (15079540
|
||
bytes).
|
||
|
||
|
||
|
||
If you want to download more than one file at a time, you'll have to
|
||
use the mget (multiple get) command. You can use mget together with a
|
||
space-delimited list of filenames you want to download, or you can use
|
||
wildcards with the mget command. For example:
|
||
|
||
|
||
|
||
ftp> mget linux*
|
||
|
||
|
||
|
||
Would get all files starting with the string "linux". Normally, mget
|
||
will prompt you for each file before it downloads it. You can toggle
|
||
this by using the prompt command.
|
||
|
||
|
||
Now let's say you've written a piece of software, and you want to
|
||
upload it to MetaLab to be included in their Linux software archive.
|
||
First, you'd change to the /incoming directory (most public FTP
|
||
servers have a directory, usually called incoming or uploads, where
|
||
files can be uploaded), then you'd use the put command:
|
||
|
||
ftp> cd /incoming
|
||
ftp> put foo.tar.gz
|
||
local: foo.tar.gz remote: foo.tar.gz
|
||
200 PORT command successful.
|
||
150 Opening BINARY mode data connection for foo.tar.gz.
|
||
226 Transfer complete.
|
||
10257 bytes sent in 0.00316 secs (3.2e+03 Kbytes/sec)
|
||
|
||
|
||
|
||
The put command works the same way as the get command, so you can use
|
||
mput to upload multiple files at the same time. You can also upload a
|
||
local file with a different filename on the server by specifying the
|
||
remote filename and/or pathname as an argument.
|
||
|
||
|
||
What if the file foo.tar.gz is not in your current local directory
|
||
when you try to upload it? You can switch local directories by using
|
||
the lcd (local change directory) command:
|
||
|
||
|
||
|
||
ftp> lcd /home/foo/
|
||
Local directory now /home/foo
|
||
|
||
|
||
|
||
3.6. Running shell commands
|
||
|
||
The ftp client supports using the bang (!) to run local commands. For
|
||
example, to get a listing of files in your current local directory, do
|
||
this:
|
||
|
||
|
||
|
||
ftp> !ls
|
||
|
||
|
||
|
||
The way this works is that ftp calls the shell (specified in the
|
||
$SHELL environment variable), and it is the shell which runs ls. Thus,
|
||
you can run any command-line which works with your shell simply by
|
||
prepending "!" to it (the default shell in most Linux distributions is
|
||
bash, the Bourne Again SHell). Please note that !cd does not work as
|
||
you would expect, this is why the lcd command exists.
|
||
|
||
|
||
3.7. Hash marks and tick
|
||
|
||
Wouldn't it be nice if you could watch the progress while you're
|
||
downloading a file with ftp? You can use the hash command to print out
|
||
hash marks as you download a file:
|
||
|
||
|
||
|
||
ftp> hash
|
||
Hash mark printing on (1024 bytes/hash mark).
|
||
|
||
|
||
|
||
As you can tell, ftp will print a hash mark for every 1024 bytes of
|
||
data you download.
|
||
|
||
|
||
There is also a tick option.
|
||
|
||
|
||
|
||
ftp> tick
|
||
Tick counter printing on (10240 bytes/tick increment).
|
||
|
||
This will print something to this effect as you download a file:
|
||
|
||
Bytes transferred: 11680
|
||
|
||
|
||
|
||
3.8. Other ftp commands
|
||
|
||
There are many other ftp commands. If you have the permissions to do
|
||
so (which you should, if you are connected to your own private shell
|
||
account), you can make a directory on the remote server using the
|
||
mkdir command. You can remove a file on the remote server using the
|
||
delete command, or rmdir to remove a directory. You can also change
|
||
file permissions using the chmod command.
|
||
|
||
|
||
For more elaborate information on using ftp, please see the online
|
||
help in the ftp program (accessible by typing help with no arguments
|
||
for a list of commands, or help <commandname> for specific help on a
|
||
command). You can also read the Unix man page for ftp by typing man
|
||
ftp at your command prompt.
|
||
|
||
|
||
4. Console FTP clients
|
||
|
||
The original ftp program was the original ftp client, and it is a good
|
||
investment to learn it. It's the only ftp client that you can be
|
||
certain is available on most systems (even Win32 comes with the ftp
|
||
command, albeit an archaic, braindead version of it).
|
||
|
||
|
||
There are many other console-mode (text-only) ftp clients available.
|
||
The listing here is by no means comprehensive, but includes the most
|
||
popular ones. Search at FreshMeat to find more.
|
||
|
||
|
||
|
||
4.1. NcFTP
|
||
|
||
NcFTP is the all-time favorite ftp client of many Unix users. It comes
|
||
bundled with most Linux distributions, and offers many advanced
|
||
features such as tab completion and bookmarks. Version 2 of NcFTP had
|
||
a curses based full-screen mode. This was done away with in Version 3
|
||
(now in beta).
|
||
|
||
|
||
It's not 100% compatible with the commands that standard ftp uses. For
|
||
example, get and put in NcFTP act like mget and mput do in standard
|
||
ftp. So if you want to save a remote file as a different local
|
||
filename, you'd have to do get -z remotename localname. Thankfully,
|
||
NcFTP has a nice online help system to assist you in learning the
|
||
commands.
|
||
You can get the latest version of NcFTP at .
|
||
|
||
|
||
4.2. lukemftp
|
||
|
||
A port of the NetBSD FTP client to other systems, lukemftp derives its
|
||
name from the author of most of the enhanced features, which include:
|
||
command-line editing, command-line fetches of FTP and HTTP URLs
|
||
(including via proxies), context-sensitive word completion, dynamic
|
||
progress bar, IPv6 support, modification time preservation, paging of
|
||
local and remote files, passive mode support (with fallback to active
|
||
mode), SOCKS support, TIS FWTK gate-ftp server support, and transfer
|
||
rate throttling.
|
||
|
||
|
||
I highly recommend lukemftp to users who don't want to change to
|
||
anything drastically different from the standard ftp client, but want
|
||
more advanced features.
|
||
|
||
|
||
You can get the latest version of lukemftp at .
|
||
|
||
|
||
4.3. lftp
|
||
|
||
lftp is a sophisticated command line based FTP client. Like bash, it
|
||
has job control. It uses the GNU readline library for input, so you
|
||
have command line completion and editing. lftp also has bookmarks,
|
||
mirroring support, and can transfer several files in parellel.
|
||
|
||
|
||
You can get the latest version of lftp at .
|
||
|
||
|
||
Debian packages are available at .
|
||
|
||
|
||
4.4. cftp
|
||
|
||
Comfortable FTP (cftp) is a full screen mode client. What it lacks in
|
||
features, it makes up for in ease of use. You browse through the
|
||
directories using the arrow keys and enter.
|
||
|
||
|
||
You should be able to get the latest version of cftp at .
|
||
|
||
|
||
4.5. yafc
|
||
|
||
Yafc is a very nice ftp client, with features including directory
|
||
cache, remote filename completion, aliases, colorized ls, recursive
|
||
get/put/ls/rm, nohup mode transfers, tagging (queueing), multiple
|
||
connections, proxy support and more. It has support for Kerberos4
|
||
authentication.
|
||
|
||
|
||
You can get the latest version of yafc from .
|
||
|
||
|
||
Debian packages are available at .
|
||
|
||
|
||
Redhat packages are available at .
|
||
|
||
|
||
|
||
5. X Window FTP clients
|
||
|
||
There are several graphical FTP clients designed to run on the X
|
||
Window system. These clients offer ease of use for users who are used
|
||
to graphical environments, and sometimes offer versatile options that
|
||
would be hard to implement in a text-based ftp client.
|
||
|
||
|
||
5.1. gFTP
|
||
|
||
gFTP is an FTP client for X Windows written using Gtk. The interface
|
||
has some similarities to the popular WS_FTP software commonly used on
|
||
a certain unstable operating system.
|
||
|
||
|
||
gFTP features simultaneous downloads, resuming of interrupted file
|
||
transfers, file transfer queues, downloading of entire directories,
|
||
ftp proxy support, remote directory caching, passive and non-passive
|
||
file transfers, drag-n-drop support, a very nice connection manager
|
||
and more.
|
||
|
||
|
||
If you are running Red Hat Linux and have the GNOME desktop installed,
|
||
then you probably already have gFTP. If not, you can download gFTP
|
||
from its homepage at .
|
||
|
||
|
||
5.2. WXftp
|
||
|
||
WXftp is an FTP client for the X Window System designed to be used
|
||
mainly on Linux workstations. It is written using the WXWindows
|
||
toolkit, so it can be compiled to use either Motif or GTK+
|
||
|
||
|
||
It includes an intuitive user interface (much like WS_FTP), a session
|
||
manager, on-line help, a progress bar, and more
|
||
|
||
|
||
Check out WXftp's homepage at .
|
||
|
||
|
||
5.3. LLNL XDIR and XFTP
|
||
|
||
LLNL XFTP was one of the first graphical FTP clients for Linux. It
|
||
supports FXP (file transfer between two remote hosts), and has a Motif
|
||
based interface.
|
||
|
||
|
||
More information is available at .
|
||
|
||
|
||
5.4. guiftp
|
||
|
||
Guiftp is a simple ftp client written with the GTK+ toolkit. It's good
|
||
if you don't need many features and want a simple, clean look.
|
||
|
||
|
||
Guiftp's homepage is at .
|
||
|
||
|
||
|
||
6. FTP Servers
|
||
|
||
|
||
|
||
6.1. How an FTP Server works
|
||
|
||
A traditional FTP server is executed from inetd (the internet
|
||
superserver daemon). The standard FTP port is port 21. When a user
|
||
tries to log in, the FTP server uses a standard system call to check
|
||
the user name and password against the entries in the system password
|
||
file, or the NIS tables if you are using NIS. If the login is correct,
|
||
the user is given access to the system.
|
||
|
||
|
||
Anonymous FTP works differently. The user logs in with either the
|
||
anonymous or the ftp username (this can be defined in the config
|
||
file). He is then given access to a directory tree that has been
|
||
chroot()'ed. This ensures that the user can not gain access to
|
||
directory trees he is not authorized for. The chrooted directory tree
|
||
usually contains a mock filesystem, with bin/, etc/, and lib/
|
||
directories. The files for download are usually put in the pub/
|
||
directory.
|
||
|
||
|
||
The reason for a mock filesystem in an anonymous FTP tree is that the
|
||
FTP daemon runs external commands for ls requests. You can also place
|
||
additional programs in the bin directory, and a user can run them with
|
||
the SITE command in his ftp client. For example, Red Hat's FTP
|
||
includes the RPM command (for users to query RPM packages on the
|
||
site).
|
||
|
||
|
||
Some FTP servers work differently. For example, some will allow user
|
||
accounts to be set up independant of the system-wide password file
|
||
(FTP-only accounts). Some servers (ProFTPD and NcFTPd for instance)
|
||
have built-in ls commands and do not need a special directory tree
|
||
within the chroot structure. Other ftp servers stray altogether from
|
||
the standard ftp concept. FTP4ALL, for example, does not use system
|
||
passwords at all. It uses it's own user and group file, and has
|
||
features such as upload/download ratio and customizable server
|
||
messages.
|
||
|
||
|
||
6.2. Help with FTP Servers
|
||
|
||
6.2.1. WU-FTPD
|
||
|
||
WU-FTPD is the ftp daemon included with many Linux distributions,
|
||
including Red Hat and Caldera. You can learn more about WU-FTPD at .
|
||
|
||
|
||
The WU-FTPD FAQ can be found on the web at .
|
||
|
||
|
||
6.2.2. ProFTPD
|
||
|
||
ProFTPD is a powerful FTP server that includes Apache-style
|
||
configuration, extensive support for virtual hosts, and internal ls.
|
||
|
||
|
||
A complete command reference and downloads can be found at
|
||
|
||
|
||
|