1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。
网桥:
网桥是早期的二层网络设备,每个端口分别有一条独立的交换信道,不是共享一条信道,可隔离冲突域。网桥比集线器(Hub)性能更好,集线器上各端口都是共享同一条信道的,工作于数据链路层。后被端口更多的交换机替代。
集线器:
多端口中继器,工作在物理层,本身不具备识别信号的能力,只是起到把信号放大再传输出去的作用。工作原理是广播,它的所有端口是共享带宽,每个端口的实际可用带宽随着端口数的增加而递减,当信息繁忙时,多个端口可能同进一个信道,而一个信道在给定时刻只允许一个端口占用,所以其他端口经常处于监听等待状态。集线器采用的是半双工方式进行传输,虽然可以双向,但不能同时,要么发送,要么接受,严重影响网络性能,所有端口同在一个冲突域和广播域。
二层交换机:
工作于数据链路层,不仅能把信号放大,还能够识别帧,对数据进行流量和差错控制。每个端口都有一条独占的带宽,每个端口都是一个冲突域,当两个端口交换信息时,并不影响其他端口的工作,它为用户提供的是点对点的连接,数据包只发向目的端口,而不会向所有端口发送。交换机既可以用半双工方式传输又可以用全双工方式传输,大大增强了网络的利用率。
三次交换机:
除了拥有交换机的功能外,还可提供路由功能,可隔离冲突域和广播域,应用于大型局域网中,可进行网际互联。
路由器:
工作在网络层设备,转发数据包并提供路径选择,可进行网际互联。
2、IP地址的分类有哪些?子网掩码的表示形式及其作用
1. A类IP地址 (子网掩码:255.0.0.0)
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。
2. B类IP地址 (子网掩码:255.255.0.0)
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
3. C类IP地址 (子网掩码:255.255.255.0)
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
4. D类地址用于多点广播(Multicast)。
D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
5. E类IP地址
以“llll0”开始,为将来使用保留。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下:
127.0.0.1~127.255.255.254 (本地回环地址)
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255
3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。
OSI模型:
物理层:完成相邻节点之间原始比特流的传输,将数字”1/0“翻译成电信号,规定物理接口的标准,传输单位是比特,集线器工作于物理层。
数据链路层:如何在不可靠的物理线路上进行数据的可靠传输,进行差错控制,流量控制,网桥和二层交换机工作于此层。
网络层:完成网络中主机间的报文传输,其关键问题之一就是使用数据链路层的服务将每个报文从源端传输到目标端,路径的选择,路由器和三层交换机工作于此层。
传输层:实现网络中不同主机上的用户进程之间可靠的数据通信。负责传输的整体工作,差错控制和流量控制。
会话层:允许不同机器上的用户之间建立会话关系,管理会话。
表示层:用于完成某些特定功能,对这些功能人们常常希望找到普遍的解决办法,而不必由每个用户自己来实现,数据格式的转换,压缩与解压缩,加密与解密。
应用层:支持运行于不同计算机的进程彼此之间的通信,而这些进程则是为用户完成不同任务而设计的,为用户体提供程序接口。
TCP/IP模式:
网络接口层:对应于OSI模型的物理层和数据链路层
网络层:对应于OSI模型的网络层
传输层:对应于OSI模型的传输层
应用层:对应于OSI模型的会话层,表示层,应用层
4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:5A:C1:B7
TYPE=Ethernet
UUID=4f1e9841-e705-40bb-9935-d2a7916db6c8
ONBOOT=yes (默认为no,需要设置成yes)
NM_CONTROLLED=yes
BOOTPROTO=static (static:静态ip,dhcp:自动获取ip)
IPADDR=192.168.1.131 (设置ip地址)
NETMASK=255.255.255.0 (设置子网掩码)
GATEWAY=192.168.1.1 (设置默认网关)
DNS1=192.168.1.1 (设置DNS服务器的指向)
5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。
(1)ip命令:
[root@localhost ~]# ip addr add 192.168.2.100/24 dev eth1 (设置ip地址)
[root@localhost ~]# ip route add default gw 192.168.2.1 dev eth1 (设置默认路由)
(2)ifocnfig命令:
[root@localhost ~]# ifconfig eth1 address 192.168.2.101/24
(3)编辑/etc/sysconfig/network-scripts/interface配置文件
(4)进入配置界面设置:system-config-network或setup (CentOS 6)
nmtul (CentOS 7)
6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
在线的主机使用绿色显示;
不在线的主使用红色显示;
#!/bin/bash
# Author: liuguohui
# Date: 2016-10-04
# Email: liuguohui1008@sina.com
# Descriptions:
#
net=172.16.250
for((i=1;i<=254;i++))
do
if ping -c 1 -w 1 $net.$i &> /dev/null;then
echo -e "\033[32m $net.$i\033[0m"
else
echo -e "\033[31m $net.$i\033[0m"
fi
done
7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;
TYPE=Ethernet 接口类型,常见的有Ethernet,Bridge
BOOTPROTO=static 激活次接口时使用什么协议来配置接口属性,常有dhcp,bootp,static,none
PEERDNS=yes 如果bootproto的值为dhcp,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的dns服务指向
IPV6INIT=yes 是否初始化ipv6
NAME=eno16777736
UUID=ccb25f8e-2f8b-4c42-b0eb-0382fa3ad39a 此设备的唯一标识
DEVICE=eno16777736 此配置文件对应的设备名称
ONBOOT=yes 在系统引导过程中,是否激活此接口
NM_CONTROLLED=yes 是否使用NetworkManager服务来控制接口
DOMAIN= dns搜索域
USERCTL= 是否允许普通用户控制此设备
IPADDR= ip地址
NETMASK= 子网掩码:centos 7支持使用PREFIX以长度方式指明子网掩码
GATEWAY= 默认网关
DNS1= DNS服务器指向
DNS2= 备用DNS服务器指向
8、如何给网络接口配置多个地址,有哪些方式?
(1)ip命令
[root@localhost ~]# ip addr add 192.168.2.100/24 dev eth1 (配置第一个地址)
[root@localhost ~]# ip addr add 192.168.3.100/24 dev eth1 (配置第二个地址)
[root@localhost ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:5a:c1:c1 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.100/24 scope global eth1
inet 192.168.3.100/24 scope global eth1
inet6 fe80::20c:29ff:fe5a:c1c1/64 scope link
valid_lft forever preferred_lft forever
(2)ifconfig
[root@localhost ~]# ifconfig eth1 192.168.4.100/24 (配置第一个地址)
[root@localhost ~]# ifconfig eth1:0 192.168.5.100/24 (配置第二个地址,网卡需要指定别名)
[root@localhost ~]# ifconfig
eth1 Link encap:Ethernet HWaddr 00:0C:29:5A:C1:C1
inet addr:192.168.4.100 Bcast:192.168.4.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe5a:c1c1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1281 (1.2 KiB) TX bytes:468 (468.0 b)
eth1:0 Link encap:Ethernet HWaddr 00:0C:29:5A:C1:C1
inet addr:192.168.5.100 Bcast:192.168.5.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(3)修改配置文件
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ (进入/etc/sysconfig/network-scripts/目录下)
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1 (复制网卡配置文件ifcfg-eth0并取别名为ifcfg-eth0:1)
[root@localhost network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 (编辑eth0的配置文件)
DEVICE=eth0
HWADDR=00:0C:29:5A:C1:B7
TYPE=Ethernet
UUID=4f1e9841-e705-40bb-9935-d2a7916db6c8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.131
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
[root@localhost network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-eth0:1 (编辑eth0:1的配置文件)
DEVICE=eth0
HWADDR=00:0C:29:5A:C1:B7
TYPE=Ethernet
UUID=4f1e9841-e705-40bb-9935-d2a7916db6c8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。
(1)ifconfig命令
ifconfig [interface]
# ifconfig -a
# ifconfig INTERFACE [up|down]
ifconfig interface [aftype] options | address …
# ifconfig INTERFACE IP/mask [up]
# ifconfig INTERFACE IP netmask MASK
(2)route命令
路由管理命令
查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
目标:192.168.1.3 网关:172.16.0.1
~]# route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
目标:192.168.0.0 网关:172.16.0.1
~]# route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
~]# route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
默认路由,网关:172.16.0.1
~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
~]# route add default gw 172.16.0.1
删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]
目标:192.168.1.3 网关:172.16.0.1
~]# route del -host 192.168.1.3
目标:192.168.0.0 网关:172.16.0.1
~]# route del -net 192.168.0.0 netmask 255.255.255.0
(3) netstat命令:
netstat – Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
显示网络连接:
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
显示路由表:
netstat {–route|-r} [–numeric|-n]
-r: 显示内核路由表
-n: 数字格式
显示接口统计数据:
netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]
# netstat -i
# netstat -I IFACE
(4) ip命令:
ip – show / manipulate routing, devices, policy routing and tunnels
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
link OBJECT:
ip link – network device configuration
set
dev IFACE
可设置属性:
up and down:激活或禁用指定接口;
show
[dev IFACE]:指定接口
[up]:仅显示处于激活状态的接口
ip address – protocol address management
ip addr { add | del } IFADDR dev STRING
[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域
global: 全局可用;
link: 仅链接可用;
host: 本机可用;
[broadcast ADDRESS]:指明广播地址
例如:
ip addr add 192.168.1.111/24 dev eth0 label eth0:0
ip address show – look at protocol addresses
[dev DEVICE]
[label PATTERN]
[primary and secondary]
ip address flush – flush protocol addresses
使用格式同show
p route – routing table management
ip route add
添加路由: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 delete
删除路由:ip route del TARGET
ip route show
ip route flush
[dev IFACE]
[via PREFIX]
(5) ss命令:
格式:ss [OPTION]… [FILTER]
选项:
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。
安装:
rpm {-i|–install} [install-options] PACKAGE_FILE …
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度;每个#表示2%的进度
rpm -ivh 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: 强行升级;
注意:
(1)uname -r 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
查询:
rpm {-q|–query} [select-options] [query-options]
[select-options]
-a: 所有包
-f: 查看指定的文件由哪个程序包安装生成
# rpm -qf /etc/fstab
setup-2.5.58-9.el5
-p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
查询尚未安装的程序包
rpm -qlp /PATH/TO/PACKAGE_FILE
–whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
–whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
[query-options]
–changelog:查询rpm包的changlog (制作的,非作者发布的)
-c: 查询程序的配置文件
-d: 查询程序的生成文档
-i: information
-l: 查看指定的程序包安装后生成的所有文件;
–scripts:程序包自带的脚本片断
-R: 查询指定的程序包所依赖的CAPABILITY;
–provides: 列出指定程序包所提供的CAPABILITY;
–conflicts:列出创建包与哪些包可能冲突
用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …
-qa
卸载:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME …
校验:
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
包来源合法性验正及完整性验正:
完整性验正:SHA256
来源合法性验正:RSA
公钥加密:
对称加密:加密、解密使用同一密钥;
非对称加密:密钥是成对儿的,
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
导入所需要公钥:
rpm –import /PATH/FROM/GPG-PUBKEY-FILE
CentOS 7发行版光盘提供的密钥文件:RPM-GPG-KEY-CentOS-7
数据库重建:
rpm {–initdb|–rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之;否则,不执行任何操作;
rebuilddb:重建
无论当前存在与否,直接重新创建数据库;
11、如何使用发行版光盘作为yum repository,请描述该过程。
[root@localhost ~]# mount /dev/cdrom1 /mnt
[root@localhost ~]# vim /etc/yum.repos.d/localyum.repos
[cdrm]
name=cdrm 名称
baseurl=file:///mnt/ 路径
cost=1 代价
gpgcheck=0 不检查
enabled=1 开启
12、写一个脚本,完成以下功能
(1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
(2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
(3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
(4) 分别统计S开头和K开头的文件各有多少;
#!/bin/bash
# Author: liuguohui
# Date: 2016-10-12
# Email: liuguohui1008@sina.com
# Descriptions:
#
declare -i k_id=0
declare -i s_id=0
for i in $(ls /etc/rc.d/rc3.d/); do
if echo $i |grep -i "^k" >/dev/null; then
var=$(echo $i |sed 's/^[kK].*/& stop/')
let k_id++
echo $var
elif echo $i |grep -i "^s" >/dev/null; then
var=$(echo $i |sed 's/^[sS].*/& start/')
let s_id++
echo $var
fi
done
echo "k_total:$k_id"
echo "s_total:$s_id"
脚本执行效果:
[root@localhost test]# bash file.sh
K10saslauthd stop
K15svnserve stop
K87named stop
K87restorecond stop
K89netconsole stop
K89rdisc stop
K92iptables stop
S02lvm2-monitor start
S10network start
S11auditd start
S11portreserve start
S22messagebus start
S25blk-availability start
S25netfs start
S26haldaemon start
S26udev-post start
S55sshd start
S99libvirt-guests start
S99local start
k_total:7
s_total:12
13、写一个脚本,完成以下功能
(1) 脚本能接受用户名作为参数;
(2) 计算此些用户的ID之和;
#!/bin/bash
#
declare -i uid_sum=0
[ $# -lt 2 ] && echo "At least two user_id" && exit 1
for i in $*; do
if id $i &>/dev/null; then
uid=$(id -u $i)
uid_sum+=$uid
else
echo "$i no exist !" && exit 2
fi
done
echo $uid_sum
脚本执行效果:
[root@localhost test]# bash file7.sh visitor1 visitor2 visitor3
1503
14、写一个脚本
(1) 传递一些目录给此脚本;
(2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
(3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;
#!/bin/bash
#
declare -i dir_sum=0
declare -i file_sum=0
if [ $# -lt 1 ]; then
echo "At least a argument" && exit 2
fi
for i in $*; do
if ! [ -d $i ]; then
echo "input directory please !" && exit 3
fi
for filename in $i/*; do
if [ -d $filename ]; then
echo "$filename is directory"
let dir_sum++
elif [ -f $filename ]; then
echo "$filename is ASCII file"
let file_sum++
elif [ -b $filename ]; then
echo "$filename is block file"
let file_sum++
elif [ -c $filename ]; then
echo "$filename is charactor file"
let file_sum++
elif [ -L $filename ]; then
echo "$filename is symbolic file"
let file_sum++
elif [ -p $filename ]; then
echo "$filename is pipo file"
let file_sum++
elif [ -S $filename ]; then
else
echo "Unkown"
fi
done
done
echo "total directory:$dir_sum"
echo "total file:$file_sum"
执行脚本效果:
[root@localhost ~]# bash file.sh /root /var
/root/anaconda-ks.cfg is ASCII file
/root/fengzheng is directory
/root/file.sh is ASCII file
/root/fstab is ASCII file
/root/man_db.conf is ASCII file
/root/test is ASCII file
/root/test1 is ASCII file
/var/adm is directory
/var/cache is directory
/var/crash is directory
/var/db is directory
/var/empty is directory
/var/games is directory
/var/gopher is directory
/var/kerberos is directory
/var/lib is directory
/var/local is directory
/var/lock is directory
/var/log is directory
/var/mail is directory
/var/nis is directory
/var/opt is directory
/var/preserve is directory
/var/run is directory
/var/spool is directory
/var/tmp is directory
/var/yp is directory
total directory:21
total file:6
15、写一个脚本
通过命令行传递一个参数给脚本,参数为用户名
如果用户的id号大于等于500,则显示此用户为普通用户;
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "one username needed !" && exit 1
elif ! id $1 &>/dev/null; then
echo "$1 not exist !"&& exit 2
elif [ $(id -u $1) -ge 500 ]; then
echo "$1 is user"
else
echo "$1 not user"
fi
输入不同的用户名验证各种效果:
[root@localhost test]# bash file8.sh visitor1
visitor1 is user
[root@localhost test]# bash file8.sh root
root not user
[root@localhost test]# bash file8.sh join
join not exist !
16、写一个脚本
(1) 添加10用户user1-user10;密码同用户名;
(2) 用户不存在时才添加;存在时则跳过;
(3) 最后显示本次共添加了多少用户;
#/bin/bash
#
declare -i count=0
for i in user{1..10}; do
if id $i &>/dev/dull; then
echo "$i already exist !"
continue
else
useradd $i
echo $i |passwd –stdin $i
let count++
fi
done
echo "total:$count"
运行脚本验证效果:
[root@localhost test]# bash file9.sh
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
Changing password for user user4.
passwd: all authentication tokens updated successfully.
Changing password for user user5.
passwd: all authentication tokens updated successfully.
Changing password for user user6.
passwd: all authentication tokens updated successfully.
Changing password for user user7.
passwd: all authentication tokens updated successfully.
Changing password for user user8.
passwd: all authentication tokens updated successfully.
Changing password for user user9.
passwd: all authentication tokens updated successfully.
Changing password for user user10.
passwd: all authentication tokens updated successfully.
total:10
[root@localhost test]# bash file9.sh
user1 already exist !
user2 already exist !
user3 already exist !
user4 already exist !
user5 already exist !
user6 already exist !
user7 already exist !
user8 already exist !
user9 already exist !
user10 already exist !
total:0
17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;
#!/bin/bash
#
for i in 172.16.250.{20..100}; do
if ping -c 4 $i &>/dev/dull; then
echo $i
fi
done
18、打印九九乘法表;
#!/bin/bash
# Author: liuguohui
# Date: 2016-10-010
# Email: liuguohui1008@sina.com
# Descriptions: print multiplication table
#
declare -i a=1
declare -i b=1
for a in {1..9};do
for b in {1..9};do
if [ $a -ge $b ]; then
echo -n -e "$b*$a=$(($a*$b))\t"
fi
done
echo
done
[root@localhost test]# !bash
bash file1.sh
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
原创文章,作者:heianyangguo,如若转载,请注明出处:http://www.178linux.com/49932
评论列表(1条)
注意排版,如能写一两个命令常用的相对复杂的例子就更好了