1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
网桥:连接不同子网,使其透明通信,它们工作在链路层。它们处理的是链路层数据,一般来说就是以太
网帧格式的 数据,缺点是无法避免“广播风暴”,交换机就是网桥的集合。
根据MAC地址来转发帧,本地通信只限本网段内,相当于中继器,线路比较长保证信号不变形的传输
工作在物理层,相当于一个物理接口
集线器:
集线器的基本功能是信息分发,它把一个端口接收的所有信号向所有端口分发出去。一些集线器
在分发之前将弱信号重新生成,一些集线器整理信号的时序以提供所有端口间的同步数据通信,
工作在物理层,集线器只是把各个终端互相连接起来而已,处理的是信号。
接收到的数据包进行广播转发,所有端口都能收到此数据,通过MAC确认是不是发给自己的包进行回应
广播形式转发数据都每个端口,工作在数据链路层,共享带宽
二层交换机:
传统交换机从网桥发展而来,属于OSI第二层即数据链路层设备。它根据MAC地址寻址,通
过站表选择路由,站表的建立和维护由交换机自动进行。
物理编址、网络拓扑结构、错误校验、帧序列以及流控 不是广播形式转发数据,对于一个目的
MAC进行转发,工作在数据链路层,与集线器不同,不是广播形式,而是选择,同时独享带宽
三层交换机:
三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部
的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发
通过IP转发数据包,不具有选路功能,基于IP的转发,工作在网络层,相当于路由器
路由器
路由器工作于OSI参考模型的第3层(网络层),是连接因特网中各局域网、广域网的设备,它
根据信道的情况自动选择和设定路由,以最佳路径,按前后顺发送信号
为经过路由器的每个数据包寻找一条最佳传输路径 选路,转发,NAT等 工作在网络层,路由
选路转发数据
2、IP地址的分类有哪些?子网掩码的表示形式及其作用
iP地址就是给每一个连接在Internet上的主机分配一个唯一的32bit 地址(标识符),IP地址的结构使我们可以Internet上很方便地进行寻址,IP地址有两部分组成,一部分为网络地址,另一部分为主机
地址.IP地址分为A,B,C,D,E5类.常用的是B和C两类.
A类:
0 000 0000- 0 111 111:1-127
网络数:127-1=126
每个网络中的主机数:2^24-2
默认子网掩码:255.0.0.0
私有地址 10.0.0.0/8
B类
10 00 0000-10 11 1111: 128-191
网络数:2^14
网络主机数:2^16-2
默认子网掩码:255.255.0.0
私网地址:172.16.0.0/16 - 172.31.0.0/16
C类
110 0 0000- 110 1 1111: 192-223
网络数:2^21
网络主机数:2^8-2
默认子网掩码:255.255.255.0
私网地址192.168.0.0/24-192.168.255.0/24
D类:组播
1110 0000 - 1110 1111: 224-239 //以1110开头
E类:保留,240-255
3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。
OSI模型:(1)物理层
物理层所处理的数据单位是比特(bit),物理层向上为数据链路层提供物理链路,实现透明的比
特流(bit stream)传输服务,物理层向下与物理媒体相连,要确定连接物理媒体的网络接口的
机械、电气、功能和过程方面的特性。
物理设备:网卡、网线;老式集线器;
(2)数据链路层
数据链路层负责在单个链路上的结点间传送以帧(frame)为PDU的数据,在不太可靠的物理链路上
实现可靠的数据传输。数据链路层的主要功能包括:建立、维持和释放数据链路的连接,链路的
访问控制,流量控制和差错控制。
物理设备:MAC地址,二层交换机;PPP协议;
(3)网络层
网络层传送的PDU称为分组或包(packet),在物理网络间传送分组,负责将源端主机的报文通过
中间转发结点传送到目的端。网络层是通信子网的最高层,为主机提供虚电路和数据报两种方
式的服务。网络层主要负责分组转发和路由选择,根据路由表把分组逐跳地由源站传送到目的
站,并能适应网络的负载及拓扑结构的变化,动态地更新路由表。
物理设备:IP地址,网关,网关代理;三层交换机;路由设备;
(4)传输层
传输层传输的PDU称为报文(message),传输层为源结点和目的结点的用户进程之间提供端到端的
可靠的传输服务。端到端的传输指的是源结点和目的结点的两个传输层实体之间,不涉及路由器
等中间结点。为了保证可靠的传输服务,传输层具备以下一些功能:面向连接、流量控制与拥塞
控制、差错控制相网络服务质量的选择等。
协议:TCP,UDP协议,IP代理;
(5)会话层
会话层在传输层服务的基础上增加控制会话的机制,建立、组织和协调应用进程之间的交互过
程。会话层提供的会话服务种类包括双工、半双工和单工方式。会话管理的一种方式是令牌管理
,只有令牌持有者才能执行某种操作。会话层提供会话的同步控制,当出现故障时,会话活动在
故障点之前的同步点进行重复,而不必从头开始。
协议: HTTP协议,web,mail
(6)表示层
表示层定义用户或应用程序之间交换数据的格式,提供数据表示之间的转换服务,保证传输的信
息到达目的端后意义不变。
(7)应用层
应用层直接面向用户应用,为用户提供对各种网络资源的方便的访问服务。
TCP/IP模型:
TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP
的参考模型将协议分成四个层次,它们分别是:网络访问层、网际互联层、传输层(主机到主机)、和
应用层。
1、主机到网络层
实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一
个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网
络类型的不同而不同。
物理设备:网卡、网线、中继器;老式集线器;
2、网络互连层
网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽
快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序
可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。
网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。
除此之外,网络互连层还需要完成拥塞控制的功能。
物理设备:二层交换机,网桥
3、传输层
在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输
层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)
和用户数据报协议UDP(user datagram protocol)。 TCP协议是一个面向连接的、可靠的协议。
它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层送下来的字节
流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处
理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据,UDP协
议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。
物理设备:三层交换机,路由器; 4、应用层
TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。
应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协
议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(Hyper
Text Transfer Protocol,HTTP),也有基于UDP协议的。
物理设备:高层交换机等
4、如何将linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
第一步配置IP/NETMASK:本地通信第二步配置路由(网关):跨网络通信
第三部配置DNS服务器地址,Linux可以配置三个DNS:基于主机名的通信
第四步重启网络服务
实例:
1、vim /etc/sysconfig/network-scripts/ifcfg-eth0 (修改配置文件,永久有效)
2、编辑eth0文件,完成后保存退出
ONBOOT=no改为ONBOOT=yes
BOOTPROTO=dhcp改为BOOTPROTO=static或none
IPADDR=IP地址
NETMASK=mas地址
GATEWAY=网关地址
DNS1=dns服务器地址(dns可省略)
3重启网络服务
service network restart或/etc/init.d/network restart
即时生效:(重启后失效)
ifconfig eth0 192.168.0.1/24
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
配置文件修改之后,如果要生效,需要重启网络服务;
CentOS 6:# service network restart
CentOS 7:# systemctl restart network.service
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
静态指定:ifconfig:配置IP,NETMASK
ifconfig IFACE IP/MASK [up|down]
iproute2家族:
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route | netns }
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
centos6:setup:text window 工具
centos6:nmtui:text window 工具
配置文件:RedHat及相关发行版,最简单的在这一个配置文件里配。
/etc/sysconfig/network-scripts/ifcfg-NETCARD_NAME
(1) DNS服务器指定 :配置文件:/etc/resolv.conf
(2) 本地主机名配置:
配置文件:/etc/sysconfig/network
CentOS 7:hostnamectl set-hostname:设定主机名,永久有效;
vim /etc/hostname
hostname HOSTNAME 当前系统有效,重启后无效;
echo "VALUE" > /proc/sys/kernel/hostname
动态分配:依赖于本地网络中有DHCP服务
DHCP:Dynamic Host Configure Procotol
路由的相关配置文件:/etc/sysconfig/networkj-scripts/route-IFACE
6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态; 在线的主机使用绿色显示; 不在线的主机使用红色显示;
[root@localhost scripts]# cat ping2.sh#!/bin/bash
#
declare -i uphosts=0
declare -i downhosts=0
for i in {1..254}; do
if ping -W 1 -c 1 172.16.250.$i &> /dev/null; then
echo -e "\033[0;32;1m 172.16.16.$i is up! \033[0m"
let uphosts+=1
else
echo -e "\033[0;31;1m 172.16.250.$i is down! \033[0m"
let downhosts+=1
fi
done
echo "Up hosts: $uphosts, Down hosts: $downhosts."
[root@localhost scripts]#
[root@localhost scripts]#
#!/bin/bash
for ((i=1;i<255;i++));do
ping -c 1 -w 1 "172.16.250.$i" >/dev/null
if [ $? -eq 0 ];then
echo -e "\033[0;32;1m 192.168.1.$i is up! \033[0m"
else
echo -e "\033[0;31;1m 192.168.1.$i is down! \033[0m"
fi
done
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;
ifcfg-IFACE配置文件参数:DEVICE:此配置文件对应的设备的名称;
ONBOOT:在系统引导过程中,是否激活此接口;
UUID:此设备的惟一标识;
IPV6INIT:是否初始化IPv6;
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、
static、none;
TYPE:接口类型,常见的有Ethernet, Bridge;
DNS1:第一DNS服务器指向;
DNS2:备用DNS服务器指向;
DOMAIN:DNS搜索域;
IPADDR: IP地址;
NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码;
GATEWAY:默认网关;
USERCTL:是否允许普通用户控制此设备;
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务
器指向覆盖本地手动指定的DNS服务器指向;默认为允许;
HWADDR:设备的MAC地址;
NM_CONTROLLED:是否使用NetworkManager服务来控制接口;
8、如何给网络接口配置多个地址,有哪些方式?
[root@mylinux ~]# ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 临时有效[root@mylinux ~]# ip addr add 192.168.0.221/24 dev eth0:5 临时有效
[root@mylinux network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:2
DEVICE=eth0
HWADDR=00:0C:29:8A:89:8B
TYPE=Ethernet
UUID=c65e7b55-1f46-449e-b4e6-4c53b3417bba
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static #网上别名不支持动态获取地址,仅支持static, none
IPADDR=192.168.111.11
NETMASK=255.255.255.0
GATEWAY=192.168.111.1
[root@mylinux network-scripts]#
9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
ifconfig interface [aftype] options | address ...ifconfig -a 显示所有接口,包括inactive状态的接口;
ifconfig IFACE_LABEL IPADDR/NETMASK#ifconfig eth1:3 192.168.19.2/24支持多个ip
ifconfig eth1 192.168.1.12/24 #配置ip地址,立即生效。
ifconfig eth1 promisc #启用混杂模式
ifconfig eth1 -promisc #关闭混杂模式
ifconfig eth1 0 #删除eth1的ip地址
查看:# route -n 数字格式显示
route add [-net|-host] target [netmask Nm] [gw GW] [[dev] If]
route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1 #添加路由,下一跳地址必须同网段
route add default gw 192.168.10.1 配置默认路由
删除:#route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
route del -net 10.0.0.0/8 gw 192.168.10.1
route del default
netstat -rn#显示路由表
netstat -tnlp #显示网络连接信息,常用:-tan, -uan, -tnl, -unl, -tunlp
netstat -i #显示所有接口的统计数据
netstat -Ieth0#显示指定的eth0接口统计数据,中间没有空格。
ifup/ifdown:必须要有这个/etc/sysconfig/network-scripts/ifcfg-IFACE配置文件才支持。
hostname HOSTNAME#当前系统有效,重启后无效
hostnamectl status:显示当前主机名信息
hostnamectl set-hostname HOSTNAME:centos7设定主机名,永久有效
hostnamectl set-hostname mylinux #cat /etc/hostname
vim /etc/sysconfig/network#contos6:此方法的设置不会立即生效; 但以后会一直有效
vim /etc/resolv.conf# 格式nameserver 218.104.111.122
如果网卡配置文件中也同时配置了DNS,生效的应该是网卡文件中的地址。
vim /etc/hosts #看你的需要,相关文件更改。支持别名
host/nslookup/dig#测试dns是否有效的工具#eg:dig -t A www.magedu.com#不检查hosts文件
dig -x IP#IP --> FQDN大多数服务器不支持反解
ip link show=ip link list #display device attributes支持简写:ip li sh
ip link help - 显示简要使用帮助
ip link set - change device attributes
dev NAME (default):指明要管理的设备,dev关键字可省略;
up和down:eg:ip link set eth1 dev up/down #启用或禁用
multicast on或multicast off:启用或禁用多播功能;
name NAME:重命名接口
mtu NUMBER:设置MTU的大小,默认为1500;
netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;
ip netns: - manage network namespaces. centos7默认支持
ip netns list:列出所有的netns
ip netns add NAME:创建指定的netns
#ip netns add mynet
#ip link set eno16777736 netns mynet
#ip netns exec mynet ip link show
ip netns del NAME:删除指定的netns
#ip netns del mynet
ip netns exec NAME COMMAND:在指定的netns中运行命令
# ip netns exec mynet ip link show
ip addr add IFADDR dev IFACE
# ip addr add 192.168.10.100/24 dev eth1 可以添加多个地址
#ip addr add 10.1.1.10/8 dev eth1 label eth1:0#指定基别支持ifconfig查看
[scope SCOPE_VALUE]:用处不大
global:全局可用;
link:接口可用;
host:仅本机可用;
ip addr delete IFADDR dev IFACE
#ip addr del 192.168.21.1/24 dev eth1
ip addr list [IFACE]:显示接口的地址
ip addr flush dev IFACE
#ip addr flush dev eth1
ip roote list
ip route add - add new route
ip route change - change route
ip route replace - change or add new one
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
#ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100
#ip route add 192.168.0.0/24 via 10.0.10.100 dev eth1
# ip route add default via GW
ip route del TYPE PRIFIX 如果有多条的话需要具体指定。
#ip route delete 192.168.1.0/24
ip route get TYPE PRIFIX
#ip route get 192.168.0.0/24
ip route flush - flush routing tables
#ip route flush 169.254/16
ss [options] [ FILTER ] FILTER := [ state TCP-STATE ] [ EXPRESSION ]
选项:
-t:TCP协议的相关连接 TCP的常见状态:
-u:UDP相关的连接 LISTEN:监听
-w:raw socket相关的连接 ESTABLISEHD:建立的连接
-l:监听状态的连接 FIN_WAIT_1:
-a:所有状态的连接 FIN_WAIT_2:
-n:数字格式 SYN_SENT:
-p:相关的程序及其PID SYN_RECV:
-e:扩展格式信息 CLOSED:
-m:内存用量 EXPRESSION:
-o:计时器信息 dport = sport =
示例:'( dport = :22 or sport = :22)'
~]# ss -tan '( dport = :22 or sport = :22 )'
~]# ss -tan state ESTABLISHED
IP/NETMASK/GW/DNS等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)
CentOS 6: service SERVICE {start|stop|restart|status}
CentOS 7:systemctl {start|stop|restart|status} SERVICE[.service]
路由的相关配置文件:/etc/sysconfig/networkj-scripts/route-IFACE
支持两种配置方式,但不可混用:
(1) 每行一个路由条目:TARGET via GW
10.0.0.0/8 via 192.168.10.2
(2) 每三行一个路由条目:
ADDRESS#=TARGET ADDRESS0=20.0.0.0
NETMASK#=MASK NETMASK0=255.0.0.0
GATEWAY#=NEXTHOP GATEWAY0=192.168.10.2
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
connection - start, stop, and manage network connections
nmcli device show
nmcli device status
nmcli device disconnect/connect eno16777736
ping [OPTION] destination
-c #:发送的ping包个数;
-w #:ping命令超时时长;
-W #:一次ping操作中,等待对方响应的超时时长;
-s #:指明ping包报文大小;
hping命令: (package: hping3)
send (almost) arbitrary TCP/IP packets to network hosts
--fast #快
--faster #比快更快
--flood #有多快发多快,
-i uX #指定时间,多少微妙发一个包。
traceroute命令:跟踪从源主机到目标主机之间经过的网关;
- print the route packets trace to network host
ftp命令:
ftp: File Transfer Protocol
ftp服务命令行客户端工具, #ftp 192.168.1.1
lftp命令:
lftp [-p port] [-u user[,pass]] [site]
get, mget 下载
put, mput 上传
rm, mrm 删除
lftpget命令:
lftpget [-c] [-d] [-v] URL [URL...]
-c:继续此前的下载;
lftpget http://172.16.0.1/centos6.repo
wget命令:非交互是下载器
The non-interactive network downloader.
wget [option]... [URL]...
-b:在后台执行下载操作;
-q:静默模式,不显示下载进度;
-O file:下载的文件的保存位置;
-c:续传;
--limit-rate=amount:以指定的速率传输文件;
10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]安装:-i, --install
升级:-U, --update, -F, --freshen
卸载:-e, --erase
查询:-q, --query
校验:-V, --verify
数据库维护:--builddb, --initdb
安装:rpm -ivh PACKAGE_FILE ...
升级:rpm -Uvh PACKAGE_FILE ...升级或安装
升级:rpm -Fvh PACKAGE_FILE ...升级
卸载:rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test]
PACKAGE_NAME ...
查询:rpm -qi | qf | qc | qf |qd | qpi | qpl | qpc
校验:rpm {-V|--verify} [select-options] [verify-options]
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
yum repolist [all|enabled|disabled] 显示仓库列表
yum list [all | glob_exp1] [glob_exp2] [...]显示程序包
yum list {available|installed|updates} [glob_exp1] [...] 显示程序包
yum install package1 [package2] [...] 安装程序包:
yum reinstall package1 [package2] [...] 重新安装
yum update [package1] [package2] [...] 升级程序包
yum downgrade package1 [package2] [...] 降级
yum check-update 检查可用升级
yum remove | erase package1 [package2] [...] 卸载程序包
yum info [...] 查看程序包information
yum provides | whatprovides feature1 [feature2] [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 清理本地缓存
yum makecache 构建缓存
yum search string1 [string2] [...] 以指定的关键字搜索程序包名及summary信息
yum deplist package1 [package2] [...] 查看指定包所依赖的capabilities
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|
undo|rollback|new|sync|stats] 查看yum事务历史
yum localinstall rpmfile1 [rpmfile2] [...]本地安装软件包
yum localupdate rpmfile1 [rpmfile2] [...] 本地更新软件包
yum groupinstall group1 [group2] [...] 以组的形式安装软件包组件
yum groupupdate group1 [group2] [...] 更新组相关软件包
yum grouplist [hidden] [groupwildcard] [...]获取已安装和没安装的软件包组件 章
yum groupremove group1 [group2] [...] 移除软件包组件
yum groupinfo group1 [...]查看软件包组件相关信息
yum createrepo [options] <directory> 创建yum仓库:
yum的命令行选项:
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo;
--enablerepo=repoidglob:临时启用此处指定的repo;
--noplugins:禁用所有插件;
yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch:基础平台;
$YUM0-$YUM9
实例:http://mirrors.magedu.com/centos/$releasever/$basearch/os
11、如何使用发行版光盘作为yum repository,请描述该过程。
(1) 挂载光盘至某目录,例如/media/cdrom# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件:vim /etc/yum.repos.d/CentOS-Media.repo
[c7-media] #yum仓库的名字
name=CentOS-$releasever - Media #描述
baseurl=file:///media/cdrom/ #仓库的访问路径,注意三个斜线
# file:///media
# file:///media/cdrecorder/
gpgcheck=1 #使用前是否检验包
enabled=1 #是否启用此仓库
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #指定密钥路径
(3)查看仓库: yum repolist
12、写一个脚本,完成以下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;
[root@mylinux scripts]# cat e.sh#!/bin/bash
#
declare -i k=0
declare -i s=0
for i in /etc/rc.d/rc3.d/*; do
file=`basename $i`
if [[ $file =~ ^K ]]; then
echo "$file stop"
let k++
else
echo "$file start"
let s+=1
fi
done
echo "The K file: $k,The S file: $s"
[root@mylinux scripts]#
13、写一个脚本,完成以下功能
(1) 脚本能接受用户名作为参数;
(2) 计算此些用户的ID之和;
[root@mylinux scripts]# cat g.sh#!/bin/bash
#
declare -i sum=0
[ $# -lt 1 ] && echo "At least 1 username" && exit 1
for i in $*; do
if id $i &> /dev/null; then
sum+=$(id -u $i)
else
echo "$i is not an username"
exit 2
fi
done
echo "The userID zhi he is: $sum."
[root@mylinux scripts]#
14、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
[root@mylinux scripts]# cat h.sh#!/bin/bash
#
declare -i f=0
declare -i d=0
declare -i l=0
declare -i b=0
declare -i c=0
declare -i s=0
declare -i p=0
declare -i u=0
if [ $# -lt 1 ];then
echo "At list a dirctory like /root" && exit 2
else
for i in $*; do
for filename in $(ls $i); do
cd $i
if [ -f $filename ]; then
echo "$filename ==>common file."
let f++
elif [ -d $filename ]; then
echo "$filename ==>Directory."
let d++
elif [ -L $filename ]; then
echo "$filename ==>Symbolic link."
let l++
elif [ -b $filename ]; then
echo "$filename ==>block special file."
let b++
elif [ -c $filename ]; then
echo "$filename ==>character special file."
let c++
elif [ -S $filename ]; then
echo "$filename ==>Socket file."
let s++
elif [ -p $filename ]; then
echo "$filename ==>ming ming gua ndao file."
let p++
else
echo "$filenam ==>Unkown file"
let u++
fi
done
done
fi
echo "#######################################################"
echo "Directory: $d"
echo "common file: $f"
echo "Symbolic link: $l"
echo "block special file: $b"
echo "character special file: $c"
echo "Socket file: $s"
echo "ming ming guandao file:$p"
echo "Unkown file: $u"
[root@mylinux scripts]#
15、写一个脚本
通过命令行传递一个参数给脚本,参数为用户名
如果用户的id号大于等于500,则显示此用户为普通用户;
[root@mylinux scripts]# cat s.sh#!/bin/bash
#
[ $# -lt 1 ] && echo "Atleast a username." && exit 1
! id $1 &> /dev/null && echo "No such user." && exit 2
userid=$(id -u $1)
if [ $userid -eq 0 ]; then
echo "root"
elif
[ $userid -ge 1000 ]; then
echo "common user."
else
echo "System user."
fi
[root@mylinux scripts]#
16、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;
[root@mylinux scripts]# cat x.sh#!/bin/bash
#
declare -i sum=0
for i in {1..10}; do
if id user$i &> /dev/null;then
echo "user$i exists"
else
useradd user$i && echo "user$i" | passwd --stdin user$i &> /dev/null
let sum++
fi
done
echo "add $sum user finished"
[root@mylinux scripts]# for i in {1..10}; do userdel -r user$i;done #删除
17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
[root@mylinux scripts]# cat ping2.sh#!/bin/bash
for((i=20;i<=100;i++))
do
ping -c 1 -w 1 172.16.250.$i &> /dev/null
if [ $? -eq 0 ];then
echo "172.16.250.$i is up"
fi
done
[root@mylinux scripts]#
18、打印九九乘法表;
[root@mylinux scripts]# cat 994.sh#!/bin/bash
#
for ((j=1;j<=9;j++)); do
for ((i=1;i<=j;i++)); do
echo -e -n "${i}X${j}=${i}*${j}\t"
done
echo
done
[root@mylinux scripts]#