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

答:

####主要功能
#网桥是一个局域网与另一个局域网之间建立的桥梁,属于数据链路层的一种设备.
#集线器是可以将一些机器链接起来组成一个局域网的设备.
#二层交换机是工作于OSI模型的第二层(数据链路层)的设备,作用与集线器类似.
#三层交换机就是具有部分路由器功能的二层交换机.
#路由器是互联网的主要结点设备,路由器可以通过路由决定数据的转发.
####区别之处
#网桥与二层交换机的不同:
#    网桥就是个硬件网络协议的翻译器,也可以说相当一个端口少的二层交换机,网桥主要由软件实现,交换机主要由硬件实现.
#二层交换机与集线器的不同:
#    1.在OSI/RM中的工作层次不同.集线器工作于一层,交换机工作在二层.
#    2.交换机的数据传输方式不同.集线器的数据传输方式是广播,交换机的数据传输是有目的的,数据只对目的节点发送.
#    3.宽带占用方式不同.集线器所有的端口共享集线器的总带宽,而交换机的每个端口都具有自己的带宽.
#    4.传输模式不同.集线器只能采用版双工方式进行传输的.
#路由与二层交换机的不同:
#    1.工作层次不同.交换机工作在OSI的第二层,路由器工作在OSI的第三层
#    2.数据转发所依据的对象不同.交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址.而路由器则是利用不同的网络的ID号(即IP地址)来确定数据转发的地址.
#    3.传统的交换机只能分隔冲突域,不能分割广播域;而路由器可以分割广播域
#    4.路由器提供了防火墙的服务
#路由与三层交换机的不同:
#    1.主要功能不同.三层交换机主要功能是数据交换;而路由器仅具有路由转发这一种主要功能.
#    2.主要使用的环境不一样,三层交换机的路由功能主要是简单的局域网连接,路由器更多的体现在不同类型网络之间的互联上.
#    3.性能体现上不一样.三层交换机的性能要远忧于路由器,非常适用于数据交换频繁的局域网中;而路由器虽然功能非常强大,但它的数据包转发效率远低于三层交换机,更适合于数据交换不是很频繁的不同类型网络的互联.

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

答:

#IP地址中的前五位用于表示IP地址的类别,IP地址共分为五类.
#A类的特点是:以(0)开头,网络地址共(7)位,主机地址共(24)位;1.0.0.0-126.0.0.0 子网掩码:255.0.0.0 其中10.0.0.0为私有地址,127.0.0.0位主机环回地址
#B类的特点是:以(10)开头,网络地址共(14)位,主机地址共(16)位;128.0.0.0-191.255.0.0  子网掩码:255.255.0.0  其中172.16.0.0-172.31.255.255为私有地址
#C类的特点是:以(110)开头,网罗地址共(21)位,驻地地址共(8)位;192.0.0.0-223.255.255.0  子网掩码:255.255.255.0  其中192.168.0.0位私有地址
#D类的特点是:以(1110)开头,不表示网络,用于特殊用途; 224.0.0.0-239.255.255.255
#E类地址的特点是:以(11110)开头,地址暂时保留,用于某些实验和将来使用; 240.0.0.0-255.255.255.254

##子网掩码的作用:
    #1.用于屏蔽IP地址的一部分以区别网络标识和主机标识,病说明该IP地址是在局域网上,还是在远程网上
    #2.是用于将一个大的IP网络花粉为若干小的子网络.

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

答:

   (1)物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
   (2)数据链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
   (3)网络层:该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。
   (4)传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
   (5)会话层:向两个实体的表示层提供建立和使用连接的方法。
   (6)表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
   (7)应用层:应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系,并实现各种服务
#TCP/IP4层模型
    (1)网络接口层:用于协作IP数据在已有网络介质上传输的协议。对应于OSI七层模型的物理层和数据链路层。
    (2)网际层:负责数据的包装、寻址和路由,还包含网间控制报文协议。对应于OSI七层模型的网络层。
    (3)传输层:提供两种端到端的通信服务,TCP协议和UDP协议。对应于OSI七层模型的传输层。
    (4)应用层:包括Finger、Whois、FTP、Gopher、HTTP、Telent、SMTP、IRC、NNTP等协议。对应于OSI七层模型的应用层,会话层和表示层。
    对应的物理设备:
    物理层:HUB集线器,网卡,网桥、中继器、调制解调器
    链路层:2层交换机
    网络层:3层交换机,路由器

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

答:

[root@mageduCtenOS7 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160  # ens160是网卡名
TYPE=Ethernet
BOOTPROTO=none                                #手动设置IP写none,自动获取IP写dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160                                        #网卡名
UUID=014580eb-dc96-45f0-95ab-35bd487ffa58
DEVICE=ens160                                      #网卡号
ONBOOT=yes                                         #是否启用链接
IPADDR=10.10.31.52                                 #设定本网卡IP
PREFIX=23
GATEWAY=10.10.31.1                                 #网关地址
DNS1=202.96.209.133                                #DNS地址
DNS2=223.5.5.5
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
[root@mageduCtenOS7 ~]# systemctl restart network  #配置好后重新启动网卡

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

答:

    主机接入网络需要设置IP地址,路由信息和DNS信息.

   IP地址设置:

    主要有动态分配和静态设置:

        静态设置分为2中方法

        (1).可以使用ifconfig ip addr命令来设置网卡的IP地址及网关,设置后立即生效,退出当前shell后失效.

        (2).可以修改/etc/sysconfig/network-scripts/ifcfg-接口;设置后需要重启网卡才会生效.

        动态分配:是使用主机DHCP服务自动设置

   路由信息设置

    (1).用route, ip route命令来设置;设置后立即生效,重启后失效.

    (2).添加或者修改文件/etc/sysconfig/network-scripts/route-接口;设置后需要重新启动网卡才能生效.

      格式:192.168.0.0/24 via 172.16.0.1  或

        ADDRESSO=192.168.1.3

        NETMASK0=255.255.255.0

        GATEWAY0=192.168.0.1

   DNS信息设置

    (1).修改/etc/reso.conf文件来添加DNS, nameserver *.*.*.*

    (2).网卡接口设置文件中设置 DNS1=*.*.*.*


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

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

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

答:

[root@mageduCtenOS7 bin]# vim ping.sh
#!/bin/bash
#
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 \e[0m"
        else
                echo -e "\e[1;31m 172.16.250.$i \e[0m"
        fi
done

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

答:

    配置文件位于/etc/sysconfig/network-scripts/下 如ifcfg-eth0文件 
    DEVICE=eth0                #<网卡号,和ifcfg-eth0对应就可以>
    HWADDR=00:0c:29:4c:b9:2c    #<网卡的MAC地址>
    ONBOOT=yes                   #<在系统引导时是否激活此设备>
    BOOTPROTO=none                #<手动设置IP选择none,自动获取选dhcp>
    IPADDR=10.10.31.51            #设定本网卡IP地址>
    NETMASK=255.255.254.0         #子网掩码>
    DNS2=223.5.5.5                #次选DNS地址
    GATEWAY=10.10.31.1            #网关地址>
    DNS1=202.96.209.133           #首选DNS地址
    USERCTL=no                     #<普通用户是否可控制此设备>

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

答:

可以使用命令或配置文件。
    ifconfig:
        ifconfig 别名 IP地址/掩码位数 
        ifconfig eth0:0 192.168.0.22/24 up 
    ip:
        ip addr add IP地址 dev 接口 label '别名'
        ip addr add 172.16.100.13/16 dev eth0 label 'eth:0'
    配置文件:
        创建/etc/sysconfig/network-scripts/ifcfg-别名 文件
        文件中DEVICE=别名 要和文件名中的相同。

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

答:常用的网络管理类工具有:ping, traceroute, ss, netstat, ip, ifconfig等

例1检查目标的连通性
[root@mageduCtenOS68 ~]# ping 10.10.31.52
PING 10.10.31.52 (10.10.31.52) 56(84) bytes of data.
64 bytes from 10.10.31.52: icmp_seq=1 ttl=64 time=0.417 ms
64 bytes from 10.10.31.52: icmp_seq=2 ttl=64 time=0.405 ms
例2使用traceroute命令查看到底目的地址经过多少跳路由
[root@mageduCtenOS68 ~]# traceroute 223.5.5.5
traceroute to 223.5.5.5 (223.5.5.5), 30 hops max, 60 byte packets
 1  10.10.31.1 (10.10.31.1)  0.737 ms  0.895 ms  1.099 ms
 2  101.231.188.113 (101.231.188.113)  4.441 ms  4.770 ms  4.761 ms
 ......
例3使用netstat查看所有网络连接
        t:tcp协议相关
        -u:udp协议相关
        -w:raw socket相关
        -l:处于监听状态
        -a:所有状态
        -n:以数字显示IP和端口;
        -e:扩展格式信息
        -p:显示相关进程及PID
[root@mageduCtenOS68 ~]# netstat -tuan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:40767               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0     48 10.10.31.51:22              10.10.80.56:49765           ESTABLISHED
tcp        0      0 10.10.31.51:22              10.10.80.56:49766           ESTABLISHED
tcp        0      0 :::60137                    :::*                        LISTEN
tcp        0      0 :::111                      :::*                        LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 ::1:631                     :::*                        LISTEN
tcp        0      0 ::1:25                      :::*                        LISTEN
udp        0      0 0.0.0.0:111                 0.0.0.0:*
udp        0      0 0.0.0.0:631                 0.0.0.0:*
udp        0      0 0.0.0.0:656                 0.0.0.0:*
udp        0      0 0.0.0.0:33052               0.0.0.0:*
udp        0      0 127.0.0.1:703               0.0.0.0:*
udp        0      0 :::111                      :::*
udp        0      0 :::656                      :::*
udp        0      0 :::47250                    :::*
例4使用ss查看所有网络连接
[root@mageduCtenOS68 ~]# ss -tuan
Netid  State      Recv-Q Send-Q                  Local Address:Port                    Peer Address:Port
udp    UNCONN     0      0                                   *:111                                *:*
udp    UNCONN     0      0                                   *:631                                *:*
udp    UNCONN     0      0                                   *:656                                *:*
udp    UNCONN     0      0                                   *:33052                              *:*
udp    UNCONN     0      0                           127.0.0.1:703                                *:*
udp    UNCONN     0      0                                  :::111                               :::*
udp    UNCONN     0      0                                  :::656                               :::*
udp    UNCONN     0      0                                  :::47250                             :::*
tcp    LISTEN     0      128                                 *:40767                              *:*
tcp    LISTEN     0      128                                :::60137                             :::*
tcp    LISTEN     0      128                                :::111                               :::*
tcp    LISTEN     0      128                                 *:111                                *:*
tcp    LISTEN     0      128                                :::22                                :::*
tcp    LISTEN     0      128                                 *:22                                 *:*
tcp    LISTEN     0      128                         127.0.0.1:631                                *:*
tcp    LISTEN     0      128                               ::1:631                               :::*
tcp    LISTEN     0      100                               ::1:25                                :::*
tcp    LISTEN     0      100                         127.0.0.1:25                                 *:*
tcp    ESTAB      0      0                         10.10.31.51:22                       10.10.80.56:49765
tcp    ESTAB      0      0                         10.10.31.51:22                       10.10.80.56:49766

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

答:

(1).用rpm命令管理程序包
    安装    rpm -ivh PACKAGE_FILE    安装包
    升级    rpm -Uvh PACKAGE_FILE    升级包,无则安装此包
            rpm -Fvh PACKAGE_FILE    升级包,无则无变化
    查询    rpm -qa | grep FileName  查询已安装的某个软件
            rpm -qf FILE             查询文件出处
            rpm -qc PACKAGE_FILE     查询包的配置文件
            rpm -ql PACKAGE_FILE     查询包的所有文件
            rpm -qd PACKAGE_FILE     查询包的信息
            rpm -qpi PACKAGE_FILE    不安装就查询包信息
            rpm -qpl PACKAGE_FILE    不安装就查询包所有文件
    卸载    rpm -e PACKAGE_FILE      卸载包
    验证    rpm -V PACKAGE_FILE      验证包
            rpm –import RPM-GPG-KEY-CentOS-7 导入公钥
    维护    rpm initdb               新建数据库
            rpm rebuilddb            重建数据库       
(2).用yum仓库来管理程序包
    查看    yum info PACKAGE_FILE       查看包信息
            yum history list            查看yum事务历史
            yum deplist package1        查看包依赖
    显示    yum repolist all            显示yum仓库列表
            yum list installed          显示已安装列表
            yum list available          显示可用的包
            yum list updates            显示可以升级的包
            yum list anaconda           显示系统安装的包
    安装    yum install PACKAGE_FILE    安装包
            yum localinstall rpmfile1   安装本地包
    升级    yum update PACKAGE_FILE     升级包
            yum downgrade PACKAGE_FILE  降级包
            yum check-update            检查更新
    卸载    yum remove PACKAGE_FILE     卸载包
            yum provides feature1       查看指定的特性
            yum clean                   清理本地缓存
            yum search string1          搜索字符串
            yum info PACKAGE_FILE       查看包信息
            yum history list            查看yum事务历史
            yum deplist package1        查看包依赖     
    包组管理
        yum groupinstall group1 [group2] […]         安装包组
        yum groupupdate group1 [group2] […]          升级包组
        yum grouplist [hidden] [groupwildcard] […]   显示包组
        yum groupremove group1 [group2] […]          卸载包组
        yum groupinfo group1 […]                     查看包组信息

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

答:

(1) 挂载光盘至某目录,如:/media/cdrom
            # mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件 如:/etc/yum.repos.d/CentOS-CD.repo
        [CentOS6] 
        name=CentOS6 cdrom             <仓库的名字>
        baseurl=file:///media/cdrom    <拥有repodata目录的仓库访问路径>
        gpgcheck=0                     <使用前是否校验包>
        enabled=1                      <是否启用此仓库>
        cost=500                       <使用仓库的优先级>

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

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

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

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

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

答:

[root@mageduCtenOS7 bin]# vim ks.sh
#!/bin/bash
k=0
s=0
for i in $(ls /etc/rc.d/rc3.d/K* | grep -o "[^/]*$");do
echo "$i stop"
let k=$k+1
done
for i in $(ls /etc/rc.d/rc3.d/S* | grep -o "[^/]*$");do
echo "$i start"
let s=$s+1
done
echo "K file $k; S file $s"

[root@mageduCtenOS7 bin]# bash ks.sh
K50netconsole stop
S10network start
K file 1; S file 1

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

   (1) 脚本能接受用户名作为参数;

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

答:

[root@mageduCtenOS7 bin]# vim userid.sh
#!/bin/bash
declare -i idsum
if [ $# -gt 0 ];then
        for name in $*;do
                if id $name >/dev/null; then
                let idsum+=$(cat /etc/passwd | grep "\<$name\>" | cut -d: -f3)
                fi
        done
        echo "Id sum is $idsum"
else
        echo "Try again"
fi

[root@mageduCtenOS7 bin]# bash userid.sh root bin mail
Id sum is 8

14、写一个脚本

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

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

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

答:

[root@mageduCtenOS7 bin]# vim file.sh
#!/bin/bash
#
declare -i dir_sum=0
declare -i file_sum=0
if [ $# -eq 0 ];then
        echo "Usage:$0 dir_name..."
fi
for list in $*;do
        if [ ! -d $list ];then
        echo "$list is not a directory,please input directory name" && exit 0
        fi
done
for list1 in $*;do
     for list2 in $(ls $list1);do
      if [ -d $list1/$list2 ];then
        let dir_sum++
       elif [ -f $list1/$list2 ];then
        let file_sum++
       fi
      done
done
    echo "directory $dir_sum"
    echo "file $file_sum"


[root@mageduCtenOS7 bin]# bash file.sh /home  /root
directory 1
file 2

15、写一个脚本

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

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

答:

[root@mageduCtenOS7 bin]# vim 500user.sh
#!/bin/bash
#
if [ $# -ne 1 ];then
      echo "Usage: $0 user_name"
      exit 0
fi
if id $1 &>/dev/null;then
      num=$(id -u $1)
      if [ $num -gt 500 ];then
        echo "$1 is common user"
      fi
fi

16、写一个脚本

   (1) 添加10用户user1-user10;密码同用户名;

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

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

答:

[root@mageduCtenOS7 bin]# cat useradd.sh
#!/bin/bash
#
declare -i sum=0
fun_adduser(){
if [ $# -lt 1 ];then
      return 2
fi
if id $1 &> /dev/null;then
     echo "$1 is exists." && return 1
     else
    useradd $1 && echo $1 | passwd --stdin $1 &> /dev/null
      [ $? -eq 0 ] && echo "Add $1 is finished."
      let sum++
      return 0
     fi
    }
for i in {1..10};do
      fun_adduser myuser$i
done
echo "$sum users is added"
[root@mageduCtenOS7 bin]#
[root@mageduCtenOS7 bin]# bash useradd.sh
Add myuser1 is finished.
Add myuser2 is finished.
Add myuser3 is finished.
Add myuser4 is finished.
Add myuser5 is finished.
Add myuser6 is finished.
Add myuser7 is finished.
Add myuser8 is finished.
Add myuser9 is finished.
Add myuser10 is finished.
10 users is added

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

答:

[root@mageduCtenOS7 bin]# vim ping2.sh
#!/bin/bash
#
net="10.10.31"
declare -i uphosts=0
declare -i downhosts=0
   for i in {1..50};do
      ping -c 1 -w 1 $net.$i &> /dev/null
    if [ $? -eq 0 ];then
      echo -e "\033[32m $net.$i is up.\033[0m"
    let uphosts++
      else
    let downhosts++
      fi
done
echo "Up hosts: $uphosts."
echo "Down hosts: $downhosts."

[root@mageduCtenOS7 bin]# bash ping2.sh
 10.10.31.1 is up.
 10.10.31.2 is up.
 10.10.31.3 is up.
 10.10.31.10 is up.
 10.10.31.11 is up.
 10.10.31.30 is up.
 10.10.31.40 is up.
 10.10.31.41 is up.
 10.10.31.42 is up.
 10.10.31.43 is up.
 10.10.31.45 is up.
 10.10.31.46 is up.
 10.10.31.47 is up.
 10.10.31.50 is up.
Up hosts: 14.
Down hosts: 36.

18、打印九九乘法表;

[root@mageduCtenOS7 bin]# vim 99.sh
#!/bin/bash
#
for((i=1;i<=9;i++));do
    for((n=1;n<=i;n++));do
       echo -n -e $n"x"$i="$[$n*$i]\t"
     done
        echo ""
done


[root@mageduCtenOS7 bin]# bash 99.sh
1x1=1
1x2=2   2x2=4
1x3=3   2x3=6   3x3=9
1x4=4   2x4=8   3x4=12  4x4=16
1x5=5   2x5=10  3x5=15  4x5=20  5x5=25
1x6=6   2x6=12  3x6=18  4x6=24  5x6=30  6x6=36
1x7=7   2x7=14  3x7=21  4x7=28  5x7=35  6x7=42  7x7=49
1x8=8   2x8=16  3x8=24  4x8=32  5x8=40  6x8=48  7x8=56  8x8=64
1x9=9   2x9=18  3x9=27  4x9=36  5x9=45  6x9=54  7x9=63  8x9=72  9x9=81