Linux作业8
1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。集线器:集线器工作在OSI模型中的物理层,基于广播方式工作,用于放大和广播数据比特,现在只在特定网络中应用,比如需要对网络抓包的时;
网桥和二层交换机:二层交换机属于网桥,网桥和二层交换机工作在OSI模型中的数据链路层,基于MAC端口表连接连接多台主机或二层网络,能够对数据帧进行存储转发和校验,并能够隔离冲突域。
三层交换机:工作在OSI模型中第三层网络层,是具有部分路由功能的交换机,应用在大型网络中实现数据包的快速交换和转发;
路由器:三层交换机工作在OSI模型中的网络层,用于链接多个网络(可以是不同接口,如串口、光纤、电话线、双绞线等),在互联网中基于路由协议实现数据包的路由功能。
2、IP地址的分类有哪些?子网掩码的表示形式及其作用
IPv4共分为以下五类:
第一段范围(二进制和十进制)有效IP范围默认子网掩码网络数每网络主机数私网地址A类0 000 0000 – 0 111 1111
0 – 1271.0.0.1 – 126.255.255.254
0.0.0.0代表任意网络
127.X.X.X为本地回环地址255.0.0.01262^24-210.0.0.0/8B类10 00 0000 – 10 11 1111
127 – 191128.0.0.1 – 191.255.255.254255.255.0.02^142^16-2172.16.0.0/16 – 172.31.0.0/16C类110 0 0000 – 110 1 1111
192 - 223192.0.0.1 – 223.255.255.254255.255.255.02^212^8-2192.168.0.0/24 – 192.168.255.0/24D类1110 0000 – 1110 1111
224 – 239224.0.0.1 – 239.255.255.254D类地址不分网络和主机,用作组播E类1111 0000 – 1111 1111
240 – 255240.0.0.1 – 255.255.255.254用于科学研究 子网掩码:子网掩码用来区分IPv4地址的网络和主机段,并进而判断多个IP是否处与同一网络。判断方法:子网掩码与IP按位进行“与”运算后,如果网络段相同则说明处于同一网络中。
子网掩码与IP类似,也是由32位二进制组成,其表现形式有两种,一种是和IP类似以点分十进制的方法表示,如:255.255.0.0;另一种为在IP地址后紧跟“/NUM”,NUM为掩码的十进制表示法,如:172.16.0.1/16。
3、计算机网络的分成模型有哪些(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)
4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
将Linux主机接入到TCP/IP网络中需要为主机配置IP地址、网关和DNS等项目。
1). 修改/添加IP地址:
管理网络接口的命令有两个分别为ifconfig和ip,推荐使用ip命令进行配置。注意,使用命令配置的网卡参数立即临时生效:
ipconfig命令,立即临时生效:
ifconfig //显示指定网络接口的信息,不加则显示所有活动状态的网络接口信息
# ifconfig -a//显示所有网络接口的信息,包括非活动状态的接口信息
# ifconfig IFACE //
ifconfig interface options | address ...
# ifconfig IFACE IP/mask
# ifconfig IFACE IP netmask MASK
# ifconfig IFACE IP
使用ifconfig为网卡配置并查看IP地址的方法:
或
ip命令,立即临时生效:
ip address - protocol address management
ip addr { add | del } IFADDR dev STRING
IFADDR=IP/PREFIXLEN
:添加地址时指明网卡别名
:指明作用域
global: 全局可用;
link: 仅链接可用;
host: 本机可用;
:指明广播地址
ip address show - look at protocol addresses
//检查指定设备上的IP地址
//检查指定标签设备的IP地址
//检查指定设备上的主或辅助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 [ If]
删除:route del
route del [-net|-host] target [ 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.3、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" 验证结果:
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
为Linux主机配置网络信息的方式有两种,一种为静态指定(立即临时生效)另一种为使用DHCP协议自动获取网络信息,详细方法如下:
静态指定:
使用命令进行配置,立即临时生效:
添加、修改IP和子网掩码:
ifconfig:
# ifconfig enp0s3:1 192.168.1.208/24 up#为虚拟网卡enp0s3:1指定IP为:192.168.1.208,子网掩码为:255.255.255.0,并激活该网卡
# ifconfig enp0s3:1 #查看虚拟网卡信息
enp0s3:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500
inet 192.168.1.208netmask 255.255.255.0broadcast 192.168.1.255
ether 08:00:27:b4:9f:bftxqueuelen 1000(Ethernet) ip:
# ip addr add 192.168.1.208/24 dev enp0s3 label 'enp0s3:1' #创建一块虚拟网卡命名为enp0s3:1,指定IP为:192.168.1.208,子网掩码为:255.255.255.0
# 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:
# route del default
# 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
# route add default gw 192.168.1.254 #添加默认网关为192.168.1.254
# 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:
# ip route show
192.168.0.3 via 192.168.1.254 dev enp0s3proto dhcpmetric 100
192.168.1.0/24 dev enp0s3proto kernelscope linksrc 192.168.1.61metric 100
192.168.122.0/24 dev virbr0proto kernelscope linksrc 192.168.122.1
# ip route add default via 192.168.1.254 dev enp0s3 #添加默认网关为192.168.1.254
# ip route show #查看路由信息
default via 192.168.1.254 dev enp0s3
192.168.0.3 via 192.168.1.254 dev enp0s3proto dhcpmetric 100
192.168.1.0/24 dev enp0s3proto kernelscope linksrc 192.168.1.61metric 100
192.168.122.0/24 dev virbr0proto kernelscope linksrc 192.168.122.1
# 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
6、写一个脚本,使用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 结果:
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;
网卡配置文件 :/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 #是否允许精通用户控制此网卡
8、如何给网络接口配置多个地址,有哪些方式?
使用ifconfig命令(立即临时生效):
# ifconfig enp0s3:0 192.168.1.81/24 up #新虚拟网卡名称为enp0s3:0,IP为192.168.1.81/24
#
# ifconfig enp0s3:0 #查看新虚拟网IP
enp0s3:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500
inet 192.168.1.81netmask 255.255.255.0broadcast 192.168.1.255
ether 08:00:27:a5:19:25txqueuelen 1000(Ethernet) 使用ip命令(立即临时生效):
# ip addr add 192.168.1.82/24 dev enp0s3 label 'enp0s3:1' #新网卡名为enp0s3:1,IP为192.168.1.82/24
#
# 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命令(立即永久生效):
# nmcli conn modify enp0s3 +ipv4.addresses 192.168.1.83/24 #为enp0s3网卡添加一个IP地址,该IP为192.168.1.83/24
# 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)
# 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: 192.168.1.71/24
IP4.ADDRESS: 192.168.1.83/24 #此处为新添加的IP
IP4.GATEWAY: 192.168.1.1
IP4.DNS: 202.106.0.20
IP4.DNS: 8.8.8.8
IP6.ADDRESS: 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 修改网卡配置文件(永久有效):
# 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
# service network restart #重启网络服务
Restarting network (via systemctl): [确定]
# 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
9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
配置类:
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} [--all|-a] [--extend|-e] [--program|-p] [--numeric|-n]
-i:显示所有网卡的统计信息;
-I=IFACE:显示指定网卡的系统信息;
ss命令:
格式:ss ...
选项:
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
EXPRESSION:
['( dport = :TCPPORT )']
10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
CentOS/Redhat系Linux操作系统可用的软件包管理工具有rpm和yum两种,其中yum是rpm的一个前端工具,是基于rpm的,不可独立存在。
rpm工具:
rpm的通用选项:
--quiet: 静默模式;
-v: verbose;
-vv: 更为详细的verbose;
-h: 以#显示程序包管理执行进度;每个#表示2%的进度
安装软件:
rpm {-i|--install} PACKAGE_FILE ...
--test: 测试安装,但不真正执行安装过程;dry run模式;
--nodeps:忽略依赖关系;
--replacepkgs: 重新安装;
--nosignature: 不检查来源合法性;
--nodigest:不检查包完整性;
--noscipts:不执行程序包脚本片断;
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本;--nopostun
升级软件:
rpm {-U|--upgrade} PACKAGE_FILE ...
rpm {-F|--freshen} 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:
-v, --verbose:verbose operation
-y, --assumeyes:交互时全部回答'yes'
--enablerepo=:临时启用一个或多个仓库,支持统配符;
--disablerepo=:临时禁用一个或多个仓库,支持统配符;
安装软件:
install package1 [...]
reinstall package1 [...](重新安装)
升级软件:
update [...]
downgrade package1 [...] (降级)
卸载软件:
remove | erase package1 [...]
11、如何使用发行版光盘作为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
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS7
enabled=1
gpgcheck=1
gpgkey=file:///media/CentOS7/RPM-GPG-KEY-CentOS-7 刷新缓存,检查是否可用:
12、写一个脚本,完成以下功能
(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 '^.*'); 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" 结果:
13、写一个脚本,完成以下功能
(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" 结果:
14、写一个脚本
(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" 结果:
15、写一个脚本
通过命令行传递一个参数给脚本,参数为用户名
如果用户的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 结果:
16、写一个脚本
(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." 结果:
17、写一脚本,用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 结果:
18、打印九九乘法表;
#!/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 结果:
页:
[1]