马哥教育网络班20期 第8周课程练习

1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。

网桥:工作于数据链路层,实现多个lan之间数据的转发,隔离冲突域,类似二层交换机。
集线器:工作于物理层,实现设备的接入,数据信号放大、中转,共享信道。把一个端口接收的所有信号向所有端口分发出去
二层交换机:工作于数据链路层,可连接多个lan,根据帧的mac来转发数据,隔离冲突域,端口较多
三层交换机:工作于二、三层,可连接多个网段,实现数据包路由和部分路由器功能,加快大型局域网内部的数据交换,能够做到一次路由,多次转发
路由器:工作于网络层,实现不同网段数据的转发,通过路由表把数据(IP 报文)传送到正确的网络隔离广播域,多应用于广域网

2、IP地址的分类有哪些?子网掩码的表示形式及其作用

IP4 地址分类:IP 地址由32位二进制数字组成,根据前8位二进制数字不同分为5类
    class A:
        第1位为0
        0 0000000-0 1111111 即0-127
            即1.0.0.0 -126.255.255.255
            网络数:126  ;0.0.0.0 127.0.0.0 保留
            每个网络的主机数:2^24-2
            默认子网掩码:255.0.0.0
            私网地址:10.0.0.0/8
    class B:
        第2位为0
        10 000000-10 111111 即128-191
            可用IP地址:即128..1.0.0-191.255.255.255 ; 128.0.0.0和191.255.0.0保留 
            网络数:2^14
            每个网络的主机数:2^16-2
            默认子网掩码:255.255.0.0
            私网地址:127.16.0.0/16-127.31.0.0/16
    class C:
        第3位为0
        110 00000-110 11111 即192-223
            网络数:2^21
            每个网络的主机数:2^8-2
            默认子网掩码:255.255.255.0
            私网地址:192.168.0.0/24-192.168.255.0/24
    
    class D:组播
        第4位为0
        1110 0000-1110 1111 即224-239
    class E:
        第5位为0,最后一个是255
        11110 000-11111 111 即240-255    
子网掩码:
    表示形式:1、
               32位二进制数字,每8位二进制数字换算成十进制,以"."分隔,形如:255.255.255.0
              2、
               IP地址后加上掩码位数,形如:192.168.0.104/24
    
    作用:划分子网
              将某个IP地址划分成网络地址和主机地址两部分,与IP地址相与可计算出的相应IP的网络位

3、计算机网络的分成模型有哪些(OSI模型和TCP/IP模型),每一层的功能及涉及到的物理设备有哪些。

OSI模型:
    (1)、应用层
        功能:定义应用程序如何进入该层的沟通接口(应用层本身不属于应用程序所有),可以将数据接收或发送给应用程序,展示给用户
    (2)、表示层
        功能:将本地端应用程序的数据格式转换成为网络的标准格式,包括定义了网络服务之间的数据格式转换、数据的加解密
    (3)、会话层
        功能:定义两个地址间的连接信道的连接与终断,建立应用程序之间的会话、提供其他加强型服务如网络管理等
    (4)、传输层
        功能:定义发送端与接收端的连接技术(TCP/UDP),包括:数据包格式、数据包的发送、流程的控制、传输过程的侦测检查与重新传送;确保数据包可以准确无误的到达目的端
    (5)、网络层
        功能:定义IP,路由(route),定义计算机之间的连接建立、终止与维持等,数据包数据的传输路径选择等
        物理设备:路由器、三层交换机等
    (6)、数据链路层
        功能:分为两个子层:
            偏硬件介质部分:负责MAC(Madia Access Control)
            偏软件部分:负责逻辑连接层(Logical Link Control ,LLC),将来自上层的数据包数据(packet)转成MAC格式,包括:信息交换、流量控制、失误问题的处理
        物理设备:网卡、网桥、二层交换机
    (7)、物理层
        功能:定义所使用的传输设备的电压与信号等,了解数据帧转成比特流的编码方式,连接实际传输介质并发送/接收比特信号
        物理设备:集线器、网线、光纤、同轴电缆等
TCP/IP 模型:
    (1)、应用层
        功能:整合OSI模型应用层、表示层、会话层,
    (2)、运输层
        功能:同OSI模型
    (3)、网络层
        功能:同OSI模型
    (4)、网络接口层
        功能:整合OSI模型的数据链路层、物理层

4、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

(1)、IP/mask
    配置方式:ifconfig [interface] 
                  # ifconfig IFACE IP/mask [up]       例如:ifconfig eth0 192.168.0.104/24 up
                  # ifconfig IFACE IP netmask MASK    例如:ifconfig eth0 192.168.0.104 netmask 255.255.255.              
(2)、路由:默认网关
    配置方式: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 

(3)、DNS服务器
    配置方式:/etc/resolv.conf
       	          nameserver DNS_SERVER_IP1
       		  nameserver DNS_SERVER_IP2
       		  nameserver DNS_SERVER_IP3
 
(4)、
上面的配置方式是及时生效,但下次开机要重新配置
下面的配置方式是永久生效,但不是及时生效,要让网络服务重读配置文件

修改配置文件:/etc/sysconfig/network-scripts/ifcfg-ethx:x
                   各项含义见题7

5、为Linux主机配置网络信息的方式有哪些,请描述各个过程。

1.命令行方式
      a.ifconfig
      格式:ifconfig interface [aftype] options | address 
            # ifconfig IFACE IP/mask [up]
            # ifconfig IFACE IP netmask MASK
            例子:ifconfig eth0 192.168.0.107 netmask 255.255.255.0
                注意:立即生效
       
      b.ip
      ip - show / manipulate routing, devices, policy routing and tunnels
            格式:ip [ OPTIONS ] OBJECT { COMMAND | help }
                  OBJECT := { link | addr | route }
            OBJECT link  :
                   ip link - network device configuration 
                   格式:ip link set deviFACE [up|down]
                              up and down:激活或禁用指定接口
                         ip link show deviFACE [up]
                              [up]:仅显示处于激活状态的接口
                   address:
                   ip address - protocol address management
                   格式:ip addr { add | del } IFADDR dev STRING
                               [label LABEL]:添加地址时指明网卡别名
                               [scope {global|link|host}]:指明作用域
                                       global: 全局可用
                                       link: 仅链接可用
                                       host: 本机可用
                               [broadcast ADDRESS]:指明广播地址
                         ip address show - look at protocol addresses
			       [dev DEVICE]
			       [label PATTERN]
			       [primary and secondary] 
			 ip address flush - flush protocol addresses
			       使用格式同show      
                   route:
                        ip 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]
      c.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

2.修改配置文件方式
# vim /etc/sysconfig/network-scripts/ifcfg-IFACE
(修改信息如上题所示)

6、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;
     在线的主机使用绿色显示;
     不在线的主使用红色显示;

#!/bin/bash
#the purpose of program:
#Use ping command to check the network's PC state 
#History 
#08/09/2016 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
network="172.16.250." 
for sitenu in $(seq 1 254);do
    ping -c 1 -w 1 ${network}${sitenu} &> /dev/null && result=0 || result=1
    if [ "$result" == 0 ];then 
        echo -e "\033[32m ${network}${sitenu} is up \033[0m"
    else 
        echo -e "\033[31m ${network}${sitenu} is down \033[0m"
    fi
done

7、详细描述每个网络接口的配置文件中各个参数的含义和其所对应的值;

/etc/sysconfig/network-scripts/ifcfg-ethx:x
                        DEVICE:此配置文件应用到的设备;
			HWADDR:对应的设备的MAC地址;
			BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp;
			NM_CONTROLLED:NM是NetworkManager的简写;此网卡是否接受NM控制;CentOS6建议为“no”;
			ONBOOT:在系统引导时是否激活此设备;
			TYPE:接口类型;常见有的Ethernet, Bridge;
			UUID:设备的惟一标识;

			IPADDR:指明IP地址;
			NETMASK:子网掩码;
			GATEWAY: 默认网关;
			DNS1:第一个DNS服务器指向;
			DNS2:第二个DNS服务器指向;

			USERCTL:普通用户是否可控制此设备;
/etc/sysconfig/network-scripts/route-eth0
                        ADDRESS0=192.168.193.131
                        NETMASK0=255.255.255.0
                        GATEWAY0=192.168.193.0
                        两种风格:
                         (1) TARGET via GW
                         (2) 每三行定义一条路由(#为0、1、2、3、4)
                          ADDRESS#=TARGET # IP地址
                          NETMASK#=mask   # 子网掩码
                          GATEWAY#=GW     # 网关			

8、如何给网络接口配置多个地址,有哪些方式?

给网卡配置多地址:
			ifconfig:
				ifconfig IFACE_ALIAS 
			ip
				ip addr add 
			配置文件:
				ifcfg-IFACE_ALIAS
					DEVICE=IFACE_ALIAS

			注意:网关别名不能使用dhcp协议引导;

9、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。

      a.ifconfig;b.ip c.route 见题5
      d.ss 
        [root@www ~]# ss -tunl
        Netid State      Recv-Q Send-Q                                Local Address:Port                                  Peer Address:Port 
        udp   UNCONN     0      0                                                 *:68                                               *:*     
        tcp   LISTEN     0      128                                              :::22                                              :::*     
        tcp   LISTEN     0      128                                               *:22                                               *:*     
        tcp   LISTEN     0      100                                             ::1:25                                              :::*     
        tcp   LISTEN     0      100                                       127.0.0.1:25                                               *:*
      e.netstat 
        [root@www ~]# netstat -tunl
        Active Internet connections (only servers)
        Proto Recv-Q Send-Q Local Address               Foreign Address             State      
        tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
        tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
        tcp        0      0 :::22                       :::*                        LISTEN      
        tcp        0      0 ::1:25                      :::*                        LISTEN      
        udp        0      0 0.0.0.0:68                  0.0.0.0:*

10、Linux系统软件包管理方法(安装、升级、卸载等操作)有哪些,以及如何管理的。

Linux系统软件包管理方法:安装、升级、查询、卸载、校验、数据库维护
一、安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
           -v: verbose
           -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) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核;
(2) 如果原程序包的配置文件安装后曾被修改,长级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;
三、查询:
rpm {-q|--query} [select-options] [query-options] [select-options]
    -a: 所有包
    -f: 查看指定的文件由哪个程序包安装生成
    -p /PATH/TO/PACKAGE_FILE:针对尚未安装的程序包文件做查询操作;
    --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供;
    --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;
 [query-options]
           --changelog:查询rpm包的changlog
           -c: 查询程序的配置文件
           -d: 查询程序的文档
           -i: information(名称、版本、描述信息、安装日期、包大小、许可证、MIT...)
           -l: 查看指定的程序包安装后生成的所有文件;
           --scripts:程序包自带的脚本片断
           -R: 查询指定的程序包所依赖的CAPABILITY;
           --provides: 列出指定程序包所提供的CAPABILITY;
用法:
# rpm -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
# rpm -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
# rpm -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(MD5码不同)
  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(能力不同)
六、数据库重建:
rpm {--initdb|--rebuilddb}
    initdb: 初始化
       如果事先不存在数据库,则新建之;否则,不执行任何操作;
    rebuilddb:重建
       无论当前存在与否,直接重新创建数据库;
七、管理程序包,yum的使用:
yum的命令行选项:
   --nogpgcheck:禁止进行gpg check;
   -y: 自动回答为“yes”;
   -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo;
    --enablerepo=repoidglob:临时启用此处指定的repo;
   --noplugins:禁用所有插件;
1、显示仓库列表:
      # yum repolist [all|enabled|disabled] [所有|启用|禁用]
2、显示程序包:
      # yum list [all | glob_exp1] [glob_exp2] [...](glob风格匹配符)
      # yum list {available|installed|updates} [glob_exp1] [...]{仓库中有尚未安装|已安装|可用升级包}
3、安装程序包:
  # yum install package1 [package2] [...]
  # yum reinstall package1 [package2] [...]  (重新安装)
4、 升级程序包:
  # yum update [package1] [package2] [...]
  # yum downgrade package1 [package2] [...] (降级)
5、检查可用升级:
  # yum check-update
6、卸载程序包:
  # yum remove | erase package1 [package2] [...](与之依赖的程序包也会被卸载)
7、查看程序包information:
  # yum info [...]
8、查看指定的特性(可以是某文件)是由哪个程序包所提供:
  # yum provides | whatprovides feature1 [feature2] [...]
9、清理本地缓存:
  # yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
               【程序包 | 元数据 |过期缓存 |rpm库 | 插件 |所有】
10、构建缓存:
  # yum makecache
11、搜索:
  # yum search string1 [string2] [...] 以指定的关键字搜索程序包名及summary信息;
12、查看指定包所依赖的capabilities:
  # yum deplist package1 [package2] [...]
13、查看yum事务历史:
  # yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
[list:默认;packages-list:包列表;summary摘要信息;stats统计数据]
14、安装及升级本地程序包:
  # yum localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
  # yum localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)
15、包组管理的相关命令:
  # yum groupinstall group1 [group2] [...] (安装)
  # yum groupupdate group1 [group2] [...](升级)
  # yum grouplist [hidden] [groupwildcard] [...](显示)
  # yum groupremove group1 [group2] [...](移除)
  # yum groupinfo group1 [...](查看包组相关信息)
16、yum的repo配置文件中可用的变量:
             $releasever: 当前OS的发行版的主版本号;
             $arch: 平台;
             $basearch:基础平台;
             $YUM0-$YUM9
17、创建yum仓库:
# yum create repo [options] <directory>

11、如何使用发行版光盘作为yum repository,请描述该过程。

[root@www ~]# mkdir /media/cdrom
[root@www ~]# mount -r -t iso9660 /dev/cdrom /media/cdrom
 在/etc/yum.repos.d/创建.repo 结尾的配置文件:
      [CDROM]
      name=Centos_cdrom
      baseurl=file:///mdia/cdrom
      gpgcheck=1
      enabled=1

12、写一个脚本,完成以下功能
   (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;
   (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;
   (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;
   (4) 分别统计S开头和K开头的文件各有多少;

#!/bin/bash
#the purpose of program:
#
#History 
#08/10/2016
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
dirname=/etc/rc.d/rc3.d
sumk=0
sums=0
cd ${dirname}
for i in $(ls K*);do
    echo "$i stop"
    let sumk++
done
for j in $(ls S*);do
    echo "$j start"
    let sums++
done 
echo "the number of k start file :$sumk "   
echo "the number of s start file :$sums "

13、写一个脚本,完成以下功能
   (1) 脚本能接受用户名作为参数;
   (2) 计算此些用户的ID之和;

#!/bin/bash
#
read -p "input your user name " nameuser
while [ ${nameuser} != "quit" ];do
    id ${nameuser} &> /dev/null && result=0 ||result=1
    if [ ${result} -eq 1 ];then 
        read -p "Please input your user name again,your user name is not exist: " nameuser 
        continue
    fi    
    userid=$(id -u ${nameuser})
    let sumid+=$userid
    read -p "input your user name again:" nameuser
done
    echo "the sum of these user's ID is ${sumid}."

14、写一个脚本
   (1) 传递一些目录给此脚本;
   (2) 逐个显示每个目录的所有一级文件或子目录的内容类型;
   (3) 统计一共有多少个目录;且一共显示了多少个文件的内容类型;

#!/bin/bash
#the purpose of program:
#
#History 
#08/10/2016 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
numdir=0
numtype=0
func1 (){
       if [ -b $1 ];then
           echo "$1 is a block device"
           let numtype++
           continue
       fi
       if [ -c $1 ];then
           echo "$1 is a character device"
           let numtype++
           continue
       fi 
       if [ -S $1 ];then
           echo "$1 is a Socket"
           let numtype++
           continue
       fi 
       if [ -p $1 ];then
           echo "$1 is a pipe file"
           let numtype++
           continue
       fi 
       if [ -L $1 ];then
           echo "$1 is a link file"
           let numtype++
           continue
       fi
       if [ -d $1 ];then
           echo "$1 is a directory"
           func2 $1
           continue
       fi
       if [ -f $1 ];then
           echo "$1 is a file"
           let numtype++
           continue
       fi
}
func2 (){
        cd $1
        for k in $(ls );do
            func1 $k
            cd ..
        done
        
}
read -p "input one directory as you like,and input "quit" is exit :" namedir
while [ "$namedir" != "quit" ];do
    if [ ! -d $namedir ];then
        read -p "input one directory again,because your input is not a directory: " namedir
        continue
    fi
    cd $namedir
    let numdir++
    for i in $(ls );do
       func1 $i
       cd $namedir
    done
    read -p "input one directory as you like,and input "quit" is exit :" namedir    
done
echo "we has $numdir directory in total"
echo "$numtype file type in total"

15、写一个脚本
  通过命令行传递一个参数给脚本,参数为用户名
  如果用户的id号大于等于500,则显示此用户为普通用户;

#!/bin/bash
#the purpose of program:
#decide Type of user 
#History 
#08/10/2016 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
declare -i usersid=$(grep --color=auto "^$1" /etc/passwd |cut -d: -f 3)
if [ ${usersid} -gt 500 ];then
    echo "the user $1 is common user!"
fi

16、写一个脚本
   (1) 添加10用户user1-user10;密码同用户名;
   (2) 用户不存在时才添加;存在时则跳过;
   (3) 最后显示本次共添加了多少用户;

#!/bin/bash
#the purpose of program:
#add users 
#History 
#08/10/2016 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
declare -i j=0
for i in $(seq 1 10);do
    username="user${i}"
    id ${username} &> /dev/null && result=0 ||result=1
    if [ ${result} -eq 1 ];then 
        useradd ${username}
        echo '${username}'|passwd --stdin ${username}
        let j++ 
    fi
done
echo "we add ${j} users in total"

17、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

#!/bin/bash
#the purpose of program:
#Use ping command to check the network's PC state 
#History 
#08/10/2016 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
network="172.16.250." 
for sitenu in $(seq 20 100);do
    ping -c 1 -w 1 ${network}${sitenu} &> /dev/null && result=0 || result=1
    if [ "$result" == 0 ];then 
        echo -e "\033[32m ${network}${sitenu} is up \033[0m"
    fi
done

18、打印九九乘法表;

#!/bin/bash
#the purpose of program:
# print multiplication table 
#History 
#08/10/2016 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
declare -i row=1
declare -i col=1
while [ ${row} -le 9 ];do
    while [ ${col} -le ${row} ];do
        total=$((${col}*${row}))
        echo -e -n "${col}*${row}=${total}\t"
        let col=col+1
    done
    echo -e -n "\n"
    let col=1
    let row=row+1
done

原创文章,作者:N20-重庆-雪寒,如若转载,请注明出处:http://www.178linux.com/18705

(0)
N20-重庆-雪寒N20-重庆-雪寒
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • N21沉舟11周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。 2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。 一、CA服务器端 #进入CA目录:cd    /etc/pki/CA #创建初始文件touch index.txt serialecho 01 >&nbsp…

    Linux干货 2016-09-19
  • 手动编译内核+busybox+dropbear+nginx

    我们需要先在宿主机上添加一个磁盘,然后,把这个磁盘做好分区和文件系统: fdisk /dev/sdb 创建第一个分区: n p 1 +512M 创建第二个分区: n p 2 +10G 保存退出: w 为分区提供文件系统: kpartx /dev/sdb 为分区提供文件系统: mke2fs -t ext4 /dev/sd…

    Linux干货 2015-09-24
  • Linux 计划任务快速理解入门

    计划任务简单来说是一个我们规定的时间去执行我们需要的脚本、命令及需要Linux做的事情。 以前写过一个脚本,由于当时没有学过计划任务,所以写起来特别痛苦,该脚本的需求是每天晚上11:00 备份/etc目录 当时特别小白,于是这么写的: VimrebootScript ‘ #!/bin/bash whiletrue;do If [ -d/app/e…

    Linux干货 2017-05-15
  • Linux的发展史

    引言: 开源是什么?什么是Unix 、Linux ?这两种操作系统又有什么关联?    大家当前在用最常见的电脑系统是眼前的Windows ,但为何我们要花学习Linux 的发展史? 通过下面的介绍,我们能大致了解互联网发展的一些问题,以及Linux和Unix的基本概念、历史、发展情况。 一、操作系统介绍 内核(kernel)负责控制硬…

    Linux干货 2016-10-19
  • Linux文件系统管理

    Linux文件系统: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap swap: 交换分区(虚拟内存) 光盘: iso9660       windows: fat32, NTFS       Unix: FFS, U…

    Linux干货 2016-08-15
  • 密码保护:ansible书籍部分目录

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2015-12-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-17 13:59

    写的很好,排版也很棒,加油