首页 > 代码库 > 第八周作业
第八周作业
1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
网桥负责网路桥接(network bridging),用来连接不同网段之用。 每个接口是一个冲突域,网桥的两个端口分别有一条独立的交换信道,不是共享一条背板总线,可隔离冲突域。桥接器将网络的多个网段在数据链路层(OSI模型第2层)连接起来。
集线器是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备。集线器是运作在OSI模型中的物理层。相当于一个多端口的中继器,用于将连接在其上的主机形成一个局域网,它们共享一个带宽,若它侦测到碰撞,它会提交阻塞信号。
二层交换机工作在OSI七层中的数据链路层;可以把它看作是一个多端口的网桥,可以学习MAC地址并将其存储在其自身的MAC地址表里面,每个端口都是独立式带宽,各属于独立的冲突域;当交换机收源端口发往目的端口的数据帧后,将先学习源端口的MAC地址并记录到MAC地址表,然后查询自己的MAC地址表是否存在目的MAC地址,没有则进行除源端口外的所有端口数据泛洪,当收到目的MAC地址的回应后,将目的MAC地址学习进MAC地址表,下次数据转发直接发送到目的端口;交换机默认属于一个广播域内,但是可以通过vlan技术将广播域进行分离;二层交换机一般应用于网络中的接入层,用于用户PC或服务器的接入;
三层交换机: 三层交换技术就是二层交换技术+三层转发技术合二为一的技术。在对第一个数据流进行路由后,它将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通过而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。
路由器工作于OSI七层协议中的第三层,其主要任务是接收来自一个网络接口的数据包,根据其中所含的目的地址,决定转发到下一个目的地址。因此,路由器首先得在转发路由表中查找它的目的地址,若找到了目的地址,就在数据包的帧格前添加下一个MAC地址,同时IP数据包头的TTL(Time To Live)域也开始减数,并重新计算校验和。当数据包被送到输出端口时,它需要按顺序等待,以便被传送到输出链路上。
路由器在工作时能够按照某种路由通信协议查找设备中的路由表。如果到某一特定节点有一条以上的路径,则基本预先确定的路由准则是选择最优(或最经济)的传输路径。由于各种网络段和其相互连接情况可能会因环境变化而变化,因此路由情况的信息一般也按所使用的路由信息协议的规定而定时更新。
交换机和集线器的区别:
(1)在OSI/RM(OSI参考模型)中的工作层次不同
交换机和集线器在OSI/RM开放体系模型中对应的层次就不一样,集线器是工作在第一层(物理层),而交换机至少是工作在第二层,更高级的交换机可以工作在第三层(网络层)和第四层(传输层)。
(2)交换机的数据传输方式不同
集线器的数据传输方式是广播(broadcast)方式,而交换机的数据传输是有目的的,数据只对目的节点发送,只是在自己的MAC地址表中找不到的情况下第一次使用广播方式发送,然后因为交换机具有MAC地址学习功能,第二次以后就不再是广播发送了,又是有目的的发送。这样的好处是数据传输效率提高,不会出现广播风暴,在安全性方面也不会出现其它节点侦听的现象。用集线器组成的网络称为共享式网络,而用交换机组成的网络称为交换式网络。 共享式以太网存在的主要问题是所有用户共享带宽,每个用户的实际可用带宽随网络用户数的增加而递减。这是因为当信息繁忙时,多个用户可能同时“争用”一个信道,而一个信道在某一时刻只允许一个用户占用,所以大量的用户经常处于监测等待状态,致使信号传输时产生抖动、停滞或失真,严重影响了网络的性能。
(3)带宽占用方式不同
在带宽占用方面,集线器所有端口是共享集线器的总带宽,而交换机的每个端口都具有自己的带宽,这样就交换机实际上每个端口的带宽比集线器端口可用带宽要高许多,也就决定了交换机的传输速度比集线器要快许多。交换机在传输数据时是并行传输,多个端口对之间可以同时传输数据,或者一个端口内的各台计算机之间的交换数据不会影响到另外一个端口内的数据通信。
(4)传输模式不同
集线器只能采用半双工方式进行传输的,因为集线器是共享传输介质的,这样在上行通道上集线器一次只能传输一个任务,要么是接收数据,要么是发送数据。交换机可以是半双工操作,也可以是全双工操作。
1、 交换机和路由器有什么差别?
交换机运行在OSI模型第二层,路由器运行在第三层。交换机对数据的转发是依托端口和MAC关系表,路由器是依托路由表。交换机主要功能是数据交换,路由器主要功能是路由选择。
2、 交换机和路由器相比较而言有什么区别?
交换机运行在OSI模型第二层,路由器运行在第三层。交换机对数据的转发是依托端口和MAC关系表,路由器是依托路由表。交换机主要功能是数据交换,路由器主要功能是路由选择。
3、 三层交换和传统路由有何区别?
1. 主要功能不同
虽然三层交换机与路由器都具有路由功能,但我们不能因此而把它们等同起来。路由器的主要功能是路由功能,其目的是使设备适用面更广、使其更加实用。三层交换仍是交换机产品,只不过它是具备了一些基本的路由功能的交换机,它的主要功能仍是数据交换。也就是说它同时具备了数据交换和路由 由发两种功能,但其主要功能还是数据交换;而路由器仅具有路由转发这一种主要功能。
2. 主要适用的环境不一样
三层交换机的路由功能通常比较简单,因为它所面对的主要是简单的局域网连接。正因如此,三层交换机的路由功能通常比较简单,路由路径远没有路由器那么复杂。它用在局域网中的主要用途还是提供快速数据交换功能,满足局域网数据交换频繁的应用特点。
而路由器则不同,它的设计初哀就是为了满足不同类型的网络连接,虽然也适用于局域网之间的连接,但它的路由功能更多的体现在不同类型网络之间的互联上,如局域网与广域网之间的连接、不同协议的网络之间的连接等,所以路由器主要是用于不同类型的网络之间。它最主要的功能就是路由转发,解决好各种复杂路由路径网络的连接就是它的最终目的,所以路由器的路由功能通常非常强大,不仅适用于同种协议的局域网间,更适用于不同协议的局域网与广域网间。它的优势在于选择最佳路由、负荷分担、链路备份及和其他网络进行路由信息的交换等等路由器所具有功能。为了与各种类型的网络连接,路由器的接口类型非常丰富,而三层交换机则一般仅同类型的局域网接口,非常简单。
3. 性能体现不一样
从技术上讲,路由器和三层交换机在数据包交换操作上存在着明显区别。路由器一般由基于微处理器的软件路由引擎执行数据包交换,而三层交换机通过硬件执行数据包交换。三层交换机在对第一个数据流进行路由后,它将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通过而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。同时,三层交换机的路由查找是针对数据流的,它利用缓存技术,很容易利用ASIC技术来实现,因此,可以大大节约成本,并实现快速转发。而路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现,转发效率较低。
2、IP地址的分类有哪些?子网掩码的表示形式及其作用
A,B,C类地址
类别 | 最大网络数 | IP地址范围 | 最大主机数 | 私有IP地址范围 |
A | 126(2^7-2) | 0.0.0.0-127.255.255.255 | 16777214(2^24-2) | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 65534(2^16-2) | 172.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 254(2^8-2) | 192.168.0.0-192.168.255.255 |
D类地址用于多点广播(Multicast)。
D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
E类IP地址
以“11110”开始,为将来使用保留。
全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
特殊IP
1、127.0.0.0
127是一个保留地址,该地址是指电脑本身,主要作用是预留下作为测试使用,用于网络软件测试以及本地机进程间通信。在Windows系统下,该地址还有一个别名叫“localhost”,无论是哪个程序,一旦使用该地址发送数据,协议软件会立即返回,不进行任何网 络传输,除非出错,包含该网络号的分组是不能够出现在任何网络上的。
2、10.x.x.x、172.16.x.x~172.31.x.x、192.168.x.x
私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连,因而可能使 用随意的IP地址。保留这样的地址供其使用是为了避免以后接入公网时引起地址混乱。使用私有地址的私有网络在接入Internet时,要使用地址翻译 (nat),将私有地址翻译成公用合法地址。在Internet上,这类地址是不能出现的。
3、0.0.0.0
表示本机的时候,0.0.0.0代表本机所有可用地址;当外部地址用的时候,表示所有网络地址。
严格意义上来 说,0.0.0.0已经不是真正意义上的IP地址了。它表示的是这样一个集合,所有不清楚的主机和目的网络。这里的不清楚是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个收容所,所有不认识的三无人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统就会自动 产生一个目地址为0.0.0.0的缺省路由。
若IP地址全为0,也就是0.0.0.0,则这个IP地址在IP数据报中只能用作源IP地址,这发生在当设备启动时但又不知道自己的IP地址情况下。在使用DHCP分配IP地址的网络环境中,这样的地址是很常见的。用户主机为了获得一个可用的IP地址,就给DHCP服务器发送IP分组,并用这样的地址作为源地址,目的地址为255.255.255.255(因为主机这时还不知道DHCP服务器的IP地址)。
4、255.255.255.255
受限制的广播地址,对本机来说,这个地址指本网段内(同一 个广播域)的所有主机,该地址用于主机配置过程中IP数据包的目的地址,这时主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也还不知道。在任 何情况下,路由器都会禁止转发目的地址为受限的广播地址的数据包,这样的数据包仅会出现在本地网络中。
5、224.0.0.1
组播地址,注意它和广播的区别。从224.0.0.0到239.255.255.255都是这样的地址。224.0.0.1特指所有主 机,224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现协议,使 用组播功能)功能,那么你的主机路由表中应该有这样一条路由。
6、169.254.*.*
如果你的主机使用了DHCP功能自动获 得一个IP地址,那么当你的DHCP服务器发生故障或响应时间太长而超出系统规定的一个时间,Windows系统会为你分配这样一个地址。如果你发现你的 主机IP地址是个诸如此类的地址,很不幸,十有八九是你的网络不能正常运行了。
7、直接广播地址
一个网络中的最后一个地址为直接广播地址,也就是HostID全为1的地址。主机使用这种地址把一个IP数据报发送到本地网段的所有设备上,路由器会转发这种数据报到特定网络上的所有主机。
注意:这个地址在IP数据报中只能作为目的地址。另外,直接广播地址使一个网段中可分配给设备的地址数减少了1个。
8、NetID为0的IP地址
当某个主机向同一网段上的其他主机发送报文时就可以使用这样的地址,分组也不会被路由器转发。比如12.12.12.0/24这个网络中的一台主机12.12.12.2/24在与同一网络中的另一台主机12.12.12.8/24通信时,目的地址可以是0.0.0.8。
子网掩码
子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
A类地址段
B类地址段
C类地址段
主机路由/网络路由
直连路由和网关路由是由下一跳区分的,而主机路由和网络路由是由目的地址的完整度区分的;
主机路由的目的地址是一个完整的主机地址。网络路由目的地址是一个网络地址(主机号部分为0)。
当为某个目的I P地址搜索路由表时,主机地址项必须与目的地址完全匹配,
而网络地址项只需要匹配目的地址的网络号和子网号就可以了。
理解上述两组路由概念间的区别是很重要。
默认路由
当在路由表中找不到与IP包的目的地址精确匹配的路由时,路由器会选择默认路由来转发包。路由协议也可以广播默认路由。
3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。
OSI模型
OSI各层解释
各层物理设备
各层主要协议
4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
修改配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE
指定IPADDR,GETWAY,NATMARSK,DNS,BOOTPROTO=static,ONBOOT=yes
DEVICE=name,这里name是网络设备的名字
IPADDR=addr, 这里addr是IP地址。
HWADDR=MAC 对应的设备的MAC地址
IPADDR=addr, 这里addr是网络地址。
NETMASK=mask, 这里mask是网络掩码。
GATEWAY=addr,默认网关
BROADCAST=addr, 这里addr是广播地址。
GATEWAY=addr, 这里addr是网关地址。
ONBOOT=answer, 这里answer取下列值之一:
yes -- 该设备将在boot时被激活。
no -- 该设备不在boot时激活。
USERCTL=answer, 这里answer取下列值之一:
yes --非root用户可以控制该设备。
no -- 非root用户不允许控制该设备。
BOOTPROTO=none | static | dhcp , IP引导协议
static:表示使用静态IP地址
boot/dhcp:表示通过BOOTP或DHCP协议自动获得IP地址
none(不指定,设置固定ip的情况,这个也行,但是如果要设定多网口绑定bond的时候,必须设成none)
DNS1=IP <首选DNS地址>
DNS2=IP <次选DNS地址>
/etc/resolv.conf
该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数。
resolv.conf的关键字主要有四个,分别是:
nameserver #定义DNS服务器的IP地址
domain #定义本地域名
search #定义域名的搜索列表
sortlist #对返回的域名进行排序
重启网络服务
CentOS 6:# service network restart
CentOS 7:# systemctl restart network.service
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
临时生效
# ip address [add|del] [IP参数] [dev 设备名] [相关参数]
参数:
show :单纯的显示出设备的 IP 信息;
add|del :进行相关参数的增加 (add) 或删除 (del) 设定,主要有:
IP 参数 :主要就是网域的设定,例如 192.168.100.100/24 之类的设定;
dev :这个 IP 参数所要设定的设备,例如 eth0, eth1 等等;
相关参数:如下所示:
broadcast:设定广播位址,如果设定值是 + 表示让系统自动计算;
label :该设备的别名,例如eth0:0;
scope :这个设备的领域,通常是以下几个大类:
global :允许来自所有来源的连线;
site :仅支持IPv6 ,仅允许本主机的连接;
link :仅允许本设备自我连接;
host :仅允许本主机内部的连接;
ip address flush - flush protocol addresses //清空地址
# ifconfig [网络设备] [add| del] IP/mask //添加删除IP
# ifconfig [网络设备] [add| del] IP netmask
# ifconfig [网络设备] down //关闭网卡
# ifconfig [网络设备] up //启用网卡
永久生效
修改配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE
指定IPADDR,GETWAY,NATMARSK,DNS,BOOTPROTO=static,ONBOOT=yes
图形界面配置
centos6
使用setup图形界面设置
Linux网络属性配置的tui(text user interface):system-config-network-tui
centos7
nmcli网络管理命令行工具
网络接口命名
(1)传统命名
以太网:eth#,例如eth0, eth1, …
PPP网络:ppp#, 例如,ppp0, ppp1, …
(2)可预测命名方案(CentOS 7)
支持多种不同的命名机制,根据Fireware, 拓扑结构等信息自动配置
1) Firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1,eno2, …
2) Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1, ens2, …
3) 如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0, …
4) 如果用户显式定义,也可根据MAC地址命名,例如eno16777736(十六进制MAC), …
5)上述均不可用,则仍使用传统方式命名;
(3)命名格式的组成
en:ethernet,表示因特网网卡接口
wl:wlan,表示无线网网卡接口
ww:wwan,Wireless Wide Area Network,表示无线广域网网卡
(4)名称类型:
o<index>:集成设备的设备索引号;
s<slot>:扩展槽的索引号;
x<MAC>:基于MAC地址的命名;
p<bus>s<slot>:基于总线及槽的拓扑结构进行命名;
6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
在线的主机使用绿色显示;
不在线的主使用红色显示;
#!/bin/bash # for i in {1..254};do ping -c 1 -w 1 172.16.250.$i &> /dev/null # -c 执行次数,-w 执行的时间,单位为秒 if [ $? -eq 0 ] ; then echo -e " \033[;32m 172.16.250.$i is up \033[0m" else echo -e " \033[;31m 172.16.250.$i is down \033[0m" fi done
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;
IP、MASK、GW、DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由相关的配置文件:/etc/sysconfig/network-scripts/route-IFACE
(1) 每行一个路由条目: TARGET via GW
(2) 每三行一个路由条目:
ADDRESS#=TARGET
NETMASK#=MASK
DNS服务器指定文件:/etc/resolv.conf
nameserver #定义DNS服务器的IP地址
domain #定义本地域名
search #定义域名的搜索列表
sortlist #对返回的域名进行排序
8、如何给网络接口配置多个地址,有哪些方式?
(1)ifconfig 设备别名 IP地址/掩码
(2)ip addr add IP地址/掩码 dev 设备名 label 设备别名
设备别名: eth0:0, eth0:1, …
(3)为别名添加配置文件;
DEVICE=IFACE_LABEL
BOOTPROTO:网上别名不支持动态获取地址
static, none
(4)修改配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE
添加IPADDR,如果只有一个ip使用IPADDR和PREFIX选项时,后面不能加数字
PREFIX0 对应IPADDR0
PREFIX1 对应IPADDR1
PREFIX3 对应IPADDR3
systemctl restart network.service命令重启网络服务
9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
netstat -tan #查看当前系统网络连接情况
-t tcp协议相关连接
-u udp协议相关连接
-l 监听状态的连接
-a 所有连接
-n 以数字显示ip和端口
route命令
# route -n 查看路由表信息
route add 添加路由
# route add -host 目标地址 gw 网关 dev 设备名(添加主机路由)
# route add -net 目标网段地址 netmask 掩码 gw 网关 dev 设备名
# route add -net 目标网段地址/掩码 gw 网关 dev 设备名
# route add -net 0.0.0.0 netmask 0.0.0.0 gw 网关
# route add default gw 网关 dev 设备名
route del 删除路由
route del [-net|-host] 网段或主机 netmask 掩码 gw 网关 dev 设备名
ss命令:查看网络状态及统计数据 ss [options] [ FILTER ]
(1)[OPTION]:
-t:tcp协议相关
-u:udp协议相关
-w:裸套接字相关
-x:unix sock相关
-l:listen状态的连接
-a:所有
-n:数字格式
-p:相关的程序及PID
-e扩展的信息
-m:内存用量
-o:计时器信息
(2)FILTER := [ state TCP-STATE ] [ EXPRESSION ] 状态过滤功能
可以过滤端口、状态等信息来查看
EXPRESSION:
dport =
sport =
示例:‘( dport = :22 or sport = :22)‘
~]# ss -tan ‘( dport = :22 or sport = :22 )‘
ip命令
ip [ OPTIONS ] OBJECT { COMMAND | help }
10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
rpm命令
安装
-i 安装
-v|-vv|-vvv 显示详细信息
-h 以#显示安装进度一个#表示2%的进度
--nodeps 忽略依赖关系
--test 测试安装
--replacepkgs 重新安装(安装的包已经安装了)
卸载
-e 卸载
--nodeps 忽略依赖关系
升级
-U -Uvh 升级+安装
-F -Fvh 升级(此包已经安装了)
--force 有冲突强制升级
--nodeps 忽略包依赖性关系
查询
-q |--query 查询
rpm -q|--query 包名
-qa 查看所有已经安装的包
rpm -qa 查看所有包名
rpm -qa | grep 包名查看某个包名
-qi 查看包的摘要信息
-qf 查看文件是有那个包安装的
rpm -qf /path/to/file
-ql 查看包安装生成的文件清单
-qc 查看包安装生成的配置文件
-qd 查看包安装生成的帮助文档
-q --scripts 查看相关的脚本
rpm -q --scripts 包名
-qp[i|l|d|c] 查看尚未安装包的详细信息
rpm -qpi /path/to/rpm_file
校验
-K rpm –K[v] 包名
vrpm数据库重建
--initdb 新建 rpm --initdb
yum命令
列表
yum list <package_name>
列出指定安装软件的清单
yum list installed
列出所有已安装的软件包
yum list extras
列出所有已安装但不在 yum 仓库內的软件包
yum grouplist
列出所有的组
yum grouplist "Group1"
列出指定组的软件包列表
安装
yum -y install <package_name>
安装指定的软件
yum -y groupinstall "Group1" "Group2"
安装指定的组
yum -y localinstall <package_name>
安装下载到本地的rpm包
yum reinstall <package_name>
重新安装一遍
更新
yum check-update
列出所有可更新的软件清单
yum update
更新所有安装的软件
yum update <package_name>
更新指定的软件
信息
yum info
安装指定的软件
yum info <package_name>
显示指定包的信息
yum groupinfo "Group1" "Group2"
显示指定组的信息
清除
yum clean all
清除所有yum所保存的信息
yum clean metadata
只清空保存的数据信息安装指定的软件
yum其他常用操作
yum repolist [all|enable|disable]
查看yum仓库的个数,默认显示启用的
yum makecache
手动生成缓存
yum search <package_name>
yum list | grep “*package*”
查找rpm
yum reinstall <package_name>
重新安装一遍
yum whatprovides “*/COMMAND”
查看命令是用那个软件包提供的
11、如何使用发行版光盘作为yum repository,请描述该过程。
挂载光盘到指定目录
# mkdir /mnt/cdrom #创建目录
# mount /dev/cdrom /mnt/cdrom #挂载
# umount /mnt/cdrom #卸载
创建repo文件
cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
[local_server](代表这个库的名字,必须是唯一的,不可以重复)
name=Thisis a local repo (名称描述)
baseurl=file:////mnt/cdrom(yum源目录,源地址)
enabled=1(是否启用该yum源,0为禁用)
gpgcheck=1 (表示使用gpg文件来检查软件包的签名,0为不检查,1为检查)
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 (gpgcheck=0时无需配置)
# yum clean all
# yum makecache #更新缓存
或者
# yum repolist #列出所有可用的yum仓库
yum-config-manager:查看yum的当前的所有配置,包括各个repository的配置
12、写一个脚本,完成以下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;
#!/bin/bash # fot i in $(ls /etc/rc.d/rc3.d);do if echo $i | grep "^K":then echo "$i stop" let K++ elif echo $i | grep "^S";then echo "$i start" let S++ fi done echo "S file $S" echo "K file $K"
13、写一个脚本,完成以下功能
(1) 脚本能接受用户名作为参数;
(2) 计算此些用户的ID之和;
#/bin/bash for i in $*;do if id $i &> /dev/null ;then idnum=`grep "$i" /etc/passwd | cut -d: -f3` idsum+=$idnum else echo "user $i not exist" fi done echo "User id sum is $sum"
14、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
#!/bin/bash # # declare -i dir=0 declare -i b=0 declare -i c=0 declare -i s=0 declare -i p=0 declare -i f=0 declare -i h=0 if [ ! -d $* ];then echo "not a directory" else for i in $*;do for n in $(ls $i);do cd $i if [ -b $n ];then echo "$n is block device" b=1 elif [ -c $n ];then echo "$n is character device" c=1 elif [ -S $n ];then echo "$n is socket" s=1 elif [ -p $n ];then echo "$n is name pipes" p=1 elif [ -h $n ];then echo "$n is symbolic link" h=1 elif [ -d $n ];then echo "$n is diretory" let dir++ d=1 elif [ -f $n ];then echo "$n is ordinary" f=1 else echo "$n is other file" fi done let sum=$b+$c+$s+$p+$f+$h+$d done fi echo "The directory is $dir" echo "File type is $sum"
15、写一个脚本
通过命令行传递一个参数给脚本,参数为用户名
如果用户的id号大于等于500,则显示此用户为普通用户;
#!/bin/bash # read -p " Enter the username:" username id $username&> /dev/null if [ $? -ne 0 ];then echo "user not exist" uid=$(id -u $username) if [ $uid -ge 500 ];then echo "$usernameis common user" else echo “$usernameis system user” fi fi
16、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户; #!/bin/bash # declare -i name=0 for i in {1..10};do id user$i &> /dev/null if [ $? -eq 0 ];then echo "user$i exist" else useradd user$i && echo "user$i" | passwd --stdin user$i > /dev/null let name++ fi done echo "add user sum is $name"
非交互式修改密码
echo "PASSWORD" | passwd --stdin USERNAME
17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
#!/bin/bash # ip=192.168.0. for i in {100..120};do ping -c 1 -w 1 $ip$i &> /dev/null if [ $? -eq 0 ];then echo "$ip$i online" else echo "$ip$i outline" fi done
18、打印九九乘法表;
for循环
#!/bin/bash # for i in {1..9};do for j in $(seq 1 $i);do echo -e -n "${j}X${i}=$[$i*$j]\t" #-n不自动换行,-e使用转义字符,\t插入制表符 done echo #输出空白行换行 done
while循环
#!/bin/bash # declare -i i=1 declare -i j=1 while [ $i -le 9 ];do while [ $j -le $i ];do echo -e -n "${j}X${i}=$[$i*$j]\t" let j++ done echo j=1 let i++ done
第八周作业