『学了就忘』Linux基础命令 — 34、配置网络相关命令
1、配置网络常用命令
(1)配置IP地址
IP地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机进行数据通信,就必须配置唯一的公网IP地址。
配置IP地址有两种方法:
- 1)
setup
工具(Red Hat
系列专有) - 2)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
(手工修改配置文件)
提示:真正标准的修改IP地址的方式,还是第二种方式。
(2)网络服务
使用service
脚本来调度网络服务:
- 开启网络服务:
[rootelocalhost ~]# service network start
- 关闭网络服务:
[rootelocalhost ~]# service network stop
- 重启网络服务:
[rootelocalhost ~]# service network restart
直接执行网络服务的管理脚本:
各类服务脚本都存放在/etc/init.d
(或/etc/rc.d/init.d
)目录下,网络服务network
则在/etc/init.d
目录中。
- 启动网络服务:
/etc/init.d/network start
- 关闭网络服务:
/etc/init.d/network stop
- 重启网络服务:
/etc/init.d/network restart
说明:如果虚拟机需要桥接到有线网卡,并重启网络服务。也就是要把网络链接方式改成桥接模式。
(3)重置UUID
有的时候在重启网络的时候,最后一个不是绿色的确定,而是红色的失败,如下面描述:
# 重启网络
[root@DevOps ~]# service network restart
正在关闭接口etho:
关闭环回接口:
弹出界面 eth0:Determining if ip address 192.168.44.8 is already in use for device eth0..
[确定]
# 中文
[root@DevOps ~]# service network restart
正在关闭接口 eth0: [确定]
关闭环回接口: [确定]
弹出环回接口: [确定]
弹出界面 eth0:
正在决定 eth0 的 IP 信息...完成。
[确定]
- 是什么原因?
这里造成失败,可能最大的原因是IP地址冲突了,换个IP即可,也可以选择自动分配IP地址。(桥接模式在局域网内,很容易造成IP地址冲突,为什么,请看之前文章https://www.cnblogs.com/liuyuelinfighting/p/15484936.html)
如果换了好几个IP地址,重启网络服务,还不能解决上述问题,那可能就不是IP地址冲突了,可能就是UUID冲突。 - 什么是UUID?
UUID:唯一识别符,这个UUID是从Red Hat 6
系列出现的。会给你Linux系统上的分区、网卡都生成一串UUID符号。
这个UUID号是写在网卡配置文件中。也就是/etc/sysconfig/network-scripts/ifcfg-eth0
文件。
内容如下所示:
这UUID是一串16进制的字符串,重复的可能性几乎没有。[root@DevOps ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=00:0c:29:3f:81:04 TYPE=Ethernet `UUID=f9b5add2-688c-4b1b-a7cf-e1d0ba66adf3` ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp USERCTL=no PEERDNS=yes IPV6INIT=no
- 既然UUID重复的可能性几乎没有,那为什么会冲突呢?
因为我们现在操作的是虚拟机,有一些情景会造成两个虚拟机出现相同的UUID的情况。比如说快照和克隆。
你的真实机装Linux系统,或者手动安装的Linux虚拟机,都不会发生UUID冲突。
所以这个UUID冲突主要发生在虚拟机Linux系统中,并且有快照和克隆的时候。 - 如何解决?
复制镜像有可能需要重置UUID
1)在网卡配置文件中手动删除MAC地址行
[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
2)删除MAC地址和UUID绑定文件#删除的是第二行HWADDR(MAC地址) #因为UUID是依赖MAC地址计算出来的。 [root@DevOps ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 `HWADDR=00:0c:29:3f:81:04` TYPE=Ethernet UUID=f9b5add2-688c-4b1b-a7cf-e1d0ba66adf3 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp USERCTL=no PEERDNS=yes IPV6INIT=no
[root@localhost ~] # rm -rf/etc/udev/rules.d/70-persistent-net.rules
3)重启Linux
[rootelocalhost ~] # reboot
重启之后UUID就会重新计算,所计算出来的UUID,基本上没有可能在重复了。以上问题也就解决了。
2、ifconfig命令
ifconfig
命令的基本信息:
- 命令名称:
ifconfig
- 英文原意:
configure a network interface
- 所在路径:
/sbin/ifconfig
- 执行权限:超级用户。
- 功能描述:配置网络接口。
ifconfig
命令最主要的作用就是查看IP地址的信息,直接输入ifconfig
命令即可。
如下图所示:
注意:其中最主要的三个数据为IP地址、MAC地址、子网掩码。
3、ping命令
ping
是常用的网络命令,主要通过ICMP协议进行网络探测,测试网络中主机的通信情况。
(原理是我向对方发一个包,对方回复我了,证明这个网络是通的。)
(1)ping命令的基本信息
- 命令名称:
ping
- 英文原意:
send ICMP ECHO_REQUEST to network hosts
- 所在路径:
/bin/ping
- 执行权限:所有用户。
- 功能描述:向网络主机发送ICMP请求。
ping
命令的基本格式如下:
[root@localhost ~]# ping [选项] IP
选项:
-b:后面加入广播地址,用于对整个网段进行探测
-c次数:用于指定ping的次数
-s字节:指定探测包的大小
# 提示:Linux系统下用ctrl+c进行终止。
(2)例子:探测网段中的可用主机
在ping
命令中,可以使用-b
选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个IP地址地进行探测。例如:
#探测192.168.103.0/24网段中有多少可以通信的主机
[root@localhost ~]# ping -b -c 3 192.168.103.255
WARNING:pinging broadcast address PING 192.168.103.255(192.168.103.255)56(84)bytes of data.
64 bytes from 192.168.103.199:icmp seq=1 tt1=64 time=1.95 ms
64 bytes from 192.168.103.168:icmp seq=1 tt1=64 time=1.97 ms(DUP!)
64 bytes from 192.168.103.252:icmp seq=1 tt1=64 time=2.29 ms(DUP!)
..省略部分内容…
说明:
192.168.103.255:225
为广播地址,是询问103网段有多少个IP在,用于检查当前网段中有多少台电脑可以通信。
4、netstat 命令
netstat
是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。
在CentOS7.x
中netstat
命令默认没有安装,如果需要使用,需要安装net-snmp
和net-tools
软件包。(CentOS6中自动安装)
netstat
命令的基本信息:
- 命令名称:
netstat
- 英文原意:
Print network connections,routing tables,interface statistics,masquerade connections,and multicast memberships
- 所在路径:
/bin/netstat
- 执行权限:所有用户。
- 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。
netstat
命令格式如下:
[rootelocalhost ~]# netstat [选项]
选项:
-a:列出所有网络状态,包括 Socket程序
-c秒数:指定每隔几秒刷新一次网络状态
-n:使用IP地址和端口号显示,不使用域名与服务名
-p:显示PID和程序名
-t:显示使用TCP协议端口的连接状况-u:显示使用UDP协议端口的连接状况
-1:仅显示监听状态的连接
-r:显示路由表
使用1:查看本机开启的端口
这是本机最常用的方式,使用选项-tuln
。因为使用了-l
选项,所以只能看到监听状态的连接,而不能看到已经建立连接状态的连接。
例如:
这个命令的输出较多,简单说明一下:
Proto
:网络连接的协议,一般就是TCP协议或者UDP协议。Recv-Q
:表示接收到的数据。已经在本地的缓冲中,但是还没有被进程取走。Send-Q
:表示从本机发送,对方还没有收到的数据。依然在本地的缓冲中,一般是不具备ACK标志的数据包。Local Address
:本机的IP地址和端口号。Foreign Address
:远程主机的IP地址和端口号。State
:状态。常见的状态主要有以下几种。LISTEN
:监听状态,只有TCP协议需要监听,而UDP协议不需要监听。ESTABLISHED
:已经建立连接的状态。如果使用“-l”选项,则看不到已经建立连接的状态。SYNSENT
:SYN发起包,就是主动发起连接的数据包。SYNRECV
:接收到主动连接的数据包。FINWAIT1
:正在中断的连接。FINWAIT2
:已经中断的连接,但是正在等待对方主机进行确认。TIMEWAIT
:连接已经中断,但是套接字依然在网络中等待结束。CLOSED
:套接字没有被使用。
在这些状态中,我们最常用的就是LISTEN
和ESTABLISHED
状态,一种代表正在监听,另一种代表已经建立连接。
使用2:查看本机有哪些程序开启的端口
如果使用-p
选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的PID。
例如:
使用3:查看所有连接
使用选项-an
可以查看所有连接,包括监听状态的连接(LISTEN
)、已经建立连接状态的连接(ESTABLISHED
)、Socket
程序连接等。因为连接较多,所以输出的内容有很多。
例如:
从Active UNIX domain sockets
开始,之后的内容就是Socket
程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在-an
选项的输出中看到各种网络连接状态,而之前的-tuln
选项则只能看到监听状态。
使用4:查看网关地址
ifconfig
命令只能看到IP地址,Mac地址,子网掩码。
如下图所示:
但是我们并不同通过ifconfig
命令查看到网关,如果需要查看网关地址,就需要用到netstat
命令。
如下图,执行命令:netstat -rn