linux脚本执行 ftp命令行,命令行下 FTP 使用技巧

简单介绍

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

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

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

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

machine 192.168.0.1 login 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中应该设置的大致有如下几条:

default login password

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

binary

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

runique

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

prompt off

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

hash on

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

idle 7200

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

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.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值