文章出处:http://blog.csdn.net/shift_wwx
前言:之前没有用过这个命令,在windows上都是用工具,虽然linux上也有可视化的工具,不过还是希望尽量用命令来完成,于是参考了一些文章做了个小结
一、简介
FTP的全称是File Transfer Protocol(文件传输协议),顾名思义,就是专门用来传输文件的协议。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着 FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出FTP命令,服务器程序执行用户所发出的FTP命令,并将执行的结果返回到客户机。
FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS、Windows的命令行、LINUX、UNⅨ
还是AⅨ操作系统下都可以使用FTP,都会遇到大量的FTP内部命令,熟悉并灵活应用FTP命令,可以大大方便使用者,并收到事半功倍之效。
比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。
二、分类
有关FTP(客户端,服务器搭建这里不讲)有很多,大体分为命令行和GUI图形界面的软件。
1、图形界面的有
gftp
gnome下ftp客户端
crossftp
基于Java的稳定ftp客户端和同步工具。优良的中文/Unicode支持。
Kftpgrabber
KDE下ftp客户端,支持编码选择。对中文支持较好
filezilla 对中文支持好
krusader
也可以通过浏览器输入ftp://ip使用
如果有喜欢的可以通过apt-get 或者 aptitude 安装。
2、 命令行
ftp & lftp
三、语法
1、ftp
我截取的是ubuntu 12.04server版的usage:
Usage: { ftp | pftp } [-46pinegvtd] [hostname] -4: use IPv4 addresses only -6: use IPv6, nothing else -p: enable passive mode (default for pftp) -i: turn off prompting during mget -n: inhibit auto-login -e: disable readline support, if present -g: disable filename globbing -v: verbose mode -t: enable packet tracing [nonfunctional] -d: enable debugging
-d 将有关 ftp 命令操作的调试信息发送给 syslogd 守护进程。如果您指定-d 标志,您必须编辑/etc/syslog.conf 文件并添加下列中的一项:
OR
user.debug FileName
请注意:syslogd 守护进程调试级别包含信息级别消息。
如果不编辑/etc/syslog.conf 文件,则不会产生消息。变更了/etc/syslog.conf 文件之后,请运行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 syslogd 守护进程其配置文件的变更。关于调试级别的更多信息,请参考/etc/syslog.conf 文件。也请参考 debug 子命令。
-g 禁用文件名中的元字符拓展。解释元字符可参考为扩展(有时叫做文件名匹配替换)文件名。请参考 glob 子命令。
-i 关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 mdelete 子命令,以取得多文件传送中的提示的描述。
-n 防止在起始连接中的自动登录。否则, ftp 命令会搜索$HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。请参考 user 子命令。
-v 显示远程服务器的全部响应,并提供数据传输的统计信息。当 ftp 命令的输出是到终端(如控制台或显示)时,此显示方式是缺省方式。
-p被动模式
ftp内部命令:
ftp> ? Commands may be abbreviated. Commands are: ! dir mdelete qc site $ disconnect mdir sendport size account exit mget put status append form mkdir pwd struct ascii get mls quit system bell glob mode quote sunique binary hash modtime recv tenex bye help mput reget tick case idle newer rstatus trace cd image nmap rhelp type cdup ipany nlist rename user chmod ipv4 ntrans reset umask close ipv6 open restart verbose cr lcd prompt rmdir ? delete ls passive runique debug macdef proxy send解释一下:
1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip. 2.$ macro-ame[args]:执行宏定义macro-name. 3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。 4.append local-file [remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。 5.ascii:使用ascii类型传输方式。 6.bell:每个命令执行完毕后计算机响铃一次。 7.bin:使用二进制文件传输方式。 8.bye:退出ftp会话过程。 9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。 10.cd remote-dir:进入远程主机目录。 11.cdup:进入远程主机目录的父目录。 12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。 13.close:中断与远程服务器的ftp会话(与open对应)。 14.cr:使用asscii方式传输文件时,将回车换行转换为回行。 15.delete remote-file:删除远程主机文件。 16.debug [debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。 17.dir [remote-dir] [local-file]:显示远程主机目录,并将结果存入本地文件local-file。 18.disconnect:同close。 19.form format:将文件传输方式设置为format,缺省为file方式。 20.get remote-file [local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。 21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。 22.hash:每传输1024字节,显示一个hash符号(#)。 23.help [cmd]:显示ftp内部命令cmd的帮助信息,如:help get。 24.idle [seconds]:将远程服务器的休眠计时器设为[seconds]秒。 25.image:设置二进制传输方式(同binary)。 26.lcd [dir]:将本地工作目录切换至dir。 27.ls [remote-dir] [local-file]:显示远程目录remote-dir,并存入本地文件local-file。 28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。 29.mdelete [remote-file]:删除远程主机文件。 30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如:mdir *.o.*.zipoutfile 31.mget remote-files:传输多个远程文件。 32.mkdir dir-name:在远程主机中建一目录。 33.mls remote-file local-file:同nlist,但可指定多个文件名。 34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。 35.modtime file-name:显示远程主机文件的最后修改时间。 36.mput local-file:将多个文件传输至远程主机。 37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。 38.nlist [remote-dir] [local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。 39.nmap [inpattern outpattern]:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。 40.ntrans [inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。 41.open host[port]:建立指定ftp服务器连接,可指定连接端口。 42.passive:进入被动传输方式。 43.prompt:设置多个文件传输时的交互提示。 44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。 45.put local-file[remote-file]:将本地文件local-file传送至远程主机。 46.pwd:显示远程主机的当前工作目录。 47.quit:同bye,退出ftp会话。 48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst. 49.recv remote-file [local-file]:同get。 50.reget remote-file [local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。 51.rhelp [cmd-name]:请求获得远程主机的帮助。 52.rstatus [file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。 53.rename [from][to]:更改远程主机文件名。 54.reset:清除回答队列。 55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。 56.rmdir dir-name:删除远程主机目录。 57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。 58.send local-file[remote-file]:同put。 59.sendport:设置PORT命令的使用。 60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。 61.size file-name:显示远程主机文件大小,如:site idle 7200。 62.status:显示当前ftp状态。 63.struct[struct-name]:将文件传输结构设置为struct-name,缺省时使用stream结构。 64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。 65.system:显示远程主机的操作系统类型。 66.tenex:将文件传输类型设置为TENEX机的所需的类型。 67.tick:设置传输时的字节计数器。 68.trace:设置包跟踪。 69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。 70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。 71.user user-name [password] [account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。 72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on. 73.?[cmd]:同help。
网上说下面这段话能自动登录,可是我为什么不行?谁能帮看一下:
#!/bin/sh ftp -i -n 172.17.17.17 << ! user PUB 123456 !
服务器上没有装的话就安装一下:
sudo apt-get install lftp
我的理解是lftp是较ftp更复杂可是又更好用,所以man lftp的时候会看到这样的解释:
lftp - Sophisticated file transfer program
Usage: lftp [OPTS] <site> `lftp' is the first command executed by lftp after rc files -f <file> execute commands from the file and exit -c <cmd> execute the commands and exit --help print this help and exit --version print lftp version and exit Other options are the same as in `open' command -e <cmd> execute the command just after selecting -u <user>[,<pass>] use the user/password for authentication -p <port> use the port for connection <site> host name, URL or bookmark name大概意思是:
-f 执行文件中的命令后退出 -c 执行命令后退出 --help 显示帮助信息后退出 --version 显示 lftp 版本后退出 #其他的选项同 'open' 命令 -e 在选择后执行命令 -u [,] 使用指定的用户名/口令进行验证 -p 连接指定的端口
lftp :~> ? !<shell-command> (commands) alias [<name> [<value>]] attach [PID] bookmark [SUBCMD] cache [SUBCMD] cat [-b] <files> cd <rdir> chmod [OPTS] mode file... close [-a] [re]cls [opts] [path/][pattern] debug [<level>|off] [-o <file>] du [options] <dirs> exit [<code>|bg] get [OPTS] <rfile> [-o <lfile>] glob [OPTS] <cmd> <args> help [<cmd>] history -w file|-r file|-c|-l [cnt] jobs [-v] kill all|<job_no> lcd <ldir> lftp [OPTS] <site> ln [-s] <file1> <file2> ls [<args>] mget [OPTS] <files> mirror [OPTS] [remote [local]] mkdir [-p] <dirs> module name [args] more <files> mput [OPTS] <files> mrm <files> mv <file1> <file2> [re]nlist [<args>] open [OPTS] <site> pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>] pwd [-p] queue [OPTS] [<cmd>] quote <cmd> repeat [OPTS] [delay] [command] rm [-r] [-f] <files> rmdir [-f] <dirs> scache [<session_no>] set [OPT] [<var> [<val>]] site <site-cmd> source <file> torrent [-O <dir>] <file|URL>... user <user|URL> [<pass>] wait [<jobno>] zcat <files> zmore <files>大部分的命令不需要解释,跟ftp是一样的,如果需要更详细的command信息,可以用命令help。
例如:
lftp [email protected]:/> help get Usage: get [OPTS] <rfile> [-o <lfile>] Retrieve remote file <rfile> and store it to local file <lfile>. -o <lfile> specifies local file name (default - basename of rfile) -c continue, reget -E delete remote files after successful transfer -a use ascii mode (binary is the default) -O <base> specifies base directory or URL where files should be placed
常见登录服务器方法:
#登录到ftp--法1 lftp (ftp://)user:password@site:21 #ftp://可以省略,默认21端口可以省略 #登录到ftp--法2 lftp (ftp://)user@site:port #这种方式回车后,系统提示输入密码 #登录到sftp---法1 lftp sftp://user:password@site:22 #如果是默认端口22,可以省略,如果不是就必须填写端口号 #登录到sftp---法2 lftp sftp://user@password:port #通过user、passwd登录 lftp ftp://user:password@site:port lftp user:password@site:port lftp site -p port -u user,password lftp site:port -u user,password
另一种登录方式:
需要lftp内部命令bookmark支持,不可能每一次登录都需要输入一遍用户名和密码,那样很烦人,可以用bookmark来搞定。
lftp [email protected]:/> ? bookmark Usage: bookmark [SUBCMD] bookmark command controls bookmarks The following subcommands are recognized: add <name> [<loc>] - add current place or given location to bookmarks and bind to given name del <name> - remove bookmark with the name edit - start editor on bookmarks file import <type> - import foreign bookmarks list - list bookmarks (default) lftp [email protected]:/>这样就会在~/.lftp目录下多个bookmarks的文件。
例如,
bookmark add hehe
就会在bookmarks文件中多一行:
hehe ftp://tv_build:[email protected]/
然后下次登录的时候直接运行,lftp hehe就可以直接登录了
查找ftp端文件
ls *.txt ##查找当前目录下的所有txt文件 ls ./123/ ##列出123目录下所有文件 find . -name "*.txt" ##递归查找站点上所有的txt文件 find ./xx -name "*.txt" ##查找xx目录下所有的txt文件
ctrl+z ##将当前进行的任务移交后台处理,也可以在命令行末尾加&符号使任务在后台执行 wait ##将后台处理任务调至前台查看 jobs ##查看后台进行的任务列表 kill all 或者 job_no ##删除所有任务 或 指定的任务 queue start ##开始任务列表 queue stop ##停止任务列表 ##将任务加入任务列表 queue get 123.txt queue put 234.txt queue mirror aaa/
lftp -c "set ftp:list-options -a; open ftp://$FTP_USER_NAME:$FTP_USER_PWD@$FTP_SERVER$FTP_DIR mkdir -p $DATE cd $DATE put $DEST_DIR/$MANIFEST_FILE put $DEST_DIR/u-boot.bin put $DEST_DIR/recovery.img put $UPDATE_ZIP put $DEST_DIR/boot.img put $DEST_DIR/ramdisk.img bye"
参考:
http://blog.csdn.net/longxibendi/article/details/5754646
http://blog.chinaunix.net/uid-24993824-id-470961.html
http://baike.baidu.com/link?url=P3kxeKUOBs72L9fgplkwfxwjSWIpL9KnsJobPbYz79QUJkVpITts25hEffFBm2sxqK1FV_VxvLp8qRabaCQQBq