Linux常用的网络命令.docx
《Linux常用的网络命令.docx》由会员分享,可在线阅读,更多相关《Linux常用的网络命令.docx(39页珍藏版)》请在冰豆网上搜索。
Linux常用的网络命令
Linux常用的网络命令
网络参数设置命令
任何时刻如果你想要做好自己的网络参数设置,包括IP参数、路由参数与无线网络等,就得要了解下面这些相关的命令才行。
其中Route及ip这两条命令是比较重要的。
当然,比较早期的用法,我们都是使用ifconfig的。
· ifconfig:
查询、设置网卡与IP网段等相关参数。
· ifup、ifdown:
这两个文件是Script,通过更简单的方式来启动网络接口。
· Route:
查询、设置路由表(Routetable)。
· ip:
复合式的命令,可以直接修改上述命令提到的功能。
ifconfig、ifup、ifdown
这3个命令的用途都是启动网络接口,不过,ifup与ifdown仅就/etc/sysconfig/network-scripts内的ifcfg-ethx(x为数字)进行启动或关闭的操作,并不能直接修改网络参数,除非手动调整ifcfg-ethx文件才行。
至于ifconfig则可以直接手动给予某个接口IP或调整其网络参数。
下面我们就分别来谈一谈。
1.ifconfig
ifconfig主要是可以手动启动、观察与修改网络接口的相关参数,可以修改的参数很多,包括IP参数以及MTU等都可以修改,它的语法如下:
[root@linux~]#ifconfig{interface}{up|down}<==观察与启动接口
[root@linux~]#ifconfiginterface{options}<==设置与修改接口
参数:
Interface,网卡接口代号,包括eth0、eth1、ppp0等
Options,可以接的参数,包括如下:
Up或down,启动(up)或关闭(down)该网络接口(不涉及任何参数)
mtu,可以设置不同的MTU数值,例如MTU1500(单位为byte)
netmask,就是子屏蔽网络
broadcast,就是广播地址
范例:
范例一:
观察所有的网络接口(直接输入ifconfig)
[root@linux~]#ifconfig
eth0Linkencap:
EthernetHWaddr00:
0F:
EA:
A3:
06:
A2
inetaddr:
192.168.10.100Bcast:
192.168.10.255
Mask:
255.255.255.0
inet6addr:
fe80:
:
20f:
eaff:
fe73:
682/64Scope:
Link
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
3439errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
2735errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
1000
RXbytes:
646935(631.7KiB)TXbytes:
562313(549.1KiB)
Interrupt:
209Memory:
fb000000-0
一般来说,直接输入ifconfig就会列出目前已经被启动的卡,不论这个卡是否有设置IP,都会被显示出来。
而如果是输入ifconfigeth0,则会显示出这个接口的相关数据,而不管该接口是否启动。
所以,如果你想要知道某个网卡的HardwareAddress,直接输入“ifconfig"网络接口代号"”即可。
至于上述代码中出现的各项数据是这样的(数据排列由上而下、由左而右)。
· eth0:
网卡的代号,也有lo这个loopback。
· HWaddr:
网卡的硬件地址,习惯称为MAC。
· inetaddr:
IPv4的IP地址,后续的Bcase、Mask分别代表的是Broadcast与Netmask。
· inet6addr:
是IPv6的版本的IP,我们没有使用,所以略过。
· RX:
那一行代表的是网络由启动到目前为止的数据包接收情况,packets代表数据包数、errors代表数据包发生错误的数量、dropped代表数据包由于有问题而遭丢弃的数量等。
· TX:
与RX相反,为网络由启动到目前为止的传送情况。
· collisions:
代表数据包碰撞的情况,如果发生太多次,表示你的网络状况不太好。
· txqueuelen:
代表用来传输数据的缓冲区的储存长度。
· RXBytes、TXBytes:
总传送、接收的字节总量。
· Interrupt、Memory:
网卡硬件的数据,IRQ岔断与内存地址。
通过观察上述的资料,大致上可以了解到你的网络情况,尤其是RX、TX内的error数量,以及是否发生严重的collision情况,都是需要注意的。
范例二:
暂时修改网络接口
[root@linux~]#ifconfigeth0192.168.100.100
#如果不加任何其他参数,则系统会依照该IP所在的class范围,
#自动地计算出netmask以及network,broadcast等IP参数
[root@linux~]#ifconfigeth0192.168.100.100netmask255.255.255.128\
>mtu8000
#设置网络接口,同时设置MTU的数值
[root@linux~]#ifconfigeth0MTU9000
#仅修改该接口的MTU数值,其他的保持不动
[root@linux~]#ifconfigeth0:
0192.168.50.50
#仔细看那个接口,eth0:
0。
那就是在该网络接口上,再仿真一个网络接口,
#亦即是在一个网卡上面设置多个IP的意思啦
[root@linux~]#ifconfig
eth0Linkencap:
EthernetHWaddr00:
0F:
EA:
A3:
06:
A2
inetaddr:
192.168.10.100Bcast:
192.168.10.255Mask:
255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
RXpackets:
3669errors:
0dropped:
0overruns:
0frame:
0
TXpackets:
2892errors:
0dropped:
0overruns:
0carrier:
0
collisions:
0txqueuelen:
1000
RXbytes:
667547(651.9KiB)TXbytes:
584799(571.0KiB)
Interrupt:
209Memory:
fb000000-0
eth0:
0Linkencap:
EthernetHWaddr00:
0F:
EA:
A3:
06:
A2
inetaddr:
192.168.200.2Bcast:
192.168.200.255Mask:
255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
Interrupt:
209Memory:
fb000000-0
#仔细看,是否与硬件有关的信息都相同。
没错。
因为是同一个网卡。
[root@linux~]#ifconfigeth0:
0down
#关掉eth0:
0这个接口。
如果想要启动eth1,并且不设置任何网络参数
#ifconfigeth1up就可以实现
[root@linux~]#/etc/init.d/networkrestart
#刚刚设置的数据全部失效,会以ifcfg-ethx的设置为主
使用ifconfig可以暂时用手动来设置或修改某个适配卡的相关功能,并且也可以通过eth0:
0这种虚拟的网络接口来设置一张网卡上面的多个IP。
手动的方式是比较简单。
而且设置错误也没有关系,因为我们可以利用/etc/init.d/networkrestart来重新启动整个网络接口,那么之前手动的设置数据会全部失效。
另外,要启动某个网络接口,但又不让它具有IP参数时,直接给它ifconfigeth0up即可。
这个操作经常在无线网卡当中进行,因为我们需要启动无线网卡让它去检测AP存在与否。
2.ifup、ifdown
实时地手动修改一些网络接口参数,可以利用ifconfig来实现,如果是要直接以配置文件,亦即是在/etc/sysconfig/network-scripts里面的ifcfg-ethx等文件的设置参数来启动的话,那就得要通过ifdown或ifup来实现了。
[root@linux~]#ifup{interface}
[root@linux~]#ifdown{interface}
[root@linux~]#ifupeth0
ifup与ifdown真是太简单了。
这两个程序其实是script而已,它会直接到/etc/sysconfig/network-scripts目录下搜索对应的配置文件,例如ifupeth0,它会找出ifcfg-eth0这个文件的内容,然后加以设置。
关于ifcfg-eth0的设置请参考前一章连上Internet的说明。
不过,由于这两个程序主要是搜索设置文件(ifcfg-ethx)来进行启动与关闭的,所以在使用前请确定ifcfg-ethx是否真的存在于正确的目录内,否则会启动失败。
另外,如果以ifconfigeth0来设置或者是修改了网络接口后,就无法再以ifdowneth0的方式来关闭了。
因为ifdown会分析比较目前的网络参数与ifcfg-eth0是否相符,不符的话,就会放弃这次操作。
因此,使用ifconfig修改完毕后,应该要以ifconfigeth0down才能够关闭该接口。
路由修改route
我们在网络基础的时候谈过关于路由的问题,两台主机之间一定要有路由才能够互通TCP/IP的协议,否则就无法进行联机。
一般来说,只要有网络接口,该接口就会产生一个路由,例如,在鸟哥实验室内部的主机有一个eth0及lo,所以:
[root@linux~]#route[-nee]
[root@linux~]#routeadd[-net|-host][网段或主机]netmask[mask][gw|dev]
[root@linux~]#routedel[-net|-host][网段或主机]netmask[mask][gw|dev]
观察的参数:
-n,不要使用通信协议或主机名称,直接使用IP或PortNumber;
-ee,使用更详细的信息来显示;
增加(add)与删除(del)路由的相关参数;
-net,表示后面接的路由为一个网段;
-host,表示后面接的为连接到单台主机的路由;
Netmask,与网段有关,可以设置netmask决定网段的大小;
Gw,gateway的简写,后续接的是IP的数值,与dev不同;
Dev,如果只是要指定由哪一块网卡联机出去,则使用这个设置,后面接eth0等。
范例一:
单纯的观察路由状态
[root@linux~]#route-n
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.10.00.0.0.0255.255.255.0U000eth0
169.254.0.00.0.0.0255.255.0.0U000eth0
0.0.0.0192.168.10.300.0.0.0UG000eth0
[root@linux~]#route
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.10.0*255.255.255.0U000eth0
169.254.0.0*255.255.0.0U000eth0
defaultServer.cluster0.0.0.0UG000eth0
在上面的例子中仔细观察route与route-n的输出结果,你可以发现有加-n参数的主要是显示出IP,至于使用route,显示的则是“主机名称”。
也就是说,在默认的情况下,route会去找出该IP的主机名称,如果找不到呢?
就会显示得迟钝(有点慢),所以说,鸟哥通常都直接使用route-n了。
由上面看起来,我们也知道default=0.0.0.0/0.0.0.0,而上面的信息有哪些你需要知道的呢?
· Destination、Genmask:
这两个术语就分别是Network与Netmask了。
所以这两个东西就组合成为一个完整的网段了。
· Gateway:
该网段是通过哪个Gateway连接出去的?
如果显示0.0.0.0表示该路由是直接由本机传送,亦即可以通过局域网的MAC直接传输;如果有显示IP的话,表示该路由需要经过路由器(网关)的帮忙才能够传送出去。
· Flags:
总共有多个标记,代表的意义如下。
ØU(routeisup):
该路由是启动的。
ØH(targetisahost):
目标是一台主机(IP)而非网段。
ØG(usegateway):
需要通过外部的主机来传递数据包。
ØR(reinstateroutefordynamicrouting):
使用动态路由时,恢复路由信息的标记。
ØD(dynamicallyinstalledbydaemonorredirect):
已经由服务器或转port功能设置为动态路由。
ØM(modifiedfromroutingdaemonorredirect):
路由已经被修改了。
Ø!
(rejectroute):
这个路由将不会被接受(用来阻止不安全的网段)。
· Iface:
这个路由传递数据包的接口。
此外,观察一下上面的路由排列顺序,依序是由小网段(192.168.10.0/24是ClassC),逐渐到大网段(169.254.0.0/16是ClassB),最后则是默认路由(0.0.0.0/0.0.0.0)。
然后当我们要判断某个网络数据包应该如何传送的时候,该数据包会经由这个路由的过程来判断。
例如,我上头仅有三个路由,若我有一个传往192.168.10.20的数据包要传递,那首先会找192.168.10.0/24这个网段的路由,找到了,就直接由eth0传送出去。
如果是传送到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主机。
所以说,路由是有顺序的。
因此当你重复设置多个同样的路由时,例如,在你的主机上的两张网卡设置为相同网段的IP时,会出现什么情况?
会出现如下的情况:
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.10.00.0.0.0255.255.255.0U000eth0
192.168.10.00.0.0.0255.255.255.0U000eth1
也就是说,由于路由是依照顺序来排列与传送的,所以不论数据包是由哪个接口(eth0、eth1)所接收,都会由上述的eth0传送出去,所以,在一台主机上面设置两个相同网段的IP本身没有什么意义。
多此一举。
除非是类似虚拟主机(Xen、VMware等软件)所架设的多主机,才会有这个必要。
范例二:
路由的增加与删除
[root@linux~]#routedel-net169.254.0.0netmask255.255.0.0deveth0
#上面这个操作可以删除掉169.254.0.0/16这个网段
#请注意,在删除的时候,需要将路由表上面出现的信息都写入
#包括netmask、dev等参数
[root@linux~]#routeadd-net192.168.100.0\
>netmask255.255.255.0deveth0
#通过routeadd来增加一个路由。
请注意,这个路由必须能够与你互通
#例如,如果我下达下面的命令就会显示错误:
#routeadd-net192.168.200.0netmask255.255.255.0gw192.168.200.254
#因为我的环境内仅有192.168.10.100这个IP,所以不能与192.168.200.254
#这个网段直接使用MAC互通
[root@linux~]#routeadddefaultgw192.168.10.30
#增加默认路由的方法。
请注意,只要有一个默认路由就够了
#在这个地方如果你随便设置后,记得使用下面的命令重新设置你的网络
#/etc/init.d/networkrestart
如果是要进行路由的删除与增加,那就可以参考上面的例子了,其实,使用manroute里面的信息就很丰富了。
仔细查阅一下。
你只要记得,当出现“SIOCADDRT:
Networkisunreachable”这个错误时,肯定是由于gw后面接的IP无法直接与你的网段沟通(Gateway并不在你的网段内),所以,赶紧检查一下输入的信息是否正确。
ip
这里的ip是个命令,不是那个TCP/IP的IP。
这个ip命令的功能可多了。
基本上,它就是集合了ifconfig与route这两个命令了,不过ip可以实现的功能却又多得多,真是个相当厉害的命令。
如果你有兴趣的话,请自行vi/sbin/ifup,就知道整个ifup就是利用ip这个命令来实现的。
好了,如何使用呢?
让我们来看看。
[root@linux~]#ip[option][操作][命令]
参数:
Option,设置的参数,主要有:
-s,显示出该设备的统计数据(statistics),例如总接受数据包数等;
操作,亦即是可以针对哪些网络参数进行操作,包括有:
Link,关于设备(device)的相关设置,包括MTU、MAC地址等等
addr/address,关于额外的IP协议,例如多IP的实现等等;
route,与路由有关的相关设置
由上面的语法我们可以知道,ip除了可以设置一些基本的网络参数之外,还能够进行额外的IP协议,包括多IP的实现,真是太完美了。
下面我们就分3个部分(link、addr、route)来介绍这个ip命令吧。
1.关于设备接口(device)的相关设置:
iplink
iplink可以设置与设备(device)有关的相关设置,包括MTU以及该网络接口的MAC等,当然也可以启动(up)或关闭(down)某个网络接口了。
整个语法是这样的:
[root@linux~]#ip[-s]linkshow<==单纯的查阅该设备相关的信息
[root@linux~]#iplinkset[device][操作与参数]
参数:
Show,仅显示出这个设备的相关内容,如果加上-s会显示更多统计数据
Set,可以开始设置项目,device指的是eth0、eth1等等接口代号
操作与参数,包括有下面的这些操作
up|down,启动(up)或关闭(down)某个接口,其他参数使用默认的以太网
Address,如果这个设备可以更改MAC的话,用这个参数修改
Name,给予这个设备一个特殊的名字
Mtu,就是最大传输单元
范例一:
显示出所有的接口信息
[root@linux~]#iplinkshow
1:
lo:
mtu16436qdiscnoqueue
link/loopback00:
00:
00:
00:
00:
00brd00:
00:
00:
00:
00:
00
2:
eth0:
mtu1500qdiscpfifo_fastqlen1000
link/ether00:
50:
fc:
22:
9a:
cbbrdff:
ff:
ff:
ff:
ff:
ff
3:
sit0:
mtu1480qdiscnoop
link/sit0.0.0.0brd0.0.0.0
[root@linux~]#ip-slinkshoweth0
2:
eth0:
mtu1500qdiscpfifo_fastqlen1000
link/ether00:
50:
fc:
22:
9a:
cbbrdff:
ff:
ff:
ff:
ff:
ff
RX:
bytespacketserrorsdroppedoverrunmcast
48401179222473720000
TX:
bytespacketserrorsdroppedcarriercollsns
291410429028677530000
使用iplinkshow可以显示出整个设备接口的硬件相关信息,如上所示,包括网卡地址(MAC)、MTU等,比较有趣的应该是那个sit0的接口了,那个sit0的接口是用在IPv4及IPv6的数据包转换上的,对于我们仅使用IPv4的网络是没有作用的。
lo及sit0都是主机内部所自行设置的。
而如果加上-s的参数后,则这个网卡的相关统计信息就会被列出来,包括接收(RX)及传送(TX)的数据包数量等,详细的内容与ifconfig输出的结果是相同的。
范例二:
启动、关闭与设置设备的相关信息
[root@linux~]#iplinkseteth0up
#启动eth0这个设备接口。
[root@linux~]#iplinkseteth0down
#就关闭啊。
简单得要命
[root@linux~]#iplinkseteth0mtu1000
#更改MTU的值,实现1000bytes,单位就是bytes
使用ifconfig也可以更新网卡的MTU,没什么不一样的地方,不过,如果是要更改网卡代号、MAC地址的信息的话,那可就得使用ip了。
不过,设置前得要先关闭该网卡,否则会不成功。
如下所示:
范例三:
修改网卡代号、MAC等参数
[root@linux~]#iplinkseteth0namevbird
SIOCSIFNAME:
Deviceorresourcebusy
#因为该设备目前是启动的,所以不能这样设置。
你应该这样做:
[root@linux~]#iplinkseteth0down<==关闭接口
[root@linux~]#iplinkseteth0nam