2011年(13)
分类: LINUX
2011-10-08 14:54:30
rcp不是一种安全的的传输文件的方式,rcp通过rsh(rsh见下面)来执行远程命令,要使用rcp必须经过一些配置,现在rcp已经被scp取代了,常用scp来进行文件传输。要使用rcp,需要具备以下条件:
(1)如果系统中有 /etc/hosts 文件,应确保该文件包含要与之进行通信的远程主机信息:internet_address official_name alias。例如:1.186.10.*** blade1.ibm.com.cnblade
(2).rhosts 文件:.rhosts 文件位于远程系统的根目录下,其中包含本地系统的名称和本地登录名。例如,远程系统的 .rhosts 文件中的项可能是:blade1 root;其中,blade1 是本地系统的名称,root 是本地登录名。这样,blade1 上的 root 即可在包含 .rhosts 文件的远程系统中来回复制文件。
配置过程:
(1)在双方root用户根目录下建立.rhosts文件,并将双方的hostname加进去.在此之前应在双方的 /etc/hosts文件中加入对方的IP和hostname
(2)把rsh服务启动起来,redhat默认是不启动的。方法:用执行ntsysv命令,在rsh选项前用空格键选中,确定退出。然后执行:service xinetd restart即可。如果没有rsh,请见下面rsh部分
(3)到/etc/pam.d/目录下,把rsh文件中的auth required /lib/security/pam_securetty.so一行用“#”注释掉即可。(只有注释掉这一行,才能用root用户登录)
命令使用:
rcp [options] [[user@]host1:]file1 ... [[user@]host2:]file2
options:
-r 递归地把源目录中的所有内容拷贝到目的目录中。
-p 试图保留源文件的修改时间和模式,忽略umask。
rsh(remote shell,它不够安全):rsh使用条件同rcp,rsh配置过程(以root为例)
(1) 在服务器上运行/urs/bin/ntsysv选中rexec,rlogin,rsh三项服务。
(2) 运行#/sbin/service xinetd restart启动该三项服务。
(3) 运行 echo"rexec">>/etc/securetty; echo"rlogin">>/etc/securetty; echo"rsh">>/etc/securetty
(4) 在服务器上运行echo"你的ip地址root">>/root/.rhosts或者echo"你的主机名root">>/root/.rhosts且确保在服务器上的/etc/hosts中有主机名和ip地址的映射关系
(5) 到/etc/pam.d/目录下,把rexec, rlongin, rsh文件中的auth required /lib/security/pam_securetty.so 一行用“#”注释掉即可。(只有注释掉这一行,才能用root用户登录)
(6) rsh命令用法:rsh remote-sytem-neame Linux-command,例如:rsh blade1 ls /home/root
scpscp 命令是 SSH中最方便有用的命令了,scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 。 与rcp 不同的是,scp 在需要进行验证时会要求你输入密码或口令。
scp [options] [本地用户名@IP地址:]file1 [远程用户名 @IP 地址 :] file2
options:
-v 用来显示进度,可以用来查看连接,认证,或是配置错误。
-C 使能压缩选项。
-c 选择使用那个加密算法(具体对应到ssh的-c cipher-spec,这个参数值会被传给ssh,可选择值3des,blowfish,des),使用blowfish会快很多,可以参看man ssh 中的-c cipher-spec
-P 选择端口
-r 递归拷贝整个目录
-l 限制使用带宽,Kbit/s
-o 指定传给ssh的一些参数值,比如Compression=yes
-p 保留文件的修改时间等信息。
rsyncrsync是rcp的替代品之一,rsync 是一款高效的远程数据备份和镜象工具,可快速地同步多台主机间的文件,其具有如下特性:
需要提及的是 rsync 以其优越的性能优势区别于其它几种 Linux 文件传输方法,其同步文件的速度相当快,这主要归功于 rsync 所使用的传输算法。简而言之 rsync 算法能在相当短的时间内计算出需要备份的数据,只对源文件与目标文件的不同之处进行传输,从而降低网络中传输的数据量,以此达到快速备份镜像的目的。下面通过一典型应用场景来描述 rsync 算法的基本原理:主机 A 与主机 B 均有对同一文件的拷贝,用户对主机 A 上的拷贝进行更新,主机 B 通过 rsync 算法对更新后的文件进行同步。以下是该算法的实现步骤:
(1)主机 B 将原始拷贝划分成大小为 N 的不重合的若干块(文件末尾部分分块大小可能不足 N),并对这些数据块进行两种不同方式的校验:32 位的滚动弱校验、128 位的 MD4 强校验。弱校验较之强校验计算速度快。
(2)主机 B 将每个数据块的弱校验、强校验结果发送给主机 A 。
(3)主机 A 对更新后的文件拷贝中的每个长度为 N 的数据块进行弱校验并与从 B 接收到的弱校验值进行匹配,若相同再进行强校验匹配。由于弱校验的滚动特性可以快速地筛选出需要进行同步的数据块。该算法的运算量主要集中在主机 A 上。
通过上述计算,主机 A 将文件的不同部分发送给 B,B 接收到两个拷贝之间的不同之处,从而同步得到更新后的文件。通过如上方式,rsync 避免了对相同数据的传输,减少了网络带宽的浪费。在时间上整个过程中需一个往返,从某种程度上也保证了 rsync 的优越性能。
Rsync可以通过两种方式来连接远程服务器,一种是通过类shell命令的方式,一种是通过rsync daemon的方式,rsync daemon需要进行安装和配置,具体如下:
可从官方网站 http://rsync.samba.org/ 上下载安装 rsync 的最新版本。使用时需将 rsync 分别安装于服务端和客户端,服务端和客户端使用同一个 rsync 软件包来实现远程镜像和定期同步更新。需要说明的是一个 rsync 服务端可同时备份多个客户端的数据;多个服务端备份一个客户端的数据。 rsync 默认端口为 873,服务器在该端口接收客户的匿名或者认证方式的备份请求。
rsync 服务端在使用之前需要进行必要的配置,其配置文件为 /etc/rsyncd.conf,进行认证、访问、日志记录等控制。配置文件包括全局参数、模块参数的设置。 rsyncd.conf 文件中 [module] 之前的所有参数为全局参数,也可以在全局参数部分定义模块参数,在这种情况下该参数的值就是所有模块的默认值。全局参数设置程序使用的端口号,指定消息文件、日志文件 pid 文件以及发送日志消息的级别。模块参数主要定义服务端哪个目录需要被同步。用户可根据不同的需要指定多个模块,每个模块对应需要备份的一个目录树,即若有 N 个需要备份的目录树,则需要 N 个模块与之对应。模块中可以定义许多参数,常见参数如下。
需要注意的是服务器端启动:/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
连接远程服务器的两种方式的基本语法
(1) 通过远程 shell 方式:
(2) 通过 rsync daemon 方式:
如果 rsync 命令中只指定 SRC 参数而不指定 DEST 参数,则意为显示源文件列表而非进行同步拷贝。
Options:
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
实例:
(1) 查看服务端文件及列表:
(2) 保持客户端与服务端的数据同步:
(3) 当服务端的数据出现问题时,需要通过客户端的数据对服务端进行恢复,只要客户端有服务端的写入权限,即可通过调换 rsync 命令的 SRC、DEST 参数进行恢复。
ftp
ftp命令使用文件传输协议(File Transfer Protocol ,FTP)在本地主机和远程主机之间或者两个远程主机之间进行文件传输。FTP 协议允许数据在不同文件系统的主机之间传输。尽管这个协议在传输数据上提供了高适应性,但是它并没有尝试去保留一个特定文件系统上的文件属性(例如一个文件的保护模式或者修改次数)。而且 FTP 协议很少对一个文件系统的整体结构作假定,也不提供这样的功能,比如递归的拷贝子目录。在使用 ftp 命令时,需要注意 FTP 协议的这些特性。当需要保留文件属性或者需要递归的拷贝子目录时,可以使用 rcp/scp 等命令。
如果需要将文件以ftp传输到目的服务器上,必须在目的服务器上安装ftp server,基本的安装和启动过程如下:
根据服务对象的不同,FTP服务可以分为两类:一类是系统FTP服务器,它只允许系统上的合法用户使用;另一类是匿名FTP服务器,它允许任何人登录到FTP服务器,和服务器连接后,在登录提示中输入Anonymous,即可访问服务器。
Yum list *ftp* (找到可用的Ftp包)
sudo yum install ftp包
手工启动和关闭:启动:/usr/sbin/ftprestart 关闭:/usr/sbin/ftpshut
FTP服务器的配置:为了确保FTP服务器安全,必须设置一些重要的配置文件,以更好地控制用户的访问权限。这些配置文件是:/etc/ftpusers;/etc/ftpconversions;/etc/ftp-groups;/etc/ftpphosts;/etc/ftpaccess。利用这些文件,能够非常精确地控制哪些人、在什么时间、从什么地点可以连接服务器,并且可以对他们连接后所做的工作进行检查跟踪。
(1)/etc/ftpusers:该文件夹中包含的用户不能通过FTP登录服务器,有时将需要禁止的用户账号写入文件/etc/ftpuser中,这样就可以禁止一些用户使用FTP服务。
(2)/etc/ftpconversions:用来配置压缩/解压缩程序。
(3)/etc/ftpgroups:创建用户组,这个组中的成员预先定义可以访问FTP服务器。
(4)/etc/ftpphosts:用来根据禁止或允许远程主机对特定账户的访问,例如:allow czc 192.168.0.0/24 deny cdd 10.0.0.0/8(表示允许czc用户从192.168.0这个网段连线访问,拒绝cdd从10.这个网段连线访问)。
(5) /etc/ftpaccess:是非常重要的一个配置文件,用来控制存取权限,文件中的每一行定义一个属性,并对属性的值进行设置。下面对它的一些常用配置做一点介绍:
安装、配置好FTP服务器后,只需要在命令提示符后输入:FTP Servername,用主机名或希望连接的FTP服务器的IP地址代替Servername,按照提示输入用户名和口令,然后用标准的Linux上移或下移FTP服务器目录结构。另外,也可以采用图形化FTP程序,包括窗口式gFTP,可以借助Web浏览器去访问FTP服务器。
在登录上ftp后,可以使用如下ftp命令进行操作:
sftp(安全文件传输协议)与 ftp 有着几乎一样的语法和功能。FTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。它并不使用ftp守护进程(ftpd或wu-ftpd)来进行连接,而是有意义地增强系统的安全性。实际上,通过监视一些系统中的log文件,可以注意到很多攻击是针对于ftpd守护进程的。sftp避免了这些攻击从而可以停止在wu-ftpd上潜在的危险。SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作。使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
用法举例:
(1) sftp root@10.48.30.192:/root/test.sh(直接将192上的文件复制到本地)
(2)sftp root@10.48.30.192:/root (直接连接到192的root目录下,这样就可以使用get put等命令了)
sftp使用在数据连接上使用ssh2,所以文件的传输是尽可能地安全。使用sftp代替ftp两个主要的的原因是:
(1)password从不用明文传输,防止sniffer(嗅探器)的攻击。
(2)数据在传输时被加密,使用刺探和修改连接非常困难。
使用sftp2是非常简单的。让我们假设你使用了你的帐户:myname通过sftp连按上了主机host1。可以使用命令:sftp myname@host1。当sftp2准备好了来接受连接时,它将显示一个状态提示符 sftp>。在sftp手册中有完整的用户可以使用的命令列表;其中有:
从sftp使用加密技术以来,一直有一个障碍:连接速度慢(有2-3倍),但是这一点对于非常好的安全性来讲只能放在一边了。在一个测试中,局域网上的sniffer可以在一个小时中捉住ftp连接上的4个password.。sftp的使用可以从网络上传送文件并且除去这些安全问题。
lftplftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp非常像一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。
命令行语法
(1) lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
-e在选择后执行命令
-u [,] 使用指定的用户名/口令进行验证
-p 连接指定的端口
Site:主机名,URL 或书签的名字
(2) lftp -f script_file
执行文件中的命令后退出
(3) lftp -c commands
执行命令后退出
(4) lftp –version
显示 lftp 版本后退出
(5) lftp --help
显示帮助信息后退出
例子:
(1)如果在命令行中输入的站点名称,lftp将直接登录站点,比如
lftp ftp://.............
(2) 如果在命令行不输入站点名称,则必须在进入到lftp界面后用open命令打开
Lftp
lftp :~> open ftp://...................
常用命令:
lftp ................:/> get -c ls-lR.txt
lftp ...............:/> mget *.txt
lftp ................:/> mirror incoming local_name
lftp ................:/> mirror -R local_name
lftp ................:/> mirror --parallel=3 incoming local_name
lftp ................:/> pget -n 4 ls-lR.txt
缺省情况下,按 Ctrl+z,正在执行的任务将转为后台执行,也可以在命令行末尾加&符号使任务在后台执行。用jobs命令可以查看所有的后台进程。用queue命令可以排队新的任务。如果退出lftp是还有任务在后台执行,lftp将转为后台执行。
lftp支持类似bash的管道操作,例如用下面的命令可以将ftp服务器上的特定目录下(也可以是整个站点)所有文件的大小存到本地的文件ls.txt中
lftp ................:/> du incoming > ls.txt
相关文件
(1) /etc/lftp.conf
全局配置文件,实际位置依赖系统配置文件目录,可能在/etc,也可能在/usr/local/etc
(2) ~/.lftp/rc, ~/.lftprc
用户配置文件,将在/etc/lftp.conf之后执行,所以这里面的设置会覆盖/etc/lftp.conf中的设置。
(3) lftp 缺省不会显示 ftp 服务器的欢迎信息和错误信息,这在很多时候不方便,因为你有可能想知道这个服务器到底是因为没开机连不上,还是连接数已满。如果是这样,你可以在 ~/.lftprc 里写入一行, debug 3,就可以看到出错信息了。更多的配置选项请查man手册或在lftp界面内用命令 set -a 获得。
(4) ~/.lftp/log
当lftp转为后台非挂起模式执行时,输出将重定向到这里
(5) ~/.lftp/bookmarks
这是lftp存储书签的地方,可以lftp查看bookmark命令
(6) ~/.lftp/cwd_history
这个文件用来存储访问过的站点的工作目录
(7) ~/.lftprc
在用lftp访问国内一些ftp服务器时,往往看到的中文是乱码。不用慌,这是由于服务器和本地编码不一致造成的。我们只要在主目录下新建一个文件~/.lftprc或者~/.lftp/rc。并在其中加入以下内容:debug 3set ftp:charset GBKset file:charset UTF-8#set ftp:passtive-mode no#alias utf8 " set ftp:charset UTF-8"#alias gbk " set ftp:charset GBK"
登录ftp服务器:
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 user@site:port,系统会提示输入password,密码就回显为******了,不过每次都输入这么多,好麻烦哦。 如果有类似leapftp的站点管理器就好了,其实lftp早就给我们想好了: 这就是bookmark。后面我们将会看到。
在终端运行如man lftp或登录ftp后输入help就可以看到命令列表,下面我们看一下lftp常用的命令:
(1) ls:显示远端文件列表(!ls 显示本地文件列表)。
(2) cd:切换远端目录(lcd 切换本地目录)。
(3) get:下载远端文件。
(4) mget:下载远端文件(可以用通配符也就是 *)。
(5) pget:使用多个线程来下载远端文件, 预设为五个。
(6) mirror:下载/上传(mirror -R)/同步 整个目录。
(7) put:上传文件。
(8) mput:上传多个文件(支持通配符)。
(9) mv:移动远端文件(远端文件改名)。
(10) rm:删除远端文件。
(11) mrm:删除多个远端文件(支持通配符)。
(12) mkdir:建立远端目录。
(13) rmdir:删除远端目录。
(14) pwd:显示目前远端所在目录(lpwd 显示本地目录)。
(15) du:计算远端目录的大小
(16) !:执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代)
(17) Lcd:切换本地目录
(18) Lpwd:显示本地目录
(19) Alias:定义别名
(20) Bookmark:设定书签。
(21) Exit:退出ftp
(22) 快捷书签:ftp中的bookmark命令,是将配置写到~/.lftp/bookmarks文件中;我们可以直接修改此文件,快速登陆ftp服务器。
wgetwget 是一个经由 GPL 许可的可从网络上自动获取文件的自由软件包。它是一个非交互式的命令行工具。支持 HTTP,HTTPS 和 FTP 协议,支持代理服务器以及断点续传功能。 wget 可实现递归下载,即可跟踪 HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,实现远程网站的镜像。在递归下载时,wget 将页面中的超级链接转换成指向本地文件,方便离线浏览。由于非交互特性,wget 支持后台运行,用户在退出系统后,仍可继续运行。功能强大,设置方便简单。
基本语法: wget [options] [URL-list]
Options:
-r 递归下载服务器上所有的目录和文件。由 -l 选项来指定递归深度。
-b 后台下载
-m 制作站点镜像
-c 指定断点续传功能。该功能要求服务器支持断点续传。
-I 指定下载目录列表,可实现批量下载
-A/-R 指定接受/拒绝下载列表,实现选择性地下载
--proxy=on/off 指定是否利用代理服务器进行下载
-t, --tries=NUMBER 最大尝试链接次数 (0 表示无限制,默认为 20 次 )
-nc, --no-clobber 不覆盖已存在的文件
-N, --timestamping 只下载比本地新的文件
-nd --no-directories 不进行目录结构创建
-x, --force-directories 强制创建目录结构
-nH, --no-host-directories 不继承主机目录结构
-P, --directory-prefix=PREFIX 设置目录前缀
例子:递归下载 http://www.ibm.com.cn 站点的信息。下载所有显示完整网页所以需要的文件,如图片等。在下载不进行上层目录搜索并将绝对链接转换为相对链接。
wget -r -p -np -k http://www.ibm.com.cn
将在本地硬盘建立 http://www.ibm.com.cn 的镜像,镜像文件存入当前目录下一个名为 www.ibm.com.cn 的子目录中(也可以使用 -nH 参数指定不建立该子目录,而直接在当前目录下建立镜像的目录结构),递归深度为 4,重试次数为无穷(若连接出现问题,wget 将永远重试下去,直至任务完成)
wget -m -l4 -t0 http://www.ibm.com.c
使用代理进行下载,并实现断点续传。代理可以在环境变量 PROXY 或 wgetrc 文件中设定。 -c 选项要求服务支持断点续传。
wget -Y on -c http://www.ibm.com.cn
curlcurl是对 libcurl 库的一个命令行工具包装。 libcurl 库中提供了相应功能的 API,可以在程序中调用。 curl 使用 URL 的语法来传输文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多种协议。 curl 功能强大,它提供了包括代理支持,用户认证,FTP 上载,HTTP post,SSL 连接,文件续传等许多特性。
基本语法:curl [options …
]
其中下载参数大约有 80 多个,curl 的各个功能完全依靠这些参数来完成。下面举例说明 curl 的一些基本用法。
使用实例:
(1) 获取 GNU 的主页curl
(2) 获取 GNU 的 FTP 服务器上根目录下的 README 文件curl
(3) 从一个字典中获取 curl 的定义curl dict://dict.org/m:curl
(4) 如果需要指定用户名和密码的话,可以在 url 中指定,或者使用 -u 参数curl ftp://name:passwd@machine.domain:port/full/path/to/file或者curl -u name:passwd
(5) curl 会将从指定 url 处获取的内容打印到标准输出上。如果需要保存在本地文件中,可以使用 -o,或使用 -O 参数指定使用远程主机上的文件名(如果 url 中没有给出文件名的部分,则此操作将会失败)curl -o gnu.html 或者curl -O
(6) 使用 -x 选项来使用代理进行连接curl -x my-proxy:port
(7) 通过使用 curl 的 -T 选项来进行上载curl -T - ,此命令从标准输入读取数据,并上载至远程 FTP 服务器上的 upfile 文件中。也可以指定上载一个本地文件curl -T localfile -a ftp://ftp.upload.com/upfile其中 -a 参数表示以添加方式将 localfile 中的内容附加到 upfile 的末尾。
总的来说,curl 适合用来进行自动的文件传输或操作序列,它是一个很好的模拟用户在网页浏览器上的行为的工具。尤其当需要在程序中调用时,libcurl 是个很好的选择。
传输速度因为经常在服务器见进行文件传输,就对传输速度和带宽有要求,这里总结一下可以影响以上rcp,scp,rsync,ftp,sftp,lftp,wget,curl这6个命令的传输速度和带宽的参数:
(1) rcp:没有参数可以调整带宽和传输速度
(2) scp:如果传输的文件没有压缩,可以使用-C参数(-C 使能压缩选项)。-c 选择使用那个加密算法,具体对应到ssh的-c cipher-spec,这个参数值会被传给ssh,可选择值3des,blowfish,des),使用blowfish会快很多,可以参看man ssh 中的-c cipher-spec。可以使用-l 限制使用带宽,Kbit/s。避免因为传输文件而影响其他程序使用带宽。-o ssh_option使用ssh选项
(3) rsync:-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节;-z, --compress 对备份的文件在传输时进行压缩处理;--bwlimit=KBPS 限制I/O带宽,KBytes per second ;-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
(4) ftp:FTP> ascii 将文档传送类型配置为默认的 ASCII。说明:linux ftp命令参数支持两种文档传送类型,ASCII 码和二进制图像,在传送文本文档时应该使用ASCII。Binary二进制传输。
(5) sftp: -B buffer_size, -C使用压缩,-o ssh_option使用ssh选项
(6) lftp:可以调整进程数等
(7) wget: --limit-rate=amount限制带宽。
(8)
curl:-B/--use-ascii和--ciphers
,--compressed等。
(1) 传输性能:wget 通过支持后台执行及断点续传提高文件传输效率; rsync 则以其高效的传输及压缩算法达到快传输的目的。
(2) 配置难度:rcp 只需进行简单的配置,创建.rhost文件以及设置/etc/hosts文件中主机名与IP地址列表; wget设置方便简单,只需在客户端指定参数执行命令即可; rsync 在使用前需要对服务端/etc/rsyncd.conf 进行参数设定,配置内容相对复杂。
(3) 安全性能:ftp、rcp不保证传输的安全性,scp、rsync则均可基于ssh 认证进行传输,提供了较强的安全保障。wget 也可通过指定安全协议做到安全传输。
通过上述的对比不难发现,每种文件传输方法基于其自身的特点与优势均有其典型的适用场景:
(1) ftp 作为最常用的入门式的文件传输方法,使用简单,易于理解,并且可以实现脚本自动化;但是需要安装ftp server才可以访问远程ftp server
(2) rcp 相对于ftp可以保留文件属性并可递归的拷贝子目录;
(3) scp 利用ssh传输数据,并使用与ssh相同的认证模式,相对于rcp提供更强的安全保障;
(4) wget实现递归下载,可跟踪HTML 页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构,适合实现远程网站的镜像;
(5) curl 则适合用来进行自动的文件传输或操作序列,是一个很好的模拟用户在网页浏览器上的行为的工具;
(6) rsync 更适用于大数据量的每日同步,拷贝的速度很快,相对wget来说速度快且安全高效。
(7) sftp使用在数据连接上使用ssh2,所以文件的传输是尽可能地安全。但传输速度慢。是ftp的替代品,比ftp安全,不能访问http资源。
(8) lftp可以访问ftp资源,也可以访问http资源。支持断点续传,多进程下载。