首页 > 代码库 > Linux第八周作业

Linux第八周作业

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

网桥:网桥工作在七层参考模型中的数据链路层,用于连接两个不同网段的网络,根据mac地址转发帧进行通信,并且隔离不同网段间的通信,提高安全性,可隔离冲突域。由于网桥接口比较少,后被二层交换机代替;主要用于接入层

集线器:集线器工作在七层参考模型中的物理层,主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,数据以广播的方式发送,不具备交换机得学习转发能力;由于集线器采用共享式带宽的工作方式,网络中才生的数据量很大时,会出现拥塞,后被二层交换机代替;主要用于接入层

二层交换机:二层交换工作在七层参考模型的数据链路层,主要功能包括物理编址、网络拓扑结构、错误校验、帧序列,VLAN划分;通过学习每个端口连接的主机MAC地址来转发数据包,采用独享带宽的工作方式;主要用于接入层,汇聚层。

三层交换机:三层交换机工作在七层参考模型的网络,具备部分路由器的功能,加快大型局域网内部的数据交换,通过网络层来实现数据的高速转发,主要用于大型局域网的核心层

路由器:路由器工作在七层参考模型中的网络,主要用来实现网络互连,数据处理,网络处理及路由寻址。路由器能隔离广播包实现不同子网间的互联;主要用于广域网和局域网的核心层

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

IP的主要分为五类:

    A:1.0.0.0-127.255.255.255 私有地址:10.0.0.0-10.255.255.255

    B:128.0.0.0-191.255.255.255 私有地址:172.16.0.0-172.31.255.255

    C:192.0.0.0-223.255.255.255 私有地址:192.168.0.0-192.168.255.255

    D:224.0.0.0-239.255.255.255 一般用于组播

    E:224.0.0.0-255.255.255.255 保留,255.255.255.255为广播地址

子网掩码:

    子网掩码主要32二进制表示,用于IP地址哪些是主机位,哪些是网络号,网络号相同表示在同一子网内

    A:255.0.0.0

    B:255.255.0.0

    C:255.255.255.0

    D,E默认没有子网掩码

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

OSI七层参考模型:

    应用层:数据 用户接口,提供用户程序的接口

    表示层:数据 数据的表现形式,特定功能的实现,如,加密

    会话层:数据 允许不同机器的用户进程之间建立会话关系,如,windows Linux

    传输层:段 实现网络中不同主机上用户之间的数据通信。如,UDP,TCP

    网络层:包 提供逻辑地址(IP)、选路、数据从源段到目的端的传输,如,路由器

    数据链路层:帧 将上层协议封装成帧,用MAC地址访问媒介,错误检查与修正。如,交换机

    物理层:比特流 设备之间比特流的传输,物理接口,电气特性,如,双绞线

TCP/IP模型

    应用层:向用户提供一组常用的应用程序,对应OSI模型中的前三层,比如(电子邮件,FTP,HTTP)

    传输层:为应用程序间提供端到端的通信,其主要功能:格式化信息流,提供可靠的传输。比如(UDP,HTTP)

    Internet层:对应OSI模型中的网络层,其主要功能有:

        1.处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报文,选择去往信宿的路径,然后将数据报发往适当的网络接口

        2.处理输入数据报:首先检查其合法性,然后进行寻径,假如数据报已到信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发数据报

        3.处理路径、流控、拥塞等问题

        网络协议包括(IP,ICMP)

网络接口层:对应OSI模型中的数据链路层和物理层。

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

[root@jun-shao ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
UUID=df0b60bc-b434-4f50-85b6-903a63b70fd3
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:0C:29:6F:B4:CA
LAST_CONNECT=1474051305
IPADDR=192.168.0.223
NETMASK=255.255.255.0
GATEWAY=192.168.0.1



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

(1)ifconfig命令
ifconfig eth0 192.168.0.222/24
(2)ip命令
[root@jun-shao ~]# ip addr add 192.168.0.221/24 dev eth0
(3)setup命令


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

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

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

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


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

DEVICE=eth0	//此配置文件应用到的设备
TYPE=Ethernet	//接口类型,常见的有:Ethernet,Bridge
UUID=df0b60bc-b434-4f50-85b6-903a63b70fd3	//设备的唯一标识
ONBOOT=yes	//在系统引导时是否激活此设备
NM_CONTROLLED=yes	//NM是NetworkMassager的简写,此网卡是否接受NM脚本控制,建议centos 6改为no
BOOTPROTO=dhcp	//引导协议,启动此设备用到的协议,常用的dhcp,static,none,bootp
HWADDR=00:0C:29:6F:B4:CA //对应设备的mac地址
DEFROUTE=yes
PEERDNS=yes	//如果bootproto的值为“DHCP”,是否允许dhcp server分配的dns服务器指向直接覆盖至/etc/rosolv.conf文件中

NAME="System eth0"
LAST_CONNECT=1474051305
IPADDR=192.168.1.1	//指明ip地址
NETMASK=255.255.255.0	//指明子网掩码
GATEWAY=192.168.1.254	//指明默认网关
DNS1=	//第一个DNS服务器指向
DNS2=	//第二个DNS服务器指向
USERCTL=	//普通用户是否可控制此设备


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

给网卡配置多地址:

[root@jun-shao ~]# ifconfig eth0:0 192.168.1.1/24
[root@jun-shao ~]# ip addr add 192.168.0.221/24 dev eth0
[root@jun-shao ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0    //编辑配置文件
注意:网卡别名不能使用dhcp协议引导

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

(1)netstat命令: Print network connections, routing tables, interface statistics, masquerade

       connections, and multicast memberships

 显示网络连接

       netstat  [--tcp|-t]  [--udp|-u]  [--raw|-w]  [--listening|-l]

       [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]]  [--timers|-o]  [--program|-p]   [--verbose|-v]

       [--continuous|-c] [delay]

  

-t:tcp协议相关

-u:udp相关

-w:raw socket相关

-l:处于监听状态

-a:所有状态

-n:以数字显示ip和端口

-e:扩展格式

-p:显示相关进程及pid

相关组合

-tan,-uan,-tnl,-unl

显示路由表

netstat   {--route|-r} [--numeric|-n] 

-r:内核路由表

-n:数字格式

显示接口统计数据:

netstat  {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e][--pro-gram|-p] [--numeric|-n]  

netstat -i :显示所有接口的数据

netstat -Iiface:显示指定接口的统计数据

[root@jun-shao ~]# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:46325               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      0 192.168.0.223:22            192.168.0.100:17947         ESTABLISHED 
tcp        0    848 192.168.0.222:22            192.168.0.100:14977         ESTABLISHED 
tcp        0      0 192.168.0.223:22            192.168.0.100:16222         ESTABLISHED 
tcp        0      0 192.168.0.104:22            192.168.0.100:4707          ESTABLISHED 
tcp        0      0 :::111                      :::*                        LISTEN      
tcp        0      0 :::42770                    :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 ::1:631                     :::*                        LISTEN      
tcp        0      0 ::1:25                      :::*                        LISTEN

(2)ss命令:

格式:ss [option]... [filter]

选项:

-t :tcp协议相关

-u: udp相关

-w:裸套接字相关

-x:unix sock相关

-l:listen状态链接

-a:所有状态

-n:数字格式

-p:程序相关

-e:扩展的信息

-m:内存用量

-o:计时器信息

FILTER := [ state TCP-STATE ] [ EXPRESSION ]

[root@jun-shao ~]# ss -ta
State       Recv-Q Send-Q                 Local Address:Port                     Peer Address:Port   
LISTEN      0      128                               :::sunrpc                             :::*       
LISTEN      0      128                                *:sunrpc                              *:*       
LISTEN      0      128                               :::42770                              :::*       
LISTEN      0      128                                *:46325                               *:*       
LISTEN      0      128                               :::ssh                                :::*       
LISTEN      0      128                                *:ssh                                 *:*       
LISTEN      0      128                        127.0.0.1:ipp                                 *:*       
LISTEN      0      128                              ::1:ipp                                :::*       
LISTEN      0      100                              ::1:smtp                               :::*       
LISTEN      0      100                        127.0.0.1:smtp                                *:*       
ESTAB       0      0                      192.168.0.223:ssh                     192.168.0.100:17947   
ESTAB       0      848                    192.168.0.222:ssh                     192.168.0.100:14977   
ESTAB       0      0                      192.168.0.223:ssh                     192.168.0.100:16222   
ESTAB       0      0                      192.168.0.104:ssh

                  192.168.0.100:4707 

(3)route命令:用于显示或操作路由表

[root@jun-shao ~]# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     1      0        0 eth0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0

(4)ping命令:检测网络是否通畅

[root@jun-shao ~]# ping -c 1 192.168.1.1     //-c 指定次数
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=62 time=33.1 ms

--- 192.168.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 33ms
rtt min/avg/max/mdev = 33.173/33.173/33.173/0.000 ms

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

(1)RPM包管理

a.安装RPM包

     rpm {-i|--install} [install-options] PACKAGE_FILE ...

     -i:安装程序表

     -v:显示程序包安装的详细过程

     -h:以#显示程序包管理执行进度:每个#表示2%的进度

    

     rpm -ivh PACKAGE_FILE ...

     [install-options]

     --test:测试安装,但不真正执行安装过程;dry run模式

     --nodeps:忽略依赖关系

     --replacepkgs:重新安装

     --nosignature :不检查来源合法性

     --nodigest:不检查完整性

     --noscripts:不执行程序包脚本片段

     %pre:安装前脚本 --nopre

     %post:安装后脚本--nopost

     %preun:卸载前脚本--nopreun

     %postun:卸载后脚本--nopostun

b.升级程序包

     rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

     rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

    

     upgrade:安装有旧版程序包,则“升级”,如果不存在旧版本程序包,则”安装“

     freeshen:安装有旧版本程序包,则“升级”,如果不存在旧版本程序包,则不执行升级操作

     rpm -Uvh PACKAGE_FILE ...

     rpm -Fvh PACKAGE_FILE ...

     --oldpackage :降级

     --force:强制升级

     注意:

     (1) 不要对内核进行升级操作,Linux支持多内核版本并存,因此,直接安装新版本内核

     (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

c.查询

     rpm {-q|--query} [select-options] [query-options]

     select-options:挑选

     -a:查询所有已安装的包

     -f:查询指定的文件由哪个程序安装完成

     -g:查询指定包组的程序包

     -p /PATH/TO/PACKAGE_FILE:针对尚安装的程序文件做查询操作

     --whatprovides:查询程序包的某个功能是由那个程序包安装的

     --whatrequires:查询指定的功能被那个包所依赖

    

     query-options

     --changelog:查询rpm包的changelog

     -c:查询rpm包的配置文件、

     -d:操作rpm包的文档

     -i:查询rpm包的简要信息,如发布版,安装的平台

     -l list:查看指定程序包安装后生成的所有文件

     --script:程序包自带的脚本片段

     -R:查询指定的程序包所依赖的capability

     --provides:列出指定程序包所提供的 capbility

d.卸载

     rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]

               [--notriggers] [--test] PACKAGE_NAME ...

e.校验

     rpm {-V|--verify} [select-options] [verify-options]

       S file Size differs //大小的改变

       M Mode differs (includes permissions and file type) //权限的改变

       5 digest (formerly MD5 sum) differs //MD5改变

       D Device major/minor number mismatch //设备改变

       L readLink(2) path mismatch //连接改变

       U User ownership differs //属主改变

       G Group ownership differs //属组改变

       T mTime differs //日期和时间改变

       P caPabilities differ //功能的改变

     导入所需要的公钥:

     rpm --improt /PATH/FROM/GPG-PUBKEY-FILE

     f.数据库重建

     rpm {--initdb | --rebuilddb}

     initdb:初始化

     如果事先不存在数据库,则新建之:否则不执行任何操作

     rebuilddb:重建

     无论当前存在与否,直接重新创建数据库

(2)yum包管理

     显示仓库列表:

     * repolist [all|enabled|disabled]:显示仓库,all显示所有,默认显示启用

     显示程序包:

     list

     yum list [all | glob_exp1] [glob_exp2] [...] //显示程序包,默认显示所有,也可以使用通配符进行匹配

     yum list [available | installed | updates] [glob_exp1] [...] //显示所有[可用|已安装|更新]的程序包

     安装程序包:

     install package1 ...

     * reinstall package1 [package2] [...] //重新安装

    

     升级程序包

     * update [package1] [package2] [...]

     * downgrade package1 [package2] [...] //降级

    

     检查升级包:

     * check-update

     卸载程序包

     * remove | erase package1 [package2] [...]

     查看程序包的information

     info

     查看指定的特性(可以是某文件)是有那个程序包提供的 -qf:

     provides | whatprovides feature1 [feature2] [...] 

     清理本地缓存:

     * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

     生成缓存

     * makecache

     搜索:

     * search string1 [string2] [...]

     以指定关键字搜索程序包名及summary信息

     查看指定包所依赖的capabilities

     * deplist package1 [package2] [...]

     查看yum事务历史

     * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-

           back|new|sync|stats]

     执行一次yum,就是一次事务

    

     安装从互联网下载的rpm包,解决依赖关系

     localinstall rpmfile1 [rpmfile2] [...]

               (maintained for legacy reasons only - use install)

            * localupdate rpmfile1 [rpmfile2] [...]

               (maintained for legacy reasons only - use update)

     包组管理的相关命令:

     * groupinstall group1 [group2] [...]

            * groupupdate group1 [group2] [...]

            * grouplist [hidden] [groupwildcard] [...]

            * groupremove group1 [group2] [...]

            * groupinfo group1 [...]

     yum的命令行选项:

     --nogpgcheck:禁止使用gpg check

     -y:自动回答yes

     -q:静默模式

     --disablerepo=repoidglob:临时禁用此处指定的repo

     --enablerepo=repoidglob:临时启用此处指定的repo

     --noplugins:禁止所有插件

(3)源码编译程序包管理

     ./configure:

        a.通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile

         b. 检查依赖到的外部环境

     make:

     根据makefile文件,构建应用程序

    make install

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

[root@jun-shao ~]# mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[base]
name=This is a Local repo	//指明仓库的功能
baseurl=file:///mnt/cdrom/	//指明仓库的url
enable=1	//是否启用仓库 1 启用,默认启用
gpgcheck=0
gpgkey=url:指明密钥文件检查软件包的合法性
username:
password:
cost=1000:开销 默认为1000


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

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

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

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

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

#!/bin/bash
declare -i s=0
declare -i k=0
for i in `ls /etc/rc.d/rc3.d/ | grep "^S"` ;do
        $istop
        let s++
done

for i in `ls /etc/rc.d/rc3.d/ | grep "^K"` ;do
        $istart
        let k++
done
echo "K开头的文件总共有:$k,S开头的文件总共有:$s"


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

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

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

   #!/bin/bash

if [ -z $1 ];then	#判断输入的参数为空
echo "请输入用户名!"
exit 1
fi

if [ $# -lt 2 ];then
echo "请输入两个或两个以上的用户名"
exit 2
fi

for i in $*;do
id $i &> /dev/null
if [ $? -eq 0 ];then
let sum+=$(id -u $i)
else
echo “$i,用户不存在!”
exit 3
fi
done
echo "$sum"

14、写一个脚本

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

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

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

   

#!/bin/bash
if [ -z $1 ];then
        echo "请输入目录!"
fi
for i in $*;do
        if [ -d $i ];then
                let dir+=`ls -l $i | grep "^d" | wc -l`
                let file+=`ls -l $i | grep -v "^d" | wc -l`
        fi
done
echo "目录有:$dir,文件类型有:$file"

15、写一个脚本

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

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


#!/bin/bash
echo -n "请输入一个用户名"
read username
if [ -z $username ];then
        echo "用户名不能为空"
fi
id $username &> /dev/null
if [ $? -eq 0 ];then
        let id=$(id -u $username)
        if [ $id -ge 500 ];then
                echo "用户为普通用户"
        fi
else
        echo "用户名不存在!"
fi


16、写一个脚本

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

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

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

#!/bin/bash
declare -i s=0
for i in {1..10};do
        id user$i &> /dev/null
        if [ $? -ne 0 ];then
                useradd user$i && echo "user$i" | passwd --stdin user$i
                let s++
        fi
done
echo "总共添加$s个用户"

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

#!/bin/bash
for i in {20..100};do
        ping -c 1 -w "172.16.250.$i" &> /dev/null
        if [ $? -eq 0 ];then
                echo "172.16.250.$i"
        fi
done


18、打印九九乘法表;

#!/bin/bash
for i in {1..9};do
        for j in $(seq 1 $i);do
                let sum=$i*$j
                echo -n -e "${j}x${i}=$sum\t"
        done
        echo
done


Linux第八周作业