第八周:网络基础知识和shell脚本练习

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

网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层
集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层
二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享
三层交换机:具有路由功能的二层交换机
路由器:连接不同网段的设备,负责不同网段之间数据通信
二层交换机一般用于接终端设备,三层交换机用于汇聚层,核心层,路由器用于不同网段之间数据通信

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

A类IP地址 地址范围1.0.0.0到127.255.255.255,默认掩码255.0.0.0

B类IP地址地址范围128.0.0.0-191.255.255.255,默认掩码255.255.0.0

C类IP地址范围192.0.0.0-223.255.255.255,默认掩码255.255.255.0

D类是组播地址,范围从224.0.0.0到239.255.255.255,

E类作为多播和保留使用

以下列出留用的内部私有地址

A类 10.0.0.0–10.255.255.255

B类 172.16.0.0–172.31.255.255

C类 192.168.0.0–192.168.255.255

子网掩码的表示形式:

1)通过与IP地址格式相同的点分十进制表示,如255.255.255.0

2)在IP地址后加上“/”符号以及1-32的数字,其中1-32的数字表示子网掩码中网络标识位的长度,如192.168.1.0/24

子网掩码的作用:

1)用于屏蔽IP地址的一部分以区别网络标识和主机标识

2)用于将一个大的IP网络划分为若干小的子网络

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

OSI七层模型:

1)物理层:主要功能是完成相邻结点之间原始比特流的传输,控制数据怎么被放置到通信介质上。

2)数据链路层:主要功能是如何在不可靠的物理线路上进行数据的可靠传输。完成的是网络中相邻结点之间可靠的数据通信。

3)网络层:主要功能是完成网络中主机间的报文传输。

4)传输层:是整个网络的关键部分,实现两个用户进程间端到端的可靠通信,处理数据包错误、数据包次序,以及其他一些关键传输问题,

5)会话层:允许不同机器上的用户之间建立会话关系。

6)表示层:处理用户信息的表示问题,如编码、数据格式转换和加密等。

7)应用层:是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互联系,实实现各种服务

TCP/IP4层模型

1)网络访问层:功能包括IP地址与物理硬件地址的映射,以及将IP分组封装成帧。基于不同硬件类型的网络接口,定义了和物理介质的连接。相当于OSI参考模型的物理层和数据链路层。

2)网际层:处理来自传输层的分组发送请求;处理输入数据报;处理ICMP报文,即处理网络的路由选择、流量控制和拥塞控制等问题。在功能上类似于ISO/OSI参考模型中的网络层。

3)传输层:主要功能是可靠而又准确地传输并控制源主机与目的主机之间的信息流,提供端到端的控制,通过滑动窗口机制提供流控制,通过序列号和确认机制来保证可靠性。

4)应用层:包括所有的高层协议,与OSI的应用层协议相差不大,包括HTTP、Telnet、FTP、SMTP、POP3、DNS等。

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

vim /etc/sysconfig/network-scripts/ifcfg-eth0    
DEVICE=eth0                                     #网卡号,和ifcfg-eth0对应就可以>
TYPE=Ethernet                                    #网络类型
UUID=b04b477a-06f1-494b-85f8-83e070dc9010                            
ONBOOT=yes                                      #启动时启用连接
NM_CONTROLLED=yes                                #network manager参数
BOOTPROTO=none                                  #获得IP地址方式,手动选择none,自动选择dhcp
IPADDR=192.168.1.61                             #设定IP地址
PREFIX=24                                       #掩码位数
#NETMASK=255.255.255.0                          #也可以以这种发生些掩码
GATEWAY=192.168.1.254                           #网关
DNS1=192.168.1.1                                #DNS
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
修改完成后重启网络
/etc/init.d/network restart

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

[root@localhost ~]# ifconfig eth0 192.168.16.108/24 up
[root@localhost ~]# ip addr add 192.168.16.108/24 dev eth0
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

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

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

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

#!/bin/bash
#
trap 'exit 1' INT
declare -i i=1
for i in $(seq 254 ); do
        if ping 172.16.250.$i -c 1 -W 1 &>/dev/null; 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
        let i++
done

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

DEVICE=eth0                                     #网卡号,和ifcfg-eth0对应就可以>
TYPE=Ethernet                                    #网络类型
UUID=b04b477a-06f1-494b-85f8-83e070dc9010                            
ONBOOT=yes                                      #启动时启用连接
NM_CONTROLLED=yes                                #network manager参数
BOOTPROTO=none                                  #获得IP地址方式,手动选择none,自动选择dhcp
IPADDR=192.168.1.61                             #设定IP地址
PREFIX=24                                       #掩码位数
#NETMASK=255.255.255.0                          #也可以以这种发生些掩码
GATEWAY=192.168.1.254                           #网关
DNS1=192.168.1.1                                #DNS
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no

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

[root@localhost ~]# ifconfig eth0:0 192.168.16.100/24
[root@localhost ~]# ip addr add 192.168.16.18/24 dev eth0:1
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:0

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

1)ifconfig
ifconfig -a:     查看所有网络接口信息
ifconfig interface     查看指定网络接口信息
ifconfig interface up|download     启用或停用指定网络接口
ifconfig interface ip/mask [up]     设定指定网络接口IP地址和掩码
2)route
route -n查看所有路由信息
route add添加路由
    route add [-net|-host] target [netmask Nm] [gw Gw][[dev] If]
    route add -net 192.168.0.0/24 gw 192.168.0.254 dev eth0
    route add -host192.168.1.5 gw 192.168.1.254 dev eth1
route del删除路由
    route del [-net|-host] target [netmask ] [gw Gw][dev] 
    route del -net 192.168.0.0 255.255.255.0
    route del -host192.168.1.5
3)netstat
-t    tcp协议相关的连接
-u    udp协议相碰的连接
-w    raw socker相关的连接
-l    处于监听状态的连接
-a    所有的连接
-n    以数字显示ip和端口
-e    扩展格式
-p    显示相关进程及PID
常用组合
-tan
-uan
-tln
-uln
4)ip
ip link
    ip link set DEVICE IFACE up/down 激活或禁用指定接口
    ip link show up/dev 显示所有激活状态/指定接口信息
ipaddr
    ip addr { add | del } IFADDR dev STRING 增加或删除IP地址
    ip addr show 显示网络接口信息
ip route
    ip route { add | del | show} 添加、删除或显示路由
5)ss
-t    tcp协议相关的连接
-u    udp协议相碰的连接
-w    raw socker相关的连接
-l    处于监听状态的连接
-a    所有的连接
-n    以数字显示ip和端口
-e    扩展格式
-p    显示相关进程及PID
-x    unix sock相关
-m    内存用量
-o    计时器信息

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

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_FIL    E验证包
          rpm –import     PUBKEY    导入公钥
维护    rpm initdb新建数据库
           rpm rebuilddb重建数据库
2)用yum仓库来管理程序包
查看
    yum info PACKAGE_FILE            查看包信息
    yum historylist                        查看yum事务历史
    yum deplistpackage1                查看包依赖
显示
    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 providesfeature1    查看指定的特性
    yum clean    清理本地缓存
    yum search string1    搜索字符串
    yum info PACKAGE_FILE    查看包信息
包组管理
    yum groupinstall group1 [group2] […]    安装包组
    yum groupupdate group1 [group2] […]    升级包组
    yum grouplist [hidden] [groupwildcard][…]    显示包组
    yum groupremove group1 [group2] […]    卸载包组
    yum groupinfo group1 […]     查看包组信息

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

(1)挂载光盘至某目录
mount -r /dev/sr0 /mnt/
(2)创建配置文件
vim /etc/yum.repos.d/CentOS-DVD.repo
[CentOS6.6]
name=CentOS cdrom    #仓库的名字
baseurl=file:///mnt    #repodata目录的仓库访问路径
gpgchecked=0    #使用前是否检验包
enabled=1    #是否启用此仓库

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
for i in $(ls /etc/rc.d/rc3.d|grep "^K"); do
        echo "$i—-Stop"
        let k++
done
for i in $(ls /etc/rc.d/rc3.d|grep "^S"); do
        echo "$i—-Start"
        let s++
done
echo -e  "K file:$k\nS file:$s"

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

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

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

此脚步需要与用户交互:

#!
#
declare -i sum=0
read -p "请输入用户,输入完毕请按q键:" user
until [ $user == q ]; do
        if id $user &>/dev/null; then
                let sum+=$(id -u $user)
                echo "现在用户的UID之和是: $sum"
        else
                echo "你输入的用户不存在,请重新输入!退出请按q键。"
        fi
        read -p "请输入用户,输入完毕请按q键:" user
done

echo "所有的用户UID和是: $sum"

不需要交互的方式:

#!/bin/bash
declare -i sum
if [ $# -lt 1 ];then
echo "At least one username"
exit 1
else
for name in $*
do
if id $name &> /dev/null;then
let sum+=$(grep "^\<$name\>" /etc/passwd | cut -d: -f3)
fi
done
echo "id sum is $sum"
fi

14、写一个脚本

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

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

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

#!/bin/bash
#
declare -i d=0
declare -i s=0
declare -a file
file=( $* )
echo ${file[*]}
for ((i=0;i<$#;i++)); do
        echo 
        echo "${file[$i]}"
        for a in ${file[$i]}/*; do
                if [ -b $a ]; then
                        echo "$a type is block."
                        echo "b" >> ./type.txt
                elif [ -c $a ]; then
                        echo "$a type is char."
                        echo "c" >> ./type.txt
                elif [ -d $a ]; then
                        echo "$a type is directory."
                        echo "d" >> ./type.txt
                        let d++
                elif [ -S $a ]; then
                        echo "$a type is socket."
                        echo "S" >> ./type.txt
                elif [ -L $a ]; then
                        echo "$a type is ln."
                        echo "L" >> ./type.txt
                elif [ -p $a ]; then
                        echo "$a type is p."
                        echo "p" >> ./type.txt
                elif [ -f $a ]; then
                        echo "$a type is file."
                        echo "f" >> ./type.txt
                fi
        done
done
echo "have $d directory."
echo "All Type :$(grep -o "[bcdSLpf]" ./type.txt | sort -u | wc -l)"
\mv  ./type.txt /tmp

15、写一个脚本

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

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

#!/bin/bash
if id $1 &> /dev/null;then
    if [ `id -u $1` -ge 500 ];then
        echo "user is a domestic consumer" 
    else
        echo "user is a system or root consumer"
    fi
else
    echo "user is not exsits"

16、写一个脚本

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

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

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

  #!/bin/bash
if [ $# -lt 1 ];then
echo "At least one username"
exit 1
fi
if id $1 &> /dev/null;then
uid=$(grep "^\<$1\>" /etc/passwd | cut -d: -f3)
if [ $uid -ge 500 ];then
echo "$1 is regular user"
else
echo "$1 is system user"
fi
else
echo "$1 is not exists"
fi

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

#!/bin/bash
#
trap 'exit 1' INT    # 用于捕捉中断信号
declare -i i=1
for i in $(seq 20 100 ); do
        if ping 10.88.159.$i -c 1 -W 1 &>/dev/null; then
                echo -e "\033[0;32;1m 10.88.159.$i is up! \033[0m"
        fi
        let i++
done
~    

18、打印九九乘法表。

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

 

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

(0)
dawningdawning
上一篇 2016-11-21 10:55
下一篇 2016-11-21 15:54

相关推荐

  • 初窥门径之脚本书写

    一、几个脚本的编写: 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 #!/bin/bash echo "HOSTNAME: $HOSTNAME" echo "IPV4 A…

    Linux干货 2016-08-15
  • 深入Php底层,用c为php编写拓展

    1.前言              随着lamp/lnmp架构的流行,Php语言越来越得到广泛的使用。php语言在表现层有着非常优异的表现,部署方便,开发迅速。但Php语言也有着天生短板以及局限性—-对多线程以及多进程的支持不甚如意,以及…

    Linux干货 2016-10-29
  • AWK学习总结

    AWK是一种优良的文本处理工具。其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。 AWK学习总结 函数rand(): 函数length() 函数int()…

    Linux干货 2016-12-03
  • ACL权限详解

    1.ACL简介 2.前期准备 3.ACL的基本操作:添加和修改 4.ACL的其他功能:删除和覆盖 5.目录的默认ACL 6.备份和恢复ACL 7.结束语 1.ACL简介 用户权限管理始终是Linux系统管理中最重要的环节。大家对Linux/Unix的UGO权限管理方式一定不陌生,还有最常用的chmod命令。为了实现一些比较复杂的权限管理,往往不得不创建很多的…

    Linux干货 2017-03-11
  • Redis数据库安全手册

    Redis是一个高性能的key-value数据库,这两年可谓火的不行。而Redis的流行也带来一系列安全问题,不少攻击者都通过Redis发起攻击。本文将讲解这方面的内容,包括Redis提供的访问控制和代码安全问题,以及可以由恶意输入和其他类似的手段触发的攻击。 Redis通用安全模块 Redis被设计成只能由可信环境的可信机器访问。这意味着将它直接暴露在互联…

    2015-03-12
  • RAID[Redundant Array of Independent Disks | 独立硬盘冗余阵列 ]

    前言 一个技术要知其然还要知其所以然 RAID 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列 RAID的基本思想 其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到…

    Linux干货 2016-05-20