一.命令解释器-shell

概念

Shell 是操作系统的命令解释器,介于用户和系统内核之间的中间层程序。

作用

接收用户输入的文本命令,翻译给内核执行;再把内核返回的结果打印给用户。

分类

内置命令:shell为了完成自我管理和基本的管理,不同的shell内置不同的命令。Shell 程序内部代码实现,执行快,不新建进程(cdpwdexportexit

外置命令:在文件系统的某个目录下,有个与命令名称相同的文件。独立二进制文件,每次运行创建子进程(lsgreppython

type命令

作用

查看命令为内置命令、外置命令、alias命令中的哪个

格式
 type -参数 命令名
 type -a 命令名   列出当前命令可以如何执行
 type -t 命令名   仅列出命令按照哪种方式执行

示例:

image-20260629130927795

$PATH环境变量

作用

当你在终端输入一条命令(比如 lspythongcc),系统不会凭空找到这个程序,而是按顺序遍历 PATH 里记录的所有目录,在目录里查找同名可执行文件,找到第一个匹配的就执行;全部遍历完都找不到,才会提示 command not found

示例

image-20260629133023522

echo $PATH 读取环境变量 PATH 的内容,并打印输出到屏幕

修改路径

输入

cat .bash_profile

image-20260629133819317

在框选命令中‘bin’后边加‘:/xxx’,表示‘根目录下的xxx路径’,其余不动。退出后重启终端或者使用‘source’命令刷新.bash_profile即可。

Linux系统中的特殊符号

功能:分割多条命令
示例

image-20260629134553738

*
功能:匹配任意零个或者多个字符
用法
匹配后缀相同的文件

ls *.xxx 匹配后缀为‘.xxx’的文件

匹配前缀相同的文件

ls xxx* 匹配前缀为’xxx’的文件

中间模糊匹配

ls * xxx* 匹配文件名包含 xxx 的文件

列出所有文件

ls *

?
作用:匹配任意单个字符
用法

ls ?.xxx 匹配名字只有一个字符的后缀为xxx的文件

ls ??.xxx 匹配名字只有两个字符的后缀为xxx的文件

image-20260629140821909

[]
作用:匹配方括号中的任意一个字符,表示范围可以用"-”
用法

目录文件:a1.png a2.png b3.png c.txt x.png

匹配 a1、a2(第二个字符是 1 或 2)

 ls a[12].png

匹配 a1.pnga2.pngb3.png 不匹配。

匹配开头是 a/b/c 的文件

 ls [abc]*

匹配 a1.png a2.png b3.png c.txt

区间写法 [0-9][a-z][A-Z]

 # 匹配数字结尾的png
 ls file[0-9].png
 # 匹配小写字母开头
 ls [a-z]*.txt
 # 匹配大写字母
 ls [A-Z]*
[^]或者[!]
作用:匹配方括号中的任意一个字符或数字后进行取反
用法

现有文件:a1.png a2.png b3.png c.txt x9.md log.txt

  1. [!0-9]:匹配非数字的单个字符

匹配首字符不是数字的所有文件:

 ls [!0-9]*

全部文件都符合(没有数字开头的文件),都会列出。

匹配文件名第二个字符不是 1、2的 png:

 ls a[!12].png

只会排除 a1.pnga2.png,无匹配结果。

  1. [!a-z]:排除小写字母

匹配第一个字符不是小写字母的文件:

 ls [!a-z]*
  1. [^] 等价替换(效果相同)

 # 和 [!12] 一模一样
 ls a[^12].png
  1. 混合区间使用

匹配名字第 2 位,不是数字也不是 a/b

 ls file[!0-9ab].txt
  1. 匹配后缀不是 png 的文件

 # 倒数第3位不能是p,倒数第2不能是n,倒数第1不能是g
 *.[!p][!n][!g]
 ls *.[!p][!n][!g]
{string,string}
作用:匹配括号中的任意一个字符串,表示一个范围时,字符串之间个".."
用法
1.简单多字符串展开
 echo {apple,banana,orange}
 # 输出:apple banana orange
2. 前后拼接(最常用)

前缀 + {} + 后缀,批量生成文件名

 # 批量生成 file1.txt file2.txt file3.txt
 echo file{1,2,3}.txt
 # 输出:file1.txt file2.txt file3.txt
 ​
 # 批量创建 a.png b.png c.png
 touch {a,b,c}.png
 ​
 # 批量复制文件
 cp test.{txt,md} ./doc/
3. 路径批量操作
 # 同时进入两个目录
 cd /usr/{bin,sbin}
 ​
 # 同时删除多个后缀文件
 rm demo.{log,txt,bak}
4.连续数字 / 字母简写 {start..end}

大括号支持区间连续拓展,不用逐个写逗号:

 echo {1..5}
 # 1 2 3 4 5
 ​
 echo pic{01..05}.png
 # pic01.png pic02.png pic03.png pic04.png pic05.png

字母区间

 echo {a..d}
 # a b c d

带步长(增量)

 echo {1..10..2}
 # 1 3 5 7 9
5.多层嵌套 {}

可以组合两层大括号,生成组合

 echo {a,b}{1,2}
 # a1 a2 b1 b2

实操场景:批量创建多级文件

 touch img/{cat,dog}/{1,2}.png
 # 生成 img/cat/1.png img/cat/2.png img/dog/1.png img/dog/2.png
\
作用:使\后面的特殊字符失效
用法
转义字符:取消符号特殊含义

Shell 里很多符号(* ? [] $ " ' {} !)有特殊功能,加 \ 就能让它变回普通文本字符

示例 1:转义特殊符号

 # 直接输出 *,不做文件匹配
 echo \*
 # 输出:*
 # 输出 $ 符号,不读取变量
 echo \$PATH
 # 输出:$PATH
 # 输出 ! 、{ 、}
 echo \{a,b\}
 # 输出:{a,b}

示例 2:输出空格、括号等

文件名带空格时,用 \ 转义空格:

 # 创建名为 my file.txt 的文件
 touch my\ file.txt
 ls my\ file.txt
行尾续行符:把一行命令拆成多行写

如果命令太长,在行末尾\,Shell 会把下一行当作当前行的延续,逻辑上还是一条命令。

注意:\ 必须是该行最后一个字符,后面不能有空格

 # 一条长命令拆多行
 cp /usr/local/bin/file1 \
 /usr/local/bin/file2 \
 /home/test/

等价于

 cp /usr/local/bin/file1 /usr/local/bin/file2 /home/test/
字符串中转义控制字符(双引号内)

双引号 " " 内部可以用 \ 转义 "$\ 本身;单引号 ' '\ 失去转义能力,只是普通字符。

 # 输出带双引号的内容
 echo "He said \"hello\""
 # 输出:He said "hello"
 ​
 # 输出 $ 符号
 echo "变量是 \$PATH"
 # 输出:变量是 $PATH
 ​
 # 单引号内 \ 不生效,原样打印
 echo '变量是 \$PATH'
 # 输出:变量是 \$PATH
`
作用:反引号,一般用于引用命令,执行的时候反引号里面的命令会被执行,与$()作用相同
用法
把命令输出当作字符串
 # 先执行 pwd 获取当前路径,再echo打印
 echo 当前目录:`pwd`

执行流程:

  1. 运行 pwd,得到 /home/user

  2. 替换为 echo 当前目录:/home/user

  3. 输出文本

赋值给变量
 # 将 ls 的结果存入 files 变量
 files=`ls`
 echo $files
嵌套使用(对比 $())

反引号不能直接嵌套,必须转义内层 ```;

$() 天然支持嵌套,所以日常更推荐 $()

 # 反引号嵌套要加 \ 转义
 echo `echo \`pwd\``
 ​
 # $() 不用转义,更简洁
 echo $(echo $(pwd))
'
作用:单引号,将单引号内的所有内容都原样输出
"
作用:双引号,除了几个特殊字符外,将双引号内的几乎所有内容都原样输出

命令别名

作用

给一条长命令自定义简短别名,简化输入、提升效率

把复杂、冗长、带固定参数的命令,绑定成一个简短自定义名字,不用每次重复敲完整指令。

格式

alias 别名='原命令 - 参数'

查看别名

alias

image-20260629144442362

示例

可以看出在用alias命令前ping命令一直会进行除非人工停止。

image-20260629145226325

命令ping别名后:

alias ping=‘ping -c 5’ ping5次后自动停止

image-20260629145201332

删除别名

unalias 别名

注意:

  • 在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则这些alias将无法使用。

  • 在linux中提供alias永久化的方法:

    • 将别名命令写入到~/.bashrc和/etc/bashrc文件中

    • 执行 source ~/.bashrc 和 source ~/etc/bashrc 生效

      image-20260629155423208

      以下为vim编辑器编辑文件界面

命令历史

格式

history -number 显示最近的number条命令历史

history -c 清空当前历史命令

设置历史命令条数

[root@server ~]# vim /etc/profile

修改以下框选的命令中的数字。

修改保存退出后重启。

二.账户和组管理

分类

用户
  • 超级账户——账户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。

  • 系统账户——是Linux系统正常工作所必需的账户,主要为了满足相应的系统进程对文件属主的要求而建立的,如:bin、daemon、adm、sshd等,注意:系统账户不能登录。

  • 普通用户——是为了让使用者能够使用Linux系统资源而建立的,大多数用户属于此类。

工作组
  • 基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组

  • 扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利。

账户和工作组的配置文件

文件功能 文件名称
用户账号文件 /etc/passwd
用户密码文件 /etc/shadow
工作组账号文件 /etc/group
工作组密码文件 /etc/gshadow
用户账号文件

image-20260629161354178

说明
  • 由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

id

id 账户名 查看账户的UID、GID等

用户密码文件

/etc/shadow存储密码加密后的密文

image-20260629162220330

image-20260629161934434

/etc/shadow文件中的每行9个字段的含义为:

----------. 1 root root 628 Jun 28 14:20 /etc/shadow

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

工作组账号文件

/etc/group文件存储每个组工作组信息

image-20260629163420924

字段 说明
Groupname 组的名字
Passwd 组的加密口令
GID 是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定账户的基本组
Userlist 是用“,”分开的账户名,列出的成员以该组为附加组

用户管理

添加账户
格式

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.新建账户test3,UID=3001, 工作组=test1 , 家目录=/test

image-20260629165012968

修改账户
格式
 usermod   -参数   账户名
参数
  • 常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同

  • -l 新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用

  • -L:锁定(暂停)用户账户,使其不能登录使用

  • -U:解锁用户账户

示例

将上例账户test4的家目录移至/home/test4目录下

image-20260629165219991

账户设置密码

Linux的用户想要登入系统必须设置密码

格式

passwd -参数 账户名

参数

-d:清空指定用户的口令,与未设置口令的账户不同,未设置口令的账户无法登录系统,而口令为空的账户可以。 -e:使用户的账号密码立即过期,强迫用户下次登录时必须修改口令。 -i:口令过期后多少天停用账户。 -l:锁定(停用)用户账户。 -n:指定口令的最短存活期。 -x:指定密码的最长使用期限。 -u:解锁用户账户。

示例

修改test2账户的密码

屏幕截图 2026-06-29 165654

注意
  • 密码不能为空

  • 密码不要写成回文

  • 只有 root 用户才能指定用户名

  • 可以使用以下命令设置密码

echo 密码 | passwd --stdin 用户名

echo 密码 | passwd --stdin 用户名 > /dev/null # 无信息提示

删除账户
格式

userdel 账户名

userdel -r 账户名 删除账号的同时,删除账号家目录

示例

image-20260629170601079

账户切换
格式

su 账户名

su 用户名

只是切换用户身份不加载目标用户完整环境

  • 当前工作目录不变

  • 沿用原来用户的 PATH、环境变量、Shell 配置

  • 只是权限变成目标用户

su - 用户名

完全模拟登录目标用户,完整加载对方所有环境:

  • 切换到目标用户家目录

  • 重新加载目标用户 .bashrc / .profilePATH、变量

  • 全新登录式 Shell,环境完全属于目标用户

控制用户对系统命令的使用权限

使用sudo命令可以提高普通用户的操作权限,使用前需要root进行配置

image-20260630074544339

可见fox无权进行访问,此时需要用root管理员身份对sudo文件进行配置

输入

visudo 可检测语法错误,推荐使用

进入编辑界面,在100行处添加

账户名 ALL=(ALL) ALL 可以是任何指令,根据需求更改

允许使用的主机=(以谁的身份) 可执行的命令要求

image-20260630075647714

退出后重新登录fox账户,需要加sudo指令才能调用权限,如下所示

image-20260630080340683

工作组管理

创建工作组
格式

groupadd -参数 工作组名称

groupadd -r 工作组名称 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID

groupadd -g 工作组名称 指定新工作组的GID,默认值是已有的最大的GID加1

示例

向系统中添加一个组ID为2000,组名为group1的新组

image-20260630082806980

修改工作组
格式

groupmod -参数 工作组名称

groupmod -n 工作组名称 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值

groupmod -g 工作组名称 GID——为用户组指定新的组标识号

示例

将组group1的GID修改为3000,组名修改为group11

image-20260630083334701

删除工作组
格式

userdel 工作组名

被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组

添加、删除组成员
格式

gpasswd -参数 账户 工作组

gpasswd -r 账户 工作组 删除组密码

gpasswd -a 账户 工作组 把用户加入组

gpasswd -d 账户 工作组 把用户从组中删除

gpasswd -M 账户 工作组 同时添加多个用户

gpasswd -A 账户 工作组 给组指派管理员

只有root和组管理员可以使用该权限

示例

新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员

image-20260630084141632

查看用户登录

users

查看当前登陆系统的用户

image-20260630084849963

last

列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的登入系统的用户名单全部显示出来

image-20260630084950487

lastlog

查看每个账号的最近登录时间,该命令会读取/var/log/lastlog文件

image-20260630085039598

w

显示登录到系统的用户信息

image-20260630085114281

who

显示目前登录到系统的用户,会从/var/run/utmp文件来获取信息

image-20260630085208446

三.Linux文件系统权限

文件一般权限

查看文件详细信息

ls -l 或者 ll

image-20260630095037277

文件权限构成
权限的三类对象
  • owner:所有者,缩写u

  • group :所属组,缩写g

  • other :其他人,缩写o

三种权限

image-20260630100009461

组成模式分析
字符表示 二进制表示 数字表示
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

image-20260630100725458

文件与目录权限含义
字符 名称 文件作用 文件夹 / 目录作用
r read 读 查看文件内容 列出目录里的文件名(ls)
w write 写 修改、覆盖、删除文件内容 在目录内新建 / 删除 / 重命名文件(配合x权限一起使用)
x execute 执行 运行脚本、程序 进入目录(cd 进去)

root用户不受读写权限的限制,但是受x权限限制。

chmod命令
用途

修改目录/文件的读、写、执行权限

格式
 # 格式1
 chmod  [选项]  [ugoa][+-=][rwx]  文件或目录...
 ​
 # 格式2
 chmod  [选项]  nnn  文件或目录...`
参数
  • -R:递归修改指定目录下所有文件、子目录的权限

  • ugoa:表示权限设置所针对的用户类别,可以是其中字母中的一个或组合,u(user)表示文件或目录的属主(所有者);g(group)表示属组内的用户;o(others)表示其他用户;a(all)表示所有用户(即u+g+o)

  • +或-或=:表示设置权限的操作动作,+代表添加;-代表取消;=表示只赋予给定的权限,并取消原有的权限。

  • rwx:用字符形式表示的所设置的权限,可以是其中一个字母或组合

  • nnn:用数字表示的权限

示例

例1

image-20260630103948762

例2

image-20260630104222436

例3

目录下文件的的递归更改

image-20260630104653498

chown命令
作用

修改文件 / 目录的属主(owner 用户)属组(group 用户组)

格式

chown -参数 所有者:所属组 文件名或目录名

chown -参数 所有者:所属组 文件名或目录名

参数-R递归设置

示例

创建一个t4.txt并将其所有者和所属组改为fox

image-20260630130350203

特殊权限

SUID
作用

SUID = Set User ID,仅对二进制可执行文件生效,目录无效

作用:普通用户执行该程序时,临时拥有文件属主的权限

典型例子:passwd 命令

  • passwd 文件属主是 root

  • 普通用户执行 passwd 修改密码时,临时拿到 root 权限,才能修改 /etc/shadow(只有 root 可读)

image-20260630131605289

注意
  • suid仅对二进制文件有效

  • 在执行过程中,调用者会暂时获得该文件的所有者权限

  • 该权限只在程序执行的过程中有效

SGID权限
作用

作用在 二进制可执行文件

用户运行程序时,进程临时拥有文件所属组的权限。

作用在 目录

目录开启 SGID 后:

在该目录下新建文件 / 子目录,自动继承父目录的属组,而不是创建者自己的主组。适合多人共享文件夹。

Sticky Bit权限

只对目录生效,文件设置无效

目录内所有用户都能创建、读写文件,但只能删除 / 重命名自己创建的文件,不能删别人的文件

设置特殊权限
  • 为文件或目录添加三种特殊权限同样可以通过chmod命令来实施,使用“u±s”、“g±s”、“o±t”的字符权限模式分别用于添加和移除SUID、GUID、sticky权限。

  • 若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示,其中:后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字:

0——表示不设置特殊权限 ​ 1——表示只设置sticky ​ 2——表示只设置GUID权限 ​ 3——表示只设置SGID和sticky权限 ​ 4——表示只设置SUID权限 ​ 5——表示只设置SUID和sticky权限 ​ 6——表示只设置SUID和SGID ​ 7——表示同时设置SUID、GUID、sticky3种权限

ACL权限

作用

ACL 就是用来给指定单个用户 / 指定组单独分配独立权限

ACL权限管理命令
查看ACL
格式

getfacl 文件名 查看ACL权限

示例

设定ACL
格式

setfacl -参数 文件名

参数

-m:设定 ACL 权限 给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名 给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名

-x:删除指定的 ACL 权限;

-b:删除所有的 ACL 权限;

-d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;

-k:删除默认 ACL 权限;

-R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效

示例

root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x,此时已经创建好目录以及账户:

image-20260630143039853

删除ACL权限

setfacl -x u:用户名 文件名 删除指定用户的 ACL 权限

setfacl -x g:组名 文件名 删除指定用户组的 ACL 权限

setfacl -b 文件名 删除文件的所有 ACL 权限

掩码权限umask

作用

umask 是权限掩码,控制新建文件 / 目录的默认权限

系统预设最大权限,减去 umask 掩码,得到新建文件、文件夹最终权限。

  • 新建文件的默认权限=0666-umask值

  • 新建目录的默认权限=0777-umask值

查看默认umask值

umask

image-20260630144934589

修改umask值

umask xxx xxx为临时修改值

四.管理Linux的联网

配置网络

概念
  • 网络接口 = 系统识别的网卡设备,是主机和网络通信的出入口。

    物理网卡、虚拟网卡、网桥、隧道都属于网络接口。

    分类

    1. 物理网卡

      主板插的有线网口、无线网卡

      • 命名示例:eth0ens33enp0s3wlan0(无线)

    2. 虚拟接口

      • lo:本地回环接口(本机自己访问自己,IP 127.0.0.1)

      • virbr0、docker0:虚拟机 / 容器网桥

      • tun/tap:VPN 虚拟网卡

    核心作用

    • 分配 IP 地址、子网掩码、网关;

    • 收发数据包,实现主机和局域网、互联网通信;

    • 每个接口可独立配置 IP、开启 / 关闭、设置速率。

  • 从RHEL7开始引入了一种新的“一致网络设备命名”的方式为网络接口命名,该方式可以根据固件、设备拓扑、设备类型和位置信息分配固定的名字。网络接口的名称的前两个字符为网络类型符号,如:

    • en——表示以太网(Ethernet)

    • wl表示无线局域网(wlan)

    • ww表示无线广域网(wwan);

  • 接下来的字符根据设备类型或位置选择,如:

    • o<index>——表示内置(onboard)于主板上的集成设备(即集成网卡)及索引号;

    • s<slot>——表示是插在可以热拔插的插槽上的独立设备及索引号;

    • x<MAC>——表示基于MAC地址命名的设备;

    • p<bus>——表示PCI插槽的物理位置及编号。

  • 注意:一个网络接口,可以有多个网络连接,但同一时间只能有一个网络连接处于活动状态。

方法
nmcli命令
作用

查看网卡信息

  • 查看所有网卡硬件(网络接口)状态、MAC 地址

  • 查看已保存的网络连接配置(静态 IP/DHCP、网关、DNS)

  • 查看 WiFi 热点、网桥、虚拟网卡信息

    image-20260630151559753

启停网卡 / 网络连接

启用、禁用物理网卡;激活、断开网络配置。

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

配置 IP(静态 / DHCP)

  • 静态:设置 IP 地址、子网掩码、网关、DNS 服务器

  • DHCP:自动获取地址,一键切换,配置永久生效,重启服务器不丢失。

  • [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:手动获取

添加网络连接

# 例:添加网络连接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 mod ens160 +ipv4.addresses 192.168.48.136/24
[root@server ~]# nmcli  c  up  ens160
[root@server ~]# ip a

删除网络连接

# 删除上例的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
修改配置文件
# 设置静态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 

# 会话和网卡的关系:一个网卡可以有多个会话,但是一个时刻只能连接到一个会话
可视化配置

nmtui

image-20260630152642471

通过键盘选择选项

ping命令
作用

基于 ICMP 协议,测试本机和目标主机之间网络连通性,同时查看网络延迟、丢包率。

原理:发送 ICMP 请求包 → 对方回复应答包,以此判断通不通。

格式

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)

image-20260630153554482

  • bytes 值:数据包大小,也就是字节

  • time 值:响应时间,时间越小,速度越快

  • TTL 值:Time To Live, 表示 DNS 记录在 DNS 服务器上存在的时间,它是 IP 协议包的一个值,告诉路由器该数据包何时需要被丢弃。通过TTL 值判断目标系统类型:默认情况下,Linux 系统的 TTL 值为 64 或 255,win11 系统值为644,UNIX 主机的 TTL 值为 255

通过域名访问主机

方法一:静态解析

通过配置/etc/hosts文件实现域名解析

方法

屏幕截图 2026-06-30 154249

方法二:DNS域名解析

主机需要 DNS 服务器,把域名翻译成 IP,配置文件 /etc/resolv.conf

  1. 临时配置(重启网卡失效)

vim /etc/resolv.conf

写入 DNS:

nameserver 223.5.5.5
nameserver 114.114.114.114
  1. 永久 DNS 配置(nmcli 网络管理)

# 设置DNS
nmcli connection modify ens33 ipv4.dns "223.5.5.5,114.114.114.114"
# 生效
nmcli connection up ens33

从网站下载文件

weget
作用

Linux 下文件下载工具,支持 HTTP/HTTPS/FTP 协议,后台下载、断点续传、整站抓取,无图形界面也能使用。

格式
weget   -参数   URL
参数
-P  下载到指定目录 
-t  最大尝试次数 
-b  后台下载模式
-c  断点续传  
-p  下载页面内所有资源,包括图片、视频等 
-r  递归下载

curl
作用

curl 是网络数据传输工具,支持 HTTP/HTTPS/FTP/SFTP 等协议,多用于:

  1. 访问网页、调试接口(GET/POST)

  2. 上传 / 下载文件

  3. 测试服务连通性、模拟浏览器请求

image-20260630160732799

VMware三种网络模式

桥接模式(Bridged)
原理

虚拟机和物理主机处于同一个局域网,相当于局域网里一台独立物理电脑。

IP 特点

和宿主机同网段,路由器分配独立 IP。

连通性
  1. 虚拟机 ↔ 宿主机:互通

  2. 虚拟机 ↔ 局域网其他电脑:互通

  3. 虚拟机 ↔ 外网互联网:能上网

适用场景

需要局域网内其他设备访问虚拟机(服务器、测试集群)

仅主机模式(Host-Only)
原理

只生成宿主机与虚拟机的私有虚拟网卡,完全隔离外网,不经过物理网卡。

IP 特点

VMware 自动分配独立私有网段,和真实局域网无关。

连通性
  1. 虚拟机 ↔ 宿主机:互通

  2. 虚拟机 ↔ 局域网其他机器:不通

  3. 虚拟机 ↔ 外网:无法上网

适用场景

纯本地测试、内网开发,不想虚拟机访问外网。

NAT 模式(网络地址转换,默认模式)
原理

宿主机充当虚拟路由器,虚拟机共享宿主机 IP 上网。

IP 特点

虚拟机使用 VMware 虚拟 NAT 网段,和宿主机不在同一真实网段。

连通性
  1. 虚拟机 ↔ 宿主机:互通

  2. 虚拟机 → 外网:可以上网

  3. 局域网其他电脑 → 虚拟机:默认不通(需端口转发)

适用场景

日常学习 Linux、上网下载软件,最常用默认模式。

五.管理Linux软件包和进程

安装过程

  • 下载解压缩源码压缩包

  • 分析安装软件环境

  • 编译软件

  • 安装软件

安装nginx软件

浏览器访问nginx.org

image-20260709100724533

进入download界面,下载目前最近稳定版本,此次我下载为1.30.3版本

image-20260709100922520

下载完成后拖到Linux系统

image-20260709101117919

解压缩

tar zxf nginx-1.30.3.tar.gz

image-20260709101519385

检查环境,可知缺少部分软件,下载即可

image-20260709102625149

环境检测成功如图

image-20260709103507884

编译

make

image-20260709103625756

安装

make install

image-20260709103838645

进入目录文件查看得知软件部署完毕

修改环境变量

vim .bash_profile

image-20260709104223242

image-20260709104150704

用source命令使修改后的变量生效

image-20260709104350167

运行程序

 

配置yum源

建立本地源

vim CentOS-Base.repo

enabled=0 禁用仓库

image-20260709111225853

# 将本地光盘挂载至本地目录/media下
[root@server /]# mount /dev/cdrom /media
mount: /media: WARNING: source write-protected, mounted read-only.

# 注意有2个yum源
[root@server /]# cd /media/
[root@server media]# ls
AppStream  EFI   extra_files.json  images    media.repo               RPM-GPG-KEY-redhat-release
BaseOS     EULA  GPL               isolinux  RPM-GPG-KEY-redhat-beta

# 移动到yum源配置文件路径
[root@server media]# cd /etc/yum.repos.d
[root@server yum.repos.d]# ls
CentOS-9-Stream.repo  redhat.repo

# 备份已存在yum源配置文件,使其失效
[root@server yum.repos.d]# mv CentOS-9-Stream.repo CentOS-9-Stream.repo.back
[root@server yum.repos.d]# mv redhat.repo redhat.repo.back
[root@server yum.repos.d]# ls
CentOS-9-Stream.repo.back  redhat.repo.back

# 新建本地yum源配置文件
[root@server yum.repos.d]# vim  dvd.repo

[BaseOS]
name=BaseOS
baseurl=file:///media/BaseOS
gpgcheck=0

[Appstream]
name=Appstream
baseurl=file:///media/AppStream
gpgcheck=0

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

# 验证能否装包成功
[root@master ~]# yum install tree -y

管理进程

  • 程序: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下

  • 进程:进程是已启动的可执行程序的运行实例

  • 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程

  • 线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

  • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有

  • 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。

查看进程
ps命令
  • 格式

ps  -参数
  • 参数

-a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示 
-f:做一个更完整的输出
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					查看指定进程的动态信息
kill命令
  • 强制结束进程

  • 格式

kill  进程名/pid
killall  进程名/pid

六.磁盘管理

虚拟机添加新硬盘

  • 关机

  • 编辑虚拟机设置

  • 点击添加

  • 选择硬盘后下一步

  • 选择磁盘类型:SATA(A)

  • 创建新虚拟磁盘

  • 20GB,单个文件

  • 默认命名,点击完成

注意
  • 在添加3块硬盘,最终共4个硬盘

image-20260709175232067

lsblk命令

作用
  • 查看磁盘信息

格式
lsblk  参数  设备名
参数
-d :仅列出硬盘本身信息,不显示分区信息
-f :列出磁盘的内的文件系统名称
-i : 使用ASCII码格式输出信息
-t :显示磁盘的详细信息
-p :显示设备完整名称

硬盘分区

使用fdisk管理分区
作用
  • fdisk命令工具默认将磁盘划分为MBR格式的分区

  • 命令:fdisk 设备名

  • 注意:fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可

指令 作用 指令 作用
a 调整磁盘的启动分区 p 显示当前磁盘的分区信息
d 删除磁盘分区 t 更改分区类型
l 显示所有支持的分区类型 u 切换所显示的分区大小单位
m 查看所有指令的帮助信息 n 创建新分区
q 不保存更改,退出fdisk命令 w 把修改写入磁盘分区表,然后退出fdisk命令
g 新建一个空的GPT分区表 o 新建一个空的DOS分区表
使用gdisk管理分区
注意
  • 注意:gdisk命令针对GPT分区格式,若在MBR分区格式下进行添加分区,则所有数据会全部丢失,切记:一块硬盘中fdisk与gdisk不能混用

  • 格式:gdisk 设备名

格式化

查看文件系统格式
  • 方法:输入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     
格式化命令
mkfs.xfs  -参数   硬盘分区名

mkfs.ext4  -参数  硬盘分区名
参数
-f:强制格式化,已存在文件系统时需要使用
-c:建立文件系统前先检查坏块。
-V:输出建立文件系统的详细信息
blkid命令
作用
  • 显示设备的UUID值和文件系统名称

UUID
  • UUID:全局单一标识符(Universally Unique Identifier),Linux系统会给所有设备分配一个唯一的UUID值,以方便挂载

格式
blkid  设备名

挂载

  • mount point:挂载点,是一个目录,该目录是进入磁盘分区(文件系统)的入口

  • 挂载:将一个分区或者设备挂载至挂载点目录,建立连接,通过挂载点目录进入分区空间

mount命令
格式
mount  [-t  文件系统类型]  设备名   挂载点目录
参数
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
-t:指定文件系统类型
-o 特殊设备选项:挂载设备时使用逗号分割输入额外参数
umount命令
作用
  • 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载

格式
umount  参数   设备名称[挂载点]
参数
-f :强制卸载

查看磁盘空间使用量

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内的信息,所以这个命令显示结果的速度非常快速。
du命令
作用
  • du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB。

  • du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和,当文件系统也确定删除了该文件后,这时候du与df就一致了

格式
du  -参数   文件或目录名
参数
-a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已;
-h : 以人们较易读的容量格式(G/M)显示;
-s : 列出总量,而不列出每个个别的目录占用了容量;
-S : 不包括子目录下的总计,与-s有点差别;
-k : 以KB列出容量显示;
-m : 以MB列出容量显示。

管理逻辑卷

部署逻辑卷
常用的LVM部署命令
功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce

七.搭建论坛

下载所需环境

数据库:

image-20260709185354080

image-20260709190114987

加固数据库

image-20260709190558345

下载scl源文件

更改SCL文件里网络路径

[root@server1 ~]# cd /etc/yum.repos.d [root@server1 yum.repos.d]# vim CentOS-SCLo-scl.repo

image-20260709191546638

安装PHP文件及其数据库支持

image-20260709192710177

下载论坛软件并拖到虚拟机里

解压缩后将upload里的文件移入/var/html/里

image-20260709194340121

配置nginx

image-20260709195947720

image-20260709200258122

浏览器输入域名/install/php

image-20260709200828245

image-20260709201133699

更多推荐