OSI七层模型及脚本小工具

网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

集线器是属于物理层的设备,可以理解为一根网线中间串接出了多个接口,这么多接口共享这一根网线的带宽,
因此这些接口上的设备在使得网络时就会出现冲突,或者‘道路’挤占的情况。(所有的设备在一个广播域,冲突域中),集线器现在很少使用了。

交换机、网桥都是数据链路层的设备,网桥的出现就是为了解决集线器多个接口共处于一个冲突域的问题,网桥具有2个接口,
且每个接口设备发送接收数据都是独立的互不影响(每个接口是一个冲突域)。现在这种设备不再使用。
交换机可以理解为是一个多接口的网桥,当然具备了网桥分割冲突的功能(每个接口是一个冲突域)。
但是交换机(2层交换机)所有接口都在一个广播域中。

路由器属于网络层设备,路由器不但可以隔离冲突域,同时也可以隔离广播。每个接口是一个冲突域,一个广播域。
路由器对于广播数据包不做转发。路由器根据3层地址(现用的IP地址)进行转发数据包到相应的接口。实现不同的IP网段互相通讯。

二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。

三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,
所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,
而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术+三层转发技术。
传统交换技术是在OSI网络标准模型第二层–数据链路层进行操作的,
而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。

IP地址的分类及子网掩码的表示形式及其作用

IP地址分类

一般分类是指ipv4,
IP地址有5类,A类到E类,各用在不同类型的网络中。地址分类反映了网络的大小以及数据包是单播还是组播的。

A类到C类地址用于单点编址方法,但每一类代表着不同的网络大小。
A类地址(1.0.0.0-126.255.255.255)用于最大型的网络,该网络的节点数可达16,777,216个。

B类地址(128.0.0.0-191.255.255.25 5)用于中型网络,节点数可达65,536个。

C类地址(192.0.0.0-223.255.255.255)用于256个节点以下的小型网络的单点网络通信。

D类地址并不反映网络的大小,只是用于组播,用来指定所分配的接收组播的节点组,这个节点组由组播订阅成员组成。
D类地址的范围为224.0.0.0-239.255.255.255。

E类(240.0.0.0-255.255.255.254)地址用于试验。

作用

子网掩码是一个32位地址,是与IP地址结合使用的一种技术。

它的主要作用有两个,
一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
二是用于将一个大的IP网络划分为若干小的子网络。

使用子网是为了减少IP的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,
有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网。使用子网可以提高网络应用的效率。

通过IP 地址的二进制与子网掩码的二进制进行与运算,确定某个设备的网络地址和主机号,
也就是说通过子网掩码分辨一个网络的网络部分和主机部分。

子网掩码一旦设置,网络地址和主机地址就固定了。子网一个最显著的特征就是具有子网掩码。
与IP地址相同,子网掩码的长度也是32位,也可以使用十进制的形式。
例如,为二进制形式的子网掩码:1111 1111.1111 1111.1111 1111.0000 0000,采用十进制的形式为:255.255.255.0。

通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,
然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段。

子网掩码表现形式

IP标识法
一个完整IP描述包含IP 地址和子网掩码

具体标识有两种

点分十进制
192.168.0.n 255.255.255.0(点分十进制)

这种暂时成为简写吧,懒人写法
192.168.0.n/24 (/24表示子网掩码二进制标识法中前面24位1)

计算机网络的分层模型(OSI模型和TCP/IP模型)及每一层的功能及涉及到的物理设备有哪些。

OSI模型

常见对应各层的设备
物理层:网卡,网线,集线器,中继器,调制解调器

数据链路层:网桥,交换机

网络层:路由器

网关工作在第四层传输层及其以上

物理层
在OSI参考模型中,物理层(Physical Layer)是参考模型的最低层,也是OSI模型的第一层。

物理层的主要功能是:
利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

数据链路层
数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
在计算机网络中由于各种干扰的存在,物理链路是不可靠的。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。

该层通常又被分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。

1、MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制;

2、LC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。

数据链路层的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。

网络层
网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通信子网的最高一层。它在下两层的基础上向资源子网提供服务。其主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
一般地,数据链路层是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。例如在广域网之间通信时,必然会遇到路由(即两节点间可能有多条路径)选择问题。

在实现网络层功能时,需要解决的主要问题如下:
寻址:
数据链路层中使用的物理地址(如MAC地址)仅解决网络内部的寻址问题。在不同子网之间通信时,为了识别和找到网络中的设备,每一子网中的设备都会被分配一个唯一的地址。由于各子网使用的物理技术可能不同,因此这个地址应当是逻辑地址(如IP地址)。

交换:
规定不同的信息交换方式。常见的交换技术有:线路交换技术和存储转发技术,后者又包括报文交换技术和分组交换技术。

路由算法:
当源节点和目的节点之间存在多条路径时,本层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。

连接服务:
与数据链路层流量控制不同的是,前者控制的是网络相邻节点间的流量,后者控制的是从源节点到目的节点间的流量。其目的在于防止阻塞,并进行差错检测。

传输层
OSI下3层的主要任务是数据通信,上3层的任务是数据处理。而传输层(Transport Layer)是OSI模型的第4层。因此该层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。

该层的主要任务是:
向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。传输层的作用是向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。该层常见的协议:TCP/IP中的TCP协议、Novell网络中的SPX协议和微软的NetBIOS/NetBEUI协议。

传输层提供会话层和网络层之间的传输服务,这种服务从会话层获得数据,并在必要时,对数据进行分割。然后,传输层将数据传递到网络层,并确保数据能正确无误地传送到网络层。因此,传输层负责提供两节点之间数据的可靠传送,当两节点的联系确定之后,传输层则负责监督工作。

综上,传输层的主要功能如下:
传输连接管理:提供建立、维护和拆除传输连接的功能。传输层在网络层的基础上为高层提供“面向连接”和“面向无接连”的两种服务。

处理传输差错:提供可靠的“面向连接”和不太可靠的“面向无连接”的数据传输服务、差错控制和流量控制。在提供“面向连接”服务时,通过这一层传输的数据将由目标设备确认,如果在指定的时间内未收到确认信息,数据将被重发,监控服务质量。

会话层
会话层(Session Layer)是OSI模型的第5层,是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用连接的方法。将不同实体之间的表示层的连接称为会话。因此会话层的任务就是组织和协调两个会话进程之间的通信,并对数据交换进行管理。
用户可以按照半双工、单工和全双工的方式建立会话。当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC(介质访问控制子层)地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。域名(DN)就是一种网络上使用的远程地址例如:www.163.com就是一个域名。

会话层的具体功能如下:

会话管理:
允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用时间的长短。

会话流量控制:
提供会话流量控制和交叉会话功能。

寻址:
使用远程地址建立会话连接。

出错控制:
从逻辑上讲会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠正错误。会话控制和远程过程调用均属于这一层的功能。但应注意,此层检查的错误不是通信介质的错误,而是磁盘空间、打印机缺纸等类型的高级错误。

表示层
表示层(Presentation Layer)是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。

表示层的具体功能如下:

数据格式处理:
协商和建立数据交换的格式,解决各应用程序之间在数据格式表示上的差异。

数据的编码:
处理字符集和数字的转换。例如由于用户程序中的数据类型(整型或实型、有符号或无符号等)、用户标识等都可以有不同的表示方式,因此,在设备之间需要具有在不同字符集或格式之间转换的功能。

压缩和解压缩:
为了减少数据的传输量,这一层还负责数据的压缩与恢复。

数据的加密和解密:
可以提高网络的安全性。

应用层
应用层(Application Layer)是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外,该层还负责协调各个应用程序间的工作。
应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登录服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。上述的各种网络服务由该层的不同应用协议和程序完成,不同的网络操作系统之间在功能、界面、实现技术、对硬件的支持、安全可靠性以及具有的各种应用程序接口等各个方面的差异是很大的。

应用层的主要功能如下:

用户接口:
应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系。
实现各种服务:该层具有的各种应用程序可以完成和实现用户请求的各种服务。

OSI 7层模型的小结
由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有所有的7层,并完全遵循它的规定。
在7层模型中,每一层都提供一个特殊的网络功能。从网络功能的角度观察:下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主;第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;而上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。简言之,下4层主要完成通信子网的功能,上3层主要完成资源子网的功能。

TCP/IP模型

TCP/IP模型包括4层:

  网络接口层–对应OSI参考模型的物理层和数据链路层;

  网络层–对应OSI参考模型的网络层;

  运输层–对应OSI参考模型的运输层;

  应用层–对应OSI参考模型的5、6、7层。

TCP/IP协议的主要特点如下:

高可靠性

TCP/IP采用重新确认的方法保证数据的可靠传输,并采用“窗口”流量控制机制使可靠性得到进一步保证。

安全性

为建立TCP连接,在连接的每一端都必须与该连接的安全性控制达成一致。IP在它的控制分组头中有若干字段允许有选择地对传输的信息实施保护。

灵活性

TCP/IP要求下层支持该协议,而对上层应用协议不作特殊要求。因此,TCP/IP的使用不受传输介质和网络应用软件的限制。

总结

从网络通信的观点来看,Internet是一个由TCP/IP把各个国家、机构、部门的内部网络连接起来的庞大的数据通信网; 从信息资源的角度来看,Internet是一个集各个领域、部门内各种信息资源,以共享为目的的信息资源网;从技术的角度来看,Internet是一个“不同网络互连的网络(网际网)”,是由许多网络(包括局域网、城域网和广域网)互连形成的。

下面来看看网络的相关操作和脚本

将Linux主机接入到TCP/IP网络的步骤。(手动指定的方式)

我就不瞎BB了,直接上操作步骤,分centos和ubuntu两种操作系统,这是一道送分题。

总体来说有以下几步:

1、配置IP地址和掩码

2、配置网关

3、配置dns的IP地址

CentOS6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet #90%以上都是以太网啦
BOOTPROTO=none #如果是自动获取,此处是DHCP,手动指定就是none
IPADDR=192.168.0.243 #修改此处
PREFIX=24 #修改此处
GATEWAY=192.168.0.1 #修改此处
DNS1=202.103.44.150 #修改此处
DNS2=202.103.24.68 #修改此处
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=eth0
UUID=b33d04cb-b415-4874-b5a2-e201bb20b46e #网卡的唯一标识
ONBOOT=yes #是否开机启动

最后:wq 保存退出, 再执行 service network restart #使其生效

Ubuntu 14.04

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@ubuntu:~# vim /etc/network/interfaces   #配置IP、掩码、网关

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.245
netmask 255.255.255.0
gateway 192.168.0.1

root@ubuntu:~# vim /etc/resolvconf/resolv.conf.d/base #配置DNS

nameserver 202.103.24.68
nameserver 202.103.44.150

最后:wq 保存退出

root@ubuntu:~# service networking restart #使其生效

为Linux主机配置网络信息的方式

方法一:使用ifconfig或者ip 临时添加网络信息,并使用route命令添加默认网关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
**注意:所有操作均使用root用户**
修改IP:
ifconfig eth0 192.168.0.66
则直接将第一张网卡的IP修改成192.168.0.66

增加IP:
ifconfig eth0 add 192.168.2.77 #增加一个IP
ifconfig eth0:0 broadcast 192.168.2.255 ##修改刚刚增加IP的广播地址

再增加一个IP:
ifconfig eth0:0 add 10.10.44.145
ifconfig eth0:0:1 broadcast 10.10.44.255 #修改刚刚增加IP的广播地址

上述增加完,立刻生效,但是机器重新启动后,就无效了。
route add -net 192.168.0.0/24 gw 192.168.0.1 dev eth1 #增加网关

[root@centos ~]# vim /etc/resolv.conf #增加dns
[root@centos ~]# cat /etc/resolv.conf
#Generated by NetworkManager
nameserver 202.103.44.150
nameserver 202.103.24.68

​ 不过这种方法是临时的,服务器一重启就失效了

方法二:使用修改/etc/sysconfig/network-scripts/ifcfg-IF_NAME文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-IFACE 配置文件参数:
DEVICE:此配置文件对应的设备的名称;
ONBOOT:在系统引导过程中,是否激活此接口;
UUID:此设备的惟一标识;
IPV6INIT:是否初始化 IPv6;
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有 dhcp、bootp、
static、none;
TYPE:接口类型,常见的有 Ethernet, Bridge;
DNS1:第一 DNS 服务器指向;
DNS2:备用 DNS 服务器指向;
DOMAIN:DNS 搜索域;
IPADDR: IP 地址;
NETMASK:子网掩码;CentOS 7 支持使用 PREFIX 以长度方式指明子网掩码;
GATEWAY:默认网关;
USERCTL:是否允许普通用户控制此设备;
PEERDNS:如果 BOOTPROTO 的值为“dhcp”,是否允许 dhcp server 分配的 dns 服务器指
向覆盖本地手动指定的 DNS 服务器指向;默认为允许;
HWADDR:设备的 MAC 地址;

[root@centos ~]# cat /etc/resolv.conf #示例
# Generated by NetworkManager
nameserver 202.103.44.150
nameserver 202.103.24.68
[root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.243
PREFIX=24
GATEWAY=192.168.0.1
DNS1=202.103.44.150
DNS2=202.103.24.68
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=eth0
UUID=b33d04cb-b415-4874-b5a2-e201bb20b46e
ONBOOT=yes

一般最常用的就是这两种了。

用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;在线的主机使用绿色显示;不在线的主使用红色显示

一开始我很茫然,无从下手,用for循环,记得for循环大了会占用内存空间,例如ping B类局域网地址的话,就想着不用for,用while或者until实现可否,折腾了一天多的时间(处女座作的),精益求精,经过N次死循环及失败,于是有了下面的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@centos Jerry_go]# wc -l ping4.sh 
14 ping4.sh
[root@centos Jerry_go]# cat ping4.sh
#!/bin/sh
#ping IP
#Author Jerry

ip=0
while [ $ip -lt 254 ];do
ip=$[$ip+1]
ping -c 2 192.168.0.$ip >> /dev/null
if [ $? == 0 ];then
echo -e "\e[1;32m 192.168.0.$ip ok \e[0m" && continue
else
echo -e "\e[1;31m 192.168.0.$ip no response \e[0m" && continue
fi
done
[root@centos Jerry_go]#

执行效果:

用for实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@centos Jerry_go]# cat ping.sh 
#!/bin/bash
#ping ip
#Author Jerry

for ((i=1;i<255;i++));do
ping -w 1 -c 1 172.16.250.$i &>/dev/null
if [ $? -eq 0 ];then
echo -e "\e[1;32m 172.16.250.$i ok \e[0m"
else
echo -e "\e[1;31m 172.16.250.$i no response \e[0m"
fi
done
[root@centos Jerry_go]#

经测试效果一样

描述每个网络接口的配置文件中各个参数的含义和其所对应的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ifcfg-IFACE配置文件参数:
DEVICE:此配置文件对应的设备的名称;
ONBOOT:在系统引导过程中,是否激活此接口;
UUID:此设备的惟一标识;
IPV6INIT:是否初始化IPv6;
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none;
TYPE:接口类型,常见的有Ethernet, Bridge;
DNS1:第一DNS服务器指向;
DNS2:备用DNS服务器指向;
DOMAIN:DNS搜索域;
IPADDR: IP地址;
NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码;
GATEWAY:默认网关;
USERCTL:是否允许普通用户控制此设备;
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许;
HWADDR:设备的MAC地址;

NM_CONTROLLED:是否使用NetworkManager服务来控制接口;

给网络接口配置多个地址,有哪些方式?

这个也分快捷跟永久两种方式。主要用到ifconfig

快捷方式呢,即生效,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@centos ~]# ifconfig eth0:0 192.168.3.243 netmask 255.255.255.0 up 
[root@centos ~]# ifconfig eth0:1 192.168.3.2 netmask 255.255.255.0 up
[root@centos ~]# ip addr show #查看网卡IP地址方法一
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:04:bd:c1 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.243/24 brd 192.168.0.255 scope global eth0
inet 192.168.3.243/24 brd 192.168.3.255 scope global eth0:0
inet 192.168.3.2/24 brd 192.168.3.255 scope global secondary eth0:1
[root@centos ~]# ifconfig #查看网卡IP地址方法二
eth0 Link encap:Ethernet HWaddr 00:0C:29:04:BD:C1
inet addr:192.168.0.243 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8122248 errors:0 dropped:0 overruns:0 frame:0
TX packets:51751 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:526472342 (502.0 MiB) TX bytes:3884350 (3.7 MiB)

eth0:0 Link encap:Ethernet HWaddr 00:0C:29:04:BD:C1
inet addr:192.168.3.243 Bcast:192.168.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

eth0:1 Link encap:Ethernet HWaddr 00:0C:29:04:BD:C1
inet addr:192.168.3.2 Bcast:192.168.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:290 errors:0 dropped:0 overruns:0 frame:0
TX packets:290 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:26660 (26.0 KiB) TX bytes:26660 (26.0 KiB)

[root@centos ~]#

永久方式呢,稍微麻烦点,不过永久嘛,一劳永逸,值得

是仿照/etc/sysconfig/network-scripts/ifcfg-eth0增加一文件根据网络虚拟接口的名字进行命名
例如ifcfg-eth0:0或者ifcfg-eth0:1等等

开始飙车了啊,系好安全带!

[root@centos ~]# cd /etc/sysconfig/network-scripts/

[root@centos network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0

[root@centos network-scripts]# vim ifcfg-eth0:0

保存退出,重启系统,再看。应该是没问题的啦。

常用的网络管理类工具及使用方法。

ifconfig命令:接口及地址查看和管理

可以使用ifconfig命令配置网卡属性,设置后立即生效,重启后失效。

显示活动接口信息 ifconfig eth0

显示所有接口信息 ifconfig -a

启用或禁用给定接口 ifconfig eth0 up/down

设置IP地址及掩码 ifconfig eth0 172.168.1.100/24

route命令:路由查看及管理

添加主机路由 route add -host 192.168.1.3 gw 172.16.0.1 dev eth0

添加网络路由 route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0

添加默认路由 route add default gw 172.16.0.1

删除主机路由 route del -host 192.168.1.3

删除网络路由 route del -net 192.168.0.0 netmask 255.255.255.0

netstat命令:打印网络连接,路由表,接口统计信息

以数字形式显示TCP协议相关所有状态 netstat -tan

以数字形式显示UDP协议相关所有状态 netstat -uan

以数字形式显示TCP协议相关的监听状态 netstat -tnl

以数字形式显示UDP协议相关的监听状态 netstat -unl

显示内核路由表 netstat -r

显示所有接口统计数据 netstat -i

显示指定接口信息 netstat -I eth0

dig命令:解析DNS地址工具

正解DNS 域名至IP地址 dig -t A www.magedu.com

反解DNS IP地址至域名 dig -x 127.0.0.1

ip命令:显示/操纵路由,设备,策略路由和隧道

禁用接口 ip link set dev eth0 down

启用接口 ip link set dev eth0 up

显示接口信息 ip link show dev eth0

显示主地址 ip addr show dev eth0 primary

显示次地址 ip addr show dev eth0 secondary

添加IP地址 ip addr add 172.16.100.13/16 dev eth0

添加网卡别名 ip addr add 172.16.100.13/16 dev eth0 label ‘eth:0’

删除别名 ip addr flush dev eth0 label ‘eth0:0’

添加主路由 ip route add 192.168.1.3 via 172.16.0.1 dev eth0

添加网络路由 ip route add 192.168.0.0/16 via 172.16.0.1 dev eth0

添加默认路由 ip route add default via 127.16.0.1

删除路由 ip route del 192.168.1.3

查看路由 ip route show

清空路由 ip route flush dev eth0

ss命令:显示网络连接工具
参数用法同netstat

指定显示某种状态ss -t state established ‘( dport = :ssh or sport = :ssh )’

Linux系统软件包管理方法(安装、升级、卸载等操作)

Linux的软件系统包管理那就好玩了,根据这多年的使用经验,主要分为yum和apt两大系列,

Debian 及其衍生产品如:Ubuntu、Linux Mint 和 Raspbian 的包格式为.deb文件,APT 是最常见包操作命令,可:搜索库、安装包及其依赖和管理升级,而要直接安装现成.deb包时需要使用dpkg命令。

APT还自吹有超级牛力,有图有真相:

CentOS、Fedora 及 Red Hat 系列 Linux 使用RPM包文件,并使用yum命令管理包文件及与软件库交互。在最新的 Fedora 版本中,yum命令已被dnf取代进行包管理,而要直接安装现成.rpm包时需要使用rpm命令。

好嘛,都是利器啊。下边且看我分解。

RPM 包的安装 / 升级 / 查询 / 卸载

一个 RPM 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .rpm 扩展名结尾的文件,例如 package.rpm 。对其操作,需要使用 rpm 命令。下面介绍 rpm 工具的参数和使用方法。

RPM 命令常用参数

RPM 的常规使用方法为 rpm -参数 package.rpm ( 更多信息,请查阅帮助 $man rpm):

-q 在系统中查询软件或查询指定 rpm 包的内容信息

-i 在系统中安装软件

-U 在系统中升级软件

-e 在系统中卸载软件

-h 用 #(hash) 符显示 rpm 安装过程

-v 详述安装过程

-p 表明对 RPM 包进行查询,通常和其它参数同时使用,如:
-qlp 查询某个 RPM 包中的所有文件列表
-qip 查询某个 RPM 包的内容信息

RPM 命令参数使用方法
以上参数有些需要组合使用,比如说 rpm -h package.rpm 是没有意义的,但 rpm -ih package.rpm 即表示安装 package 并用 # 符显示安装进度。

安装 RPM 包

rpm -ivh package.rpm

升级 RPM 包命令

rpm -Uvh package.rpm

卸载 RPM 包命令

rpm -ev package

查询 RPM 包中包含的文件列表命令

rpm -qlp package

查询 RPM 包中包含的文件列表命令

rpm -qlp package

查询 RPM 包中包含的内容信息命令

rpm -qip package

查询系统中所有已安装 RPM 包

rpm -qa

DEB 包的安装 / 升级 / 查询 / 卸载

一个 DEB 包包含了已压缩的软件文件集以及该软件的内容信息(在头文件中保存),通常表现为以 .deb 扩展名结尾的文件,例如 package.deb 。对其操作,需要使用 dpkg 命令。下面介绍 dpkg 工具的参数和使用方法,并以 IBM Lotus Notes 在 UBUNTU 904 安装为例做具体说明。

DPKG 命令常用参数

DPKG 的常规使用方法为 dpkg -参数 Package(.rpm),( 更多信息,请查阅帮助 $man rpm)

-l 在系统中查询软件内容信息

–info 在系统中查询软件或查询指定 rpm 包的内容信息

-i 在系统中安装 / 升级软件

-r 在系统中卸载软件 , 不删除配置文件

-P 在系统中卸载软件以及其配置文件

DPKG 命令参数使用方法

安装 DEB 包命令

dpkg -i package.deb

升级 DEB 包命令

dpkg -i package.deb ( 和安装命令相同)

卸载 DEB 包命令

dpkg -r package.deb # 不卸载配置文件或

dpkg -P package.deb # 卸载配置文件

查询 DEB 包中包含的文件列表命令

dpkg-deb -c package.deb

查询 DEB 包中包含的内容信息命令

dpkg –info package.deb

查询系统中所有已安装 DEB 包

dpkg -l package

YUM/APT

大多数 Linux 都使用本地数据库来存储远程可用的包仓库列表,所以在安装或升级包之前最好更新一下这个数据库。

Debian/Ubuntu

sudo apt-get update

CentOS

yum check-update

Fedora

dnf check-update

升级已安装的包

Debian/Ubuntu

sudo apt-get upgrade #仅升级已安装的软件包

sudo apt-get dist-upgrade #可添加或删除程序包,以满足新的依赖。

CentOS

sudo yum update

Fedora

sudo dnf upgrade

查找/搜索软件包

Debian/Ubuntu
apt-cache search #搜索内容

CentOS
yum search #搜索内容
yum search all #搜索内容 搜索所有内容,包括包描述。

Fedora
dnf search #搜索内容
dnf search all #搜索内容 搜索所有内容,包括包描述。

查看某个软件包信息

Debian/Ubuntu

apt-cache show 包名 #显示有关软件包的本地缓存信息

dpkg -s 包名 #显示包的当前安装状态

CentOS

yum info 包名

yum deplist 包名 #列出包的以来

Fedora
dnf info 包名
dnf repoquery –requires 包名 #列出包的以来

从软件仓库安装包

一旦我们知道某个软件包的名称之后,便可以使用如下命令从软件仓库安装包。

Debian/Ubuntu

sudo apt-get install 包名
sudo apt-get install 包1 包2 … #安装所有列出的包
sudo apt-get install -y 包名 #无需提示直接安装

CentOS
sudo yum install 包名
sudo yum install 包1 包2 … #安装所有列出的包
sudo yum install -y 包名 #无需提示直接安装

Fedora
sudo dnf install 包名
sudo dnf install 包1 包2 … #安装所有列出的包
sudo dnf install -y 包名 #无需提示直接安装

使用发行版光盘作为yum repository

1、将主机base源及media源备份并将media源切换至iso mount目录

1
2
3
4
[root@centos /]# cd /etc/yum.repos.d
[root@centos yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
[root@centos yum.repos.d]# cp CentOS-Media.repo CentOS-Media.repo.bak
[root@centos yum.repos.d]# vim CentOS-Media.repo

2、将iso光盘插入光驱或将iso包挂载到机器中(本次测试直接将iso挂载到虚拟机centos中)

1
2
3
[root@centos /]# mkdir /media/CentOS   #建立光盘挂载目录 ,其实就是跟CentOS-Media.repo里面默认的一样啦

[root@centos dev]# mount /dev/sr0 /media/CentOS/ #挂载光盘

3、测试安装policycoreutils-python

先清空yum的缓存,再重建yum缓存,看看从光盘的yum repository能否正常读取。

貌似是OK的。

再来一发


大功告成!

完成以下功能

(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

(4) 分别统计S开头和K开头的文件各有多少;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
#

#定义统计文件个数的变量,初始化啦
filename_S_sum=0
filename_K_sum=0

#利用for循环列表支持文件路径*通配S开头的文件
for filename_S in /etc/rc.d/rc3.d/S*;do
echo $(basename $filename_S) start
let filename_S_sum++
done

#利用for循环列表支持文件路径*通配S开头的文件
for filename_K in /etc/rc.d/rc3.d/K*;do
echo $(basename $filename_K) stop
let filename_K_sum++
done

echo "There is $filename_S_sum files by S At the beginning of the file name"
echo "There is $filename_K_sum files by K At the beginning of the file name"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@centos Jerry_go]# bash week8_title12-2.sh > week8_title12-2.txt && cat week8_title12-2.txt 
S01sysstat start
S02lvm2-monitor start
S10network start
S11portreserve start
S12rsyslog start
S22messagebus start
S23NetworkManager start
S25blk-availability start
S26haldaemon start
S26udev-post start
S55memcached start
S55sshd start
S58ntpd start
S90crond start
S95atd start
S99local start
K01smartd stop
K05wdaemon stop
K10psacct stop
K10saslauthd stop
K16abrt-ccpp stop
K16abrtd stop
K30spice-vdagentd stop
K50kdump stop
K61nfs-rdma stop
K75netfs stop
K75ntpdate stop
K75quota_nld stop
K84wpa_supplicant stop
K87restorecond stop
K88auditd stop
K89netconsole stop
K89rdisc stop
K92ip6tables stop
K92iptables stop
K95firstboot stop
K95rdma stop
K99rngd stop
There is 16 files by S At the beginning of the file name
There is 22 files by K At the beginning of the file name

完成以下功能
(1) 脚本能接受用户名作为参数;

(2) 计算此些用户的ID之和;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@centos Jerry_go]# cat week8_title13.sh  #开始装逼
#!/bin/bash
#

[ $# -lt 1 ] && echo “At least input one users name ” && exit 1 #提前判断一下,最少输入一个脚本参数并提示用户
userid_sum=0 #初始化userid_sum变量

for user in $*;do #开始用for循环,$*参数表示读取脚本后的任意个参数作为循环列表
if id $user &> /dev/null;then #判断一下用户是否存在
echo "$user userid is $(id -u $user)" #显示每次循环的当前系统用户的ID
let userid_sum+=$(id -u $user) #变量自增
else
echo "$user is not an existing user" #如果用户不存在,输出提示给用户
fi
done

echo "They're userid sum is $userid_sum" #输出用户ID的总和

1
2
3
4
5
6
7
8
[root@centos Jerry_go]# bash week8_title13.sh root bin jerry sshd FBI
root userid is 0
bin userid is 1
jerry userid is 500
sshd userid is 74
FBI is not an existing user
They're userid sum is 575
[root@centos Jerry_go]#

(1) 传递一些目录给此脚本;

(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;

(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@centos Jerry_go]# cat week8_title14.sh 
#!/bin/bash
#Author Jerry
#

#Not less than one script parameters
[ $# -lt 1 ] && echo "please aleast input one directory" && exit 1

#Judge whether the script parameters of the input from the user directory
[ -d $* ] || echo "Please enter the directory!!!"
dsum=0
fsum=0

for file_name in $1;do
ls -l $* |awk '{print $NF}'
let dsum+=$(ls -l $* |grep ^d |wc -l)
let fsum+=$(ls -l $* |grep -v ^d |wc -l)
shift
break

done

echo "the directories sum:$dsum"
echo "the file sum:$fsum"

写一个脚本
通过命令行传递一个参数给脚本,参数为用户名

如果用户的id号大于等于500,则显示此用户为普通用户;

1
2
3
4
5
6
7
8
9
[root@centos jerry_go]# cat week8_title14.sh 
#!/bin/bash

#Determine the user's input
grep "^$1\>" /etc/passwd &> /dev/null || echo "Please enter a user name"

userid=$(id -u $1)

[ $userid -ge 500 ] && echo "This is a common user,it's userid is $userid " || echo "This is a system user,it's userid is $userid "

写一个脚本
(1) 添加10用户user1-user10;密码同用户名;

(2) 用户不存在时才添加;存在时则跳过;

(3) 最后显示本次共添加了多少用户;

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
declare -i num
for((i=1;i<11;i++)){
if ! id user$i &> /dev/null;then
useradd user$i
echo user$i:user$i | chpasswd
let num++
fi
}
echo "Add $num users!"

用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

1
2
3
4
5
6
7
8
#!/bin/bash
net="172.16.250."
for((i=20;i<=100;i++)){
ping -c 1 $net$i &> /dev/null
if [ $? -eq 0 ];then
echo $net$i
fi
}

打印九九乘法表;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@centos jerry_go]# bash week8_title18.sh 
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

[root@centos jerry_go]# cat week8_title18.sh
#!/bin/bash
for ((i=1;i<=9;i++)){
for((j=1;j<=i;j++));do
echo -e -n "$j*$i=$(($i*$j))\t"
done
echo
}
0%