马哥教育网络班22期+第八周课程练习

1. 请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 
网桥:工作在OSI模型的数据链路层,将两个局域网连起来,根据MAC地址来转发帧。它可以有效地连接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于连接数量不多的、同一类型的网段,它可以扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。

集线器:主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上,它工作于OSI模型中的“物理层”,因为采用“广播”模式,所以很容易产生“广播风暴”,大部份集线器已被交换机取代。

二层交换机: 工作于OSI模型的第2层(数据链路层),故而称为二层交换机。二层交换技术的发展已经比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中,能够隔离冲突域和有效抑制“广播风暴”的产生。

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

路由器:其功能是决定最优路由和转发数据包。路由表中写入各种信息,由路由算法计算出到达目的地址的最佳路径,然后由相对简单直接的转发机制发送数据包。接受数据的下一台路由器依照相同的工作方式继续转发,依次类推,直到数据包到达目的路由器。其工作模式与二层交换机相似,但路由器工作在OSI模型的第三层——网络层,这个区别决定了路由和交换机在传递包时使用不同的控制信息,实现功能的方式就不同。适用于局域网间互联,局域网与城域网互联互通。


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

blob.png


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

blob.png


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

1.编辑/etc/sysconfig/network-scripts/ifcfg-eno16777728,此为centos7系统,名称可能有所不同,centos6系统为ifcfg-eth0

~]# cat ifcfg-eno16777728
TYPE=Ethernet #指明接口类型,常见的有Ethernet,Bridge,可忽略不写;
BOOTPROTO=static #激活此接口时使用什么协议来配置接口属性,这里为静态
IPV6INIT=yes #是否初始化IPV6
NAME=eno16777728
DEVICE=eno16777728
ONBOOT=yes  #在系统的引导过程中,是否激活此接口
IPADDR=192.168.137.70 #IP地址
NETMASK=255.255.255.0 #掩码
GATEWAY=192.168.137.1 #网关
DNS1=210.21.196.6 #主DNS
DNS2=119.233.255.229 #备DNS

2.重启网络
~]# systemctl restart network.service

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

1.临时修改,只在此shell中和子shell中运行,下次登录失效
]# ifconfig eno16777728 192.168.137.71/24

2.编辑配置文件
~]# cat ifcfg-eno16777728
DEVICE=eno16777728
BOOTPROTO=static
ONBOOT=yes  
IPADDR=192.168.137.70
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=210.21.196.6
DNS2=119.233.255.229

6. 写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态; 
在线的主机使用绿色显示; 
不在线的主使用红色显示;

#!/bin/bash
#
IP=172.16.250

for i in {1..254};do
   if ping -c 1 -w 1 $IP.$i &>/dev/null;then
       echo -e "\033[32m $IP.$i is online. \033[0m"
   else
       echo -e "\033[31m $IP.$i is off. \033[0m"
   fi
done

7. 详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值; 
ifcfg-接口名配置文件 
DEVICE:此配置文件对应的设备的名称; 
ONBOOT:在系统的引导过程中,是否激活此接口; 
UUID:此设备的唯一标识; 
IPV6INIT:是否初始化IPV6 
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none; 
TYPE:指明接口类型,常见的有Ethernet,Bridge; 
DNS1:第一dns服务器指向; 
DNS2:备用dns服务器指向; 
DOMAIN:DNS搜索域; 
IPADDR:配置ip地址; 
NETMASK:子网掩码;centos7支持使用PREFIX以长度方式指明子网掩码; 
GATEWAY:默认网关; 
USERCTL:是否允许普通用户控制此设备; 
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的dns服务器指向;默认为允许:yes 
NM_CONTROLLED:是否使用NetworkManager服务来控制接口; 
HWADDR:设备的mac地址;


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

1.临时生效
# ifconfig eno16777728:0 192.168.137.71/24 up

2.修改配置文件生效
~]# cat ifcfg-eno16777728:0
DEVICE=eno16777728:0
BOOTPROTO=static
ONBOOT=yes  
IPADDR=192.168.137.71
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=210.21.196.6
DNS2=119.233.255.229

9. 常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。 
ifconfig命令:接口及地址查看和管理 
ifconfig [INTERFACE] 
ifconfig interface [aftype] options |address 
ifconfig IFACE IP/MASK [up] 
ifconfig IFACE IP netmask NETMASK

route命令:路由查看及管理 
查看路由: 
route -n 
添加: 
route -add [-net|-host] target [netmask NM] [gw GW] [[dev]if]

删除: 
route del [-net|-host] target [gw GW] [netmask Nm] [[dev]if]

netstat命令: 
显示路由: 
netstat -rn 
-r:显示内核路由表 
-n:数字格式

显示网络连接: 
netstat [--tcp|-t] [--udp|-u] [--listening|-l] [--raw|-w] [--all|-a] [--numeric|-n] [--extend|-e] [--program|-p] 
-t:TCP协议的相关连接,连接均有其状态;FSM(finate state macheine); 
-u:udp相关的连接 
-w:raw socket相关的连接 
-l:处于监听状态的连接 
-a:所有状态 
-n:以数字格式显示IP和port 
-e:扩展格式 
-p:显示相关的进程及PID

常用组合: 
-tan -uan -tnl ,unl,tunlp

显示接口的统计数据: 
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--verbose|-v] [--program|-p] [--numeric|-n]

所有接口: 
netstat -i 
指定接口: 
netstat -I<iface>

ifup/ifdown命令: 
注意:通过配置文件来识别接口并完成配置;

iproute2家族: 
ip命令: 
show / manipulate routing, devices, policy routing and tunnels

ip [ OPTIONS ] OBJECT { COMMAND | help } 
OBJECT={link|addr|route|netns}

ip OBJECT: 
ip link:network device configuration 
ip link set – change device attributes 
dev NAME (default):指明要管理的设备,dev关键字可省略; 
up and down 
multicast onmulticast off启用或关闭多播功能; 
ip link show - display device attributes 
ip link help显示简要使用帮助

ip netns list 列出所有的netns 
ip netns add NAME创建指定的netns 
ip netns del NAME 删除指定的netns 
ip netns exec NAME COMMAND 在指定的netns中运行命令

ip address add -add new protocol address 
ip addr add IFADDR dev IFACE 
[label NAME]:为额外的地址指明接口别名

ip address delete 删除指定接口地址; 
ip address flush 清空地址别名;

ip route { add | del | change | append | replace |monitor } ROUTE 
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]

ss命令: 
ss [options] [ FILTER ] [EXPRESSION] 
选项: 
-t:tcp协议的相关连接 
-u:UDP相关的连接; 
-w:raw socket相关连接 
-l:监听状态的连接 
-a:所有状态连接; 
-n:数字格式 
-p:相关的程序及PID 
-e:扩展格式信息; 
-m:内存用量 
-o:计时器信息


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

rpm安装:

rpm {-i|--install} [install-options] PACKAGE_FILE ... 
rpm -ivh package_file 
GENERAL OPTIONS: 
-v:详细信息 
-vv:更加详细信息

[install-options]: 
-hhash marks输出进度条,每个#表示2%的进度; 
--test:测试安装,检查并报告依赖关系及冲突消息等; 
--nodeps:忽略依赖关系;不建议; 
--replacepkgs:重新安装

注意:rpm可以自带脚本 
四类:--noscripts 
preinstall:安装过程开始之前运行的脚本,%pre,--nopre 
postinstall:安装过程完成之后运行的脚本,%post,--nopost 
preuninstall:卸载过程真正开始执行之前运行的脚本,%postun,--nopreun 
postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun

--nosignature:不检查包签名信息,不检查来源合法性; 
--nodigest:不检查包完整性信息;

rpm升级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... 
rpm {-F|--freshen} [install-options] PACKAGE_FILE ... 
-U:升级或安装 
-F:升级 
rpm -Uvh package_file... 
rpm -Fvh package_file...

--oldpackage:降级; 
--force:强制升级或降级;

注意:

  1. 不要对内核做升级操作;Linux支持多内核并存,因此,直接安装新版内核;

  2. 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(filename.rpmnew)后提供;

rpm卸载

rpm {-e|--erase} [--allmatches] [--nodeps][--noscripts][--test] PACKAGE_NAME ... 
--allmatches:卸载所有匹配指定名称的程序包的各版本; 
--nodeps:忽略依赖关系; 
-test:测试卸载,dry run 模式

rpm查询

rpm {-q|--query} [select-options] [query-options] 
[select-options] 
PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本; 
-a,--all:查询所有已经安装过的包; 
-f,FILE:查询指定的文件由哪个程序包安装生成; 
-p,--package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作; 
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供; 
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

[query-options] 
--changelog:查询rpm包的changelog; 
-l,--list:程序包安装生成的所有列表; 
-i,--info:程序包相关的信息,版本号、大小、所属的包组,等; 
-c,--configfiles:查询指定的程序提供的配置文件; 
-d,--docfiles:查询指定的程序提供的文档; 
--provides:列出指定的程序包提供的所有的CAPABILITY; 
-E,--requires:查询指定的程序包的依赖关系; 
--scripts:查看程序包自带的脚本片段;

用法: 
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE,-qpi PACKAGE_FILE,-qpl PACKAGE_FILE,-qpc PACKAGE_FILE...

rpm校验

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 
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

包来源合法性验证和完整性验证: 
来源合法性验证: 
完整性验证:

获取并导入信任的包制作者密钥: 
对于centos发行版来说:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-xxx

验证: 
1. 安装此组织签名的程序时,会自动执行验证; 
2. 手动验证:rpm -K package_file

数据库重建

rpm管理器数据库路径:/var/lib/rpm/ 
查询操作:通过此处的数据库进行;

获取帮助: 
centos:man rpm 
centos:man rpmdb

rpm {--initdb|--rebuilddb} 
--initdb:初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作; 
--rebuilddb:重新构建,通过读取当前系统上所有已经安装过的程序包进行重新创建;

yum命令的用法:

yum [options] [command] [package ...]

显示仓库列表 
repolist [all|enabled|disabled]

显示程序包 
yum list [all | glob_exp1] [glob_exp2] [...] 
yum list {available|insitalled|updates} [glob_exp1] [...]

安装程序包: 
install package1 [package2] [...] 
reinstall package1 [package2] [...] 重新安装

升级程序包: 
update [package1] [package2] [...] 
downgrade package1 [package2] [...]降级

检查可用升级: 
check-update

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

查看程序包information 
info [...]

查看指定的特性(可以是某文件哪个程序包所提供)是由:rpm -qf 
provides | whatprovides feature1 [feature2] [...]

清理本地缓存: 
clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]

构建缓存: 
makecache

搜索: 
search string1 [string2] [...] 
以指定的关键字搜索程序包名已summary(摘要)信息;

查看指定包所依赖的capabilities: 
deplist package1 [package2] [...]

安装及升级本地程序包: 
localinstall rpmfile1 [rpmfile2] [...] 
(maintained for legacy reasons only - use install) centos6以后可忽略 
localupdate rpmfile1 [rpmfile2] [...] 
(maintained for legacy reasons only - use update)

yum命令行选项: 
--nogpgcheck:禁止运行gpg check; 
-y:自动回答为“yes”; 
-q:静默模式; 
--disablerepo=repoidglob:临时禁用此处指定的repo; 
--enablerepo=repoidglob:临时启用此处指定的repo; 
--noplugins:禁用所有的插件;

yumrepo配置文件中可用的变量: 
$releasever:当前OS的发行版的主版本号; 
$arch:平台类型; 
$basearch:基础平台; 
$YUM0-YUM9 
例如:http://mirrors.magedu.com/centos/$releaserver/$basearch/os

创建YUM仓库: 
createrepo [options] <directory>


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

1.挂载光盘
mount -r /dev/cdrom /mnt/
2.创建本地yum仓库
~]# cat isodata.repo
[isodata]
name=isodata
baseurl=file:///mnt/
enable=1
gpgcheck=0

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

#!/bin/bash
#
declare -i k_file=0
declare -i s_file=0

for i in $(ls /etc/rc.d/rc3.d/ |grep ^K);do
   echo "$i stop"
   let k_file++
done

for i in $(ls /etc/rc.d/rc3.d/ |grep ^S);do
   echo "$i start"
   let s_file++
done

echo "There are $k_file at the beginning of K"
echo "There are $s_file at the beginning of S"

13、写一个脚本,完成以下功能 
(1) 脚本能接受用户名作为参数 
(2) 计算此些用户的ID之和

#!/bin/bash
#
declare -i sum=0

if [ $# -lt 1 ];then
   echo "Usage:$basename $0 username1 username2 ..."
   exit 3
fi

for i in $*;do
   if id $i &> /dev/null;then
       let sum=$sum+$(id -u $i)
   else
       echo "user $i is not existed!"
       exit 5
   fi
done

echo "The sum of the uid for these users is $sum"

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

#!/bin/bash
#
declare -i sum=0

for i in $*;do
   echo $i
       for file in $i/*;do
           [ -f $file ] && echo "$file is a common file."
           [ -d $file ] && echo "$file is a directory." && let sum++
           [ -c $file ] && echo "$file is a Character device file."
           [ -L $file ] && echo "$file is a symbolic link file"
       done
done
   echo "The $* directory have $sum."                                        

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

#!/bin/bash
#
if [ $# -ge 2 -o $# -lt 1 ];then
   echo "Usage:basename $0 USER"
   exit 3
fi

if id $1 &>/dev/null;then
   if [[ $(id -u $1) -ge 500 ]];then
       echo "$1 is common user"
   fi
else
       echo "$1 user is not exists"
fi

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

#!/bin/bash
#
declare -i sum=0

for i in user{1..10};do
   if id $i &>/dev/null;then
       echo "$i is exists."
   else
       useradd $i &>/dev/null
       echo "$i" |passwd --stdin $i &>/dev/null
       let sum++
   fi
done
   echo "Add user $sum."                      

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

#!/bin/bash
#
IP=172.16.250

for ((i=20;i<=100;i++));do
   if ping -c 1 -w 1 $IP.$i &>/dev/null;then
       echo "The $IP.$i is online."
   fi
done

18. 打印九九乘法表;

#!/bin/bash
#
for ((i=1;i<=9;i++));do
   for ((j=1;j<=$i;j++));do
       let sum=$i*$j
       echo -en ""$i"X"$j"=$sum "
   done
   echo ""
done

原创文章,作者:N22-白蚁,如若转载,请注明出处:http://www.178linux.com/64115

(0)
N22-白蚁N22-白蚁
上一篇 2016-12-19
下一篇 2016-12-19

相关推荐

  • Linux基本文本管理命令

    一.Linux上的文件管理命令都有哪些,其使用的方法及其相关演示1.cp命令:copy (文件复制功能)源文件,目标文件单源复制:cp [OPTION]…[-T] SOURCE DEST多源复制:cp [OPTION]…SOURCE…DIRECTORYcp [OPTION]… -T DIRECTORY SOURCE… 单源复制:cp [OPTION]…[-T…

    2017-09-20
  • Linux基础知识(二)-bash基础特性,文件管理命令

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及相关示例演示。 2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内答及其示例演示 4、文件的元数据信息有哪些,分别表示什么含义,如何査看?如何修改文件的时间戳信息。 5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果? 6、显示/var目录下所有以l开头,以一个小写字母结…

    Linux干货 2016-09-26
  • vim编辑器练习&任务计划&脚本编程练习

    请详细总结vim编辑器的使用并完成以下练习题 vim总结: vi:Visual Interface,是一种文本编辑器,所谓文本数据是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。 文本编辑器的种类:  行编辑模式:所谓行编辑器是指一行一行来编辑处理的工具,如sed。  全屏编辑器:编辑空间占据整个屏幕,如nano…

    Linux干货 2016-10-31
  • 马哥Linux第三周作业

    正则表达式 用户和组管理

    Linux干货 2017-12-31
  • CentOS程序包管理

    对于Linux系统而言,其能执行的程序为二进制格式,而对于程序开发者而言,直接利用二进制开发程序是不太现实的,所以一般都是利用高级语言来进行软件开发,其程序也即称为源代码;那么我们在对一个程序进行安装、升级、卸载、 查询、校验等操作时,需要对每个源代码进行编译成为二进制程序,那么显然是不太现实的。所以在各Linux发行版中一般都带有程序包管理器。 所谓程序包…

    Linux干货 2016-08-25
  • 高级文件系统管理2

    五、btrfs文件系统     技术预览版     Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle,2007, CoW     核心特性:     …

    Linux干货 2016-09-09

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-23 00:25

    赞,写的不错~IP地址分类可以补充一下私有地址段。