ftp(1)
NAME
ftp - file transfer program
SYNOPSIS
ftp [-dginptv] [-T timeout] [hostname [port]]
DESCRIPTION
The ftp command is the user interface to the Internet stan-
dard File Transfer Protocol (FTP). ftp transfers files to
and from a remote network site.
The host and optional port with which ftp is to communicate
may be specified on the command line. If this is done, ftp
immediately attempts to establish a connection to an FTP
server on that host. Otherwise, ftp enters its command
interpreter and awaits instructions from the user. When ftp
is awaiting commands from the user, it displays the prompt
ftp>.
OPTIONS
The following options may be specified at the command line,
or to the command interpreter:
-d Enables debugging.
-g Disables filename "globbing".
-i Turns off interactive prompting during multiple file
transfers.
-n Does not attempt "auto-login" upon initial connection.
If auto-login is not disabled, ftp checks the .netrc
file in the user's home directory for an entry
describing an account on the remote machine. If no
entry exists, ftp will prompt for the login name of
the account on the remote machine (the default is the
login name on the local machine), and, if necessary,
prompts for a password and an account with which to
login.
-p Enables passive mode for data transfers. This command
is useful when connecting to a remote host from behind
a connection filtering firewall.
-t Enables packet tracing (unimplemented).
-T timeout
Enables global connection timer, specified in seconds
(decimal). There is a timer for the control connection
that is reset when anything is sent to the server and
disabled while the client is prompting for user input.
Another independent timer is used to monitor incoming
or outgoing data connections.
-v Shows all responses from the remote server, as well as
report on data transfer statistics. This is turned on
by default if ftp is running interactively with its
input coming from the user's terminal.
The following commands can be specified to the command
interpreter:
! [ command ] Runs command as a shell command on the
local machine. If no command is given, invokes an
interactive shell.
$ macro-name [ args ]
Executes the macro macro-name that was defined with
the macdef command. Arguments are passed to the macro
unglobbed.
account [ passwd ]
Supplies a supplemental password required by a remote
system for access to resources once a login has been
successfully completed. If no argument is included,
the user will be prompted for an account password in a
non-echoing input mode.
append local-file [ remote-file ]
Appends a local file to a file on the remote machine.
If remote-file is not specified, the local file name
is used, subject to alteration by any ntrans or nmap
settings. File transfer uses the current settings for
"representation type", "file structure", and "transfer
mode".
ascii Sets the "representation type" to "network ASCII".
This is the default type.
bell Sounds a bell after each file transfer command is com-
pleted.
binary
Sets the "representation type" to "image".
bye Terminates the FTP session with the remote server and
exit ftp. An EOF will also terminate the session and
exit.
case Toggles remote computer file name case mapping during
mget commands. When case is on (default is off),
remote computer file names with all letters in upper
case are written in the local directory with the
letters mapped to lower case.
cd remote-directory
Changes the working directory on the remote machine to
remote-directory.
cdup Changes the remote machine working directory to the
parent of the current remote machine working direc-
tory.
close Terminates the FTP session with the remote server, and
return to the command interpreter. Any defined macros
are erased.
cr Toggles <RETURN> stripping during "network ASCII" type
file retrieval. Records are denoted by a
<RETURN>/LINEFEED sequence during "network ASCII" type
file transfer. When cr is on (the default), <RETURN>
characters are stripped from this sequence to conform
with the UNIX system single LINEFEED record delimiter.
Records on non-UNIX-system remote hosts may contain
single LINEFEED characters; when an "network ASCII"
type transfer is made, these LINEFEED characters may
be distinguished from a record delimiter only when cr
is off.
delete remote-file
Deletes the file remote-file on the remote machine.
debug Toggles debugging mode. When debugging is on, ftp
prints each command sent to the remote machine, pre-
ceded by the string ->.
dir [ remote-directory ] [ local-file ]
Prints a listing of the directory contents in the
directory, remote-directory, and, optionally, placing
the output in local-file. If no directory is speci-
fied, the current working directory on the remote
machine is used. If no local file is specified, or
local-file is -, output is sent to the terminal.
disconnect
A synonym for close.
form [ format-name ]
Sets the carriage control format subtype of the
"representation type" to format-name. The only valid
format-name is non-print, which corresponds to the
default "non-print" subtype.
get remote-file [ local-file ]
Retrieves the remote-file and store it on the local
machine. If the local file name is not specified, it
is given the same name it has on the remote machine,
subject to alteration by the current case, ntrans, and
nmap settings. The current settings for "representa-
tion type", "file structure", and "transfer mode" are
used while transferring the file.
glob Toggles filename expansion, or "globbing", for
mdelete, mget and mput. If globbing is turned off,
filenames are taken literally.
Globbing for mput is done as in sh(1). For mdelete and
mget, each remote file name is expanded separately on
the remote machine, and the lists are not merged.
Expansion of a directory name is likely to be radi-
cally different from expansion of the name of an ordi-
nary file: the exact result depends on the remote
operating system and FTP server, and can be previewed
with the command, mls remote-files -.
mget and mput are not meant to transfer entire direc-
tory subtrees of files. You can do this by transfer-
ring a tar(1) archive of the subtree (using a
"representation type" of "image" as set by the binary
command).
hash Toggles hash-sign (#) printing for each data block
transferred. The size of a data block is 8192 bytes.
help [ command ]
Prints an informative message about the meaning of
command. If no argument is given, ftp prints a list of
the known commands.
lcd [ directory ]
Changes the working directory on the local machine. If
no directory is specified, the user's home directory
is used.
ls [ remote-directory | -al ] [ local-file ]
Prints an abbreviated listing of the contents of a
directory on the remote machine. If remote-directory
is left unspecified, the current working directory is
used.
The -a option lists all entries, including those that
begin with a dot (.), which are normally not listed.
The -l option lists files in long format, giving mode,
number of links, owner, group, size in bytes, and time
of last modification for each file. If the file is a
special file, the size field instead contains the
major and minor device numbers rather than a size. If
the file is a symbolic link, the filename is printed
followed by "->" and the pathname of the referenced
file.
If no local file is specified, or if local-file is -,
the output is sent to the terminal.
macdef macro-name
Defines a macro. Subsequent lines are stored as the
macro macro-name. A null line (consecutive NEWLINE
characters in a file or <RETURN> characters from the
terminal) terminates macro input mode. There is a
limit of 16 macros and 4096 total characters in all
defined macros. Macros remain defined until a close
command is executed.
The macro processor interprets $ and \ as special
characters. A $ followed by a number (or numbers) is
replaced by the corresponding argument on the macro
invocation command line. A $ followed by an i signals
that macro processor that the executing macro is to be
looped. On the first pass, $i is replaced by the first
argument on the macro invocation command line; on the
second pass, it is replaced by the second argument,
and so on. A \ followed by any character is replaced
by that character. Use the \ to prevent special treat-
ment of the $.
mdelete remote-files
Deletes the remote-files on the remote machine.
mdir remote-files local-file
Like dir, except multiple remote files may be speci-
fied. If interactive prompting is on, ftp will prompt
the user to verify that the last argument is indeed
the target local file for receiving mdir output.
mget remote-files
Expands the remote-files on the remote machine and do
a get for each file name thus produced. See glob for
details on the filename expansion. Resulting file
names will then be processed according to case,
ntrans, and nmap settings. Files are transferred into
the local working directory, which can be changed with
lcd directory. New local directories can be created
with ! mkdir directory.
mkdir directory-name
Makes a directory on the remote machine.
mls remote-files local-file
Like ls(1), except multiple remote files may be speci-
fied. If interactive prompting is on, ftp will prompt
the user to verify that the last argument is indeed
the target local file for receiving mls output.
mode [ mode-name ]
Sets the "transfer mode" to mode-name. The only valid
mode-name is stream, which corresponds to the default
"stream" mode. This implementation only supports
stream, and requires that it be specified.
mput local-files
Expands wild cards in the list of local files given as
arguments and do a put for each file in the resulting
list. See glob for details of filename expansion.
Resulting file names will then be processed according
to ntrans and nmap settings.
nmap [ inpattern outpattern ]
Sets or unsets the filename mapping mechanism. If no
arguments are specified, the filename mapping mechan-
ism is unset. If arguments are specified, remote
filenames are mapped during mput commands and put com-
mands issued without a specified remote target
filename. If arguments are specified, local filenames
are mapped during mget commands and get commands
issued without a specified local target filename.
This command is useful when connecting to a non-UNIX-
system remote host with different file naming conven-
tions or practices. The mapping follows the pattern
set by inpattern and outpattern. inpattern is a tem-
plate for incoming filenames (which may have already
been processed according to the ntrans and case set-
tings). Variable templating is accomplished by includ-
ing the sequences $1, $2, ..., $9 in inpattern. Use \
to prevent this special treatment of the $ character.
All other characters are treated literally, and are
used to determine the nmap inpattern variable values.
For example, given inpattern $1.$2 and the remote file
name mydata.data, $1 would have the value mydata, and
$2 would have the value data.
The outpattern determines the resulting mapped
filename. The sequences $1, $2, ..., $9 are replaced
by any value resulting from the inpattern template.
The sequence $0 is replaced by the original filename.
Additionally, the sequence [seq1,seq2] is replaced by
seq1 if seq1 is not a null string; otherwise it is
replaced by seq2.
For example, the command nmap $1.$2.$3
[$1,$2].[$2,file] would yield the output filename
myfile.data for input filenames myfile.data and
myfile.data.old, myfile.file for the input filename
myfile, and myfile.myfile for the input filename
.myfile. SPACE characters may be included in outpat-
tern, as in the example nmap $1 | sed "s/ *$//" > $1.
Use the \ character to prevent special treatment of
the $, [, ], and ,, characters.
ntrans [ inchars [ outchars ] ]
Sets or unsets the filename character translation
mechanism. If no arguments are specified, the filename
character translation mechanism is unset. If arguments
are specified, characters in remote filenames are
translated during mput commands and put commands
issued without a specified remote target filename, and
characters in local filenames are translated during
mget commands and get commands issued without a speci-
fied local target filename.
This command is useful when connecting to a non-UNIX-
system remote host with different file naming conven-
tions or practices. Characters in a filename matching
a character in inchars are replaced with the
corresponding character in outchars. If the
character's position in inchars is longer than the
length of outchars, the character is deleted from the
file name.
Only 16 characters can be translated when using the
ntrans command under ftp. Use case (described above)
if needing to convert the entire alphabet.
open host [ port ]
Establishes a connection to the specified host FTP
server. An optional port number may be supplied, in
which case, ftp will attempt to contact an FTP server
at that port. If the auto-login option is on (default
setting), ftp will also attempt to automatically log
the user in to the FTP server.
passive
Toggles passive mode. When passive mode is turned on,
the ftp client sends the PASV command requesting that
the FTP server open a port for the data connection and
return the address of that port. The remote server
listens on that port and the client connects to it.
When passive mode is turned off, the ftp client sends
the PORT command to the server specifying an address
for the remove server to connect back to. Passive mode
is useful when the connections to the ftp client are
controlled, for example, when behind a firewall. When
connecting to an IPv6-enabled FTP server, EPSV may be
used in place of PASV and EPRT in place of PORT.
prompt
Toggles interactive prompting. Interactive prompting
occurs during multiple file transfers to allow the
user to selectively retrieve or store files. By
default, prompting is turned on. If prompting is
turned off, any mget or mput will transfer all files,
and any mdelete will delete all files.
proxy ftp-command
Executes an FTP command on a secondary control connec-
tion. This command allows simultaneous connection to
two remote FTP servers for transferring files between
the two servers. The first proxy command should be an
open, to establish the secondary control connection.
Enter the command proxy ? to see other FTP commands
executable on the secondary connection.
The following commands behave differently when pre-
faced by proxy: open will not define new macros during
the auto-login process, close will not erase existing
macro definitions, get and mget transfer files from
the host on the primary control connection to the host
on the secondary control connection, and put, mputd,
and append transfer files from the host on the secon-
dary control connection to the host on the primary
control connection.
Third party file transfers depend upon support of the
PASV command by the server on the secondary control
connection.
put local-file [ remote-file ]
Stores a local file on the remote machine. If remote-
file is left unspecified, the local file name is used
after processing according to any ntrans or nmap set-
tings in naming the remote file. File transfer uses
the current settings for "representation type", "file
structure", and "transfer mode".
pwd Prints the name of the current working directory on
the remote machine.
quit A synonym for bye.
quote arg1 arg2 ...
Sends the arguments specified, verbatim, to the remote
FTP server. A single FTP reply code is expected in
return. (The remotehelp command displays a list of
valid arguments.)
quote should be used only by experienced users who are
familiar with the FTP protocol.
recv remote-file [ local-file ]
A synonym for get.
reget remote-file [ local-file ]
The reget command acts like get, except that if
local-file exists and is smaller than remote-file,
local-file is presumed to be a partially transferred
copy of remote-file and the transfer is continued from
the apparent point of failure. This command is useful
when transferring large files over networks that are
prone to dropping connections.
remotehelp [ command-name ]
Requests help from the remote FTP server. If a
command-name is specified it is supplied to the server
as well.
rename from to
Renames the file from on the remote machine to have
the name to.
reset Clears reply queue. This command re-synchronizes
command/reply sequencing with the remote FTP server.
Resynchronization may be necessary following a viola-
tion of the FTP protocol by the remote server.
restart [ marker ]
Restarts the immediately following get or put at the
indicated marker. On UNIX systems, marker is usually a
byte offset into the file. When followed by an mget,
the restart applies to the first get performed. Speci-
fying a marker of 0 clears the restart marker. If no
argument is specified, the current restart status is
displayed.
rmdir directory-name
Deletes a directory on the remote machine.
runique
Toggles storing of files on the local system with
unique filenames. If a file already exists with a name
equal to the target local filename for a get or mget
command, a .1 is appended to the name. If the result-
ing name matches another existing file, a .2 is
appended to the original name. If this process contin-
ues up to .99, an error message is printed, and the
transfer does not take place. The generated unique
filename will be reported. runique will not affect
local files generated from a shell command. The
default value is off.
send local-file [ remote-file ]
A synonym for put.
sendport
Toggles the use of PORT commands. By default, ftp will
attempt to use a PORT command when establishing a con-
nection for each data transfer. The use of PORT com-
mands can prevent delays when performing multiple file
transfers. If the PORT command fails, ftp will use the
default data port. When the use of PORT commands is
disabled, no attempt will be made to use PORT commands
for each data transfer. This is useful when connected
to certain FTP implementations that ignore PORT com-
mands but incorrectly indicate they have been
accepted.
site arg1 [ arg2 ] ...
Sends the arguments specified, verbatim, to the remote
FTP server as a SITE command.
status
Show the current status of ftp.
struct [ struct-name ]
Sets the file structure to struct-name. The only valid
struct-name is file, which corresponds to the default
"file" structure. The implementation only supports
file, and requires that it be specified.
sunique
Toggles storing of files on remote machine under
unique file names. The remote FTP server must support
the STOU command for successful completion. The remote
server will report the unique name. Default value is
off.
tcpwindow [ size ]
Sets the TCP window size to be used for data connec-
tions. Specifying a size of 0 stops the explicit set-
ting of the TCP window size on data connections. If no
argument is specified, the current setting is
displayed.
tenex Sets the "representation type" to that needed to talk
to TENEX machines.
trace Toggles packet tracing (unimplemented).
type [ type-name ]
Sets the "representation type" to type-name. The valid
type-names are ascii for "network ASCII", binary or
image for "image", and tenex for "local byte size"
with a byte size of 8 (used to talk to TENEX
machines). If no type is specified, the current type
is printed. The default type is "network ASCII".
user user-name [ password ] [ account ]
Identify yourself to the remote FTP server. If the
password is not specified and the server requires it,
ftp will prompt the user for it (after disabling local
echo). If an account field is not specified, and the
FTP server requires it, the user will be prompted for
it. If an account field is specified, an account com-
mand will be relayed to the remote server after the
login sequence is completed if the remote server did
not require it for logging in. Unless ftp is invoked
with "auto-login" disabled, this process is done
automatically on initial connection to the FTP server.
verbose
Toggles verbose mode. In verbose mode, all responses
from the FTP server are displayed to the user. In
addition, if verbose mode is on, when a file transfer
completes, statistics regarding the efficiency of the
transfer are reported. By default, verbose mode is on
if ftp's commands are coming from a terminal, and off
otherwise.
? [ command ]
A synonym for help.
Command arguments which have embedded spaces may be quoted
with quote (") marks.
If any command argument which is not indicated as being
optional is not specified, ftp will prompt for that argu-
ment.
ABORTING A FILE TRANSFER
To abort a file transfer, use the terminal interrupt key.
Sending transfers will be immediately halted. Receiving
transfers will be halted by sending an FTP protocol ABOR
command to the remote server, and discarding any further
data received. The speed at which this is accomplished
depends upon the remote server's support for ABOR process-
ing. If the remote server does not support the ABOR command,
an ftp> prompt will not appear until the remote server has
completed sending the requested file.
The terminal interrupt key sequence will be ignored when ftp
has completed any local processing and is awaiting a reply
from the remote server. A long delay in this mode may result
from the ABOR processing described above, or from unexpected
behavior by the remote server, including violations of the
ftp protocol. If the delay results from unexpected remote
server behavior, the local ftp program must be killed by
hand.
FILE NAMING CONVENTIONS
Local files specified as arguments to ftp commands are pro-
cessed according to the following rules.
1) If the file name - is specified, the standard input
(for reading) or standard output (for writing) is
used.
2) If the first character of the file name is |, the
remainder of the argument is interpreted as a shell
command. ftp then forks a shell, using popen(3C) with
the argument supplied, and reads (writes) from the
standard output (standard input) of that shell. If
the shell command includes <SPACE> characters, the
argument must be quoted; for example "| ls -lt". A
particularly useful example of this mechanism is: "dir
| more".
3) Failing the above checks, if globbing is enabled,
local file names are expanded according to the rules
used in the sh(1); see the glob command. If the ftp
command expects a single local file (for example,
put), only the first filename generated by the glob-
bing operation is used.
4) For mget commands and get commands with unspecified
local file names, the local filename is the remote
filename, which may be altered by a case, ntrans, or
nmap setting. The resulting filename may then be
altered if runique is on.
5) For mput commands and put commands with unspecified
remote file names, the remote filename is the local
filename, which may be altered by a ntrans or nmap
setting. The resulting filename may then be altered by
the remote server if sunique is on.
FILE TRANSFER PARAMETERS
The FTP specification specifies many parameters which may
affect a file transfer.
The "representation type" may be one of "network ASCII",
"EBCDIC", "image", or "local byte size" with a specified
byte size (for PDP-10's and PDP-20's mostly). The "network
ASCII" and "EBCDIC" types have a further subtype which
specifies whether vertical format control (NEWLINE
characters, form feeds, etc.) are to be passed through
("non-print"), provided in TELNET format ("TELNET format
controls"), or provided in ASA (FORTRAN) ("carriage control
(ASA)") format. ftp supports the "network ASCII" (subtype
"non-print" only) and "image" types, plus "local byte size"
with a byte size of 8 for communicating with TENEX machines.
The "file structure" may be one of file (no record struc-
ture), record, or page. ftp supports only the default value,
which is file.
The "transfer mode" may be one of stream, block, or
compressed. ftp supports only the default value, which is
stream.
USAGE
See largefile(5) for the description of the behavior of ftp
when encountering files greater than or equal to 2 Gbyte ( 2
**31 bytes).
The ftp command is IPv6-enabled. See ip6(7P).
FILES
~/.netrc
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Availability | SUNWbip |
|_____________________________|_____________________________|
| CSI | enabled |
|_____________________________|_____________________________|
SEE ALSO
ls(1), rcp(1), sh(1), tar(1), in.ftpd(1M), popen(3C),
ftpusers(4), netrc(4), attributes(5), largefile(5), ip6(7P)
Allman, M., Ostermann, S., and Metz, C. RFC 2428, FTP Exten-
sions for IPv6 and NATs. The Internet Society. September
1998.
Postel, Jon, and Joyce Reynolds. RFC 959, File Transfer Pro-
tocol (FTP ). Network Information Center. October 1985.
Piscitello, D. RFC 1639, FTP Operation Over Big Address
Records (FOOBAR). Network Working Group. June 1994.
NOTES
Failure to log in may arise from an explicit denial by the
remote FTP server because the account is listed in
/etc/ftpusers. See in.ftpd(1M) and ftpusers(4).
Correct execution of many commands depends upon proper
behavior by the remote server.
An error in the treatment of carriage returns in the 4.2 BSD
code handling transfers with a "representation type" of
"network ASCII" has been corrected. This correction may
result in incorrect transfers of binary files to and from
4.2 BSD servers using a "representation type" of "network
ASCII". Avoid this problem by using the "image" type.
Man(1) output converted with
man2html