命令行下 FTP 使用技巧

简单介绍

网上有很多图形化界面的 FTP 工具,但我的工作环境中使用了很多自动化工具必须在命令行下操作,Windows 和 Linux 下都有基于命令行的 FTP 工具,而它们的使用方式也都大同小异,这里介绍的方法都是通用的。

使用 .netrc 配置文件进行自动化操作

.netrc 文件可以看做 FTP 工具的默认命令列表,当你不使用任何参数调用 FTP 命令时它会自动读取这个文件中的内容执行命令,下面的就是一个简单的例子:

在自己的home目录下建立一个权限600(权限必须是600,少了不行,多了也不行),名为 .netrc 的文件,内容如下:

machine 192.168.0.1 login <ftpuser> password <ftpuser_password>

这样以后你每次 ftp 192.168.0.1 的时候系统都会帮你以用户名ftpuser登录到该服务器,利用这个特征可以实现自动ftp。

如果想要每天5:00到192.168.0.1机器上面获得 /test 目录下的文件 test.txt ,可以建立一个文件 ftp_cmd,内容为:

cd test
get test.txt
bye

然后在 Linux 系统中使用 crontab -e 设置定时任务:

0 5 * * * ftp 192.168.0.1 < ftp_cmd

附:.netrc 的用法

netrc 中应包含的基本命令:

FTP中有几十个命令,在.netrc中应该设置的大致有如下几条:

  1. default login password
    在互联网中存在大量匿名ftp帐户,用户在不同的主机间频繁登录anonymous帐户,输入自己的电子邮件地址作为口令,这种输入极其繁琐,完全有必要利用.netrc文件在进入ftp时自动完成该过程。

  2. binary
    许多用户在下载大量文件之后才意识到下载的文件是二进制文件,而自己却是使用ascii方式传输使下载文件无法使用,做了许多无用功。在.netrc文件中提前将传输方式设置为binary 完全可避免出现上述情况。

  3. runique
    在浩如烟海的文件中有大量同名文件,如readme、index等,如果将同名文件下载到同一目录则新传的文件会覆盖原同名文件。为了使具有潜在重要性的文件不至于被意外覆盖,也需要在.netrc文件中设置runique参数防止上述错误。

  4. prompt off
    使用ftp时,经常会用到mget或其它需要确认的ftp命令,将此确认过程取消可大大方便使用者。

  5. hash on
    ftp中的hash命令使得在进行文件传输时每传输1千字节就在屏幕上显示一个"#"号,通过观看屏幕上的"#"号可以很直观地看到传输速度的快慢,以及文件的传输完成情况。

  6. idle 7200
    目前国内的Internet专线速率普遍偏低,用户数却在急剧膨胀,所以用ftp传输销大一些的文件时经常会因为线路拥塞而断线,为了减少因断线而反复登录的次数,需将idle命令的参数设置为最大(一般为7200秒)。

  7. macdef
    macdef定义一个宏,macro_name为宏定义的名称。在macdef行下,可输入任何有效的ftp命令,并以空行结束宏定义,执行时只需在宏名前加"$"号即可。如果宏名定义为init,则该宏命令在启动ftp后自动加以执行,无需用户输入$macro_name。

在命令行下指定用户名和密码:

ftp://dev:abcd1234@10.208.66.10://pub/readme.txt

常用 FTP 命令列表

FTP的命令行格式为:ftp -v -d -i -n -g [主机名],各个参数含义如下:

  • -v 显示远程服务器的所有响应信息
  • -n 限制ftp的自动登录,不使用 .netrc 文件
  • -d 使用调试方式
  • -g 取消全局文件名

FTP使用的内部命令如下(中括号表示可选项):

  • ![cmd[args]]
    在本地执行交互shell,exit回到ftp环境,如:!ls*.zip

  • $macro-name [args]
    执行宏定义的命令列表

  • account [password]
    提供登录远程系统成功后访问系统资源所需的补充口令

  • append local-file [remote-file]
    将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名

  • ascii
    使用 ascii 模式传输

  • bell
    每个命令执行完毕后计算机响铃一次

  • bin
    使用二进制文件传输方式

  • bye
    退出ftp会话过程

  • case
    使用 mget 时将远程主机文件名中的大写转为小写字母

  • cd remote-dir
    进入远程主机目录

  • cdup
    进入远程主机目录的父目录

  • chmod mode file-name
    将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out

  • close
    中断与远程服务器的ftp会话(与open对应)

  • cr
    使用asscii方式传输文件时,将 \r\n 转换为 \n

  • delete remote-file
    删除远程主机文件

  • debug[debug-value]
    设置调试方式,显示发送至远程主机的每条命令,如:debug 3,若设为 0 表示取消debug

  • dir remote-dir local-file
    显示远程主机目录,并将结果存入本地文件

  • disconnection
    同close

  • form format
    将文件传输方式设置为format,缺省为file方式

  • get remote-file [local-file]
    将远程主机的文件 remote-file 传至本地硬盘的 local-file

  • hash
    每传输1024字节显示一个hash符号(#)

  • help [cmd]
    显示ftp内部命令cmd的帮助信息,如:help get

  • idle [seconds]
    将远程服务器的休眠计时器设为[seconds]秒

  • image
    设置二进制传输方式(同binary)

  • lcd[dir]
    将本地工作目录切换至dir

  • ls [remote-dir] [local-file]
    显示远程目录remote-dir, 并存入本地文件local-file

  • macdef macro-name
    定义一个宏,遇到macdef下的空行时,宏定义结束

  • mdelete [remote-file]
    批量删除远程主机文件

  • mdir remote-files local-file
    与dir类似但可指定多个远程文件,如 :mdir .o..zipoutfile

  • mget remote-files
    批量传输多个远程文件

  • mkdir dir-name
    在远程主机中建一目录

  • mls remote-file local-file
    同nlist,但可指定多个文件名

  • mode [modename]
    将文件传输方式设置为modename,缺省为stream方式

  • modtime file-name
    显示远程主机文件的最后修改时间

  • mput local-file
    将多个文件传输至远程主机

  • newer file-name
    如果远程机中 file-name 的修改时间比本地硬盘同名文件的时间更近,则重传该文件

  • nmap [inpattern outpattern]
    设置文件名映射机制, 使得文件传输时某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况

  • ntrans [inchars] [outchars]]
    设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。

  • open host[port]
    建立指定ftp服务器连接,可指定连接端口

  • passive
    进入被动传输模式

  • prompt
    设置多个文件传输时的交互提示

  • put local-file [remote-file]
    将本地文件local-file传送至远程主机

  • pwd
    显示远程主机的当前工作目录

  • quit
    同bye,退出ftp会话

  • quote arg1,arg2...
    将参数逐字发至远程ftp服务器,如:quote syst ...

  • recv remote-file [local-file]
    同get

  • reget remote-file[local-file]
    类似于get,但若local-file存在,则从上次传输中断处续传

  • rhelp [cmd-name]
    请求获得远程主机的帮助

  • rstatus[file-name]
    若未指定文件名,则显示远程主机的状态,否则显示文件状态

  • rename[from][to]
    更改远程主机文件名

  • reset
    清除回答队列

  • restart marker
    从指定的标志marker处重新开始get或put,如:restart 130

  • rmdir dir-name
    删除远程主机目录

  • runique
    设置文件名唯一性规则,若文件存在,则在原文件后加后缀.1, .2等

  • send local-file [remote-file]
    同put

  • sendport
    设置PORT命令的使用

  • site arg1,arg2 ...
    将参数作为SITE命令逐字发送至远程ftp主机

  • size file-name
    显示远程主机文件大小,如:site idle 7200

  • status
    显示当前ftp状态

  • struct [struct-name]
    将文件传输结构设置为struct-name,缺省时使用stream结构

  • system
    显示远程主机的操作系统类型,一般会被远程主机忽略掉这个命令

  • tenex
    将文件传输类型设置为TENEX机的所需的类型

  • tick
    设置传输时的字节计数器

  • trace
    设置包跟踪

  • type [type-name]
    设置文件传输类型为type-name,缺省为ascii,type binary 设置二进制传输方式。

  • umas k[newmask]
    将远程服务器的缺省umask设置为newmask,如:umask 3

  • user user-name [password] [account]
    向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。

  • verbose
    同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.

  • ?[cmd]
    同help.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容

  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 4,949评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,050评论 18 139
  • 部分内容转载自搜狗百科 cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上阅读 2,348评论 0 24
  • FTP服务概述 简单FTP构建及访问 VSFTP服务基础 用户禁锢、黑白名单 FTP并发及带宽限制 一、FTP服务...
    紫_轩阅读 7,425评论 3 25
  • Linux 后台运行 命令后加 & 注意 如果希望关闭ssh后依然可以在后台运行需要
    乐楽樂阅读 240评论 0 0