第一章
Linux的起源、历史、特点、定义
GNU GPL
常见的发行版本
商业、共享、自由和免费软件的区别和联系
第二章
Linux的安装方式(区别和联系,如何选择)、安装过程、远程连接方式
Linux内核版本号
Linux目录结构、常见目录的作用和存放内容
Linux系统结构图、主要组件构成
关机、重启命令
- 关机
- Shutdown -h now
- init 0
- Halt -p
- poweroff -p
- 重启
- shuwdown -r now
- init 6
- Reboot
说明文档查看
- man 或者 info
第三章
3.1 Linux交互方式
3.2 shell的作用、种类、默认shell
Linux终端是用户与操作系统之间的接口
这个接口的程序叫Linux Shell
【作用】
Shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令,返回执行结果
【注意事项】
一个用户同一时刻只能使用一个shell
-
查看当前系统支持的Shell列表
cat /etc/shells
-
查看当前用户使用的Shell版本
echo $SHELL
-
默认Shell
- bash,安装在/bin/sh,其实是连接到/bin/bash
3.3 Shell的功能(命令行提示符、自动补齐、历史记录查看、常用的快捷键、重定向、管道)
- 命令行提示符
#
代表root用户$
代表普通用户
- 自动补齐
tab
键
- 历史记录查看
- 键盘上下
- cltr+r == 查询以往的记录
- 重定向
- 0 -->> 标准输入
- 1 -->> 标准输出
- 2 -->> 标准错误输出
- < 输入重定向
- > 输出重定向(覆盖原有内容)
- >> 追加重定向
- 管道
- 前一个命令输出作为下一个命令的输入
3.4 常用命令
clear、cd、rmdir、cat、
ls、echo、mkdir、touch、more、less、head、tail、cp、mv、pwd、rm
-
echo
-n
输出后不会自动换行-e
开启转义,即\t
这样的会被翻译为一个tab而不会当字符输出
-
mkdir
-p
自动创建不纯在的中间目录
-
touch
- 用于改变文件的时间记录或创建一个空文件
- 但经常用做新建文件
-
ls
- 显示目录下的内容
-a
包含隐藏文件-i
显示Inode节点-l
长格式-S
按文件从大到小排序-R
递归显示目录及其子目录内容
-
mv
-
可以用作移动
-
也可以用作文件重命名,mv file1 file2
-
eg: mv /a.txt /tmp/a.txt
-
-
cp
- 文件/目录 的复制
-
tail
- 显示文件的结尾的内容。在默认情况下显示文件的最后10行内容
- tail -n 数字x 文件a,代表显示文件a的最后x行
- 也可以直接 tail -x a,代表显示文件a的最后x行
-
head与tail类似
-
more和less
- 都是分页显示文件内容
- more是一次性加载进内存,只能往下翻页
- less是按需加载,可以上下翻页,速度更快
-
pwd
- 显示当前路径
-
rm
- 删除内容
-r
递归删除子目录内容-f
强制执行,不提示
3.5 文件类型、相对路径、绝对路径、用户主目录、特殊目录
【文件类型】
简写 | 类型 |
---|---|
- | 普通文件 |
d | 目录 |
l | 链接文件 |
b | 设备文件 – 区块 |
c | 设备文件 – 字符 |
p | 管道文件 |
s | Socket文件 |
【PS】:设备文件在 /dev 目录下
- 绝对路径
- 从根开始,即从
/
开始
- 从根开始,即从
- 相对路径
- 从用户工作目录开始
- 用户主目录
- 可以用
~
表示 - cd ~
- root用户在
/root
下,普通用户在/home
下
- 可以用
- 特殊目录
.
代表目录自己..
代表该目录的父目录
第四章
4.1 用户类型
- 超级用户
root,根用户,类似Windows中的超级管理员账户,有最高的权限,可以对Linux做任何操作 - 普通用户
受限的权限,普通用户没有对系统的完全控制权,而且用户之间私人的资源是相互隔离的 - 系统用户
与系统和程序服务相关的用户
默认情况下,这些特殊用户是无法登录的,如果给这些用户授权登陆口令后,就可以使用这些用户登录系统
/sbin/nologin 无法登陆shell
4.2 /etc/passwd 作用和内容
每一行存储一个用户的账号信息
用户名 : 加密密码 : 用户ID : 用户组ID : 用户信息 : 用户主目录 : 登录Shell
root:x:0:0:root:/root:/bin/bash
超级用户root的UID是0
系统用户的UID在1000以内
4.3 /etc/shadow 作用
每一行存储一个用户的登录密码信息
4.4 /etc/group 作用
每一行记录系统中的用户组信息
组名:密码字段:用户组ID :用户名列表
root:x:0:
4.5 常用指令
usermod、userdel、groupadd、groupdel、ln、gzip、unzip、sed、cut、
useradd、chmod、chown、chgrp、find、tar、awk、grep、tr
-
useradd
-u, -d, -g, -s
分别对应uid,目录,组别,shell
-
passwd
- 修改密码
passwd 用户名
-
chmod :
- rwx - readable, writeable, executable,对应4 2 1 权限
- 最简单的
chmod 权限 文件
- eg
chmod 640 a.txt
-
chown
- chown [-R] 用户名[:组名] 路径
-
chgrp
- chown [-R] 组名 路径
-
find
-
查找文件或目录
-
find 路径 [选项] 表达式
-
-name 查找名字
-
-type 文件类型
- 其中
-type f
是普通文件
- 其中
-
-perm 文件权限
-
find / -name “*.conf” 查找根目录 “ / ” 下所有后缀为conf的文件
-
-
tar
- tar -cvf 文件 路径 = 压缩文件,生成tar
- tar -zcvf 文件 路径 = 压缩文件,生成tar.gz
- tar -zxvf 文件 路径 = 解压文件
-
awk
- awk ‘{print $…}’
- 其中$1为文件类型+文件权限
-
grep
- 查找文件里符合的字符串
-v
显示不包含该文本的行
-
gzip
- 压缩文件
-
unzip
- 解压缩文件
-
tr
- 用于转换或删除文件中的字符
- tr [-d] 字符串1 字符串2
4.6软连接和硬连接的区别和联系
- ln (-s) 源路径 目标路径
- ln a b 代表 b->a,即b指向a
- 默认硬链接,只有-s时候才是软连接
- 硬链接(hard link)
- 给文件一个副本(别名),同时建立两者之间的连接关系,修改其中一个,与其连接的文件同时被修改,如果删除其中一个,其余的文件不受影响。磁盘上只有一份数据。硬链接是存在同一个文件系统中
- 指向同一个Inode节点
- 软链接(symbolic link)
- 软链接的方式则是产生一个特殊的文件,该文件的内容是指向另一个文件的位置。它只是一个快捷方式,删除了源文件,这个连接文件就没用了。软链接可以跨越不同的文件系统
- 指向不同Inode节点
【总结】简单来说,软连接只是一个快捷方式 + 一个源文件,硬连接则是在两个地方都出现了同一份文件,根源是一样的。
- 联系:
(1)对软连接和硬连接修改,都会对源文件有效
(2)删除软连接或者硬连接本身,都不会对源文件有影响 - 区别:
(1)硬连接,磁盘上只有一份数据,创建其中的一个连接,其余的文件不受影响,只有当链接数变成0,文件才会被真正删掉
(2)软连接,只是一个快捷方式,是一个独立的文件,删除了源文件连接文件就没用了。
PS!!!需要指定绝对路径,否则链接失效
4.7 常见正则表达式
-
^xxx,匹配开头
-
xxx$,匹配结尾
-
[],陪陪指定范围内的字符
第五章
5.1 常用指令
wc、sort、yum、sudo
cal、date、su、which、whereis、
- cal
- 打印日历
- date
- date + ‘…’ ,省略号为具体的表达式
- su
- 更换用户
su 用户名
- which whereis
- 查找文件所在位置
which useradd
5.2 vi三种模式的功能、切换
【命令模式】:
-
进入vi的默认模式
-
按下esc键后进入
-
光标移动
- h(左), j(下), k(上), l(右) <=> 键盘上下左右键
- $ #移动到行未
- 0 / ^ #移动到行首
- **gg ** #定位第一行行首
- **G ** #定位末行行首
- nG #定位到第n行行首
- w | nw #移动到下一/n个字首
- e | ne #移动到下一/n个字尾
-
删除
- **x | nx ** #删除一/n个字符
- dd | ndd #删除一/n行
- **d[w|e|b|$|^|G|gg …] **
删除光标移动范围内的内容- dG即可删除所有内容
-
恢复
- u #撤销上一步操作
- U #撤销对当前行的所有操作
-
复制粘贴
- yy 复制
- p 粘贴
-
替换、切换到插入模式 (含课外补充内容)(含课后作业)
【插入模式】:
- 按下i,a等指令进入
- i #在光标左侧插入
- a #在光标右侧插入
【末行模式】:
-
命令模式下按 " : " 进入
-
保存、退出
-
显示/取消行号
-
:set nu | :set number
-
:set nonu | :set nonumber
-
-
显示光标所在行号
-
:nu | :number
-
-
搜索
- **/ **
从光标所在位置往下搜索 - ?
从光标所在位置往上搜索
- **/ **
-
替换
- **😒/x/y **
把光标所在行第一个匹配的x替换为y - :n,m s/x/y
把第n行到m行中每行中第一个匹配的x替换为y - :% s/x/y
把当前文件中所有行的第一个匹配的x替换为y - g : 全局 => 把每一行中所有的匹配项都替换
😒/x/y/g
:n,m s/x/y/g
:% s/x/y/g
- **😒/x/y **
-
保存与另存为
:w
写入:w filename
另存为
ZZ与:x , :wq 作用一样
5.3 vi与shell交互
在末行模式下用“!”符号来访问Linux的Shell
5.4 vi冲突处理
删除 *.swp 文件
5.5 文本格式转换
Linux下是unix格式
Windows下是dos格式
5.6 课后补充 + 课后作业
命令模式下的常见操作
- 保存退出
- ZZ #与末行模式下 :wq 效果一样
- 快速清空文本内容
- gg #定位第一行行首
- dG #删除所有内容
- 快速删除指定行之间的内容
- :n,m d #删除第n行到m行之间的内容
课后作业
-
执行 man ls > out.txt ,生成out.txt文件
- man是操作手册,遍历操作手册并输出
-
使用 vi 打开 out.txt
-
显示所有行号
-
:set nu | :set number
-
-
光标移动到100行,向右移动10个字符
-
100G 10w
-
-
移动到第一行,往下搜索“1024”,定位到第二个匹配项
-
gg /1024 n
-
-
将50行到100行之间的小写“o”改写为大写"O"
-
:50,100 s/o/O/g
-
-
修改完了,突然反悔,如何恢复修改前?
- u
-
复制65到73行之间这9行的内容,粘贴到最后一行
-
65G 9yy G p
-
-
删除21到42行之间的所有内容
- 20G
- 22dd
:20,42 d
-
把当前文档另存为 out.txt.bak
-
:w filename #另存为
-
-
定位到28行,删除3个单词
第六章
- traceroute
- 显示数据包到主机间的路径
- netstat
- 用于显示网络状态
- Netstat -ntlp 可查看端口信息
6.1 网络配置文件的各自作用、设置静态IP方法
/etc/sysconfig/network | 最基本的网络信息,系统启动时读取该文件 |
---|---|
/etc/sysconfig/network-scripts/* | 此目录下的文件是系统启动时用来初始化网络的一些信息,例如:第一块以太网卡对应的文件为ifcfg-eth0 |
/etc/host.conf | 域名解析的配置文件 |
/etc/hosts | 域名或主机名与IP地址的映射文件 |
/etc/resolv.conf | 域名服务器配置文件 |
/etc/protocols | 定义使用的网络互联协议及协议号 |
/etc/services | 设定主机的不同端口的网络服务 |
设置静态IP
-
在**/etc/sysconfig/network-scripts/ifcfg**文件中设置
-
BOOTPROTO=static IPADDR=192.168.14.11 //IP地址
第七章
7.1 两个网络模式的区别与联系(含图),如何选择哪种?
Stand-alone 与 xinetd模式
【区别】
- stand-alone只能监听一个指定端口,xinetd模式可以同时监听多个接口
- 运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源
- 但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降
7.2 telnet服务的配置过程、telnet命令使用
-
配置文件
- /etc/xinetd.d/telnet
-
重启服务
- service xinetd restart
7.3 ftp两种工作模式的区别与联系(含图)
PORT与PASV
7.4 ftp的配置过程、ftp命令的使用
- 配置文件
- /etc/vsftpd/vsftpd.conf
- 启动服务
- service vsftp start
第八章
8.1 X Window的作用和组成 (含图) 、每个组成部分的作用
X window由三部分组成
【1】X 服务端
- 每一套显示设备只对应唯一的X Server
- 是控制输入及输出设备并维护相关资源的程序,它接收输入设备的信息,并将其传给X Client,而将X Client传来的信息输出到屏幕上(在屏幕上构造方块(窗口),然后画出里面的元素)
【2】X 客户端
- 是应用程序的核心部分,它与硬件无关,每个应用程序就是一个X Client
- X Client无法直接影响视窗行为或显示效果,它们只能发送一个请求给X Server,由X Server来完成这些的请求
【3】X 通信通道
(1)X通信通道的主体是xlib(X函数库)
(2)X Client调用xlib,利用相应的通信功能向X Server发出请求
(3)X Server完成任务之后,同样调用xlib把结果显示指定的设备上去
8.2 修改系统运行级别
-
临时更改
- init n
- Telinit n
- Startx(启动图形化环境
-
长期更改
- systemctl set-default *.target??
8.3 系统初始化过程(centos7之前和centos7之后)
第九章
9.1 shell程序的特点与用途
-
shell程序可以认为是将shell命令按照控制结构组织到一个文本文件中,批量的交给shell去执行
-
不同的shell解释器使用不同的shell命令语法
-
shell程序解释执行,不生成可以执行的二进制文件
-
可以帮助用户完成特定的任务,提高使用、维护系统的效率
-
了解shell程序可以更好的配置和使用Linux,实现自动化运维
-
shell使用解释型语言,不需重新编译
9.2 shell程序的编写、执行和调试
需要增加可执行权限 chmod +x filename
9.3 变量声明与使用、read、位置变量、 H O M E 、 HOME、 HOME、PATH、$?
【变量】
- 变量是弱类型
- 声明变量不用声明类型
- 可以存储不同类型的内容
- 大小写区分
- 变量=值,等号两边不能有空格
- $变量名 变量名为一个字符时使用
- ${变量名} 变量名多于一个字符时使用
【read】
- 使用read将用户的输入赋值给变量
【位置变量】
- 会把所输入的命令后面的参数使用位置变量传递给bash脚本程序
$0则代表脚本的名字
$1、
2
…
2…
2…n分别代表参数1、参数2…参数n
$*:这个变量包括参数的列表(字符串)
$@:这个变量包括参数的列表(数组)
$#:这个变量包括参数的个数
【$HOME】
用户主目录
【$PATH】
寻找命令或可执行文件的搜索路径列表
【$?】
紧邻的前驱命令的返回值 0=成功 1=失败
9.4 双引号、单引号和倒引号的区别和联系
【双引号】
- 字符串通常被放在双引号中
- 如果在参数中包含一个或多个空白字符,必须给参数加双引号
【单引号】
- 单引号括起来的字符都作为普通字符出现
【倒引号】
- Shell会先执行倒括号内的内容,再以它的标准输出结果取代整个倒引号部分
9.5 简单数学运算、条件判断(字符串、数字)、逻辑运算
【数学运算】
-
expr arg
- expr 2 + 3
- 运算符和参数之间要有空格分开
- 乘法需要 “\”修饰
- expr ` expr 2 + 3 ` \* 4 即 为(2+3)*4
-
let
- s=(2+3)*4
-
let语句更加简洁
【条件判断】
-
[ condition ]
+ 条件和左右括号之间要有空格 -
真:0
-
假:1
【逻辑运算】
-
逻辑与-a:condition1-a condition2,如果两个条件都为真,则结果为真
-
逻辑或-o:condition1-o condition2,如果两个条件有一个为真,则结果为真
-
逻辑非!:! condition,结果与condition相反
9.6 if、case、for、while、until
要求可以 手写shell程序
第十章
10.1 磁盘设备的命名方式
- 前两个字母表示分区所在设备的类型:
- hd:IDE硬盘
- sd:SCSI硬盘(U盘,移动硬盘等)
- 第三个字母表示分区在哪个设备上
- hda:第一块IDE硬盘
- sda:第一块SCSI硬盘
- sdb:第二块SCSI硬盘
- 数字表示分区的次序:
- hda1:第一块IDE硬盘第一分区
- sdb2:第二块SCSI硬盘第二个分区
10.2 Linux的文件系统、VFS的功能和作用(含图)
-
XFS为默认文件系统
-
把文件系统从操作系统和系统服务中分离出来,在它们之间使用了一个接口层,也就是虚拟文件系统VFS(Virtual File System)
-
只存在于内存,系统启动时建立,系统关闭时消亡
【VFS功能】
- 记录可用文件系统的类型
- 将设备与对应的文件系统联系起来
- 处理面向文件的通用操作
- 涉及到针对文件系统的操作时,把他们映射到相关的物理文件系统
10.3 设备挂载过程
【1】查看设备:使用命令“fdisk -l”可以查看系统的存储设备
【2】挂载设备 :首先使用mkdir命令建立挂载点目录,然后再使用mount命令挂载相关设备
【3】访问设备
【4】卸载设备 :用户在使用完挂载设备后,不能直接将挂载设备从系统拔出,否则会出现问题,严重的会导致系统崩溃。用户必须先执行卸载umount 命令然后再该设备拔出
-
设备名称在
/dev
目录下 -
挂载点,即设备挂载到
/mnt
目录下 -
自动挂载文件
/etc/fstab
10.4 常用指令
mkfs、fdisk、mount、umount、whoami、who、w、jobs、bg、fg、&(后台进程启动)
-
df
- 查看磁盘空间使用情况
-
du
- 统计目录或文件所占磁盘空间大小
10.5 进程的概念、进程和程序的区别与联系
【概念】
- Linux系统上所有运行的东西都可以称之为一个进程,如每个用户任务、每个系统管理任务
【区别】
- 程序只是一个静态的指令集合,不占系统的运行资源,只占用磁盘空间
- 进程是一个随时都可能发生变化的、动态的、使用系统运行资源(cpu,内存等)的程序
- 一个程序可以启动多个进程
【联系】
- 进程是一个程序的运行状态
【】
10.6 at和crontab的区别和联系、各自的创建、删除、查看
【区别】
- at指令输入有交互式和指定文件两种形式
- at指令只能执行一次,crontab指令可以重复周期性的执行某个程序
- crontab会将输出作为邮件发送给crontab的所有者
【联系】
- 指定在将来的某个时间点执行某些命令
at
-
用法:at [选项] [时间]
-
at -f 脚本文件
-
查看都是
-l
-
at的删除是
-d
,或者atrm
,contrab的删除是-r
10.7 ps、kill、free
ps:显示当前进程的状态
kill:-1 重新加载,-9杀死进程,但是kill只是发送信号,无法真正决定能否杀死。
所以kill -9 无法终止系统进程和守护进程
free“显示内存状态
10.8 日志文件
- 多数的日志文件位于/var/log目录下,不同的日志文件记载不同的信息
第十一章
11.1 gcc命令使用(一次编译、分开编译、不同目录、指定头文件)
- -I(大写i)指定目录寻找头文件
【一次编译】
- gcc a.c b.c d.c -o xxx
- 一次性编译多个文件
【分步编译】
分别编译每一个c文件
11.2 make工具
11.3make层次图、makefile文件
11.4 gdb调试工具的基本使用
file | 指定需要进行调试的程序 |
---|---|
step | 单步(行)执行,如果遇到函数会进入函数内部 |
next | 单步(行)执行,如果遇到函数不会进入函数内部 |
run | 启动被执行的程序 |
quit | 退出gdb调试环境 |
查看变量或者表达式的值 | |
break | 设置断点,程序执行到断点就会暂停起来 |
shell | 执行其后的shell命令 |
list | 查看指定文件或者函数的源代码,并标出行号 |
11.5 静态函数库的创建与使用
xxx.a
11.6 动态函数库的创建与使用
xxx.so
实验一
-
ip addr
- 查看ip地址
-
mv指令可以使用绝对路径,需要 " / " 开始描述目录
-
mv指令使用相对路径时,直接用文件夹名称开始
-
/etc/passwd 这个目录里面存放了用户信息
-
find 指令
-
tar zcvf 目标文件 目录 = 压缩文件
-
awk ‘{print $…}’
实验二
- 将文件从大到小排序,取最大的
- 用
ls -S
将文件从大到小排序 - 再利用管道
|
分割 - 再利用
head -n
指令取前n行
- 用
- 统计有多少用户
- 即统计/etc/passwd中有多少行
- 用
wc -l
指令统计行数
- 使用
ln -s
创建软链接ls a b
即 b -> a,b指向a
- 利用
su
指令进行某用户 - 利用
exit
指令退出某用户 chmod 权限 文件
- 权限可以直接用三个数字
- 也可以用
u=..., g=..., o=...
- chown改变用户
- -R可以连带子目录的文件一起更改
作业3 vi编辑器
-
gg
第一行行首 -
G
末行行首 -
nG
移动到第n行行首 -
dd
删除:n,m d
也是删除
-
yy
复制 -
p
粘贴 -
:w filename
另存为 -
ndw
删除n个单词 -
nx
实验三
-
安装telnet
-
安装vsftpd
-
添加用户
useradd 用户名
-
查看进程信息
ps -ef
-
grep查找a内容,去掉其中包含的b内容
grep 'a' | grep -v 'b'
-v
表示显示不包含该字符串的行
-
提取制定内容
cut命令
-d
定义分隔符-f
为提取字段cat /etc/passwd | cut -d: -f1,3,4
-
Chkconfig
- 查看进程状态
实验五
1. Menu.sh
-
定义函数
- Func() {…}
-
调用函数
- 只需要输入func,不需要func(),不用带括号
-
死循环
-
while true do ... done
-
-
case
-
case ${...} in ..|..) .... ;; ..|..) .... ;; *) #表示其他情况 exit ;; esac
-
-
显示当前目录
pwd
-
显示文件名字
echo $0
-
显示日期
date +'%.....'
-
显示ip
ip addr
ifconfig
2. score.sh
-
if语句
-
if [ x ];then .... elif [ x ];then .... else .... fi
-
-
条件判断整数关系
-gt
for great than , 大于lt
小于-ge
大于等于-le
小于等于-eq
等于-ne
不等于
-
条件判断
- [ condition ],条件要与括号间留有空格
【完整代码】
#!/bin/sh
while true
do
echo "please input score:"
read score
if [ $score -lt 0 ];then
exit
elif [ $score -lt 60 ];then
echo "Failed!"
elif [ $score -lt 70 ];then
echo "Passed!"
elif [ $score -lt 80 ];then
echo "Medium!"
elif [ $score -lt 90 ];then
echo "Good!"
elif [ $score -le 100 ];then
echo "Execllent!"
else
echo "input error!"
fi
done
3. File.sh
#!/bin/sh
while true
do
echo -e "input a directory:"
read dir
if [ $dir = "q" ];then
exit
elif [ -e $dir -a -d $dir ];then
for file in `ls $dir`
do
if [ ! -e "$dir$file" ];then
dd="$dir/$file"
else
dd="$dir$file"
fi
type=`ls -ld $dd | cut -c1`
echo "#{dd}_${type}"
done
else
echo "...."
fi
done
4. ftp.sh
#!/bin/sh
yum install -y vsftpd
sed -i "s?anonymous_enable=YES?anonymous_enable=NO?" /etc/vsftpd/vsftpd.conf
service vsftpd start
实验六
1. program.sh
【完整代码】
#!/bin/sh
echo "please input a number:"
read num
while [ $num -gt 0 ]
do
i=$num
while [ $i -gt 0 ]
do
echo -n "$i "
let i=$i-1
done
echo
let num=$num-1
done
2. log.sh
Sort - u,去除重复
【完整代码】
#!/bin/sh
ips=`cat run.log | awk '{print $1}' | sort -u`
for ip in ${ips}
do
count=`cat run.log | grep ${ip} | wc -l`
echo ${ip} ${count}
done
3. crontab
-
格式
- * * * * * 命令
- 5个星号分别代表
- 1⃣️分钟,00-59
- 2⃣️小时,00-23
- 3⃣️日,01-31
- 4⃣️月,01-12
- 5⃣️周几,0-6
-
$?代表上一个命令执行的结果
-
0代表真,1代表假
统计学
- Excel排序
- Excel求平均数
- Excel计算标准差