diff --git a/LDP/howto/linuxdoc/FTP.sgml b/LDP/howto/linuxdoc/FTP.sgml new file mode 100644 index 00000000..58363e84 --- /dev/null +++ b/LDP/howto/linuxdoc/FTP.sgml @@ -0,0 +1,508 @@ + + + + +
+ +FTP mini-HOWTO + +<author>Matthew Borowski <tt/(<htmlurl url="mailto:mkb@yahoo.com" name="mkb@yahoo.com"> )<newline> ( <htmlurl url="http://tarp.worldserve.net" name="http://tarp.worldserve.net/"> )/ + +<date>v0.2, 9 January 2000 + +<abstract> +How to use ftp clients and servers +</abstract> + +<toc> + +<!-- Begin of document --> + +<sect>Preamble + +<p>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. + +<sect1>Contacting Me + +<p>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, <bf/<htmlurl url="http://www.worldserve.net" +name="WorldServe">/, or you can ask for help on newsgroups such as +<bf/comp.os.linux.*/. Please also keep in mind that I can only understand English and Farsi. + +<sect1>Legalities and Distribution + +<p>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. + +<sect1>History of this document + +<p> +<itemize> +<item>991203: FTP HOWTO first written. Still a work-in-progress. +</itemize> + +<sect>About FTP + +<p>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. + +<p>An FTP site is a computer that is running FTP server software (also known +an FTP daemon, or <tt>ftpd</tt>). A public ftp site can usually be accessed +by anybody by logging in as <tt>anonymous</tt> or <tt>ftp</tt>. 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. + +<p>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). + +<p>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. + +<p>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 <htmlurl url="ftp://nic.merit.edu/documents/rfc/rfc0959.txt">. + +<sect>Beginner's guide to using ftp + +<p><bf/A quick guide to using ftp./ + +<p>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. + +<sect1>Running the <tt>ftp</tt> program +<p>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. + +<p>At the command line, type: + +<tscreen><verb> +$ ftp metalab.unc.edu +</verb></tscreen> + +<p>The ftp program will attempt to connect to metalab.unc.edu. Another way +to do this is to run <tt>ftp</tt> from the command line with no parameters, and use +the <tt>open</tt> command, with the site name as an argument: + +<tscreen><verb> +$ ftp +ftp> open metalab.unc.edu +</verb></tscreen> + +<sect1>Logging into an FTP server + +<p>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, <tt>foo</tt>: We log in as <tt>anonymous</tt> or <tt>ftp</tt>, to get to the public archive. + + +<tscreen><verb> +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): +</verb></tscreen> + + +<p> +Now, we enter a complete e-mail address as the password (this is what most +public FTP sites request). + +<tscreen><verb> +331 Guest login ok, send your complete e-mail address as password. +Password: +</verb></tscreen> + +<p> +After a successful login, the following information is given to us: + +<tscreen><verb> +Remote system type is UNIX. +Using binary mode to transfer files. +ftp> +</verb></tscreen> + +<sect1>File transfer types + +<p>After you log in to an ftp site, <tt>ftp</tt> 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 <tt>ascii</tt> or <tt>binary</tt> to switch +between the types. + +<p>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. + + +<sect1>Navigating and listing directories +<p>You do an <tt>ls</tt> to see a list of the files. The <tt>ls</tt> 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 <tt>ls</tt> for details. + +<tscreen><verb> +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. +</verb></tscreen> + +<p>If the <tt>ls</tt> 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. + +<p>On public FTP archives, the downloadable resources are usually held in the +<tt>/pub</tt> directory. In this example, you already know that the kernel sources +are in the directory <tt>/pub/Linux/kernel</tt>, so you type the following to get +into that directory: + +<tscreen><verb> +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. +</verb></tscreen> + +<p>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. + +<sect1>Downloading and uploading files + +<p>Now, after doing another <tt>ls</tt>, you see that you want to <tt>cd</tt> into the v2.2 +directory. You do yet another <tt>ls</tt>, and find the file you want to download. It +is <tt>linux-2.2.13.tar.gz</tt>. So you type this: + +<tscreen><verb> +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). +</verb></tscreen> + +<p>The ftp program has started saving the remote file +<tt>linux-2.2.13.tar.gz</tt> as the local file <tt>linux-2.2.13.tar.gz</tt>. + +<p>If you wanted to save it as the local file <tt>foo.tar.gz</tt>, you could have +specified it like this: + +<tscreen><verb> +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). +</verb></tscreen> + +<p>If you want to download more than one file at a time, you'll have to use the +<tt>mget</tt> (multiple get) command. You can use <tt>mget</tt> together with a +space-delimited list of filenames you want to download, or you can use wildcards +with the <tt>mget</tt> command. For example: + +<tscreen><verb> +ftp> mget linux* +</verb></tscreen> + +<p>Would get all files starting with the string "linux". Normally, +<tt>mget</tt> will prompt you for each file before it downloads it. You can +toggle this by using the <tt>prompt</tt> command. + +<p>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: + +<tscreen><verb> +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) +</verb></tscreen> + +<p>The <tt>put</tt> command works the same way as the <tt>get</tt> command, +so you can use <tt>mput</tt> 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. + +<p>What if the file <tt>foo.tar.gz</tt> is not in your current local directory when you +try to upload it? You can switch local directories by using the <tt>lcd</tt> (local +change directory) command: + +<tscreen><verb> +ftp> lcd /home/foo/ +Local directory now /home/foo +</verb></tscreen> + +<sect1>Running shell commands + +<p>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: + +<tscreen><verb> +ftp> !ls +</verb></tscreen> + +<p>The way this works is that ftp calls the shell (specified in the +<tt>$SHELL</tt> environment variable), and it is the shell which runs +<tt>ls</tt>. 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 <tt>!cd</tt> does +not work as you would expect, this is why the <tt>lcd</tt> command exists. + +<sect1>Hash marks and tick + +<p>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: + +<tscreen><verb> +ftp> hash +Hash mark printing on (1024 bytes/hash mark). +</verb></tscreen> + +<p>As you can tell, ftp will print a hash mark for every 1024 bytes of data +you download. + +<p>There is also a <tt>tick</tt> option. + +<tscreen><verb> +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 +</verb></tscreen> + + +<sect1>Other ftp commands + +<p>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 <tt>mkdir</tt> command. You +can remove a file on the remote server using the <tt>delete</tt> command, or +<tt>rmdir</tt> to remove a directory. You can also change file permissions +using the <tt>chmod</tt> command. + +<p>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 <tt>man ftp</tt> at your +command prompt. + +<sect>Console FTP clients + +<p>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). + +<p>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 <htmlurl url="http://www.freshmeat.net" name="FreshMeat"> to find more. + + +<sect1>NcFTP + +<p>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). + +<p>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. + +<p>You can get the latest version of NcFTP at <htmlurl url="http://www.ncftp.com">. + +<sect1>lukemftp + +<p>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. + +<p>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. + +<p>You can get the latest version of lukemftp at <htmlurl url="ftp://ftp.netbsd.org/pub/NetBSD/misc/lukemftp/">. + +<sect1>lftp + +<p>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. + +<p>You can get the latest version of lftp at <htmlurl url="http://ftp.yars.free.net/projects/lftp/">. + +<p>Debian packages are available at <htmlurl url="ftp://ftp.freshmeat.net/pub/debs/lftp/">. + +<sect1>cftp + +<p>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. + +<p>You should be able to get the latest version of cftp at <htmlurl url="http://ftp.giga.or.at/pub/nih/cftp/">. + +<sect1>yafc + +<p>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. + +<p>You can get the latest version of yafc from <htmlurl url="http://www.stacken.kth.se/~mhe/yafc/">. + +<p>Debian packages are available at <htmlurl url="http://members.home.com/decklin/experimental/">. + +<p>Redhat packages are available at <htmlurl url="http://lz.freeservers.com/linux/yafc.html">. + + +<sect>X Window FTP clients + +<p>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. + +<sect1>gFTP + +<p>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. + +<p>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. + +<p>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 <htmlurl url="http://gftp.seul.org/">. + +<sect1>WXftp + +<p>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+ + +<p>It includes an intuitive user interface (much like WS_FTP), a session +manager, on-line help, a progress bar, and more + +<p>Check out WXftp's homepage at <htmlurl url="http://www.wxftp.seul.org">. + +<sect1>LLNL XDIR and XFTP + +<p>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. + +<p>More information is available at <htmlurl url="http://www.llnl.gov/ia/xdir_xftp/">. + +<sect1>guiftp + +<p>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. + +<p>Guiftp's homepage is at <htmlurl url="http://www.altern.org/ldufresne/guiftp/">. + + +<sect>FTP Servers + +<sect1>How an FTP Server works + +<p> +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. + +<p> +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. + +<p> +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). + +<p> +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. + +<sect1>Help with FTP Servers + +<sect2>WU-FTPD + +<p>WU-FTPD is the ftp daemon included with many Linux distributions, +including Red Hat and Caldera. You can learn more about WU-FTPD at <htmlurl +url="http://www.wu-ftpd.org">. + +<p> +The WU-FTPD FAQ can be found on the web at <htmlurl +url="http://www.cetis.hvu.nl/~koos/wu-ftpd-faq.html">. + +<sect2>ProFTPD + +<p>ProFTPD is a powerful FTP server that includes Apache-style +configuration, extensive support for virtual hosts, and internal ls. + +<p>A complete command reference and downloads can be found at <htmlurl +url="http://www.proftpd.org"> + +</article>