一、Linux 概述与环境搭建
1.1 Linux 内核与系统组成
Linux 系统由两部分组成:
- Linux 系统内核:提供系统最核心的功能,如调度 CPU、调度内存、调度文件系统、调度网络通讯、调度 IO 等。
- 系统级应用程序:出厂自带程序,可供用户快速上手操作系统,如文件管理器、任务管理器、图片查看、音乐播放等。
Linux 内核是免费开源的,任何人都可以下载内核源码并查看且修改。
可以通载 Linux 内核。
Linux 系统架构图(示意):
应用程序
↓
Shell(命令解释器)
↓
操作系统内核
↓
硬件
用户 → 使用 → 第三方程序 → 调用 → 内核 → 调度 → 硬件
用户 → 使用 → 系统程序 → 调用 → 内核 → 调度 → 硬件
1.2 Linux 发行版
任何人都可以封装 Linux,目前市面上有非常多的 Linux 发行版,常用的如下:
| 发行版 | 说明 |
|---|---|
| Linux Mint | 基于 Ubuntu,界面友好 |
| Ubuntu | 最流行的桌面 Linux |
| Arch Linux | 滚动更新,高度可定制 |
| CentOS | 企业级,RedHat 免费版 |
| RedHat | 商业企业级 |
| Debian | 稳定,Ubuntu 的上游 |
| Fedora | RedHat 的社区版 |
| openSUSE | 德国出品 |
| deepin | 国产,界面美观 |
| 中标麒麟 / 红旗 Linux | 国产政府用 |
1.3 VMware 虚拟机与快照
VMware 虚拟机(Workstation 和 Fusion)支持为虚拟机制作快照。
通过快照将当前虚拟机的状态保存下来 ,在以后可以通过快照恢复虚拟机到保存的状态。
类似于游戏存档,死亡后回档即可,故在进行任何测试之前拍摄快照很有必要,平时在系统稳定运行时拍摄快照也是很重要的。
快照时间线示意图:
快照1 快照3
↑ ↑
──●──●──●──●──●──→ 时间线
↓
当前状态
↓
快照2
Windows 快速查看 VMware 网络连接: 使用 ncpa.cpl 指令快速查看 VMware 网络连接情况。
二、Linux 目录结构
Linux 的文件系统是一个独立且唯一的树形结构,以根目录 / 为起点。
2.1 常用目录说明
| 目录 | 重要性 | 说明 |
|---|---|---|
/bin |
常用 | Binary 的缩写,存放最经常使用的命令(也在 /usr/bin、/usr/local/bin) |
/sbin |
Super User 的意思,存放系统管理员使用的系统管理程序(也在 /usr/sbin、/usr/local/sbin) |
|
/home |
常用 | 存放普通用户的主目录,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名 |
/root |
常用 | 该目录为系统管理员(超级权限者)的用户主目录 |
/lib |
系统开机所需要最基本的动态连接共享库,作用类似于 Windows 里的 DLL 文件 | |
/lost+found |
一般情况下是空的,当系统非法关机后,就存放了一些文件 | |
/etc |
常用 | 所有的系统管理所需要的配置文件和子目录,比如安装 mysql 数据库的 my.conf |
/usr |
常用 | 用户的很多应用程序和文件都放在这个目录下,类似于 Windows 下的 program files |
/boot |
常用 | 存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件 |
/proc |
不能动 | 虚拟目录,是系统内存的映射,访问这个目录来获取系统信息 |
/srv |
不能动 | service 缩写,该目录存放一些服务启动之后需要提取的数据 |
/sys |
不能动 | Linux 2.6 内核的一个很大的变化,该目录下安装了 2.6 内核中新出现的文件系统 sysfs |
/tmp |
存放一些临时文件的目录 | |
/dev |
类似于 Windows 的设备管理器,把所有的硬件用文件的形式存储 | |
/media |
常用 | Linux 系统会自动识别一些设备,如 U 盘、光驱等,识别后 Linux 会把识别的设备挂载到这个目录下 |
/mnt |
常用 | 系统提供该目录是为了让用户临时挂载别的文件系统的,可以将外部的存储挂载在 /mnt/ 上 |
/opt |
给主机额外安装软件所存放的目录,如安装 ORACLE 数据库就可放到该目录下,默认为空 | |
/usr/local |
常用 | 给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序 |
/var |
常用 | 存放着不断扩充的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件 |
/selinux |
SELinux 是一种安全子系统,能控制程序只能访问特定文件,有三种工作模式,可以自行设置 |
三、基础命令
3.1 命令通用格式
无论是什么命令,在 Linux 中,命令有其通用的格式:
command [-options] [parameter]
command:命令本身-options:可选,非必填 命令的一些选项,可以通过选项控制命令的行为细节parameter:可选,非必填 命令的参数,多数用于命令的指向目标等
3.2 帮助命令
man 命令
获取帮助信息。
man [命令或配置文件] # 功能:获得帮助信息
# 案例:查看 ls 命令的帮助信息
man ls
help 命令
help 命令 # 功能:获得 shell 内置命令的帮助信息
3.3 ls 命令
ls 命令格式:ls [-a -l -h] [Linux路径](选项加 R 代表递归,将子目录中的文件都罗列出来)
示例说明:
ls -l /home/itheima:以列表的形式,显示/home/itheima目录内的内容cp -r test1 test2:cp 是命令本身,-r 是选项,test1 和 test2 是参数,意思是复制文件夹 test1 成为 test2
ls 选项说明:
| 选项 | 说明 |
|---|---|
| 无选项 | 以平铺形式,列出当前工作目录下的内容 |
-a |
all 的意思,即列出全部文件(包含隐藏的文件/文件夹)。以 . 开头的,表示是 Linux 系统的隐藏文件/文件夹(只要以 . 开头,就能自动隐藏),只有通过 -a 选项,才能看到这些隐藏的文件/文件夹 |
-l |
以列表(竖向排列)的形式展示内容,并展示更多细节 |
-h |
以易于阅读的形式,列出文件大小,如 K、M、G。-h 选项必须要搭配 -l 一起使用 |
参数作用: 可以指定要查看的文件夹(目录)的内容,如果不给定参数,就查看当前工作目录的内容。
命令选项组合使用: 命令的选项是可以组合使用的,比如 ls -lah,等同于 ls -a -l -h。
3.4 cd 命令 / pwd 命令
cd 命令
cd 来自英文:C hange Directory
cd [Linux路径]
- 没有选项,只有参数,表示目标路径
- 使用参数,切换到指定路径
- 不使用参数,切换工作目录到当前用户的 HOME
特殊路径符:
| 符号 | 含义 |
|---|---|
. |
表示当前目录,如 cd ./Desktop 表示切换到当前目录下的 Desktop 目录内,和 cd Desktop 效果一致 |
.. |
表示上一级目录,如 cd .. 即可切换到上一级目录,cd ../.. 切换到上二级的目录 |
~ |
表示 HOME 目录,如 cd ~ 即可切换到 HOME 目录或 cd ~/Desktop,切换到 HOME 内的 Desktop 目录 |
pwd 命令
pwd 来自英文:P rint W ork Directory
pwd
- 无选项,无参数,直接输入 pwd 即可
- 作用是:输出当前所在的工作目录
3.5 绝对路径和相对路径
- 绝对路径 :以根目录为起点,描述路径的一种写法,路径描述以
/开头 - 相对路径 :以当前目录为起点,描述路径的一种写法,路径描述无需以
/开头
3.6 HOME 目录
Linux 系统的命令行终端,在启动的时候,默认会加载:
- 当前登录用户的 HOME 目录作为当前工作目录,所以 ls 命令列出的是 HOME 目录的内容
- HOME 目录:每个 Linux 操作用户在 Linux 系统的个人账户目录,路径在:
/home/用户名
3.7 less 命令
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
less 操作键:
| 操作 | 功能说明 |
|---|---|
| 空白键 | 向下翻动一页 |
| pagedown | 向下翻动一页 |
| pageup | 向上翻动一页 |
/字串 |
向下搜寻「字串」的功能;n:向下查找;N:向上查找 |
?字串 |
向上搜寻「字串」的功能;n:向下查找;N:向上查找 |
q |
离开 less 这个程序 |
3.8 mkdir 命令
通过 mkdir 命令可以创建新的目录(文件夹)。mkdir 来自英文:M ake Directory
mkdir [-p] Linux路径
- 参数必填,表示 Linux 路径,即要创建的文件夹的路径,相对路径或绝对路径均可
-p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录
示例:
# 错误示例:会报错,因为上级目录 itcast 和 good 并不存在
mkdir itcast/good/666
# 正确示例:使用 -p 选项,将一整个链条都创建完成
mkdir -p itcast/good/666
cd itcast/good/666
pwd
# 输出:/home/itheima/itcast/good/666
3.9 rmdir 命令
5. rmdir:删除空目录
rmdir [OPTION]... DIRECTORY...
rmdir 只能用于删除空目录。如果目录非空,使用该命令会提示错误。
3.10 touch 命令
6. touch:创建空文件
touch [OPTION]... FILE...
touch 命令用于创建一个或多个空文件。touch test.txt 会在当前目录下创建一个名为 test.txt 的空文件。
3.11 cat 命令
cat Linux路径
- cat 同样没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用
示例:
[itheima@bogon ~]$ cat test.txt
itheima is a brand of itcast.
3.12 more 命令
more 命令同样可以查看文件内容,同 cat 不同的是:
-
cat 是直接将内容全部显示出来
-
more 支持翻页,如果文件内容过多,可以一页一页的展示
more Linux路径
-
同样没有选项,只有必填参数,参数表示:被查看的文件路径
-
按
q退出
3.13 cp 命令
cp 命令可以用于复制文件\文件夹,cp 命令来自英文单词:copy
cp [-r] 参数1 参数2
-r选项,可选,用于复制文件夹使用,表示递归- 参数1,Linux 路径,表示被复制的文件或文件夹
- 参数2,Linux 路径,表示要复制去的地方
3.14 mv 命令
mv 命令可以用于移动文件\文件夹,mv 命令来自英文单词:move
mv 参数1 参数2
- 参数1,Linux 路径,表示被移动的文件或文件夹
- 参数2,Linux 路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在
3.15 rm 命令
rm 命令可用于删除文件、文件夹,rm 命令来自英文单词:remove
rm [-r -f] 参数1 参数2 ...... 参数N
- 同 cp 命令一样,
-r选项用于删除文件夹 -f表示 force,强制删除(不会弹出提示确认信息)- 普通用户删除内容不会弹出提示,只有 root 管理员用户删除内容会有提示
- 所以一般普通用户用不到
-f选项
- 参数1、参数2、......、参数N 表示要删除的文件或文件夹路径,按照空格隔开
rm 通配符: rm 命令支持通配符 *,用来做模糊匹配:
test*,表示匹配任何以 test 开头的内容*test,表示匹配任何以 test 结尾的内容*test*,表示匹配任何包含 test 的内容
注意:
su root命令进入管理员模式,exit命令退回普通用户模式。
3.16 which 命令 / find 命令 / locate 命令
which 命令
通过 which 命令,查看所使用的一系列命令的程序文件存放在哪里。
which 要查找的命令
find 命令
在 Linux 系统中,可以通过 find 命令去搜索指定的文件。
按文件名查找:
find 起始路径 -name "被查找文件名"
# 被查找文件名,支持使用通配符 * 来做模糊查询
按文件大小查找:
find 起始路径 -size +|-n[kMG]
# +、- 表示大于和小于
# n 表示大小数字
# kMG 表示大小单位,k(小写字母)表示 kb,M 表示 MB,G 表示 GB
示例:
find / -size -10k # 查找小于 10KB 的文件
find / -size +100M # 查找大于 100MB 的文件
find / -size +1G # 查找大于 1GB 的文件
find 常用参数说明:
| 参数 | 说明 |
|---|---|
-name pattern |
按文件名查找,支持通配符 * 和 ? |
-type type |
按文件类型查找,f(普通文件)、d(目录)、l(符号链接)等 |
-size [+-]size[cwbkMG] |
按文件大小查找 |
-mtime days |
按修改时间查找,支持 + 或 - |
-user username |
按文件所有者查找 |
-group groupname |
按文件所属组查找 |
-amin n |
查找在 n 分钟内被访问过的文件 |
-atime n |
查找在 n×24 小时内被访问过的文件 |
-mmin n |
查找在 n 分钟内被修改过的文件 |
-mtime n |
查找在 n×24 小时内被修改过的文件 |
locate 命令
locate 指令可以快速定位文件路径。locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。locate 指令无需遍历整个文件系统,查询速度较快。
locate 搜索文件
特别说明: 由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用
updatedb指令创建 locate 数据库。
3.17 grep 命令
可以通过 grep 命令,从文件中通过关键字过滤文件行。
grep [-n] 关键字 文件路径
- 选项
-n,可选,表示在结果中显示匹配的行的行号 - 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用
" "将关键字包围起来 - 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口
3.18 wc 命令
可以通过 wc 命令统计文件的行数、单词数量等。
wc [-c -m -l -w] 文件路径
| 选项 | 说明 |
|---|---|
-c |
统计 bytes 数量 |
-m |
统计字符数量 |
-l |
统计行数 |
-w |
统计单词数量 |
- 参数,文件路径,被统计的文件,可作为内容输入端口
3.19 管道符 |
管道符的含义是:将管道符左边命令的结果,作为右边命令的输入。
cat test.txt | grep "关键字"
ps -ef | grep tail
3.20 echo 命令
可以使用 echo 命令在命令行内输出指定内容。
echo 输出的内容
- 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用
" "包围
3.21 head 命令
(4) head:从文件头开始查看内容
head [OPTION]... [FILE]...
head 命令从文件头开始查看内容,使用 -n 行数 可以指定查看的行数。
3.22 tail 命令
使用 tail 命令,可以查看文件尾部内容,跟踪文件的最新更改:
tail [-f -num] Linux路径
- 参数,Linux 路径,表示被跟踪的文件路径
- 选项,
-f,表示持续跟踪 - 选项,
-num,表示,查看尾部多少行,不填默认 10 行
3.23 反引号与重定向符号
反引号 `````
通过将命令用反引号(通常也称之为飘号)包围,被包围的内容,会被作为命令执行,而非普通字符。
[itheima@bogon ~]$ echo `pwd`
/home/itheima
重定向符号
-
>,将左侧命令的结果,覆盖写入到符号右侧指定的文件中 -
>>,将左侧命令的结果,追加写入到符号右侧指定的文件中echo "hello" > test.txt # 覆盖写入
echo "world" >> test.txt # 追加写入
3.24 test 命令
test EXPRESSION
# 或
[ EXPRESSION ] # 注意方括号内必须有空格
文件测试操作:
| 操作符 | 描述 | 示例 |
|---|---|---|
-e |
文件是否存在 | [ -e file.txt ] |
-f |
是普通文件 | [ -f /path/to/file ] |
-d |
是目录 | [ -d /path/to/dir ] |
-r |
可读 | [ -r file.txt ] |
-w |
可写 | [ -w file.txt ] |
-x |
可执行 | [ -x script.sh ] |
-s |
文件大小 > 0 | [ -s logfile ] |
-L |
是符号链接 | [ -L symlink ] |
3.25 sed 命令
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>以选项中指定的 script 来处理输入的文本文件-f<script文件>以选项中指定的 script 文件来处理输入的文本文件-h显示帮助-n仅显示 script 处理后的结果-V显示版本信息
动作说明:
| 动作 | 说明 |
|---|---|
a |
新增,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) |
c |
取代,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行 |
d |
删除 |
i |
插入,i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) |
p |
打印,通常 p 会与参数 sed -n 一起运行 |
s |
取代,可以直接进行取代工作,通常这个 s 的动作可以搭配正则表达式,如 1,20s/old/new/g |
3.26 vim/vi 编辑器
vim/vi 是 Linux 中最常用的文本编辑器。
三种工作模式:
- 命令模式(Command mode):命令模式下,所敲的按键编辑器都理解为命令,以命令驱动执行不同的功能。此模式下,不能自由进行文本编辑。
- 输入模式(Insert mode):也就是所谓的编辑模式、插入模式。此模式下,可以对文件内容进行自由编辑。
- 底线命令模式(Last line mode) :以
:开始,通常用于文件的保存、退出。
Vim/Vi 工作模式切换图:
进入 退出
vi filename 输入:wq
↓ ↑
┌──────────────────┐
│ 命令模式 │
└──────────────────┘
输入 i a o ↓ : ↓ 命令以回车结束运行
┌──────────┐ ┌──────────────┐
│ 输入模式 │ │ 底线命令模式 │
└──────────┘ └──────────────┘
ESC键 ↑
Vim 键盘图(vi/vim 键盘图):
完整键盘功能图(部分常用):
| 命令 | 功能 |
|---|---|
i |
插入模式(光标前插入) |
a |
在行尾附加 |
o |
在下一行插入 |
ESC |
退回命令模式 |
:w |
保存 |
:q |
退出 |
:wq |
保存并退出 |
:q! |
不保存强制退出 |
dd |
删除当前行 |
yy |
复制当前行 |
p |
粘贴 |
u |
撤销 |
gg |
文首(vim only) |
ZZ |
保存退出,ZQ 不保存退出 |
:%s/x/y/g |
全局替换 x 为 y |
CTRL-R |
重复(vim) |
CTRL-F/B |
上翻/下翻 |
3.27 关机与重启
shutdown -h now # 立该进行关机
shutdown -h 1 # "hello,1 分钟后会关机了"
shutdown -r now # 现在重新启动计算机
halt # 关机,作用和上面一样
reboot # 现在重新启动计算机
sync # 把内存的数据同步到磁盘
四、用户与权限管理
4.1 root 用户
无论是 Windows、MacOS、Linux 均采用多用户的管理模式进行权限管理。
- 在 Linux 系统中,拥有最大权限的账户名为:root(超级管理员)
- root 用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的
4.2 su 命令(Switch User)
su 命令就是用于账户切换的系统命令,其来源英文单词:Switch User
su [-] [用户名]
-符号是可选的,表示是否在切换用户后加载环境变量(建议带上)- 参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到 root
- 切换用户后,可以通过 exit 命令退回上一个用户,也可以使用快捷键:ctrl + d
- 在提示符下输入
logout即可注销用户
4.3 sudo 命令
sudo 其它命令
- 在其它命令之前,带上 sudo,即可为这一条命令临时赋予 root 授权
- 但是并不是所有的用户,都有权利使用 sudo,需要为普通用户配置 sudo 认证
配置 sudo 认证步骤:
-
切换到 root 用户,执行
visudo命令,会自动通过 vi 编辑器打开:/etc/sudoers -
在文件的最后添加:
itheima ALL=(ALL) NOPASSWD: ALL- 其中最后的 NOPASSWD:ALL 表示使用 sudo 命令,无需输入密码
-
最后通过
wq保存
4.4 用户与用户组管理
Linux 系统中可以:配置多个用户、配置多个用户组、用户可以加入多个用户组中。
Linux 中关于权限的管控级别有 2 个级别,分别是:
- 针对用户的权限控制
- 针对用户组的权限控制
以下命令需 root 用户执行:
# 创建用户组
groupadd 用户组名
# 删除用户组
groupdel 用户组名
# 创建用户
useradd [-g -d] 用户名
# -g 指定用户的组,不指定 -g,会创建同名组并自动加入
# -d 指定用户 HOME 路径,不指定,HOME 目录默认在:/home/用户名
# 删除用户
userdel [-r] 用户名
# -r,删除用户的 HOME 目录,不使用 -r,删除用户时,HOME 目录保留
# 查看用户所属组
id [用户名]
# 参数:用户名,被查看的用户,如果不提供则查看自身
# 修改用户所属组
usermod -aG 用户组 用户名 # 将指定用户加入指定用户组
4.5 getent 命令
# 查看系统中有哪些用户
getent passwd
# 格式:用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)
# 查看系统中有哪些用户组
getent group
# 格式:组名称:组认证(显示为x):组ID
4.6 权限管控信息
权限细节总共分为 10 个槽位:
-或d或l | r或- | w或- | x或- | r或- | w或- | x或- | r或- | w或- | x或-
类型 所属用户权限 所属用户组权限 其它用户权限
-表示文件d表示文件夹l表示软链接
rwx 权限说明:
| 权限 | 对文件的作用 | 对文件夹的作用 |
|---|---|---|
r |
可以查看文件内容 | 可以查看文件夹内容,如 ls 命令 |
w |
可以修改此文件 | 可以在文件夹内:创建、删除、改名等操作 |
x |
可以将文件作为程序执行 | 表示可以更改工作目录到此文件夹,即 cd 进入 |
4.7 chmod 命令
可以使用 chmod 命令,修改文件、文件夹的权限信息。
注意:只有文件、文件夹的所属用户或 root 用户可以修改。
chmod [-R] 权限 文件或文件夹
- 选项:
-R,对文件夹内的全部内容应用同样的操作
数字权限表示:
| 数字 | 权限 |
|---|---|
| 0 | 无任何权限,即 --- |
| 1 | 仅有 x 权限,即 --x |
| 2 | 仅有 w 权限,即 -w- |
| 3 | 有 w 和 x 权限,即 -wx |
| 4 | 仅有 r 权限,即 r-- |
| 5 | 有 r 和 x 权限,即 r-x |
| 6 | 有 r 和 w 权限,即 rw- |
| 7 | 有全部权限,即 rwx |
r 记为 4,w 记为 2,x 记为 1
示例: chmod 751 hello.sh 表示:所属用户 rwx,所属组 r-x,其他 --x
4.8 chown 命令
使用 chown 命令,可以修改文件、文件夹的所属用户和用户组。
普通用户无法修改所属为其它用户或组,所以此命令只适用于 root 用户执行。
chown [-R] [用户][:][用户组] 文件或文件夹
- 选项,
-R,同 chmod,对文件夹内全部内容应用相同规则 - 选项,用户,修改所属用户
- 选项,用户组,修改所属用户组
:,用于分隔用户和用户组
示例:
chown root hello.txt # 将 hello.txt 所属用户修改为 root
chown :root hello.txt # 将 hello.txt 所属用户组修改为 root
chown root:itheima hello.txt # 将 hello.txt 所属用户修改为 root,用户组修改为 itheima
chown -R root test # 将文件夹 test 的所属用户修改为 root 并对文件夹内全部内容应用同样规则
4.9 init 运行级别
init 一共分为 7 个级别,这 7 个级别所代表的含义如下:
| 级别 | 说明 |
|---|---|
| 0 | 停机或者关机(千万不能将 initdefault 设置为 0) |
| 1 | 单用户模式,只 root 用户进行维护 |
| 2 | 多用户模式,不能使用 NFS(Net File System) |
| 3 | 完全多用户模式(标准的运行级别) |
| 4 | 安全模式 |
| 5 | 图形化(即图形界面) |
| 6 | 重启(千万不要把 initdefault 设置为 6) |
命令: init [0123456] 应用案例:通过 init 来切换不同的运行级别,比如动 5-3,然后关机。
在 CentOS 7/etc/inittab 文件中进行了简化:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
# 查看当前默认 target:
systemctl get-default
# 设置默认 target:
systemctl set-default TARGET.target
示例:
[root@hspEdu01 ~]# systemctl get-default
graphical.target
[root@hspEdu01 ~]# systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
五、实用操作与技巧
5.1 快捷键
| 快捷键 | 功能 |
|---|---|
ctrl + c |
强制停止。Linux 某些程序的运行,如果想要强制停止它,可以使用快捷键 ctrl + c;命令输入错误,也可以通过快捷键 ctrl + c,退出当前输入,重新输入 |
ctrl + d |
退出或登出。可以通过快捷键 ctrl + d,退出账户的登录;或者退出某些特定程序的专属页面(如 python 交互式界面) |
ctrl + r |
搜索历史命令。输入内容去匹配历史命令;如果搜索到的内容是需要的,回车键可以直接执行,键盘左右键,可以得到此命令(不执行) |
ctrl + a |
跳到命令开头 |
ctrl + e |
跳到命令结尾 |
ctrl + 左键 |
向左跳一个单词 |
ctrl + 右键 |
向右跳一个单词 |
ctrl + l |
清屏,或通过命令 clear 得到同样效果 |
history |
查看历史输入过的命令 |
!命令前缀 |
自动执行上一次匹配前缀的命令 |
5.2 软链接(快捷方式)
在系统中创建软链接,可以将文件、文件夹链接到其它位置。类似 Windows 系统中的《快捷方式》。
ln -s 参数1 参数2
-s选项,创建软连接- 参数1:被链接的文件或文件夹
- 参数2:要链接去的目的地
5.3 日期与时区
date 命令
通过 date 命令可以在命令行中查看系统的时间。
date [-d] [+格式化字符串]
-d按照给定的字符串显示日期,一般用于日期计算- 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
格式化字符:
| 字符 | 说明 |
|---|---|
%Y |
年 |
%y |
年份后两位数字(00~99) |
%M |
月份(01~12) |
%d |
日(01~31) |
%H |
小时(00~23) |
%M |
分钟(00~59) |
%S |
秒(00~60) |
%s |
自 1970-01-01 00:00:00 UTC 到现在的秒数 |
-d 选项日期计算(支持的时间标记:year/month/day/hour/minute/second):
date -d "+1 day" +%Y%m%d # 显示后一天的日期
date -d "-1 day" +%Y%m%d # 显示前一天的日期
date -d "-1 month" +%Y%m%d # 显示上一月的日期
date -d "+1 month" +%Y%m%d # 显示下一月的日期
date -d "-1 year" +%Y%m%d # 显示前一年的日期
date -d "+1 year" +%Y%m%d # 显示下一年的日期
cal 命令
2. cal:显示日历
cal [options] [[[day] month] year]
cal:显示当前月的日历cal 年份:显示某年份的日历
修改时区
使用 root 权限,执行如下命令,修改时区为东八区时区:
rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将系统自带的 localtime 文件删除,并将 /usr/share/zoneinfo/Asia/Shanghai 文件链接为 localtime 文件即可
ntp 时间同步
可以通过 ntp 程序自动校准系统时间:
# 安装 ntp
yum -y install ntp
# 启动并设置开机自启
systemctl start ntpd
systemctl enable ntpd
# 当 ntpd 启动后会定期的帮助我们联网校准系统的时间
# 手动校准(需 root 权限)
ntpdate -u ntp.aliyun.com
5.4 IP 地址与主机名
IP 地址
每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯。
- IP 地址主要有 2 个版本,V4 版本和 V6 版本(V6 很少用)
- IPv4 版本的地址格式是:
a.b.c.d,其中 abcd 表示 0~255 的数字,如 192.168.88.101 就是一个标准的 IP 地址 127.0.0.1,这个 IP 地址用于指代本机0.0.0.0,特殊 IP 地址:可以用于指代本机;可以在端口绑定中用来确定绑定关系;在一些 IP 地址限制中,表示所有 IP 的意思
通过命令:ifconfig,查看本机的 IP 地址,如无法使用 ifconfig 命令,可以安装:yum -y install net-tools
主机名
每一台电脑除了对外联络地址(IP 地址)以外,也可以有一个名字,称之为主机名。
# 查看主机名
hostname
# 修改主机名(需 root)
hostnamectl set-hostname 主机名
5.5 域名解析(主机名映射)
可以通过主机名找到对应计算机的 IP 地址,这就是主机名映射(域名解析)。先通过系统本地的记录去查找,如找不到就联网去公开 DNS 服务器去查找。
访问 www.baidu.com 的域名解析流程图:
访问 检查 判断 是 打开网站
www.baidu.com → Windows: C:\Windows\System32\drivers\etc\hosts → ──────→ ──→
→ Linux: /etc/hosts ↓否
是否有 www.baidu.com 的 IP 地址记录 联网查询公开DNS服务器
是否有 www.baidu.com
的IP地址记录 → 判断
↓否
网站不存在
hosts 文件位置:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Linux:
/etc/hosts
Windows 清除 DNS 缓存:
ipconfig /displaydns // 显示 DNS 域名解析缓存
ipconfig /flushdns // 手动清理 dns 缓存
5.6 虚拟机配置固定 IP
为什么需要固定 IP:
- 当前虚拟机的 Linux 操作系统,其 IP 地址是通过 DHCP 服务获取的
- DHCP:动态获取 IP 地址,即每次重启设备后都会获取一次,可能导致 IP 地址频繁变更
配置固定 IP 需要 2 个大步骤:
- 在 VMware Workstation(或 Fusion)中配置 IP 地址网关和网段(IP 地址的范围)
- 在 Linux 系统中手动修改配置文件,固定 IP
在 Linux 中修改配置文件:
使用 vim 编辑 /etc/sysconfig/network-scripts/ifcfg-ens33 文件,填入如下内容:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" ← 由 dhcp 改为 static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
...
NAME="ens33"
UUID="f1ccb4a3-eecb-4f24-9cf0-97e6446f934b"
DEVICE="ens33"
ONBOOT="yes" ← 注意 ONBOOT 要设置为 yes
# 新增如下内容:
IPADDR="192.168.88.130" ← IP地址
NETMASK="255.255.255.0" ← 子网掩码固定
GATEWAY="192.168.88.2" ← 网关和 VMware 虚拟网络编辑器中设置的一致
DNS1="192.168.88.2" ← DNS1 设置为网关即可
执行 systemctl restart network 重启网卡,执行 ifconfig 即可看到 IP 地址固定了。
5.7 网络请求
ping 命令
可以通过 ping 命令,检查指定的网络服务器是否是可联通状态。
ping [-c num] ip或主机名
- 选项:
-c,检查的次数,不使用-c选项,将无限次数持续检查 - 参数:ip 或主机名,被检查的服务器的 ip 地址或主机名地址
wget 命令
wget 是非交互式的文件下载器,可以在命令行内下载网络文件。
wget [-b] url
- 选项:
-b,可选,后台下载,会将日志写入到当前工作目录的 wget-log 文件 - 参数:url,下载链接
curl 命令
curl 可以发送 http 网络请求,可用于:下载文件、获取信息等。
curl [-O] url
- 选项:
-O,用于下载文件,当 url 是下载链接时,可以使用此选项保存文件 - 参数:url,要发起请求的网络地址
示例(查询公网 IP):
[root@centos ~]# curl cip.cc
IP : 111.12.191.105
地址 : 中国 青海 西宁
运营商 : 移动
...
5.8 端口
端口,是设备与外界通讯交流的出入口。端口可以分为:物理端口和虚拟端口两类。
- 物理端口:又可称之为接口,是可见的端口,如 USB 接口、RJ45 网口、HDMI 端口等
- 虚拟端口:是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的
Linux 系统是一个超大号小区,可以支持 65535 个端口,这 6 万多个端口分为 3 类进行使用:
- 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如 SSH 服务的 22 端口,HTTPS 服务的 443 端口。非特殊需要,不要占用这个范围的端口
- 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
- 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用
查看端口占用情况:
# 安装 nmap
yum -y install nmap
# 查看指定 IP 开放的端口
nmap 被查看的IP地址
# 安装 netstat
yum -y install net-tools
# 查看指定端口的占用情况
netstat -anp | grep 端口号
netstat 选项说明:
-a:显示所有端口-n:数字形式显示网络地址和端口号-p:显示哪个进程在调用-an:按一定顺序排列输出
5.9 防火墙
防火墙示意图:
Linux 防火墙
mysql客户端 ──→ ┌──────────────────┐
│ 关闭的端口 3306 │──→ mysqld/后台程序/守护进程/服务
xshell6 ──→ │ │
│ 打开的端口 22 │──→ SSHD
└──────────────────┘
firewall 指令(打开或关闭端口):
# 打开端口
firewall-cmd --permanent --add-port=端口号/协议
# 关闭端口
firewall-cmd --permanent --remove-port=端口号/协议
# 重新载入,才能生效
firewall-cmd --reload
# 查询端口是否开放
firewall-cmd --query-port=端口号/协议
示例:
# 开放 111 端口
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --reload
# 关闭 111 端口
firewall-cmd --permanent --remove-port=111/tcp
firewall-cmd --reload
5.10 scp 文件传输命令
1. 从本地将文件传输到服务器:
scp 【本地文件的路径】 【服务器用户名】@【服务器地址】:【服务器上存放文件的路径】
# 示例:
scp /Users/mac_pc/Desktop/test.png root@192.168.1.1:/root
2. 从本地将文件夹传输到服务器:
scp -r 【本地文件的路径】 【服务器用户名】@【服务器地址】:【服务器上存放文件的路径】
# 示例:
scp -r /Users/mac_pc/Desktop/test root@192.168.1.1:/root
3. 将服务器上的文件传输到本地:
scp 【服务器用户名】@【服务器地址】:【服务器上存放文件的路径】 【本地文件的路径】
# 示例:
scp root@192.168.1.1:/data/wwwroot/default/111.png /Users/mac_pc/Desktop
4. 将服务器上的文件夹传输到本地:
scp -r 【服务器用户名】@【服务器地址】:【服务器上存放文件的路径】 【本地文件的路径】
# 示例:
scp -r root@192.168.1.1:/data/wwwroot/default/test /Users/mac_pc/Desktop
5.11 上传与下载
在 FinalShell 下方找到需要下载的文件右键点击下载即可下载到本机桌面的 fsdownload 文件夹中,将文件拖拽到 FinalShell 中想要上传的文件夹中上传,注意用户切换。
rz/sz 命令:
rz、sz 命令需要安装,可以通过:yum -y install lrzsz 即可安装。
rz命令,进行上传,语法:直接输入 rz 即可(会弹出文件选择窗口)sz命令,进行下载,语法:sz 要下载的文件- 文件会自动下载到桌面的:fsdownload 文件夹中
5.12 压缩与解压
tar 命令
Linux 和 Mac 系统常用有 2 种压缩格式:
.tar,称之为 tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装.gz,也常见为.tar.gz,gzip 格式压缩文件,使用 gzip 压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积
针对这两种格式,使用 tar 命令均可以进行压缩和解压缩的操作。
tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N
| 选项 | 说明 |
|---|---|
-c |
创建压缩文件,用于压缩模式 |
-v |
显示压缩、解压过程,用于查看进度 |
-x |
解压模式 |
-f |
要创建的文件,或要解压的文件,-f 选项必须在所有选项中位置处于最后一个 |
-z |
gzip 模式,不使用 -z 就是普通的 tarball 格式 |
-C |
选择解压的目的地,用于解压模式 |
注意:
-z选项如果使用的话,一般处于选项位第一个-f选项,必须在选项位最后一个-C选项单独使用,和解压所需的其它参数分开
常用示例:
# 压缩 a.txt b.txt c.txt 到 test.tar.gz
tar -zcvf test.tar.gz a.txt b.txt c.txt
# 压缩文件夹 test 到 test.tar.gz
tar -zcvf test.tar.gz test/
# 解压 test.tar.gz 到当前目录
tar -zxvf test.tar.gz
# 解压 test.tar.gz 到指定目录 /home/
tar -zxvf test.tar.gz -C /home/
zip/unzip 命令
# 压缩为 zip
zip [-r] 参数1 参数2 ... 参数N
# -r,被压缩的包含文件夹的时候,需要使用 -r 选项
# 示例
zip test.zip a.txt b.txt c.txt # 将 a.txt b.txt c.txt 压缩到 test.zip 文件内
zip -r test.zip test itheima a.txt # 将 test、itheima 两个文件夹和 a.txt 文件,压缩到 test.zip 文件内
# 解压 zip
unzip [-d] 参数
# -d,指定要解压去的位置,同 tar 的 -C 选项
# 示例
unzip test.zip -d /home/ # 解压 test.zip 到 /home/ 目录
六、软件安装与服务管理
6.1 RPM 包管理
rpm 用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有 .RPM 扩展名的文件。RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 Windows 的 setup.exe,这一文件格式名称虽然打上了 RedHat 的标志,但理念是通用的。
RPM 常用命令:
# 查询所有安装的 rpm 软件包
rpm -qa
rpm -qa | more
rpm -qa | grep X # 如 rpm -qa | grep firefox
# 查询软件包是否安装
rpm -q 软件包名 # 如 rpm -q firefox
# 查询软件包信息
rpm -qi 软件包名 # 如 rpm -qi firefox
# 查询软件包中的文件
rpm -ql 软件包名 # 如 rpm -ql firefox
# 查询文件所属的软件包
rpm -qf 文件全路径名 # 如 rpm -qf /etc/passwd
# 卸载 rpm 包
rpm -e RPM包的名称 # 如 rpm -e firefox
# 安装 rpm 包
rpm -ivh RPM包全路径名称
# i=install 安装, v=verbose 提示, h=hash 进度条
6.2 yum 命令
yum:RPM 包软件管理器,用于自动化安装配置 Linux 软件,并可以自动解决依赖问题。
yum [-y] [install | remove | search] 软件名称
- 选项:
-y,自动确认,无需手动确认安装或卸载过程 install:安装remove:卸载search:搜索
yum 命令需要 root 权限,可以 su 切换到 root,或使用 sudo 提权。yum 命令需要联网。
6.3 apt 命令(Ubuntu)
前面学习的各类 Linux 命令,都是通用的。但是软件安装,CentOS 系统和 Ubuntu 使用不同的包管理器:
-
CentOS :
.rpm,yum -
Ubuntu :
.deb,aptapt [-y] [install | remove | search] 软件名称
用法和 yum 一致,同样需要 root 权限
示例
apt install wget # 安装 wget
apt remove wget # 移除 wget
apt search wget # 搜索 wget
6.4 systemctl 命令
Linux 系统很多软件(内置或第三方)均支持使用 systemctl 命令控制:启动、停止、开机自启。
能够被 systemctl 管理的软件,一般也称之为:服务。
systemctl start | stop | status | enable | disable 服务名
| 操作 | 说明 |
|---|---|
start |
启动 |
stop |
关闭 |
status |
查看状态 |
enable |
开启开机自启 |
disable |
关闭开机自启 |
系统内置的服务:
NetworkManager:主网络服务network:副网络服务firewalld:防火墙服务sshd:ssh 服务(FinalShell 远程登录 Linux 使用的就是这个服务)
第三方软件也可以通过 systemctl 控制:
yum install -y ntp # 安装 ntp 软件
# 可以通过 ntpd 服务名,配合 systemctl 进行控制
yum install -y httpd # 安装 apache 服务器软件
# 可以通过 httpd 服务名,配合 systemctl 进行控制
systemctl 管理的服务在 /usr/lib/systemd/system 查看
设置服务的自启动状态:
systemctl list-unit-files [| grep 服务名] # 查看服务开机启动状态
systemctl enable 服务名 # 设置服务开机启动
systemctl disable 服务名 # 关闭服务开机启动
systemctl is-enabled 服务名 # 查询某个服务是否是自启动的
注意:
- 关闭或者启用防火墙后,立即生效(telnet 测试某个端口即可)
- 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
- 如果希望设置某个服务自启动或关闭永久生效,要使用
systemctl [enable|disable] 服务名
七、进程管理与系统监控
7.1 ps 命令
在 Linux 中,可以通过 ps 命令查看运行中的进程。
ps [-e -f]
- 选项:
-e,显示出全部的进程 - 选项:
-f,以完全格式化的形式展示信息(展示全部信息)
结合管道使用:
ps -ef | grep tail # 准确找到 tail 命令的信息
ps -aux | grep xxx # 查看某个进程,如 sshd
ps -ef 输出字段说明(BSD 风格):
| 字段 | 说明 |
|---|---|
UID |
用户 ID |
PID |
进程 ID |
PPID |
父进程 ID |
C |
CPU 用于计算执行优先级的因子(数值越大,表明进程是 CPU 密集型运算;数值越小,表明进程是 I/O 密集型运算) |
STIME |
进程启动的时间 |
TTY |
完整的终端名称 |
TIME |
CPU 时间 |
CMD |
启动进程所用的命令和参数 |
ps -aux 输出字段说明(System V 风格):
| 字段 | 说明 |
|---|---|
USER |
用户名称 |
PID |
进程号 |
%CPU |
进程占用 CPU 的百分比 |
%MEM |
进程占用物理内存的百分比 |
VSZ |
进程占用的虚拟内存大小(单位:KB) |
RSS |
进程占用的物理内存大小(单位:KB) |
TT |
终端名称,缩写 |
STAT |
进程状态:S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止 |
STARTED |
进程的启动时间 |
TIME |
CPU 时间 |
COMMAND |
启动进程所用的命令和参数,如果过长会被截断显示 |
7.2 kill 命令
kill [-9] 进程ID
-
选项:
-9,表示强制关闭进程。不使用此选项会向进程发送信号要求其关闭,但是否关闭看进程自身的处理机制通过进程名称杀死进程,也支持通配符
killall 进程名称
7.3 pstree 命令
pstree [选项] # 可以更加直观的来看进程信息
# 常用选项:
# -p:显示进程的 PID
# -u:显示进程的所属用户
7.4 top 命令(系统监控)
可以通过 top 命令查看 CPU、内存使用情况,类似 Windows 的任务管理器。
默认每 5 秒刷新 一次,语法:直接输入 top 即可,按 q 或 ctrl + c 退出。
top 输出解读:
top - 14:39:58 up 6 min, 2 users, load average: 0.06, 0.17, 0.13
-
top:命令名称 -
14:39:58:当前系统时间 -
up 6 min:启动了 6 分钟 -
2 users:2 个用户登录 -
load average: 0.06, 0.17, 0.13:1、5、15 分钟负载Tasks: 175 total, 1 running, 174 sleeping, 0 stopped, 0 zombie
175 个进程,1 个 running,174 个 sleeping,0 个停止进程,0 个僵尸进程
%Cpu(s): 0.3 us, 1.4 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
| 字段 | 说明 |
|---|---|
us |
用户 CPU 使用率 |
sy |
系统 CPU 使用率 |
ni |
高优先级进程占用 CPU 时间百分比 |
id |
空闲 CPU 率 |
wa |
IO 等待 CPU 占用率 |
hi |
CPU 硬件中断率 |
si |
CPU 软件中断率 |
st |
强制等待占用 CPU 率 |
进程列表字段:
| 字段 | 说明 |
|---|---|
PID |
进程 id |
USER |
进程所属用户 |
PR |
进程优先级,越小越高 |
NI |
负值表示高优先级,正表示低优先级 |
VIRT |
进程使用虚拟内存,单位 KB |
RES |
进程使用物理内存,单位 KB |
SHR |
进程使用共享内存,单位 KB |
S |
进程状态(S 休眠,R 运行,Z 僵死状态,N 负数优先级,I 空闲状态) |
%CPU |
进程占用 CPU 率 |
%MEM |
进程占用内存率 |
TIME+ |
进程使用 CPU 时间总计,单位 10 毫秒 |
COMMAND |
进程的命令或名称或程序文件路径 |
top 命令选项:
| 选项 | 说明 |
|---|---|
-p |
只显示某个进程的信息 |
-d |
设置刷新时间,默认是 5s |
-c |
显示产生进程的完整命令,默认是进程名 |
-n |
指定刷新次数,如 top -n 3,刷新输出 3 次后退出 |
-b |
以非交互非全屏模式运行,以批次的方式执行 top,一般配合 -n 指定输出几次统计信息,将输出重定向到指定文件,如 top -b -n 3 > /tmp/top.tmp |
-i |
不显示任何闲置(idle)或无用(zombie)的进程 |
-u |
查找特定用户启动的进程 |
top 交互式选项(运行时按键):
| 按键 | 功能 |
|---|---|
h |
显示帮助画面 |
c |
显示产生进程的完整命令 |
f |
选择需要展示的项目 |
M |
根据驻留内存大小(RES)排序 |
P |
根据 CPU 使用百分比大小排序(默认) |
T |
根据时间/累计时间排序 |
E |
切换顶部内存显示单位 |
e |
切换进程内存显示单位 |
l |
切换显示平均负载和启动时间信息 |
i |
不显示闲置或无用的进程 |
t |
切换显示 CPU 状态信息 |
m |
切换显示内存信息 |
u |
然后输入"u"回车,再输入用户名,监视特定用户 |
k |
然后输入"k"回车,再输入要结束的进程 ID 号,终止指定进程 |
7.5 磁盘状态监控
df 命令(查看磁盘使用情况):
df [-h]
# -h,以更加人性化的单位显示
iostat 命令(查看 CPU、磁盘的相关信息):
iostat [-x] [num1] [num2]
# -x,显示更多信息
# num1:数字,刷新间隔;num2:数字,刷新几次
iostat 输出字段说明:
| 字段 | 说明 |
|---|---|
rrqm/s |
每秒这个设备相关的读取请求有多少被 Merge 了 |
wrqm/s |
每秒这个设备相关的写入请求有多少被 Merge 了 |
rKB/s |
每秒发送到设备的读取请求数(重要) |
wKB/s |
每秒发送到设备的写入请求数(重要) |
await |
每一个 IO 请求的处理的平均时间(单位是微秒毫秒) |
%util |
磁盘利用率(重要) |
磁盘情况查询常用命令:
# 统计 /opt 文件夹下文件的个数
ls -l /opt | grep "^-" | wc -l
# 统计 /opt 文件夹下目录的个数
ls -l /opt | grep "^d" | wc -l
# 统计 /opt 文件夹下文件的个数,包括子文件夹里的
ls -lR /opt | grep "^-" | wc -l
# 统计 /opt 文件夹下目录的个数,包括子文件夹里的
ls -lR /opt | grep "^d" | wc -l
# 以树状显示目录结构(若没有 tree,则用 yum install tree 安装)
tree 目录
7.6 网络状态监控
sar 命令(查看网络相关统计):
sar -n DEV num1 num2
# -n,查看网络,DEV 表示查看网络接口
# num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)
sar 输出字段说明:
| 字段 | 说明 |
|---|---|
IFACE |
本地网卡接口的名称 |
rxpck/s |
每秒钟接收的数据包 |
txpck/s |
每秒钟发送的数据包 |
rxKB/S |
每秒钟接收的数据包大小,单位为 KB |
txKB/S |
每秒钟发送的数据包大小,单位为 KB |
rxcmp/s |
每秒钟接收的压缩数据包 |
txcmp/s |
每秒钟发送的压缩包 |
rxmcst/s |
每秒钟接收的多播数据包 |
7.7 环境变量
环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。
在 Linux 系统中执行:env 命令即可查看当前系统中记录的环境变量。
环境变量是一种 KeyValue 型结构,如:
HOME: /home/itheima,用户的 HOME 路径USER: itheima,当前的操作用户PWD: /home/itheima,当前工作路径
$ 符号: 在 Linux 系统中,$ 符号被用于取"变量"的值。
echo $PATH # 取 PATH 环境变量的值并输出
echo ${PATH}ABC # 和其它内容混合,通过 {} 标注取的变量是谁
PATH 的作用: PATH 记录了系统执行任何命令的搜索路径,路径之间以 : 隔开。当执行 cd 命令,就从第二个目录 /usr/bin 中搜索到了 cd 命令,并执行。
自定义环境变量:
# 临时设置(当前会话有效)
export 变量名=变量值
# 永久生效
# 针对当前用户生效,配置在当前用户的:~/.bashrc 文件中
# 针对所有用户生效,配置在系统的:/etc/profile 文件中
# 并通过语法:source 配置文件,进行立刻生效,或重新登录生效
# 删除环境变量
unset 环境变量名
常用环境变量操作:
export 变量名=变量值 # 将 shell 变量输出为环境变量/全局变量
source 配置文件 # 让修改后的配置信息立即生效
echo $变量名 # 查询环境变量的值
自定义 PATH(将自定义路径加入 PATH):
export PATH=$PATH:/新路径 # 将新路径追加到 PATH 中
八、网络配置
8.1 NAT 网络原理
NAT 网络配置图:
电脑 Windows
┌─────────────────────────────────────────┐
│ │
│ Linux虚拟机 vmnet8 │
│ 192.168.2.131 ←→ 192.168.2.1 ──→ 网关 ──→ 互联网
│ │ www.baidu.com
│ 无线网卡 │
│ 192.168.101.8 ──→ 网关 ──→
└─────────────────────────────────────────┘
8.2 DNS 域名
- Hosts 是什么:一个文本文件,用来记录 IP 和 Hostname(主机名)的映射关系
- DNS(Domain Name System):就是域名系统,翻译过来就是域名系统,是互联网上作为域名和 IP 地址相互映射的一个分布式数据库
DNS 解析流程图:
客户电脑 →(1)→ 电脑本地DNS缓存 →(2)→ hosts文件 →(3)→ 根域名服务器
↑(8) ↓(3)
本地域名服务器 ←(4)→ 顶级(二级、三级..)域名服务器 ←(5)→
↓(6)
权威域名服务器 →(7)→
Windows 清除 DNS 缓存:
ipconfig /displaydns // DNS 域名解析缓存
ipconfig /flushdns // 手动清理 dns 缓存
九、磁盘管理
9.1 磁盘分区机制
原理介绍:
- Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分。
- Linux 采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
查看所有设备挂载情况:
lsblk # 或者
lsblk -f
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sr0 11:0 1 1024M 0 rom
硬盘说明:
- Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘
- 对于 IDE 硬盘,驱动器标识符为
hdx~,其中hd表明分区所在设备的类型,x为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),~代表分区,前四个分区用数字 1 到 4 表示,从 5 开始就是逻辑分区 - 对于 SCSI 硬盘则标识为
sdx~,SCSI 硬盘是用sd来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样
9.2 增加硬盘分区并挂载
虚拟机增加硬盘步骤:
步骤2:分区命令 fdisk /dev/sdb
# 开始对 /sdb 分区
m # 显示命令列表
p # 显示磁盘分区,同 fdisk -l
n # 新增分区
d # 删除分区
w # 写入并退出
说明:开始分区后输入 n,新增分区,然后选择 p,分区类型为主分区。两次回车默认剩余全部空间。最后输入 w 写入分区并退出,若不保存退出输入 q。
步骤3:格式化磁盘
mkfs -t ext4 /dev/sdb1
# 其中 ext4 是分区类型
步骤4:挂载
mount 设备名称 挂载目录
# 例如:
mount /dev/sdb1 /newdisk
# 卸载
umount 设备名称 或者 挂载目录
# 例如:
umount /dev/sdb1 或者 umount /newdisk
步骤5:永久挂载
通过修改 /etc/fstab 实现挂载,添加完成后执行 mount -a 即刻生效:
/dev/sdb1 /newdisk ext4 defaults 0 0
UUID=12ae1cc1-09e0-42ce-b659-063df3e7c941 / ext4 defaults 1 1
UUID=df4d64bd-981e-41eb-8f13-16ac20f037le /boot ext4 defaults 1 2
UUID=494c7f94-5656-45a3-b990-008c2b0e39b7 swap swap defaults 0 0
9.3 磁盘情况查询
# 查询系统整体磁盘使用情况
df -h
# 查询指定目录的磁盘占用情况
du -h /目录
# -s 指定目录占用大小汇总
# -h 带计量单位
# -a 含文件
# --max-depth=1 子目录深度
# -c 列出明细的同时,增加汇总值
十、任务调度
10.1 crond 任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序。
-
系统工作:有些重要的工作必须周而复始地执行,如病毒扫描等
-
个别用户工作:个别用户可能希望执行某些程序,比如对 mysql 数据库的备份
crontab [选项]
| 选项 | 说明 |
|---|---|
-e |
编辑 crontab 定时任务 |
-l |
查询 crontab 任务 |
-r |
删除当前用户所有的 crontab 任务 |
快速入门:
设置任务调度文件:/etc/crontab。设置个人任务调度,执行 crontab -e 命令,接着输入任务到调度文件。
如:*/1 * * * * ls -l /etc/ > /tmp/to.txt,意思是每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt 命令。
5 个占位符的说明(参数细节说明):
| 项目 | 含义 | 范围 |
|---|---|---|
第一个 * |
一小时当中的第几分钟 | 0-59 |
第二个 * |
一天当中的第几小时 | 0-23 |
第三个 * |
一个月当中的第几天 | 1-31 |
第四个 * |
一年当中的第几月 | 1-12 |
第五个 * |
一周当中的星期几 | 0-7(0 和 7 都代表星期日) |
特殊符号说明:
| 特殊符号 | 含义 |
|---|---|
* |
代表任何时间。比如第一个 * 就代表一小时中每分钟都执行一次 |
, |
代表不连续的时间。如 0 8,12,16 * * * 命令,代表每天的 8 点 0 分,12 点 0 分,16 点 0 分都执行一次命令 |
- |
代表连续的时间范围。如 0 5 * * 1-6 命令,代表在周一到周六的凌晨 5 点 0 分执行命令 |
*/n |
代表每隔多久执行一次。如 */10 * * * * 命令,代表每隔 10 分钟就执行一遍命令 |
重启任务调度:
service crond restart
10.2 at 任务调度机制
at 命令是一次性定时计划任务,at 的守护进程 atd 会以后台模式运行,检查作业队列来运行。
- at 命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 默认情况下,atd 守护进程每 60 秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
- 在使用 at 命令的时候,一定要保证 atd 进程的启动,可以使用相关指令来查看:
ps -ef | grep atd
atd 工作原理图:
job队列
atd → ─────────
每60秒 job1
对每个 1. 指令/
作业执行 2. shell脚本
一次 job2
...
at [选项] [时间]
# Ctrl + D 结束 at 命令的输入
at 选项说明:
| 选项 | 含义 |
|---|---|
-m |
当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I |
atq 的别名 |
-d |
atrm 的别名 |
-v |
显示任务将被执行的时间 |
-c |
打印任务的内容到标准输出 |
-f <文件> |
从指定文件读入任务而不是从标准输入读入 |
-t <时间参数> |
以时间参数的形式提交要运行的任务 |
at 指定时间的方法:
- 接受在当天的 hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。例如:
04:00 - 使用 midnight(深夜)、noon(中午)、teatime(下午 4 点)等比较模糊的词语来指定时间
- 采用 12 小时计时制,即在时间后面加上 AM(上午)或 PM(下午)来说明是上午还是下午。例如:
12pm - 指定命令执行的具体日期,指定格式为 month day(月 日)或 mm/dd/yy(月/日/年)或 dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:
04:00 2021-03-1 - 使用相对计时法。指定格式为:
now + count time-units,now 就是当前时间,time-units 是时间单位(minutes/hours/days/weeks)。例如:now + 5 minutes - 直接使用 today(今天)、tomorrow(明天)来指定完成命令的时间
at 使用示例:
# 案例1:2天后的下午5点执行 /bin/ls /home
at 5pm + 2 days
at> /bin/ls /home<EOT>
# 案例2:atq 命令来查看系统中没有执行的工作任务
# 案例3:明天17点钟,输出时间到指定文件内
at 5pm tomorrow
at> date > /root/date100.log<EOT>
# 案例4:2分钟后,输出时间到指定文件内
at now + 2 minutes
at> date > /root/date200.log<EOT>
# 案例5:删除已经设置的任务
atrm 5
十一、服务管理(旧版)
11.1 服务介绍
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld、sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。
11.2 service 命令
service 服务名 [start | stop | restart | reload | status]
在 CentOS 7.0 后,很多服务不再使用 service,而是 systemctl(已在前面专门讲)。service 指令管理的服务在
/etc/init.d查看。
查看服务名:
- 方式1:使用 setup -> 系统服务 就可以看到全部
- 方式2:
/etc/init.d看到 service 指令管理的服务
11.3 服务运行级别
Linux 系统有 7 种运行级别(runlevel),常用的是级别 3 和 5:
| 运行级别 | 说明 |
|---|---|
| 0 | 系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动 |
| 1 | 单用户工作状态,root 权限,用于系统维护,禁止远程登陆 |
| 2 | 多用户状态(没有 NFS),不支持网络 |
| 3 | 完全的多用户状态(有 NFS),无界面,登陆后进入控制台命令行模式 |
| 4 | 系统未使用,保留 |
| 5 | X11 控制台,登陆后进入图形 GUI 模式 |
| 6 | 系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动 |
开机的流程说明:
开机 → BIOS → /boot → systemd进程1 → 运行级别 → 运行级对应的服务
11.4 chkconfig 命令
通过 chkconfig 命令可以给服务的各个运行级别设置自启动/关闭。
-
chkconfig 指令管理的服务在
/etc/init.d查看 -
注意:Centos 7.0 后,很多服务使用 systemctl 管理
查看服务
chkconfig --list [| grep xxx]
chkconfig 服务名 --list设置某个运行级别开关
chkconfig --level 5 服务名 on/off
案例:对 network 服务进行各种操作,把 network 在 3 运行级别,关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on
使用细节: chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 生效。
十二、Shell 脚本编程
12.1 Shell 脚本介绍
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。
Shell 架构图:
┌─────────────────────────┐
│ 外层应用程序 │
│ ┌───────────────────┐ │
│ │ Shell(命令解释器)│ │
│ │ ┌─────────────┐ │ │
│ │ │ 内核 │ │ │
│ │ │ ┌───────┐ │ │ │
│ │ │ │ 硬件 │ │ │ │
│ │ │ └───────┘ │ │ │
│ │ └─────────────┘ │ │
│ └───────────────────┘ │
└─────────────────────────┘
脚本格式要求:
- 脚本以
#!/bin/bash开头 - 脚本需要有可执行权限
编写第一个 Shell 脚本: 需求说明:创建一个 Shell 脚本,输出 hello world!
脚本的常用执行方式:
-
方式1 (输入脚本的绝对路径或相对路径):首先要赋予 helloworld.sh 脚本的
+x权限,再执行脚本 -
方式2 (
sh + 脚本):不用赋予脚本+x权限,直接执行即可#!/bin/bash
echo "hello world!"
12.2 Shell 变量
Shell 变量介绍:
- Linux Shell 中的变量分为,系统变量和用户自定义变量
- 系统变量:
$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME - 显示当前 shell 中所有变量:
set
shell 变量的定义:
# 定义变量:变量=值(注意:等号两侧不能有空格)
A=100
# 撤销变量:unset 变量
unset A
# 声明静态变量:readonly 变量,注意:不能 unset
readonly B=2
定义变量的规则:
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
将命令的返回值赋给变量:
A=`date` # 反引号,运行里面的命令,并把结果返回给变量 A
A=$(date) # 等价于反引号
示例代码:
#!/bin/bash
# 案例1:定义变量 A
A=100
# 输出变量需要加上 $
echo A=$A
echo "A=$A"
# 案例2:撤销变量 A
unset A
echo "A=$A"
# 案例3:声明静态的变量 B=2,不能 unset
readonly B=2
echo "B=$B"
unset B # 会报错
12.3 设置环境变量
export 变量名=变量值 # 将 shell 变量输出为环境变量/全局变量
source 配置文件 # 让修改后的配置信息立即生效
echo $变量名 # 查询环境变量的值
快速入门:
- 在
/etc/profile文件中定义TOMCAT_HOME环境变量 - 查看环境变量
TOMCAT_HOME的值 - 在另外一个 shell 程序中使用
TOMCAT_HOME
注意: 在输出
TOMCAT_HOME环境变量前,需要让其生效:source /etc/profile
12.4 位置参数变量
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
比如:./myshell.sh 100 200,这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息。
$n # n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10}
$* # 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体
$@ # 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待
$# # 这个变量代表命令行中所有参数的个数
12.5 预定义变量
就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用。
$$ # 当前进程的进程号(PID)
$! # 后台运行的最后一个进程的进程号(PID)
$? # 最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了
12.6 运算符
# 语法
"$((运算式))" 或 "$[运算式]" 或者 expr m + n
# 注意 expr 运算符间要有空格,如果希望将 expr 的结果赋给某个变量,使用反引号
expr m - n
expr \*, /, % # 乘,除,取余
# 案例1:计算(2+3)×4 的值
# 方式一
RES1=$(((2+3)*4))
echo "res1=$RES1"
# 方式二(推荐使用)
RES2=$[(2+3)*4]
echo "res2=$RES2"
# 方式三(使用 expr)
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res4=$RES4"
# 案例2:请求出命令行的两个参数[整数]的和 20 50
SUM=$[$1+$2]
echo "sum=$SUM"
12.7 条件判断
# 基本语法
[ condition ] # 注意 condition 前后要有空格
# 非空返回 true,可使用 $? 验证(0 为 true,>1 为 false)
# 应用实例
[ hspEdu ] # 返回 true
[ ] # 返回 false
[ condition ] && echo OK || echo notok # 条件满足,执行后面的语句
常用判断条件:
1) 字符串比较: =
2) 两个整数的比较:
| 操作符 | 说明 |
|---|---|
-lt |
小于(less than) |
-le |
小于等于(little equal) |
-eq |
等于 |
-gt |
大于 |
-ge |
大于等于 |
-ne |
不等于 |
3) 按照文件权限进行判断:
-r:有读的权限-w:有写的权限-x:有执行的权限
4) 按照文件类型进行判断:
-f:文件存在并且是一个常规的文件-e:文件存在-d:文件存在并是一个目录
if 判断语法:
# 基本语法1
if [ 条件判断式 ]
then
代码
fi
# 基本语法2(多分支)
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
# 注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格
示例:
#!/bin/bash
# 案例1:"ok" 是否等于 "ok"(使用 =)
if [ "ok" = "ok" ]
then
echo "equal"
fi
# 案例2:23 是否大于等于 22(使用 -ge)
if [ 23 -ge 22 ]
then
echo "大于"
fi
# 案例3:/root/shcode/aaa.txt 目录中的文件是否存在(使用 -f)
if [ -f /root/shcode/aaa.txt ]
then
echo "存在"
fi
12.8 case 语句
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
示例:
#!/bin/bash
# 案例1:当命令行参数是 1 时,输出"周一", 是 2 时,就输出"周二",其它情况输出 "other"
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other..."
;;
esac
12.9 for 循环
# 基本语法1
for 变量 in 值1 值2 值3...
do
程序
done
# 基本语法2
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
$* 和 $@ 的区别:
#!/bin/bash
# 案例1:打印命令行输入的参数(这里可以看出 $* 和 $@ 的区别)
# 注意 $* 是把输入的参数,当做一个整体,所以,只会输出一句
for i in "$*"
do
echo "num is $i"
done
# 使用 $@ 来获取输入的参数,注意,这时是分别对待,所以有几个参数,就输出几句
echo "======================================"
for j in "$@"
do
echo "num is $j"
done
运行示例:
./testFor1.sh 100 200 300
num is 100 200 300
======================================
num is 100
num is 200
num is 300
案例:从1加到100:
#!/bin/bash
# 案例1:从 1 加到 100 的值输出显示
SUM=0
for (( i=1; i<=$1; i++ ))
do
SUM=$[$SUM+$i]
done
echo "总和 SUM=$SUM"
12.10 while 循环
# 基本语法
while [ 条件判断式 ]
do
程序
done
示例:
#!/bin/bash
# 案例1:从命令行输入一个数 n,统计从 1+..+ n 的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
# i 自增
i=$[$i+1]
done
echo "执行结果=$SUM"
12.11 read 读取控制台输入
read (选项)(参数)
# 选项:
# -p:指定读取值时的提示符
# -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
# 参数:变量:指定读取值的变量名
示例:
#!/bin/bash
# 案例1:读取控制台输入一个 NUM1 值
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
# 案例2:读取控制台输入一个 NUM2 值,在 10 秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"
12.12 函数
shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。
系统函数
basename 基本语法:
basename [pathname] [suffix]
basename [string] [suffix]
# 功能:basename 命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来
# suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉
# 案例1:请返回 /home/aaa/test.txt 的 "test.txt" 部分
basename /home/aaa/test.txt
# 输出:test.txt
dirname 基本语法:
dirname 文件绝对路径
# 功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
# 案例1:请返回 /home/aaa/test.txt 的 /home/aaa
dirname /home/aaa/test.txt
# 输出:/home/aaa
自定义函数
# 基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
# 调用直接写函数名:funname [值]
示例:
#!/bin/bash
# 案例1:计算输入两个参数的和(动态的获取),getSum
# 定义函数 getSum
function getSum() {
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
# 调用自定义函数
getSum $n1 $n2