  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


    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



