OSPF 解析

<OSPF(Open Shortest Path First)>
开放最短路径优先协议

OSPF的基本特性:
·OSPF属于IGP,是Link-State协议,基于IP Pro 89。
·采用SPF算法(Dijkstra算法)计算最佳路径。
·快速响应网络变化。
·以较低频率(每隔30分钟)发送定期更新,被称为链路状态刷新。
·网络变化时是触发更新。
·支持等价的负载均衡。
OSPF维护的3张表:
1)Neighbor Table:
确保直接邻居之间能够双向通信。
2)Topology Table:
LSDB(Link-State DataBase),同一区域的所有路由器LSDB相同。
3)Routing Table:
对LSDB应用SPF算法,选择到达目标地址的最佳路由放入路由表。
OSPF的区域划分:
·OSPF采用层次设计,用Area来分隔路由器。
区域中的路由器保存该区域中所有链路和路由器的详细信息,
但只保存其他区域路由器和链路的摘要信息。
·Transit area (backbone or area 0)
主要功能:为快速、高效地传输数据包。通常不接用户。
·Regular areas (nonbackbone areas)
主要是连接用户。而且所有数据都必须经过area 0中转。
包括:Stub / Totally Stubby / NSSA
采用分区域设计的好处:
1、可以在区域边界做汇总,减少了路由表的条目
2、只有一个区域内的路由器才会同步LSDB,LSA的flood在网络边界停止,减少了LSA的flood,加速会聚
3、缩小网络的不稳定性,一个区域的路由问题不会影响其它区域。

OSPF的邻居与邻接关系:
OSPF中路由器之间的关系分两种:
1、邻居
2、邻接

·OSPF路由器可与它直连的邻居建立邻居关系。
·P2P链路上,邻居可以到达FULL状态,形成邻接关系
·MA网络,所有路由器只和DR/BDR(Backup Designated Router)到达FULL状态。形成邻接
·路由器只和建立了邻接关系的邻居才可以到达FULL状态。
·路由更新只在形成FULL状态的路由器间传递。
·OSPF路由器只会与建立了邻接关系的路由器互传LSA。同步LSDB

Route-ID:
一个号码而已,用来唯一标识OSPF域中路由器。
设置Route-ID的优先顺序:
1)手工指定Route-ID x.x.x.x(可任意,但区域内不能重复)
2)自动选择最大的Loopback IP作route-id
3)自动选择最大的物理接口IP(接口必须是激活状态)

推荐手工指定的router-id

DR/BDR的选举:

DR–指定路由器
BDR–备份的指定路由器

选举规则:
1)比较优先级,越大越优(默认为1,如设为0表示不参与选举)
2)比较Route-ID,越大越优。

·DRother发送LSA给DR/BDR用224.0.0.6
·DR发送LSA给DRother用224.0.0.5
·非MA网络(没有DR/BDR),路由器都用224.0.0.5
<DR/BDR>特点
1)不抢占,DR正常工作时,即使有新的优先级比DR高的路由器也不能抢占成为DR。
2)DR正常时,BDR只接收所有信息,转发LSA和同步LSDB的任务由DR完成,当DR故障时,BDR自动成为DR,完成原DR的工作,并选举新的BDR。
3)DR是个接口概念。每个网段都会选举DR。
4) 不同网段分别选DR/BDR

SPF算法:
最短路径优先算法

1、在一个区域内的所有路由器有同样的LSDB
2、每一个路由器在计算时都将自已做为树根
3、具有去往目标的最低cost值的路由是最好的路径
4、最好的路由被放入转发表

计时器:
·Hello Intervals:10S/30S
·Dead Interval:4*Hello =40S 不同于其它协议的三倍于Hello时间

hello包发向224.0.0.5
下面这三种网络类型的hello时间是30S
NON_BROADCAST
POINT_TO_MULTIPOINT
POINT_TO_MULTIPOINT NON_BROADCAST

OSPF开销值计算:
·OSPF Cost = 108/BW (bps)

几种常用接口的COST值:
1、环回口的COST值是1
2、serial口的COST值是64
3、标准以太接口是10
4、快速以太接口是1
·OSPF的5种报文:
1)Hello:发现并建立邻接关系。
2)DBD:包含路由的摘要信息。
3)LSR:向另一台路由器请求特定路由的完整信息。
4)LSU:用于LSA的泛洪和回应LSR该条路由的完整信息。在OSPF中,只有LSU需要显示确认
5)LSAck:对LSU做确认。

影响OSPF邻居或者邻接关系的因素有:
1、ROUTER ID不能相同;
2、HELLO时间必须一致;
3、DEAD时间必须一致;
4、区域ID必须相同;
5、认证必须相同;
6、STUB标志位必须相同;
7、MTU不匹配无法形成邻接关系(一边是EXSTART,一边是EXCHANGE);
8、OSPF版本号不同(目前版本为2);
9、当OSPF网络类型是MA时,要求掩码一定一致(两个邻居)。因为会出现DR和LSA-2,无法描述网段。

OSPF邻接关系状态机:
1、down state
2、init state
3、two-way state
4、exstart state
5、exchange state
6、loading state
7、full state

OSPF的同步过程:

DBD包中有一个三位的标志字段(主从关系控制标志):I、M、master/slaver
I(是否第一个包) M(是否还有后续包) M/S
1 1 1
0 1 0
0 1 1
分别是0x7,0x2,0x3     具有最高route-id的路由器为主,建邻居时第一个DBD是空的。

 

1. 在Down状态下路由器发出第一个hello包。当R2收到一个Hello包,并且在这个hello包中看不到自已的ID,则将自已和邻居的关系转到Init状态。Init是一个one way 状态,当R1和R2都认识对方后就会进入Two Way状态。

2. 在Two Way时,将选举DB/BDR(MA网络)。进入Two way状态后(即从Exstart开始),表示这两个路由器已经建立了邻居关系了。但最终能不能邻接关系要看最后是不是FULL。

3. Exstart:Exstart是firstDBD, 确认主从关系。双方互相发送第一个DBD报文,选取主从。

4. Exchange: Exchange是通过DBD交换LSA的头部信息。

DBD分为firstDBD和DBD。
firstDBD不携带Lsa头部信息。通过firstDBD确认主从关系。主的作用只是为了控制序列号的同步。Router-ID高的将成为主。
DBD只携带LAS的头部信息,没有携带LAS的具体信息。承载完整LAS是LASUpdate包。

5.Loading:等待M位为0时,才进入loading。
LSRrequest:是不携带LAS头部的,只通过(公告ID,LSA L类型,linkID)来请求具体的条目。
LSRUpdate:含有真正LSA完整信息的,用来回应LSRrequest。

6.FULL:完成了邻接关系的完整建立。

—————————————————————————————
<OSPF基本配置>

R1(config)#router ospf 110    注意:进程号是cisco的私有技术
R1(config-router)#network 1.1.1.0 0.0.0.255 area 0   (正/反掩码皆可)
R1(config-router)#network 12.1.1.0 255.255.255.0 area 0   区域号还可用点分十进制表示

R1#show ip protocols
R1#show ip ospf       可查看router-id,进程号,域的数量
R1#show ip ospf interface
R1#show ip ospf interface brief
R1#show ip ospf neighbor    查看邻居信息

R4(config-if)#ip ospf hello-interval 9
(dead自动*4)

R4(config-if)#ip ospf dead-interval 80

R4(config-if)#ip ospf priority 10   修改优先级

R1#show ip os database

注意:在OSPF中,环回接口的路由掩码会变为32位

不分层次网络的缺点:

假如在一个大型网络中,OSPF如果没有分区域,会有以下的问题产生:
1、每一个路由器会接收到太多的LSA
2、会经常进行路由的计算
3、路由表太大,而路由器的内存是有限的。

OSPF路由器的类型:
1、内部路由器–在一个普通区域内的路由器
2、核心路由器–在area 0区域内的路由器
3、ABR区域边界路由器–连接两个不同区域的路由器
4、ASBR自治系统边界路由器–连接OSPF域到另一个自治系统的路由器

LSA序列号:
1、LSDB中每一个LSA都有一个序列号
2、序列号范围从0x80000001-0x7FFFFFFF
3、OSPF每30分钟flood一次LSA来维持LSDB同步,每flood一次,序列号加1
4、当一个路由器遇到同一个LSA的两个实例时,它必须能够确定哪一个是最新的LSA。(根据序列号来识别)
5、LSA条目的老化时间默认是一小时(0-3600S)

当一条LSA的序列号到达最大序列号时,始发路由器会发送一个生存时间为最大值的相同的LSA,让其它的路由器从LSDB中清除这条LSA,当其它路由器确认后,再发送一个初始序列号的LSA。
注意:只有始发路由器才可以提前使这条LSA老化

当一台路由器收到相同的LSA的多个实例时,将通过以下算法决定将哪一条放入数据库:
1、比较LSA实例的序列号,大的优先
2、序列号相同,再比校验和,大的优先
3、校验和也相同,再比老化时间,如果有一条LSA拥有大小为最大生存时间(3600S)的老化时间,则最优
4、如果LSA的老化时间之间的差别多于15分钟,则老化时间小的优先
5、如果以上条件都比不出来,则认为这些LSA相同

<LSA(Link-State Advertisement)>

链路状态类型、链路状态ID、通告路由器用来唯一地标识一条LSA

序列号、校验和、老化时间标识一条LSA的具体实例

老化时间     可选项     类型
链路状态ID(Link-ID)
通告路由器(ADV Router)
序列号
校验和            长度

·类型         指明是哪种类型的LSA
·Link-ID      每一条LSA都有一个Link-ID,区分不同路由器发出的LSA
·ADV Router   指通告路由器的Router-id

学习时的注意点:
1、每种LSA的传播范围
2、每种LSA由谁产生,也就是说由谁通告的
3、每种LSA所包含内容

LSA1(Router Link States)

show ip ospf database router   //查看LSDB中的1类LSA的详细信息

特点:
1、域内路由,仅在本区域传递,不会穿越ABR。
2、每台路由器都会产生。
3、包含本路由器的直连的邻居,以及直连接口的信息

Link ID:        router ID
ADV router:     router ID

三种信息:1、Another router
2、stub network
3、transit network (Ma网络的一些信息)

LSA2(Net Link States)

show ip ospf database network

特点:
1、仅在本区域传递
2、只有MA网络才会产生LSA2,由DR发出。
3、标识出本MA网中有哪些路由器以及本网的掩码信息。

Link ID:        DR的接口IP
ADV router:     DR的router ID

LSA3(Summary Net Link States)

show ip ospf database summary

特点:
1、域间路由,能泛洪到整个AS。
2、由ABR发出,每穿越一个ABR,其ADV Router就会变成此ABR的Router-id.
3、包含本区域中的路由信息,包括网络号和掩码。

Link ID:        路由route(网络号)
ADV router:     ABR的router ID(经过一个ABR,就会改为这个ABR的router ID)

三类LAS会被一个区域的边界ABR路由器重新产生并泛洪进下一个区域,所以每穿越一个ABR,其通告路由器就会发生改变。
LSA4(Summary ASB Link States)

show ip os database asbr-summary

特点:
1、把ASBR的Router-id传播到其他区域,让其他区域的路由器得知ASBR的位置。
2、由ABR产生并发出,穿越一个ABR,其ADV Router就会变成此ABR的Router-id.

Link ID:        ASBR的RID
ADV router:     ABR的router ID(经过一个ABR,就会改为这个ABR的router ID)

在ASBR直连的区域内,不会产生4类的LSA,因为ASBR会发出一类的LSA,其中会指明自已是ASBR

LSA5(Type-5 AS External Link States)

show ip os database external

特点:
1、域外路由,不属于某个区域。
2、ASBR产生,泛洪到整个AS。不会改变ADV Router。
3、包含域外的路由
Link ID:        路由(网络号)
ADV router:     ASBR的router ID (unchange)

LSA7(Type-7 AS External Link States)

show ip os database nssa-external

特点:
特殊的域外路由,只存在于NSSA区域中。
Link ID:        路由(网络号)
ADV router:     ASBR的router ID (只在NSSA区域中)

OSPF的四种路径类型:
1、域内路由
2、域间路由
3、E1的外部路由
4、E2的外部路由

外部路由重分布进OSPF有两种类型

·OE1: 重分布进OSPF的路由默认为E2,Cost=20,且传递过程中不改变COST。
·OE2: 如果改为E1类型,则在传输过程中会累加每个入接口的cost值

OSPF的选路原则:
1、域内路由优于域间路由
2、域间路由优于外部路由
3、OE1的路由优玩OE2的路由

如果一台路由器收到两条相同的域间的路由,一条是area 0区域传过来的,一条是普通区域传过来的,则优选area 0区域传过来的。

如果有一台路由器从两个不同的ASBR收到相同的外部路由,OSPF在选择外部路由的时候,遵循的原则是:

[1]O E1优于O E2

[2]在类型相同的情况下,Cost越小越优先

[3]对OE2来说,在cost相同的情况下,选择到达ASBR最优的路径

OE2的路由传递时带有一个参数—forward metric,这个参数记录了OE2的路由所穿越链路的总COST值,如果一个路由器收到两条COST相同的OE2路由,将比较它们的forward metric来选出最优路由。
sh ip route 172.16.1.0
Routing entry for 172.16.1.0/24
Known via “ospf 110”, distance 110, metric 20, type extern 2, forward metric 74
Last update from 12.1.1.1 on Serial1/0, 00:00:04 ago
Routing Descriptor Blocks:
* 12.1.1.1, from 4.4.4.4, 00:00:04 ago, via Serial1/0
Route metric is 20, traffic share count is 1

新命令:
用来限制路由器所能学习到的LSA的数量

Router(config-router)#max-lsa maximum-number [threshold-percentage] [warning-only] [ignore-time] [ignore-count] [reset-time]

定义一个百分比值,当收到LSA的条数超过我指定的值,进行相应的操作,用于限定路由器所能收到的LSA条数
maximum-number   所允许收到LSA的最大条数
[threshold-percentage] maximum-number的百分比,超过这个值就会发出警告,默认75%
[warning-only]    只发送警告,不做其它动作,默认是关闭的
[ignore-time]     超过最大值后进入ignore状态的时间,默认5分钟,5分钟后恢复
[ignore-count]    超过多少次后,一直进入ignore状态
[reset-time]      一直进入ignore状态后多长时间重置所有邻居

ABR有多条路由时如何发出三类LSA:

ABR路由器即使知道它有多条路由可以到达同一个目的地,它只会为这个目的地始发单条网络汇总LSA通告。不论是从核心区域到非核心,还是从非核心到核心区域。而且一定是代价最低的一条LSA。

<修改Cost参考值>

修改COST有两个方法:

1、通过一条命令直接改动接口的COST值
R1(config)#router os 110
R1(config-if)#ip ospf cost 10 //直接修改COST值1-65535

2、修改OSPF中COST值计算公式的分子
注意:这里改动的值是以10的六次方为单位的。

例如:在COST公式中修改分子,本例修改分子为10的九次方
R1(config-router)#auto-cost reference-bandwidth 1000 (Mbps10的六次方)
汇总的好处:
1、减少路由条目数
2、使拓扑变化的影响局限在一个小范围内
3、减少了LSA3和LSA5的flood

<域间汇总>
只能在ABR上做,用来将一个区域的路由传递到另一个区域时进行汇总。域间汇总只能对打O的路由做汇总。

router ospf 110
area 0 range 172.16.32.0 255.255.224.0
汇总后,在R2本地会产生一条特殊的路由,用来防环
O 172.16.32.0/19 is a summary, 00:00:06, Null0

这条路由称为discard-route,可以用以下命令去掉:
router ospf 110
no discard-route internal

本汇总命令还可用来做路由的过滤:
router ospf 110
area 0 range 172.16.0.0 255.255.0.0 not-advertise 过滤掉172.16.0.0的网络及其所包含的子网

<域外汇总>
用于将外部路由重分布进OSPF时进行汇总,只能在ASBR上做。

router ospf 110
summary-address 172.16.0.0 255.255.0.0 //在ASBR上做

本地也会产生特殊路由来防环 O 172.16.0.0/16 is a summary, 00:00:04, Null0
用以下命令可以去掉:
router ospf 110
no discard-route external

<向OSPF区域注入默认路由>

第一种做法:
需要先写一条静态的默认路由,再用命令下发。

ip route 0.0.0.0 0.0.0.0 Serial 0

router ospf 100
default-information originate

O*E2 0.0.0.0/0 [110/1]   //以外部路由的形式下发默认路由,metric值默认为1
第二种做法:
不需要写一条静态的默认路由,直接下发。

router ospf 100
default-information originate always
还可在下发默认路由时指定metric的类型和metric值
router ospf 11
default-information originate always metric-type 1 metric 3

<OSPF特殊区域>
在OSPF中共有四类特殊区域,都是用来对OSPF做优化的。可以减少一个区域中的LSA3和LSA5。

1、Stub
2、Totally Stub
3、NSSA
4、Totally NSSA

<Stub>

·将某区域设为Stub可阻止LSA4/5进入Stub区域,缩小了区域内路由器的LSDB,降低内存消耗。

·Stub区域中,ABR会发出一条LSA3默认路由给Stub区域的其他路由器。
默认的Seed Cost=1

·配置Stub区域的注意点:
1、必须将Stub区域的所有路由器都配成Stub。
2、Stub区域不能用作虚链路的中转区域。
3、Stub区域中不能出现ASBR。
4、Area 0不能配成Stub。

·hello报文中有一个stub area flag,也叫E位,所有的stub路由器会将这一位置为0,路由器建邻居的时候,将比较这一位,要求必须匹配。

配置命令:
router ospf 110
area 2 stub
area 2 default-cost 6 (在ABR上做,改Seed Cost=6)在同时有两个ABR的情况下,可通过修改这个COST值来实现选路

<Totally Stubby > Cisco 私有

·更加缩小区域内路由器的LSDB,在Stub基础上,又阻止LSA3。(阻止LSA3/4/5 )
·也会由ABR发出一条LSA3默认路由给Stub区域内的其他路由器。

配置步骤:
先配置出一个STUB区域,然后在ABR上打上以下命令:
router ospf 110
area 2 stub no-summary   //(只需在ABR上做)

<NSSA(Not-So-Stubby Areas)>

·NSSA区域和Stub区域一样会阻止LSA4/5。
·NSSA区域打破了Stub区域的规则,可以存在ASBR。
·ASBR会引入外部路由,是以LSA7引入的,只有NSSA区域中才会现LSA7。
·NSSA区域的边界ABR会将LSA7转成LSA5,传播到其他区域。这时,ABR也成为了ASBR,因为它也引入了LSA5。其它区域路由器看到LSA5的通告路由器是ABR。
·如果在NSSA区域中,有两个ABR的话,只有router-id大的ABR会做7转5的工作。

配置命令:
router ospf 110
area 2 nssa
注意:NSSA区域不会自动产生默认路由,要手动下发一条

router ospf 110
area 2 nssa default-information-originate
(在ABR上做,由ABR产生一条LSA7默认路由传播到NSSA其他路由器,默认Seed Cost=1,并且不会发生变化)
还可改动默认路由的metric类型,metric值
router ospf 110
area 2 default-cost 6          //(在ABR上做,改Seed Cost=6)
area 2 nssa default-information-originate metric 6 metric-type 1
对ABR上有外部路由进入NSSA区域时,如果要将其阻止,用以下命令,因为在ABR向nssa区域下发默认路由后,不需要它再将它连接的一些外部区域路由传进NSSA区域
router ospf 110
area 2 nssa no-redistribution   //在ABR上做
在NSSA区域中,LSA7的forward address会出现不为零的情况,会变为ASBR上最后一个宣告进OSPF区域的接口的address。在特定的环境下,这将给网络造成问题,可用以下命令解决:
router ospf 110
area 2 nssa translate type7 suppress      //这个命令通常用在NSSA区域的边界路由器上,作用是在7类转5类出去的时候,把这个forward address变成0.0.0.0

totally NSSA area

也是CISCO私有特性–
Totally NSSA,能阻止LSA3/4/5,并且由ABR产生LSA3默认路由传播到NSSA其他路由器

R2(config-router)#area 2 nssa no-summary    //把三类的LSA也干掉,同时也下发一条三类的默认路由,并且这条默认路由会取代default-information-originate所下发的默认路由
如果在ABR上用下面的命令,LSDB中会出现LSA3/7默认路由,路由表中只会显示LSA3默认路由
router ospf 110
area 2 nssa no-redistribution default-information-originate no-summary

在下列这种情况下5类LSA的forward address也会出现不为0的情况:

1、在R1和R2上运行OSPF
2、在R1上写静态路由,下一跳指向R3
3、和R3相连的接口必须是以太口
4、将R1的E0口也宣告进OSPF
5、R1的E0口不能是passive-interface
6、在R1上将静态路由重分布进OSPF

这时,你会发现R1产生的5类LSA中forward address是R3的接口IP

如果在R1上写默认路由指向R3,然后在R1上使用default-information originate 下发默认路由,这条默认路由LSA的forward address也会变为R3的接口IP。
<OSPF区域的连接问题>

如果出现下面这种情况:一个普通区域没有跟area 0区域相连,可使用下面的三种方法来解决。
1)在ABR上起不同OSPF进程,进行OSPF之间的重分布。
例如:R1的s0口在area 1中,进程号是10,s1口在area 2中,进程号是20,然后重分布
Router ospf 10                           router ospf 20
Redistribute ospf 20 subnets             redistribute ospf 10 subnets

2)tunnel 只要在区域的两个边界上配置
R1:                               R2:
Int tunnel 1                      int tunnel 2
Tunnel source s1                  tunnel source s1
Tunnel destination 12.1.1.2       tunnel destination 12.1.1.1
Ip add 100.1.1.1 255.255.255.0    Ip add 100.1.1.2 255.255.255.0

Router ospf 10                    router ospf 10
Net 100.1.1.0 0.0.0.255 area 0    net 100.1.1.0 0.0.0.255 area 0

3)虚链路:
最简单的方法,只需在区域的两台边界路由器上配就可以了
R1:
router ospf 110
area 1 virtual-link 2.2.2.2
(中转区域)   (对方Router-ID)
·注意:虚链路只在建邻居时发送hello包,当邻居关系建立后,不再发送hello包。并且LSA是触发更新且不老化的。这个特性被称为DNA(DoNotAge)。

show ip ospf virtual-links
<负载均衡>

·OSPF只支持等价的负载均衡。(默认为4条)

show ip protocols

router ospf 110
maximum-paths 6          //(最多16条)

<被动接口>

router ospf 110
passive-interface loopback

接口将不收发Hello包

<OSPF认证>

·分3种认证
1、Link认证
2、Area认证
3、Virtual-Link认证

·OSPF即能做明文认证,也能做MD5认证
Link:用于同一链路上的路由器之间,在接口下做

第一步:接口下配密码
int s1/0
ip ospf authentication-key wolf  //配明文密码

第二步:接口下启用认证
ip ospf authentication       //启动明文认证

int s1/0
ip ospf message-digest-key 1 md5 wolf //配密文密码
ip ospf authentication message-digest //启动密文认证

注意:在MD5验证中,两边的KEY号必须一致

Area:

第一步:接口下配密码
int s1/0
ip ospf message-digest-key 1 md5 wolf   //配密文密码

第二步:进程下启用
router ospf 110
area 0 authentication Message-digest  //启动密文认证

注意:区域内的所有路由器都要开启认证。两台路由器相连的链路的密码要匹配。

注:区域认证跟接口认证可以协商通过,因为区域认证相当于开启了所有接口的认证。接口认证优先于区域认证,在同时有区域认证和接口认证的情况下,则使用接口的认证进行协商。(接口命令都优于进程命令) 因为接口只能调用密文或明文其中一种,所以没有密文优于明文的概念。
Virtual-Link:
router ospf 110
area 2 virtual-link 2.2.2.2 message-digest-key 1 md5 wolf //配密码
area 2 virtual-link 2.2.2.2 authentication message-digest //启动MD5认证

在有虚链路的情况下,如果Area0启动认证,起了Virtual-Link的两台路由器上也要启动区域认证。
注意:虚电路上只在刚开始建立邻居关系的时候发送hello包,之后不再发送hello包。所以做这个试验之后要重置邻居关系,或制造一次更新就可以看到效果了。

 

关于做MD5认证时的KEY-ID值:
当链路需要换密码时,为了防止链路抖动,可以使用Key ID来实现平稳过渡。
最后配置的KEYID才是YoungestID,与ID号大小无关,就算clear ip os pro也没用。要求双方youngestID的密钥必须一致。

当起用了最新的KEYID,将新的和老的KEYID都发过去
当最新的youngestKEYID没有被通过认证,则用老的KEYID做匹配。
当最新的youngestKEYID被在对方的列表找到相同的KEYID了,将只发最新的KEYID。而不全发。
当youngestID被no掉了,就会选次yongest为yongestID
例一:
这时R1的KID2是Youngest KeyID ,R2的KID1是Youngest KeyID。
因为R1的key2没有在对方找到对应的KEYID,R1会发key 1和key2给R2,R2收到后KID1验证通过,但KID2验证不通过, R2发key1过去,由于双方的KEY1匹配,邻接关系就可以建立起来,一切正常,但R1还是会不停发key1和key2,R1收到key2一直报错,但 不影响正常工作。因为通过key1已经建立关系了。

当R2再起了个key 2的“ccie”,双方认识到对方都有key2并且KEY号相同,就不再发key1了,虽然key2的密码不一样没能通过认证没能建立起邻居关系。所以 OSPF的密文认证是先比较keyID,再比较密码。它收到对方的keyID先与自己的列表比较有没有一样的KEYID再比较密码。自己有对方的对应的 youngestID,将通告对方“我有你相同的KEYID”,对方就不再发整个列表过来,只发youngestID。
例二:

 

R1同R2相同KID的密码一样。
当R1和R2的KID3都no掉后,R1的youngest是KID2;R2的yongest是KID1;这时候邻接仍然可以建立。因为自己发送的youngestKID在对方都能找到相应KID及正确的密码。

R1发给R2的密码是ccna,R2发给R1的密码是cisco

——————————————————————————————-
——————————————————————————————-
网络的物理连接类型分三种:
1)POINT_TO_POINT:
2)BROADCAST:
3)NON_BROADCAST(NBMA):
2010-3-23 16:54:38
<OSPF Network Type>

1)LOOPBACK:       Loopback                      出现32位主机路由
2)POINT_TO_POINT:    Serial / FR’s P2P Subif /    (无DR,组播更新)
3)BROADCAST:      Ethernet                     (选举DR,通过组播建邻居)
4)NON_BROADCAST(NBMA): FR’s Physical / FR’s MP Subif(选举DR,单播更新)
5)POINT_TO_MULTIPOINT:                    (无DR,组播更新,出现/32主机路由)
6)POINT_TO_MULTIPOINT NON_BROADCAST:             (无DR,单播,出现/32主机路由)

[2/3] Hello:10S       [4/5/6] Hello:30S

·每种物理接口都被赋予了默认的OSPF Network Type,但可手工对其修改。

<各种网络类型的特点>

·NON_BROADCAST
·FR的物理接口和多点子接口默认是NBMA网络类型
·hello时间30S
·单播更新
·由于是单播更新,必须手动指定邻居(只需一方设置就OK,通常在Hub指Spoke)
·3层是NBMA,没有广播,二层也可以不用广播。(FR map后可不加Broadcast去实现伪广播)
·要选举DR和BDR
·一定要确保HUB端成为DR
·需要手工加MAP映射

改动接口的网络类型:
R1(config-if)#ip ospf network non-broadcast

在HUB端(R1)
R1(config)#router ospf 110
R1(config-router)#neighbor 10.1.1.4
R1(config-router)#neighbor 10.1.1.5

确保HUB成为DR,和Spoke交互路由信息。
R1(config)#int s0
R1(config-if)#ip ospf priority 100
R4/R5(config-if)#ip ospf priority 0 改为0则不参加选举

手工MAP(Spoke 端的互访)
R4(config-if)#frame-relay map ip 10.1.1.5 401
R5(config-if)#frame-relay map ip 10.1.1.4 501
·BROADCAST

·以太网接口运行OSPF后默认是broadcast网络类型
·hello时间10S
·组播更新
·由于是组播更新,不用手动指定邻居,可以自动发现
·3层是有广播的,2层也一定要有广播能力。(FR map后一定要加Broadcsat)
·要选举DR和BDR
·一定要确保HUB端成为DR
·需要手工加MAP映射

改动接口的网络类型:
R1(config-if)#ip ospf network broadcast

R1(config-if)#fram map ip 10.1.1.4 104 broadcast
R1(config-if)#fram map ip 10.1.1.5 105 broadcast

确保HUB成为DR,和Spoke交互路由信息。
R1(config)#int s0
R1(config-if)#ip ospf priority 100
R4/R5(config-if)#ip ospf priority 0

手工加MAP
R4(config-if)#frame-relay map ip 10.1.1.5 401 broadcast
R5(config-if)#frame-relay map ip 10.1.1.4 501 broadcast

·POINT_TO_MULTIPOINT
·全自动,最好的
·hello时间30S
·组播更新
·由于是组播更新,不用手动指定邻居,可以自动发现
·3层是有广播的,2层也一定要有广播能力。(FR map后一定要加Broadcsat)
·不需要选举DR和BDR,点到多点网络把PVC当作一个点到点链路的集合,因此就没有DR/BDR的选取发生。
·会自动产生32位主机路由
·不需要手工加MAP映射

改动接口的网络类型:
R1(config-if)#ip ospf network point-to-multipoint

R1#show ip ospf neighbor detail
DR is 0.0.0.0 BDR is 0.0.0.0

P2P/P2MP/P2MP-NB都不需要选举DR/BDR,所以DR is 0.0.0.0 BDR is 0.0.0.0

每一个P-MP的接口都会产生/32主机路由,传递给其他的路由器,所以不需手工加MAP。这就是32位的好处。

·POINT_TO_MULTIPOINT NON_BROADCAST

·cisco私有的
·为一些动态连接的网络而设计,比如说帧中继SVC
·hello时间30S
·单播更新
·由于是单播更新,必须手动指定邻居(只需一方设置就OK,通常在Hub指Spoke)
·3层没有广播,二层也可以不用广播。(FR map后可不加Broadcast去实现伪广播)
·不需要选举DR和BDR
·会自动产生32位主机路由
·不需要手工加MAP映射
改动接口的网络类型:
R1(config-if)#ip ospf network point-to-multipoint non-broadcast

在HUB端(R1)
R1(config)#router ospf 110
R1(config-router)#neighbor 10.1.1.4
R1(config-router)#neighbor 10.1.1.5

也会产生/32主机路由,所以不需手工MAP。

用show ip ospf interface serial 0看不到non-broadcast,只能show run

·POINT_TO_POINT(做不同网段)

·hello时间10S
·组播更新
·由于是组播更新,不用手动指定邻居,可以自动发现
·3层是有广播的,2层也一定要有广播能力。(FR map后一定要加Broadcsat)
·不需要选举DR和BDR
·不需要手工加MAP映射

HUB端起2个P2P子接口:
interface Serial0
encapsulation frame-relay
no frame-relay inverse-arp

interface Serial0.14 point-to-point
ip address 14.1.1.1 255.255.255.0
frame-relay interface-dlci 104

interface Serial0.15 point-to-point
ip address 15.1.1.1 255.255.255.0
frame-relay interface-dlci 105

帧中继的点到点子接口运行OSPF后,默认的网络类型就是P-TO-P的

在R4和R5上改动接口的网络类型:
R1(config-if)#ip ospf network point-to-point

————————————————————————————–
当两端的网络类型不一致时.通过修改HELLO及DEAD值,能否建立邻接关系

l 在任意情况下
n P-P 与P-M可以建立邻接关系.路由正常,
n NBMA与BROADCAST可以建立邻接关系.路由正常
l 两台路由器之间运行OSPF
n P-P AND BROAD 能建立. 路由不通
n P-P AND NBMA   能建立, 路由不通
n P-M AND NBMA 能建立.路由不通.
n P-M AND BROADCAST 能建立,但路由不通.
l HUB-SPOKE模式
n P-P AND BROAD 能建立. FLAPPING
n P-P AND NBMA   能建立, FLAPPING
n P-M AND NBMA 能建立.路由不通.
n P-M AND BROADCAST 能建立,路由不通.
n P-P AND P-M     能建立.路由通
n NBMA AND BROADCAST 能建立.路由通

[转贴] Linux 操作技巧 96例

1. 查看man文件…
nroff -man man/libnet.3 | less
有时候man文件不在系统目录..这时候就可以用上面的方式来查看非标准的man文件

2. 以不同的用户身份运行程序…
su – username -c “where/is/command/line”
有时候需要运行特殊身份的程序…就可以让su来做…

3. 解压bz文件
tar -jvxf some.bz
就是把tar的zvxf 改成jvxf

4. 编辑/etc/inittab后直接生效的方法..
执行init q

5. 让linux连续执行几个命令,出错停止
command1 && command2 && command3 ….

6. linux中的bg和fg管理
当我们打ctrl+z的时候一个任务就被挂起(就是暂停),同时屏幕上返回一个数字,这时候可以用 “bg %数字” 来把这个进程放到后台执行…这个很适合在你忘了加&的时候进行补救…同样 ” fg %数字 “就能让这个进程放到前台来执行了…
job命令用来查看当前的被bg的进程…

7. ctrl+s与ctrl+q
ctrl-s 好象是从终端时代遗传过来的东东, 流量控制, 用来暂停向终端发送数据的. ctrl-q 用来恢复恢复

8. 目录统计教本
保存成total.sh ,然后用total.sh 绝对路径,就会统计路径下目录的大小了
#!/bin/sh
du 1 –max-depth=1 | sort -n|awk ‘{printf “%7.2fM —-> %s\n”,1/1024,2}’|sed ‘s:/.*/\([^/]\{1,\}\):\1:g’

9. grep不显示本身进程
ps -aux|grep httpd|grep -v grep
通过再一次grep -v grep就可以取消显示你所执行的grep本身这个进程,-v参数是不显示所列出的进程名.

10. 自己用的一个统计httpd的脚本
#!/bin/sh
while (true)
do
pstree |grep “*\[httpd\]”|sed ‘s/.*-\([0-9][0-9]*\)\*\[httpd\]/\1/’
sleep 3
done

11. 解压rpm包中的文件
cat gnome-libs-1.4.1.2.90.22.i386.rpm | rpm2cpio | pax -r

12. 去掉apache的manual目录中的所有.en的后缀名
进入到manual目录
find ./ -regex .*\.en|awk -F. ‘{ printf “mv %s.%s.%s.%s %s.%s.%s\n”,1,2,3,4,1,2,3}’|sh

13. linux里如何映射windows里的硬盘
mount -t smbfs -o username=xxx,password=xxx //winxp_ip_or_hostname/sharename /local_path
fc2中已经不需要-t smbfs这个参数了.

14. linux里如何查看可用的硬盘设备
fdisk -l

15. 命令行下制作ISO
用法: mkisofs -a -I -J -r -o filename.iso /目录
用途: 将linux下某个目录中的所有文件做成iso镜像.而且我加上了参数,可以保证你做出来的光盘是在windows下也可以用的 (iso是有文件大小限制的…具体多少偶忘记了)

16. Linux下ISO的虚拟方法
步骤如下:
1. 把 /dev/cdrom 删除,然后运行 ln -s /dev/loop7 /dev/cdrom
2. losetup /dev/loop7 xxx.iso
3. mount /mnt/cdrom
如何换盘:
1. losetup -d /dev/loop7 ;目的是取消这个设备
2. losetup /dev/loop7 yyy.iso ;新的iso文件

17. hosts的用法
host能够用来查询域名,然而它可以得到更多的信息.host -t mx linux.com可以查询出linux.com的MX记录,以及处理mail的host的名字.host -l linux.com会返回所有注册在linux.com下的域名.host -a linux.com则会显示这个主机的所有域名信息.

18. *.bz2文件如何解压缩
使用tar -I 或者bunzip2命令都可以.

19. RPM常见用法
安装rpm包时显示进度并校验包的正确性
用-vh参数:
如 rpm -ivh ipchains-1.3.6-1.i386.rpm 如果用glint或xrpm则不必.
直接通过ftp来安装rpm包 如 rpm -i ftp://ftp.xxx.xxx
校验所有的rpm包,查找丢失的文件 rpm -Va
查找一个文件属于哪个rpm包 如 rpm -qf /usr/bin/who
列出一个rpm包的描述信息 如 rpm -qpi mon-0.37j-1.i386.rpm
列出一个rpm包的文件信息 如 rpm -qpl mon-0.37j-1.i386.rpm

20. 查看系统监听的服务
用法: netstat -ln
解释: “l”表示显示当前系统监听的端口信息;”n”表示端口按照端口号来显示,而不转换为service文件中定义的端口名;若希望了解各个端口都是由哪些进程监听则可以使用p参数.

21. 查看系统运行的进程
用法: ps -auxw
解释: 其中参数”a”表示显示系统中所有用户的的进程;”u”表示输出进程用户所属信息;”x”表示也显示没有控制台的进程;若显示行太长而被截断则可以使用f参数.

22. Linux帐号搬家
对于新账号->
保证将要加入系统的新帐号放在新的位置上,这通过修改/etc/default/useradd文件中的HOME值来实现. 如: HOME=/home2 使新增帐号的主目录建在/home2下.
将已有帐号移至新的位置->
首先,将已有帐号的主目录连带目录属性拷至新位置,可用下面命令:
cp -a /home /home2或cp -rpd /home /home2
然后,修改/etc/passwd文件中相应记录的home_directory域为/home2/username.
这样两步已将旧帐号移至新位置.确保无误后,可删去旧帐号的旧主目录以腾出原文件系统的空间.

23. 启动时屏幕显示的信息
Linux 启动时屏幕显示的信息来不及看清就一闪而过,如果对这些信息感兴趣的话可以在启动完后用命令 dmesg 查看.

24. GRUB引导恢复小法
用启动盘或安装盘(linux rescue)进linux
sh# grub
grub> root (hdx,y)
grub> setup (hd0)
重启
说明: 如果成功会有一个successful……这里的x,如果是一个盘,就是0.如果你所安装的linux的根分区在第二个硬盘上,那x就是1了;y 就是装有linux系统所在的根分区.setup (hd0)就是把GRUB写到硬盘的MBR上.如果我知道我的linux装在第一个硬盘上,但我不知道装在哪个分区上,就可以先输入root (hd0,然后用[TAB]键来补齐,然后就明白了.

25. 测试磁盘性能
用法: hdparm -tT /dev/hd?
例如: hdparm -tT /dev/hda (测试第一个物理硬盘的速度)

26. 将内网的服务对外开放
将192.168.1.2上的8888端口映射到192.168.1.3的8888端口
#iptables -t nat -A PREROUTING -p tcp -m tcp –dport 8888 -j DNAT –to-destination 192.168.1.2:8888
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.2 -p tcp -m tcp –dport 8888 -j SNAT –to-source 192.168.1.3
#iptables -A INPUT -p tcp –dport 8888 -i eth0 -j ACCEPT (视情况而加)

27. 关闭”讨厌”的Linux按键Beep声
vi /etc/.inputrc 增加下面一行
set bell-style none

28. 开机进入图形/文本登陆方式
vi /etc/inittab
id:x:initdefault:
x=3:文本方式 x=5:图形方式

29. 在GRUB中限制系统可使用的内存数量
限制Linux只能使用120MB内存
title Red Hat Linux (2.4.19)
root (hd0,1)
kernel /boot/vmlinuz-2.4.19 ro root=/dev/hda2 mem=120M
initrd /boot/initrd-2.4.18-14.img

30. 如何查找某条命令的相关库文件
在Linux环境下通过ldd命令即可实现,在控制台执行:
ldd /bin/ls
即可得到/bin/ls命令的相关库文件列表.

31. 只列子目录(文件)
ls -F | grep /
你也可以在.bashrc(针对bash)中把该命令作成alias,以后只要敲入sub就可以实现只列子目录的功能.  alias sub = “ls -F | grep /” 同样,ls -l | grep ^-则是只列普通文件.

32. 计算目录下的文件及子目录
ls -al | wc -l

33. RedHat 下显示彩色目录列表
ls -color 可以显示彩色目录列表,其中:  蓝色→目录  绿色→可执行文件  红色→压缩文件  浅蓝色→链接文件  灰色→其他文件
同样你还可以试试ls –color(比前面多-),看看两者的差别吧

34. 列目录时显示中文文件名
在没有打补丁的Linux系统中,我们用ls列目录,发现中文文件名都成了?号.我们可以使用–show-control-chars命令选项来显示.
ls –show-control-chars

35. 改变当前路径下所有目录和文件的所有权
chown -R owner[.group] *
也可以用find命令来实现: find . -exec chown owner[.group] {} ;

36. 改变所有子目录及文件的属性
在你要改变属性的目录下,输入命令:chmod -R 777 *
就可以改变下面所有子目录及文件的属性,不过使用这个命令的时候要特别小心,要是在根目录下打入这个命令,你所有文件的属性都将改变,这就会引起很大的安全性问题.

37. 使用nohup命令
如果你想进程在你退出系统后还能执行,可以使用nohup命令.
如:  nohup tar cf /dev/tape /home &
你退出后再重新登录的话,使用ps命令会发现进程还在执行.

38. 重新启动
Ctrl+Alt+Del 或 init 6 或 shutdown -r now

39. 快速查找文件
查找文件可以用find,但最好是用locate.速度快,参数少.
locate filename
它是在一个数据库里面查找.所以,要记得经常用updatedb命令更新数据库.一般地,我们是在crontab里面加一句,让机子在每天深夜更新数据库.
另外,快速查找命令文件,可以使用whereis.
例如:  whereis rpm

40. 查找Linux命令
如果你想实现某种功能,但是不知道该使用什么命令.你可以试试apropos命令,它也许能帮你找到你想要的命令.例如: 你要”查找”文件,又不知道用什么命令,你可以敲入下面的命令:
apropos search

41. 在同一个命令行上同时执行多条命令
用分号分隔.如编译一个源文件:
#./configure ; make ; make install

42. 用gzip(gunzip)压缩(解压)同一目录下的多个文件
gzip * 或者 gunzip *

43. 在使用less或more时,直接启动vi
在less或者more中打入v键,会立即启动vi编辑器,可以对文件进行编辑.

44. 在使用mail中启动vi
如果你觉得用mail发送邮件编辑起来很不方便,你可以在正文的顶格输入~v,启动vi进行编辑,编辑完后退出vi,回到mail.

45. 观察文件大小变化
使用watch命令,可以反复执行命令.和ls配合,可以达到观察某文件大小变化的效果.
watch ls -| file.name

46. 观看binary文件中的字符串
strings binaryfile

47. 重装Win 9x后lilo失效无法启动Linux
只须先用软盘启动Linux然后运行一次lilo即可.对于RedHat可以用命令mkbootdisk来制作启动盘,例如:  mkbootdisk –device /dev/fd0 2.4.20
其中2.4.20是/lib/modules下的一个目录.

48. 去掉引导区内的lilo信息
安装lilo后如果硬盘数量或分区情况有改变的话将导致硬盘不能启动,这时只需用软盘启动DOS再运行fdisk/mbr即可.

49. 把DOS/Windows改为缺省操作系统
RedHat把Linux作为lilo缺省操作系统,即出现 boot: 提示符后直接回车启动Linux.如果想改为DOS/Windows,修改文件/etc/lilo.conf,把有关启动DOS的部分放在前面,再运行一 次lilo即可.也可以在lilo.conf的配置文件前面加上 Default=dos 其中DOS是DOS/Windows的label

50. 如何使用.iso文件
许多Linux发行版本都有.iso的光盘镜像文件,可以用来刻录光盘.我们也可以在Linux系统下直接使用.  mount -t iso9660 xxxxx.iso /any/path/if/u/like -o loop

51. 显示文件的类型
用命令 file 可以使你知道某个文件究竟是ELF格式的可执行文件,还是shell script文件或是其他的什么格式.  file filename

52. 解压.tar.gz文件
xxxx.tar.gz文件使用tar带zxvf参数,可以一次解压开.  tar zxvf xxxx.tar.gz

53. 后台运行程序
可以在程序后面加”&”符号,让程序在后台运行.例如: 你想用updatedb更新文件路径数据库,又不影响你其他的工作.可以:  updatedb &

54. 强行退出 X
有时候在 X 里由于程序出错鼠标键盘都不起作用,这时候不用着急,因为在Linux下几乎不会像在Win 95里那样恶性死机,你只须同时按下Ctrl+Alt+BackSpace键就可以回到字符界面下了.

55. 压缩可执行文件
可以使用gzexe压缩可执行文件,压缩后的可执行文件仍然可以直接执行.使用本方法可以达到节省磁盘空间的目的(如果你真的需要的话).  gzexe gawk

56. 处理文件名内含有特殊字符的文件
如果有一个文件名叫-file,如果想删除它,键入 rm -file 会显示invalid option,原来由于文件名的第一个字符为”-“,Linux把文件名当做选项了,可以加–解决这个问题,如rm — -file.如果是其他特殊字符的话可以在特殊字符前加一个\,或者用双引号把整个文件名括起来.

57. 快速进入目录
键入 cd ~ 可进入用户的home目录;键入 cd – 可进入上一个进入的目录.

想全部删除以.开头的file或dir时你会如何干?
Wrong-> rm -r /tmp/.*
Correct-> rm -r /tmp/\.*

58. 修改网卡MAC地址
ifconfig eth0 down
ifconfig eth0 hw ether 00:AA:BB:CCD:EE
ifconfig eth0 up
上面的是临时性的你可以加入rc.local让它开机自动执行

59. 查看网卡工作状态
#mii-tool -v
eth0: no link
product info: vendor 00:00:00, model 0 rev 0
basic mode: autonegotiation enabled
basic status: no link
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
SIOCGMIIPHY on ‘eth1’ failed: Operation not supported

60. 如何解决sendmail和sm-client启动爆慢的问题!
造成sendmail和sm-client启动慢是因为解析的问题,解决方法将自己的主机名加入/etc/hosts中即可,例如我的主机名是linuxbox.localdomain则/etc/hosts中应该有一条
192.168.100.1 linuxbox.localdomain linuxbox

61. 信息加蓝色标记的sed语法…
sed -e “s/^-.*/[color=blue]&[\/color]/g” tip>./new

62. 将一个服务加到自启动运行等级中
chkconfig –add httpd
chkconfig –level 3 httpd on
就是把httpd加到chkconfig管理中,并加在第三层启动

63. 在终端下调音量
aumix

64. 将man文件导出为文件并去掉控制符
man command | col -b >col.txt

65. col -b就是去掉控制符的

66. 查看文件夹大小
du ./ –max-depth=1
–max-depth=1是控制显示深度

67. 光驱弹出,弹入
eject -r 弹出
eject -t 弹入

68. 显示最近登入用户
last

69. chkconfig 可以设置系统启动配置
chkconfig httpd on
chkconfig vsftpd on
…….

70. service 可以控制服务的起停
service vsftpd restart
service sendmail stop
……

71. 禁止文件写(包括root)
chattr +i filename

72. 以实时滚动方式查看系统syslog
tail -f /var/log/messages

73. 清空日志:
cat /dev/null > *.log
可加在crontab中完成日志的清空作业。

74. 杀死所有俱指定名字的进程
killall processname

75. 查找含特定字符串的文件
例如查找当前目录下含有”the string you want find…”字符串的文件
find <路径> [-name xxx] | xargs grep “字串” …

76. 查看进程
ps -e
ps -ef
是不同的.你会发现不同的当前run的name.如果发现不同,就说明有可能有人在你的机器作了一些动作

77. 利用xargs对管道输出的信息使用特定程序进行处理
find ~root|xargs chmod a-x

78. 列出远程主机(windows)的共享目录
smbclient -L X.X.X.X(IP) -U 用户名

79. 把远程主机的共享目录temp挂到/mnt
mount -t smbfs -o username=用户名 //X.X.X.X(IP)/temp /mnt

80. 查看win32(fat)分区
fdisk -l (列出分区)(例)/dev/hda6 5000000 fat32
我们要看到这个分区,则:
mkdir win_fat
mount -t vfat /dev/hda6 /win_fat

81. 查找
文件夹
find /path/ \( -type d -name “.*” -exec mv {} ./path \; \)
文件
find /path/ \( -type f -name “.*” -exec mv {} /path/ \; \)

82. 显示该进程打开的文件
lsof -p pid

83. 显示连接打开的文件
lsof -i ◎[ip|hostname] port

84. 显示打开这个目录的文件
lsof directory
(可以在想umount某一目录不成功的时候,查看是不是被别的文件打开了)

85. 显示打开这个文件的进程
lsof file

86. 在ksh下用vi来编辑所有执行过的命令
ksh下执行set -o vi
或者在别的shell下执行ksh -o vi

87. more或者man的时候可以直接使用vi中的一些操作
比如j,k,CTRL+f CTRL+b,/ 等等

88. 想把man的内容导出到文本么?
man ls | col -b >a.txt

89. csh下”^”的一个小用法
% touch 11
% ^11^22
touch 22
%
不过只能替换第一个匹配到的字符串,第二个就匹配不到了

90. tar+compress
tar cvf – ./dir | compress -c >dir.tar.Z
uncompress -c dir.tar.Z|tar xvf –

91. 当前目录下文件太多,用grep会报参数超长…
ls -al|wc -l
12323
grep 123123123 *
Arguments too long.
find . -name “*” | xargs grep 123123123

92. 搜索两个字符串(AAA 与 BBB)很简单, 用管道就成
grep AAA file |grep BBB = cat file|grep AAA|grep BBB
搜索两个字符串(AAA 或 BBB),可以做两次 grep AAA file, grep BBB file
也可以一气呵成:cat file |fgrep ‘AAA (回车!)
grep -E ‘AAA|BBB’ file-name

93. 查看系统中已有的用户
cut -f1 -d: /etc/passwd

94. touch filename
如果filename已存在,则改变文件的日期、时间;
如果filename不存在,则创建一个新的空文件。

95. du -sm <dirname> 察看目录大小

96. num-lock default on
any of /etc/rc.d/*
for t in 1 2 3 4 5 6 7 8
do
setleds +num < /dev/ttyt > /dev/null
done