一、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。前端
集线器:集线器工做在OSI模型中的物理层,基于广播方式工做,用于放大和广播数据比特,如今只在特定网络中应用,好比须要对网络抓包的时;
node
网桥和二层交换机:二层交换机属于网桥,网桥和二层交换机工做在OSI模型中的数据链路层,基于MAC端口表链接链接多台主机或二层网络,可以对数据帧进行存储转发和校验,并可以隔离冲突域。
缓存
三层交换机:工做在OSI模型中第三层网络层,是具备部分路由功能的交换机,应用在大型网络中实现数据包的快速交换和转发;bash
路由器:三层交换机工做在OSI模型中的网络层,用于连接多个网络(能够是不一样接口,如串口、光纤、电话线、双绞线等),在互联网中基于路由协议实现数据包的路由功能。网络
二、IP地址的分类有哪些?子网掩码的表示形式及其做用ssh
IPv4共分为如下五类:socket
第一段范围(二进制和十进制) | 有效IP范围 | 默认子网掩码 | 网络数 | 每网络主机数 | 私网地址 | |
A类 | 0 000 0000 – 0 111 1111 0 – 127 |
1.0.0.1 – 126.255.255.254 0.0.0.0表明任意网络 127.X.X.X为本地回环地址 |
255.0.0.0 | 126 | 2^24-2 | 10.0.0.0/8 |
B类 | 10 00 0000 – 10 11 1111 127 – 191 |
128.0.0.1 – 191.255.255.254 | 255.255.0.0 | 2^14 | 2^16-2 | 172.16.0.0/16 – 172.31.0.0/16 |
C类 | 110 0 0000 – 110 1 1111 192 - 223 |
192.0.0.1 – 223.255.255.254 | 255.255.255.0 | 2^21 | 2^8-2 | 192.168.0.0/24 – 192.168.255.0/24 |
D类 | 1110 0000 – 1110 1111 224 – 239 |
224.0.0.1 – 239.255.255.254 | D类地址不分网络和主机,用做组播 | |||
E类 | 1111 0000 – 1111 1111 240 – 255 |
240.0.0.1 – 255.255.255.254 | 用于科学研究 |
子网掩码:子网掩码用来区分IPv4地址的网络和主机段,并进而判断多个IP是否处与同一网络。判断方法:子网掩码与IP按位进行“与”运算后,若是网络段相同则说明处于同一网络中。
tcp
子网掩码与IP相似,也是由32位二进制组成,其表现形式有两种,一种是和IP相似以点分十进制的方法表示,如:255.255.0.0;另外一种为在IP地址后紧跟“/NUM”,NUM为掩码的十进制表示法,如:172.16.0.1/16。 ide
三、计算机网络的分红模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。工具
OSI参考模型:
应用层(第7层,Application layer):为计算机与用户交互的接口,好比Telnet、SMTP、FTP、HTTP等协议;
表示层(第6层,Presentation layer):为应用层提供数据,并负责数据的转换和格式化等。好比数据是否须要加密,数据的编码格式(ASCII、JPEG)等;
会话层(第5层,Session layer):负责保证应用程序间数据的独立性。
传输层(第4层,Transport layer):未来自会话层的数据分段,并重组为数据流。主要提供了两个通讯协议TCP(可靠)和UDP(不可靠)。PDU为Segment;
网络层(第3层,Network layer):为数据包提供路由选择服务,主要协议有IP、ICMP。PDU为Packet。涉及的物理设备主要是路由器;
数据链路层(第2层,Data Link layer):负责未来自网络层的数据包转换为比特流,以便于物理层进行传输,也提供了错误发现的服务,但不纠正。使用MAC地址进行通讯。PDU为Frame,涉及的设备有交换机;
物理层(第1层,Physical layer):发送和接收比特流。PDU为bit。涉及的设备有集线器、线缆。
TCP/IP模型:由如下5层组成,其中应用层称为资源子网,传输层、互联网层、数据链路层和物理层称为通讯子网,与OSI模型对应。
应用层(第5层,Application layer):对应OSI模型中的应用层、表示层和会话层;
传输层(第4层,Transport layer)
互联网层(第3层,Internet layer)
数据链路层(第2层,Data Link layer)
物理层(第1层,Physical layer)
四、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
将Linux主机接入到TCP/IP网络中须要为主机配置IP地址、网关和DNS等项目。
1). 修改/添加IP地址:
管理网络接口的命令有两个分别为ifconfig和ip,推荐使用ip命令进行配置。注意,使用命令配置的网卡参数当即临时生效:
ipconfig命令,当即临时生效:
ifconfig [interface]//显示指定网络接口的信息,不加[interface]则显示全部活动状态的网络接口信息
# ifconfig -a//显示全部网络接口的信息,包括非活动状态的接口信息
# ifconfig IFACE [up|down]//
ifconfig interface [aftype] options | address ...
# ifconfig IFACE IP/mask [up]
# ifconfig IFACE IP netmask MASK [up]
# ifconfig IFACE IP[/PREFIXLEN] [up]
使用ifconfig为网卡配置并查看IP地址的方法:
或
ip命令,当即临时生效:
ip address - protocol address management
ip addr { add | del } IFADDR dev STRING [label LABEL]
IFADDR=IP/PREFIXLEN
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明做用域
global: 全局可用;
link: 仅连接可用;
host: 本机可用;
[broadcast ADDRESS]:指明广播地址
ip address show - look at protocol addresses
[dev DEVICE]//检查指定设备上的IP地址
[label PATTERN]//检查指定标签设备的IP地址
[primary and secondary]//检查指定设备上的主或辅助IP地址
使用ip命令不能直接替换网卡的IP地址,能够先删除设备上的IP再添加IP,以下:
2). 修改网关或路由:
添加/修改网关或路由可以使用route或ip route命令:
使用route命令添加网关/路由:
查看:route -n
Flags:Possible flags include
U (route is up)
H (target is a host)
G (use gateway)
R (reinstate route for dynamic routing)
D (dynamically installed by daemon or redirect)
M (modified from routing daemon or redirect)
A (installed by addrconf)
C (cache entry)
! (reject route)
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
添加网关为192.168.1.254:
使用ip命令添加网关/路由:
查看路由条目:ip route { list | show }
添加路由:ip route add TARGET via GW dev IFACE src SOURCE_IP
TARGET:
主机路由:IP
网络路由:NETWORK/MASK
添加网关:ip route add defalt via GW dev IFACE
删除路由:ip route del TARGET
删除网关:ip route del default
添加网关为192.168.1.254:
3). 添加/修改DNS:
DNS的添加/修改需经过配置文件/etc/resolv.conf,Linux最多能够添加3个DNS。
/etc/resolv.conf格式:
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
添加DNS为:192.168.0.三、202.106.0.20、8.8.8.8
配置网卡信息永久生效:
修改网卡的配置文件:
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 HWADDR="08:00:27:b4:9f:bf" TYPE="Ethernet" BOOTPROTO="static" NAME="enp0s3" UUID="1ad1abf6-983f-4727-bc53-ca64a35327f6" ONBOOT="yes" IPADDR="192.168.1.92" NETMASK="255.255.255.0" GATEWAY="192.168.1.254" DNS1="192.168.0.3" DNS2="202.106.0.20" DNS3="8.8.8.8" NM_CONTROLLED="no"
验证结果:
五、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
为Linux主机配置网络信息的方式有两种,一种为静态指定(当即临时生效)另外一种为使用DHCP协议自动获取网络信息,详细方法以下:
静态指定:
使用命令进行配置,当即临时生效:
添加、修改IP和子网掩码:
ifconfig:
[root@C3 network-scripts]# ifconfig enp0s3:1 192.168.1.208/24 up #为虚拟网卡enp0s3:1指定IP为:192.168.1.208,子网掩码为:255.255.255.0,并激活该网卡 [root@C3 network-scripts]# ifconfig enp0s3:1 #查看虚拟网卡信息 enp0s3:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.208 netmask 255.255.255.0 broadcast 192.168.1.255 ether 08:00:27:b4:9f:bf txqueuelen 1000 (Ethernet)
ip:
[root@C3 network-scripts]# ip addr add 192.168.1.208/24 dev enp0s3 label 'enp0s3:1' #建立一块虚拟网卡命名为enp0s3:1,指定IP为:192.168.1.208,子网掩码为:255.255.255.0 [root@C3 network-scripts]# ip addr show dev enp0s3 #查看虚拟网卡信息 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:b4:9f:bf brd ff:ff:ff:ff:ff:ff inet 192.168.1.61/24 brd 192.168.1.255 scope global dynamic enp0s3 valid_lft 42122sec preferred_lft 42122sec inet 192.168.1.209/24 scope global secondary enp0s3:0 valid_lft forever preferred_lft forever inet 192.168.1.208/24 scope global secondary enp0s3:1 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:feb4:9fbf/64 scope link valid_lft forever preferred_lft forever
添加修改路由:
route:
[root@C3 network-scripts]# route del default [root@C3 network-scripts]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.3 192.168.1.254 255.255.255.255 UGH 100 0 0 enp0s3 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@C3 network-scripts]# route add default gw 192.168.1.254 #添加默认网关为192.168.1.254 [root@C3 network-scripts]# route -n #查看路由信息 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 enp0s3 192.168.0.3 192.168.1.254 255.255.255.255 UGH 100 0 0 enp0s3 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
ip:
[root@C3 network-scripts]# ip route show 192.168.0.3 via 192.168.1.254 dev enp0s3 proto dhcp metric 100 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.61 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 [root@C3 network-scripts]# ip route add default via 192.168.1.254 dev enp0s3 #添加默认网关为192.168.1.254 [root@C3 network-scripts]# ip route show #查看路由信息 default via 192.168.1.254 dev enp0s3 192.168.0.3 via 192.168.1.254 dev enp0s3 proto dhcp metric 100 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.61 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 [root@C3 network-scripts]# route -n #查看路由信息 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 enp0s3 192.168.0.3 192.168.1.254 255.255.255.255 UGH 100 0 0 enp0s3 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
修改配置文件:
# cat ifcfg-enp0s3 HWADDR=08:00:27:B4:9F:BF NAME=enp0s3 UUID=480ace9a-9c89-470f-8b5f-b124bb13607d ONBOOT=yes TYPE=Ethernet BOOTPROTO=static IPADDR=192.168.1.91 NETMASK=255.255.255.0 GATEWAY=192.168.1.254 DNS1=192.168.0.3 DNS2=202.106.0.20
动态分配:
修改配置文件(/etc/sysconfig/network-scripts/ifcfg-NIC_NAME)使用DHCP协议自动获取IP、网关和DNS等信息:
# cat ifcfg-enp0s3 HWADDR=08:00:27:B4:9F:BF TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=enp0s3 UUID=480ace9a-9c89-470f-8b5f-b124bb13607d ONBOOT=yes
六、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的全部主机的在线状态;
在线的主机使用绿色显示;
不在线的主使用红色显示;
#!/bin/bash # declare -i i=1 net='192.168.1' while [ $i -le 254 ]; do if $(ping -n -c 1 -w 1 $net.$i &> /dev/null ); then echo -e "\033[32m $net.$i is online. \033[0m" else echo -e "\033[31m $net.$i is offline. \033[0m" fi let i++ done
结果:
七、详细描述每一个网络接口的配置文件中各个参数的含义和其所对应的值;
网卡配置文件 :/etc/sysconfig/network-scripts/ifcfg-IFACE
HWADDR=08:00:27:B4:9F:BF #网卡的MAC地址; TYPE=Ethernet #网卡类型,常见的有Ethernet、Bridge; BOOTPROTO=static #网卡在激活时IP地址的获取协议,有dhcp、static、none和bootp; PEERDNS=no #当BOOTPROTO为dhcp时,是否容许DHCP所分配的DNS覆盖/etc/resolv.conf; NAME=enp0s3 #网卡名称 UUID=480ace9a-9c89-470f-8b5f-b124bb13607d #网卡的惟一标示 ONBOOT=yes #OS在引导时是否激活此设备; IPADDR=192.168.1.71 #网卡的主IP地址; PREFIX=24 #子网掩码长度,也可写为NETMASK=255.255.255.0 GATEWAY=192.168.1.1 #默认网关; DNS1=202.106.0.20 #第一个DNS,若与/etc/resolv.conf冲突,则以此处为主; DNS2=8.8.8.8 #备用DNS NM_CONTROLLED #NM为NetworkManager的简写,指定网卡是否接受NetworkManager的控制; USERCTL=no #是否容许精通用户控制此网卡
八、如何给网络接口配置多个地址,有哪些方式?
使用ifconfig命令(当即临时生效):
[root@C1 ~]# ifconfig enp0s3:0 192.168.1.81/24 up #新虚拟网卡名称为enp0s3:0,IP为192.168.1.81/24 [root@C1 ~]# [root@C1 ~]# ifconfig enp0s3:0 #查看新虚拟网IP enp0s3:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.81 netmask 255.255.255.0 broadcast 192.168.1.255 ether 08:00:27:a5:19:25 txqueuelen 1000 (Ethernet)
使用ip命令(当即临时生效):
[root@C1 ~]# ip addr add 192.168.1.82/24 dev enp0s3 label 'enp0s3:1' #新网卡名为enp0s3:1,IP为192.168.1.82/24 [root@C1 ~]# [root@C1 ~]# ip addr show dev enp0s3 #检查新虚拟网卡信息 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:a5:19:25 brd ff:ff:ff:ff:ff:ff inet 192.168.1.71/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet 192.168.1.81/24 brd 192.168.1.255 scope global secondary enp0s3:0 valid_lft forever preferred_lft forever inet 192.168.1.82/24 scope global secondary enp0s3:1 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fea5:1925/64 scope link valid_lft forever preferred_lft forever
使用nmcli命令(当即永久生效):
[root@C1 ~]# nmcli conn modify enp0s3 +ipv4.addresses 192.168.1.83/24 #为enp0s3网卡添加一个IP地址,该IP为192.168.1.83/24 [root@C1 ~]# nmcli conn down enp0s3; nmcli conn up enp0s3 #重启网卡使配置生效; Connection 'enp0s3' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2) Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3) [root@C1 ~]# nmcli dev show enp0s3 #检查结果 GENERAL.DEVICE: enp0s3 GENERAL.TYPE: ethernet GENERAL.HWADDR: 08:00:27:A5:19:25 GENERAL.MTU: 1500 GENERAL.STATE: 100 (connected) GENERAL.CONNECTION: enp0s3 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/3 WIRED-PROPERTIES.CARRIER: on IP4.ADDRESS[1]: 192.168.1.71/24 IP4.ADDRESS[2]: 192.168.1.83/24 #此处为新添加的IP IP4.GATEWAY: 192.168.1.1 IP4.DNS[1]: 202.106.0.20 IP4.DNS[2]: 8.8.8.8 IP6.ADDRESS[1]: fe80::a00:27ff:fea5:1925/64 IP6.GATEWAY: # cat ifcfg-enp0s3 #查看网卡的配置文件 HWADDR=08:00:27:A5:19:25 TYPE="Ethernet" NAME="enp0s3" UUID="1ad1abf6-983f-4727-bc53-ca64a35327f6" ONBOOT="yes" BOOTPROTO="none" DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no DNS1=202.106.0.20 DNS2=8.8.8.8 IPADDR=192.168.1.71 PREFIX=24 IPADDR1=192.168.1.83 #新IP已写入配置文件中 PREFIX1=24 GATEWAY=192.168.1.1
修改网卡配置文件(永久有效):
[root@C1 network-scripts]# cat ifcfg-enp0s3 HWADDR=08:00:27:A5:19:25 TYPE="Ethernet" NAME="enp0s3" UUID="1ad1abf6-983f-4727-bc53-ca64a35327f6" ONBOOT="yes" BOOTPROTO="none" DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no DNS1=202.106.0.20 DNS2=8.8.8.8 IPADDR0=192.168.1.71 IPADDR1=192.168.1.81 #在同一文件中指定多个IP时须要使用IPADDR#来取分,#为IP标号 PREFIX0=24 PREFIX1=24 #同IPADDR,并与同标号的IP绑定掩码; GATEWAY=192.168.1.1 [root@C1 network-scripts]# service network restart #重启网络服务 Restarting network (via systemctl): [ 肯定 ] [root@C1 network-scripts]# ip addr show dev enp0s3 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:a5:19:25 brd ff:ff:ff:ff:ff:ff inet 192.168.1.71/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet 192.168.1.81/24 brd 192.168.1.255 scope global secondary enp0s3 #新IP已生效 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fea5:1925/64 scope link valid_lft forever preferred_lft forever
九、经常使用的网络管理类工具备哪些,并用示例形式描述他们的使用方法。
配置类:
ifconfig、ip、route、nmcli参见第4题和第8题
监控类:
netstat:显示网络会话、路由表和网络统计等信息。
显示网络链接:
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
-t: tcp协议相关
-u: udp协议相关
-w: raw socket相关
-l: 处于监听状态
-a: 全部状态
-n: 以数字显示IP和端口;
-e:扩展格式
-p: 显示相关进程及PID
经常使用组合:
-tan, -uan, -tnl, -unl, -tunlpe
显示路由表:
netstat {--route|-r} [--numeric|-n]
-r: 显示内核路由表
-n: 数字格式
显示接口统计数据:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
-i:显示全部网卡的统计信息;
-I=IFACE:显示指定网卡的系统信息;
ss命令:
格式:ss [OPTION]... [FILTER]
选项:
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的链接
-a: 全部
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
EXPRESSION:
['( dport = :TCPPORT [or sport = :ssh] )']
十、Linux系统软件包管理方法(安装、升级、卸载等操做)有哪些,以及如何管理的。
CentOS/Redhat系Linux操做系统可用的软件包管理工具备rpm和yum两种,其中yum是rpm的一个前端工具,是基于rpm的,不可独立存在。
rpm工具:
rpm的通用选项:
--quiet: 静默模式;
-v: verbose;
-vv: 更为详细的verbose;
-h: 以#显示程序包管理执行进度;每一个#表示2%的进度
安装软件:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
[install-options]
--test: 测试安装,但不真正执行安装过程;dry run模式;
--nodeps:忽略依赖关系;
--replacepkgs: 从新安装;
--nosignature: 不检查来源合法性;
--nodigest:不检查包完整性;
--noscipts:不执行程序包脚本片段;
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun
升级软件:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrage:若是已安装了旧版程序包,则“升级”;若是未安装旧版程序包,则“安装”;
freeshen:若是已安装了旧版程序包,则“升级”;若是未安装旧版程序包,则不执行升级操做;
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降级;
--force: 强行升级;
卸载软件:
rpm {-e|--erase} [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
-e|--erase:卸载软件包
--nodeps:卸载时忽略依赖关系;
--test:测试卸载,并不真正卸载;
--noscripts:卸载时不执行程序包脚本片段;
yum工具:
yum命令的用法:
yum [options] [command] [package ...]
Options:
-v, --verbose:verbose operation
-y, --assumeyes:交互时所有回答'yes'
--enablerepo=[repo]:临时启用一个或多个仓库,支持统配符;
--disablerepo=[repo]:临时禁用一个或多个仓库,支持统配符;
安装软件:
install package1 [package2] [...]
reinstall package1 [package2] [...] (从新安装)
升级软件:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
卸载软件:
remove | erase package1 [package2] [...]
十一、如何使用发行版光盘做为yum repository,请描述该过程。
1).挂载光盘,并使光盘开机自动挂载;
# grep iso9660 /etc/fstab /dev/sr1 /media/CentOS7 iso9660 defaults,ro,loop 0 0
2).建立光盘仓库配置文件;
# cat /etc/yum.repos.d/CentOS-Media.repo [CentOS7-Media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS7 enabled=1 gpgcheck=1 gpgkey=file:///media/CentOS7/RPM-GPG-KEY-CentOS-7
刷新缓存,检查是否可用:
十二、写一个脚本,完成如下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示全部以K开头的文件的文件名,而且给其附加一个stop字符串;
(3) 显示全部以S开头的文件的文件名,而且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;
#!/bin/bash # declare -i sumS=0 declare -i sumK=0 for file in $(ls /etc/rc.d/rc3.d/ | grep '^[K|S].*'); do if echo $file | grep '^S' &> /dev/null; then echo "$file start" let sumK++ else echo "$file stop" let sumS++ fi done echo -e "K files: $sumK\nS file: $sumS"
结果:
1三、写一个脚本,完成如下功能
(1) 脚本能接受用户名做为参数;
(2) 计算此些用户的ID之和;
#!/bin/bash # declare -i countUID=0 if [ $# -eq 0 ]; then echo "Usage: $0 <USERNAME1> <USERNAME2>..." exit 1 fi for user in $@; do if id $user &> /dev/null ; then echo "$user UID: $(id -u $user)" let countUID+=$(id -u $user) else echo "$user not existed." fi done echo "Sum UID: $countUID"
结果:
1四、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每一个目录的全部一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
#/bin/bash # declare -i dirCount=0 declare -i blkCount=0 declare -i chaCount=0 declare -i regCount=0 declare -i symCount=0 declare -i pipCount=0 declare -i socCount=0 declare -i othCount=0 for dir in $@; do if [ -d $dir ]; then cd $dir for file in $(ls .); do echo "$(file $file)" if [ -d $file ]; then let dirCount++ elif [ -f $file ]; then let regCount++ elif [ -b $file ]; then let blkCount++ elif [ -c $file ]; then let chaCount++ elif [ -L $file ]; then let symCount++ elif [ -p $file ]; then let pipCount++ elif [ -S $file ]; then let socCount++ else let othCount++ fi done else echo "$dir is not directory or not exist." fi done echo "=================================" echo "Directory: $dirCount" echo "Block files: $blkCount" echo "Character files: $chaCount" echo "Regular files: $regCount" echo "Symbolic link files: $symCount" echo "Pipe files: $pipCount" echo "Socket files: $socCount" echo "Other files: $othCount"
结果:
1五、写一个脚本
经过命令行传递一个参数给脚本,参数为用户名
若是用户的id号大于等于500,则显示此用户为普通用户;
#!/bin/bash # if id $1 &> /dev/null; then userID=$(id -u $1) echo "$1 UID: $userID" if [ $userID -gt 500 ]; then echo "$1 is regular user." else echo "$1 is system user." fi else echo "user $! not exist." fi
结果:
1六、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;
#!/bin/bash # declare -i addedUser=0 for ((i=1;i<=10;i++)); do if id user$i &> /dev/null; then echo "user$i already existed." else if useradd user$i &> /dev/null; then echo "user$i" | passwd --stdin user$i &> /dev/null let addedUser++ echo "user$i add OK." else echo "user$i add failed." fi fi done echo -e "=========================\nTotal added user: $addedUser."
结果:
1七、写一脚本,用ping命令测试172.16.250.20-172.16.250.100之内有哪些主机在线,将在线的显示出来;
#!/bin/bash # net="192.168.1" echo "Online IPs:" for ((i=20;i<=100;i++));do ping -n -w 1 -c 1 $net.$i &> /dev/null && echo "$net.$i" done
结果:
1八、打印九九乘法表;
#!/bin/bash # printMulTab() { for ((i=1;i<=$1;i++));do for ((j=1;j<=$i;j++));do echo -e -n "${j}X${i}=$[$i*$j]\t" done echo done } printMulTab 9
结果: