Linux常用的网络命令
[table=98%][tr][td=2,1][size=5]Linux常用的网络命令[/size][/td][/tr][tr=#f8f8f8][td=2,1][size=5][/size][/td][/tr][tr=#eeeeee][td=2,1][size=5][/size][/td][/tr][tr][td=2,1][size=5][/size][/td][/tr][tr][td=2,1][size=5][/size][/td][/tr][tr][td=2,1][table=468][size=5][/size][tr][td][size=5][/size][/td][/tr][/table][/td][/tr][tr][td=2,1][align=right][align=center][size=5][/size] [/align][/align][/td][/tr][tr][td=2,1][size=5][b]网络参数设置命令[/b] [/size][size=5]任何时刻如果你想要做好自己的网络参数设置,包括IP参数、路由参数与无线网络等,就得要了解下面这些相关的命令才行。其中Route及ip这两条命令是比较重要的。当然,比较早期的用法,我们都是使用ifconfig的。[/size][size=5]· ifconfig:查询、设置网卡与IP网段等相关参数。[/size]
[size=5]· ifup、ifdown:这两个文件是Script,通过更简单的方式来启动网络接口。 [/size]
[size=5]· Route:查询、设置路由表(Route table)。[/size]
[size=5]· ip:复合式的命令,可以直接修改上述命令提到的功能。!]O:GUTGe~`T
[b] ifconfig、ifup、ifdown[/b][/size]
[size=5]这3个命令的用途都是启动网络接口,不过,ifup与ifdown仅就 /etc/sysconfig/network- scripts内的ifcfg-ethx(x为数字)进行启动或关闭的操作,并不能直接修改网络参数,除非手动调整ifcfg-ethx文件才行。至于ifconfig则可以直接手动给予某个接口IP或调整其网络参数。下面我们就分别来谈一谈。[/size])h(S)D_}E
[b][size=5]1. ifconfig[/size][/b],@ P^ V+M&fK
[size=5]ifconfig主要是可以手动启动、观察与修改网络接口的相关参数,可以修改的参数很多,包括IP参数以及MTU等都可以修改,它的语法如下: [/size].A'i|M1E,gt)t{{
[table=400][tr][td][size=5][root@linux ~]# ifconfig {interface} {up|down} <== 观察与启动接口[root@linux ~]# ifconfig interface {options} <== 设置与修改接口参数:Interface,网卡接口代号,包括 eth0、eth1、ppp0 等Options,可以接的参数,包括如下: Up或down,启动 (up) 或关闭 (down) 该网络接口(不涉及任何参数) mtu,可以设置不同的 MTU 数值,例如MTU 1500 (单位为 byte) netmask,就是子屏蔽网络 broadcast,就是广播地址范例:范例一:观察所有的网络接口(直接输入 ifconfig)[root@linux ~]# ifconfigeth0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2 inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::20f:eaff:fe73:682/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3439 errors:0 dropped:0 overruns:0 frame:0 TX packets:2735 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:646935 (631.7 KiB) TX bytes:562313 (549.1 KiB) Interrupt:209 Memory:fb000000-0[/size][/td][/tr][/table]#lJ3~ RyzQP,At;a6qu
[size=5]一般来说,直接输入ifconfig就会列出目前已经被启动的卡,不论这个卡是否有设置IP,都会被显示出来。而如果是输入ifconfig eth0,则会显示出这个接口的相关数据,而不管该接口是否启动。所以,如果你想要知道某个网卡的Hardware Address,直接输入“ifconfig"网络接口代号"”即可。至于上述代码中出现的各项数据是这样的(数据排列由上而下、由左而右)。[/size]7rQV"V4Z-uKU]
[size=5]· eth0:网卡的代号,也有lo这个loopback。 [/size]1Tp#?*x)Eo
[size=5]· HWaddr:网卡的硬件地址,习惯称为MAC。 [/size]EYU~"jWR w3Ga
[size=5]· inet addr:IPv4的IP地址,后续的Bcase、Mask分别代表的是Broadcast与Netmask。 [/size]AU-M"H:P U]
[size=5]· inet6 addr:是IPv6的版本的IP,我们没有使用,所以略过。[/size]
[size=5]· RX:那一行代表的是网络由启动到目前为止的数据包接收情况,packets代表数据包数、errors代表数据包发生错误的数量、dropped代表数据包由于有问题而遭丢弃的数量等。[/size]
[size=5]· TX:与RX相反,为网络由启动到目前为止的传送情况。 [/size]
[size=5]· collisions:代表数据包碰撞的情况,如果发生太多次,表示你的网络状况不太好。 [/size]o+A#S!i'a4Lj6|
[size=5]· txqueuelen:代表用来传输数据的缓冲区的储存长度。 [/size]!T:@%^'I1o(l
[size=5]· RX Bytes、TX Bytes:总传送、接收的字节总量。 [/size]
[size=5]· Interrupt、Memory:网卡硬件的数据,IRQ岔断与内存地址。[/size]`4S8w,vhcm0dY*zJ.|
[size=5]通过观察上述的资料,大致上可以了解到你的网络情况,尤其是RX、TX内的error数量,以及是否发生严重的collision情况,都是需要注意的。 [/size]B:E9n/D;O,p"Sd
[table=400][tr][td][size=5]范例二:暂时修改网络接口[root@linux ~]# ifconfig eth0 192.168.100.100# 如果不加任何其他参数,则系统会依照该 IP 所在的 class 范围,# 自动地计算出 netmask 以及 network, broadcast 等 IP 参数[root@linux ~]# ifconfig eth0 192.168.100.100 netmask 255.255.255.128 \> mtu 8000 # 设置网络接口,同时设置 MTU 的数值[root@linux ~]# ifconfig eth0 MTU 9000# 仅修改该接口的 MTU 数值,其他的保持不动[root@linux ~]# ifconfig eth0:0 192.168.50.50# 仔细看那个接口, eth0:0 。那就是在该网络接口上,再仿真一个网络接口,# 亦即是在一个网卡上面设置多个 IP 的意思啦[root@linux ~]# ifconfigeth0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2 inet addr:192.168.10.100 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3669 errors:0 dropped:0 overruns:0 frame:0 TX packets:2892 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:667547 (651.9 KiB) TX bytes:584799 (571.0 KiB) Interrupt:209 Memory:fb000000-0eth0:0 Link encap:Ethernet HWaddr 00:0F:EA:A3:06:A2 inet addr:192.168.200.2 Bcast:192.168.200.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:209 Memory:fb000000-0# 仔细看,是否与硬件有关的信息都相同。没错。因为是同一个网卡。[root@linux ~]# ifconfig eth0:0 down# 关掉 eth0:0 这个接口。如果想要启动 eth1 ,并且不设置任何网络参数# ifconfig eth1 up 就可以实现[root@linux ~]# /etc/init.d/network restart# 刚刚设置的数据全部失效,会以 ifcfg-ethx 的设置为主[/size][/td][/tr][/table][size=5]使用ifconfig可以暂时用手动来设置或修改某个适配卡的相关功能,并且也可以通过eth0:0这种虚拟的网络接口来设置一张网卡上面的多个IP。手动的方式是比较简单。而且设置错误也没有关系,因为我们可以利用 /etc/init.d/network restart来重新启动整个网络接口,那么之前手动的设置数据会全部失效。另外,要启动某个网络接口,但又不让它具有IP参数时,直接给它ifconfig eth0 up即可。这个操作经常在无线网卡当中进行,因为我们需要启动无线网卡让它去检测AP存在与否。[/size]9B~+m6{1ZMW
[b][size=5]2. ifup、ifdown[/size][/b]|B-G:D5E t K
[size=5]实时地手动修改一些网络接口参数,可以利用ifconfig来实现,如果是要直接以配置文件,亦即是在 /etc/sysconfig/network-scripts里面的ifcfg-ethx等文件的设置参数来启动的话,那就得要通过ifdown或ifup来实现了。 [/size]
[table=400][tr][td][size=5][root@linux ~]# ifup {interface}[root@linux ~]# ifdown {interface}[root@linux ~]# ifup eth0[/size][/td][/tr][/table][size=5]ifup与ifdown真是太简单了。这两个程序其实是script而已,它会直接到 /etc/ sysconfig/network-scripts目录下搜索对应的配置文件,例如ifup eth0,它会找出ifcfg-eth0这个文件的内容,然后加以设置。关于ifcfg-eth0的设置请参考前一章连上Internet的说明。[/size]n q)d"S8}r0?[3a
[size=5]不过,由于这两个程序主要是搜索设置文件(ifcfg-ethx)来进行启动与关闭的,所以在使用前请确定ifcfg-ethx是否真的存在于正确的目录内,否则会启动失败。另外,如果以ifconfig eth0来设置或者是修改了网络接口后,就无法再以ifdown eth0的方式来关闭了。因为ifdown会分析比较目前的网络参数与ifcfg-eth0是否相符,不符的话,就会放弃这次操作。因此,使用ifconfig修改完毕后,应该要以ifconfig eth0 down才能够关闭该接口。5\_0K\/_5K_.B
[/size][size=5][b]路由修改route
[/b]我们在网络基础的时候谈过关于路由的问题,两台主机之间一定要有路由才能够互通TCP/IP的协议,否则就无法进行联机。一般来说,只要有网络接口,该接口就会产生一个路由,例如,在鸟哥实验室内部的主机有一个eth0及lo,所以: [/size]
[table=400][tr][td][size=5][root@linux ~]# route [-nee][root@linux ~]# route add [-net|-host] [网段或主机] netmask [mask] [gw|dev][root@linux ~]# route del [-net|-host] [网段或主机] netmask [mask] [gw|dev]观察的参数: -n,不要使用通信协议或主机名称,直接使用 IP 或 Port Number; -ee,使用更详细的信息来显示;增加 (add) 与删除 (del) 路由的相关参数; -net,表示后面接的路由为一个网段; -host,表示后面接的为连接到单台主机的路由; Netmask,与网段有关,可以设置 netmask 决定网段的大小; Gw,gateway 的简写,后续接的是 IP 的数值,与 dev 不同; Dev,如果只是要指定由哪一块网卡联机出去,则使用这个设置,后面接 eth0 等。范例一:单纯的观察路由状态[root@linux ~]# route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth00.0.0.0 192.168.10.30 0.0.0.0 UG 0 0 0 eth0[root@linux ~]# routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.10.0 * 255.255.255.0 U 0 0 0 eth0169.254.0.0 * 255.255.0.0 U 0 0 0 eth0default Server.cluster 0.0.0.0 UG 0 0 0 eth0[/size][/td][/tr][/table][size=5]在上面的例子中仔细观察route与route -n的输出结果,你可以发现有加-n参数的主要是显示出IP,至于使用route,显示的则是“主机名称”。也就是说,在默认的情况下,route会去找出该IP的主机名称,如果找不到呢?就会显示得迟钝(有点慢),所以说,鸟哥通常都直接使用route-n了。由上面看起来,我们也知道default = 0.0.0.0/0.0.0.0,而上面的信息有哪些你需要知道的呢?[/size]
[size=5]· Destination、Genmask:这两个术语就分别是Network与Netmask了。所以这两个东西就组合成为一个完整的网段了。[/size]
[size=5]· Gateway:该网段是通过哪个Gateway连接出去的?如果显示0.0.0.0表示该路由是直接由本机传送,亦即可以通过局域网的MAC直接传输;如果有显示IP的话,表示该路由需要经过路由器(网关)的帮忙才能够传送出去。 [/size]
[size=5]· Flags:总共有多个标记,代表的意义如下。[/size]
[size=5]Ø U(route is up):该路由是启动的。[/size]
[size=5]Ø H(target is a host):目标是一台主机(IP)而非网段。[/size]
[size=5]Ø G(use gateway):需要通过外部的主机来传递数据包。[/size]
[size=5]Ø R(reinstate route for dynamic routing):使用动态路由时,恢复路由信息的标记。[/size]
[size=5]Ø D(dynamically installed by daemon or redirect):已经由服务器或转port功能设置为动态路由。[/size]
[size=5]Ø M(modified from routing daemon or redirect):路由已经被修改了。[/size]
[size=5]Ø!(reject route):这个路由将不会被接受(用来阻止不安全的网段)。[/size]
[size=5]· Iface:这个路由传递数据包的接口。[/size]
[size=5]此外,观察一下上面的路由排列顺序,依序是由小网段(192.168.10.0/24是Class C),逐渐到大网段(169.254.0.0/16 是Class B),最后则是默认路由(0.0.0.0/0.0.0.0)。然后当我们要判断某个网络数据包应该如何传送的时候,该数据包会经由这个路由的过程来判断。例如,我上头仅有三个路由,若我有一个传往192.168.10.20的数据包要传递,那首先会找192.168.10.0/24这个网段的路由,找到了,就直接由eth0传送出去。[/size]QklJ1\[+S
[size=5]如果是传送到Yahoo的主机呢?Yahoo的主机IP是202.43.195.52,我通过判断不是192.168.10.0/24,也不是169.254.0.0/16,结果到达0/0时,传出去了,通过eth0将数据包传给192.168.10.30那台Gateway主机。所以说,路由是有顺序的。[/size]hdXe#PUNK
[size=5]因此当你重复设置多个同样的路由时,例如,在你的主机上的两张网卡设置为相同网段的IP时,会出现什么情况?会出现如下的情况:[/size]uU;R,D5h"S)q%_
[table=400][tr][td][size=5]Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1[/size][/td][/tr][/table][size=5]也就是说,由于路由是依照顺序来排列与传送的,所以不论数据包是由哪个接口(eth0、eth1)所接收,都会由上述的eth0传送出去,所以,在一台主机上面设置两个相同网段的IP本身没有什么意义。多此一举。除非是类似虚拟主机(Xen、VMware等软件)所架设的多主机,才会有这个必要。 [/size][table=400][tr][td][size=5]范例二:路由的增加与删除[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0# 上面这个操作可以删除掉 169.254.0.0/16 这个网段# 请注意,在删除的时候,需要将路由表上面出现的信息都写入# 包括netmask、dev 等参数[root@linux ~]# route add -net 192.168.100.0 \> netmask 255.255.255.0 dev eth0# 通过 route add 来增加一个路由。请注意,这个路由必须能够与你互通# 例如,如果我下达下面的命令就会显示错误:# route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254# 因为我的环境内仅有 192.168.10.100 这个 IP ,所以不能与 192.168.200.254# 这个网段直接使用 MAC 互通 [root@linux ~]# route add default gw 192.168.10.30# 增加默认路由的方法。请注意,只要有一个默认路由就够了# 在这个地方如果你随便设置后,记得使用下面的命令重新设置你的网络# /etc/init.d/network restart[/size][/td][/tr][/table]
[size=5]如果是要进行路由的删除与增加,那就可以参考上面的例子了,其实,使用man route里面的信息就很丰富了。仔细查阅一下。你只要记得,当出现“SIOCADDRT: Network is unreachable”这个错误时,肯定是由于gw后面接的IP无法直接与你的网段沟通(Gateway并不在你的网段内),所以,赶紧检查一下输入的信息是否正确。
[b]ip[/b][/size][size=5]这里的ip是个命令,不是那个TCP/IP的IP。这个ip命令的功能可多了。基本上,它就是集合了ifconfig与route这两个命令了,不过ip可以实现的功能却又多得多,真是个相当厉害的命令。如果你有兴趣的话,请自行vi /sbin/ifup,就知道整个ifup就是利用ip这个命令来实现的。好了,如何使用呢?让我们来看看。 [/size]
[table=400][tr][td][size=5][root@linux ~]# ip [option] [操作] [命令]参数:Option,设置的参数,主要有: -s,显示出该设备的统计数据(statistics),例如总接受数据包数等;操作,亦即是可以针对哪些网络参数进行操作,包括有: Link,关于设备(device) 的相关设置,包括MTU、MAC 地址等等 addr/address,关于额外的 IP 协议,例如多 IP 的实现等等; route,与路由有关的相关设置[/size][/td][/tr][/table][size=5]由上面的语法我们可以知道,ip除了可以设置一些基本的网络参数之外,还能够进行额外的IP协议,包括多IP的实现,真是太完美了。下面我们就分3个部分(link、addr、route)来介绍这个ip命令吧。[/size] i+?AH&BNS ]I
[size=5][b]1. 关于设备接口(device)的相关设置:ip link[/b] [/size]
[size=5]ip link可以设置与设备(device)有关的相关设置,包括MTU以及该网络接口的MAC等,当然也可以启动(up)或关闭(down)某个网络接口了。整个语法是这样的: [/size]s9dEVp*T WoM
[table=400][tr][td][size=5][root@linux ~]# ip [-s] link show <== 单纯的查阅该设备相关的信息[root@linux ~]# ip link set [device] [操作与参数]参数:Show,仅显示出这个设备的相关内容,如果加上 -s 会显示更多统计数据Set,可以开始设置项目, device 指的是 eth0、eth1 等等接口代号操作与参数,包括有下面的这些操作 up|down,启动 (up) 或关闭 (down) 某个接口,其他参数使用默认的以太网 Address,如果这个设备可以更改 MAC 的话,用这个参数修改 Name,给予这个设备一个特殊的名字 Mtu,就是最大传输单元范例一:显示出所有的接口信息[root@linux ~]# ip link show1: lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: eth0:
mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff3: sit0: mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0[root@linux ~]# ip -s link show eth02: eth0:
mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 484011792 2247372 0 0 0 0 TX: bytes packets errors dropped carrier collsns 2914104290 2867753 0 0 0 0[/size][/td][/tr][/table][size=5]使用ip link show可以显示出整个设备接口的硬件相关信息,如上所示,包括网卡地址(MAC)、MTU等,比较有趣的应该是那个sit0的接口了,那个sit0的接口是用在IPv4及IPv6的数据包转换上的,对于我们仅使用IPv4的网络是没有作用的。lo及sit0都是主机内部所自行设置的。而如果加上 -s的参数后,则这个网卡的相关统计信息就会被列出来,包括接收(RX)及传送(TX)的数据包数量等,详细的内容与ifconfig输出的结果是相同的。[/size] Lx/C.G.}
[table=400][tr][td][size=5]范例二:启动、关闭与设置设备的相关信息[root@linux ~]# ip link set eth0 up# 启动 eth0 这个设备接口。[root@linux ~]# ip link set eth0 down# 就关闭啊。简单得要命[root@linux ~]# ip link set eth0 mtu 1000# 更改 MTU 的值,实现 1000 bytes,单位就是 bytes[/size][/td][/tr][/table][size=5]使用ifconfig也可以更新网卡的MTU,没什么不一样的地方,不过,如果是要更改网卡代号、MAC地址的信息的话,那可就得使用ip了。不过,设置前得要先关闭该网卡,否则会不成功。如下所示: [/size]:I)Q v.`,Pd
[table=400][tr][td][size=5]范例三:修改网卡代号、MAC 等参数[root@linux ~]# ip link set eth0 name vbirdSIOCSIFNAME: Device or resource busy# 因为该设备目前是启动的,所以不能这样设置。你应该这样做:[root@linux ~]# ip link set eth0 down <==关闭接口[root@linux ~]# ip link set eth0 name vbird <==重新设置[root@linux ~]# ip link show <==观察一下2. vbird: