第八周-Linux网络配置,软件安装,bash编程

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

网桥:一种网络设备,负责网络桥接(network bridging)之用。桥接器将网络的多个网段在数据链路层(OSI模型第2层)连接起来(即桥接)。

集线器(Hub):是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备。集线器是运作在OSI模型中的物理层。

二层交换机:工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

三层交换机:则可以处理第三层网络层协议,用于连接不同网段,通过对缺省网关的查询学习来创建两个网段之间的直接连接。

路由器(英语:Router,又称路径器):是一种电讯网络设备,提供路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如网际协议(IP)。

2、IP地址的分类有哪些?子网掩码的表示形式及其作用

IP地址分类:

  • A类:
    第一段为网络号,后三段为主机号
    网络号:
    0 000 0000 – 0 111 1111:1-127
    网络数量:126,127
    每个网络中的主机数量:2^24-2(全0,全1) 全0网络本身,全1表示全网
    默认子网掩码:255.0.0.0,/8

  • B类:
    前两段为网络号,后两段为主机号
    网络号:
    10 00 0000 – 10 11 1111:128-191
    网络数:2^14
    每个网络中的主机数量:2^16-2
    默认子网掩码:255.255.0.0,/16
    私网地址:172.16.0.0-172.31.0.0

  • C类:
    前三段为网络号,最后一段为主机号
    网络号:
    110 0 0000 – 110 1 1111:192-223
    网络数:2^21
    每个网络中的主机数量:2^8-2
    默认子网掩码:255.255.255.0, /24

  • D类:组播
    1110 0000 – 1110 1111:224-239

  • E类:科研
    240-255

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

OSI模型

第八周-Linux网络配置,软件安装,bash编程

TCP/IP模型

第八周-Linux网络配置,软件安装,bash编程

对应的物理设备:
物理层:HUB集线器,网卡,网桥、中继器、调制解调器
链路层:2层交换机
网络层:3层交换机,路由器

4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

虚拟机演示环境为CentOS7.2,采用桥接模式
先查看下目前本机的/etc/sysconfig/network-scripts/ifcfg-eno16777736 中的配置,为dhcp的协议.用ifconfig查看IP地址为192.168.1.101

修改网卡配置文件:
我的物理机目前的ip是192.168.1.100,网关为192.168.1.2

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE="Ethernet"
BOOTPROTO="static"        #协议改为static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="711a64d3-1c88-4a86-9bb3-70c946122b22"
DEVICE="eno16777736"
ONBOOT="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"
IPADDR=192.168.1.107    #指定IP地址为192.168.1.107
NETMASK=255.255.255.0   #子网掩码为255.255.255.0或者使用PREFIX=24
GATEWAY=192.168.1.2     #网关为192.168.1.2和物理机一样
DNS1=192.168.1.2        #DNS1
DNS1=8.8.8.8            #DNS2

修改DNS配置文件(不修改也是可以的,重启服务后会自己生成):

[root@localhost ~]# vim /etc/resolv.conf 

# Generated by NetworkManager
nameserver 192.168.1.2      #增加一条DNS记录
nameserver 8.8.8.8
nameserver 114.114.114.114

重启网络服务.

[root@localhost ~]# systemctl restart network.service

 


5、为Linux主机配置网络信息的方式有哪些,请描述各个过程

  • IP设置
    1.命令,ifconfig命令,ip命令,TUI工具(centos6:setup->Network Configuartions centos7:nmtui)
    2.修改配置文件:/etc/sysconfig/network-scripts/ifcfg-接口

  • 路由设置
    1.命令:route
    2.修改配置文件:/etc/sysconfig/network-scripts/route-接口

  • DNS设置
    1.修改配置文件:/etc/resolv.conf
    2.在网卡配置文件/etc/sysconfig/network-scripts/ifcfg-接口 中指定DNS

  • 主机名配置
    1.命令:hostname 立即生效,重新登录终端即可看到
    2.修改内核参数:/proc/sys/kernel/hostname 立即生效,重新登录终端即可看到
    3.修改配置文件:/etc/sysconfig/network和/etc/hosts ,需要重启系统生效

6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态

在线的主机使用绿色显示;

不在线的主使用红色显示;

为了能在本地测试,将ip段改为192.168.1.1-192.168.254

#!/bin/bash
for((i=1;i<255;i++));do
        ping -c 1 -w 1 "192.168.1.$i" >/dev/null
        if [ $? -eq 0 ];then
                echo -e "\033[0;32;1m 192.168.1.$i is up! \033[0m"
        else
                echo -e "\033[0;31;1m 192.168.1.$i is down! \033[0m"
        fi
done

第八周-Linux网络配置,软件安装,bash编程

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

/etc/sysconfig/network-scripts/ifcfg-IFACE:
    DEVICE:此配置文件应用到的设备,其值应该为ifcfg-IFACE中的IFACE
    HWADDR:对应的设备的MAC地址
    BOOTPROTO:激活此设备时使用的地址配置协议,常用的有static(手动配置),none(手动配置),dchp或bootp(动态配置)
    NM_CONTROLLED:NM是NetworkManager的简写;此网卡是否接受NM控制;建议为“no”
    ONBOOT:是否随OS启动激活此设备,
    TYPE:接口类型;常见的有Ethernet,Bridge
    UUID:设备的惟一标识
    IPADDR:IP地址
    NETMASK:子网掩码
    GATEWAY:默认网关
    DNS1:主DNS服务器
    DNS2:第二个DNS服务器
    DNS3:第三备用DNS
    IPV6INIT:是否初始化ipv6协议地址
    USERCTL:普通用户是否可控制此设备
    PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中

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

1.ifconfig:
ifconfig interface [aftype] options | address …
# ifconfig IFACE IP/MASK [up|down]
# ifconfig IFACE IP netmask NETMASK

2.ip address
ip address add – add new protocol address

  • ip addr add IFADDR dev IFACE 基本用法

3.修改配置文件
/etc/sysconfig/network-scripts/ifcfg-接口

9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

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 -Ieth0
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 )'

10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的

rpm
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE …
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度;每个#表示2%的进度
rpm -ivh PACKAGE_FILE …
升级:
upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装”;
freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作;
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
查询:
rpm {-q|–query} [select-options] [query-options]

[select-options]
-a: 所有包
-f: 查看指定的文件由哪个程序包安装生成
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
yum
显示仓库列表:
yum repolist [all|enabled|disabled]

显示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] […]
# yum list {available|installed|updates} [glob_exp1] […]

安装程序包:
yum install package1 [package2] […]

yum reinstall package1 [package2] […] (重新安装)

升级程序包:
yum update [package1] [package2] […]

yum downgrade package1 [package2] […] (降级)

检查可用升级:
yum check-update

卸载程序包:
yum remove | erase package1 [package2] […]

查看程序包information:
yum info […]

11、如何使用发行版光盘作为yum repository,请描述该过程。

(1) 挂载光盘至某目录,例如/media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件

eg:centos7挂载iso镜像光盘做本地yum仓库


[root@localhost ~]# mount -r /dev/cdrom /media/cdrom
[root@localhost cdrom]# ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim cdrom-local.repo  #建一个本地仓库,编辑内容如下

  1 [base]
  2 name=centos 7.2.1511
  3 baseurl=file:///media/cdrom
  4 enabled=1
  5 gpgcheck=0
[root@localhost yum.repos.d]# yum repolist  #此时本地的仓库就可以正常加载了
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id                                         repo name                                                status
base                                            centos 7.2.1511                                          9,007
repolist: 9,007

12、写一个脚本,完成以下功能

(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;

#!/bin/bash
declare -i k=0
declare -i s=0
dir=/etc/rc.d/rc3.d
for i in $( ls $dir);do
    echo $i"stop"
    if [ $( echo $i | grep "^[s|S]") ];then
       let s++
    elif [ $(echo $i | grep "^[k|K]") ];then
       let k++
    fi     
done
echo "k开头的文件有$k个"
echo "s开头的文件有$s个"

13、写一个脚本,完成以下功能

(1) 脚本能接受用户名作为参数;
(2) 计算此些用户的ID之和;

#!/bin/bash
if [ $# -lt 1 ];then
    echo "用户名至少一个" && exit 1
fi

declare -i uid=0
for i in $* ;do
    if [ $(id -u $i)  ];then
       let uid+=$(id -u $i)
    fi
done
echo "用户id之和为$uid"

14、写一个脚本

(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

#!/bin/bash

declare -i sub_dir=0
declare -i block_file=0
declare -i normal_file=0
declare -i char_file=0
declare -i link_file=0
declare -i unknow_file=0
if [ $# -lt 1  ];then
    echo "至少一个目录" && exit 1
fi

for i in $*;do
    if [ ! -d $i  ];then
        echo "$i不是目录"
        continue
    fi
    
    for file in $i/*;do
        if [ -d $file ];then
            echo -e "\t$(basename $file) is sub_dir" && let sub_dir++
        elif [ -b $file ];then
            echo -e "\t$(basename $file) is block_file" && let block_file++
        elif [ -c $file ];then
            echo -e "\t$(basename $file) is char_file" && let char_file++
        elif [ -h $file ];then
            echo -e "\t$(basename $file) is link_file" && let link++
        elif [ -f $file ];then
            echo -e "\t$(basename $file) is normal_file" && let normal_file++
        else
            echo -e "\t$(basename $file) is Unknow type file" && unknow_file++
        fi
    done
    echo "$i目录下:普通文件:$normal_file,子目录:$sub_dir,块文件:$block_file,字符文件:$char_file,链接文件:$link_file,未知文件:$unknow_file"
done

15、写一个脚本

通过命令行传递一个参数给脚本,参数为用户名
如果用户的id号大于等于500,则显示此用户为普通用户;

#!/bin/bash
if [ $# -lt 1 ];then
    echo "至少一个用户名" && exit 1
fi

for i in $*;do
    if [ $(id -u $i) -ge 500  ];then
        echo "$i:普通用户"
    else
        echo "$i:非普通用户"
    fi
done

16、写一个脚本

(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;

#!/bin/bash
declare -i sum=0
for i in {1..10};do
    if ! id user$i &> /dev/null;then
        useradd user$i
        echo user$i | passwd --stdin user$i
        let sum++
    fi
done
echo "共创建$sum个用户.$[10-$sum]个用户已存在"

17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来

未配合本地测试,将ip改成自己所在网段 192.168.1.90-172.192.168.110

 #!/bin/bash
 for i in {90..110};do
     ping -c 1 -w 1 "192.168.1.$i" >/dev/null
         if [ $? -eq 0 ];then
              echo -e "\033[0;32;1m 192.168.1.$i is online! \033[0m"
         fi
 done

18、打印九九乘法表

#!/bin/bash
for((i=1;i<=9;i++));do
    for((j=1;j<=i;j++));do
       echo -n -e $j"x"$i=$[$j*$i]"\t"
     done
    echo 
done

原创文章,作者:luoluo,如若转载,请注明出处:http://www.178linux.com/59165

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-16 15:24

    写的很好,看的出来很用心,可以当成案例了,唯一不足的就是图挂了