JPG,GIF,PNG格式图片优化

5:48:00 PM 0 Comments

JPG (有损压缩): 图片以 24 位颜色存储单个光栅图像。JPG 是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。

优点:
△ 摄影作品或写实作品支持高级压缩。
△ 利用可变的压缩比可以控制文件大小。
△ 支持交错(对于渐近式 JPEG 文件)。
△ JPEG 广泛支持 Internet 标准。
缺点:
△ 有损耗压缩会使原始图片数据质量下降。
△ 当您编辑和重新保存 JPEG 文件时,JPEG 会混合原始图片数据的质量下降。这种下降是累积性的。
△ JPEG 不适用于所含颜色很少、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片。
△ 同样质量的图片,保存为JPG一般都比GIF和PNG格式的文件都要大。

总结:
1. 对于写实的摄影图像或是颜色层次非常丰富的图像采用JPG的图片格式保存一般能达到最佳的压缩效果;
2. 有些矢量工具会展的图像由于采用较多的滤镜特效也会形成丰富的色彩层次,这个时候就需要采用JPG进行存储;
3. 页面的内容元素,如广告Banner,商品图片等推荐保存为JPG格式。
(不要存100%品质的JPG格式图片。因为100%并不一定是最高的品质,而是一个优化算法的极限值,所以会增加不必要的文件大小。建议存储95%品质的图片就可以最大限度的降低失真。
谨慎使用50%品质以下的压缩率。使用50%以下品质存储时会采用额外的压缩算法而导致图片失真更严重,尤其是对于有高对比度的图片。)

GIF (无损压缩): 图片以 8 位颜色或 256 色存储单个光栅图像数据或多个光栅图像数据。GIF 图片支持透明度、压缩、交错和多图像图片(动画 GIF)。
优点:
△ GIF 广泛支持 Internet 标准。
△ 支持无损耗压缩和透明度。
△ 动画 GIF 很流行,易于使用许多 GIF 动画程序创建。
缺点:
△ GIF 只支持 256 色调色板,因此,详细的图片和写实摄影图像会丢失颜色信息,而看起来却是经过调色的。
△ 在大多数情况下,无损耗压缩效果不如 JPEG 格式或 PNG 格式。
△ GIF 支持有限的透明度,没有半透明效果或褪色效果(例如,alpha 通道透明度提供的效果)。

总结:
这里不对GIF进行讨论,是因为PNG就是为取代GIF而生的,而且PNG的压缩算法也要优于GIF,所以只要不是需要动画效果的地方强烈建议都采用PNG格式图片。

PNG (无损压缩): 图片以任何颜色深度存储单个光栅图像。PNG 是与平台无关的格式。
PNG又分为PNG 8,PNG 24和PNG 32,PNG8和PNG24后面的数字则是代表这种PNG格式最多可以索引和存储的颜色值。"8″代表2的8次方也就是256色,而24则代表2的24次方大概有1600多万色。PNG 8和PNG 24的区别是,前者只支持完全透明和完全不透明,而后者还支持半透明即alpha透明。

优点:
△ PNG 支持高级别无损耗压缩。
△ PNG 支持 alpha 通道透明度。
△ PNG 支持伽玛校正。
△ PNG 支持交错。
△ PNG 受最新的 Web 浏览器支持。
缺点:
△ 较旧的浏览器和程序可能不支持 PNG 文件。
△ 作为 Internet 文件格式,与 JPEG 的有损耗压缩相比,PNG 提供的压缩量较少。
△ 作为 Internet 文件格式,PNG 对多图像文件或动画文件不提供任何支持。GIF 格式支持多图像文件和动画文件。

总结:
适合用PNG存储的图片
1. 图像上颜色较少,并且主要以纯色或者平滑的渐变色进行填充;
2. 具备较大亮度差异以及强烈对比的简单图像;
3. 用于页面结构的基本视觉元素,如容器的背景,按钮,导航的背景等;

TCPdump抓包命令详解

2:44:00 PM 0 Comments

tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。 
tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。


一、概述
顾名思义,tcpdump可以将网络中传送的数据包的"头"完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
引用
# tcpdump -vv
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:53:21.444591 IP (tos 0x10, ttl 64, id 19324, offset 0, flags [DF], proto 6, length: 92) asptest.localdomain.ssh > 192.168.228.244.1858: P 3962132600:3962132652(52) ack 2726525936 win 1266
asptest.localdomain.1077 > 192.168.228.153.domain: [bad udp cksum 166e!] 325+ PTR? 244.228.168.192.in-addr.arpa. (46)
11:53:21.446929 IP (tos 0x0, ttl 64, id 42911, offset 0, flags [DF], proto 17, length: 151) 192.168.228.153.domain > asptest.localdomain.1077: 325 NXDomain q: PTR? 244.228.168.192.in-addr.arpa. 0/1/0 ns: 168.192.in-addr.arpa. (123)
11:53:21.447408 IP (tos 0x10, ttl 64, id 19328, offset 0, flags [DF], proto 6, length: 172) asptest.localdomain.ssh > 192.168.228.244.1858: P 168:300(132) ack 1 win 1266
347 packets captured
1474 packets received by filter
745 packets dropped by kernel
不带参数的tcpdump会收集网络中所有的信息包头,数据量巨大,必须过滤。


二、选项介绍
引用
-A 以ASCII格式打印出所有分组,并将链路层的头最小化。 
-c 在收到指定的数量的分组后,tcpdump就会停止。 
-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。 
-d 将匹配信息包的代码以人们能够理解的汇编格式给出。 
-dd 将匹配信息包的代码以c语言程序段的格式给出。 
-ddd 将匹配信息包的代码以十进制的形式给出。 
-D 打印出系统中所有可以用tcpdump截包的网络接口。 
-e 在输出行打印出数据链路层的头部信息。 
-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。 
-f 将外部的Internet地址以数字的形式打印出来。 
-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。 
-i 指定监听的网络接口。 
-l 使标准输出变为缓冲行形式,可以把数据导出到文件。 
-L 列出网络接口的已知数据链路。 
-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。 
-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。 
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
-n 不把网络地址转换成名字。
-nn 不进行端口名称的转换。
-N 不输出主机名中的域名部分。例如,'nic.ddn.mil'只输出'nic'。 
-t 在输出的每一行不打印时间戳。 
-O 不运行分组分组匹配(packet-matching)代码优化程序。 
-P 不将网络接口设置成混杂模式。 
-q 快速输出。只输出较少的协议信息。 
-r 从指定的文件中读取包(这些包一般通过-w选项产生)。 
-S 将tcp的序列号以绝对值形式输出,而不是相对值。 
-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。 
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。 
-t 不在每一行中输出时间戳。 
-tt 在每一行中输出非格式化的时间戳。 
-ttt 输出本行和前面一行之间的时间差。 
-tttt 在每一行中输出由date处理的默认格式的时间戳。 
-u 输出未解码的NFS句柄。 
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。 
-vv 输出详细的报文信息。 
-w 直接将分组写入文件中,而不是不分析并打印出来。


三、tcpdump的表达式介绍
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获。 
在表达式中一般如下几种类型的关键字: 
引用
第一种是关于类型的关键字,主要包括host,net,port,例如 host 210.27.48.2, 指明 210.27.48.2是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host。 
第二种是确定传输方向的关键字,主要包括src,dst,dst or src,dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0。如果没有指明 方向关键字,则缺省是src or dst关键字。 
第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater, 还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算是'or' ,'||'; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要。

四、输出结果介绍
下面我们介绍几种典型的tcpdump命令的输出信息 
(1) 数据链路层头信息 
使用命令: 
#tcpdump --e host ICE
ICE 是一台装有linux的主机。它的MAC地址是0:90:27:58:AF:1A H219是一台装有Solaris的SUN工作站。它的MAC地址是8:0:20:79:5B:46; 上一条命令的输出结果如下所示:
引用
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ICE. telne t 0:0(0) ack 22535 win 8760 (DF)
21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0接收该分组, eth0 >表示从网络接口设备发送分组, 8:0:20:79:5b:46是主机H219的MAC地址, 它表明是从源地址H219发来的分组. 0:90:27:58:af:1a是主机ICE的MAC地址, 表示该分组的目的地址是ICE。 ip 是表明该分组是IP分组,60 是分组的长度, h219.33357 > ICE. telnet 表明该分组是从主机H219的33357端口发往主机ICE的 TELNET(23)端口。 ack 22535 表明对序列号是222535的包进行响应。 win 8760表明发 送窗口的大小是8760。 
(2) ARP包的tcpdump输出信息 
使用命令: 
#tcpdump arp
得到的输出结果是:
引用
22:32:42.802509 eth0 > arp who-has route tell ICE (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该分组,arp表明是ARP请求包, who-has route tell ICE表明是主机ICE请求主机route的MAC地址。 0:90:27:58:af:1a是主机 ICE的MAC地址。
(3) TCP包的输出信息 
用tcpdump捕获的TCP包的一般输出信息是: 
引用
src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP报文中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是报文中的数据 的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明 报文中是否有紧急指针。 Options是选项。 
(4) UDP包的输出信息
用tcpdump捕获的UDP包的一般输出信息是: 
引用
route.port1 > ICE.port2: udp lenth
UDP十分简单,上面的输出行表明从主机route的port1端口发出的一个UDP报文 到主机ICE的port2端口,类型是UDP, 包的长度是lenth。 

五、举例
(1) 想要截获所有210.27.48.1 的主机收到的和发出的所有的分组: 
#tcpdump host 210.27.48.1 
(2) 想要截获主机210.27.48.1 和主机210.27.48.2或210.27.48.3的通信,使用命令(注意:括号前的反斜杠是必须的): 
#tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \)
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: 
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4) 如果想要获取主机192.168.228.246接收或发出的ssh包,并且不转换主机名使用如下命令: 
#tcpdump -nn -n src host 192.168.228.246 and port 22 and tcp
(5) 获取主机192.168.228.246接收或发出的ssh包,并把mac地址也一同显示:
# tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn
(6) 过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头:
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24 
(7) 过滤源主机物理地址为XXX的报头:
tcpdump ether src 00:50:04:BA:9B and dst……
(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。 
(8) 过滤源主机192.168.0.1和目的端口不是telnet的报头,并导入到tes.t.txt文件中:
Tcpdump src host 192.168.0.1 and dst port not telnet -l > test.txt
ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。

tcpdump采用命令行方式,它的命令格式为:
tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae]
                        [-qX] [-r 文件] [所欲捕获的数据内容]
参数:
-nn,直接以 IP 及 Port Number 显示,而非主机名与服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。
-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,
     直到用户输入 [ctrl]-c 为止。
-A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。
-e,使用资料连接层 (OSI 第二层) 的 MAC 数据包数据来显示。
-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。
-r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,
     并且这个「文件」是由 -w 所制作出来的。
所欲捕获的数据内容:我们可以专门针对某些通信协议或者是 IP 来源进行数据包捕获。
     那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有。
    'host foo', 'host 127.0.0.1' :针对单台主机来进行数据包捕获。
     'net 192.168' :针对某个网段来进行数据包的捕获。
     'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制。
     'tcp port 21':还可以针对通信协议检测,如tcp、udp、arp、ether 等。
     除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';


范例一:以 IP 与 Port Number 捉下 eth0 这个网卡上的数据包,持续 3 秒
[root@linux ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win 
9648
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win 
9648
<==按下 [ctrl]-c 之后结束
6680 packets captured              <==捉取下来的数据包数量
14250 packets received by filter   <==由过滤所得的总数据包数量
7512 packets dropped by kernel     <==被核心所丢弃的数据包
至于那个在范例一所产生的输出中,我们可以大概区分为几个字段,现以范例一当中那行特殊字体行来说明一下:

· 01:33:40.41:这个是此数据包被捕获的时间,"时:分:秒"的单位。

· IP:通过的通信协议是IP。

· 192.168.1.100.22>:传送端是192.168.1.100这个IP,而传送的Port Number为22,那个大于(>)的符号指的是数据包的传输方向。

· 192.168.1.11.1190:接收端的IP是192.168.1.11,且该主机开启port 1190来接收。

· P 116:232(116):这个数据包带有PUSH的数据传输标志,且传输的数据为整体数据的116~232 Byte,所以这个数据包带有116 Bytes的数据量。

· ack 1 win 9648:ACK与Window size的相关资料。

最简单的说法,就是该数据包是由192.168.1.100传到192.168.1.11,通过的port是由22到1190,且带有116 Bytes的数据量,使用的是PUSH的标记,而不是SYN之类的主动联机标志。

接下来,在一个网络状态很忙的主机上面,你想要取得某台主机对你联机的数据包数据时,使用tcpdump配合管线命令与正则表达式也可以,不过,毕竟不好捕获。我们可以通过tcpdump的表达式功能,就能够轻易地将所需要的数据独立的取出来。在上面的范例一当中,我们仅针对eth0做监听,所以整个eth0接口上面的数据都会被显示到屏幕上,但这样不好分析,可以简化吗?例如,只取出port 21的联机数据包,可以这样做:

[root@linux ~]# tcpdump -i eth0 -nn port 21 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 01:54:37.96 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 1 win 65535 01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240:P 1:21(20) ack 1 win 5840 01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 21 win 65515 01:54:42.79 IP 192.168.1.11.1240 > 192.168.1.100.21:P 1:17(16) ack 21 win 65515 01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: . ack 17 win 5840 01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840

看!这样就仅取出port 21的信息,如果仔细看的话,你会发现数据包的传递都是双向的,Client端发出请求而Server端则予以响应,所以,当然是有去有回了。而我们也就可以经过这个数据包的流向来了解到数据包运动的过程了。例如:

· 我们先在一个终端机窗口输入"tcpdump-i lo-nn"的监听。

· 再另开一个终端机窗口来对本机(127.0.0.1)登录"ssh localhost",那么输出的结果会是如何?

  [root@linux ~]# tcpdump -i lo -nn  1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode  2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes  3 11:02:54.253777 IP 127.0.0.1.32936 >  127.0.0.1.22: S 933696132:933696132(0)     win 32767   4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936:  S 920046702:920046702(0)     ack 933696133 win 32767   5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192   6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936:  P 1:23(22) ack 1 win 8192       7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192

代码显示的头两行是tcpdump的基本说明,然后:

· 第3行显示的是来自Client端带有SYN主动联机的数据包。 
· 第4行显示的是来自Server端,除了响应Client端之外(ACK),还带有SYN主动联机的标志。 
· 第5行则显示Client端响应Server确定联机建立(ACK)。
· 第6行以后则开始进入数据传输的步骤。

从第3~5行的流程来看,熟不熟悉啊?没错。那就是3次握手的基础流程,有趣吧。不过tcpdump之所以被称为黑客软件之一远不止上面介绍的功能。上面介绍的功能可以用来作为我们主机的数据包联机与传输的流程分析,这将有助于我们了解到数据包的运作,同时了解到主机的防火墙设置规则是否有需要修订的地方。

还有更神奇的用法。当我们使用tcpdump在Router上面监听明文的传输数据时,例如FTP传输协议,你觉得会发生什么问题呢?我们先在主机端执行"tcpdump -i lo port 21 -nn –X",然后再以FTP登录本机,并输入账号与密码,结果你就可以发现如下的状况:

[root@linux ~]# tcpdump -i lo -nn -X 'port 21'     0x0000:  4500 0048 2a28 4000 4006 1286 7f00 0001  E..H*(@.@.......     0x0010:  7f00 0001 0015 80ab 8355 2149 835c d825  .........U!I.\.%     0x0020:  8018 2000 fe3c 0000 0101 080a 0e2e 0b67  .....<.........g     0x0030:  0e2e 0b61 3232 3020 2876 7346 5450 6420  ...a220.(vsFTPd.     0x0040:  322e 302e 3129 0d0a                      2.0.1)..      0x0000:  4510 0041 d34b 4000 4006 6959 7f00 0001  E..A.K@.@.iY....     0x0010:  7f00 0001 80ab 0015 835c d825 8355 215d  .........\.%.U!]     0x0020:  8018 2000 fe35 0000 0101 080a 0e2e 1b37  .....5.........7     0x0030:  0e2e 0b67 5553 4552 2064 6d74 7361 690d  ...gUSER.dmtsai.     0x0040:  0a                                       .      0x0000:  4510 004a d34f 4000 4006 694c 7f00 0001  E..J.O@.@.iL....     0x0010:  7f00 0001 80ab 0015 835c d832 8355 217f  .........\.2.U!.     0x0020:  8018 2000 fe3e 0000 0101 080a 0e2e 3227  .....>........2'     0x0030:  0e2e 1b38 5041 5353 206d 7970 6173 7377  ...8PASS.mypassw     0x0040:  6f72 6469 7379 6f75 0d0a                 ordisyou..

上面的输出结果已经被简化过了,你需要自行在你的输出结果中搜索相关的字符串才行。从上面输出结果的特殊字体中,我们可以发现该FTP软件使用的是 vsFTPd,并且用户输入dmtsai这个账号名称,且密码是mypasswordisyou。如果使用的是明文方式来传输你的网络数据呢?

另外你得了解,为了让网络接口可以让tcpdump监听,所以执行tcpdump时网络接口会启动在"混杂模式(promiscuous)",所以你会在 /var/log/messages里面看到很多的警告信息,通知你说你的网卡被设置成为混杂模式。别担心,那是正常的。至于更多的应用,请参考man tcpdump了。


例题:如何使用tcpdump监听来自eth0适配卡且通信协议为port 22,目标来源为192.168.1.100的数据包资料?

答:tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.100'。

##############例子2#######################################

 

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
# tcpdump
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43
0000 0000 0080 0000 1007 cf08 0900 0000
0e80 0000 902b 4695 0980 8701 0014 0002
000f 0000 902b 4695 0008 00
11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97
ffff 0060 0004 ffff ffff ffff ffff ffff
0452 ffff ffff 0000 e85b 6d85 4008 0002
0640 4d41 5354 4552 5f57 4542 0000 0000
0000 00
使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,
使用-c参数指定要监听的数据包数量,
使用-w参数指定将监听到的数据包写入文件中保存

A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1

B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1

E 对本机的udp 123 端口进行监视 123 为ntp的服务端口
# tcpdump udp port 123

F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:
#tcpdump -i eth0 src host hostname

G 下面的命令可以监视所有送到主机hostname的数据包:
#tcpdump -i eth0 dst host hostname

H 我们还可以监视通过指定网关的数据包:
#tcpdump -i eth0 gateway Gatewayname

I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:
#tcpdump -i eth0 host hostname and port 80

J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
:(在命令行中适用   括号时,一定要
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,
如果我们只需要列出送到80端口的数据包,用dst port;如果我们只希望看到返回80端口的数据包,用src port。
#tcpdump –i eth0 host hostname and dst port 80 目的端口是80
或者
#tcpdump –i eth0 host hostname and src port 80 源端口是80 一般是提供http的服务的主机
如果条件很多的话 要在条件之前加and 或 or 或 not
#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80

如果在ethernet 使用混杂模式 系统的日志将会记录

May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.
May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode
May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode

tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

除了过滤语句,还有一个很重要的参数,也就是说,如果这个参数不设置正确,会导致包数据的丢失!

它就是-s 参数,snaplen, 也就是数据包的截取长度,仔细看man就会明白的!默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失!

只要使用-s 0就可以按包长,截取数据!

Linux系统命令(备份压缩)

11:07:00 AM 0 Comments

 zipinfo
  功能说明:列出压缩文件信息。
  语  法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x ]
  补充说明:执行zipinfo指令可得知zip压缩文件的周详信息。
  参  数:
  -1 只列出文件名称。
  -2 此参数的效果和指定"-1"参数类似,但可搭配"-h","-t"和"-z"参数使用。
  -h 只列出压缩文件的文件名称。
  -l 此参数的效果和指定"-m"参数类似,但会列出原始文件的大小而非每个文件的压缩率。
  -m 此参数的效果和指定"-s"参数类似,但多会列出每个文件的压缩率。
  -M 若信息内容超过一个画面,则采用类似more指令的方式列出信息。
  -s 用类似执行"ls -l"指令的效果列出压缩文件内容。
  -t 只列出压缩文件内所包含的文件数目,压缩前后的文件大小及压缩率。
  -T 将压缩文件内每个文件的日期时间用年,月,日,时,分,秒的顺序列出。
  -v 周详显示压缩文件内每一个文件的信息。
  -x 不列出符合条件的文件的信息。
  -z 如果压缩文件内含有注释,就将注释显示出来。
  -------------------------------------------
  zip
  功能说明:压缩文件。
  语  法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b ][-ll][-n ][-t ][-][压缩文件][文件...][-i ][-x ]
  补充说明:zip是个使用广泛的压缩程式,文件经他压缩后会另外产生具有".zip"扩展名的压缩文件。
  参  数:
  -A 调整可执行的自动解压缩文件。
  -b 指定暂时存放文件的目录。
  -c 替每个被压缩的文件加上注释。
  -d 从压缩文件内删除指定的文件。
  -D 压缩文件内不建立目录名称。
  -f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
  -F 尝试修复已损坏的压缩文件。
  -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
  -h 在线帮助。
  -i 只压缩符合条件的文件。
  -j 只保存文件名称及其内容,而不存放所有目录名称。
  -J 删除压缩文件前面不必要的数据。
  -k 使用MS-DOS兼容格式的文件名称。
  -l 压缩文件时,把LF字符置换成LF+CR字符。
  -ll 压缩文件时,把LF+CR字符置换成LF字符。
  -L 显示版权信息。
  -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
  -n 不压缩具有特定字尾字符串的文件。
  -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
  -q 不显示指令执行过程。
  -r 递归处理,将指定目录下的所有文件和子目录一并处理。
  -S 包含系统和隐藏文件。
  -t 把压缩文件的日期设成指定的日期。
  -T 检查备份文件内的每个文件是否正确无误。
  -u 更换较新的文件到压缩文件内。
  -v 显示指令执行过程或显示版本信息。
  -V 保存VMS操作系统的文件属性。
  -w 在文件名称里如果版本编号,本参数仅在VMS操作系统下有效。
  -x 压缩时排除符合条件的文件。
  -X 不保存额外的文件属性。
  -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
  -z 替压缩文件加上注释。
  -$ 保存第一个被压缩文件所在磁盘的卷册名称。
  - 压缩效率是个介于1-9的数值。
  ----------------------------------------------
  unzip
  功能说明:解压缩zip文件
  语  法:unzip [-cflptuvz][-agCjLMnoqsVX][-P ][.zip文件][文件][-d ][-x ] 或 unzip [-Z]
  补充说明:unzip为.zip压缩文件的解压缩程式。
  参  数:
  -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
  -f 更新现有的文件。
  -l 显示压缩文件内所包含的文件。
  -p 和-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行所有的转换。
  -t 检查压缩文件是否正确。
  -u 和-f参数类似,不过除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
  -v 执行是时显示周详的信息。
  -z 仅显示压缩文件的备注文字。
  -a 对文本文件进行必要的字符转换。
  -b 不要对文本文件进行字符转换。
  -C 压缩文件中的文件名称区分大小写。
  -j 不处理压缩文件中原有的目录路径。
  -L 将压缩文件中的全部文件名改为小写。
  -M 将输出结果送到more程式处理。
  -n 解压缩时不要覆盖原有的文件。
  -o 不必先询问用户,unzip执行后覆盖原有文件。
  -P 使用zip的密码选项。
  -q 执行时不显示所有信息。
  -s 将文件名中的空白字符转换为底线字符。
  -V 保留VMS的文件版本信息。
  -X 解压缩时同时回存文件原来的UID/GID。
  [.zip文件] 指定.zip压缩文件。
  [文件] 指定要处理.zip压缩文件中的哪些文件。
  -d 指定文件解压缩后所要存储的目录。
  -x 指定不要处理.zip压缩文件中的哪些文件。
  -Z unzip -Z等于执行zipinfo指令。
  ---------------------------------------------------
  unarj
  功能说明:解压缩.arj文件。
  语  法:unarj [eltx][.arj压缩文件]
  补充说明:unarj为.arj压缩文件的压缩程式。
  参  数:
  e 解压缩.arj文件。
  l 显示压缩文件内所包含的文件。
  t 检查压缩文件是否正确。
  x 解压缩时保留原有的路径。
  ------------------------------------------------
  tar(tape archive)
  功能说明:备份文件。
  语  法:tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b ][-C ][-f ][-F ][-K ][-L ][-N ][-T ][-V ][-X ][-][--after-date=][--atime-preserve][--backuup=][--checkpoint][--concatenate][--confirmation][--delete][--exclude=][--force-local][--group=][--help][--ignore-failed-read][--new-volume-script=][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=][--recursive-unlink][--remove-files][--rsh-command=][--same-owner][--suffix=][--totals][--use-compress-program=][--version][--volno-file=][文件或目录...]
  补充说明:tar是用来建立,还原备份文件的工具程式,他能加入,解开备份文件内的文件。
  参  数:
  -A或--catenate 新增温暖件到已存在的备份文件。
  -b或--blocking-factor= 设置每笔记录的区块数目,每个区块大小为12Bytes。
  -B或--read-full-records 读取数据时重设区块大小。
  -c或--create 建立新的备份文件。
  -C或--directory= 转换到指定的目录。
  -d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
  -f或--file= 指定备份文件。
  -F或--info-script= 每次更换磁带时,就执行指定的Script文件。
  -g或--listed-incremental 处理GNU格式的大量备份。
  -G或--incremental 处理旧的GNU格式的大量备份。
  -h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
  -i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
  -k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
  -K或--starting-file= 从指定的文件开始还原。
  -l或--one-file-system 复制的文件或目录存放的文件系统,必须和tar指令执行时所处的文件系统相同,否则不予复制。
  -L或-tape-length= 设置存放每体的容量,单位以1024 Bytes计算。
  -m或--modification-time 还原文件时,不变更文件的更改时间。
  -M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
  -N或--newer= 只将较指定日期更新的文件保存到备份文件里。
  -o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
  -O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
  -p或--same-permissions 用原来的文件权限还原文件。
  -P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
  -r或--append 新增文件到已存在的备份文件的结尾部分。
  -R或--block-number 列出每个信息在备份文件中的区块编号。
  -s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
  -S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
  -t或--list 列出备份文件的内容。
  -T或--files-from= 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
  -u或--update 仅置换较备份文件内的文件更新的文件。
  -U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
  -v或--verbose 显示指令执行过程。
  -V或--label= 建立使用指定的卷册名称的备份文件。
  -w或--interactive 遭遇问题时先询问用户。
  -W或--verify 写入备份文件后,确认文件正确无误。
  -x或--extract或--get 从备份文件中还原文件。
  -X或--exclude-from= 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
  -z或--gzip或--ungzip 通过gzip指令处理备份文件。
  -Z或--compress或--uncompress 通过compress指令处理备份文件。
  - 设置备份用的外围设备编号及存放数据的密度。
  --after-date= 此参数的效果和指定"-N"参数相同。
  --atime-preserve 不变更文件的存取时间。
  --backup=或--backup 移除文件前先进行备份。
  --checkpoint 读取备份文件时列出目录名称。
  --concatenate 此参数的效果和指定"-A"参数相同。
  --confirmation 此参数的效果和指定"-w"参数相同。
  --delete 从备份文件中删除指定的文件。
  --exclude= 排除符合范本样式的问家。
  --group= 把加入设备文件中的文件的所属群组设成指定的群组。
  --help 在线帮助。
  --ignore-failed-read 忽略数据读取错误,不中断程式的执行。
  --new-volume-script= 此参数的效果和指定"-F"参数相同。
  --newer-mtime 只保存更改过的文件。
  --no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
  --null 从null设备读取文件名称。
  --numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
  --owner= 把加入备份文件中的文件的拥有者设成指定的用户。
  --posix 将数据写入备份文件时使用POSIX格式。
  --preserve 此参数的效果和指定"-ps"参数相同。
  --preserve-order 此参数的效果和指定"-A"参数相同。
  --preserve-permissions 此参数的效果和指定"-p"参数相同。
  --record-size= 此参数的效果和指定"-b"参数相同。
  --recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
  --remove-files 文件加入备份文件后,就将其删除。
  --rsh-command= 设置要在远端主机上执行的指令,以取代rsh指令。
  --same-owner 尝试以相同的文件拥有者还原问家你。
  --suffix= 移除文件前先行备份。
  --totals 备份文件建立后,列出文件大小。
  --use-compress-program= 通过指定的指令处理备份文件。
  --version 显示版本信息。
  --volno-file= 使用指定文件内的编号取代预设的卷册编号。
  -----------------------------------------
  restore
  功能说明:还原(Restore)由倾倒(Dump)操作所备份下来的文件或整个文件系统(一个分区)。
  语  法:restore [-cCvy][-b ][-D ][-f ][-s ] 或 restore [-chimvy][-b ][-f ][-s ] 或 restore [-crvy][-b ][-f ][-s ] 或 restore [-cRvy][-b ][-D ][-f ][-s ] 或 restore [chtvy][-b ][-D ][-f ][-s ][文件...] 或 restore [-chmvxy][-b ][-D ][-f ][-s ][文件...]
  补充说明:restore 指令所进行的操作和dump指令相反,倾倒操作可用来备份文件,而还原操作则是写回这些已备份的文件。
  参  数:
  -b 设置区块大小,单位是Byte。
  -c 不检查倾倒操作的备份格式,仅准许读取使用旧格式的备份文件。
  -C 使用对比模式,将备份的文件和现行的文件相互对比。
  -D 允许用户指定文件系统的名称。
  -f 从指定的文件中读取备份数据,进行还原操作。
  -h 仅解出目录而不包括和该目录相关的所有文件。
  -i 使用互动模式,在进行还原操作时,restore指令将依序询问用户。
  -m 解开符合指定的inode编号的文件或目录而非采用文件名称指定。
  -r 进行还原操作。
  -R 全方面还原文件系统时,检查应从何处开始进行。
  -s 当备份数据超过一卷磁带时,你能指定备份文件的编号。
  -t 指定文件名称,若该文件已存在备份文件中,则列出他们的名称。
  -v 显示指令执行过程。
  -x 设置文件名称,且从指定的存储媒体里读入他们,若该文件已存在在备份文件中,则将其还原到文件系统内。
  -y 不询问所有问题,一律以同意回答并继续执行指令。
  -----------------------------------------
  lha
  功能说明:压缩或解压缩文件。
  语  法:lha [-acdfglmnpqtuvx][-a /u][-d][-i][-o][-w=][-z][压缩文件][文件...] 或 lha [-acdfglmnpqtuvx][-a /u][-d][-i][-o][-w=][-z][压缩文件][目录...]
  补充说明:lha是从lharc演变而来的压缩程式,文件经他压缩后,会另外产生具有".lzh"扩展名的压缩文件。
  参  数:
  -a或a 压缩文件,并加入到压缩文件内。
  -a/u 压缩文件时,采用不同的文件头。
  -c或c 压缩文件,重新建构新的压缩文件后,再将其加入。
  -d或d 从压缩文件内删除指定的文件。
  -d或d 压缩文件,然后将其加入,重新建构,更新压缩文件或,删除原始文件,也就是把文件移到压缩文件中。
  -e或e 解开压缩文件。
  -f或f 强制执行lha命令,在解压时会直接覆盖已有的文件而不加以询问。
  -g或g 使用通用的压缩格式,便于解决兼容性的问题。
  -i或i 解开压缩文件时,忽略保存在压缩文件内的文件路径,直接将其解压后存放在现行目录下或是指定的目录中。
  -l或l 列出压缩文件的相关信息。
  -m或m 此参数的效果和同时指定"-ad"参数相同。
  -n或n 不执行指令,仅列出实际执行会进行的动作。
  -o或o 采用lharc兼容格式,将压缩后的文件加入,更新压缩文件。
  -p或p 从压缩文件内输出到标准输出设备。
  -q或q 不显示指令执行过程。
  -t或t 检查备份文件内的每个文件是否正确无误。
  -u或u 更换较新的文件到压缩文件内。
  -u或u 在文件压缩时采用不同的文件头,然后更新到压缩文件内。
  -v或v 周详列出压缩文件的相关信息。
  -w=或w= 指定解压缩的目录。
  -x或x 解开压缩文件。
  -z或z 不压缩文件,直接把他加入,更新压缩文件。
  -------------------------------------------
  gzip(gnu zip)
  功能说明:压缩文件。
  语  法:gzip [-acdfhlLnNqrtvV][-S ][-][--best/fast][文件...] 或 gzip [-acdfhlLnNqrtvV][-S ][-][--best/fast][目录]
  补充说明:gzip是个使用广泛的压缩程式,文件经他压缩过后,其名称后面会多出".gz"的扩展名。
  参  数:
  -a或--ascii  使用ASCII文字模式。
  -c或--stdout或--to-stdout  把压缩后的文件输出到标准输出设备,不去更动原始文件。
  -d或--decompress或----uncompress  解开压缩文件。
  -f或--force  强行压缩文件。不理会文件名称或硬连接是否存在及该文件是否为符号连接。
  -h或--help  在线帮助。
  -l或--list  列出压缩文件的相关信息。
  -L或--license  显示版本和版权信息。
  -n或--no-name  压缩文件时,不保存原来的文件名称及时间戳记。
  -N或--name  压缩文件时,保存原来的文件名称及时间戳记。
  -q或--quiet  不显示警告信息。
  -r或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
  -S或----suffix  更改压缩字尾字符串。
  -t或--test  测试压缩文件是否正确无误。
  -v或--verbose  显示指令执行过程。
  -V或--version  显示版本信息。
  -  压缩效率是个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
  --best  此参数的效果和指定"-9"参数相同。
  --fast  此参数的效果和指定"-1"参数相同。
  --------------------------------------------
  gzexe(gzip executable)
  功能说明:压缩执行文件。
  语  法:gzexe [-d][执行文件...]
  补充说明:gzexe是用来压缩执行文件的程式。当你去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同。
  参  数:
  -d  解开压缩文件。
  --------------------------------------
  gunzip(gnu unzip)
  功能说明:解压文件。
  语  法:gunzip [-acfhlLnNqrtvV][-s ][文件...] 或 gunzip [-acfhlLnNqrtvV][-s ][目录]
  补充说明:gunzip是个使用广泛的解压缩程式,他用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为".gz"。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令独立完成。
  参  数:
  -a或--ascii  使用ASCII文字模式。
  -c或--stdout或--to-stdout  把解压后的文件输出到标准输出设备。
  -f或-force  强行解开压缩文件,不理会文件名称或硬连接是否存在及该文件是否为符号连接。
  -h或--help  在线帮助。
  -l或--list  列出压缩文件的相关信息。
  -L或--license  显示版本和版权信息。
  -n或--no-name  解压缩时,若压缩文件内含有远来的文件名称及时间戳记,则将其忽略不予处理。
  -N或--name  解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。
  -q或--quiet  不显示警告信息。
  -r或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
  -S或--suffix  更改压缩字尾字符串。
  -t或--test  测试压缩文件是否正确无误。
  -v或--verbose  显示指令执行过程。
  -V或--version 显示版本信息。
  --------------------------------------------
  dump
  功能说明:备份文件系统。
  语  法:dump [-cnu][-0123456789][-b ][-B ][-d ][-f ][-h ][-s ][-T ][目录或文件系统] 或 dump [-wW]
  补充说明:dump为备份工具程式,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
  参  数:
  -0123456789  备份的层级。
  -b  指定区块的大小,单位为KB。
  -B  指定备份卷册的区块数目。
  -c  修改备份磁带预设的密度和容量。
  -d  设置磁带的密度。单位为BPI。
  -f  指定备份设备。
  -h  当备份层级等于或大雨指定的层级时,将不备份用户标示为"nodump"的文件。
  -n  当备份工作需要管理员介入时,向所有"operator"群组中的使用者发出通知。
  -s  备份磁带的长度,单位为英尺。
  -T  指定开始备份的时间和日期。
  -u  备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期和时间等。
  -w  和-W类似,但仅显示需要备份的文件。
  -W  显示需要备份的文件及其最后一次备份的层级,时间和日期。
  ----------------------------------------------
  cpio(copy in/out)
  功能说明:备份文件。
  语  法:cpio [-0aABckLovV][-C ][-F ][-H ][-O ][--block-size=][--force-local][--help][--quiet][--version] 或 cpio [-bBcdfikmnrsStuvV][-C ][-E ][-F ][-H ][-I ][-M ][-R ][--block-size=][--force-local][--help][--no-absolute-filenames][--no-preserve-owner][--only-verify-crc][--quiet][--sparse][--version][范本样式...] 或 cpio [-0adkiLmpuvV][-R ][--help][--no-preserve-owner][--quiet][--sparse][--version][目的目]
  补充说明:cpio是用来建立,还原备份档的工具程式,他能加入,解开cpio或tra备份档内的文件。
  参  数:
  -0或--null  接受新增列控制字符,通常配合find指令的"-print0"参数使用。
  -a或--reset-access-time  重新设置文件的存取时间。
  -A或--append  附加到已存在的备份档中,且这个备份档必须存放在磁盘上,而不能放置于磁带机里。
  -b或--swap  此参数的效果和同时指定"-sS"参数相同。
  -B  将输入/输出的区块大小改成5210 Bytes。
  -c  使用旧ASCII备份格式。
  -C或--io-size=  设置输入/输出的区块大小,单位是Byte。
  -d或--make-directories  如有需要cpio会自行建立目录。
  -E或--pattern-file=  指定范本文件,其内含有一个或多个范本样式,让cpio解开符合范本条件的文件,格式为每列一个范本样式。
  -f或--nonmatching  让cpio解开所有不符合范本条件的文件。
  -F或--file=  指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档。
  -H  指定备份时欲使用的文件格式。
  -i或--extract  执行copy-in模式,还原备份档。
  -l  指定备份档的名称,用来取代标准输入,也能借此通过网络使用另一台主机的保存设备读取备份档。
  -k  此参数将忽略不予处理,仅负责解决cpio不同版本间的兼容性问题。
  -l或--link  以硬连接的方式取代复制文件,可在copy-pass模式下运用。
  -L或--dereference  不建立符号连接,直接复制该连接所指向的原始文件。
  -m或preserve-modification-time  不去更换文件的更改时间。
  -M或--message=  设置更换保存媒体的信息。
  -n或--numeric-uid-gid  使用"-tv"参数列出备份档的内容时,若再加上参数"-n",则会以用户识别码和群组识别码替代拥有者和群组名称列出文件清单。
  -o或--create  执行copy-out模式,建立备份档。
  -O  指定备份档的名称,用来取代标准输出,也能借此通过网络 使用另一台主机的保存设备存放备份档。
  -p或--pass-through  执行copy-pass模式,略过备份步骤,直接将文件复制到目的目录。
  -r或--rename  当有文件名称需要更动时,采用互动模式。
  -R或
  ----owner  在copy-in模式还原备份档,或copy-pass模式复制文件时,可指定这些备份,复制的文件的拥有者和所属群组。
  -s或--swap-bytes  交换每对字节的内容。
  -S或--swap-halfwords  交换每半个字节的内容。
  -t或--list  将输入的内容呈现出来。
  -u或--unconditional  置换所有文件,不论日期时间的新旧和否,皆不予询问而直接覆盖。
  -v或--verbose  周详显示指令的执行过程。
  -V或--dot  执行指令时,在每个文件的执行程式前面加上"."号
  --block-size=  设置输入/输出的区块大小,如果设置数值为5,则区块大小为2500,若设置成10,则区块大小为5120,依次类推。
  --force-local  强制将备份档存放在本地主机。
  --help  在线帮助。
  --no-absolute-filenames  使用相对路径建立文件名称。
  --no-preserve-owner  不保留文件的拥有者,谁解开了备份档,那些文件就归谁所有。
  -only-verify-crc  当备份档采用CRC备份格式时,可使用这项参数检查备份档内的每个文件是否正确无误。
  --quiet  不显示复制了多少区块。
  --sparse  倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
  --version  显示版本信息。
  ---------------------------------------------
  compress
  功能说明:压缩或解压文件。
  语  法:compress [-cdfrvV][-b ][文件或目录...]
  补充说明:compress是个历史悠久的压缩程式,文件经他压缩后,其名称后面会多出".Z"的扩展名。当要解压缩时,可执行uncompress指令。事实上uncompress是指向compress的符号连接,因此不论是压缩或解压缩,都可通过compress指令独立完成。
  参  数:
  -b  压缩效率是个介于9-16的数值,预设值为"16",指定愈大的数值,压缩效率就愈高。
  -c  把压缩后的文件输出到标准输出设备,不去更动原始文件。
  -d  对文件进行解压缩而非压缩。
  -f  强制保存压缩文件,不理会文件名称或硬连接是否存在,该文件是否为符号连接及压缩效率高低的问题。
  -r  递归处理,将指定目录下的所有文件及子目录一并处理。
  -v  显示指令执行过程。
  -V  显示指令版本及程式预设值。
  -----------------------------------------
  bzip2recover
  功能说明:用来修复损坏的.bz2文件。
  语  法:bzip2recover [.bz2 压缩文件]
  补充说明:bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用bzip2recover,试着将文件中的区块隔开来,以便解压缩正常的区块。通常只适用在压缩文件非常大的情况。
  ----------------------------------------
  bzip2
  功能说明:.bz2文件的压缩程式。
  语  法:bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件]
  补充说明:bzip2采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上所有参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
  参  数:
  -c或--stdout  将压缩和解压缩的结果送到标准输出。
  -d或--decompress  执行解压缩。
  -f或--force  bzip2在压缩或解压缩时,若输出文件和现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数。
  -h或--help  显示帮助。
  -k或--keep  bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
  -s或--small  降低程式执行时内存的使用量。
  -t或--test  测试.bz2压缩文件的完整性。
  -v或--verbose  压缩或解压缩文件时,显示周详的信息。
  -z或--compress  强制执行压缩。
  -L,--license,
  -V或--version  显示版本信息。
  --repetitive-best  若文件中有重复出现的资料时,可利用此参数提高压缩效果。
  --repetitive-fast  若文件中有重复出现的资料时,可利用此参数加快执行速度。
  -压缩等级  压缩时的区块大小。
  ------------------------------------------
  bunzip2
  功能说明:.bz2文件的解压缩程式。
  语  法:bunzip2 [-fkLsvV][.bz2压缩文件]
  补充说明:bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号连接,执行bunzip2和bzip2 -d的效果相同。
  参  数:
  -f或--force  解压缩时,若输出的文件和现有文件同名时,预设不会覆盖现有的文件。若要覆盖,请使用此参数。
  -k或--keep  在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数。
  -s或--small  降低程式执行时,内存的使用量。
  -v或--verbose  解压缩文件时,显示周详的信息。
  -l,--license,-V或--version  显示版本信息。
  -------------------------------------------------
  ar
  功能说明:建立或修改备存文件,或是从备存文件中抽取文件。
  语  法:ar[-dmpqrtx][cfosSuvV][a][备存文件][成员文件]
  补充说明:ar可让你集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性和权限。
  参  数:
  指令参数
  -d  删除备存文件中的成员文件。
  -m  变更成员文件在备存文件中的次序。
  -p  显示备存文件中的成员文件内容。
  -q  将问家附加在备存文件末端。
  -r  将文件插入备存文件中。
  -t  显示备存文件中所包含的文件。
  -x  自备存文件中取出成员文件。
  选项参数
  a  将文件插入备存文件中指定的成员文件之后。
  b  将文件插入备存文件中指定的成员文件之前。
  c  建立备存文件。
  f  为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。
  i  将问家插入备存文件中指定的成员文件之前。
  o  保留备存文件中文件的日期。
  s  若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。
  S  不产生符号表。
  u  只将日期较新文件插入备存文件中。
  v  程式执行时显示周详的信息。
  V  显示版本信息。 

如何在Python中调用父类的同名方法

2:29:00 PM 0 Comments

Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递。

举一个很常见的例子:

>>> class Foo:
    def bar(self, message):
        print(message)

>>> Foo().bar("Hello, World.")
Hello, World.


当存在继承关系的时候,有时候需要在子类中调用父类的方法,此时最简单的方法是把对象调用转换成类调用,需要注意的是这时self参数需要显式传递,例如:

>>> class FooParent:
    
    def bar(self, message):
        
    print(message)

>>> class FooChild(FooParent):
        def bar(self, message):
    
        FooParent.bar(self, message)

>>> FooChild().bar("Hello, World.")
Hello, World.


这样做有一些缺点,比如说如果修改了父类名称,那么在子类中会涉及多处修改,另外,Python是允许多继承的语言,如上所示的方法在多继承时就需要重复写多次,显得累赘。为了解决这些问题,Python引入了super()机制,例子代码如下:

>>> class FooParent:
        def bar(self, message):
        
    print(message)

        
>>> class FooChild(FooParent):
    
    def bar(self, message):
        
    super(FooChild, self).bar(message)

        
>>> FooChild().bar("Hello, World.")
Hello, World.


表面上看 super(FooChild, self).bar(message)方法和FooParent.bar(self, message)方法的结果是一致的,实际上这两种方法的内部处理机制大大不同,当涉及多继承情况时,就会表现出明显的差异来,直接给例子:

代码一:

class A:
    def __init__(self):
        print("Enter A")
        print("Leave A")

class B(A):
    def __init__(self):
        print("Enter B")
        A.__init__(self)
        print("Leave B")

class C(A):
    def __init__(self):
        print("Enter C")
        A.__init__(self)
        print("Leave C")

class D(A):
    def __init__(self):
        print("Enter D")
        A.__init__(self)
        print("Leave D")

class E(B, C, D):
    def __init__(self):
        print("Enter E")
        B.__init__(self)
        C.__init__(self)
        D.__init__(self)
        print("Leave E")

E()


结果:

Enter E
Enter B
Enter A
Leave A
Leave B
Enter C
Enter A
Leave A
Leave C
Enter D
Enter A
Leave A
Leave D
Leave E


执行顺序很好理解,唯一需要注意的是公共父类A被执行了多次。

代码二:

class A:
    def __init__(self):
        print("Enter A")
        print("Leave A")

class B(A):
    def __init__(self):
        print("Enter B")
        super(B, self).__init__()
        print("Leave B")

class C(A):
    def __init__(self):
        print("Enter C")
        super(C, self).__init__()
        print("Leave C")

class D(A):
    def __init__(self):
        print("Enter D")
        super(D, self).__init__()
        print("Leave D")

class E(B, C, D):
    def __init__(self):
        print("Enter E")
        super(E, self).__init__()
        print("Leave E")

E()


结果:

Enter E
Enter B
Enter C
Enter D
Enter A
Leave A
Leave D
Leave C
Leave B
Leave E


在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照mro进行的(E.__mro__)。

归档文件(archive file)和压缩文件(compressed file)

12:39:00 PM 0 Comments

理解归档文件(archive file)压缩文件(compressed file)间的区别对用户来说十分重要。归档文件是一个文件和目录的集合,而这个集合被贮存在一个文件中。归档文件没有经过压缩 — 它所使用的磁盘空间是其中所有文件和目录的总和。压缩文件也是一个文件和目录的集合,且这个集合也被贮存在一个文件中,但是,它的贮存方式使其所占用的磁盘空间比其中所有文件和目录的总和要少。如果你在计算机上的磁盘空间不足,你可以压缩不常使用的、或不再使用但想保留的文件。你甚至可以创建归档文件,然后再将其压缩来节省磁盘空间。

注记

归档文件不是压缩文件,但是压缩文件可以是归档文件。

使用文件打包器

Red Hat Linux 包括了一个图形化的压缩工具"文件打包器"。它可以压缩、解压、并归档文件和目录。文件打包器支持通用的 UNIX 和 Linux 文件压缩和归档格式,而且它的界面简单,文档丰富。它还被集成到桌面环境和图形化文件管理器中,使处理归档文件的工作更加简便易行。

要启动 文件打包器,点击「主菜单」 => 「附件」 => 「文件打包器」。你还可以从 shell 提示下键入 file-roller 来启动文件打包器。图 14-1显示了运行中的文件打包器。

窍门

如果你使用的是文件管理器(如 Nautilus),你可以双击你想解除归档或解压的文件来启动文件打包器。文件打包器的浏览窗口就会出现,其中的文件夹里显示了你要解压或解除归档的文件,以便你来抽取或浏览。

图 14-1. 运行中的文件打包器

使用文件打包器来解压或解除归档

要取消归档或者(并且)解压文件,点击工具栏上的「打开」按钮。一个文件菜单就会弹出,允许你选择你要操作的归档。譬如,如果你的主目录中有一个 foo.tar.gz 文件,突出显示该文件,然后点击「确定」。该文件就会作为文件夹出现在文件打包器的主浏览窗口中,你可以双击该文件夹图标来翻阅其中的内容。文件打包器保 留所有原有的目录和子目录结构,这便于你在归档中查找某一特定文件。你可以点击「抽取」按钮,选择你要保存这些解除归档后的文件的目录,然后点击「确定」 按钮来抽取其中的某个文件或整个归档。

使用文件打包器来创建归档文件

如果你需要腾出一些硬盘空间,或者把多个文件或某一目录下的所有文件发送给另一名用户,文件打包器允许你创建文件和目录的归档。要创建新归档,点击 工具栏上的「新建」按钮。一个文件浏览器会弹出,允许你指定归档名称和压缩技术。譬如,你可以从拉下菜单中选择「用 gzip 压缩的 Tar (tar.gz) 格式,然后键入你想创建的归档文件的名称。点击「确定」,你就可以在新归档中添加文件和目录了。要在你的新归档中添加文件,点击「添加」,这会弹出一个浏 览窗口(图 14-2),你可以从中查找要放入归档中的文件或目录。结束后点击「确定」和「关闭」按钮来关闭归档。

图 14-2. 使用文件打包器来创建归档

窍门

文件打包器能够执行的任务不止这里提到的这些。请阅读文件打包器 的说明书(点击「帮助」 => 「说明书」)来获取详细信息。

在 shell 提示下压缩文件

压缩文件使用较少磁盘空间,并且比未压缩的大文件下载速度要快。在 Red Hat Linux 中,你可以使用的文件压缩工具有:gzipbzip2、和 zip

推荐你使用 bzip2 压缩工具,因为它提供了最大限度的压缩,并且可在多数类似 UNIX 的操作系统上找到。gzip 压缩工具也可以在类似 UNIX 的操作系统上找到。如果你需要在 Linux 和其它操作系统如 MS Windows 间传输文件,你应该使用 zip,因为该命令与 Windows 上的压缩工具最兼容。

压缩工具文件扩展名解压工具
gzip .gzgunzip
bzip2.bz2bunzip2
zip.zip unzip

表 14-1. 压缩工具

按照约定俗成,用 gzip 来压缩的文件的扩展名是 .gz;用 bzip2 来压缩的文件的扩展名是 .bz2;用 zip 压缩的文件的扩展名是 .zip

用 gzip 压缩的文件可以使用 gunzip 来解压;用 bzip2 压缩的文件可以使用 bunzip2 来解压;用 zip 压缩的文件可以使用 unzip 来解压。

bzip2 和 bunzip2

要使用 bzip2 来压缩文件,在 shell 提示下键入以下命令:

bzip2 filename

文件即会被压缩并被保存为 filename.bz2

要扩展压缩的文件,键入以下命令:

bunzip2 filename.bz2

filename.bz2 文件会被删除,而继之以 filename

你可以使用 bzip2 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

bzip2 filename.bz2 file1 file2 file3 /usr/work/school 

上面的命令把 file1file2 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.bz2 文件中。

窍门

要获得有关这两个命令的详细信息,在 shell 提示下键入 man bzip2 和 man bunzip2 来阅读 bzip2 和 bunzip2 命令的说明书页。

gzip 和 gunzip

要使用 gzip 来压缩文件,在 shell 提示下键入以下命令:

gzip filename

文件即会被压缩,并被保存为 filename.gz

要扩展压缩的文件,键入以下命令:

gunzip filename.gz

filename.gz 会被删除,而继之以 filename

你可以使用 gzip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

gzip -r filename.gz file1 file2 file3 /usr/work/school 

上面的命令把 file1file2 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.gz 文件中。

窍门

要获得有关这两个命令的详细信息,在 shell 提示下键入 man gzip 和 man gunzip 来阅读 gzip 和 gunzip 命令的说明书页。

zip 和 unzip

要使用 zip 来压缩文件,在 shell 提示下键入下面的命令:

zip -r filename.zip filesdir

在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。

要抽取 zip 文件的内容,键入以下命令:

unzip filename.zip

你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

zip -r filename.zip file1 file2 file3 /usr/work/school 

上面的命令把 file1file2 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中。

窍门

要获得有关这两个命令的详细信息,在 shell 提示下键入 man zip 和 man unzip 来阅读 zip 和 unzip 命令的说明书页。

在 shell 提示下给文件归档

tar 文件是几个文件和(或)目录在一个文件中的集合。这是创建备份和归档的佳径。

tar 使用的选项有:

  • -c — 创建一个新归档。

  • -f — 当与 -c 选项一起使用时,创建的 tar 文件使用该选项指定的文件名;当与 -x 选项一起使用时,则解除该选项指定的归档。

  • -t — 显示包括在 tar 文件中的文件列表。

  • -v — 显示文件的归档进度。

  • -x — 从归档中抽取文件。

  • -z — 使用 gzip 来压缩 tar 文件。

  • -j — 使用 bzip2 来压缩 tar 文件。

要创建一个 tar 文件,键入:

tar -cvf filename.tar directory/file

在以上的例子中,filename.tar 代表你创建的文件,directory/file 代表你想放入归档文件内的文件和目录。

你可以使用 tar 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

tar -cvf filename.tar /home/mine/work /home/mine/school

上面的命令把 /home/mine 目录下的 work 和 school 子目录内的所有文件都放入当前目录中一个叫做 filename.tar 的新文件里。

要列出 tar 文件的内容,键入:

tar -tvf filename.tar

要抽取 tar 文件的内容,键入:

tar -xvf filename.tar

这个命令不会删除 tar 文件,但是它会把被解除归档的内容复制到当前的工作目录下,并保留归档文件所使用的任何目录结构。譬如,如果这个 tar 文件中包含一个叫做bar.txt 的文件,而这个文件包含在 foo/ 目录中,那么,抽取归档文件将会导致在你当前的工作目录中创建 foo/ 目录,该目录中包含 bar.txt 文件。

请记住,tar 默认不压缩文件。要创建一个使用 tar 和 bzip 来归档压缩的文件,使用 -j 选项:

tar -cjvf filename.tbz file

按照约定俗成,用 bzip2 压缩的 tar 文件具有 .tbz 扩展名。不过,有时用户使用 tar.bz2 扩展名来归档他们的文件。

以上命令创建了一个归档文件,然后将其压缩为 filename.tbz 文件。如果你使用 bunzip2 命令为 filename.tbz 文件解压,filename.tbz 文件会被删除,继之以 filename.tar 文件。

你还可以用一个命令来扩展并解除归档 bzip tar 文件:

tar -xjvf filename.tbz

要创建一个用 tar 和 gzip 归档并压缩的文件,使用 -z 选项:

tar -czvf filename.tgz file

按照约定俗成,使用 gzip 来压缩的 tar 文件具有 .tgz 扩展名。

这个命令创建归档文件 filename.tar,然后把它压缩为 filename.tgz 文件(文件 filename.tar 不被保留)。如果你使用 gunzip 命令来给 filename.tgz 文件解压,filename.tgz 文件会被删除,并被替换为 filename.tar

你可以用单个命令来扩展 gzip tar 文件:

tar -xzvf filename.tgz