马哥教育网络班N22期+第1周课程练习beta2

马哥教育网络班N22期+第1周课程练习 

1.计算机的组成及其功能

1.1 计算机的组成

根据冯·诺依曼体系结构,将计算机分为五个主要的部件:

  1. CPU:运算器

  2. CPU:控制器

  3. RAM:存储器

  4. Input:输入设备

  5. Output: 输出设备

其功能分别为:

  1. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。

  2. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。并将数据递交给运算器进行计算。

  3. 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。

  4. 输入设备(Input):输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。

  5. 输出(Output system):它把外算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。


2.Linux的发行版

2.1 什么是linux发行版(linux distribution)

linux发行版就是:众多商业或非营利性的团体,根据不同的版本的“linux kernel+software+Tools”打包集成在一起可完全安装的系统。

2.2 linux主流发行版简介

linux发行版本众多,但根据主流发行版软件包的安装方式的不同(RPM软件包管理器、dpkg软件包管理器)大体可分为两大阵营。

  1. 采用dpkg软件包管理器的Debian、Ubuntu等,其中Ubuntu是Debian发展出的一支拥有相对比较绚丽的用户界面linux发行版。

  2. 采用rpm软件包管理器的比较主流的Redhat、CentOS及Slackware系列。

    (1)Redhat发行版在发展到Redhat 9.0之后,于2004年开辟了两条产品线: 一是:Red Hat Enterprise Linux(以下称之为RHEL);二是Fedora,由其替代了Red Hat9以后的发行版。

    区别与联系:RHEL及Fedora都免费供使用,但RHEL面向企业用户,产品更稳定,同时也面向企业提供有偿服务,如:升级安全补丁、技术支持等。而Fedora面向普通用户,更新周期为6个月左右。

    (2)CentOS发行版:是将Red Hat Enterprise Linux的源代码重新编译而成的发行版,因为RHEL也遵守GPL协定,因此属于合法(为避免版权去除Red Hat商标,命名为CentOS)。CentOS组织与2014年正式被Red Hat公司收购。

    (3)Slackware也是一支开发历史比较悠久的发行版,由它向后延伸的发行版还有很多,旗下比较知名的发行版分支有S.u.S.E、openSUSE等。此发行版在欧美国家比较流行。


3.Liunx哲学思想概述

  1. 一切皆文件

    把几乎所有资源统一抽象为文件的形式:包括硬件设备,甚至通信接口等
    例如:/dev/tty1		
  2. 由众多功能单一的小程序组成,并可通过组合来完成复杂任务。

  3. 尽量避免跟用户进行交互

  4. 使用文本文件保存配置信息

    网卡的配置文件位于:/etc/sysconfig/network-scripts/ifcfg-eth0		

4. linux的命令使用格式

4.1 linux命令通用格式:

COMMAND OPTION ARGUMENTS | 命令 -选项 参数

OPTION | 选项 :

• OPTION的几种状态:

<>:必选
[]:可选
…:同类内容可以出现多次
|:多选一
{}:分组''

• 短选项:

示例:#ls -la

注意:有些命令的选项没有-

同一命令同时使用多个短选项,多数可合并;

• 长选项:

示例:# lvcreate --help (注:长选项不能合并)

注意:有些选项可以带参数,此称为:选项参数

ARGUMENTS | 参数 :

此参数为命令的作用对象:

有些命令可同时带多个参数,多个参数间以空白字符分隔

示例:# ls -la /etc /var

4.2 linux常用命令详解:

4.2.1 echo命令
echo :显示一行文本 display a line of text
用法:
       echo [SHORT-OPTION]... [STRING]...
SHORT-OPTION
	  -n   不输出末尾的换行符。 
  -e   启用反斜线转义功能。    
	  \f    换页  
	  \n    新行  
	  \r    回车  
          \t 水平制表
	  \v 垂直制表
  -E   禁用解释反斜杠的转义功能(默认)

示例:

  1. 显示输出变量的值

    [root@Red ~]# name="hello"
    		[root@Red ~]# echo $name
    		hello		
    		

 

  2.输出末尾不换行显示

[root@Red ~]# echo -n $name
		hello[root@Red ~]# 		

  3.启用反斜线转移功能

[root@Red ~]# echo -e "\n$name"

hello
[root@Red ~]# echo -e "$name \fworld"
hello 
      world

  4.强引用' '和弱引用" "

[root@Red ~]# echo '$name world'
		$name world
		[root@Red ~]# echo "$name world"
		hello world		

区别:使用强引用时,不能完成变量替换。弱引用则可以完成变量替换

 5.输出字体颜色

echo命令可以修改字体类型,字体背景色以及字体颜色,转义序列033可以用于改变字体属性。要使转义序列生效,必须使用-e选项。下面列出了部分转义代码:

echo -e "\033[##mhello\033[0m"

左侧#:3表示前景色,4表示背景色
右侧#:表示颜色种类,数字从1~7		

    

[0m: 正常]
[1m: 粗体
[4m: 字体加上下划线
[7m: 逆转前景和背景色
[8m: 不可见字符
[9m: 跨行字体
[30m: 灰色字体
[31m: 红色字体
[32m: 绿色字体
[33m: 棕色字体
[34m: 蓝色字体
[35m: 紫色字体
[36m: 浅蓝色字体
[37m: 浅灰字体
[38m: 黑色字体
[40m: 黑色背景
[41m: 红色背景
[42m: 绿色背景
[43m: 棕色背景
[44m: 蓝色背景
[45m: 紫色背景
[46m: 浅蓝色背景
[47m: 浅灰色背景
4.2.2 tty命令及startx命令

startx命令:在虚拟终端中可以启动图形终端

使用startx命令激活的虚拟终端号:

CentOS 6中:

Ctrl+Alt+F7

CentOS 7中:

在哪个虚拟终端启动,既位于哪个虚拟终端 

tty 命令:显示当前终端类型

[root@Red ~]# tty
/dev/pts/3

linux的终端类型:

  1. console:物理终端,控制台

  2. pty:物理终端(VGA)

  3. tty:虚拟控制台(虚拟终端)(VGA)

  4. ttys:串行终端

  5. pts/#:伪终端

4.2.3 export命令

export命令:用于设置或显示系统的环境变量。

在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。

语法:

export [-fnp][变量名称]=[变量设置值]

参数说明:

-f  代表[变量名称]中为函数名称。
-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p  列出所有的shell赋予程序的环境变量。

示例:

export PATH="$PATH:/root"
4.2.4 pwd、history命令

pwd命令:以绝对路径的方式显示用户当前所在目录

[root@Red sysconfig]# pwd
/etc/sysconfig

history:用于查看指定数目的指令命令

语法:

history [option] [argument]

选项:

-c:清空当前历史命令
-a:将历史命令缓冲区中的命令写入历史命令文件中
-r:将历史命令文件中的命令读入当前历史命令缓冲区
-w:将当前历史命令缓冲区写入历史命令文件中

参数:

n:指定打印最近的n条历史命令
4.2.5 ifconfig命令

ifconfig命令:被用于配置和显示Linux内核中网络接口的网络参数。

注意:用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

语法:

ifconfig interface [option]==>设定与修改接口

ifconfig interface {up | down}==>关闭和启动接口服务

参数:

add<地址>:设置网络设备IPv6的ip地址;
del<地址>:删除网络设备IPv6的IP地址;
down:关闭指定的网络设备;
<hw<网络设备类型><硬件地址>:设置网络设备的类型与硬件地址;
io_addr<I/O地址>:设置网络设备的I/O地址;
irq<IRQ地址>:设置网络设备的IRQ;
mtu<字节>:设置网络设备的MTU;
netmask<子网掩码>:设置网络设备的子网掩码;
up:启动指定的网络设备;

示例1:查看当前已激活的网络设备信息

[root@Red Hat]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1C:42:F8:DC:2D  
          inet addr:10.211.55.32  Bcast:10.211.55.255  Mask:255.255.255.0
          inet6 addr: fdb2:2c26:f4e4:0:21c:42ff:fef8:dc2d/64 Scope:Global
          inet6 addr: fe80::21c:42ff:fef8:dc2d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2361 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1300 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:256637 (250.6 KiB)  TX bytes:198077 (193.4 KiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:140 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:12286 (11.9 KiB)  TX bytes:12286 (11.9 KiB)

说明:eth0表示第一块网卡,其中HWaddr表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是00:16:3E:00:1E:51

inet addr用来表示网卡的IP地址,此网卡的IP地址是10.160.7.81,广播地址Bcast:10.160.15.255,掩码地址Mask:255.255.240.0。 

lo是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。 

第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)。 

第二行:网卡的IP地址、子网、掩码。 

第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节。 

第四、五行:接收、发送数据包情况统计。 

第七行:接收、发送数据字节数统计信息。 

示例2:启动关闭指定网卡 

ifconfig eth0 up
ifconfig eth0 down

示例3:用ifconfig修改MAC地址 

ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE

示例4:配置IP地址: 

[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
4.2.6 系统关机重启命令

shutdown命令

语法:

shutdown [OPTION]...  TIME [MESSAGE]
option:
	-t <sec> :指定多少秒关机
	-k:发送警告信息,不真正关机
	-r:系统的服务关闭后执行重启操作(常用)
	-h:将系统服务关闭后立即关机
	-n:不调用init程序进行关机,直接以shutdown功能关机
	-f:重新启动时不执行fsck
	-F:重新启动时执行fsck
TIME:
	此参数不能缺少,否则会进入init1的单用户模式,而不关闭电源
	now: 立即关机
      +m:等待m分钟后关机 
	hh:mm :指定具体时间关机 	

示例:

shutdown -h now   #立即关机
shutdown +5 "system will shutdown after 5minutes" #向用户发送警告信息

poweroff命令

语法:

poweroff [option]

选项:

-n:关闭操作系统时不执行sync操作
-w:不真正关闭操作系统,仅在日志文件/var/log/wtmp中
-d:关闭操作系统时,不将操作写入日志文件
-f:强制关闭操作系统
-i:关闭操作系统之前关闭所有的网络接口
-h:关闭操作系统之前将系统中所有的硬件设备为备用模式

reboot命令:用来重启linux系统

语法

reboot [option]

选项:

-d:重新开机时,不把数据写入记录文件/var/log/wtmp
-f:强制重新开机,不调用shutdown功能
-i:在重新开机之前,先关闭所有网络界面
-n:重开机之前不检查是否有未结束的程序
-w: 仅做测试,并不真正将系统重新开机,只会把重开机的数据写入日志文件中/var/log/wtmp

hwclock命令:是一个硬件时钟访问命令,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟时间

相关知识:Liunx系统中有两种时钟:系统时钟、硬件时钟。硬件时钟是指主板上的时钟设备。系统时钟则是指kernel中的时钟。

语法:

hwclock [option]

选项:

-r:查看时间(可忽略)
-s, --hctosys : 获取硬件时间设置系统时间
-w, --systohc :获取系统时间设置硬件时间

date命令:显示或设置系统时间与日期

语法:

date [OPTION]... [+FORMAT]

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

选项:

-d<STRING>:显示字符串所指的日期与时间,字符串必须加上双引号
#STRING是比较随性的可读的字符串,比如说“2012-06-16 18:31:00”或者“next Thursday”,这个字符串通常包含日历时间、时间、星期、日期、相对时间,相对日期或者数字。
-s<STRING>:根据字符串来设置时间与日期,字符串前后必须加上双引号
-r, --reference=FILE:显示文件FILE最后修改的时间
-u, --utc, --universal:显示输出UTC时间

+格式:

%H 小时,24小时制(00~23)
%I 小时,12小时制(01~12)
%k 小时,24小时制(0~23)
%l 小时,12小时制(1~12)
%M 分钟(00~59)
%p 显示出AM或PM
%r 显示时间,12小时制(hh:mm:ss %p)
%s 从1970年1月1日00:00:00到目前经历的秒数
%S 显示秒(00~59)
%T 显示时间,24小时制(hh:mm:ss)
%X 显示时间的格式(%H:%M:%S)
%Z 显示时区,日期域(CST)
%a 星期的简称(Sun~Sat)
%A 星期的全称(Sunday~Saturday)
%h,%b 月的简称(Jan~Dec)
%B 月的全称(January~December)
%c 日期和时间(Tue Nov 20 14:12:58 2012)
%d 一个月的第几天(01~31)
%x,%D 日期(mm/dd/yy)
%j 一年的第几天(001~366)
%m 月份(01~12)
%w 一个星期的第几天(0代表星期天)
%W 一年的第几个星期(00~53,星期一为第一天)
%y 年的最后两个数字(1999则是99)
%Y 年数

示例:1

[root@Red ~]# date +%Y.%m.%d
2016.08.12
''[root@Red ~]#date -d "-1 day" +%Y%m%d       //显示前一天的日期
20160811
[root@Red ~]#date -d "-1 month" +%Y%m%d     //显示上一月的日期
20160712

示例2:输出昨天的日期

[root@Red ~]# date -d "1 day ago" +%Y-%m-%d
2016-08-11

示例3:2秒后输出:

[root@Red ~]# date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2016-08-12 14:24.25

示例4:设定时间

date -s "2012-05-23 01:01:01"  //这样可以设置全部时间

5. Linux系统上获取命令使用帮助的方法

5.1 获取命令使用帮助的方法

Linux命令分为内置命令外部命令两类。

内置命令获取帮助的方式:

help COMMAND

外部命令:

(1)命令自带简要格式的使用帮助

COMMAND - -help

(2)参看该命令的帮助手册manual

• 手册存放路径:/usr/share/man

• 查看方式:man COMMAND

(3)info COMMAND:获取命令在线文档,显示命令的详细历史

(4)很多应用程序会自带帮助文件:

• 文档路径:/usr/share/doc/APP-VERSION

• README:程序的相关信息

• INSTALL:安装帮助

• CHANGES:版本迭代的情况

(5)主流发行版官方文档

• 例如:http://www.redhat.com/doc

(6)程序官方的文档

• 官方站点上的“Document”

5.2 MAN手册内容格式说明

MAN命令内容格式说明:

SECTION:

• NAME:命令名称及功能简要说明

• SYNOPSIS:语法格式,命令功能的详尽说明

• DESCRIPTION:命令功能的详尽说明,尽可能包括每一个选项的意义

• OPTIONS:选项

• Examples:使用示例

5.3 man文档的不同章节

使用手册:压缩格式的文件,分有不同章节;文件放置路径:

/usr/share/man/man1 ,man2….

man文档的章节划分:

• 1:用户命令(/bin,/user/bin,/user/local/bin)

• 2:系统调用

• 3:C库调用

• 4:特殊文件及设备文件

• 5:文件格式(配置文件格式)

• 6:游戏使用帮助

• 7:杂项(miscellaneous)

• 8:管理工具及守护进程(/sbin,/usr/sbin,/usr/local/sbin)

查看不同章节的帮助手册:

• man # COMMAND ;#为章节数

• 注意:并非每个COMMAND在所有的章节下都有帮助手册

查看命令章节数:
whatis COMMAND

注意:其执行过程是查询数据库进行的;

可采取手动更新数据库的方式:makewhatis

5.4 MAN手册查看方式

• 向后翻一屏:SPACE

• 向前翻一屏:b

• 向后翻一行:ENTER

• 向前翻一行:k

• 向下翻半屏:ctrl+d

• 向上翻半屏:ctrl+u

• 跳转至最后一行:G

• 跳转至文件首部:1G

• 跳转指定行:#G

• 退出:q

指定位置查看man文档:

man -M /path

关键词查找功能

/keyword:向后查询

• n:下一个

• N:前一个

?keyword:向前查询

• n:下一个

• N:前一个


6. Linux发行版的文件系统

在Linux系统中,所有的文件与目录都是由根目录开始的!然后再一个一个的分支下来,类似倒置的树状图.因此,我们也称这种目录配置方式为:『目录树(directory tree)』。

如果我们将整个目录树以图的方法来显示,并且将较为重要的文件数据列出来的话,那么目录树架构就如下图所示:

DraggedImage.09b0253359a54f05916dbe1a20060075.png马哥教育网络班N22期+第1周课程练习beta2

目录文件夹解析:

/bin目录:

用来存放系统命令等可执行的二进制程序文件的文件夹。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot目录:

用来存放linux系统启动时,需要加载的文档。包括Linux kernel以及grub菜单及设置文件等。Linux kernel常用的档名为:vmlinuz-release ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。

/dev目录:

在Linux系统上一起皆文件,因此linux主机上的任何设备文件都存放在这个目录当中。比要重要的文件有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等

/etc目录:

系统主要的配置文档存放目录。例如人员的帐号密码文档(/etc/passwd、/etc/group)、及各种服务的启始文件(/etc/init.d/)等等。

/home目录:

这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号: ~ :代表当前使用者的家目录, 而 ~guest:则代表用户名为guest的家目录

/lib目录:

存放系统中可被调用各类可调用的库文件,其中尤其重要的是/lib/modules/这个目录,因为该目录会放置的内核模块文件。

/media目录:

这个/media底下放置的就是可移除的移动设备。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。

/mnt目录:

为额外设备提供一个临时文件挂载点。

/opt目录:

这个是可选目录,用来给第三方程序安装提供的目录 。  不过,以前的Linux系统中,还是习惯放置在/usr/local目录下。

/root目录 :

系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。

/sbin目录:

/sbin目录存放的都是涉及系统管理的命令,里面包括了开机、修复、还原系统所需要的指令,仅有root用户有权限使用。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。至于本机自行安装的软件所产生的二进制可执行文件(system binary),则放置到/usr/local/sbin/当中了。

/srv目录:

srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 

/tmp目录:

用来存放临时文件的目录。

/proc目录:

这个目录本身是一个伪文件系统(virtual filesystem)。 他存放的资料都是系统启动以后内存当中的内核所加载设备信息及系统状态的映射文件,例如系统核心、进程(process)、设备状态及网络状态等等。因为这个目录下的资料都是在内存当中,所以本身不占任何硬盘空间。比较重要的目录。例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net等等。

/sys目录:

这个目录其实跟/proc非常类似,也是一个伪文件系统,主要也是记录与内核相关的信息。 包括目前已载入的内核模块信息与内核侦测到的硬体设备信息等等。 这个目录同样不占硬盘容量。

原创文章,作者:N22-武汉-enfp,如若转载,请注明出处:http://www.178linux.com/33795

(0)
N22-武汉-enfpN22-武汉-enfp
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • fdisk命令

    fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。

    2017-12-05
  • Corosync+Pacemaker+DRBD实现高可用 Mariadb

    一、DRBD简介 DRBD全称Distributed Replicated Block (分布式的复制块设备),开源项目。它是一款基于块设备的文件复制解决方案,速度比文件级别的软件如NFS,samba快很多,而且不会出现单点故障,是很多中小企业的共享存储首选解决方案。 二、DRBD的工作模式从上图中我们可以清楚的看到DRBD是工作在内核中,将协议建立在buf…

    2017-11-05
  • 重定向与管道

         本次内容    1.三种I/O设备    2.把I/O从定向入文件    3.命令tr    4.使用管道链接命令    5.tee   我们都知道程序是由:指令+数据    &n…

    2017-07-23
  • 关于大型网站技术演进的思考(十一)–网站静态化处理—动静分离策略(3)

    原文出处: 夏天的森林   前文里我讲到了网站静态化的关键点是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。由此可见,网站静态化处理的核心就是动静分离和缓存两大方面,上篇我简单讲述了动静…

    Linux干货 2015-03-11
  • zabbix监控Hadoop的实现

            Hadoop日常运行过程中一些参数需要进行实时监控,如:Map、Reduce任务数量,HDFS磁盘使用情况,namenode、datanode在线数量及健康情况,以便更好的掌握整个Hadoop集群架构的运行情况。         下面结合最近工作中的一些…

    Linux干货 2015-03-08
  • ArchLinux折腾记

    刚接触linux的时候, 听到前辈说到这样一个系统,  说是linux 技能纯熟才能驾驭的了ArchLinux , 最近正好有个半天闲, 于是抽空,  佐以官方文档,  来认认真真的折腾一下ArchLinux Contents ArchLinux简介  准备工作  分区设置  基本功能安装 &nbs…

    Linux干货 2016-09-29

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-17 15:47

    写的很好,排版也很棒,加油,图是自己画的吗?