云计算运维入门3
云计算运维入门3
一、命令解释器-shell
1.概述-type
- 概念
Shell 就是操作系统的外壳程序,是用户和内核之间的桥梁。
内核(Kernel):操作系统核心,管理硬件(CPU、内存、硬盘),普通人不能直接操作
Shell:接收你输入的命令,翻译给内核执行,再把结果返回给你
简单一句话:内核干活,Shell 传话
- 层级关系
用户 → Shell(命令解释器) → 系统内核 → 计算机硬件

- Shell脚本
把一堆命令写到文件里,批量自动执行,这个文件就叫 Shell 脚本(.sh)。
用来自动化运维、批量处理文件、部署服务,是运维必备技能
-
内、外置命令
- 内置命令:命令直接集成在 Shell 程序本身(bash) 里面,随 Shell 一起启动
- 外置命令:是独立的可执行文件,存放在磁盘目录(/bin、/usr/bin)里
-
type命令
作用:查看命令是内置命令、外置命名、alias命令
格式:type -参数 命令名
参数:type -a 列出当前命令可以如何执行
type -t 仅列出命令按照哪种方式执行
举例:

- 执行原理
- 系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中,使得shell知道命令的可执行文件位置
- PATH环境变量:当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件,如果有则执行该二进制文件,如果没有则提示命令找不到

- 修改生效的方法
输入命令:vim .bash_profile进入下图,在PATH=$PATH后用:+路径的方式新增路径,或者在其下用相同格式另加一行新增路径,保存并退出

命令source .bash_profile就可以让新增路径生效(叠加);退出重登也可以生效(shell重建)

2.Linux中的特殊符号
| 特殊符号 | 功能 | 说明 |
|---|---|---|
| ; | 可使用分号分隔多条命令 | 在一行上输入和执行多条较短的命令,可使用分号来分隔命令 |
| * | 匹配任意零个或者多个字符 | 不能用于创建文件 |
| ? | 匹配任意单个字符 | 不能用于创建文件 |
| [] | 匹配方括号中的任意一个字符,表示范围可以用"-” | 不能用于创建文件 |
| [^]或者[!] | 匹配方括号中的任意一个字符或数字后进行取反 | 用于查找和删除文件,不用于创建文件 |
| {string,string} | 匹配括号中的任意一个字符串,表示一个范围时,字符串之间个"…" | 可用于创建、查看、删除文件 |
| \ | 使\后面的特殊字符失效 | 例如:可以在命令行后面加一个\,再按回车键时并不表示执行该命令,而是表示换行,通过此方式将一个较长的命令分成多行表达,增强命令的可读性。换行后系统自动显示提示符> |
| ` | 反引号,一般用于引用命令,执行的时候反引号里面的命令会被执行,与$()作用相同 | |
| ’ | 单引号,将单引号内的所有内容都原样输出 | 所有特殊字符在单引号里面都会失去特殊含义 |
| " | 双引号,除了几个特殊字符外,将双引号内的几乎所有内容都原样输出 | ”$“和“\”以及“ ` ”在双引号里面仍然保留自己的特殊含义 |
3.命令别名-alias
- 作用
别名:命令的快捷方式,对于需要经常执行,且要很长时间输入的长命令很有用
- 格式
alias 别名='原命令 - 参数'
- 查看设置的别名

- 新增常用别名

- 删除别名
格式:
unalias 别名
举例:

- 注意
在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则这些alias将无法使用。
- 在linux中提供alias永久化的方法
将别名命令写入到~/.bashrc和/etc/bashrc文件中
vim .bashrc

source .bashrc刷新环境配置文件,重启依旧生效

4.命令历史
- 作用
history命令可以查阅命令历史记录
- 格式
history -参数
!number 执行第number条命令
- 参数
number:显示最近number条命令历史
-c:清空当前历史命令
- 举例

- 设置history记录命令条数
[root@server ~]# vim /etc/profile
# 定位并修改:HISTSIZE=1000
#退出后重启:reboot

二、账户和组管理
1.账户和工作组的分类
-
用户分为三类:
-
超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。
-
系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录。
-
普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类
-

-
工作组分成两类:
- 基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
- 扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利
-
账户和工作组的配置文件
账户名、密码、工作组信息和工作组密码存储在以下配置文件中
| 文件功能 | 文件名称 |
|---|---|
| 用户账号文件 | /etc/passwd |
| 用户密码文件 | /etc/shadow |
| 工作组账号文件 | /etc/group |
| 工作组密码文件 | /etc/gshadow |
(1)用户账号文件
/etc/passwd 是一个文本文件,用于定义系统的账号,由于所有账户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令
chattr:修改Linux文件/目录的扩展隐藏属性,控制文件能不能删、能不能改、能不能覆盖root也会被限制,用来防误删、防篡改、防病毒
lsattr 文件名:查看属性配套命令
chattr修改的权限连root也无法越过,甚至使用ll、stat等命令也无法发现异常,只能用对应的lsattr命令可以查看隐藏权限

/etc/passwd文件中字段说明
由7个字段组成,字段之间用“:”分隔,意义:账号名:密码:UID:GID:个人资料:主目录:Shell
**账号名:**用户登录Linux系统时使用的名称。
**密码:**以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护。
**UID:**账户的ID值,是一个数字标识,相当于账户的“身份证编号”,具有唯一性
root账户UID——0
系统账户的UID——1~999
普通账户的UID——≥1000
注意:普通账户从1000开始编号,连续编号,即使系统管理员某些账户号码未使用,普通账户也不可使用
**GID:**基本组的ID值,用来区分不同的工作组,相同的组具有相同的GID。
**个人资料:**注释信息,可以记录账户的完整姓名、地址、办公室电话、家庭电话等个人信息。
**家目录:**类似Windows 的个人目录,通常是/home/账户名
**Shell:**定义用户登录后激活的Shell,默认是Bash Shell

修改shell文件

(2)用户密码文件
/etc/shadow存储密码加密后的密文,又称为“影子文件”,该文件为了保证账户密码的安全性,只有 root 账户拥有读权限,注意:若该文件权限发生变化,需要留心恶意攻击
/etc/shadow文件中的每行9个字段的含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

(3)工作组账号文件
/etc/group文件存储每个组工作组信息
/etc/group文件中的字段含义
组名:组的加密口令:组ID:附加组账户名

2.用户管理
(1)添加新用户
格式
useradd -参数 账户名
参数
-c 注释信息:设置相关的说明信息,如,:真实姓名、邮箱地址等。
-d:目录:设定账户的家目录(默认为/home/用户名)。
-e YYYY-MM-DD:设置用户的失效日期,此日期后将不能使用该账号。
-f 天数:指定密码到期后多少天账号被禁用,若指定为0,则表示账号到期后被立即禁用;若指定 为-1,则表示账号过期后不被禁用(即密码永不过期)。
-g 组名或GID号:为账户指定所属的基本组,该组在指定时必须已存在。
-G:组名或GID号列表:为账户指定所属的扩展组,各组在指定时已存在,附加组可以有多个,组之间用“,”分隔。
-M:不创建账户家目录。
-N:不创建与账户名同名的基本组。
-p:密码:指定账户的登录密码。
-s shell名:指定账户登录后使用的Shell,默认是bash。
-u 用户号:设置账号的UID,默认是已有账户的最大UID加1。如果同时有-o选项,则可以重复使用其他用户的标识号。
示例
例1:新建账户test1,查看对应配置文件和家目录

例2:新建账户test2,指定UID为2001、登录Shell为/bin/bash,账号永不过期
[root@server ~]# useradd -u 2001 -s /bin/bash -e -1 test2
例3:新建用于访问FTP的test3账户,禁止其登录且不创建家目录
[root@server ~]# useradd -M -s /sbin/nologin test3
例4:新建账户test4,UID=3001, 工作组=test1 , 家目录=/test
[root@server ~]# useradd test4 -u 3001 -g test1 -d /test
例5:
[root@server1 ~]# useradd -g demo test 创建用户test,将其初始组设为demo
[root@server1 ~]# useradd -G demo user1 将demo用户设为新增用户user1的附加组

(2)修改账户信息
格式
usermod -参数 账户名
参数
常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同
-l:新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用
-L:锁定(暂停)用户账户,使其不能登录使用
-U:解锁用户账户
示例
例1:将用户test1的名称修改为TEST1

- 例2:将上例账户test4的家目录移至/home/test4目录下
[root@server ~]# ls /home
[root@server ~]# mkdir /home/test4
[root@server ~]# usermod test4 -d /home/test4
[root@server ~]# tail -1 /etc/passwd
test4:x:3001:1001::/home/test4:/bin/bash
(3)账号设置密码
原则
Linux的账户必须设置密码后,才能登录系统
格式
passwd - 参数 账户名
参数
-d:清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。
-e:使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。
-i:口令过期后多少天停用账户。
-l:锁定(停用)用户账户。
-n:指定口令的最短存活期。
-x:指定密码的最长使用期限。
-u:解锁用户账户。
示例
例3:锁定账户wxh,尝试登录

注意
密码不能为空
密码不要写成回文
可以使用以下命令设置密码
echo 密码 | passwd --stdin 用户名
echo 密码 | passwd --stdin 用户名 > /dev/null # 无信息提示
只有 root 用户才能指定用户名
[root@server ~]# useradd test5
[root@server ~]# passwd test5
更改用户 test5 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# su test5
[test5@server root]$ passwd test5
passwd:只有 root 户才能指定用户名。
(4)删除账号
格式
userdel 账户名
参数
-r:在删除该账户的同时,一并删除该账户对应的家目录
示例
例1:删除账户SL

例2:删除出错
[root@server ~]# userdel -r test2
userdel: user test2 is currently used by process 33647
# 上述问题在于使用su登录了账户,可以通过ctrl+d多次退出再次尝试
[root@server ~]# userdel -r test2
(5)账户切换
格式
su 账户名
su和su - 命令区别
区别:加载的配置文件不一样
su切换方式加载的文件:~/.bashrc,/etc/bashrc
su -切换方式加载的文件:/etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
注意:su - 相当于重新建立环境,若全局变量需要继续使用则不能使用su - 命令
使用logout退出,否则环境变量可能会出问题
注意
从root用户切换到任何用户不需要密码验证,而从普通用户到root或其他普通用户均需要输入目标用户的密码且验证成功后才可切换。
(6)控制用户对系统命令的使用权限
作用
使用visudo命令可以提高普通用户的操作权限,使用前需要root进行配置
配置/etc/sudoers文件方式
执行visudo 或 vim /etc/sudoers
[root@server ~]# visudo
root ALL=(ALL) ALL
# 账户名 允许使用的主机=(以谁的身份) 可执行的命令列表
#说明:ALL是关键字,代表任何身份、主机或命令。
# 需要wq!强制保存退出

sudo的执行流程如下:
当执行sudo提权时,需要输入自己密码来确认(root执行sudo时不需要输入密码)
若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限
若用户具有执行sudo的权限,便开始sudo后续接的命令;

3.工作组管理
(1)创建工作组
格式
groupadd -参数 工作组名
参数
-g GID:指定新工作组的GID,默认值是已有的最大的GID加1
-r: 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID
示例
例1:创建一个名叫 demo 的用户组,并且指定该组的 GID = 2000
[root@server1 ~]# groupadd -g 2000 demo

(2)修改工作组
格式
groupmod -参数 工作组名
参数
-g GID——为用户组指定新的组标识号
-n 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值
示例
例:将组demo的GID修改为3000
[root@server ~]# groupmod -g 3000 demo
[root@server ~]# tail -1 /etc/group
demo:x:3000:

(3)添加/删除组成员
格式
gpasswd -参数 账户 工作组
参数
-r : 删除组密码
-a : 把用户加入组
-d : 把用户从组中删除。
-M : 可同时添加多个用户
-A : 给组指派管理员。
示例
例:新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员
[root@server ~]# gpasswd -a temp1 group2
正在将用户“temp1”加入到“group2”组中
[root@server ~]# gpasswd -a temp2 group2
正在将用户“temp2”加入到“group2”组中
[root@server ~]# gpasswd -A temp1 group2
注意
只有root用户和组管理员才能够使用该命令
(4)删除工作组
格式
groupdel 工作组名
示例
例1:删除组demo,被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组
[root@server1 ~]# groupdel demo

4.查看用户登录系统的情况
(1)users命令
作用
- 查看当前登录系统的用户
例
[root@server ~]# users
root

(2)last命令
作用
- 列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的登入系统的用户名单全部显示出来
例1:
[root@server ~]# last

例2:扫尾工作
[root@server1 ~]# echo > /var/log/wtmp

(3)lastlog命令
作用
- 查看每个账号的最近登录时间,该命令会读取/var/log/lastlog文件
例
[root@server ~]# lastlog

(4)w命令
作用
- 显示登录到系统的用户信息
例
[root@server ~]# w

结果分析
- 第一行显示当前的系统时间、开机多久、登录到系统中的用户数和系统平均负载(平均负载是指在1分钟、5分钟、15分钟内系统负载情况)
- 第二行只是各个项目的说明
- USER:表示登录系统的用户
- TTY:表示用户使用的TTY名称
- FROM:表示用户从哪里登录进来
- LOGIN@:用户登录的日期和时间
- idle:表示空闲时间
- JCPU:在某段时间内所有与该终端相关的进程任务所耗费的cpu时间
- PCPU:当前活动进程使用的系统时间
- WHAT:表示当前用户执行的进程名称和选项
- 第三行以后,每行代表一个用户登录的信息。
(5)who命令
作用
- 显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息
例
[root@server ~]# who
[root@server ~]# who -s
[root@server ~]# who -a

结果分析
| who命令的输出格式 | 名称 | 状态 | 终端 | 时间 | 活动 | 进程标识 | 主机名 |
|---|---|---|---|---|---|---|---|
| 说明 | 用户的登录名 | 表明终端是否对用户都是可写的 | 类似于pts/1、pts/2等 | 用户登录系统的时间 | 某个用户在自己的终端上最后一次活动发生以来到现在的时间,如果是".",表示一分钟内的终端活动 | 用户登录shell的进程id | 登录到linux系统上的客户端机器标识 |
[root@server ~]# who -b 列出系统最近启动的日期
system boot 2026-06-30 08:11
[root@server ~]# who -m 列出关于当前终端的信息
root pts/0 2026-06-30 08:15 (192.168.117.1)
[root@server ~]# who am i
root pts/0 2026-06-30 08:15 (192.168.117.1)
[root@server ~]# who am I
root pts/0 2026-06-30 08:15 (192.168.117.1)
[root@server ~]# who -q 列出在本地系统上的用户和用户数的清单
root
# users=1
[root@server ~]# who -r 显示当前系统的运行级别
run-level 3 2026-06-30 08:11
[root@server ~]# who -u 显示当前每个用户的用户名、登录终端、登录时间、终端活动、进程和主机名
root pts/0 2026-06-30 08:15 . 1421 (192.168.117.1)
[root@nserver ~]# who -T 显示tty终端的状态,“+”表示对任何人可写,“-”表示仅对root用户或所有者可写,“?”表示遇到终端故障
root + pts/0 2026-06-30 08:15 (192.168.117.1)
[root@server ~]# who -w 和-T一样
root + pts/0 2026-06-30 08:15 (192.168.117.1)
三、Linux文件系统权限
1.文件的一般权限
(1)文件详细信息
- 使用命令ll或ls -l 查看
- 结果分析:

(2)文件权限构成
-
权限针对三类对象定义
-
owner:所有者,缩写u
-
group :所属组,缩写g
-
other :其他人,缩写o
-
-
访问者三种权限


- 文件与目录权限含义
| 权限 | 对文件的影响 | 对目录的影响 |
|---|---|---|
| r(read) | 可以读取文件的内容 | 可以列出目录的内容,即目录下的文件的文件名 |
| w(write) | 可以更改文件的内容 | 可以创建或者删除目录中的任一文件(只有w权限无法创建删除文件,需要和x权限一起使用) |
| x(execute) | 可以作为可执行文件,如脚本 | 可以切换到目录,如cd命令 |
| 文件可能出现的权限 | 目录可能出现的权限 |
|---|---|
| —、r–、r-x、rw-、rwx | —、r-x、rwx |
- 注意
root账户不受文件权限的读写限制,执行权限受限制
- 示例
例1:写出下列文件的字符权限
764 : rwxrw-r–
642: rw-r—w-
153: --xr-x-wx
731: rwx-wx–x
例2:写出下列文件的数字权限
r-xrw-r-- : 564
rw–w–wx : 623
rw-r–r-- : 644
(3)chmod命令
- 作用
chmod(change mode):修改文件或目录的权限
- 格式
# 格式1
chmod [选项] [ugoa][+-=][rwx] 文件或目录...
# 格式2
chmod [选项] nnn 文件或目录...`
-
参数
-
-R:递归修改指定目录下所有文件、子目录的权限
-
ugoa:表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)
-
+或-或=:表示设置权限的操作动作,+代表添加;-代表取消;=表示只赋予给定的权限,并取消原有的权限。
-
rwx:用字符形式表示的所设置的权限,可以是其中一个字母或组合
-
nnn:用数字表示的权限
-
-
示例
例1
[root@server ~]# touch t1.txt
[root@server ~]# ll t1.txt
-rw-r--r--. 1 root root 0 5月 6 17:29 t1.txt
[root@server ~]# chmod +x t1.txt
[root@server ~]# ll t1.txt
-rwxr-xr-x. 1 root root 0 5月 6 17:29 t1.txt
[root@server ~]# chmod o+w t1.txt
[root@server ~]# ll t1.txt
-rwxr-xrwx. 1 root root 0 5月 6 17:29 t1.txt

例2
[root@server ~]# chmod 777 t1.txt
[root@server ~]# ll t1.txt
-rwxrwxrwx. 1 root root 0 5月 6 17:27 t1.txt
[root@server ~]# chmod 000 t1.txt
----------. 1 root root 0 5月 6 17:27 t1.txt

例3
[root@server ~]# mkdir -p m1/m2/m3
[root@server ~]# touch m1/m2/m3/t3.txt
[root@server ~]# cd m1
[root@server m1]# tree
[root@server m1]# cd ..
[root@server ~]# ls -ld m1
[root@server ~]# cd m1
[root@server m1]# ls -ld m2
[root@server m1]# cd m2
[root@server m2]# ls -ld m3
[root@server m2]# cd m3
[root@server m3]# ll t3.txt
[root@server1 m3]# cd
[root@server ~]# chmod -R 755 m1 # 递归设置
[root@server ~]# ll m1
[root@server ~]# cd m1
[root@server m1]# ll m2
[root@server m1]# cd m2
[root@server m2]# ll m3

(4)chown命令
- 作用
修改文件或目录的所有者和属组
- 格式
修改文件或目录的所属者
chown -参数 所有者:所属组 文件名或目录名
# 参数-R递归设置
- 示例
[root@server ~]# touch t4.txt
[root@server ~]# ll t4.txt
[root@server ~]# chown fox:fox t4.txt
[root@server ~]# ll t4.txt

2.特殊权限
(1)概述
-
在Linux系统中,用户对文件或目录的访问权限除了r、w、x三种一般权限外,还有SET UID(SUID)、SET GID(SGID)、Sticky Bit(粘滞位)三种特殊权限,用于对文件或目录进行更加灵活方便的访问控制
-
SUID 权限的含义:是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该程序文件所属者的权限
(2)SUID权限
-
使用场景
-
例如:student用户要更改自己的密码
-
student 在执行 passwd 修改自己的密码时, 其修改的密码, 最终是需要保存到 /etc/shadow 这个文件中, 而这个文件的权限是
---------,它的拥有者是 root ,也只有 root 可以“ 强制” 存储, 其他用户连看都不行 -
可偏偏 student 去执行 passwd (/usr/bin/passwd) ,却可以更新自己的密码
-
这就是因为有 s 权限的存在,当 s权限在拥有者的权限位上时, 即如
-rwsr-xr-x这样时, 称为SUID。SUID 即 Set UID , UID 指的是拥有者的的 ID, 而这个程序 (/usr/bin/passwd) 的拥有者为(root) 。
-
[root@server ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 32648 8月 10 2021 /usr/bin/passwd


-
注意:
-
suid仅对二进制文件有效
-
在执行过程中,调用者会暂时获得该文件的所有者权限
-
该权限只在程序执行的过程中有效
-
(3)SGID权限
-
SGID 可以用在两个方面:
-
文件: 如果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将会变成该程序文件的所属组。
-
目录:如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A 目录的所属组
-
-
注意
- 一般SGID 多用在特定的多人团队的项目开发上,在系统中用的很少
-
权限用数字**
2**来表示
[root@server1 ~]# chmod 2777 dir1/

- 例:查看有无**
s**权限时普通用户在组中的权限
[root@server1 ~]# ll -d dir1 #dir1目录有s权限
drwxrwsrwx 2 root root 6 Jun 30 13:14 dir1
[root@server1 ~]# chown -R root.wxh dir1/ #将dir1的所属组改为wxh
[root@server1 ~]# ll -d dir1 #查看所属组权限
drwxrwsrwx 2 root wxh 6 Jun 30 13:14 dir1
[root@server1 ~]# cd dir1/
[root@server1 dir1]# ll
total 0
-rw-r--r-- 1 root wxh 0 Jun 30 13:44 file1
创建用户1、2,加入附加组wxh
[root@server1 dir1]# cd
[root@server1 ~]# useradd user1
[root@server1 ~]# useradd user2
[root@server1 ~]# usermod -G wxh user1
[root@server1 ~]# usermod -G wxh user2
[root@server1 mnt]# id user1
uid=1004(user1) gid=1006(user1) groups=1006(user1),1000(wxh)
[root@server1 mnt]# id user2
uid=1005(user2) gid=1007(user2) groups=1007(user2),1000(wxh)
other无法进入根目录,将dir1目录移入mnt目录下,mnt目录普通用户可以查看和执行
[root@server1 ~]# pwd
/root
[root@server1 ~]# ll -d /root/
dr-xr-x---. 9 root root 4096 Jun 30 13:14 /root/
[root@server1 ~]# mv dir1/ /mnt/
[root@server1 ~]# ll -d /mnt/
drwxr-xr-x. 3 root root 18 Jun 30 13:47 /mnt/
[root@server1 ~]# cd /mnt/
[root@server1 mnt]# ll
total 0
drwxrwsrwx 2 root wxh 19 Jun 30 13:44 dir1
修改dir1目录的权限,并去掉s权限
[root@server1 mnt]# chmod 770 dir1/
[root@server1 mnt]# ll
total 0
drwxrws--- 2 root wxh 19 Jun 30 13:44 dir1
[root@server1 mnt]# chmod g-s dir1/
[root@server1 mnt]# ll
total 0
drwxrwx--- 2 root wxh 19 Jun 30 13:44 dir1
切换普通用户创建文件查看所属组和权限
[root@server1 mnt]# su - user1
[user1@server1 ~]$ cd
[user1@server1 ~]$ cd /mnt/dir1
[user1@server1 dir1]$ ll
total 0
-rw-r--r-- 1 root wxh 0 Jun 30 13:44 file1
[user1@server1 dir1]$ touch user1file
[user1@server1 dir1]$ ll
total 0
-rw-r--r-- 1 root wxh 0 Jun 30 13:44 file1
-rw-rw-r-- 1 user1 user1 0 Jun 30 13:59 user1file
[user1@server1 dir1]$ logout
[root@server1 mnt]# su - user2
[user2@server1 ~]$ cd /mnt/dir1/
[user2@server1 dir1]$ touch user2file
[user2@server1 dir1]$ ll
total 0
-rw-r--r-- 1 root wxh 0 Jun 30 13:44 file1
-rw-rw-r-- 1 user1 user1 0 Jun 30 13:59 user1file
-rw-rw-r-- 1 user2 user2 0 Jun 30 14:01 user2file
[user2@server1 dir1]$ logout
加入s权限
[root@server1 mnt]# chmod g+s dir1/
[root@server1 mnt]# ll
total 0
drwxrws--- 2 root wxh 53 Jun 30 14:01 dir1
再次切换普通用户创建文件查看所属组和权限
[root@server1 mnt]# su - user1
Last login: Tue Jun 30 13:58:12 CST 2026 on pts/0
[user1@server1 ~]$ cd /mnt/dir1/
[user1@server1 dir1]$ touch file2
[user1@server1 dir1]$ ll
total 0
-rw-r--r-- 1 root wxh 0 Jun 30 13:44 file1
-rw-rw-r-- 1 user1 wxh 0 Jun 30 14:03 file2
-rw-rw-r-- 1 user1 user1 0 Jun 30 13:59 user1file
-rw-rw-r-- 1 user2 user2 0 Jun 30 14:01 user2file
[user1@server1 dir1]$ logout
[root@server1 mnt]# su - user2
Last login: Tue Jun 30 14:00:02 CST 2026 on pts/0
[user2@server1 ~]$ cd /mnt/dir1/
[user2@server1 dir1]$ touch file3
[user2@server1 dir1]$ ll
total 0
-rw-r--r-- 1 root wxh 0 Jun 30 13:44 file1
-rw-rw-r-- 1 user1 wxh 0 Jun 30 14:03 file2
-rw-rw-r-- 1 user2 wxh 0 Jun 30 14:05 file3
-rw-rw-r-- 1 user1 user1 0 Jun 30 13:59 user1file
-rw-rw-r-- 1 user2 user2 0 Jun 30 14:01 user2file
[user2@server1 dir1]$ logout
(4)Sticky Bit权限
- Sticky Bit (SBit) 当前只针对目录有效, 对文件没有效果。
- 前提条件必须要有x权限,否则没有效果

- 其对目录的作用:
- 在 具 有 SBit 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目录下建立文件或目录时, 只有文件拥有者与 root 才有权力删除。
- 例如:当 student 用户属于 A 目录的组成员或属于 other ,且拥有 wx 权限时, 可以对该目录内任何人建立的目录或文件进行“ 删除/重命名/移动” 等操作。 如果将 A 目录加上了 Sticky Bit 权限, 则 student用户只能针对自己建立的文件或目录进行“ 删除/重命名/移动” 等操作。
- 权限用数字**
1**来表示
[root@server1 ~]# chmod 1777 dir1/

- 例
[root@server1 ~]# ll -d /tmp/

(5)设置特殊权限
-
为文件或目录添加三种特殊权限同样可以通过chmod命令来实施,使用“u±s”、“g±s”、“o±t”的字符权限模式分别用于添加和移除SUID、GUID、sticky权限。
-
若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示,其中:后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字:
0——表示不设置特殊权限tou
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7——表示同时设置SUID、GUID、sticky3种权限
3.ACL权限
- 作用
给指定的用户指定目录分配指定的权限。
(1)ACL权限管理命令
- 查看ACL权限
格式
getfacl 文件名
例
[root@server ~]# touch temp.cfg
[root@server ~]# getfacl temp.cfg # getfacl命令
# file: temp.cfg
# owner: root
# group: root
user::rw-
group::r--
other::r--
- 设定ACL权限
格式
setfacl -参数 文件名
参数
-m:设定 ACL 权限
给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
-x:删除指定的 ACL 权限;
-b:删除所有的 ACL 权限;
-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;
-k:删除默认 ACL 权限;
-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效
- 示例
例1:root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x
[root@server ~]# mkdir /project
[root@server ~]# useradd zhangsan
[root@server ~]# useradd lisi
[root@server ~]# groupadd QQgroup
[root@server ~]# gpasswd -M zhangsan,lisi QQgroup
[root@server ~]# chown root:QQgroup /project
[root@server ~]# chmod 770 /project
[root@server ~]# ll -d /project
drwxrwx---. 2 root QQgroup 6 5月 6 18:12 /project
[root@server ~]# useradd pt # 新建旁听账户
[root@server ~]# setfacl -m u:pt:rx /project
[root@server ~]# ll -d /project # 注意:某文件下有+标志则说明其具有acl权限
drwxrwx---+ 2 root QQgroup 6 5月 6 18:12 /project
[root@server ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: QQgroup
user::rwx
user:pt:r-x
group::rwx
mask::rwx
other::---
# 为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功:
[root@server ~]# su - pt
[pt@server ~]$ cd /project
[pt@server project]$ touch test.txt
touch: 无法创建 'test.txt': 权限不够
例2:user1移出了wxh组,user2还在wxh组,wxh组有读和执行权限,user1使用ACL权限有读写和执行权限

(2)删除acl权限
# 删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
# 删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
# 删除文件的所有 ACL 权限
setfacl -b 文件名

4.权限掩码umask
(1)新建文件权限与umask关系
-
在Linux系统中,当用户创建一个新的文件或目录时,系统都会为新建的文件或目录分配默认的权限,该默认权限与umask值有关
-
新建文件的默认权限=0666-umask值 (减去)
-
新建目录的默认权限=0777-umask值
(2)查看默认umask值
超级用户默认umask值为022,普通用户默认umask值为002
[root@server1 ~]# umask
0022
[root@server1 ~]# su - wxh
Last login: Mon Jun 29 17:36:08 CST 2026 on pts/0
[wxh@server1 ~]$ umask
0002

(3)修改默认umask
- 临时修改
[root@server ~]# umask 000
[root@server ~]# touch file2
[root@server ~]# mkdir dir2
[root@server ~]# ll -d file2 dir2
drwxrwxrwx. 2 root root 6 5月 6 18:26 dir2
-rw-rw-rw-. 1 root root 0 5月 6 18:25 file2
- 单用户永久修改
[root@server1 ~]# vim .bashrc
在文件末尾加上umask 027,保存退出后source ~/.bashrc刷新全局环境生效

- 全局所有用户永久修改
[root@server1 ~]$ vim /etc/bashrc
修改umask的值,source /etc/bashrc刷新全局环境后生效

四、管理Linux的联网
1.RHEL9版本特点
- 在RHEL7版本中,同时支持network.service和NetworkManager.service(简称NM)。
-
在RHEL8上默认只能通过NM进行网络配置,包括动态ip和静态ip,若不开启NM,否则无法使用网络
-
RHEL8依然支持network.service,只是默认没安装,可以通过
yum install network-scripts来安装传统的network.service,不过redhat说了,在下一个rhel的大版本里将彻底废除,因此不建议用network.service。 -
在RHEL9上,使用NM进行网络配置,ifcfg (也称为 文件)将不再是网络配置文件的主存储。虽然 ifcfg 样式仍然可用,但它不再是 NetworkManager 存储新网络配置文件的默认位置。从 RHEL 9.0 开始,RHEL 以 key-file 格式在 /etc/NetworkManager/system-connections/ 中存储新的网络配置。配置以旧格式存储在 /etc/sysconfig/network-scripts/ 中的连接仍然可以正常工作。对现有配置集的修改会继续更新旧的文件。
2.NM特点
-
NetworkManager是2004年Red Hat启动的项目,旨在能够让Linux用户更轻松地处理现代网络需求,能自动发现网卡并配置ip地址。
-
NetworkManager的特点
-
NM能管理各种网络
有线网卡、无线网卡
动态ip、静态ip
以太网、非以太网
物理网卡、虚拟网卡 -
工具齐全:命令行、文本界面、图形界面、web
-
广纳天地:管理各种网络,有线、无线、物理、虚拟
-
参数丰富:多达200多项配置参数(包括ethtool参数)
-
一统江湖:RedHat系、Suse系、Debian/Ubuntu系,均支持
-
大势所趋:下一个大版本的rhel只能通过NM管理网络
-
3.配置网络
-
概念
-
网络接口是指网络中的计算机或网络设备与其他设备实现通讯的进出口,一般是指计算机的网络接口即网卡设备
-
从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名,该方式可以根据固件、设备拓扑、设备类型和位置信息分配固定的名字。网络接口的名称的前两个字符为网络类型符号,如:
- en——表示以太网(Ethernet)
- wl表示无线局域网(wlan)
- ww表示无线广域网(wwan);
-
接下来的字符根据设备类型或位置选择,如:
- o——表示内置(onboard)于主板上的集成设备(即集成网卡)及索引号;
- s——表示是插在可以热拔插的插槽上的独立设备及索引号;
- x——表示基于MAC地址命名的设备;
- p——表示PCI插槽的物理位置及编号。
-
注意:一个网络接口,可以有多个网络连接,但同一时间只能有一个网络连接处于活动状态。
-
(1)nmcli命令
-
作用:nmcli,可以实现创建,显示,编辑,删除,激活和停用网络连接以及控制和显示网络设备状态等
-
前提:NM服务必须处于默认开启状态
[root@server1 ~]# systemctl status NetworkManager

- 查看网卡信息
[root@server ~]# nmcli c show # 全写为:nmcli connection show
[root@server ~]# nmcli con show ens160 # 查看指定网卡的详细信息,q键退出
[root@server ~]# nmcli dev status # 查看已有设备的连接状态
[root@server ~]# nmcli dev show # 看所有网络设备详情,q键退出

- 激活和关闭网络连接
[root@server ~]# nmcli c up 网卡名 # 激活,也是重启网卡的一种方法
[root@server ~]# nmcli c down 网卡名 # 关闭

- down掉网络后需要进入虚拟机界面来激活

- 添加网络连接
# 例:添加网络连接ens161
[root@server ~]# nmcli c add type ethernet ifname ens160 con-name ens161 autoconnect yes ip4 192.168.48.135/24 gw4 192.168.48.2
连接 "ens161" (37bc8e79-92ea-4c01-a4af-1dfd7c687014) 已成功添加。
[root@server ~]# nmcli c up ens161 # 不能在xshell操作,否则ssh连接断掉
[root@server ~]# nmcli c show
[root@server ~]# nmcli c up ens160

- 设置静态IP
[root@server ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses '192.168.48.134/24' ipv4.gateway '192.168.48.2' ipv4.dns '114.114.114.114'
[root@server ~]# nmcli c up ens160
[root@server ~]# ip a
# ipv4.method manual:手动获取

- 增加ip地址
[root@server ~]# nmcli c mod ens160 +ipv4.addresses 192.168.48.136/24
[root@server ~]# nmcli c up ens160
[root@server ~]# ip a
- 修改网卡名
[root@server1 ~]# nmcli connection modify Wired\ connection\ 1 con-name eth0

- 删除网络连接
# 删除上例的ens161
[root@server ~]# nmcli c show
NAME UUID TYPE DEVICE
ens160 0f83fcfd-bc6d-3866-b82b-fc4b09df2068 ethernet ens160
ens161 37bc8e79-92ea-4c01-a4af-1dfd7c687014 ethernet --
[root@server ~]# nmcli c del ens161
成功删除连接 "ens161" (37bc8e79-92ea-4c01-a4af-1dfd7c687014)。
[root@server ~]# nmcli c show
NAME UUID TYPE DEVICE
ens160 0f83fcfd-bc6d-3866-b82b-fc4b09df2068 ethernet ens160

(2)修改配置文件
- 从CenOS8开始默认配置都在/etc/NetworkManager/system-connections里
# 设置静态IP
[root@server ~]# cd /etc/NetworkManager/system-connections
[root@server system-connections]# ls
ens160.nmconnection
[root@server system-connections]# vim ens160.nmconnection
[connection]
id=ens160
uuid=d97d603d-5bb5-3d11-bfeb-11fbc8cb867d
type=ethernet
autoconnect-priority=-999
interface-name=ens160
timestamp=1682493359
[ethernet]
[ipv4]
address1=192.168.48.134/24,192.168.48.2
dns=114.114.114.114;
method=manual
[ipv6]
addr-gen-mode=eui64
method=auto
[proxy]
[root@server ~]# nmcli c reload
[root@server ~]# nmcli c up ens160
# 会话和网卡的关系:一个网卡可以有多个会话,但是一个时刻只能连接到一个会话
- 我们用的7在如下文件里,但只有静态配置才有,动态没有

- 或者vim编辑这个文件,如下状态就好

(3)可视化配置
- 命令:nmtui

- 注意:通过键盘方向键和回车设置选项
(4)ping命令
-
作用
-
用来检测网络的连通情况和分析网络速度
-
根据域名得到服务器 IP
-
根据 ping 返回的 TTL 值来判断对方所使用的操作系统及数据包经过路由器数量。
-
- 格式
ping -参数 目标主机IP或域名
-
参数
-
-c 数字:用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令。
-
-s 字节数:设置ping命令发出的消息包的大小,默认发送的测试数据大小为56字节;自动添加8字节的ICMP协议头后,显示的是64字节;再添加20字节的IP协议头,则显示的为84字节。最大设置值为65507B
-
-i 时间间隔:设定前后两次发送ICMP消息包之间的时间间隔,无此选项时,默认时间间隔为1秒。为了保障本机和目标主机的安全,一般不要小于0.2秒
-
-t:设置存活时间TTL(Time To Live)
-
[root@server ~]# ping -c 2 www.baidu.com

-
显示内容分析
-
**bytes 值:**数据包大小,也就是字节
-
**time 值:**响应时间,时间越小,速度越快
-
**TTL 值:**Time To Live, 表示 DNS 记录在 DNS 服务器上存在的时间,它是 IP 协议包的一个值,告诉路由器该数据包何时需要被丢弃。通过TTL 值判断目标系统类型:默认情况下,Linux 系统的 TTL 值为 64 或 255,win11 系统值为644,UNIX 主机的 TTL 值为 255
-
4.通过域名访问主机
(1)静态解析
- 作用
通过配置/etc/hosts文件实现域名解析
- 方法
[root@server ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.48.134 www.openlab.com
[root@server ~]# ping www.openlab.com

(2)简述DNS域名解析
- 作用
DNS 全称域名系统,把人类好记的域名(baidu.com)翻译成计算机能识别的 IP 地址,实现网络访问。
-
解析流程(递归查询)
-
客户端先查询本地缓存与
/etc/resolv.conf指定的 DNS 服务器 -
本地 DNS 服务器查不到,就逐级向根域名服务器、顶级域服务器、权威域名服务器发起迭代查询
-
最终拿到域名对应的 IP,返回给客户端,同时缓存结果
-
-
两种查询方式
-
递归查询:由本地 DNS 全权帮用户查到最终结果
-
迭代查询:服务器之间一层一层互相询问
-
5.从网站下载文件
(1)wget命令
- 作用
用于在终端命令行里下载网络文件,英文全称为:“web get”
- 格式
wget -参数 URL
- 参数
-P 下载到指定目录
-t 最大尝试次数
-b 后台下载模式
-c 断点续传
-p 下载页面内所有资源,包括图片、视频等
-r 递归下载
[root@server ~]# wget https://dldir1.qq.com/qqfile/qq/QQNT/2355235c/linuxqq_3.1.1-11223_x86_64.rpm
# 下载qq软件
(2)curl命令
- curl命令是一个网络工具,其主要作用是通过http、https、ftp等方式下载/上传文件
[root@server ~]# curl www.baidu.com -o index.html
[root@server ~]# ll index.html
-rw-r--r--. 1 root root 2381 5月 6 19:12 index.html

6.VMware三种网络模式
- 概述
- vmware提供三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)

(1)Bridged(桥接模式)
-
概念
-
桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信
-
在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰
-
在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致
-
-
分析图

-
注意
-
虚拟交换机必须桥接到本机电脑使用的网卡,不要选自动
-
虚拟机的ip跟本机同一个网段,网关相同
-
桥接模式配置简单,如果网络环境中ip资源很缺少或对ip管理比较严格,则桥接模式就不太适合
-
(2)NAT(地址转换模式)
- 工作原理
- NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图:

-
注意
-
NAT模式是利用虚拟的NAT设备以及虚拟DHCP服务器来使虚拟机连接外网,VMware Network Adapter VMnet8虚拟网卡是用来与虚拟机通信的
-
如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择
-
(3)Host-Only(仅主机模式)
-
概念
-
Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的
-
Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯
-
-
工作原理

五、管理Linux软件包和进程
1.源码下载安装软件
-
概念
-
源码文件:程序编写者使用C或C++等语言编写的原始代码文本文件
-
源码文件使用.tar.gz或.tar.bz2打包成压缩文件
-
-
特点
-
源码包可移植性好,与待安装软件的工作环境依赖性不大
-
由于有编译过程,其代码运行效率较高,是针对当前使用者环境的“量体裁衣”
-
安装功能可以定制,可以选择需要的功能进行安装
-
卸载方便,只需删除对应安装目录即可,没有Windows“注册表”的概念
-
安装过程较为麻烦
-
-
安装过程
-
下载解压缩源码压缩包
-
分析安装软件环境
-
编译软件
-
安装软件
-
-
例:安装Apache源码包
-
准备工作
打开浏览器,访问nginx.org,点击右侧download

选择nginx-1.30.3右键复制链接地址

使用wget命令加链接,源码直接下载到Linux里

解压缩
[root@server1 ~]# tar zxf nginx-1.30.3.tar.gz

完成

- 安装环境分析
源码未编译是不可执行的,软件包目录中有configure可执行文件,用于对安装环境进行测试、检测所需库文件、工具文件是否存在、检测依赖关系、编译器汇编器连接器的检查
执行方式:./configure
[root@server httpd-2.4.57]# ./configure
# 提示缺少apr软件,则安装
[root@server httpd-2.4.57]# yum install apr* -y
[root@server httpd-2.4.57]# ./configure # 重新检测
# 提示缺少pcre软件,下载安装
[root@server httpd-2.4.57]# yum install pcre* -y
[root@server httpd-2.4.57]# ./configure
- 编译软件
- 作用:安装./configure命令生成的Makefile文件中记录的信息进行编译,生成二进制安装文件
第一步:configure
[root@server httpd-2.4.57]# make
# 提示缺少redhat-rpm-config软件包
[root@server httpd-2.4.57]# yum install redhat-rpm-config
[root@server httpd-2.4.57]# make
一般只需要如下两个–with开头的就够了,遇到报错就解决,下载需要的包
--with-http_ssl_module --with-http_stub_status_module
[root@server1 nginx-1.30.3]# ./configure --with-http_ssl_module --with-http_stub_status_module
报错
[root@server httpd-2.4.57]# yum install -y gcc
[root@server1 nginx-1.30.3]# ./configure --with-http_ssl_module --with-http_stub_status_module
报错
[root@server httpd-2.4.57]# yum install -y pcre-devel
[root@server1 nginx-1.30.3]# ./configure --with-http_ssl_module --with-http_stub_status_module
报错
[root@server httpd-2.4.57]# yum install -y openssl-devel
[root@server1 nginx-1.30.3]# ./configure --with-http_ssl_module --with-http_stub_status_module
成功

第二步:make

第三步:make install
根据make命令生成的二进制安装文件,进行软件安装,默认安装目录:usr/local或者/usr/loacl/bin目录下
方法:make install
[root@server httpd-2.4.57]# make install

注意:也可以使用符号连接多条语句
./configure && make && make install
- 把 nginx 的 sbin 目录加到系统 PATH 环境变量里
[root@server1 ~]# vim .bash_profile
[root@server1 ~]# source .bash_profile
[root@server1 ~]# which nginx
/usr/local/nginx/sbin/nginx


- 运行并检测是否成功
[root@server1 ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@server1 ~]# nginx
[root@server1 ~]# ps -ef | grep nginx
root 32805 1 0 20:23 ? 00:00:00 nginx: master process nginx
nobody 32806 32805 0 20:23 ? 00:00:00 nginx: worker process
root 33150 110737 0 20:24 pts/0 00:00:00 grep --color=auto nginx

也可以用curl localhost命令检测

- 浏览器访问虚拟机IP地址

2.RPM管理工具
概念
-
RPM
-
RPM(Redhat Package Manager)由Red Hat公司提出的一种软件包管理标准
-
是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)。
-
产生原因:软件制作者在其工作环境下将软件编译完毕后再进行发布,以此减少安装编译时间,要求:软件安装环境与编译时的环境要相同
-
-
RPM安装软件要求
-
软件安装环境必须与打包软件环境一致
-
必须满足软件依赖性
-
软件卸载时必须小心,最底层软件不能先卸载
-
-
rpm软件包命名格式
-
含义:软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm
-
如:zsh-5.0.2-14.el7.x86_64.rpm
-
| zsh | -5 | 0 | 2 | 14 | el7 | x86 | 64 |
|---|---|---|---|---|---|---|---|
| 软件名 | 主版本号 | 次版本号 | 修订号 | 软件发布次数 | 发行商RHEL7 | CPU架构平台 | 支持系统位数 |
-
rpm包相关网站
-
http://rpmfind.net/
-
http://rpm.pbone.net/
-
- rpm软件安装
格式
rpm -参数 软件包名
参数
| 参数 | 说明 |
|---|---|
| -i, --install | 安装软件包 |
| –nodeps | 不验证软件包依赖 |
| –force | 安装时提示已安装则重新覆盖安装 |
| -v, --verbose | 提供更多的详细信息输出 |
| -U | 软件包升级 |
| -e | 软件包卸载 |
安装过程:
-
读取PRM软件包头部数据,进行软件依赖性查询
-
若满足条件则安装否则安装失败
- 示例
安装nginx
rpm -ivh等价于make->make install,只是文件存放位置不同
[root@server ~]# wget http://nginx.org/packages/rhel/9/x86_64/RPMS/nginx-1.24.0-1.el9.ngx.x86_64.rpm
[root@server ~]# rpm -ivh nginx-1.24.0-1.el9.ngx.x86_64.rpm
卸载
[root@server /]# rpm -evh tree
- rpm查询功能
格式
rpm –q 包名
# -q常与下面参数组合使用
| 参数 | 说明 |
|---|---|
| -a | 查询所有已安装的软件包 |
| -l | 显示已安装软件包的相关文件列表和信息 |
| -f | 查询文件所属软件包 |
| -i | 显示已经安装的rpm软件包信息 |
示例
# 查询某个包有没有安装(包名不能写错)
[root@server ~]# rpm -q httpd
# 查询所有已经安装的包
[root@server ~]# rpm -qa
# 查询安装该包后会产生哪些文件
[root@server /]# rpm -ql gcc
#查询该文件由哪个软件包产生
[root@server /]# rpm -qf /usr/bin/ls
coreutils-8.30-12.el8.x86_64

3.YUM/DNF管理工具
概念
(1)YUM
-
YUM (Yellow dog Updater,Modified)
-
RHEL9中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM),原有的yum命令仅为dnf的软链接,当然依旧可以使用。
[root@server /]# ll `which yum`
lrwxrwxrwx. 1 root root 5 9月 15 2022 /usr/bin/yum -> dnf-3

-
YUM/DNF 功能
-
在线下载、 安装、 卸载、 升级rpm软件包
-
自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手工地去安装每一个rpm包
-
-
工作原理
-
将编译好的软件放置在YUM服务器中,并将这些软件的依赖性等信息记录下来形成表格组成数据库
-
用户安装软件时会向网络中的YUM服务器下载对应表格并与本机RPM数据库进行比较,最后一同下载全部软件进行安装,自动解决依赖性
-
YUM软件仓库:记录软件依赖性等信息的数据库
-
系统会去读取
/etc/yum.repos.d/目录下的.repo结尾的文件,从该文件中读取以下内容实现装包:- 包含各种rpm安装文件的软件仓库(rhel8开始有两个仓库,rhel7只有一个仓库)
- BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库
- AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库
-
-
命令
# 查看包、包组相关信息
yum repolist [all] # 查看系统中yum资源库配置信息
yum list all # 列出仓库里所有可安装的软件包
yum list installed [包名] # 列出己经安装的所有的或指定的rpm包(包名中可使用匹配符)
yum info 包名 # 查看指定软件包的详细信息
yum grouplist # 查看仓库里而所有包组
yum groupinfo 包组名 #查看指定包组里而的详细信息
# 安装、更新包和包组
yum install [-y] 包名 # 安装指定的软件包,-y则在工作过程中需要使用者响应, 这个选个参数可以直接回答yes
yum update [-y] 包名 # 升级指定的软件包或主机中所有已安装的软件包
yum groupinstall 包组名 # 安装指定包组里面的所有包
# 卸载软件包
yum remove [-y] 包名 # 卸载已经安装在系统中的指定的软件包
# 搜索文件由哪个包产生
yum provides 文件名 # 查找指定的文件属于哪个包
yum whatprovides /etc/fstab # 查看这个文件是由那个包提供的
# 模糊搜索包名
yum search 模糊包名 # 查看模糊包名的软件包
# 清空缓存
yum clean packages all # 清除下载到本机的指定的软件包或所有软件包的yum源缓存
(2)配置yum源
- 禁掉原有的aliyun的源
[root@server1 yum.repos.d]# vim CentOS-Base.repo #给使用的三个aliyun源下加enabled=0,将其禁掉
[root@server1 yum.repos.d]# yum repolist #查看后发现已经没有可使用的源了

- 挂载光驱
[root@server1 yum.repos.d]# cd
[root@server1 ~]# mount /dev/cdrom/ /media/
mount: /dev/sr0 is write-protected, mounting read-only

- 配置本地源
[root@server1 media]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
CentOS-Base.repo CentOS-SCLo-scl.repo CentOS-SCLo-scl-rh.repo local.repo
[root@server1 yum.repos.d]# vim local.repo #编辑本地源
[root@server1 yum.repos.d]# yum repolist #查看系统中yum资源库配置信息,出现以下local就说明配置好了

vim编辑的内容
[local] #仓库名
name=local repo #命名
baseurl=file:///media/ #必须和repodata处于同一等级
gpgcheck=0 #不启动校验
enabled=1 #启用源

- 重建缓存
[root@server yum.repos.d]# yum makecache
[root@server yum.repos.d]# yum repolist

-
建立网络源
-
重启aliyun源,禁用本地源
[root@server1 yum.repos.d]# vim local.repo
[root@server1 yum.repos.d]# vim CentOS-Base.repo
[root@server1 yum.repos.d]# yum makecache fast
[root@server1 yum.repos.d]# yum repolist



-
下载createrepo包:YUM 仓库索引生成工具
- createrepo 会扫描目录里所有 rpm,自动提取软件名、版本、依赖,生成元数据文件夹 repodata,此时文件夹才变成合法 YUM 仓库
-
下载httpd包:Apache 网页服务器程序,CentOS 里的 web 服务主程序
- 搭建网站,对外提供网页访问 把网页文件放到网站根目录,别人就能通过浏览器用 IP 打开网页。
- 用来搭建 YUM 本地仓库 开启 httpd 服务后,本机就变成一台 HTTP 文件服务器,其他机器可以通过网址访问 rpm 包
[root@server1 yum.repos.d]# yum install -y createrepo
[root@server1 yum.repos.d]# yum install -y httpd
[root@server1 yum.repos.d]# ststemctl enable --now httpd
[root@server1 registry]# netstat -antlp | grep :80
tcp6 0 0 :::80 :::* LISTEN 902/httpd
- 测试httpd是否成功生效,命令
curl localhost或者在网页端输入虚拟机IP有如下网页


- 创建目录,并从Packages目录中随便拷取几个rpm包放入目录中


- 使用createrepo生成repodata

- 将创建目录移到
/var/www/html/目录下,这是阿帕奇的默认发布目录

- 这时在网页端的IP地址栏后输入仓库目录就能访问网页端了

-
安装EPEL红帽扩展源
-
官网:https://developer.aliyun.com/mirror/
-
安装:
-
[root@server1 ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# yum repolist

- yum下载时默认“下载–安装–删除”,如果不想删除,可以
[root@server1 ~]# vim /etc/yum.conf
修改keepcache=1即可,但是会占内存

4.管理进程
概念
-
程序、进程、线程
-
程序: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下
-
进程:进程是已启动的可执行程序的运行实例
-
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
-
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
-
一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
-
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
-
-
进程分类

查看进程
(1)ps命令
-
作用:ps显示某个时间点的程序运行情况
-
格式
ps -参数
- 参数
-a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示
-f:做一个更完整的输出
- 示例
# 查看当前用户的进程
[root@server ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 32343 32342 0 80 0 - 56088 do_wai pts/2 00:00:00 bash
4 R 0 33566 32343 0 80 0 - 56375 - pts/2 00:00:00 ps
说明:
F:代表这个程序标志(process flags),说明这个程序的权限。常见号码有:4表示此程序的权限为root;1表示此子程序仅进行复制(fork)而没有实际执行(exec)
S:代表这个程序的状态(STAT),主要的状态有:
R(Running):该程序正在运作中;
S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;
D:不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;
T:停止状态(stop),可能是在工作控制(后台暂停)或traced状态;
Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。
+:位于后台的进程组
UID/PID/PPID:代表此程序被该UID所拥有/程序的PID号码/此程序的父进程PID号码。
C:代表CPU使用率,单位为百分比;
PRI/NI:Priority/Nice的缩写,代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执行。
ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel funcition,指出该程序在内存的哪个部分,如果是running的程序,一般会显示-。SZ代表此程序用掉多少内存,WCHAN表示目前程序是否运作中,若为-表示正在运行。
TTY:登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。
TIME:使用掉的CPU时间,即此程序实际花费CPU运作的时间。
CMD:触发此进程的指令是什么。
[root@localhost ~]# ps aux | less
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2164 648 ? Ss 08:47 0:00 init [5]
#############################
说明:以完整详细格式列出所有进程,并且分页浏览,防止内容一次性刷屏,方便慢慢查找进程
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存 驻留内存
TTY: 进程运行的终端
STAT: 进程状态 man ps (/STATE)
R 运行
S 可中断睡眠 Sleep
D 不可中断睡眠
T 停止的进程
Z 僵尸进程
X 死掉的进程
s 进程的领导者,父进程
< <优先级较高的进程
N N优先级的进程
+ +表示是前台的进程组
l 以线程的方式运行
START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
# 自定义显示字段
[root@server ~]# ps axo user,pid,ppid,%mem,command
USER PID PPID %MEM COMMAND
root 1 0 0.7 /usr/lib/systemd/systemd --switched-root --system
root 2 0 0.0 [kthreadd]
root 3 2 0.0 [rcu_gp]

# 查看进程树
[root@server ~]# pstree


# 查看指定进程的PID
[root@server ~]# ps aux | grep sshd
[root@server ~]# cat /run/sshd.pid
# 查看指定进程的PID
[root@server ~]# pgrep -l sshd
[root@server ~]# pidof sshd
# 查看指定进程的PID
[root@server~]# pidof sshd
(2)top命令
- 格式
top [-d 数字] | [-bnp]
- 参数
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒
-b:以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。
-n:与-b搭配,进行几次top的输出结果
-i:不显示闲置或者僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险
-p:指定某些个PID来进行查看检测
[root@localhost ~]# top -d 1
[root@localhost ~]# top -d 1 -p id 查看指定进程的动态信息
-
top的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,后面为进程信息区。
- 统计信息区
############################# 第一行为任务队列信息:top - 17:21:03 up 4:32, 5 users, load average: 0.19, 0.08, 0.06 17:21:03表示当前系统时间; up 4:32表示系统已经启动4小时32分钟了; 5 users表示当前登录系统的用户数; load average: 0.19, 0.08, 0.06表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果是1表示满负载) 第二行:Tasks: 483 total, 3 running, 480 sleeping, 0 stopped, 0 zombie 483 total进程的总数 3 running正在运行的进程数 480 sleeping处于休眠状态的进程数 0 stopped停止的进程数 0 zombie僵死的进程数 第三行:%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 0.3 us表示用户进程占用CPU的百分比 0.7 sy系统进程占用CPU的百分比; 0.0 ni用户进程空间内改变过优先级的进程占用CPU的百分比 99.0 id空闲CPU占用的百分比 0.0 wa代表I/Owait表示等待输入、输出的进程占用CPU的百分比; 0.0 hi表示cpu服务于硬件中断所耗费的时间总额 0.0 si表示cpu服务于软件中断所耗费的时间总额; 0.0 st表示虚拟机被hypervisor偷去的cpu时间 另外,如果是多内核设备,可按下数字键“1”来切换成不同cpu的负载率。 第四行、第五行 MiB Mem : 1790.0 total, 1278.5 free, 240.5 used, 271.0 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1393.8 avail Mem total系统的内存大小 free目前空余内存大小 used已经使用的内存大小 #############################- 进程信息区:显示了每个进程的运行状态
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 179104 13540 8728 S 0.0 0.7 0:01.22 systemd ############################# PID:进程的id USER:进程所有者的用户名 PR:进程优先级 NI:nice值。负值表示高优先级,正值表示低优先级 VIRT:进程使用的虚拟内存总量,单位为KB RES:进程使用的、未被换出的物理内存大小,单位KB SHR:共享内存大小,单位KB S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程 %CPU:上次更新到现在的CPU时间占用百分比 %MEM:进程占用的物理内存百分比 TIME+:进程总计使用的CPU时间,单位为1/100秒 COMMAND:正在运行进程的命令名或者命令路径 ############################# -
注意:可以在RHEL9中安装epel-release源后安装htop,是top的升级版
(3)kill命令
- 作用
- 强制结束进程
- 格式
kill 进程名/pid
killall 进程名/pid

六、磁盘管理
1.磁盘简介
概念
- 硬盘是由一片或多片带有磁性的铝合金制的盘片构成,是一种大容量、永久性的外部存储设备
- 组成:盘片、马达驱动、缓存、控制电路、接口
- 图

逻辑结构
- 磁道:由内到外的同心圆
- 扇区:半径组成的扇形磁道存储区
- 柱面:多个盘片的统一磁道
- 图:

2.虚拟机添加新硬盘
过程
-
关机
-
编辑虚拟机设置

- 点击添加

- 选择硬盘后下一步

- 选择磁盘类型:SCSI(A)

- 创建新虚拟磁盘

- 20GB,多个文件

- 默认命名,点击完成

3.硬盘分区概述
(1)MBR分区
概念
- MBR(Master Boot Record,主引导记录)包含硬盘一系列参数和一段引导程序,硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序
- MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存
- MBR位于整个硬盘的0磁道0柱面1扇区
- 主引导扇区512B
- MBR=446B
- MPT(Disk Partition Table硬盘分区表)=64B
- 最后两个字节“55,AA”是分区的结束标志
MBR分区类型
-
主分区(primary partition)
- 一块硬盘最多4个主分区,主分区不可以再进行二次分区
- 主分区可以直接建立文件系统,存放数据
- 可以用来引导、启动操作系统
-
扩展分区(extended partition)
- 一块硬盘最多一个扩展分区,加主分区最多4个
- 不能创建文件系统
- 可以划分逻辑分区
-
逻辑分区(logical partition)
- 可以创建文件系统,存放数据
- 逻辑分区的数量没有限制。
-
支持的分区数量:4个主分区或者3个主分区1个扩展分区


-
为什么MBR最多只能有4个主分区: 因为分区表占据64个字节,其中每个分区的信息占用16个字节,分区表里面可以记录四个分区信息描述。
(2)GPT分区
产生原因
- MBR分区表中最高支持磁盘容量为2.2TB
- MBR分区表中,没有备份机制,分区表被干掉则磁盘全部死光光
- MBR中存储开机管理程序的容量只有446B,无法存储较多内容
概念
- GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式
- GPT分区表使用LBA(Logical Block Address)逻辑区块地址来记录磁盘引导、分区的相关信息
- LAB区块大小(512B-4KB),默认为512B
- LAB区块共68个,前34个记录分区信息,后34个进行备份
- 图:

- 不在区分主分区与其它分区,默认情况下,GPT最多可支持128个分区
- 支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)
- GPT分区机制在较老的BIOS中不能识别,则提供了一个UEFI (Unified Extensible Firmware Interface)统一的可扩展固件接口,来取代传统的BISO,又称为UEFI BIOS,UEFI使用C语言编写,支持较多的平台
(3)lsblk命令
作用
- 查看磁盘信息
格式
lsblk 参数 设备名
参数
-d :仅列出硬盘本身信息,不显示分区信息
-f :列出磁盘的内的文件系统名称
-i : 使用ASCII码格式输出信息
-t :显示磁盘的详细信息
-p :显示设备完整名称
示例
[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 8.4G 0 rom
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 400M 0 part /boot
└─nvme0n1p2 259:2 0 19.6G 0 part
├─rhel-root 253:0 0 15.6G 0 lvm /
└─rhel-swap 253:1 0 4G 0 lvm [SWAP]
# 显示内容分析
NAME :设备名称,默认省略前导/dev 目录名
MAJ:MIN :主要:次要 设备代码
RM :是否可以卸载
SIZE : 容量
RO :是否为 只读
TYPE : 设备类别(磁盘、分区、光盘等)
MOUNTPOINT :挂载点

4.硬盘分区-fdisk
(1)使用fdisk管理分区
作用
-
fdisk命令工具默认将磁盘划分为MBR格式的分区
-
命令:fdisk 设备名
-
注意:fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可
| 指令 | 作用 | 指令 | 作用 |
|---|---|---|---|
| a | 调整磁盘的启动分区 | p | 显示当前磁盘的分区信息 |
| d | 删除磁盘分区 | t | 更改分区类型 |
| l | 显示所有支持的分区类型 | u | 切换所显示的分区大小单位 |
| m | 查看所有指令的帮助信息 | n | 创建新分区 |
| q | 不保存更改,退出fdisk命令 | w | 把修改写入磁盘分区表,然后退出fdisk命令 |
| g | 新建一个空的GPT分区表 | o | 新建一个空的DOS分区表 |
示例
- 例1:显示所有支持的分区类型

- 例2:对/dev/sdb硬盘进行分区,容量10G
[root@server1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x27699511
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

注意
- 若无法查看,则表示分区信息还未写入内核(常见情况),输入partprobe命令 进行手动将分区信息同步到内核,再不行就重启

(2)使用gdisk管理分区
注意
-
注意:gdisk命令针对GPT分区格式,若在MBR分区格式下进行添加分区,则所有数据会全部丢失,切记:一块硬盘中fdisk与gdisk不能混用
-
格式:gdisk 设备名
-
实际工作中,硬盘分区是应保留一定的自由空间,以备将来分区空间不足时可以临时扩容
5.格式化
(1)概念
格式化的目的
-
当我们拿到了一张大白纸,首先为了使用方便要裁剪,然后为了书写工整要先画格,这里的“白纸”就是原始的硬盘,而“裁剪”意味着分区,然后的“画格”就是格式化,最后写入内容
-
格式化是对分区建立文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法
文件系统组成-ext2
- 组成:super block(超级块)、inode (索引块)、block(数据块)
- super block:又称为“硬盘地图”,记录文件系统的整体信息,如:inode/block块的总量、使用量、空闲块量、文件系统格式等相关信息
- inode:记录文件的属性,一个文件占用一个inode块,并且记录次文件的数据所在的block块的号码,默认为128B大小,存储:文件访问权限、文件所有者与所属组、文件大小、创建时间或修改内容时间、最后一次访问时间、特殊权限、真实数据地址
- block块:记录实际文件的内容,在EXT2文件系统中分为1KB、2KB、4KB容量,文件太大时,会占用多个数据块
- 图:

查看文件系统格式
- 方法:输入mkfs在键入tab(点击2次)进行命令补全,可显示支持的文件系统格式
- 例
[root@server ~]# mkfs # 点击2次tab
mkfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs

(2)格式化命令
mkfs.xfs -参数 硬盘分区名
mkfs.ext4 -参数 硬盘分区名
参数
-f:强制格式化,已存在文件系统时需要使用
-c:建立文件系统前先检查坏块。
-V:输出建立文件系统的详细信息
示例
- 例:格式化新分区的sdb1
[root@server1 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

(3)blkid命令
作用
- 显示设备的UUID值和文件系统名称
UUID
- UUID:全局单一标识符(Universally Unique Identifier),Linux系统会给所有设备分配一个唯一的UUID值,以方便挂载
格式
blkid 设备名
示例
[root@server ~]# blkid /dev/sda1
/dev/sda1: UUID="2f3bfdcc-b4ff-488f-aa4d-7137c2b4fd7d" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="96058c70-ea76-41d4-a677-9e5574a06220"
# 显示内容:设备名 UUID值 文件系统类型(TYPE)
[root@server ~]# blkid # 全部查看

6.挂载
(1)概念
-
mount point:挂载点,是一个目录,该目录是进入磁盘分区(文件系统)的入口
-
挂载:将一个分区或者设备挂载至挂载点目录,建立连接,通过挂载点目录进入分区空间
(2)mount命令
格式
mount [-t 文件系统类型] 设备名 挂载点目录
参数
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-t:指定文件系统类型
-o 特殊设备选项:挂载设备时使用逗号分割输入额外参数

示例
- 例:新建挂载目录,挂载/dev/sdb1
[root@server ~]# mkdir /sdb1
[root@server1 ~]# mount /dev/sdb1 /sdb1
[root@server1 ~]# df -h /sdb1/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 9.8G 37M 9.2G 1% /sdb1
此时sdb1就可以正常使用了

注意
-
单一文件系统不应该被重复挂载在不同的挂载点(目录)中
-
单一目录不应该重复挂载多个文件系统
-
作为挂载点的目录,应为空目录,否则原有数据会隐藏
[root@server ~]# mkdir /msda3
[root@server ~]# echo "hello" > /msda3/test.txt
[root@server ~]# ls /msda3
test.txt
[root@server ~]# mount /dev/sda3 /msda3
[root@server ~]# ls /msda3 # test.txt隐藏,卸载设备后恢复
lost+found
# lost+found目录作用:使用标准的ext文件系统格式才会产生的一个目录,当软件或者硬件出现错误,导致文件系统不一致时会把有问题的文件放到lost+found目录种,所以是一种恢复丢失文件的方法,误删除时可使用mklost+found创建
(3)umount命令
作用
- 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载
格式
umount 参数 设备名称[挂载点]
参数
-f :强制卸载
示例
[root@server ~]# umount /dev/sdb1

注意
- 若正使用文件系统,则应使用cd命令离开该目录后再卸载
[root@server ~]# cd /msda3
[root@server msda3]# ls
lost+found
[root@server msda3]# umount /dev/sda3
umount: /msda3: 目标忙.
[root@server msda3]# cd ~ # 离开需要卸载的目录
[root@server ~]# umount /dev/sda3
[root@server ~]# ls /msda3 # 原先隐藏的文件,卸载设别后会显示
test.txt
(4)开机挂载
作用
- 由于mount为手动挂载,重启后就会卸载,则修改/etc/fstab配置文件,实现开机自动挂载
- 例
[root@server1 ~]# vim /etc/fstab

配置文件分析
- 路径:/etc/fstab

- 共六列,分别为:
- 设备名称或其UUID值
- 挂载点目录
- 文件系统名称
- 文件系统参数:default
- 是否备份,0
- fsck:开机是否用fsck进行扇区检查,但xfs文件系统不支持则为 0
注意
-
根目录/ 是必须挂载的﹐而且一定要先于其它mount point 被挂载
-
其它mount point 必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则(FHS)
-
所有mount point 在同一时间之内﹐只能挂载一次。
-
所有partition 在同一时间之内﹐只能挂载一次。
(5)备份分区表
[root@server1 sdb1]# cd
[root@server1 ~]# dd if=/dev/sdb of=sdbmbr bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000101472 s, 5.0 MB/s
(6)特殊挂载-swap
挂载大文件
- 当只有一个分区,剩余空间还很大,自由空间很小不能进行新的分区,则可以在当前分区制作一个大文件,在进行挂载,相当于一个新的分区来使用
- 例:建立根目录下新建1GB大文件,挂载并开机挂载使用
[root@server ~]# dd if=/dev/zero of=/loopdev count=1 bs=1G
[root@server ~]# mkfs.xfs -f /loopdev
[root@server ~]# mkdir /mloop
[root@server ~]# mount -o loop /loopdev /mloop
[root@server ~]# lsblk
[root@server ~]# vim /etc/fstab
/loopdev /mloop xfs defaults 0 0
[root@server ~]# mount -a
[root@server ~]# reboot
[root@server ~]# lsblk
增加swap分区
- swap分区:类似于Windows系统虚拟内存的功能,将一部分硬盘空间虚拟成内存来使用,从而解决内存容量不足的情况,因为swap毕竟是用硬盘资源虚拟的,所以速度上比真实物理内存要慢
- 查看:
[root@server ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 733Mi 985Mi 15Mi 380Mi 1.2Gi
Swap: 4.0Gi 0B 4.0Gi

-
添加过程:新建分区->格式化该分区->启用新的swap->查看系统信息->挂载
-
例1:/dev/sdb中划分2G空间为swap分区,并实现开机自动激活
[root@server1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#格式化
[root@server1 ~]# mkswap /dev/sdb1
#激活
[root@server1 ~]# swapon /dev/sdb1
#实现开机自动激活
[root@server1 ~]# vim /etc/fstab
/dev/sdb1 swap swap defaults 0 0
[root@server1 ~]# swapon -a

- 例2:使用大文件建立swap
[root@server1 ~]# dd if=/dev/zero of=/opt/swapdisk bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 5.93318 s, 362 MB/s
[root@server1 ~]# du -h /opt/swapdisk
2.0G /opt/swapdisk
[root@server1 ~]# mkswap /opt/swapdisk
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=0cd52883-f6fc-44a1-8d74-b63b83cafa0a
[root@server1 ~]# swapon /opt/swapdisk
swapon: /opt/swapdisk: insecure permissions 0644, 0600 suggested.

例3:禁用swap
[root@server1 ~]# swapoff /opt/swapdisk


注意
-
swap在服务器中有时会关闭,如数据库服务器,但一般用于服务器内存剩余空间有一定压力时会触发使用swap空间,则swap空间大小设置一般为:当物理内存小于2G时,swap分区大小为物理内存的2倍;超过2G的部分,swap分区大小跟物理内存相等
-
可以使用 swapoff命令停用部分swap空间
7.查看磁盘空间使用量
(1)df命令
作用
- 列出文件系统的磁盘空间占用情况
- df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,他比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了
格式
df -参数 目录或文件名
参数
-a:列出所有的文件系统,包括系统特有的/proc等文件系统
-k:以KB的容量显示各文件系统
-m:以MB的容量显示各文件系统
-h:以人们较易阅读的GB,MB,KB等格式自行显示
-H:以M=1000K替代M=1024K的进位方式
-T:连同该分区的文件系统名称(例如ext3)也列出
-i:不用硬盘容量,而以inode的数量来显示
# 由于df主要读取的数据几乎都是针对整个文件系统,因此读取的范围主要是在Super block内的信息,所以这个命令显示结果的速度非常快速。
示例
[root@server ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 968M 0 968M 0% /dev/shm
tmpfs 388M 9.7M 378M 3% /run
/dev/mapper/rhel-root 16G 8.5G 7.2G 54% /
/dev/sda2 3.0G 54M 3.0G 2% /msda2
/dev/sda1 2.0G 47M 2.0G 3% /msda1
/dev/loop0 1014M 40M 975M 4% /mloop
/dev/nvme0n1p1 395M 235M 160M 60% /boot
tmpfs 194M 52K 194M 1% /run/user/42
tmpfs 194M 36K 194M 1% /run/user/0

(2)du命令
作用
- du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB。
- du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候du与df就一致了
格式
du -参数 文件或目录名
参数
-a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
-h : 以人们较易读的容量格式(G/M)显示;
-s : 列出总量,而不列出每个个别的目录占用了容量;
-S : 不包括子目录下的总计,与-s有点差别;
-k : 以KB列出容量显示;
-m : 以MB列出容量显示。
示例

8.管理逻辑卷
(1)工作原理
产生原因
-
硬盘分区或部署为RAID后在修改分区大小时就非常不容易,此时用户随着实际的需求变化而动态调整硬盘分区大小时受到限制,无灵活性
-
LVM(Logical Volume Manager )允许用户对硬盘资源进行动态调整
认识Linux逻辑卷
-
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。
-
通过LVM技术,屏蔽了磁盘分区的底层差异,管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统
-
管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
-
假设有三块磁盘/dev/sdb、/dev/sdc和/dev/sdd用来划分逻辑卷,LVM模型如图所示:

LVM基本概念
- PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致
- 物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数
- 卷组**(Volume Group)**:简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义
- 逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷,可以属于同一个卷组,也可以属于不同的多个卷组
(2)部署逻辑卷
常用的LVM部署命令
| 功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
|---|---|---|---|
| 扫描 | pvscan | vgscan | lvscan |
| 建立 | pvcreate | vgcreate | lvcreate |
| 显示 | pvdisplay | vgdisplay | lvdisplay |
| 删除 | pvremove | vgremove | lvremove |
| 扩展 | vgextend | lvextend | |
| 缩小 | vgreduce | lvreduce |
示例
- 例1:
pv->vg->lv的过程创建逻辑卷lv1,并格式化、挂载、开机自启
[root@server1 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x27699511
Device Boot Start End Blocks Id System
#创建物理卷(pv)
[root@server1 ~]# pvcreate /dev/sdb
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
Wiping dos signature on /dev/sdb.
Physical volume "/dev/sdb" successfully created.
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <49.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
#创建卷组(vg)
[root@server1 ~]# vgcreate vg0 /dev/sdb
Volume group "vg0" successfully created
[root@server1 ~]# vgdisplay vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / <20.00 GiB
VG UUID pVisI9-0MxW-lwP8-EgBl-wH7e-ZpCa-1qrRvl
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
vg0 1 0 0 wz--n- <20.00g <20.00g
#创建逻辑卷(lv)
[root@server1 ~]# lvcreate -L 10G -n lv1 vg0
WARNING: swap signature detected on /dev/vg0/lv1 at offset 4086. Wipe it? [y/n] : y
Wiping swap signature on /dev/vg0/lv1.
Logical volume "lv1" created.
[root@server1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Con vert
root centos -wi-ao---- 46.99g
swap centos -wi-ao---- 2.00g
lv1 vg0 -wi-a----- 10.00g
[root@server1 ~]# ll /dev/vg0/lv1
lrwxrwxrwx 1 root root 7 Jul 1 20:04 /dev/vg0/lv1 -> ../dm-2
#格式化
[root@server1 ~]# mkfs.xfs /dev/vg0/lv1
meta-data=/dev/vg0/lv1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#挂载
[root@server1 ~]# mkdir /lvm
[root@server1 ~]# mount /dev/vg0/lv1 /lvm/
[root@server1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1001960 0 1001960 0% /dev
tmpfs 1013944 0 1013944 0% /dev/shm
tmpfs 1013944 9660 1004284 1% /run
tmpfs 1013944 0 1013944 0% /sys/fs/cgroup
/dev/mapper/centos-root 49250820 5111368 44139452 11% /
/dev/sda1 1038336 140268 898068 14% /boot
tmpfs 202792 0 202792 0% /run/user/0
/dev/mapper/vg0-lv1 10475520 32992 10442528 1% /lvm
[root@server1 ~]# cd /lvm/
[root@server1 lvm]# ls
[root@server1 lvm]# cp /etc/*.conf .
[root@server1 lvm]# ls
asound.conf kdump.conf locale.conf resolv.conf sysctl.conf
chrony.conf krb5.conf logrotate.conf rsyslog.conf vconsole.conf
dracut.conf ld.so.conf man_db.conf sestatus.conf yum.conf
e2fsck.conf libaudit.conf mke2fs.conf sudo.conf
host.conf libuser.conf nsswitch.conf sudo-ldap.conf
#开机自启
[root@server1 lvm]# blkid
/dev/sr0: UUID="2020-11-03-14-55-29-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sdb: UUID="d2jBVc-10ZV-E0Wx-nhF4-aaS7-FF6p-Y0Hh7x" TYPE="LVM2_member"
/dev/sda1: UUID="9b259524-4749-43be-bb7a-8ad7edd79525" TYPE="xfs"
/dev/sda2: UUID="2QUoBM-KJaU-36Cn-7Ib8-XTBl-l3Ng-kBi1je" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="b6d251bc-0fad-4bbc-9362-701d92f3856d" TYPE="xfs"
/dev/mapper/centos-swap: UUID="84ed63b0-8013-47a1-a4b2-d8326f6516fc" TYPE="swap "
/dev/mapper/vg0-lv1: UUID="3003d128-ad7c-468d-b501-91f169da207d" TYPE="xfs"
[root@server1 lvm]# vim /etc/fstab
[root@server1 lvm]# mount -a
[root@server1 lvm]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1001960 0 1001960 0% /dev
tmpfs 1013944 0 1013944 0% /dev/shm
tmpfs 1013944 9664 1004280 1% /run
tmpfs 1013944 0 1013944 0% /sys/fs/cgroup
/dev/mapper/centos-root 49250820 5111368 44139452 11% /
/dev/sda1 1038336 140268 898068 14% /boot
tmpfs 202792 0 202792 0% /run/user/0
/dev/mapper/vg0-lv1 10475520 33096 10442424 1% /lvm
vim /etc/fstab配置内容

(3)调整逻辑卷大小
扩展卷组
- 例:将/dev/sdc扩容到vg0卷组中
#添加虚拟硬盘
[root@server1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 47G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─vg0-lv1 253:2 0 20G 0 lvm /lvm
sdc 8:32 0 20G 0 disk
sr0 11:0 1 973M 0 rom
#创建物理卷
[root@server1 ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@server1 ~]# df -h /lvm/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 20G 33M 20G 1% /lvm
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <49.00g 4.00m
/dev/sdb vg0 lvm2 a-- <20.00g 0
/dev/sdc lvm2 --- 20.00g 20.00g
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
vg0 1 1 0 wz--n- <20.00g 0
#卷组扩容
[root@server1 ~]# vgextend vg0 /dev/sdc
Volume group "vg0" successfully extended
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
vg0 2 1 0 wz--n- 39.99g <20.00g
逻辑卷的扩大与缩小
- 例1:xfs文件系统类型的lvm的扩容
# 注意:使用 -L +10G增加了10G,如果增加到40G,使用-L 40G
[root@server1 lvm]# lvextend -L +10G /dev/vg0/lv1
Insufficient free space: 2560 extents needed, but only 2559 available
[root@server1 lvm]# lvextend -l +2559 /dev/vg0/lv1
Size of logical volume vg0/lv1 changed from 10.00 GiB (2560 extents) to <20.00 GiB (5119 extents).
Logical volume vg0/lv1 successfully resized.
[root@server1 lvm]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
vg0 1 1 0 wz--n- <20.00g 0
[root@server1 lvm]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 46.99g
swap centos -wi-ao---- 2.00g
lv1 vg0 -wi-ao---- <20.00g
# 注意:此时文件系统没有扩容
[root@server1 lvm]# df -h /lvm/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 10G 33M 10G 1% /lvm
# 使用xfs_growfs文件系统扩容
[root@server1 lvm]# xfs_growfs /dev/vg0/lv1
meta-data=/dev/mapper/vg0-lv1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 5241856
[root@server1 lvm]# df -h /lvm/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 20G 33M 20G 1% /lvm
[root@server1 ~]# mount /dev/vg0/lv1 /lvm/
- 例2:对lv1逻辑卷缩容到200MB
# 相对于扩容,对逻辑卷缩容有风险,则最好提前备份
[root@server ~]# umount /dev/vg0/lv1
[root@server ~]# lvreduce -L 200M /dev/vg0/lv1
New size (50 extents) matches existing size (50 extents).
[root@server ~]# mount /dev/vg0/lv1 /lvm
- 例子3:倒序删除逻辑卷、卷组、物理卷,释放硬盘
#卸载
[root@server1 ~]# umount /lvm
[root@server1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1001960 0 1001960 0% /dev
tmpfs 1013944 0 1013944 0% /dev/shm
tmpfs 1013944 9668 1004276 1% /run
tmpfs 1013944 0 1013944 0% /sys/fs/cgroup
/dev/mapper/centos-root 49250820 5111544 44139276 11% /
/dev/sda1 1038336 140268 898068 14% /boot
tmpfs 202792 0 202792 0% /run/user/0
#删除逻辑卷
[root@server1 ~]# lvremove /dev/vg0/lv1
Do you really want to remove active logical volume vg0/lv1? [y/n]: y
Logical volume "lv1" successfully removed
[root@server1 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 46.99g
swap centos -wi-ao---- 2.00g
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
vg0 2 0 0 wz--n- 39.99g 39.99g
#删除卷组
[root@server1 ~]# vgremove vg0
Volume group "vg0" successfully removed
[root@server1 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <49.00g 4.00m
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <49.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
#删除物理卷
[root@server1 ~]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
[root@server1 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <49.00g 4.00m
#修改文件配置
[root@server1 ~]# vim /etc/fstab
[root@server1 ~]# fdisk -l
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a1b1a
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 104857599 51379200 8e Linux LVM
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 50.5 GB, 50457477120 bytes, 98549760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@server1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─centos-root 253:0 0 47G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 973M 0 rom
#虚拟硬盘不用的话也可以删除
七、综合项目-搭建论坛
1.项目架构
(1)整体结构
-
使用LNMP环境+Discuz论坛源程序
-
LNMP= Linux/Windows(系统) + Ngnix/apache(外部服务器) + mariadb/oracle/pgsql(数据库) + PHP/jsp(开发语言)
(2)Nginx
-
最初于2004年10月4日为俄罗斯知名门户站点而开发的
-
Nginx是一款轻量级的网站服务软件,因其稳定性和丰富的功能而深受信赖,
-
特点:低系统资源、占用内存少且并发能力强,是目前主流网站使用的http服务程序

(3)Mariadb
- Mariadb是一种数据库软件
- 由开源社区维护,是MySQL的分支,几乎完全兼容MySQL,两者性能基本一致,操作十分相似
(4)PHP
- PHP(Hypertxt Preprocessor,超文本预处理器)是一种通用的开源脚本语言,发明于 1995年,它吸取了 C 语言、Java 语言及 Perl 语言的很多优点,具有开源、免费、快捷、跨平台性强、效率高等优良特性,是目前 Web 开发领域最常用的语言之一
- Discuz默认使用PHP编写
(5)Discuz
- Discuz一套通用的社区论坛软件系统
- 自2001年6月面世以来,Discuz!已拥有15年以上的应用历史和200多万网站用户案例,是全球成熟度、覆盖率最大的论坛软件系统之一
- 2010年8月23日被腾讯收购
- 网址:https://www.discuz.vip/
2.项目准备
(1)安装数据库和包
#安装mariadb数据库
[root@server1 ~]# yum install -y mariadb-server
[root@server1 ~]# systemctl enable --now mariadb
[root@server1 ~]# mysql_secure_installation
设置密码后其余选项均为 Y
[root@server1 ~]# mysql -p
输入密码登录,出现 MariaDB [(none)]> 就成功了
#安装centos-release-scl.noarch包
[root@server1 ~]# yum install -y centos-release-scl.noarch
#安装php
[root@server1 ~]# yum install rh-php73.x86_64 rh-php73-php-mysqlnd.x86_64
(2)修改两条路径
- 在阿里云镜像网站找到如下,复制链接回到配置文件中修改

- 两个文件都注释掉
mirrorlist,启用baseurl并将其网址前段修改成刚复制的aliyun
[root@server1 yum.repos.d]# vim CentOS-SCLo-scl.repo
[root@server1 yum.repos.d]# vim CentOS-SCLo-scl-rh.repo
https://mirrors.aliyun.com/


- 检查是否成功
[root@server1 ~]# yum repolist
#出现如下两个就成功了

(3)下载Discuz安装包
- 将安装包拖入Linux系统并解压缩
#安装包需要X3.5的最新款支持CentOS7.3
[root@server1 ~]# unzip Discuz_X3.5_SC_UTF8_20260504.zip
解压过程
[root@server1 ~]# ls
anaconda-ks.cfg LICENSE qqqun.png upload
a.out nginx-1.30.3 readme utility.html
Discuz_X3.5_SC_UTF8_20260504.zip nginx-1.30.3.tar.gz readme.html
- 将upload目录下的文件移入
/usr/local/nginx/html/
#先查看是否装了nginx
[root@server1 upload]# ls /usr/local/nginx/
client_body_temp fastcgi_temp logs sbin uwsgi_temp
conf html proxy_temp scgi_temp
#禁用httpd
[root@server1 upload]# systemctl disable --now httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
#移动upload目录
[root@server1 ~]# cd upload/
[root@server1 upload]# ls
admin.php connect.php group.php misc.php source
api crossdomain.xml home.php plugin.php static
api.php data index.php portal.php template
archiver favicon.ico install robots.txt uc_client
config forum.php member.php search.php uc_server
[root@server1 upload]# mv * /usr/local/nginx/html/
[root@server1 upload]# cd /usr/local/nginx/html/
[root@server1 html]# ls
50x.html config forum.php install robots.txt uc_client
admin.php connect.php group.php member.php search.php uc_server
api crossdomain.xml home.php misc.php source
api.php data index.html plugin.php static
archiver favicon.ico index.php portal.php template
#修改四个目录的权限
[root@server1 html]# chmod -R 777 config data uc_client uc_server
#解析动态php需要用到的服务
[root@server1 html]# yum install -y rh-php73-php-fpm
#设置开机自启
[root@server1 html]# systemctl enable --now rh-php73-php-fpm
#检测9000端口
[root@server1 html]# netstat -antlp|grep :9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1754/php-fpm: maste
3.部署项目
(1)配置nginx
[root@server nginx]# vim /usr/local/nginx/conf/nginx.conf
# 定位第43行 添加一个index.php在index后
# 定位第63-69行 将注释的内容打开,修改include后内容为fastcgi.conf
#检测语法
[root@server1 nginx]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#刷新
[root@server nginx]# nginx -s reload
配置文件的修改


(2)网页设置
- 浏览器输入虚拟机IP搜索,出现安装向导,同意

- 下一步

- 下一步

- 填写自己的数据库密码

- 填写管理员密码,下一步

- 进入管理后台

- 论坛就搭建好了

- 点首页出现下面提示

- 返回后台删除index.php避免初始化即可
[root@server1 nginx]# ls
client_body_temp fastcgi_temp logs sbin uwsgi_temp
conf html proxy_temp scgi_temp
[root@server1 nginx]# cd html/
[root@server1 html]# ls
50x.html config forum.php install robots.txt uc_client
admin.php connect.php group.php member.php search.php uc_server
api crossdomain.xml home.php misc.php source
api.php data index.html plugin.php static
archiver favicon.ico index.php portal.php template
[root@server1 html]# cd install/
[root@server1 install]# ls
data include index.php static
[root@server1 install]# rm -f index.php
- 刷新一下就好了

更多推荐
所有评论(0)