Linux的文件传输命令总结
由于工作原因,须要常常在不同的server见进行文件传输,特别是大文件的传输,因此对linux下不同server间传输数据命令和工具进行了研究和总结。主要是rcp,scp,rsync,ftp,sftp,lftp,wget,curl。
rcp
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) 在server上执行/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) 在server上执行echo"你的ip地址root">>/root/.rhosts或者echo"你的主机名root">>/root/.rhosts且确保在server上的/etc/hosts中有主机名和ip地址的映射关系
(5) 到/etc/pam.d/文件夹下,把rexec, rlongin, rsh文件里的auth required /lib/security/pam_securetty.so 一行用“#”凝视掉就可以。(仅仅有凝视掉这一行。才干用root用户登录)
(6) rsh命令使用方法:rshremote-sytem-neame Linux-command。比如:rsh blade1 ls /home/root
scp
scp 命令是 SSH中最方便实用的命令了。scp就是secure copy。是用来进行远程文件拷贝的。传输数据使用 ssh,而且和ssh 使用同样的认证方式,提供同样的安全保证。 与rcp 不同的是,scp 在须要进行验证时会要求你输入password或口令。
scp [options] [本地username@IP地址:]file1 [远程username @IP 地址 :] file2
options:
-v 用来显示运行进度,能够用来查看连接,认证,或是配置错误。
-C 使能压缩选项。
-c 选择使用那个加密算法(详细相应到ssh的-c cipher-spec。这个參数值会被传给ssh,可选择值3des,blowfish,des),使用blowfish会快非常多,能够參看man ssh 中的-c cipher-spec
-P 选择port
-r 递归拷贝整个文件夹
-l 限制使用带宽,Kbit/s
-o 指定传给ssh的一些參数值,比方Compression=yes
-p 保留文件的改动时间等信息。
rsync
rsync是rcp的替代品之中的一个,rsync 是一款高效的远程数据备份和镜象工具,可高速地同步多台主机间的文件。其具有例如以下特性:
l 支持链接、全部者、组信息以及权限信息的拷贝;
l 通过远程 shell(ssh, rsh)进行传输;
l 无须特殊权限就可以安装使用。
l 流水线式文件传输模式,文件传输效率高;
l 支持匿名操作;
须要提及的是 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能够通过两种方式来连接远程server。一种是通过类shell命令的方式,一种是通过rsync daemon的方式,rsync daemon须要进行安装和配置。详细例如以下:
可从官方站点http://rsync.samba.org/ 上下载安装 rsync 的最新版本号。使用时需将 rsync 分别安装于服务端和client,服务端和client使用同一个 rsync 软件包来实现远程镜像和定期同步更新。
须要说明的是一个 rsync 服务端可同一时候备份多个client的数据;多个服务端备份一个client的数据。 rsync 默认port为 873。server在该port接收客户的匿名或者认证方式的备份请求。
rsync 服务端在使用之前须要进行必要的配置,其配置文件为 /etc/rsyncd.conf,进行认证、訪问、日志记录等控制。
配置文件包含全局參数、模块參数的设置。 rsyncd.conf 文件里 [module] 之前的全部參数为全局參数,也能够在全局參数部分定义模块參数,在这样的情况下该參数的值就是全部模块的默认值。全局參数设置程序使用的port号。指定消息文件、日志文件 pid 文件以及发送日志消息的级别。模块參数主要定义服务端哪个文件夹须要被同步。
用户可依据不同的须要指定多个模块,每一个模块相应须要备份的一个文件夹树。即若有 N 个须要备份的文件夹树,则须要 N 个模块与之相应。模块中能够定义很多參数,常见參数例如以下。
l Comment 模块信息描写叙述,该描写叙述连同模块名在客户连接得到模块列表时显示给客户。默认没有描写叙述定义。
l Path 指定供备份的文件夹路径,必须指定该參数。
l max connections 指定最大并发连接数以保护server,超过限制的连接请求将被告知随后再试。
默认值为 0,即没有限制。
l log file 指定日志文件
l read only 设定是否同意客户上载文件。若为 true 不论什么上载请求均会失败,若为 false 且client拥有server文件夹读写权限则能够上载。默认值为 true 。
l write only 设定是否同意客户下载文件。
若为 true 不论什么下载请求均会失败,默认值为 false 。
l List 设定当客户请求能够使用的模块列表时,是否列出该模块。
若为 false,则创建隐藏的模块。
默认值为 true 。
l fake super 同意文件享有全部权限。而无需后台服务以 root 权限进行操作。
l Filter 设置过滤列表以决定哪些文件可由client訪问。
l hosts allow 指定同意客户连接的 IP 地址。能够为单个 IP 地址或整个网段。
多个 IP或网段须要以空格隔开。
默认是同意全部主机连接。
l dont compress 指定不进行压缩处理就可以传输的文件。默认值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
l pre-xfer exec, post-xfer exec 设置可在文件传输前/后运行的命令。若在文件传输前运行的命令失败。则取消本次传输操作。
须要注意的是server端启动:/usr/bin/rsync--daemon --config=/etc/rsyncd/rsyncd.conf
连接远程server的两种方式的基本的语法
(1) 通过远程 shell 方式:
l rsync [OPTION] [USER@]HOST:SRC DEST:用远程 shell(如 ssh, rsh)实现将远程机器的内容复制到本地机器。 SRC 地址路径中以单个冒号 ":" 进行分隔。
l rsync [OPTION] SRC [USER@]HOST:DEST:使用远程 shell(如 rsh、ssh)实现本地机器的内容复制到远程机器。
DEST 地址路径中以单个冒号 ":" 进行分隔。
(2) 通过 rsync daemon 方式:
l rsync [OPTION] [USER@]HOST::SRC DEST 或rsync [OPTION]rsync://[USER@]HOST[:PORT]/SRC [DEST]:从远程 rsync server中复制文件到本地机。
SRC 地址路径中以双冒号 "::" 进行分隔。
l rsync [OPTION] SRC [USER@]HOST::DEST 或rsync [OPTION] SRCrsync://[USER@]HOST[:PORT]/DEST:从本地机器复制文件到远程 rsync server中。 DEST 地址路径中以双冒号 "::" 进行分隔。
假设 rsync 命令中仅仅指定 SRC 參数而不指定 DEST 參数,则意为显示源文件列表而非进行同步拷贝。
Options:
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指定远程server上的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匹配为username和组名
--timeout=TIMEIP超时时间,单位为秒
-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) 查看服务端文件及列表:
l rsync 9.186.110.53::查看服务端可用的模块列表以及凝视信息;rsync ibmuser@9.186.110.53::www/查看服务端 www 模块中的文件夹及文件列表(使用 rsyncd 用户认证方式)
l rsync ibmuser@9.186.110.53:/var/www/html/查看服务端/var/www/html 文件夹中的内容(使用服务端的系统用户进行验证,如 ibmuser)
(2) 保持client与服务端的数据同步:
l rsync -avz ibmuser@9.186.110.53::www/ /backup1/使用后台服务方式将服务端www 模块下的内容备份到本地 /backup1 文件夹中,备份时保留原有权限、属性、属主及符号连接等,并使用压缩方式加快传输数据。
l rsync – avzibmuser@9.186.110.53:/var/www/html /backup2/使用 ssh 方式将远程的/var/www/html 文件夹备份到本地 /backup2/ 文件夹下
l rsync -avz --deleteibmuser@9.186.110.53::www/ /backup3/将远程 www 模块备份到本地/backup3/ 文件夹中,同一时候进行同步文件夹。删除本地文件夹中多余的文件。
(3) 当服务端的数据出现故障时。须要通过client的数据对服务端进行恢复,仅仅要client有服务端的写入权限,就可以通过调换 rsync 命令的 SRC、DEST 參数进行恢复。
ftp
ftp命令使用文件传输协议(FileTransfer Protocol ,FTP)在本地主机和远程主机之间或者两个远程主机之间进行文件传输。FTP 协议同意数据在不同文件系统的主机之间传输。虽然这个协议在数据传输上提供了高适应性,可是它并没有尝试去保留一个特定文件系统上的文件属性(比如一个文件的保护模式或者改动次数)。并且 FTP 协议非常少对一个文件系统的总体结构作假定,也不提供这种功能。比方递归的拷贝子文件夹。
在使用 ftp 命令时。须要注意 FTP 协议的这些特性。当须要保留文件属性或者须要递归的拷贝子文件夹时,能够使用 rcp/scp 等命令。
假设须要将文件以ftp传输到目的server上。必须在目的server上安装ftp server,主要的安装和启动步骤例如以下:
依据服务对象的不同,FTP服务能够分为两类:一类是系统FTPserver,它仅仅同意系统上的合法用户使用;还有一类是匿名FTPserver。它同意不论什么人登录到FTPserver,和server连接后。在登录提示中输入Anonymous,就可以訪问server。
Yum list *ftp* (找到可用的Ftp包)
sudo yum install ftp包
手工启动和关闭:启动:/usr/sbin/ftprestart 关闭:/usr/sbin/ftpshut
FTPserver的配置:为了确保FTPserver安全,必须设置一些重要的配置文件,以更好地控制用户的訪问权限。这些配置文件是:/etc/ftpusers;/etc/ftpconversions;/etc/ftp-groups;/etc/ftpphosts。/etc/ftpaccess。
利用这些文件,能够很精确地控制哪些人、在什么时间、从什么地点能够连接server,而且能够对他们连接后所做的工作进行检查跟踪。
(1) /etc/ftpusers:该目录中包括的用户不能通过FTP登录server,有时将须要禁止的用户账号写入文件/etc/ftpuser中,这样就能够禁止一些用户使用FTP服务。
(2) /etc/ftpconversions:用来配置压缩/解压缩程序。
(3) /etc/ftpgroups:创建用户组,这个组中的成员预先定义能够訪问FTPserver。
(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:是很重要的一个配置文件。用来控制存取权限。文件里的每一行定义一个属性,并对属性的值进行设置。以下对它的一些经常使用配置做一点介绍:
l 定义用户类别:格式:class[类名] [real/guest/anonymous][IP地址] 功能:这个指令的功能设定FTPserver上用户的类别。
并可对client的IP地址进行限制,同意特定或者所有的IP地址訪问FTPserver。
l 登录重试次数:在命令行中输入:loginfails 10,这表明假设10次还没有登录成功就切断连线。
l password检查:格式:passwd-check〈strictness〉 warn。是对匿名用户的password使用方式的检查,当中〈strictness〉是三个可能的字符串之中的一个:None、Trivial、RFC822。若选None,表示将不正确口令做不论什么检查。若选Trivial,表示对口令有一定的要求。它须要在口令中至少要有一个@符号;若选RFC822。则表示最严格,要求E-mail地址必须遵守RFC822报文标题标准(如:czc@domain.com )。比如:passwd-check rfc822 warn。表明password的要求非常严格,当password不符合规定时出现警告信息。
l 登录人数的限制:格式:limit[类别] [人数] [时间] [文件名称]。设置指定类别在约定时间内能够登录FTP的人数。
比如:limit remote Any/etc/many.msg,说明类别Remote类别在不论什么时间内登录人数不超过20个人,否则会显示Many.msg警告信息。
安装、配置好FTPserver后。仅仅须要在命令提示符后输入:FTP Servername,用主机名或希望连接的FTPserver的IP地址取代Servername。依照提示输入username和口令,然后用标准的Linux上移或下移FTPserver文件夹结构。
另外,也能够採用图形化FTP程序,包含窗体式gFTP。能够借助Web浏览器去訪问FTPserver。
在登录上ftp后,能够使用例如以下ftp命令进行操作:
l FTP> ! 从 ftp 子系统退出到外壳
l FTP> ?
显示 ftp 命令说明,和 help 同样。格式:?
[command]说明:[command]指定须要帮助的命令名称。
假如没有指定 command,linux ftp命令參数将显示所有命令的列表。
l FTP> append 使用当前文档类型配置将本地文档附加到远程电脑上的文档。格式:append local-file [remote-file],说明:local-file 指定要加入的本地文档,remote-file指定要加入 local-file 的远程电脑上的文档。
假如省略了 remote-file,本地文档名将被用作远程文档名。
l FTP> ascii 将文档传送类型配置为默认的 ASCII。说明:linux ftp命令參数支持两种文档传送类型,ASCII 码和二进制图像,在传送文本文档时应该使用ASCII。
l FTP> bell 转换响铃以在每一个文档传送命令完毕后响铃??默认情况下,铃声是关闭的。
l FTP> binary(或bi) 将文档传送类型配置为二进制
l FTP> bye(或by) 结束和远程电脑的linux ftp命令參数会话并退出linux ftp命令參数。
l FTP> cd 更改远程电脑上的工作文件夹。
格式:cd remote-directory,说明:remote-directory 指定要更改的远程电脑上的文件夹。
l FTP> close 结束和远程server的linux ftp命令參数会话并返回命令解释程式。
l FTP> debug 转换调试。
当调试打开时,发送到远程电脑的每一个命令都打印,前面是字符串">"。默认情况下,调试是关闭的。
l FTP> delete 删除远程电脑上的文档。格式:delete remote-file,说明:remote-file 指定要删除的文档。
l FTP> dir 显示远程文件夹文档和子文件夹列表。
格式:dir [remote-directory] [local-file]。说明:remote-directory 指定要查看其列表的文件夹。假如没有指定文件夹,将使用远程电脑中的当前工作文件夹。Local-file 指定要存储列表的本地文档。假如没有指定,输出将显示在屏幕上。
l FTP> disconnect 从远程电脑断开,保留linux ftp命令參数提示。
l FTP> get 使用当前文档转换类型将远程文档拷贝到本地,格式:get remote-file [local-file],说明:remote-file 指定要复制的远程文档,Local-file指定要在本地电脑上使用的名称,假如没有指定,文档将命名为 remote-file。
l FTP>glob 转换文档名组合,组合同意在内部文档或路径名中使用通配符(*和?),默认情况下,组合是打开的。
l FTP>hash 转换已传输的每一个数据块的数字签名 (#) 打印。数据块的大小是2048 字节,默认情况下,散列符号打印是关闭的。
l FTP>help 显示linux ftp命令參数命令说明。
格式:help [command], 说明:command 指定须要有关说明的命令的名称,假如没有指定 command,linux ftp命令參数将显示所有命令的列表。
l FTP>lcd 更改本地电脑上的工作文件夹。默认情况下,工作文件夹是启动linux ftp命令參数的文件夹。
格式:lcd [directory],说明:directory 指定要更改的本地电脑上的文件夹。假如没有指定directory,将显示本地电脑中当前的工作文件夹。
l FTP>literal 将參数逐字发送到远程linux ftp命令參数server,将返回单个的linux ftp命令參数回复代码,格式:literal argument [ ...],说明:argument 指定要发送到linuxftp命令參数server的參数。
l FTP>ls 显示远程文件夹文档和子文件夹的缩写列表。格式:ls [remote-directory] [local-file],说明:remote-directory 指定要查看其列表的文件夹。假如没有指定文件夹,将使用远程电脑中的当前工作文件夹,local-file 指定要存储列表的本地文档??
假如没有指定,输出将显示在屏幕上。
l FTP>mdelete 删除远程电脑上的文档,格式:mdelete remote-files [ ...],说明:remote-files 指定要删除的远程文档。
l FTP>mdir 显示远程文件夹文档和子文件夹列表。可以使用 mdir 指定多个文档,格式:mdir remote-files [ ...] local-file。说明:remote-files 指定要查看列表的文件夹,必须指定 remote-files,请键入 - 使用远程电脑上的当前工作文件夹。
local-file 指定要还原列表的本地文档,请键入- 在屏幕上显示列表。
l FTP>mget 使用当前文档传送类型将远程文档拷贝到本地电脑。格式:mget remote-files [ ...],说明:remote-files 指定要拷贝到本地电脑的远程文档。
l FTP>mkdir 创建远程文件夹,格式:mkdir directory,说明:directory 指定新的远程文件夹的名称。
l FTP>mls 显示远程文件夹文档和子文件夹的缩写列表,格式:mls remote-files [ ...] local-file,说明:remote-files 指定要查看列表的文档?
?
必须指定remote-files;,请键入- 使用远程电脑上的当前工作文件夹。local-file 指定要存储列表的本地文档。请键入 - 以在屏幕上显示列表。
l FTP>mput 使用当前文档传送类型将本地文档拷贝到远程电脑上。
格式:mput local-files [ ...]。说明:local-files 指定要拷贝到远程电脑的本地文档。
l FTP>open 和指定的linux ftp命令參数server连接,格式:open computer [port]。说明:computer 指定要连接的远程电脑??可以通过 IP 地址或电脑名称指定电脑(DNS 或主机文档必须可用),假如自己主动登录打开(默认),ftp 还将尝试自己主动将用户登录到linux ftp命令參数serverport 指定用来联系linux ftp命令參数server的端口号。
l FTP>prompt 转换提示,假如关闭提示时 mget 及 mput 传送不论什么文档,linux ftp命令參数在多文档传送过程中将提示同意您有选择地检索或存储文档。默认情况下,提示是打开的。
l FTP>put 使用当前文档传送类型将本地文档拷贝到远程电脑上。格式:put local-file [remote-file],说明:local-file 指定要复制的本地文档。remote-file指定要在远程电脑上使用的名称??假如没有指定,文档将命名为 local-file。
l FTP>pwd 显示远程电脑上的当前文件夹。
l FTP>quit 结束和远程电脑的linux ftp命令參数会话并退出linux ftp命令參数。
l FTP>quote 将參数逐字发送到远程linux ftp命令參数server。将返回单个的linux ftp命令參数回复代码。
l FTP>recv 使用当前文档传送类型将远程文档拷贝到本地电脑。Recv 和 get同样。格式:recv remote-file [local-file],说明:remote-file 指定要复制的远程文档。local-file指定要在本地电脑上使用的名称,假如没有指定,文档将命名为 remote-file。
l FTP>remotehelp 显示远程命令帮助,格式:remotehelp [command],说明:command 指定须要帮助的命令的名称,假如没有指定 command,linux ftp命令參数将显示所有远程命令的列表。
l FTP>rename 重命名远程文档,格式:rename filename newfilename,说明:filename 指定要重命名的文档,newfilename指定新的文档名。
l FTP>rmdir 删除远程文件夹。格式:rmdir directory。说明:directory 指定要删除的远程文件夹的名称。
l FTP>send 使用当前文档传送类型将本地文档拷贝到远程电脑上,Send 和put 同样,格式:send local-file [remote-file],说明:local-file 指定要复制的本地文档。remote-file指定要在远程电脑上使用的名称,假如没有指定,文档将命名为 local-file。
l FTP>status 显示linux ftp命令參数连接和转换的当前状态。
l FTP>trace 转换数据包跟踪。Trace 在执行linux ftp命令參数命令时显示每一个数据包的路由。
l FTP>type 配置或显示文档传送类型。格式:type [type-name]。说明:type-name 指定文档传送类型,默认配置为 ascii,假如没有指定type-name,将显示当前的类型。
l FTP>user 指定远程电脑的用户。格式:user username [password] [account]。说明:user-name 指定登录到远程电脑所使用的用户名,password 指定 user-name 的密码。假如没有指定,但必须指定,linux ftp命令參数会提示输入密码。
account 指定登录到远程电脑所使用的帐户。假如没有指定account,可是须要指定,linux ftp命令參数会提示您输入帐户。
l FTP>verbose 转换 verbose 模式。假如打开,将显示不论什么 linux ftp命令參数响应,在文档传送完毕后,将同一时候显示和传送效率有关的统计信息。默认情况下,verbose 是打开的。
sftp
sftp(安全文件传输协议)与ftp 有着差点儿一样的语法和功能。
FTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。它并不使用ftp守护进程(ftpd或wu-ftpd)来进行连接,而是有意义地增强系统的安全性。实际上。通过监视一些系统中的log文件。能够注意到非常多攻击是针对于ftpd守护进程的。
sftp避免了这些攻击从而能够停止在wu-ftpd上潜在的危急。SFTP本身没有单独的守护进程。它必须使用sshd守护进程(port号默认是22)来完毕对应的连接操作。使用SFTP是非常安全的。
可是,因为这样的传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。假设您对网络安全性要求更高时。能够使用SFTP取代FTP。
使用方法举例:
(1) sftproot@10.48.30.192:/root/test.sh(直接将192上的文件拷贝到本地)
(2) sftproot@10.48.30.192:/root (直接连接到192的root文件夹下。这样就能够使用getput等命令了)
sftp使用在数据连接上使用ssh2。所以文件的传输是尽可能地安全。
使用sftp取代ftp两个基本的的原因是:
(1) password从不用明文传输,防止sniffer(嗅探器)的攻击。
(2) 数据在传输时被加密。使用刺探和改动连接很困难。
使用sftp2是很easy的。让我们如果你使用了你的帐户:myname通过sftp连按上了主机host1。能够使用命令:sftp myname@host1。
当sftp2准备好了来接受连接时。它将显示一个状态提示符 sftp>。在sftp手冊中有完整的用户能够使用的命令列表。当中有:
l quit:从这个应用程序中退出。
l cd directory:改变当前的远程工作文件夹。
l lcd directory:改变当前的本地工作文件夹。
l ls [ -r ] [ -l ] [ file ... ]:列出在远地server上的文件名称。假设是文件夹,则列出文件夹的内容。
当命令行中指定了-r。则递归地显示文件夹树。(默认情况下。子文件夹并不被訪问)。
当命令行中指定了-l。文件与文件夹的权限,属主,大小和改动时间被列出。当没有參数被指定。则.(当前文件夹)的内容被列出。一般情况下选项-r和-l是互相不兼容的。
l lls [ -r ] [ -l ] [ file ... ]:与ls一样,可是是对于本地文件操作。
l get [file ...]:从远程端传送指定的文件到本地端。
文件夹内容被递归地复制。
l put [ file ... ]:从本地端传送指定的文件到远地端。文件夹内容被递归地复制。
l mkdir dir (rmdir dir):尝试建立或删除參数中指定的文件夹。
l 通配符对于ls,lls,get和put是支持的。
格式在sshregex手冊中有描写叙述。
从sftp使用加密技术以来,一直有一个障碍:连接速度慢(有2-3倍),可是这一点对于很好的安全性来讲仅仅能放在一边了。
在一个測试中,局域网上的sniffer能够在一个小时中捉住ftp连接上的4个password.。
sftp的使用能够从网络上传送文件而且除去这些安全问题。
lftp
lftp 是一个功能强大的下载工具,它支持訪问文件的协议: ftp, ftps, http, https, hftp, fish.(当中ftps和https须要在编译的时候包括openssl库)。llftp很像一个shell: 有命令补全。历史记录,同意多个后台任务运行等功能,使用起来很方便。
它还有书签、排队、镜像、断点续传、多进程下载等功能。
命令行语法
(1) lftp [-d] [-e cmd] [-p port][-u user[,pass]] [site]
-e在选择后运行命令
-u [,] 使用指定的username/口令进行验证
-p 连接指定的port
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://...................
经常使用命令
l 下载单个文件和一组文件,断点续传用-c參数
lftp ................:/> get -c ls-lR.txt
lftp ...............:/> mget *.txt
l 镜像(反镜像即上传)一个文件夹。能够用多个线程并行镜像一个文件夹(--parallel=N)
lftp ................:/> mirror incoming local_name
lftp ................:/> mirror -R local_name
lftp ................:/> mirror --parallel=3 incominglocal_name
l 多线程下载,类似网络蚂蚁的功能;缺省是5个线程
lftp ................:/> pget -n 4 ls-lR.txt
l 后台任务管理
缺省情况下,按 Ctrl+z,正在运行的任务将转为后台运行,也能够在命令行末尾加&符号使任务在后台运行。用jobs命令能够查看全部的后台进程。用queue命令能够排队新的任务。假设退出lftp是还有任务在后台运行,lftp将转为后台运行。
l 其他使用方法
lftp支持类似bash的管道操作。比如用以下的命令能够将ftpserver上的特定文件夹下(也能够是整个网站)全部文件的大小存到本地的文件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 server的欢迎信息和错误信息。这在非常多时候不方便,由于你有可能想知道这个server究竟是由于没开机连不上。还是连接数已满。假设是这样。你能够在 ~/.lftprc 里写入一行,debug 3,就能够看到出错信息了。
很多其它的配置选项请查man手冊或在lftp界面内用命令 set -a 获得。
(4) ~/.lftp/log
当lftp转为后台非挂起模式运行时,输出将重定向到这里
(5) ~/.lftp/bookmarks
这是lftp存储书签的地方。能够lftp查看bookmark命令
(6) ~/.lftp/cwd_history
这个文件用来存储訪问过的网站的工作文件夹
(7) ~/.lftprc
在用lftp訪问国内一些ftpserver时,往往看到的中文是乱码。不用慌。这是因为server和本地编码不一致造成的。我们仅仅要在主文件夹下新建一个文件~/.lftprc或者~/.lftp/rc。
并在当中增加下面内容:debug 3set ftp:charset GBKset file:charset UTF-8#setftp:passtive-mode no#alias utf8 " set ftp:charset UTF-8"#alias gbk" set ftp:charset GBK"
登录ftpserver:
lftpftp://user:password@site:port
lftpuser:password@site:port
lftpsite -p port -u user,password
lftpsite:port -u user,password
上面的几种方式都能正常工作。只是password都是明文,这样好像不太安全哦。没关系,使用lftp user@site:port,系统会提示输入password,password就回显为******了。只是每次都输入这么多,好麻烦哦。假设有类似leapftp的网站管理器就好了。事实上lftp早就给我们想好了:这就是bookmark。后面我们将会看到。
在终端执行如manlftp或登录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文件里。我们能够直接改动此文件,高速登陆ftpserver。
wget
wget 是一个经由 GPL 许可的可从网络上自己主动获取文件的自由软件包。它是一个非交互式的命令行工具。
支持 HTTP,HTTPS 和 FTP 协议,支持代理server以及断点续传功能。 wget 可实现递归下载,就可以跟踪 HTML 页面上的链接依次下载来创建远程server的本地版本号。全然重建原始站点的文件夹结构,实现远程站点的镜像。在递归下载时,wget 将页面中的超级链接转换成指向本地文件,方便离线浏览。因为非交互特性。wget 支持后台执行,用户在退出系统后,仍可继续执行。
功能强大。设置方便简单。
基本的语法: wget [options][URL-list]
Options:
-r 递归下载server上全部的文件夹和文件。
由 -l选项来指定递归深度。
-b 后台下载
-m 制作网站镜像
-c 指定断点续传功能。
该功能要求server支持断点续传。
-I 指定下载文件夹列表,可实现批量下载
-A/-R 指定接受/拒绝下载列表,实现选择性地下载
--proxy=on/off 指定是否利用代理server进行下载
-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
curl
curl是对 libcurl 库的一个命令行工具包装。
libcurl 库中提供了对应功能的 API,能够在程序中调用。
curl 使用 URL 的语法来传输文件。它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多种协议。 curl 功能强大。它提供了包含代理支持,用户认证,FTP 上载,HTTP post,SSL 连接。文件续传等很多特性。
基本的语法:curl [options …] <url>
当中下载參数大约有 80 多个。curl 的各个功能全然依靠这些參数来完毕。以下举例说明 curl 的一些基本使用方法。
使用实例:
(1) 获取 GNU 的主页curl http://www.gnu.org
(2) 获取 GNU 的 FTP server上根文件夹下的 README 文件curl ftp://ftp.gnu.org/README
(3) 从一个字典中获取 curl 的定义curl dict://dict.org/m:curl
(4) 假设须要指定username和password的话,能够在 url 中指定,或者使用 -u 參数curl ftp://name:passwd@machine.domain:port/full/path/to/file或者curl -uname:passwd ftp://machine.domain:port/full/path/to/file
(5) curl 会将从指定 url 处获取的内容打印到标准输出上。
假设须要保存在本地文件里,能够使用 -o,或使用 -O 參数指定使用远程主机上的文件名称(假设 url 中没有给出文件名称的部分。则此操作将会失败)curl -o gnu.html http://www.gnu.org 或者curl -O http:///www.gnu.org/index.htm
(6) 使用 -x 选项来使用代理进行连接curl -x my-proxy:port ftp://ftp.somesite.com/READMEN
(7) 通过使用 curl 的 -T 选项来进行上载curl -T - ftp://ftp.upload.com/upfile。此命令从标准输入读取数据。并上载至远程 FTP server上的 upfile 文件里。
也能够指定上载一个本地文件curl -T localfile -a ftp://ftp.upload.com/upfile当中 -a 參数表示以加入方式将localfile 中的内容附加到 upfile 的末尾。
总的来说。curl 适合用来进行自己主动的文件传输或操作序列,它是一个非常好的模拟用户在网页浏览器上的行为的工具。尤其当须要在程序中调用时,libcurl 是个非常好的选择。
传输速度
由于常常在server见进行文件传输,就对传输速度和带宽有要求,这里总结一下能够影响以上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使用压缩。-ossh_option使用ssh选项
(6) lftp:能够调整进程数等
(7) wget: --limit-rate=amount限制带宽。
(8) curl:-B/--use-ascii和--ciphers<list of ciphers>,--compressed等。
总结
(1) 传输性能:wget 通过支持后台运行及断点续传提高文件传输效率; rsync 则以其高效的传输及压缩算法达到快传输的目的。
(2) 配置难度:rcp 仅仅需进行简单的配置。创建.rhost文件以及设置/etc/hosts文件里主机名与IP地址列表; wget设置方便简单。仅仅需在client指定參数运行命令就可以。 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页面上的链接依次下载来创建远程server的本地版本号,全然重建原始站点的文件夹结构,适合实现远程站点的镜像;
(5) curl 则适合用来进行自己主动的文件传输或操作序列,是一个非常好的模拟用户在网页浏览器上的行为的工具。
(6) rsync 更适用于大数据量的每日同步,拷贝的速度非常快,相对wget来说速度快且安全高效。
(7) sftp使用在数据连接上使用ssh2。所以文件的传输是尽可能地安全。
但传输速度慢。
是ftp的替代品,比ftp安全,不能訪问http资源。
(8) lftp能够訪问ftp资源,也能够訪问http资源。支持断点续传。多进程下载。