一 剪 梅
客中感雨
夜雨淅淅上心头 ,
道是浇愁,
不意添愁。
雨打帘窗风过楼,
三更时候,
五更时候。
少年不曾足风流,
霜鬓染首,
夙念已休。
满地落叶做成秋,
人也难留,
梦也难留。
DevOps
一 剪 梅
客中感雨
夜雨淅淅上心头 ,
道是浇愁,
不意添愁。
雨打帘窗风过楼,
三更时候,
五更时候。
少年不曾足风流,
霜鬓染首,
夙念已休。
满地落叶做成秋,
人也难留,
梦也难留。
Linux文件系统的反删除方法
作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在档节点中作删除标记,并不真正清除文件内容,但是其它用户和一些有写盘动作的进程会很快覆盖这些资料。不过,对于家庭单机使用的Linux,或者误删档后及时补救,还是可以恢复的。
1.Ext2文件系统结构的简单介绍
在Linux所用的Ext2文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分。每个档还有一个节点,节点中包含有档所有者,读写权限,文件类型等信息。对于一个小于12个块的档,在节点中直接存储档数据块的块号。如果档大于12个块,那么节点在12个块号之后存储一个间接块的块号,在这个间接块号所对应的块中,存储有256个档数据块的块号(Ext2fs中每个块号占用4字节,这样一个块中所能存储的块号就是1024/4=256)。如果有更大的档,那么还会在节点中出现二级间接块和三级间接块。
2。恢复被误删档的方法
大多数Linux发行版都提供一个debugfs工具,可以用来对Ext2文件系统进行编辑操作。不过在使用这个工具之前,还有一些工作要做。
首先以只读方式重新挂载被误删的档所在分区。使用如下命令:(假设文件在/usr分区)
mount –r –n –o remount /usr
-r表示只读方式挂载;-n表示不写入/etc/mtab,如果是恢复/etc上的档,就加上这个参数。如果系统说xxx partion busy,可以用fuser命令查看一下是哪些进程使用这个分区上的檔:
fuser –v –m /usr
如果没有什么重要的进程,用以下命令停掉它们:
fuser -k –v –m /usr
然后就可以重新挂载这些文件系统了。
如果是把所有的档统一安装在一个大的/分区当中,可以在boot提示符下用linux single进入单用户模式,尽量减少系统进程向硬盘写入资料的机会,要不干脆把硬盘挂在别的机器上。另外,恢复出来的资料不要写到/上面,避免破坏那些有用的资料。如果机器上有dos/windows,可以写到这些分区上面:
mount –r –n /dev/hda1 /mnt/had
然后就可以执行debugfs:(假设Linux在 /dev/hda5)
#debugfs /dev/hda5
就会出现debugfs提示符debugfs:
使用lsdel命令可以列出很多被删除的文件的信息:
debugfs:lsdel
debugfs: 2692 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
164821 0 100600 8192 1/ 1 Sun May 13 19:22:46 2001
…………………………………………………………………………………
36137 0 100644 4 1/ 1 Tue Apr 24 10:11:15 2001
196829 0 100644 149500 38/ 38 Mon May 27 13:52:04 2001
debugfs:
列出的档有很多(这里找到2692个),第一字段是档节点号,第二字段是档所有者,第三字段是读写权限,接下来是档大小,占用块数,删除时间。然后就可以根据档大小和删除日期判断那些是我们需要的。比如我们要恢复节点是
196829的文件:
可以先看看文件资料状态:
debugfs:stat <196829>
Inode: 196829 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 0 Group: 0 Size: 149500
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 38
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 — Mon May 27 13:52:04 2001
atime: 0x31a21dd1 — Tue May 21 20:47:29 2001
mtime: 0x313bf4d7 — Tue Mar 5 08:01:27 2001
dtime: 0x31a9a574 — Mon May 27 13:52:04 2001
BLOCKS:
594810 594811 594814 594815 594816 594817
………………………………….
TOTAL: 38
然后就可以用dump指令恢复文件:
debugfs:dump <196829> /mnt/hda/01.sav
这样就把档恢复出来了。退出debugfs:
debugfs:quit
另一种方法是手工编辑inode:
debugfs:mi <196829>
Mode [0100644]
User ID [0]
Group ID [0]
Size [149500]
Creation time [0x31a9a574]
Modification time [0x31a9a574]
Access time [0x31a21dd1]
Deletion time [0x31a9a574] 0
Link count [0] 1
Block count [38]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [594810]
…………………………….
Triple Indirect Block [0]
使用mi指令后每次显示一行信息以供编辑,其它行可以直接按回车表示确认,把deletion time改成0(未删除),Link count改成1。改好后退出debugfs:
debugfs:quit
然后用fsck检查/dev/hda5
fsck /dev/hda5
程序会说找到丢失的数据块,放在lost+found里面。这个目录里的文件就是我们要的东东。
1. 准确的说是ext3文件格式才有的。
2.
RAID分硬件RAID和软件RAID, 硬件RAID没甚么说的,用个RAID卡就OK.软件RAID稍微复杂一点。不过有了mdadm命令以后就简单多了。这里我做一个raid0。
有两种:raidtools, mdadm. raidtools命令比较复杂,而且还要自己下载,确定很麻烦。而mdadm一般的Linux都预带了。所以推荐用这个工具。
了解RAID
RAID 有五个级别,不过现在的Linux中,软件RAID也不过只有raid0, raid1,raid5.可以自己查相关的资料。
准备硬盘(分区)
用fdisk 命令给硬盘分好区。假如有/dev/sda1,/dev/sdb1, /dev/sdc1可用。
创建RAID
很简单,就一条命令
说明:
-l 就是–level
-n 就是 –raid-devices
格式化RAID设备
设置开机自动启动RAID设备
生成/etc/mdadm.conf
然后改成如下格式
一切OK,reboot,看看效果如何。
在计算机发展的初期,“大容量”硬盘的价格还相当高,解决数据存储安全性问题的主要方法是使用磁带机等设备进行备份,这种方法虽然可以保证数据的安全,但查阅和备份工作都相当繁琐。
1987年, Patterson、Gibson和Katz这三位工程师在加州大学伯克利分校发表了题为《A Case of Redundant Array of Inexpensive Disks(廉价磁盘冗余阵列方案)》的论文,其基本思想就是将多只容量较小的、相对廉价的硬盘驱动器进行有机组合,使其性能超过一只昂贵的大硬盘。这一设计思想很快被接受,从此RAID技术得到了广泛应用,数据存储进入了更快速、更安全、更廉价的新时代。
磁盘阵列对于个人电脑用户,还是比较陌生和神秘的。印象中的磁盘阵列似乎还停留在这样的场景中:在宽阔的大厅里,林立的磁盘柜,数名表情阴郁、早早谢顶的工程师徘徊在其中,不断从中抽出一块块沉重的硬盘,再插入一块块似乎更加沉重的硬盘……终于,随着大容量硬盘的价格不断降低,个人电脑的性能不断提升,IDE-RAID作为磁盘性能改善的最廉价解决方案,开始走入一般用户的计算机系统。
一、RAID技术规范简介
RAID技术主要包含RAID 0~RAID 7等数个规范,它们的侧重点各不相同,常见的规范有如下几种:
RAID 0:RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID结构。RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0不能应用于数据安全性要求高的场合。
RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互 为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。
RAID 0+1: 也被称为RAID 10标准,实际是将RAID 0和RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余。它的优点是同时拥有RAID 0的超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比较低。
RAID 2:将数据条块化地分布于不同的硬盘上,条块单位为位或字节,并使用称为“加重平均纠错码(海明码)”的编码技术来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂,因此在商业环境中很少使用。
RAID 3:它同RAID 2非常类似,都是将数据条块化分布于不同的硬盘上,区别在于RAID 3使用简单的奇偶校验,并用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据;如果奇偶盘失效则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据来说,奇偶盘会成为写操作的瓶颈。
RAID 4:RAID 4同样也将数据条块化并分布于不同的磁盘上,但条块单位为块或记录。RAID 4使用一块磁盘作为奇偶校验盘,每次写操作都需要访问奇偶盘,这时奇偶校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。
RAID 5:RAID 5不单独指定的奇偶盘,而是在所有磁盘上交叉地存取数据及奇偶校验信息。在RAID 5上,读/写指针可同时对阵列设备进行操作,提供了更高的数据流量。RAID 5更适合于小数据块和随机读写的数据。RAID 3与RAID 5相比,最主要的区别在于RAID 3每进行一次数据传输就需涉及到所有的阵列盘;而对于RAID 5来说,大部分数据传输只对一块磁盘操作,并可进行并行操作。在RAID 5中有“写损失”,即每一次写操作将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。
RAID 6:与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实施方式使得RAID 6很少得到实际应用。
RAID 7:这是一种新的RAID标准,其自身带有智能化实时操作系统和用于存储管理
开始时RAID方案主要针对SCSI硬盘
面向个人用户的IDE-RAID芯片一般只提供了RAID 0、RAID 1和RAID 0+1(RAID 10)等RAID规范的支持,虽然它们在技术上无法与商用系统相提并论,但是对普通用户来说其提供的速度提升和安全保证已经足够了。随着硬盘接口传输率的不断提高,IDE-RAID芯片也不断地更新换代,芯片市场上的主流芯片已经全部支持ATA 100标准,而HighPoint公司新推出的HPT 372芯片和Promise最新的PDC20276芯片,甚至已经可以支持ATA 133标准的IDE硬盘。在主板厂商竞争加剧、个人电脑用户要求逐渐提高的今天,在主板上板载RAID芯片的厂商已经不在少数,用户完全可以不用购置RAID卡,直接组建自己的磁盘阵列,感受磁盘狂飙的速度。
二.通过硬件控制芯片实现IDE RAID的方法
在RAID家族里,RAID 0和RAID 1在个人电脑上应用最广泛,毕竟愿意使用4块甚至更多的硬盘来构筑RAID 0+1或其他硬盘阵列的个人用户少之又少,因此我们在这里仅就这两种RAID方式进行讲解。我们选择支持IDE-RAID功能的升技KT7A-R AID主板,一步一步向大家介绍IDE-RAID的安装。升技KT7A-RAID集成的是HighPoint 370芯片,支持RAID 0、1、0+1。
做RAID自然少不了硬盘,RAID 0和RAID 1对磁盘的要求不一样,RAID 1(Mirror)磁盘镜像一般要求两块(或多块)硬盘容量一致,而RAID 0(Striping)磁盘一般没有这个要求,当然,选用容量相似性能相近甚至完全一样的硬盘比较理想。为了方便测试,我们选用两块60GB的希捷酷鱼Ⅳ硬盘(Barracuda ATA Ⅳ、编号ST360021A)。系统选用Duron 750MHz的CPU,2×128MB樵风金条SDRAM,耕升GeForce2 Pro显卡,应该说是比较普通的配置,我们也希望借此了解构建RAID所需的系统要求。 1.RAID 0的创建
第一步
首先要备份好硬盘中的数据。很多用户都没有重视备份这一工作,特别是一些比较粗心的个人用户。创建RAID对数据而言是一项比较危险的操作,稍不留神就有可能毁掉整块硬盘的数据,我们首先介绍的RAID 0更是这种情况,在创建RAID 0时,所有阵列中磁盘上的数据都将被抹去,包括硬盘分区表在内。因此要先准备好一张带Fdisk与format命令的Windows 98启动盘,这也是这一步要注意的重要事项。
第二步
将两块硬盘的跳线设置为Master,分别接上升技KT7A-RAID的IDE3、IDE4口(它们由主板上的HighPoint370芯片控制)。由于RAID 0会重建两块硬盘的分区表,我们就无需考虑硬盘连接的顺序(下文中我们会看到在创建RAID 1时这个顺序很重要)。
第三步
第四步
接下来的设置步骤是创建RAID 0的核心内容,我们以图解方式向大家详细介绍:
1.系统BIOS设置完成以后重启电脑,开机检测时将不会再报告发现硬盘。
2.磁盘的管理将由HighPoint 370芯片接管。
3.下面是非常关键的HighPoint 370 BIOS设置,在HighPoint 370磁盘扫描界面同时按下“Ctrl”和“H”。
4.进入HighPoint 370 BIOS设置界面后第一个要做的工作就是选择“Create RAID”创建RAID。
5.在“Array Mode(阵列模式)”中进行RAID模式选择,这里能够看到RAID 0、RAID 1、RAID 0+1和Span的选项,在此我们选择了RAID 0项。
6.RAID模式选择完成会自动退出到上一级菜单进行“Disk Drives(磁盘驱动器)”选择,一般来说直接回车就行了。
7.下一项设置是条带单位大小,缺省值为64kB,没有特殊要求可以不予理睬。8.接着是“Start Create(开始创建)”的选项,在你按下“Y”之前,请认真想想是否还有重要的数据留在硬盘上,这是你最后的机会!一旦开始创建RAID,硬盘上的所有数据都会被清除。
9.创建完成以后是指定BOOT启动盘,任选一个吧。
按“Esc”键退出,当然少不了按下“Y”来确认一下。
HighPoint 370 BIOS没有提供类似“Exit Without Save”的功能,修改设置后是不可逆转的
一.NFS的概念
1.NFS概念:Network File System,是主机间通过网络进行文件共享的网络协议,最早由Sun公司提出,多用于Unix操作系统,它允许用户将远程主机的文件系统看做好象是本地文件系统一样,并且是可安装的,可读的和可写的。系统使用与本地文件系统一样的命令mount把NFS文件系统挂接在本地文件树结构上。
2.NFS术语
拥有实际的物理磁盘并且通过NFS将这个磁盘共享的主机叫NFS文件服务器,通过NFS访问远程文件系统的主机叫NFS客户机。一个NFS客户机可以利用许多NFS服务器提供的服务。相反,一个NFS服务器可以与多个NFS客户机共享它的磁盘。一个共享了部分磁盘的NFS服务器可以是另一个NFS服务器的客户机。
NFS服务器输出的目录叫远程资源并且通常写作:host:pathname 其中host是文件服务器的名字而pathname是服务器上被输出目录的绝对路径。
远程资源被安装到客户机上的那个目录叫安装点(mount point)。
3.NFS输入输出规则
规则一:NFS输出目录,服务器输出的是目录而不是文件系统。
规则二:如果服务器已经输出了一个目录,如/usr/local,并且有一个文件系统安装在/usr/local
/extra,那么/usr/local/extra的内容在客户端看不到,除非服务器明确地输出了它,或客户机明确地安装了它。
规则三:客户机可以安装一个输出目录的子目录,前提是此子目录不是另一个文件系统。
规则四:一个主机不可以将一个输入的目录再次输出。例如,如果一个主机通过NFS安装/usr/local,它就不能将/usr/local输出给另外的主机。
规则五:一个已经输出目录的子目录不可以再输出,除非子目录在一个不同的文件系统上。还是举个例子:假设你要按只读方式输出根文件系统的跟(/)目录,但是又要按读写方式输出/tmp目录。你不可能做到这一点,除非/tmp被安装在不同于跟的文件系统上
二.NFS安装
只需安装两个软件包即可,通常被默认安装
#rpm -q nfs-utils portmap
插入linux的第一张光盘
#mount /mnt/cdrom #cd /RedHat/RPMS #rpm –ivh nfs-utils-
portmap软件包中的portmap服务,为NFS提供RPC服务的支持.nfs-utils软件包中提供了NFS服务器程序和相应的维护工具,#rpm –ql nfs-utils
支持RPC的概念:使进程产生的调用看起来象是一个普通的调用,而真正的执行是在其他进程中——也许是一个远程系统中的进程。各种RPC执行协议都朝着一个共同的目标在发展,那就是用隐藏执行细节来简化进程间通信的复杂性。
RPC机制的核心概念就是将函数调用产生的数据串行化到一个顺序流中,然后在连接接收端对它进行重组。这两种行为同步发生,就好象传统的过程化编程一样。RPC客户端进程发出一个看似标准的函数调用,但是,这个调用不会在本地执行,调用参数被打包并传递到一个远程的执行环境当中,在那里它们再被传入真正的执行函数当中。在完成函数执行后,执行结果又被串行化传回客户端,再由客户端函数传给调用者。
三.NFS的配置
1.服务器的配置:NFS服务器的配置文件exports,export文件在目录/etc/下,用于配置NFS服务器所提供的目录共享.exports文件默认设置为空,这也是出于安全性的考虑,exports(输出)文件
要输出的共享目录 客户端主机地址(设置选项)
/home/share *(sync,ro)
共享目录:设置系统中需要为共享的目录路径
客户端主机地址:例192.168.1.19 abc.com指定域名的主机 192.168.1.0/24指定网段中的所有主机 *.abc.com指定域中的所有主机 *所有主机
设置选项:sync设置NFS服务器同步写磁盘(async:资料会先暂存于内存当中,而非直接写入硬盘),ro设置输出的共享目录只读(与rw不能共同使用)
2.NFS服务器的启动与停止
启动NFS服务器
#service portmap start
#service nfs start
查询NFS服务器状态:#service portmap status #service nfs status
设置NFS服务器的自动启动状态
#chkconfig –list portmap|nfs查看nfs服务的自动启动状态
#chkconfig –level 35 portmap|nfs on指定运行级,由数字 0 到 7 构成的字符串
3.showmount命令:查询NFS服务器的共享目录状态
#showmount -h显示showmount命令的联机帮助
#showmount [NFS服务器主机地址]:显示连接到指定NFS服务器的所有主机
#showmount -e [NFS服务器主机地址]显示指定NFS服务器的输出目录列表
#showmount -d [NFS服务器主机地址]显示指定NFS服务器中已被客户端连接的所有输出目录
#showmount -a [NFS服务器主机地址]显示指定NFS服务器的所有客户端主机及其所连接的目录,例#showmount -a
4.NFS客户端配置
#mount 192.168.1.57:/home/public /mnt/nfshare
#mount |grep nfs查询该目录的挂载状态
#umount /mnt/nfshare卸载卸NFS共享目录
第一种是关于类型的关键字,主要包括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将监视第一个网络界面上所有流过的数据包。
# 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对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。
FreeBSD磁盘组织学习笔记
在FreeBSD中分区与文件系统是一一对应的,它这里的分区和常用的在Windows中的分区的意思不一样(如:MS-DOS分区),在FreeBSD中,将一块硬盘可以最多分成四个slice(片段),每一个slice上又可以分成最多8个分区(partition),这里的一个slice就相当与Windows里面的一个分区看成为一个slice,在FreeBSD中将一个slice分成8个(partition)分区,分别表示为a,b,c,d,e,f,g,h,传统上a,b,c,d分区有特别的意义,如a表示root分区,b表示swap分区,c表示整个slice,d表示整个硬盘。但在FreeBSD-2.0.5 Release后,只需要C定位为整个slice,其他各盘可以互换,但一般还是依照传统。
Slice 其编号是从1到4,Slice编号在设备名后面,并有一个s前缀,从1开始,如da0s1是第一个SCSI磁盘驱动器的第一个Slice,每个磁盘上只能有四个物理Slice,自己可以在物理Slice中使用适当的类型来创建逻辑Slice,这些扩展Slice 编号从5开始,因此ad0s5是第一个IDE磁盘中第一个扩展Slice; Slice“专项指定”物理驱动器,和其他驱动器都包含partitions,那几个partition都是字母从a 到h来标记,如ad1s3e表示第二快IDE磁盘上第三个Slice的第五个partition。
磁盘设备的代码
代码 说明
ad ATAPI (IDE) 磁盘
da SCSI 直接存取磁盘
acd ATAPI (IDE) 光驱
cd SCSI 光驱
fd 软驱
样例磁盘, Slice, 和 Partition 它们的命名
命名 说明
ad0s1a 在首个IDE磁盘(ad0)上的 第一个slice (s1)里的 第一个partition (a)。
da1s2e 在第二个SCSI磁盘(da1)上的 第二个slice(s2)里的 第五个partition(e
一个磁盘的布局
从在系统里的首个IDE磁盘图表可以显示出FreeBSD的见解。假设磁盘大小为4 GB,它里面包含了两个2 GB 大小的slices (但在MS-DOS叫partitions)。 首个slice是一个MS-DOS磁盘叫C:,而第二个slice是FreeBSD配置好的slice。 FreeBSD配置好的slice有三个partitions和另一个交换分区。
1. Linux和freebsd下都有/proc 文件系统,它是内存里的一个虚拟的文件系统
2. /proc 文件系统在Linux和freebsd 下的异同
Linux freebsd
df -h 时不显示 df -h 时显示,并占用100%
含有进程及其它系统信息 只含有进程信息
3. /proc文件系统内容解释
/proc 文件系统是一个假的文件系统。它不存在在磁盘某个磁盘上。而是由核心在内存中产生。用于提供关于系统的信息(originally about processes, hence the name)。下面说明一些最重要的文件和目录。 /proc 文件系统在proc man页中有更详细的说明。
相关资料: http://www.ibm.com/developerworks/cn/linux/l-proc.html
问题:不知道freebsd下的系统信息如何方便地得到?
1. PHP中的错误与异常时不同的,try 不能捕获到函数中非throw产生的错误,set_error_handler函数可以设置错误处理句柄,set_exception_handler可以设置异常处理句柄,不过,异常一般不这么做,都是用try{}catch(){}来处理的。
2. 不像C语言,函数的返回值可以标识函数是否执行成功,也可以标识可能产生的错误类型,如open函数在打开错误时总返回-1,但是错误原因可能是不同的,只是可以通过errno全局变量来获取详细的错误号,虽然php同样有fopen函数,但是没有类似errno的全局变量(可能是我没有发现,但愿有)。