第一周 N28

作业一

1、描述计算机的组成及功能。

运维的岗位围绕在计算机上,所以了解计算机是我们基本的能力:例如利用计算机提供的接口写程序,对构建在Linux系统上的应用程序的应用。

冯·诺伊曼提出其体系后,所有计算机都采用相同体系。美国宾西法尼亚大学的第一台计算机ENIARC,也不例外。

冯·诺依曼体系:计算机由大部分组成

  • CPU:运算器、控制器、寄存器、缓存,
    • 核心运算器控制器 
      • 运算器:完成算术运算、逻辑运算。
      • 控制器:各部件的协调。
    • 指令集:CPU支持的指令的集合。分为特权指令非特权指令
      • 特权指令:内核运行。也被称为“环0指令
      • 非特权指令:用户空间中程序运行。也被称为“环3指令
    • 寄存器、缓存:提高CPU性能。
      • 寄存器指令指针寄存器数值寄存器
        • 指令指针寄存器:指向下一个指令的位置。
        • 数值寄存器:内存中加载的数据暂存的位置。
      • 缓存:CPU比内存快提供缓存。缓存大:CPU工艺要求高及体积不变,所以价格高。
    • 频率:单位时间内所做的操作。例如:1GHz相当于1s做10亿次操作。
    • 字长:数据的存取能力。例如:32bits的cpu一次存取32位二进制数据。
  • 主储:RAM(Random Access Memory)随机访问存储,只有不断地往内存中填充电荷才能存储数据,断电后数据消失。
    • RAM由多个大小相同的cell组成
      • 每个cell是8bits,也叫“最小存储单元”。
    • 编址的存储单元,只支持平面编址,例如:从左向右,从上向下对每个cell编号;
    • 为什么32bits的系统最大只能支持4G内存?也就是你安装内存条只能安装4G,多了不识别。
      • 32bits的CPU只能安装32bits的系统,64bits的CPU可安装32bits或64bits系统。(我们所用的CPU是Intel生产的,也就是80年代出现的PC兼容机)
      • 32bits的CPU相当于CPU前有32根线。
      • 每根线只有两种状态:通电断电。通电表示1,断电表示0
      • 一种状态可以对应一个cell(相当于8bits),所以1根线就有2种状态(2^1)。
      • 32根线通过排列组合的方式:2^32种变化,即2^32bits=2^2 * 2^10 * 2^10 * 2^10bits=4Gb。(CPU是二进制换算:1KiB=2^10bits,1MiB=2^10KiB,1GiB=2^10MiB,注意MiB相当于mb,KiB相当于kb,GiB相当于gb)
      •  IO设备:输入设备、输出设备
  • 输入设备:输入指令、提供数据;
  • 输出设备:输出数据加工后的结果;

 

冯·诺伊曼 还提出程序是由指令数据组成

  • 指令:二进制指令
  • 数据:二进制数据

For 1

我们都应该知道

  • 程序本身在磁盘中,即指令和数据在磁盘中。
  • 当前CPU需要运行程序时,就需要将程序先加载至内存中,即指令和数据在内存中。
  • 由CPU加载指令并运行指令,此为取指的过程。
  • 其运行过程中需要加载数据时,例如1+2=3,1为数据,2为数据,3为加工后的结果;先将1从内存的某个cell中加载至数值寄存器中(数据没有加载完需要缓存),再加载后一个数据至寄存器中。指令加工数据得到3,将其存回内存中。
  • 运行结果后,从指令指针寄存器中得到下一条指令所在内存中的哪个cell的位置,加载至内存中运行。
以上的计算机只能跑单个程序,因为CPU是一个,内存是一个,程序会独占。如果多个程序运行就存在,你使用CPU还是我使用?内存中的数据覆盖。等问题;
  • 1964年由MIT, GE, Bell成立一个项目叫Multic;(为了解决一个问题:让计算机可以运行多个程序)
  • Multics是一个监控程序,功能:独占内存中一段空间,将剩余空间切割成几个独立的空间即“空间复用”,并将CPU的计算能力切割成相等的时间片,即“时序复用”
  • 1969年Bell实验室Ken在PDP-7主机上研发出Unix;
  • 1974年Ken和同事Dennis(C研发者)在《美国计算机通信》杂志上联合发表Unix;
  • 1975年Bill Joy成立BSRG小组,在Unix主机上研发TCP/IP协议栈,DARPA给他们的项目。并整合一些程序,命名为BSD(Berkeley System Distribution),BSD主机上实现了TCP/IP。
  • 1985年Ritchard Stallman成立GNU组织,宣言是GPL。
  • 1991年Linus Torvalds成立Linux项目。

计算机操作系统是GNU/Linux源码,功能:驱动底层硬件、文件系统、网络、安全加密、内存管理、进程管理。

2、按系列罗列Linux的发行版,并描述不同发行版本之间的联系与区别。

  • GNU/Linux源码:需要编译成二进制程序方可运行。对于普通用户来讲是困难的。
  • 发行版:一些世俗的入流的看到将GNU/Linux源码编译成可执行二进制程序的商机的组织将GNU/Linux源码编译成可在机器上直接运行的二进制程序,有组织比较恋旧、有的比较追求新颖、有的喜欢不同的标识,再加上一些对系统的独有的理解。将Linux程序和GNU程序和这些自己的理解拼凑在一起组成了发行版;
  • 发行版都是Linux内核,与不同版本的程序拼凑在一起,组成了不同的发行版本所以发行版本与程序版本无关

三大主流的发行版

  • RedHat:美国卡罗兰那洲,9.0后将桌面版本捐给Fedora社区并维护为Fedora Core。成立RedHat Enterprise Linux。
  • CentOS: 红帽的二次发行版本,是根据红帽开放源代码规定释出的版本
  • Debian:是一个爱妻狂魔命名(他名字和他妻子名字缩写组合)。至今没有任何一个商业组织维护,黑客级玩家使用,限制更少。
    • Ubuntu:以桌面应用为主
      • Kbuntu:基于Ubuntu的二次发行版;
      • Mint:基于Ubuntu的二次发行版;
    • Knopix:短小精悍,安全著称;
  • Slackware:
    • SUSE: 以桌面著称,西方多使用;
      • OpenSUSE
      • SLES:SUSE Linux Enterprise System

不同发行版使用不同包管理器

  • 程序的大组成部分:
    • 配置文件:文本格式,xml…
    • 二进制程序:可执行;
    • :二次开发;
    • 帮助手册:装水不用说明书,买个智能洗衣机呢?使用说明;
  • 包管理器:将程序的组成部分打包成一个或几个程序包。
    • 包管理器的分类:
      • RedHat: rpm包,rpm,yum
      • Debian: deb包,dpkg,  apt-get
      • SUSE: rpm包,rpm, zypper

3、描述Linux的哲学思想,并按照自己的理解对其进行解释性的描述。

  • 一切皆文件:即使是设备也模拟成文件,用文件系统接口即可完成操作硬件;
  • 由众多单一目的的小程序组成;组合小程序完成复杂任务;
  • 避免与用户交互;实现Shell脚本编程;
  • 文本信息保存配置;

4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、data命令的使用,并配合相应的示例来阐述。

ifconfig – 查看当前主机的IP地址;

~]# ifconfig
 eth0 Link encap:Ethernet HWaddr 00:0C:29:CC:57:46
 inet addr:172.16.0.16 Bcast:172.16.255.255 Mask:255.255.0.0
 inet6 addr: fe80::20c:29ff:fecc:5746/64 Scope:Link
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:110016 errors:0 dropped:0 overruns:0 frame:0
 TX packets:25081 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:50999240 (48.6 MiB) TX bytes:16095842 (15.3 MiB)

注意:inet addr行是IP信息;

inet addr:172.16.0.16 Bcast:172.16.255.255 Mask:255.255.0.0

172.16.0.16: 是IP地址;

255.255.0.0:是IP地址的掩码;

 

终端:终端设备和附着在终端设备之上的程序组成

  • echo “$SHELL” 显示附着在终端设备的程序;
  • tty – 显示终端设备

Xshell连接/图形下的终端:

~]# tty /dev/pts/0

虚拟终端:

~]# tty /dev/tty/0

startx 用于在虚拟终端之上启动图形终端

CentOS 6无论在哪个虚拟终端启动,图形终端都是/dev/tty/7

CentOS 7在哪个虚拟终端启动,此终端即为图形终端/dev/tty/[1-7]

终端切换:Alt+Clt + F#[1-7]

export – 导出变量

控制历史的显示方式相关的环境变量:HISTCONTROL

  • ignoredups: 表示忽略重复,连续且相同方为重复;
  • ignorespace:   表示忽略空格开头的命令;
  • ignoreboth:     以上两者都;

查看变量:

[root@localhost ~]# echo $HISTCONTROL
 ignoredups

修改变量:

[root@localhost ~]# export HISTCONTROL=ignorespace

 [root@localhost ~]# echo $HISTCONTROL
 ignorespace

用户接口:  [root@localhost ~]#

root: 当前有效用户

localhost: 简写主机名

~: 工作目录(working directory)或当前目录(current directory), 使用pwd命令即可显示

#:命令提示符

  • #: 管理员:  拥有所有权限,可执行管理操作;
  • $: 普通用户: 不具有管理权限,不能执行管理操作;
[root@localhost ~]# pwd
 /root

history 显示或操作历史列表

工作方式

  1. 用户登陆终端,将HISTFILE定义的文件(历史文件,~/.bash_history)中的历史条目加载至内存历史列表.
  2. 用户执行命令,将新执行的命令记录于内存中的历史列表中:
    • 列表列表的组成: 登陆终端HISTFILE文件的条目、新执行的命令;
  3. 用户登出终端,将历史列表中的的新执行的命令追加至HISTFILE中;

显示或操作历史列表:  history   [-c]   [-d offset]   [n]

  • history -d offset :删除指定条目;
  • history -c:清空历史列表;
  • history :显示历史列表;
  • history n:显示最近执行的n条命令;

操作历史文件中的历史列表: history   -rw   [filename]

  • history -r: 将历史中新生成的条目追加至HISTFILE;
  • history -w:将HISTFILE中的所有历史列表追加至内存;

验证工作方式

[root@localhost ~]# echo > $HISTFILE
 [root@localhost ~]# history -c
 [root@localhost ~]# logout <--内存中的第一条命令历史记录

[root@localhost ~]# history
 1 logout <-- 只记录了上次退出执行的命令
 2 history < --- 此刻执行的命令,新执行的命令

退出终端,将新执行的命令追加至$HISTFILE

[root@localhost ~]# logout <-- 新执行的命令

[root@localhost ~]# cat $HISTFILE

logout    <-- 只记录了上次退出执行的命令
 history   < --- 此刻执行的命令,新执行的命令
 logout  <-- 新执行的命令

 删除指定条目的历史:

[root@localhost ~]# w
 [root@localhost ~]# whoami
 [root@localhost ~]# whereis ls

[root@localhost ~]# history
 1 logout
 2 history
 3 logout
 4 cat $HISTFILE
 5 w
 6 whoami
 7 whereis ls
 8 history

删除此条历史4 cat $HISTFILE,即为:

[root@localhost ~]# history -d 4
 [root@localhost ~]# history
 1 logout
 2 history
 3 logout
 4 w         <-- 注意没有了
 5 whoami
 6 whereis ls
 7 history
 8 history -d 4
 9 history

清空历史列表:

[root@localhost ~]# history -c
 [root@localhost ~]# history
 1 history <-- 为当前执行的命令

显示最近执行n条命令:

[root@localhost ~]# w
 [root@localhost ~]# which --skip-alias ls
 [root@localhost ~]# whereis -b ls

[root@localhost ~]# history 3
 3 which --skip-alias ls
 4 whereis -b ls
 5 history 3 <-- 最近N条命令包括当前执行的命令

将历史中新生成的条目追加至HISTFILE;

[root@localhost ~]# logout

[root@localhost ~]# who -r
 [root@localhost ~]# who -l
 [root@localhost ~]# who -u
 [root@localhost ~]# who -d

[root@localhost ~]# history
 1 logout
  2 history
  3 logout
  4 history
  5 w
  6 which --skip-alias ls
  7 whereis -b ls
  8 history 3
  9 logout
  10 who -r
  11 who -l
  12 who -u
  13 who -d
  14 history

[root@localhost ~]# cat $HISTFILE

logout
 history
 logout
 history
 w
 which --skip-alias ls
 whereis -b ls
 history 3
 logout

[root@localhost ~]# history -w
 [root@localhost ~]# cat $HISTFILE
 logout
 history
 logout
 history
 w
 which --skip-alias ls
 whereis -b ls
 history 3
 logout
 who -r
 who -l
 who -u
 who -d
 history
 cat $HISTFILE
 history -w

仅是历史列表新生成的被追加至文件中了;

将历史文件中的所有条目读到内存中:

[root@localhost ~]# history
 1 logout
  2 history
  3 logout
  4 history
  5 w
  6 which --skip-alias ls
  7 whereis -b ls
  8 history 3
  9 logout
  10 who -r
  11 who -l
  12 who -u
  13 who -d
  14 history
  15 cat $HISTFILE
  16 history -w
  17 cat $HISTFILE
  18 history

[root@localhost ~]# history -r
 [root@localhost ~]# cat $HISTFILE
 logout
 history
 logout
 history
 w
 which --skip-alias ls
 whereis -b ls
 history 3
 logout
 who -r
 who -l
 who -u
 who -d
 history
 cat $HISTFILE
 history -w
 [root@localhost ~]# history
 1 logout
  2 history
  3 logout
  4 history
  5 w
  6 which --skip-alias ls
  7 whereis -b ls
  8 history 3
  9 logout
  10 who -r
  11 who -l
  12 who -u
  13 who -d
  14 history
  15 cat $HISTFILE
  16 history -w
  17 cat $HISTFILE
  18 history
 19 history -r
 20 logout
  21 history
  22 logout
  23 history
  24 w
  25 which --skip-alias ls
  26 whereis -b ls
  27 history 3
  28 logout
  29 who -r
  30 who -l
  31 who -u
  32 who -d
  33 history
  34 cat $HISTFILE
  35 history -w
  36 cat $HISTFILE
  37 history

echo 回显命令

  echo [SHORT-OPTION]… [STRING]…
-n:不自动进行换行操作;
-e: 让转义符生效;
转义符:
\n 换行符;
\r 回车符;
\t 横向制表;
\v 纵向制表;

默认情况:

[root@localhost ~]# echo “how are you?”
how are you?

选项-n:

[root@localhost ~]# echo -n “how are you?”
how are you?[root@localhost ~]#

选项-e:

[root@localhost ~]# echo -e “how are you?”
how are you?

选项-e,加转义符:

[root@localhost ~]# echo -e “how are \nyou?”
how are
you?
[root@localhost ~]# echo -e “how are \byou?”
how areyou?
[root@localhost ~]# echo -e “how are \tyou?”
how are you?
[root@localhost ~]# echo -e “how are \vyou?”
how are
you?

  • shutdown, reboot, halt,关机或重启
shutdown [OPTION]... TIME [WALL]
 OPTION:
 -h 关机;1分钟后关机;
 -r 重启
 -c cancle
 -k 狼来了

TIME:
 hh:mm 具体时间
 +m 几分钟后
 now

在10分钟后关机:

[root@localhost ~]# shutdown -h +10

Broadcast message from root@localhost.localdomain
 (/dev/pts/0) at 4:01 ...

The system is going down for halt in 10 minutes!

另起一个终端取消关机:

[root@localhost ~]# shutdown -c

立即重启

[root@localhost ~]# reboot

Broadcast message from root@localhost.localdomain
 (/dev/pts/2) at 4:03 ...

The system is going down for reboot NOW!

立即关机

[root@localhost ~]# shutdown -h

 

  • 系统启动从硬件读取时间,读取后与硬件无关,通过CPU频率计时;
    • 系统时间:通过CPU频率计时;
    • 硬件时间:主板钮扣电池为硬件供电,让时钟正确;

date命令:系统时间

  • 显示时间:date [OPTION]… [+FORMAT]
    • FORMAT:(%Y年 %m月 %d日 %H小时 %M分钟 %S秒 %s unix元年至执行命令那一刻经过的时间 )
  • 设定时间:date [MMDDhhmm[[CC]YY][.ss]]

显示时间:

[root@localhost ~]# date
 Wed Nov 29 04:09:36 CST 2017
 [root@localhost ~]# date +%Y
 2017
 [root@localhost ~]# date +%m
 11
 [root@localhost ~]# date +%d
 29
 [root@localhost ~]# date +%H
 04
 [root@localhost ~]# date +%M
 09
 [root@localhost ~]# date +%S
 54
 [root@localhost ~]# date +%s
 1511899796
 [root@localhost ~]# date +%A
 Wednesday
 [root@localhost ~]# date +%a
 Wed
 [root@localhost ~]# date +%F
 2017-11-29
 [root@localhost ~]# date +%D
 11/29/17
 [root@localhost ~]# date +%T
 04:10:35

设定时间:

设定2012年12月1日11点11分30秒

[root@localhost ~]# date 120111112012.30

 Sat Dec 1 11:11:30 CST 2012

clock、hwclock命令:硬件时间

  • 显示硬件时钟:# hwclock 或 # clock
  • 系统与硬件时钟同步:
    • 修改系统时间:hwclock -s
    • 修改硬件时间:hwclock -w

clock是hwlock的软链接

[root@localhost ~]# which clock
 /sbin/clock
 [root@localhost ~]# file /sbin/clock
 /sbin/clock: symbolic link to `hwclock'

显示硬件时钟:

[root@localhost ~]# hwclock
 Wed 29 Nov 2017 04:13:01 AM CST -0.877406 seconds
 [root@localhost ~]# clock
 Wed 29 Nov 2017 04:13:03 AM CST -0.737419 seconds

修改系统时钟:

[root@localhost ~]# date
 Sat Dec 1 11:14:04 CST 2012
 [root@localhost ~]# hwclock -s
 [root@localhost ~]# date
 Wed Nov 29 04:13:51 CST 2017

 

5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。

内建命令:用户接口内置的命令,在文件系统路径下没有与命令同名的文件;

外部命令:在文件系统上有与命令同名的程序文件

 

1、获取命令的类型‘

  • 内建命令:显示builtin
  • 外部命令:显示命令的绝对路径或命令的别名;如果别名同原名,原名会被隐藏,此时要执行原命令: \COMMNAD
[root@localhost ~]# type cd
 cd is a shell builtin
[root@localhost ~]# type grep
 grep is /bin/grep
[root@localhost ~]# type ls
 ls is aliased to `ls --color=auto'
[root@localhost ~]# ls
[root@localhost ~]# \ls

2、内建命令

[root@localhost ~]# help cd

3、外部命令

[root@localhost ~]# ls --help

[root@localhost ~]# man ls

4、官方文档

5、命令自带文档(/usr/share/doc/app-VERSION/{README,ChangeLog,INSTALL})

  • REDME:程序相关信息
  • ChangeLog: 版本迭代时的改动信息
  • INSTALL: 安装帮助
  • COPYING: 版本信息

6、Google

man章节

  • 系统调用(man2)
  • 库调用(man3)
  • 用户命令(man1)
  • 管理命令(man8)
  • 设备文件(man4)
  • 配置文件(man5)
  • 杂项(man6)
  • 游戏(man7)

获取命令在哪些章节下有帮助:

whatis COMMAND

获取命令在指定章节下的帮助

man CHAPTER COMMAND

[root@localhost ~]# whatis passwd
 passwd (1) - update user's authentication tokens
 passwd (5) - password file
 passwd [sslpasswd] (1ssl) - compute password hashes
 [root@localhost ~]# man 5 passwd

 

6、请罗列Linux发行版本的基础目录名称命名法则及功用规定。

Filesystem Hierarchy Standard http://www.pathname.com/fhs/pub/fhs-2.3.html

/bin

所有用户可用的二进制程序;

/sbin

系统管理员可用的二进制程序;

/boot

引导加载器的静态文件;kernel: vmlinuz, initramfs(initrd), grub等;

/dev

当前系统所识别到的所有硬件设备的设备文件或特殊文件;黑底色黄前景色;

特殊文件:由软件模拟文件为设备文件;
  • 设备类型:
    • 字符线性存储,以字符为单位进行交换数据;
    • :   随机存储,以为单位进行交换数据;
/etc

纯文本的配置文件,控制程序运行特性,运行哪段代码。多个选项时保存于配置文件中;

/home

用户的家目录,站点特有的目录,任何程序不应该依赖于此目录;

/root

root用户的家目录,可选;管理员不应该登陆系统;

/lib

基本共享库和内核模块;系统启动时/bin, /sbin下的程序所依赖的库;

  • libc.so.* 动态链接的C库
  • ld* 运行时加载器
  • modules:   可装载的内核模块
/lib64

64位系统特有的存放64位共享库的路径;

/media

便携式设备挂载点;

/mnt

文件系统的临时挂载点;

/opt

第三方应用程序的安装位置;logstash, oracle。。

  • 类似于Windows中的 Program Files目录;
/src

当前主机为服务提供的数据;

/tmp

为那些会产生临时文件的程序提供的用于存储临时文件的目录,可供所有用户使用,有特殊权限;

/usr

universal share read-only data;只读,任何兼容FHS的发行版彼此间可共用usr目录;

  • bin, sbin系统运行过程中附加功能;
  • lib 为/usr/{bin,sbin}提供
  • include C程序的头文件
  • share 架构特有的文件存放路径;
  • man 命令手册页
  • doc 命令自带文档
  • X11R6:x window程序安装位置
  • src 程序源码文件的存放位置
/usr/local

第三方应用程序的安装位置,新版本在?usr/local下老版本在/usr下,不能覆盖程序;老版本可能会被其他程序依赖;

  • bin, sbin, lib, lib64, etc, share, include, man, share, src, games
/var

var Hierarchy,经常发生变化数据的目录

  • cache 缓存数据
  • lib      变化状态数据
  • local  为/usr/local下提供经常发生变化的数据
  • opt    为/opt下提供经常发生变化的数据
  • lock   锁文件
  • log     日志文件
  • run    运行中的进程相关的信息:pid
  • spool  暂存
  • tmp    重启后留存的数据
虚拟文件系统:基于内存的文件系统,开机存在,关机不存在;
  • /proc,  proc, 内核及进程信息,内核参数映射;net.ipv4.ip_forward抽象为目录,其存储于/proc/sys目录下,因此完整路径为/proc/sys/net/ipv4/ip_forward;
  • /sys    sysfs, 内核中硬件设备抽象为统一接口映射;

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89247

(5)
逆神阳逆神阳
上一篇 2017-12-02 22:12
下一篇 2017-12-03

相关推荐

  • grep的用法

    grep的用法 1、复制/etc/skel目录为/home/tuser1及其内容文件的属组和其它用户均没有任何访问权限。 cp -R /etc/skel /home/thuser1 #复制文件/etc/skel 到/home/目录下并改名为thuser1 chmod -R 700 /home/thuser1 #更改/home/thuser1目录权限为属主全部…

    Linux干货 2017-07-23
  • Linux 第八天: 练习和作业

    Linux 第八天: (08月09日) 练习和作业       1删除/etc/grub2.cfg所有以空白开头的行行首空白字符 sed 's#^[[:space:]]\+##' /etc/grub2.cfgsed -r 's@^[[:space:]]+@@' /etc/grub2.cfg…

    Linux干货 2016-08-11
  • kickstart及引导镜像制作

    环境:CentOS 6.7 kickstart 制作    1、centos系统安装完成后,anaconda会根据本次系统安装的配置,生成一个与本次安装设置相同的kickstart文件,文件位于/root/anaconda-ks.cfg,可以使用vim对这个文件进行修改来使用。     vim anaconda-ks.…

    Linux干货 2015-12-15
  • ssh+rsync批量管理,批量分发

    现在我简单架设了一个7台服务器的集群集体如下,架设集群的过程我就省略了… [nfs存储一台]192.168.42.10[负载均衡2台]192.168.42.40192.168.42.41[web服务器2台]192.168.42.30192.168.42.31[备份1台]192.168.42.20[mysql 1台]192.168.42.50 我现…

    Linux干货 2017-04-22
  • 关于 进程和性能监控

            Linux系统状态的查看及管理工具:     pstree, ps, pidof, pgrep, top, htop, glance,pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup pstree命…

    系统运维 2016-09-11

评论列表(1条)

  • 马哥教育
    马哥教育 2017-12-16 12:25

    赞~命令的使用总结的很详细,继续加油