linux断点续传,linux恢复出厂命令
大家好,linux断点续传相信很多的网友都不是很明白,包括linux恢复出厂命令也是一样,不过没有关系,接下来就来为大家分享关于linux断点续传和linux恢复出厂命令的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
用C实现断点续传的功能,详细点的实现原理是什么嘞
用C实现断点续传的功能,详细点的实现原理是什么嘞
于HTTP协议的多执行绪下载和断点续传的实现学生:叶升路指导教师:覃颖(三峡大学电气资讯学院)摘要:本文介绍了网路下载软体中的最新技术——多执行绪下载和断点续传技术,同时也介绍了HTTP协议的发展、特点以及WinSock程式设计技术。
FTP客户端怎么样实现断点续传的功能?
上传的时候,如果档案已经存在,服务端会返回档案已经存在大小,根据这个大小,从本地档案读取这个大小之后的资料,进行断点续传
c#winform中怎么利用wini实现断点续传?
WinI提供对常用的网际网路协议,包括 Gopher、 FTP和 HTTP访问。使用 WinI,可以不必处理 WinSock、 TCP/IP或特定的网际网路协议的详细资讯写入 Inter客户端应用程式的程式设计中,更高的级别。
FTP通常公开要将一个档案附加到另一个"追加"命令。WinI不直接公开此功能。
在 Inter Explorer 3.0和 4.0中,这一问题的解决方法是从伺服器下载档案、将附加到该客户端然后上载该档案备份到伺服器上。
从开始 Inter Explorer 5,FTP命令可以直接传送到 FTP伺服器使用 FtpCommand,如下所示:
CHAR szTemp[256];
wsprintf(szTemp,"APPE%s","DestFile.txt");
bRet= FtpCommand( hConnection, WinI Connection handle
TRUE, Yes, I expect a response
FTP_TRANSFER_TYPE_ASCII, I'm receiving ASCII
szTemp, This is the FTP mand I am passing
0, No context needed
&hResponse); The handle to read the response
if(!bRet)
{
cout<<"FtpCommand failed, error:"<< GetLastError()<< endl;
return;
}
wsprintf(szTemp,"This data will be appended to the file");
DWORD dwSize;
if(!InterWriteFile(hResponse,(LPVOID)szTemp, lstrlen(szTemp)+1,&dwSize))
{
cout<<"InterWriteFile failed, error:"<< GetLastError()<< endl;
return;
}
用swoole做websocket,怎么实现资料断点续传
在php的web控制器中,每当更新了资料库的资料库后,我需要将这些资料传送到其他使用者的客户端,不知在web控制器中怎么实现这个一个目的,怎么才能swoole_websocket_server传送这些最新的资料。如果再建立一个 swoole_client话又感觉不好。
主轴定位功能的实现原理是什么
主轴定位指通过一个输出点控制主轴旋转到特定的位置以方便换刀或者主轴配合其它装置动作。
主轴定位是通过主轴伺服驱动模组内建的位置控制功能和检测主轴的位置编码器(可以安装在主轴上或者是主轴电机内建的编码器)来实现主轴定位的。
API有断点续传的功能吗?
有,可以通过HTML5 File api实现断点续传。
一、实现档案多选
HTML5的<input>新增了"multiple"属性,该属性可接受多个值的档案上传栏位
<input type=filemultiple="multiple"name="file"id="file">
添加了该属性使用者就可以在弹出的对话方块中一次性选择多个档案了
二、实现档案从计算机拖拽到网页以及新增档案伫列功能
这里我们用 dragover和 drop两个事件来管理档案拖拽的功能
其中 dragover用来处理在指定的元素上移动时的事件,这里我们通过给body系结dragover时间来处理页面中拖动档案的事件
document.body.addEventListener('dragover',dragFile,false); functiondragFile(evt){ evt.sPropagation(); evt.preventDefault(); evt.dataTransfer.dropEffect='copy';}
用 drop事件来处理滑鼠松开时候的事件,此时应该将使用者拖动过来的档案加入到上传伫列中,以供后续的处理
document.body.addEventListener('drop',dropFile,false); functiondragFile(evt){ evt.sPropagation(); evt.preventDefault(); dataTransfer.files属性可以获取到所有拖动选择的档案,通过遍历可以读取到所有档案的资讯。遍历每个档案可以获取到档案的 name、size、type、lastModifiedDate等关键资讯 varfiles=evt.dataTransfer.files; addfile方法用来新增上传档案伫列,在input的change事件中也需要呼叫该方法首先检查有无档案正在上传中,如果有就将后续加入的档案放到上传伫列中,如果没有档案正在上传就直接执行上传命令 addfile(files);
}
断点续传指的是在下载或上传时,将下载或上传任务(一个档案或一个压缩包)人为的划分为几个部分,每一个部分采用一个执行绪进行上传或下载,如果碰到网路故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。使用者可以节省时间,提高速度。
360浏览器如何实现断点续传
360安全浏览器内建下载工具是支援断点续传功能的,但是断点续传需要下载工具和下载资源相互支援配合才行。
所以,如果使用360se下载的档案无法断点续传的话,一般都是资源伺服器不支援断点续传功能。
部分下载网为了防止盗链是不允许断点续传的。
代理的实现原理是什么?
代理伺服器有很多种,大体分为三类:HTTP、FTP、SOCKS,其中又分为透明代理和不透明代理,透明代理一般是闸道器,为硬体
过程:
(1)客户端先和代理伺服器通讯,建立TCP连线,目的IP是代理伺服器的IP
(2)客户端发出GET命令,GET命令中包含URL或IP地址、明文
(3)代理伺服器将其中的URL转换为IP地址,可能会有DNS,将源资料包中的资料拷贝下来,去掉URL,重新组包再发出去
(4)代理伺服器和真实伺服器通讯,源IP是代理伺服器的IP
以上就是代理的实现原理,在我们日常生活中只有在学习IT才会了解哦,我也是在黑马程式设计师学习之后才了解的。
什么是ECMP?ECMP的实现原理是什么?
Linux平台上之 Multipath Routing应用
--------------------------------------------------------------------------------
撰稿/整理: Rex Tsai<chihchun@kalug.linux.>
HTML版本:
:kalug.linux./sections.php?op=viewarticle&artid=4
TEXT版本:
[Tips] Linux平台上之 Multipath Routing应用.
$Date: 2001/10/22 09:25:41$
警告:
*****************************************************************************
您因使用或不能使用本文之教学而产生之任何软体、硬体损害(包括但不限
于直接或间接个人损害、营业利润之丧失、业务中断、营业资讯之遗失、或
任何其他金钱损失),概不负任何损害赔偿责任。
The author has taken care in the preparation of this paper, but
make no expressed or implied warranty of any kind and assume no
responsibility for errors or omissions. No liability is assumed for
incidental or consequential damages in connection with or arising
out of the use of the information or programs contained herein.
Linux is a registered trademark of Linus Torvalds. Other product
and pany names mentioned herein may be the trademarks of their
respective owners.
*****************************************************************************
撰稿/整理: Rex Tsai<chihchun@kalug.linux.>
此档案应有许多技术上得问题.请熟悉的朋友来信指教.
[Introduction]
许多中小企业或是 Soho甚至家庭,会在家中装有一条以上宽频/宽频线路.
这篇 Tips将介绍如何在 Linux上,好好的应用这些资源.
在你使用两家不同的 ISP的时候, destination address-based load
balancing将会是最好的解决方案.你的封包可以即时透过不同的 ISP线路
走出去.当然这里所提的是从内部到外部,如果你的专线提供不同的网路服
务提供给网路上得人存取,那么接下来所说明的方式不适合您.
此篇文章只能提供内部网路对外的 load sharing.
以下文章以 GNU/Debian, Linux kernel 2.4.12, iproute-20001007-1为
环境,所有动作请在主机前面执行.
假设你有两条以上的网际网路资料线路(xDSL, ISDN, Cable, whatever..),
想充分使用这些线路,概观来看有三种方式
1. Multiplexing
2. Packet-wise load balancing
3. Destination address-based load balancing,
或称 Equal-Cost MultiPath Routing(ECMP)
稍微解释一下三种方式的不同
1. Multiplexing
Multiplexing,这个方式提供某些路由器提供 offer-load balancing或叫
做 load sharing.这个方式可以让路由器将流量分给不同的外流 ports.
但是会造成每个 port的传送上约有 30%的 overhead.此外,每家厂商的
实作都是独一的,因次你会被锁在特定的解决方案上.
类似的技术是"bonding"或是"multi-link".这里所提得 Bonding是一
个标准,是由 Bandwidth on Demand Interoperability Group(一个大
概有四十个制造商的协会)所提.已经提交给 American National Standards
Institute TR41.4 group.这个通常的在于两条资料线路都是接在同一个
点(ISP)上的时候,因此如果是两条不同 ISP所提供的线路,那么就没办法
达到这个目的.当然,如果你的 ISP不提供此项技术服务,那么也是没辙.
举个例子,像是 stick multiple ISDN channels.将几个慢速的线路合成为
快速的一条.像是 ISDN H.221规格即用到 inverse multiplexing.但通常
用于视讯传输而不是电子资料.
2. Packet-wise load balancing:
这个在你可以得到所有的 ISP协助的时候是可行的,如果两家 ISP都愿意
协助将其不同的路由器皆设定到同一个 IP位址.那么便可以这么作.
在这个方式中,你会用到像是 sch_teql(the TEQL scheduler)来创造一个
virtual device将你的封包分散在不同的网路介面上.
一般来讲,如果你是使用两家不同 ISP,那么你不可以使用这个解决方案.
但,你"可以"将所有的网路封包透过 IPIP or CIPE(Crypto IP Encapsu-
lation)的方式来解决这个问题.看看 Linux Kernel中的 IP: tunneling.
3. Equal-Cost MultiPath:
在 Linux核心中叫做 equal cost multipath(CONFIG_IP_ROUTE_MULTIPATH)
比较正确的说法应该是"destination address-based load balancing".一
般 Linux想要为某个 IP位址找到路由,会因为效能的问题去查验暂存(cache)
中的资料,如果目标 IP并没有在暂存空间中,那么他便会去查 routing table
来决定该 IP位址的路由,并将该路由放进 cache中.
一般来讲核心中的路由功能只能为某个封包决定唯一的方向.如果使用 ECMP并
有机会让某个 package pattern具有好几种不同的方向,可以让某个符合路由条
件的封包透过"equal" cost或是自订的权重来选择该走的路由.
[Howto]
如果你有数台电脑想使用外部网路,一条 ADSL不够你使用(例如某人抓档太凶)
那么这是你正在找的解决方案.你所能做的作好的方式就是每个 connection可以
以"non-deterministic fashion"的方式选择路由,将 connection分散到不同的
Router上,注意:这里所说的不是 packets,这样 TCP/IP session将无法连续.
但是这整个路由程式有两个部份四个问题要解决.
1a. How to get your packets to the outside world,
1b. How the outside world replies to you,
2a. How the outside world sends packets to you,
2b. How you reply to the outside world.
Multipath可以解决 1a出去的问题.一般的路由设定可以解决 1b与 2a.而 2b
则必须使用 policy routing(multiple tables)才能解决, Multiple Tables可以
让你加入以封包来源位址为依据来决定路由.
以下的范例,在核心中,务必加入编译以下选项
必备:
CONFIG_NETLINK=y
这个选项是 Kernel/User link socket
CONFIG_RTNETLINK=y
Routing messages
CONFIG_INET=y
TCP/IP neorking
CONFIG_IP_ADVANCED_ROUTER=y
IP: advanced router
CONFIG_IP_MULTIPLE_TABLES=y
IP: policy routing
CONFIG_IP_ROUTE_MULTIPATH=y
IP: equal cost multipath
选用:
CONFIG_IP_ROUTE_LARGE_TABLES=y
一般来讲 IP: large routing tables也会勾选,一方面 routing
zones可以大于 64笔,这些资料存在 hash资料结构中,也可以
加速"the routing process".
而 iproute套件也是必须的软体.这个软体的安装方式与位置请洽询提供
您所使用套件之厂商/组织.(Red Hat, Debian, Mandrake, SuSE, etc...)
重头戏来了,这里假设你有三块网路卡,分别给内部网路与两家 ISP. eth0
是内部网路, eth1与 eth2是其他两家 ISP线路.
eth0是内部网路,范围是 10.0.0.0/255.255.255.0
eth1其中一家 ISP, IP是 1.1.1.1,闸道器(gateway)是 1.1.1.253
eth2另外一家 ISP, IP是 2.2.2.2,闸道器(gateway)是 2.2.2.253
#列出所有的 rule
ip rule list
# table后的"10"是 table identifer,为数字.
#注:可用英文代称取代请看/etc/iproute2/rt_tables
#
# table 10是给在 gateway后面的内部网路使用, 10.0.0.x是 LAN使用的 IP.
#
# pref后面指定的"10"是 priority.为 policy routing database搜寻的次序
ip rule add pref 10 to 10.0.0.0/24 table 10
ip route add 10.0.0.0/24 table 10 dev eth1
# table 20给 ISP#1, IP 1.1.1.1, gateway 1.1.1.253
# pref后面指定的"20"是 priority.为 policy routing database搜寻的次序
ip rule add pref 20 from 1.1.1.1 table 20
ip route add default table 20 via 1.1.1.253
# table 30 is for ISP#2, IP 2.2.2.2, gateway 2.2.2.253
ip rule add pref 20 from 2.2.2.2 table 30
ip route add default table 30 via 2.2.2.253
#列出所有的 rule
ip rule list
#列出 table 10的 rule
ip route list table 10
#列出 table 20的 rule
ip route list table 20
# If your ISP's have servers that authenticate by originating IP address,
#(e.g. SMTP or NNTP servers) you will want to explicitly list them here.
#这里是静态的 routing table设定.如果你的 ISP有提供某些网路服务,必须该
# ISP的 IP才能使用,那么你会想将它设定在这里
#(e.g. Proxy, SMTP or NNTP Server)
ip route add 1.1.1.0/24 dev eth1
ip route add 2.2.2.0/24 dev eth2
#如果上面所有的 routing table都没有吻合,那么封包会走 default route
#这里使用"ECMP"来选择上游路由器.
#"ip route repleace"是用来取代原本的 default routi.
ip route replace default nexthop via 1.1.1.253 dev eth1 \
nexthop via 2.2.253 dev eth2
#如果你想加上权重,是这样使用的.请依据你的线路网路频宽
#频宽越大,请把 weight加大.
#ip route replace default nexthop via 1.1.1.253 dev eth1 weight 1 \
# nexthop via 2.2.253 dev eth2 weight 3
# Make it all happen. IMPORTANT! The above mands do NOT
# flush the route cache!
ip route flush cache
<--结束-->
Linux上得 ECMP implementation的实作有一个特色,当你的上游网路介面
使用 ARP(e.g.使用传统 IP-over-Ether)时,如果其中一个网路介面阵
亡时, Linux kernel会自动把该介面"shutdown",并停止那些需要经过该
介面的"nexthops".但是要附注一提的是,如果你使用的是"网路型" ADSL
服务,你会取得一个 ADSL路由器,你可能会架设一个 NAT伺服器与 ADSL
路由器放在同一个 Ether Hub上,如果这个时候 ADSL断线,但是 Hub
并未断线, Linux会认为该网路卡仍在 on-line状态.除非是该 hub或是网
路卡故障, kernel才会 shutdown该网路介面.
因此如果你需要确实的"failover",请动手写一个小 script,定时用 ping
或称"icmp echo request"来询问 ISP端的闸道器是否正常的运作,并用
"ip route replace"来置换那些确定可通的路由.这里就请您自行处理了.
Enjoy it, Rex.
[Reference]
[1] Linux-Net mailing list.:uwsg.iu.edu/hypermail/linux//
原文:uwsg.iu.edu/hypermail/linux//0107.3/0028.
[2] Alexey N. Kuzsov, April 14, 1999, IP Command Reference
[Futrher reading]
[1] Jack Coates, Load-Balancing on LRP HOWTO
[2] Netherlabs BV(bert hubert),
Gregory Maxwell,
Remco van Mook,
Martijn van Oosterhout,
Paul B Schroeder,
Jasper Spaans, howto@ds9a.nl,
Linux 2.4 Advanced Routing Howto
[3] Horacio J. Pe?a, horape@pendium..ar, 05/Apr/2000
Policy based routing MICRO-HOWTO,
:pendium..ar/policy-routing.txt
[Keywords]
Linux, Routeing,路由, ADSL,宽频,宽频,频宽,合并,分流,共用
[Acknowledgements]
Zygo Blaxell(zblaxell@furryterror.)在 Linux-的说明
Digital Sesame, Inc-:d11e.提供环境测试.
--
Best Regards.
Rex Tsai<chihchun_at_kalug.linux.>
--
ThinkPHP的 C函式实现原理是什么?
c方法里面有个静态变数,每次初始化的时候就把配置赋值给这个静态变数,然后每次使用的时候就直接在这个静态变数里获取了,楼主应该知道静态变数在整个执行期间都存在吧
Linux下实现断点续传的原理介绍
断点续传是一种结合本地存储和网络存储的技术,主要用来解决网络失效时的视频丢失问题。DVS通常本身没有视频存储功能,而是必须由后端的NVR来实现视频的存储,因此对于网络稳定性要求很高,网络连接失败、丢包严重、抖动等各种因素都可能造成视频数据的丢失。断点续传支持从文件上次中断的地方开始传送数据,而并非是从文件开头传送。这就是断点续传的定义。系统都默认可以断点续传,但我们很少知道他的原理,下面就来看看小编的介绍吧。
断点续传的原理
其实断点续传的原理很简单,就是在 Http的请求上和一般的下载有所不同而已。
打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:
假设服务器域名为 wwww.sjtu.edu.cn,文件名为 down.zip。
GET/down.zip HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint,*/*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0(compatible; MSIE 5.01; Windows NT 5.0)
Connection: Keep-Alive
服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:
200
Content-Length=106786028
Accept-Ranges=bytes
Date=Mon, 30 Apr 2001 12:56:11 GMT
ETag=W/“02ca57e173c11:95b”
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个“浏览器”来传递请求信息给 Web服务器,要求从 2000070字节开始。
GET/down.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html, image/gif, image/jpeg,*; q=.2,*/*; q=.2
仔细看一下就会发现多了一行 RANGE: bytes=2000070-
这一行的意思就是告诉服务器 down.zip这个文件从 2000070字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下:
206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
Date=Mon, 30 Apr 2001 12:55:20 GMT
ETag=W/“02ca57e173c11:95b”
Content-Type=application/octet-stream
Server=Microsoft-IIS/5.0
Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT
和前面服务器返回的信息比较一下,就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为 206了,而不再是 200了。
知道了以上原理,就可以进行断点续传的编程了。
Java实现断点续传的关键几点
(1)用什么方法实现提交 RANGE: bytes=2000070-。
当然用最原始的 Socket是肯定能完成的,不过那样太费事了,其实 Java的 net包中提供了这种功能。代码如下:
URL url= new URL(“”);
HttpURLConnection httpConnection=(HttpURLConnection)url.openConnection();
//设置 User-Agent
httpConnection.setRequestProperty(“User-Agent”,“NetFox”);
//设置断点续传的开始位置
httpConnection.setRequestProperty(“RANGE”,“bytes=2000070”);
//获得输入流
InputStream input= httpConnection.getInputStream();
从输入流中取出的字节流就是 down.zip文件从 2000070开始的字节流。大家看,其实断点续传用 Java实现起来还是很简单的吧。接下来要做的事就是怎么保存获得的流到文件中去了。
保存文件采用的方法。
我采用的是 IO包中的 RandAccessFile类。
操作相当简单,假设从 2000070处开始保存文件,代码如下:
RandomAccess oSavedFile= new RandomAccessFile(“down.zip”,“rw”);
long nPos= 2000070;
//定位文件指针到 nPos位置
oSavedFile.seek(nPos);
byte[] b= new byte[1024];
int nRead;
//从输入流中读入字节流,然后写到文件中
while((nRead=input.read(b,0,1024))》 0)
{
oSavedFile.write(b,0,nRead);
}
以上就是断点续传的原理,知道这些原理,相信大家都能够进行编程了吧,这个技术在现在的电脑技术上也算不得什么,打家应该都注意到我们下载时都是断点续传吧
linux wget 命令用法详解
Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器。这样既浪费时间又浪费精力,那不没办法的事。而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步。wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单。下面我们以实例的形式说明怎么使用wget。
1、使用wget下载单个文件
以下的例子是从网络下载一个文件并保存在当前目录
wget
在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。
2、使用wget-O下载并以不同的文件名保存
wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
错误:下面的例子会下载一个文件并以名称download.php?id=1080保存
wget
即使下载的文件是zip格式,它仍然以download.php?id=1080命令。
正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:
wget-O wordpress.zip
3、使用wget–limit-rate限速下载
当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。
wget–limit-rate=300k
4、使用wget-c断点续传
使用wget-c重新启动下载中断的文件:
wget-c
对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。
5、使用wget-b后台下载
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。
wget-b
Continuing in background, pid 1840.
Output will be written to `wget-log’.
你可以使用以下命令来察看下载进度
tail-f wget-log
6、伪装代理名称下载
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过–user-agent参数伪装。
wget–user-agent=”Mozilla/5.0(Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16(KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″下载链接
7、使用wget–spider测试下载链接
当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加–spider参数进行检查。
wget–spider URL
如果下载链接正确,将会显示
wget–spider URL
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response… 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled— not retrieving.
这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误
wget–spider url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response… 404 Not Found
Remote file does not exist— broken link!!!
你可以在以下几种情况下使用spider参数:
定时下载之前进行检查
间隔检测网站是否可用
检查网站页面的死链接
8、使用wget–tries增加重试次数
如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。
wget–tries=40 URL
9、使用wget-i下载多个文件
首先,保存一份下载链接文件
cat filelist.txt
url1
url2
url3
url4
接着使用这个文件和参数-i下载
wget-i filelist.txt
10、使用wget–mirror镜像网站
下面的例子是下载整个网站到本地。
wget–mirror-p–convert-links-P./LOCAL URL
–miror:开户镜像下载
-p:下载所有为了html页面显示正常的文件
–convert-links:下载后,转换成本地的链接
-P./LOCAL:保存所有文件和目录到本地指定目录
11、使用wget–reject过滤指定格式下载
你想下载一个网站,但你不希望下载图片,你可以使用以下命令。
wget–reject=gif url
12、使用wget-o把下载信息存入日志文件
你不希望下载信息直接显示在终端而是在一个日志文件,可以使用以下命令:
wget-o download.log URL
13、使用wget-Q限制总下载文件大小
当你想要下载的文件超过5M而退出下载,你可以使用以下命令:
wget-Q5m-i filelist.txt
注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。
14、使用wget-r-A下载指定格式文件
可以在以下情况使用该功能
下载一个网站的所有图片
下载一个网站的所有视频
下载一个网站的所有PDF文件
wget-r-A.pdf url
15、使用wget FTP下载
你可以使用wget来完成ftp链接的下载。
使用wget匿名ftp下载
wget ftp-url
使用wget用户名和密码认证的ftp下载
wget–ftp-user=USERNAME–ftp-password=PASSWORD url
wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:
(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
(3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
(4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
(5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的;
wget虽然功能强大,但是使用起来还是比较简单的,基本的语法是:wget [参数列表] URL。下面就结合具体的例子来说明一下wget的用法。
1、下载整个http或者ftp站点。
wget
这个命令可以将首页下载下来。使用-x会强制建立服务器上一模一样的目录,如果使用-nd参数,那么服务器上下载的所有内容都会加到本地当前目录。
wget-r
这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。
要是您想制作镜像站点,那么可以使用-m参数,例如:wget-m
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。
2、断点续传。
当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget的断点续传是自动的,只需要使用-c参数,例如:
wget-c
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。
3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget-i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)
4、选择性的下载。
可以指定让wget只下载一类文件,或者不下载什么文件。例如:
wget-m–reject=gif
表示下载,但是忽略gif文件。–accept=LIST可以接受的文件类型,–reject=LIST拒绝接受的文件类型。
5、密码和认证。
wget只能处理利用用户名/密码方式限制访问的网站,可以利用两个参数:
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
对于需要证书做认证的网站,就只能利用其他下载工具了,例如curl。
6、利用代理服务器进行下载。
如果用户的网络需要经过代理服务器,那么可以让wget通过代理服务器进行文件的下载。此时需要在当前用户的目录下创建一个.wgetrc文件。文件中可以设置代理服务器:
http-proxy= 111.111.111.111:8080
ftp-proxy= 111.111.111.111:8080
分别表示http的代理服务器和ftp的代理服务器。如果代理服务器需要密码则使用:
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
这两个参数。
使用参数–proxy=on/off使用或者关闭代理。
wget还有很多有用的功能,需要用户去挖掘。
附录:
命令格式:
wget [参数列表] [目标软件、网页的网址]
-V,–version显示软件版本号然后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND执行一个“.wgetrc”命令
-o,–output-file=FILE将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet不显示输出信息;
-i,–input-file=FILE从文件中取得URL;
-t,–tries=NUMBER是否下载次数(0表示无穷次)
-O–output-document=FILE下载文件保存为别的文件名
-nc,–no-clobber不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS设置超时时间
-Y,–proxy=on/off关闭代理
-nd,–no-directories不建立目录
-x,–force-directories强制建立目录
–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码
-r,–recursive下载整个网站、目录(小心使用)
-l,–level=NUMBER下载层次
-A,–accept=LIST可以接受的文件类型
-R,–reject=LIST拒绝接受的文件类型
-D,–domains=LIST可以接受的域名
–exclude-domains=LIST拒绝的域名
-L,–relative下载关联链接
–follow-ftp只下载FTP链接
-H,–span-hosts可以下载外面的主机
-I,–include-directories=LIST允许的目录
-X,–exclude-directories=LIST拒绝的目录
中文文档名在平常的情况下会被编码,但是在–cut-dirs时又是正常的,
wget-r-np-nH–cut-dirs=3
测试.txt
wget-r-np-nH-nd
%B4%FA%B8%D5.txt
wget“*”
%B4%FA%B8%D5.txt
由於不知名的原因,可能是为了避开特殊档名, wget会自动将抓取档名的部分用 encode_string处理过,所以该 patch就把被 encode_string处理成“%3A”这种东西,用 decode_string还原成“:”,并套用在目录与档案名称的部分,decode_string是 wget内建的函式。
wget-t0-c-nH-x-np-b-m-P/home/sunny/NOD32view/ wget.log