VM如何做数据漂移

      目前的虚拟机软件,都是在一台物理机上面虚拟出几个VM来进行管理的,暂时还无法做到将物理机整合为一台超级计算机之后再在上面虚拟出VM。为了有效的管理虚拟机,就需要要对虚拟机进行漂移。
如果对虚拟机的实时性要求不高,完全可以做到先将虚拟机关闭之后,再SCP数据到指定的物理机上,重新开启虚拟机即可。对于有时间要求的,我们也可以通过控制VM,让VM先休眠,再漂移数据,然后再重启VM也行。
但是有些系统,如数据库服务器,要求系统能够做到实时漂移,该使用什么样的方案呢?VMware可以做到这一点了,从他们的技术展示会上,也没有明白具体 思路,只知道是快照+恢复。但是我们使用vmware的快照功能,也是需要几秒钟的,他说的实时是一个偷梁换柱的概念?当然了,对于这种系统,数据肯定是 存储在虚拟机之外的存储设备上的,漂移的只是内存中的数据。
如果使用虚拟机的双机热备,也是一种方法,但是需要用户在虚拟机里面安装热备软件,操作起来麻烦,如果能够在VM这个层面解决是最好的,便于管理,还减少用户烦恼。
VM实时漂移的先决条件(该资料由李战提供,非常感谢):
1.VM的磁盘要能瞬间“漂移”
  如果VM的磁盘实际映射的是宿主物理机的磁盘或磁盘文件,就很难漂移。一般的做法就是给VM提供虚拟磁盘,实际对应的是分布式储存系统。VM要漂移到新的宿主机,只需用原来的虚拟磁盘ID去挂载虚拟磁盘即可实现磁盘的瞬间“漂移”。因此,云计算的分布式存储系统非常重要。


2.VM的访问路径要能瞬间切换
  VM的漂移会引发VM物理网络访问路径的变化。如果漂移前后的地方处没有跨三层交换机或处于二层交换 机,可以做到漂移后的IP地址不变。如果跨三层交换机,需要更新IP的路由,这比较麻烦。如果只是WEB应用,可以通过VIP,让对外的IP不变,而内部 IP变化后,更新VIP映射关系。
VM漂移的基本过程:
1.新建一个同样配置的VM
2.从旧VM同步内存数据到新VM,这是一个逐步逼近的过程
3.当双方内存快接近一致时,暂停旧VM,同步最后的差异数据(很快)
4.切换虚拟磁盘,切换网络访问路径
5.继续新VM运行
这个过程快的话可以在零点几秒完成,慢的话也就1-2秒。
如果程序的socket连着,你从一台瞬间飘另外一台, 这个socket会不会断?如果漂移后的IP不变,是不会断的,只要迁移后的路由仍然可达,双方的连接状态还是持续的。但是socket属于外部连接,停机切换那会肯定要断开一下的最多有几个包要丢失而重发,但对TCP连接来说是透明的。

mysql 主从同步原理

转自: http://machael.blog.51cto.com/829462/239112

Replication 线程

   Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。
  要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。
  MySQL 复制的基本过程如下:
  1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
   2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;
  3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”
   4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。
  实际上,在老版本中,MySQL 的复制实现在 Slave 端并不是由 SQL 线程和 IO 线程这两个线程共同协作而完成的,而是由单独的一个线程来完成所有的工作。但是 MySQL 的工程师们很快发现,这样做存在很大的风险和性能问题,主要如下:
   首先,如果通过一个单一的线程来独立实现这个工作的话,就使复制 Master 端的,Binary Log日志,以及解析这些日志,然后再在自身执行的这个过程成为一个串行的过程,性能自然会受到较大的限制,这种架构下的 Replication 的延迟自然就比较长了。
   其次,Slave 端的这个复制线程从 Master 端获取 Binary Log 过来之后,需要接着解析这些内容,还原成 Master 端所执行的原始 Query,然后在自身执行。在这个过程中,Master端很可能又已经产生了大量的变化并生成了大量的 Binary Log 信息。如果在这个阶段 Master 端的存储系统出现了无法修复的故障,那么在这个阶段所产生的所有变更都将永远的丢失,无法再找回来。这种潜在风险在Slave 端压力比较大的时候尤其突出,因为如果 Slave 压力比较大,解析日志以及应用这些日志所花费的时间自然就会更长一些,可能丢失的数据也就会更多。
   所以,在后期的改造中,新版本的 MySQL 为了尽量减小这个风险,并提高复制的性能,将 Slave 端的复制改为两个线程来完成,也就是前面所提到的 SQL 线程和 IO 线程。最早提出这个改进方案的是Yahoo!的一位工程师“Jeremy Zawodny”。通过这样的改造,这样既在很大程度上解决了性能问题,缩短了异步的延时时间,同时也减少了潜在的数据丢失量。
  当然,即使是换成了现在这样两个线程来协作处理之后,同样也还是存在 Slave 数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事务中,这些问题都是存在的。
   如果要完全避免这些问题,就只能用 MySQL 的 Cluster 来解决了。不过 MySQL的 Cluster 知道笔者写这部分内容的时候,仍然还是一个内存数 据库的解决方案,也就是需要将所有数据包括索引全部都 Load 到内存中,这样就对内存的要求就非常大的大,对于一般的大众化应用来说可实施性并不是太大。当然,在之前与 MySQL 的 CTO David 交流的时候得知,MySQL 现在正在不断改进其 Cluster 的实现,其中非常大的一个改动就是允许数据不用全部 Load 到内存中,而仅仅只是索引全部 Load 到内存中,我想信在完成该项改造之后的 MySQL Cluster 将会更加受人欢迎,可实施性也会更大。

MT.EXE是一个网络管理方面的软件

MT.EXE是一个网络管理方面的软件,有了这40K的一个程序,居然有大约40项实用功能:

用法: mt.exe <选项>
选项 :
-filter —更改 TCP/IP 过滤器的开头状态
-addport —添加端口到过滤器的允许列表
-setport —设置端口作为过滤器的允许列表
-nicinfo —列出 TCP/IP 界面信息
-pslist —列出活动进程
-pskill —杀毒指定进程
-dlllist —列出指定进程的 DLL
-sysinfo —列出系统信息
-shutdown —关闭系统
-reboot —重启系统
-poweroff —关闭电源
-logoff —注销当前用户会话
-chkts —检查终端服务信息
-setupts —安装终端服务
-remts —卸载终端服务
-chgtsp —重置终端服务端口
-clog —清除系统日志
-enumsrv —列出所有服务
-querysrv —列出指定服务的详细信息
-instsrv —安装一个服务
-cfgsrv —更改服务配置
-remsrv —卸载指定服务
-startsrv —启动指定服务
-stopsrv —停止指定服务
-netget —从 http/ftp 下载
-redirect —端口重定向
-chkuser —列出所有账户、sid 和 anti 克隆
-clone —克隆 admin 到目标
-never —设置账户看上去从未登录
-killuser —删除账户,甚至是 "guest" 也可删除
-su —以 Local_System 权限运行进程
-findpass —显示所有已登录用户的口令
-netstat —列出 TCP 连接
-killtcp —杀死 TCP 连接
-psport —映射端口到进程
-touch —设置文件日期和时间到指定值
-secdel —安全擦除文件或目录占用的空间
-regshell —进入一个控制台注册表编辑器
-chkdll —检测 gina dll 后门

使用示例
     ——By 中国X黑客小组

一,MT.EXE –filter
用法:
MT -filter <ON|OFF> →Enabld|Disable TCP/IP Filter.
从上面的说明可以知道,这个是打开关闭TCP/IP筛选的,我们先来试一下,输入命令:
D:\>MT -FILTER on

Enable TCP/IP Filter successful!
这个时候我们看看是不是打开了TCP/IP筛选,打开网络连接选项,右键本地连接—Internet协议(TCP/IP)属性→高级—选项→TCP/IP筛选→-属性,我们看到的这样的情况,如图:

可以看见,我们已经启用了这个TCP/IP筛选,再次输入命令:
D:\>MT -FILTER off

Disable TCP/IP Filter successful!
查看属性:

有了这个工具,我们就不必那样的麻烦的点击鼠标了,一切都很简单.

二, D:\>mt -addport

用法:
mt -addport <TCP|UDP> NIC PortList →Add ports to the allowed portlist.
Use "-nicinfo" get Nic number first.
从说明上面看,是增加端口列表中允许通讯的端口,还是和上面的一样,我们来看看这个功能是如何的强大:
五, -pslist —List active processes.
列出活动进程,经常用PSTOOLS的很熟悉这个功能了,在这里,我将这个工具和pstools的工具相比较,看看他们的功能怎么样?
D:\>mt -pslist

PID Path
0 [Idle Process]
4 l[System]
464 \SystemRoot\System32\smss.exe
524 \??\C:\WINDOWS\system32\csrss.exe
548 \??\C:\WINDOWS\system32\winlogon.exe
592 C:\WINDOWS\system32\services.exe
604 C:\WINDOWS\system32\lsass.exe
780 C:\WINDOWS\system32\svchost.exe
844 C:\WINDOWS\System32\svchost.exe
876 C:\Program Files\TGTSoft\StyleXP\StyleXPService.exe
932 C:\WINDOWS\System32\svchost.exe
960 C:\WINDOWS\System32\svchost.exe
1128 C:\WINDOWS\System32\alg.exe
1160 C:\WINDOWS\System32\inetsrv\inetinfo.exe
1188 D:\mysql\bin\mysqld-nt.exe
1280 C:\WINDOWS\System32\nvsvc32.exe
1728 C:\WINDOWS\Explorer.EXE
212 C:\WINDOWS\System32\ctfmon.exe
504 D:\Program Files\Microsoft Office\Office10\WINWORD.EXE
924 D:\Program Files\MYIE2\myie.exe
1348 C:\WINDOWS\System32\dllhost.exe
1516 C:\WINDOWS\System32\dllhost.exe
1856 C:\WINDOWS\System32\msdtc.exe
1356 C:\WINDOWS\System32\cmd.exe
1004 C:\WINDOWS\System32\conime.exe
1748 D:\Program Files\HyperSnap-DX 5\HprSnap5.exe
1272 D:\MT.exe
我们使用PSLIST得到的结果:
D:\hack>pslist

PsList v1.12 – Process Information Lister
Copyright (C) 1999-2000 Mark Russinovich
Systems Internals – http://www.sysinternals.co…

Process information for LIN:

Name Pid Pri Thd Hnd Mem User Time Kernel Time Elapsed Time
Idle 0 0 1 0 20 0:00:00.000 0:40:22.453 0:00:00.000
System 4 8 56 258 40 0:00:00.000 0:00:06.098 0:00:00.000
smss 464 11 3 21 44 0:00:00.010 0:00:00.100 0:43:10.565
csrss 524 13 11 416 3892 0:00:02.042 0:00:14.240 0:43:06.449
winlogon 548 13 19 443 1044 0:00:01.171 0:00:01.882 0:43:04.185
services 592 9 21 307 940 0:00:00.721 0:00:01.662 0:43:01.582
lsass 604 9 19 304 1132 0:00:00.540 0:00:00.690 0:43:01.532
svchost 780 8 8 255 824 0:00:00.200 0:00:00.160 0:42:58.687
svchost 844 8 55 1214 5740 0:00:02.393 0:00:01.932 0:42:58.457
StyleXPSer 876 8 2 38 416 0:00:00.110 0:00:00.070 0:42:58.357
svchost 932 8 5 46 396 0:00:00.020 0:00:00.040 0:42:56.705
svchost 960 8 7 90 204 0:00:00.060 0:00:00.040 0:42:56.244
alg 1128 8 5 116 220 0:00:00.020 0:00:00.060 0:42:49.144
inetinfo 1160 8 17 281 864 0:00:00.210 0:00:00.330 0:42:49.054
mysqld-nt 1188 8 6 81 76 0:00:00.010 0:00:00.050 0:42:47.602
nvsvc32 1280 8 3 74 92 0:00:00.090 0:00:00.160 0:42:45.378
Explorer 1728 8 20 583 19548 0:00:11.436 0:00:27.519 0:42:37.607
ctfmon 212 8 1 109 1596 0:00:00.340 0:00:01.031 0:42:26.982
WINWORD 504 8 5 394 43428 0:01:04.072 0:00:25.757 0:41:26.194
myie 924 8 9 312 3116 0:00:09.623 0:00:07.460 0:35:36.582
dllhost 1348 8 23 240 1540 0:00:01.982 0:00:00.460 0:35:24.414
dllhost 1516 8 15 200 784 0:00:00.190 0:00:00.230 0:35:22.912
msdtc 1856 8 18 149 372 0:00:00.080 0:00:00.090 0:35:18.896
cmd 1356 8 1 21 592 0:00:00.080 0:00:00.100 0:32:44.414
conime 1004 8 1 25 664 0:00:00.050 0:00:00.030 0:32:42.652
HprSnap5 1748 8 6 168 1648 0:00:01.932 0:00:03.414 0:18:38.798
cmd 1548 8 1 20 1392 0:00:00.020 0:00:00.010 0:00:28.020
pslist 1716 8 2 82 1672 0:00:00.030 0:00:00.050 0:00:00.400
使用PULIST得到的结果:
E:\HACK>pulist
Process PID User
Idle 0
System 4
smss.exe 464 NT AUTHORITY\SYS
csrss.exe 524 NT AUTHORITY\SYS
winlogon.exe 548 NT AUTHORITY\SYS
services.exe 592 NT AUTHORITY\SYS
lsass.exe 604 NT AUTHORITY\SYS
svchost.exe 780 NT AUTHORITY\SYS
svchost.exe 844 NT AUTHORITY\SYS
StyleXPService.exe 876 NT AUTHORITY\SY
svchost.exe 932
svchost.exe 960
alg.exe 1128
inetinfo.exe 1160 NT AUTHORITY\SYS
mysqld-nt.exe 1188 NT AUTHORITY\SYS
nvsvc32.exe 1280 NT AUTHORITY\SYS
Explorer.EXE 1728 LIN\lin
ctfmon.exe 212 LIN\lin
WINWORD.EXE 504 LIN\lin
MyIE.exe 924 LIN\lin
dllhost.exe 1348
dllhost.exe 1516 NT AUTHORITY\SYS
msdtc.exe 1856
cmd.exe 1356 LIN\lin
conime.exe 1004 LIN\lin
HprSnap5.exe 1748 LIN\lin
cmd.exe 1548 LIN\lin
pulist.exe 1788 LIN\lin
从 上面的情况可以知道,输入MT还没有PSLIST功能的强大,能够列出 Name,Pid,Pri,Thd Hnd,Mem,User Time,Kernel Time,Elapsed Time,但是较于PULIST,已经是很好的了,能够列出进程名和运行路径,已经能够满足我们平时的使用了.

六, D:\>mt -pskill

用法:
mt -pskill <PID|ProcessName>
同样也是PSTOOLS的工具之一了,我们使用MyIE.exe这个软件作为测试,看看他们能不能杀死这个进程,首先是使用MT,通过上面的 MT –PSLIST,我们知道MyIE.exe的PID值是924,于是输入:
D:\>mt -pskill 924

Kill process sccuessful!
很快,MYIE就消失了,也就是被KILL了,再使用PSKILL.EXE,我们表示公平统一性,我们还是有PSLIST取得MYIE的PID 值,重新打开MYIE,得到它的PID值为220,我们输入:
D:\hack>pskill 220

PsKill v1.03 – local and remote process killer
Copyright (C) 2000 Mark Russinovich
http://www.sysinternals.co…

Process 220 killed.
同样也是很快被KILL,说明MT和PSKILL的功能是一样的,使用MT也可以达到和PSKILL一样的效果.
我们发现MT一个比较弱的功能的就是没有和PSKILL一样支持网络功能,在PSKILL中可以通过 pskill [\\RemoteComputer [-u Username]] <process Id or name>
-u Specifies optional user name for login to
remote computer.
杀死远程的计算机进程,当然,我们不可能指望MT也能有这样强大的功能,毕竟我们用的仅仅才只有40K.

七, D:\>mt -dlllist

用法:
mt -dlllist <PID|ProcessName>
列出进程中相关的DLL文件,于这个相关功能的软件我没有找到,不过我们使用Windows优化大师,我们先来测试一下,这次我们选中的进程是 StyleXPService.exe.还是使用MT –pslist得到其PID值876,输入:
D:\>mt -dlllist 876

C:\Program Files\TGTSoft\StyleXP\StyleXPService.exe
C:\WINDOWS\System32\ntdll.dll
C:\WINDOWS\system32\kernel32.dll
C:\WINDOWS\system32\USER32.dll
C:\WINDOWS\system32\GDI32.dll
C:\WINDOWS\system32\ADVAPI32.dll
C:\WINDOWS\system32\RPCRT4.dll
C:\WINDOWS\system32\ole32.dll
C:\WINDOWS\system32\OLEAUT32.dll
C:\WINDOWS\system32\MSVCRT.DLL
C:\WINDOWS\system32\VERSION.dll
C:\WINDOWS\System32\SETUPAPI.dll
C:\WINDOWS\System32\NETAPI32.dll
C:\WINDOWS\System32\IMM32.DLL
C:\WINDOWS\System32\LPK.DLL
C:\WINDOWS\System32\USP10.dll
C:\WINDOWS\System32\UXTHEME.DLL
C:\WINDOWS\System32\rsaenh.dll
打开Windows优化大师,看看它得到的相关DLL文件是什么?如图:

使用MT得到的DLL相关文件和Windows优化大师的是一摸一样的,我们可以肯定使用MT绝对比使用Windows优化大师方便快捷.

八, mt –sysinfo
列出系统信息,还是使用Windows优化大师与之作比较,发现几乎没有任何的失误,可见准确性特别强的,由于页面的关系,数据不再展示. 这个功能和程序sysinfo.exe是一样的.
九, -shutdown —Shutdown system.
-reboot —Reboot system.
-poweroff —Turn off power.
-logoff —Logoff current user’s session.
这4个命令就不说了,和系统工具shutdown不一样的是,输入之后没有任何的提示,直接关机,我已经试过了,幸亏还记得保存.
十, -chkts —Check Terminal Service info.
-setupts —Install Terminal Service.
-remts —Remove Terminal Service.
-chgtsp —Reset Terminal Service port.
这4个命令是和Terminal相关的,由于没有安装服务器版本的系统,所以没有测试.
十一, -clog —Clean system log.
用来清除记录,我们输入:
D:\>mt -clog

用法:
mt -clog <app|sec|sys|all> —Clean Application|Security|System|All logs.
从上面的可以看出,我们可以清除 "应用程序" "安全性" "系统"3个日志,我随便选择一个,用MT删除 "应用程序"日志,输入:
D:\>mt -clog app
Clean EventLog : Application successful!
打开事件查看器,如图,

可以看出日志已经被清空,不过MT并不能和小榕的Cleariislog相比,不能删除指定IP的日志,这个可能是yy3并没有考虑将这个工具用作那样的用途.

十二, -enumsrv —List all services.
列出所有的服务,这个测试可能你的不同,因为我已经删除了很多的服务的了,为了精简系统和提升速度,还是来看看,
D:\>mt -enumsrv

用法:
mt -enumsrv <SRV|DRV> →List all Win32|Driver Service

D:\>mt -enumsrv srv

Num ServiceName DisplayName

0 Alerter Alerter
1 ALG Application Layer Gateway Service
2 AppMgmt Application Management
3 aspnet_state ASP.NET State Service
4 AudioSrv Windows Audio
(省略以下大部分的内容)
D:\>mt -enumsrv drv

Num ServiceName DisplayName

0 Abiosdsk Abiosdsk
1 abp480n5 abp480n5
2 ACPI Microsoft ACPI Driver
3 ACPIEC ACPIEC
4 adpu160m adpu160m
5 aec Microsoft Kernel Acoustic Echo Canceller
6 AFD AFD 网络支持环境
7 Aha154x Aha154x
8 aic78u2 aic78u2
(省略以下大部分的内容)
实在是太多了,也不想说什么了,只有一个字→高.
十三, D:\>mt -querysrv

用法:
mt -querysrv <ServiceName> →Show detial info of a specifies service.
列出服务的详细信息,我们查看系统进程Alerter的信息,输入:
D:\>mt -querysrv Alerter

ServiceName: Alerter
Status: Stopped
ServiceType: Win32 Share Service
Start type: Demand Start
LogonID: NT AUTHORITY\LocalService
FilePath : C:\WINDO

用ntsd命令杀进程

ntsd命令杀进程

 

我前段时间发现我的机子里多了一个进程,只要开机就在,我用任务管理器却怎么关也关不了

杀进程很容易,随便找个工具都行。比如IceSword。关键是找到这个进程的启动方式,不然下次重启它又出来了。

顺便教大家一招狠的。其实用Windows自带的工具就能杀大部分进程:

c:\>ntsd -c q -p PID

只有SystemSMSS.EXECSRSS.EXE不能杀。前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它。

ntsd2000开始就是系统自带的用户态调试工具。被调试器附着(attach)的进程会随调试器一起退出,所以可以用来在命令行下终止进程。使用ntsd自动就获得了debug权限,从而能杀掉大部分的进程。

ntsd会新开一个调试窗口,本来在纯命令行下无法控制,但如果只是简单的命令,比如退出(q),用-c参数从命令行传递就行了。

Ntsd按照惯例也向软件开发人员提供。只有系统开发人员使用此命令。有关详细信息,请参阅 NTSD 中所附的帮助文件。

用法:开个cmd.exe窗口,输入:

ntsd -c q -p PID

把最后那个PID,改成你要终止的进程的ID
如果你不知道进程的ID,任务管理器-》进程选项卡-》查看-》选择列-》
勾上"PID(进程标识符)",然后就能看见了。

wget 的使用

Wget 的使用

1)支持断点下传功能(2)同时支持FTP和HTTP下载方式(3)支持代理服务器(4)设置方便简单;5)程序小,完全免费;

命令格式:

wget [参数列表] [目标软件、网页的网址]

1、启动类参数

这一类参数主要提供软件的一些基本信息;

-V,–version 显示软件版本号然后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND 执行一个 “.wgetrc”命令

以上每一个功能有长短两个参数,长短功能一样,都可以使用。需要注意的是,这里的-e参数是执行一个.wgettrc的命令,.wgettrc命令其实是一个参数列表,直接将软件需要的参数写在一起就可以了。

2、文件处理参数

这类参数定义软件log文件的输出方式等;

-o,–output-file=FILE 将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet 不显示输出信息;
-i,–input-file=FILE 从文件中取得URL;

以上参数对于攻击者比较有用,我们来看看具体使用;

例1:下载192.168.1.168首页并且显示下载信息
wget -d http://192.168.1.168

例2:下载192.168.1.168首页并且不显示任何信息
wget -q http://192.168.1.168

例3:下载filelist.txt中所包含的链接的所有文件
wget -i filelist.txt

wget -np -m -l5  http://jpstone.bokee.com //不下载本站所链接的其它站点内容,5级目录结构
3、下载参数

下载参数定义下载重复次数、保存文件名等;

-t,–tries=NUMBER 是否下载次数(0表示无穷次)
-O –output-document=FILE下载文件保存为别的文件名
-nc, –no-clobber 不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS 设置超时时间
-Y,–proxy=on/off 关闭代理

例:下载192.168.1.168的首页并将下载过程中的的输入信息保存到test.htm文件中
wget -o test.htm http://192.168.1.168

4、目录参数

目录参数主要设置下载文件保存目录与原来文件(服务器文件)的目录对应关系;

-nd  –no-directories 不建立目录
-x,–force-directories 强制建立目录
可能现在我们对这里的目录还不是很了解,我们来看一个举例

例:下载192.168.1.168的首页,并且保持网站结构
wget -x http://192.168.1.168  

5、HTTP参数

HTTP参数设置一些与HTTP下载有关的属性;

–http-user=USER设置HTTP用户
–http-passwd=PASS设置HTTP密码
–proxy-user=USER设置代理用户
–proxy-passwd=PASS设置代理密码

以上参数主要设置HTTP和代理的用户、密码;

6、递归参数设置

在下载一个网站或者网站的一个目录的时候,我们需要知道的下载的层次,这些参数就可以设置;
-r,–recursive 下载整个网站、目录(小心使用)
-l,–level=NUMBER 下载层次

例:下载整个网站
wget -r http://192.168.1.168

7、递归允许与拒绝选项参数

下载一个网站的时候,为了尽量快,有些文件可以选择下载,比如图片和声音,在这里可以设置;

-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 拒绝的目录

如何设定wget所使用的代理服务器
wget可以使用用户设置文件".wgetrc"来读取很多设置,我们这里主要利用这个文件来是
设置代理服务器。使用者用什么用户登录,那么什么用户主目录下的".wgetrc"文件就起
作用。例如,"root"用户如果想使用".wgetrc"来设置代理服务器,"/root/.wgetrc"就起
作用,下面给出一个".wgetrc"文件的内容,读者可以参照这个例子来编写自己的"wgetrc"文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
这两行的含义是,代理服务器IP地址为:111.111.111.111,端口号为:80。第一行指定
HTTP协议所使用的代理服务器,第二行指定FTP协议所使用的代理服务器。

WGet使用指南
wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.

所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget 遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。

wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完 毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

wget的常见用法
wget的使用格式

Usage: wget [OPTION]… [URL]…用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~us…
# 或者
wget -m http://www.tldp.org/LDP/ab…在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC… -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linu… -i filelist.txt -o down.log &上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件 filelist.txt中,在晚上要出去系统前执行上面代码的第二条。

使用代理下载
wget -Y on -p -k https://sourceforge.net/pr…代理可以在环境变量或wgetrc文件中设定

# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:…
ftp_proxy = http://proxy.yoyodyne.com:…各种选项分类列表
启动
-V,  –version           显示wget的版本后退出
-h,  –help              打印语法帮助
-b,  –background        启动后转入后台执行
-e,  –execute=COMMAND   执行.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc记录和输入文件
-o,  --output-file=FILE     把记录写到FILE文件中
-a,  --append-output=FILE   把记录追加到FILE文件中
-d,  --debug                打印调试输出
-q,  --quiet                安静模式(没有输出)
-v,  --verbose              冗长模式(这是缺省设置)
-nv, --non-verbose          关掉冗长模式,但不是安静模式
-i,  --input-file=FILE      下载在FILE文件中出现的URLs
-F,  --force-html           把输入文件当作HTML格式文件对待
-B,  --base=URL             将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
--sslcertfile=FILE     可选客户端证书
--sslcertkey=KEYFILE   可选客户端证书的KEYFILE
--egd-file=FILE        指定EGD socket的文件名下载
--bind-address=ADDRESS   指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t,  --tries=NUMBER           设定最大尝试链接次数(0 表示无限制).
-O   --output-document=FILE   把文档写到FILE文件中
-nc, --no-clobber             不要覆盖存在的文件或使用.#前缀
-c,  --continue               接着下载没下载完的文件
--progress=TYPE          设定进程条标记
-N,  --timestamping           不要重新下载文件除非比本地文件新
-S,  --server-response        打印服务器的回应
--spider                 不下载任何东西
-T,  --timeout=SECONDS        设定响应超时的秒数
-w,  --wait=SECONDS           两次尝试之间间隔SECONDS秒
--waitretry=SECONDS      在重新链接之间等待1...SECONDS秒
--random-wait            在下载之间等待0...2*WAIT秒
-Y,  --proxy=on/off           打开或关闭代理
-Q,  --quota=NUMBER           设置下载的容量限制
--limit-rate=RATE        限定下载输率目录
-nd  --no-directories            不创建目录
-x,  --force-directories         强制创建目录
-nH, --no-host-directories       不创建主机目录
-P,  --directory-prefix=PREFIX   将文件保存到目录 PREFIX/...
--cut-dirs=NUMBER           忽略 NUMBER层远程目录HTTP 选项
--http-user=USER      设定HTTP用户名为 USER.
--http-passwd=PASS    设定http密码为 PASS.
-C,  --cache=on/off        允许/不允许服务器端的数据缓存 (一般情况下允许).
-E,  --html-extension      将所有text/html文档以.html扩展名保存
--ignore-length       忽略
Content-Length’头域
–header=STRING       在headers中插入字符串 STRING
–proxy-user=USER     设定代理的用户名为 USER
–proxy-passwd=PASS   设定代理的密码为 PASS
–referer=URL         在HTTP请求中包含 Referer: URL'头
-s,  --save-headers        保存HTTP头到文件
-U,  --user-agent=AGENT    设定代理的名称为 AGENT而不是 Wget/VERSION.
--no-http-keep-alive  关闭 HTTP活动链接 (永远链接).
--cookies=off         不使用 cookies.
--load-cookies=FILE   在开始会话前从文件 FILE中加载cookie
--save-cookies=FILE   在会话结束后将 cookies保存到 FILE文件中FTP 选项
-nr, --dont-remove-listing   不移走
.listing’文件
-g,  –glob=on/off           打开或关闭文件名的 globbing机制
–passive-ftp           使用被动传输模式 (缺省值).
–active-ftp            使用主动传输模式
–retr-symlinks         在递归的时候,将链接指向文件(而不是目录)递归下载
-r,  –recursive          递归下载--慎用!
-l,  –level=NUMBER       最大递归深度 (inf 或 0 代表无穷).
–delete-after       在现在完毕后局部删除文件
-k,  –convert-links      转换非相对链接为相对链接
-K,  –backup-converted   在转换文件X之前,将之备份为 X.orig
-m,  –mirror             等价于 -r -N -l inf -nr.
-p,  –page-requisites    下载显示HTML文件的所有图片递归下载中的包含和不包含(accept/reject)
-A,  –accept=LIST                分号分隔的被接受扩展名的列表
-R,  –reject=LIST                分号分隔的不被接受的扩展名的列表
-D,  –domains=LIST               分号分隔的被接受域的列表
–exclude-domains=LIST       分号分隔的不被接受的域的列表
–follow-ftp                 跟踪HTML文档中的FTP链接
–follow-tags=LIST           分号分隔的被跟踪的HTML标签的列表
-G,  –ignore-tags=LIST           分号分隔的被忽略的HTML标签的列表
-H,  –span-hosts                 当递归时转到外部主机
-L,  –relative                   仅仅跟踪相对链接
-I,  –include-directories=LIST   允许目录的列表
-X,  –exclude-directories=LIST   不被包含目录的列表
-np, –no-parent                  不要追溯到父目录

Wget使用技巧

来源:Linux技术中坚站

wget的使用形式是:
wget [参数列表] URL
首先来介绍一下wget的主要参数:
· -b:让wget在后台运行,记录文件写在当前目录下"wget-log"文件中;
· -t [nuber of times]:尝试次数,当wget无法与服务器建立连接时,尝试连接多少次
。比如"-t
120"表示尝试120次。当这一项为"0"的时候,指定尝试无穷多次直到连接成功为止,这个
设置非常有用,当对方服务器突然关机或者网络突然中断的时候,可以在恢复正常后继续
下载没有传完的文件;
· -c:断点续传,这也是个非常有用的设置,特别当下载比较大的文件的时候,如果中
途意外中断,那么连接恢复的时候会从上次没传完的地方接着传,而不是又从头开始,使
用这一项需要远程服务器也支持断点续传,一般来讲,基于UNIX/Linux的Web/FTP服务器
都支持断点续传;
· -T [number of seconds]:超时时间,指定多长时间远程服务器没有响应就中断连接
,开始下一次尝试。比如"-T
120"表示如果120秒以后远程服务器没有发过来数据,就重新尝试连接。如果网络速度比
较快,这个时间可以设置的短些,相反,可以设置的长一些,一般最多不超过900,通常
也不少于60,一般设置在120左右比较合适;
· -w [number of seconds]:在两次尝试之间等待多少秒,比如"-w 100"表示两次尝试
之间等待100秒;
· -Y on/off:通过/不通过代理服务器进行连接;
· -Q [byetes]:限制下载文件的总大小最多不能超过多少,比如"-Q2k"表示不能超过2K
字节,"-Q3m"表示最多不能超过3M字节,如果数字后面什么都不加,就表示是以字节为单
位,比如"-Q200"表示最多不能超过200字节;
· -nd:不下载目录结构,把从服务器所有指定目录下载的文件都堆到当前目录里;
· -x:与"-nd"设置刚好相反,创建完整的目录结构,例如"wget -nd
http://www.gnu.org"将创建在当前目录下创建"www.gnu.org"子目录,然后按照服务器
实际的目录结构一级一级建下去,直到所有的文件都传完为止;
· -nH:不创建以目标主机域名为目录名的目录,将目标主机的目录结构直接下到当前目
录下;
· –http-user=username
· –http-passwd=password:如果Web服务器需要指定用户名和口令,用这两项来设定;
· –proxy-user=username
· –proxy-passwd=password:如果代理服务器需要输入用户名和口令,使用这两个选项

· -r:在本机建立服务器端目录结构;
· -l [depth]:下载远程服务器目录结构的深度,例如"-l 5"下载目录深度小于或者等
于5以内的目录结构或者文件;
· -m:做站点镜像时的选项,如果你想做一个站点的镜像,使用这个选项,它将自动设
定其他合适的选项以便于站点镜像;
· -np:只下载目标站点指定目录及其子目录的内容。这也是一个非常有用的选项,我们
假设某个人的个人主页里面有一个指向这个站点其他人个人主页的连接,而我们只想下载
这个人的个人主页,如果不设置这个选项,甚至–有可能把整个站点给抓下来,这显然是
我们通常不希望的;
ü 如何设定wget所使用的代理服务器
wget可以使用用户设置文件".wgetrc"来读取很多设置,我们这里主要利用这个文件来是
设置代理服务器。使用者用什么用户登录,那么什么用户主目录下的".wgetrc"文件就起
作用。例如,"root"用户如果想使用".wgetrc"来设置代理服务器,"/root/.wgert"就起
作用,下面给出一个".wge
trc"文件的内容,读者可以参照这个例子来编写自己的"wgetrc"文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
这两行的含义是,代理服务器IP地址为:111.111.111.111,端口号为:80。第一行指定
HTTP协议所使用的代理服务器,第二行指定FTP协议所使用的代理服务器。

wget 使用实例:
wget是一个命令行工具,用于批量下载文件,支持HTTP和FTP。究竟比其他的工具好在哪里?看看内容吧 🙂

wget基本上所有的Linux版本都自己带了,但是有多少人在用呢?呵呵,如果你没有用过,不妨试试。Windows下面的用户可以使用GNUwin32的项目,wget,基本功能完全一致。好吧,我们来以几个简单的例子看看wget的威力。

如果我们想下载ftp里面某个目录里面的所有文件,我们也可以不用ftp这个笨蛋,呵呵,可以享受cute ftp等图形化工具的拖一个目录的轻松了。如

wget -r ftp://10.8.8.8/movie/

呵呵,等吧!下完了,发觉有些不对劲,怎么出来个10.8.8.8的目录,进去看看,又是一个movie,哦,wget将目录结构和网站标题都给记录下来了,不要??没有问题!比如说还是这个例子

wget -r -nd ftp://10.8.8.8/movie/

结果什么目录都没有了,faint!怎么会这样?呵呵,你如果想要这样就让它这样吧,否则使用

wget -r -nH ftp://10.8.8.8/movie/

恩?movie也不要?OK,那就这样

wget -r -nH –cut-dirs=1 ftp://10.8.8.8/movie/

这有什么用啊?cuteftp比他好用多了,而且,你这断了线能连吗?呵呵,不好意思,可以连

wget -c -r -nH –cut-dirs=1 ftp://10.8.8.8/movie/

但 是cuteftp能做下面的事情吗?比如,现在很多网站使用Apache建站,并不提供ftp服务,但是Apache有一个indexing功能,可以提 供一个类似于ftp的界面,好多文件我想下啊,怎么办?由于是HTTP协议,CuteFTP无能为力了,倒是flash get等有什么get all这种功能,不知道他们对于目录处理怎么样。但是wget一点问题都没有,不信?我们拿CTAN为例(例子并不恰当,CTAN有FTP服务),我们下 载这里面所有的宏包,呵呵

wget -r -k http://www.txia.com/blog

-k表示将连接转换为本地连接。但是现在同样有上面的问题啊,那就把你需要的加上吧,另外也许你根本不需要向下走那么多层,比如,我们就要到第二层,那么

wget -r -l2 -k http://www.txia.com/blog

现在新的问题是,由于网页有一个排序功能,很讨厌,因为下载的时候把网页重复了好多次,那么我们可使用-A和-R开关控制下载类型,并且可以使用通配符,呵呵,现在随心所欲了吧

wget -r -R ‘*.htm*\?*’ -k http://www.txia.com/blog

这次没有那种网页了吧?-R的意义在于拒绝下载匹配类型的文件,-A表示仅仅接受的文件类型,如-A ‘*.gif’将仅下载gif图片,如果有多个允许或者不允许,可以使用,分开。

那 么,我们现在在使用代理服务器,怎么办呢?呵呵,很高兴你选择了wget,你可以使用它的配置文件,环境变量来利用代理。这里推荐使用环境变量,如在 bash里面我们可以把天天用的proxy加到.bash_profile里面,这是Linux标准写法(很多软件都用的,什么apt-get,yum等 等)

export http_proxy=http://10.20.30.40:8080

然后,proxy就默认打开了,如果需要暂时关闭,可以使用

wget –proxy=off -r -k http://www.txia.com/blog

当然,写一个.wgetrc文件也可以,该文件可以从/usr/local/etc里面找到,里面有很详细的注释,我就不多说了。

下载网页的时候比较麻烦的事情是,有的网页被同时指向了很多遍,那么为了避免多次下载,我们使用

wget -nc -r -k http://www.txia.com/blog

可以避免这件事情。为了不被有的连接指向非http://www.txia.com/blog内层目录,我们还应该加上

wget -nc -np -r -k http://www.txia.com/blog

避免下载非该目录里面的文件,这也避免了到不同的host上面去。当然,如果你希望有这个功能,在多个host之间跳来跳去的下载,可以使用

wget -nc -np -H -r -k http://www.txia.com/blog

使得可以在多个host之间span,同时-I和-X可以使得我们仅仅跟踪某些目录或者不跟踪某些目录。如果某些HTML里面你需要的东西不是由这种东西作出来的,你就得使用–follow-tags和–ignore-tags了。

嘿,我有个文件里面都是连接,怎么办?要是不是html你只需要

wget -i your.file

如果是,那也不繁

wget -F -i your.file

wget 使用指南
wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.

所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。

wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作"递归下载"。在递归下载的时候,wget 遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。

wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务 器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

wget的常见用法
wget的使用格式

Usage: wget [OPTION]… [URL]…

用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~us…
-r 表示递归下载,会下载所有的链接,不过要注意的是,不要单独使用这个参数,因为如果你要下载的网站也有别的网站的链接,wget也会把别的网站的东西下载 下来,所以要加上 -np这个参数,表示不下载别的站点的链接. -k表示将下载的网页里的链接修改为本地链接.-p获得所有显示网页所需的元素,比如图片什么的.

# 或者
wget -m http://www.tldp.org/LDP/ab…

在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC… -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linu… -i filelist.txt -o down.log &

上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。

使用代理下载
wget -Y on -p -k https://sourceforge.net/pr…

代理可以在环境变量或wgetrc文件中设定
# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:…
ftp_proxy = http://proxy.yoyodyne.com:…

wget各种选项分类列表
启动
 -V,  –version           显示wget的版本后退出
 -h,  –help              打印语法帮助
 -b,  –background        启动后转入后台执行
 -e,  –execute=COMMAND   执行.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc

记录和输入文件
 -o,  --output-file=FILE     把记录写到FILE文件中
 -a,  --append-output=FILE   把记录追加到FILE文件中
 -d,  --debug                打印调试输出
 -q,  --quiet                安静模式(没有输出)
 -v,  --verbose              冗长模式(这是缺省设置)
 -nv, --non-verbose          关掉冗长模式,但不是安静模式
 -i,  --input-file=FILE      下载在FILE文件中出现的URLs
 -F,  --force-html           把输入文件当作HTML格式文件对待
 -B,  --base=URL             将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
      --sslcertfile=FILE     可选客户端证书
      --sslcertkey=KEYFILE   可选客户端证书的KEYFILE
      --egd-file=FILE        指定EGD socket的文件名

下载
      --bind-address=ADDRESS   指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
 -t,  --tries=NUMBER           设定最大尝试链接次数(0 表示无限制).
 -O   --output-document=FILE   把文档写到FILE文件中
 -nc, --no-clobber             不要覆盖存在的文件或使用.#前缀
 -c,  --continue               接着下载没下载完的文件
      --progress=TYPE          设定进程条标记
 -N,  --timestamping           不要重新下载文件除非比本地文件新
 -S,  --server-response        打印服务器的回应
      --spider                 不下载任何东西
 -T,  --timeout=SECONDS        设定响应超时的秒数
 -w,  --wait=SECONDS           两次尝试之间间隔SECONDS秒
      --waitretry=SECONDS      在重新链接之间等待1...SECONDS秒
      --random-wait            在下载之间等待0...2*WAIT秒
 -Y,  --proxy=on/off           打开或关闭代理
 -Q,  --quota=NUMBER           设置下载的容量限制
      --limit-rate=RATE        限定下载输率

目录
 -nd  --no-directories            不创建目录
 -x,  --force-directories         强制创建目录
 -nH, --no-host-directories       不创建主机目录
 -P,  --directory-prefix=PREFIX   将文件保存到目录 PREFIX/...
      --cut-dirs=NUMBER           忽略 NUMBER层远程目录

HTTP 选项
      --http-user=USER      设定HTTP用户名为 USER.
      --http-passwd=PASS    设定http密码为 PASS.
 -C,  --cache=on/off        允许/不允许服务器端的数据缓存 (一般情况下允许).
 -E,  --html-extension      将所有text/html文档以.html扩展名保存
      --ignore-length       忽略
Content-Length’头域
      –header=STRING       在headers中插入字符串 STRING
      –proxy-user=USER     设定代理的用户名为 USER
      –proxy-passwd=PASS   设定代理的密码为 PASS
      –referer=URL         在HTTP请求中包含 Referer: URL'头
 -s,  --save-headers        保存HTTP头到文件
 -U,  --user-agent=AGENT    设定代理的名称为 AGENT而不是 Wget/VERSION.
      --no-http-keep-alive  关闭 HTTP活动链接 (永远链接).
      --cookies=off         不使用 cookies.
      --load-cookies=FILE   在开始会话前从文件 FILE中加载cookie
      --save-cookies=FILE   在会话结束后将 cookies保存到 FILE文件中

FTP 选项
 -nr, --dont-remove-listing   不移走
.listing’文件
 -g,  –glob=on/off           打开或关闭文件名的 globbing机制
      –passive-ftp           使用被动传输模式 (缺省值).
      –active-ftp            使用主动传输模式
      –retr-symlinks         在递归的时候,将链接指向文件(而不是目录)

递归下载
 -r,  –recursive          递归下载--慎用!
 -l,  –level=NUMBER       最大递归深度 (inf 或 0 代表无穷).
      –delete-after       在现在完毕后局部删除文件
 -k,  –convert-links      转换非相对链接为相对链接
 -K,  –backup-converted   在转换文件X之前,将之备份为 X.orig
 -m,  –mirror             等价于 -r -N -l inf -nr.
 -p,  –page-requisites    下载显示HTML文件的所有图片

递归下载中的包含和不包含(accept/reject)
 -A,  –accept=LIST                分号分隔的被接受扩展名的列表
 -R,  –reject=LIST                分号分隔的不被接受的扩展名的列表
 -D,  –domains=LIST               分号分隔的被接受域的列表
      –exclude-domains=LIST       分号分隔的不被接受的域的列表
      –follow-ftp                 跟踪HTML文档中的FTP链接
      –follow-tags=LIST           分号分隔的被跟踪的HTML标签的列表
 -G,  –ignore-tags=LIST           分号分隔的被忽略的HTML标签的列表
 -H,  –span-hosts                 当递归时转到外部主机
 -L,  –relative                   仅仅跟踪相对链接
 -I,  –include-directories=LIST   允许目录的列表
 -X,  –exclude-directories=LIST   不被包含目录的列表
 -np, –no-parent                  不要追溯到父目录

问题
在递归下载的时候,遇到目录中有中文的时候,wget创建的本地目录名会用URL编码规则处理。如"天网防火墙"会被存为"%CC%EC%CD%F8%B7%C0%BB%F0%C7%BD",这造成阅读上的极大不方便。

javascript 代码质量检查工具


http://www.jslint.com/

1.  使用dot引用要比下表引用的效率高; 如: arr["a"] 不如 arr.a的效率高,只是如果下表是数字就不能使用dot来引用了

2. for in 与 if hasOwnProperty

Array.prototype.a = function(){alert(‘a’);};
var arr = ["a","b"];
for (var i in arr) {
    if (arr.hasOwnProperty(i)) {
        alert(arr);
    }

}

对于一个数组,你可能希望使用for in来遍历,但是里面总是有一些其他的东西,使用hasOwnProperty就可以搞定了

页面中的全局污染

今天一个同事打电话说他在退出的时候会出现一个confirm("您确定要退出吗");的提示,他又确信没有写这段代码。

我使用httpwatch抓到所有页面的内容之后,使用httpwatch的find功能,查找到了confirm是出现在一个不太相关的js中,内容包含:

        

  • js全局变量的污染
  •     

  • 元素ID的污染
  •     

  • css存在污染的问题吗?