云计算运维课程3
一.命令解释器-shell
概念
Shell 是操作系统的命令解释器,介于用户和系统内核之间的中间层程序。
作用
接收用户输入的文本命令,翻译给内核执行;再把内核返回的结果打印给用户。
分类
内置命令:shell为了完成自我管理和基本的管理,不同的shell内置不同的命令。Shell 程序内部代码实现,执行快,不新建进程(cd、pwd、export、exit)
外置命令:在文件系统的某个目录下,有个与命令名称相同的文件。独立二进制文件,每次运行创建子进程(ls、grep、python)
type命令
作用
查看命令为内置命令、外置命令、alias命令中的哪个
格式
type -参数 命令名 type -a 命令名 列出当前命令可以如何执行 type -t 命令名 仅列出命令按照哪种方式执行
示例:

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

echo $PATH 读取环境变量
PATH的内容,并打印输出到屏幕
修改路径
输入
cat .bash_profile

在框选命令中‘bin’后边加‘:/xxx’,表示‘根目录下的xxx路径’,其余不动。退出后重启终端或者使用‘source’命令刷新.bash_profile即可。
Linux系统中的特殊符号
;
功能:分割多条命令
示例

*
功能:匹配任意零个或者多个字符
用法
匹配后缀相同的文件
ls *.xxx 匹配后缀为‘.xxx’的文件
匹配前缀相同的文件
ls xxx* 匹配前缀为’xxx’的文件
中间模糊匹配
ls * xxx* 匹配文件名包含
xxx的文件
列出所有文件
ls *
?
作用:匹配任意单个字符
用法
ls ?.xxx 匹配名字只有一个字符的后缀为xxx的文件
ls ??.xxx 匹配名字只有两个字符的后缀为xxx的文件

[]
作用:匹配方括号中的任意一个字符,表示范围可以用"-”
用法
目录文件:a1.png a2.png b3.png c.txt x.png
匹配 a1、a2(第二个字符是 1 或 2)
ls a[12].png
匹配 a1.png、a2.png,b3.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
-
[!0-9]:匹配非数字的单个字符
匹配首字符不是数字的所有文件:
ls [!0-9]*
全部文件都符合(没有数字开头的文件),都会列出。
匹配文件名第二个字符不是 1、2的 png:
ls a[!12].png
只会排除 a1.png、a2.png,无匹配结果。
-
[!a-z]:排除小写字母
匹配第一个字符不是小写字母的文件:
ls [!a-z]*
-
[^]等价替换(效果相同)
# 和 [!12] 一模一样 ls a[^12].png
-
混合区间使用
匹配名字第 2 位,不是数字也不是 a/b:
ls file[!0-9ab].txt
-
匹配后缀不是 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`
执行流程:
-
运行
pwd,得到/home/user -
替换为
echo 当前目录:/home/user -
输出文本
赋值给变量
# 将 ls 的结果存入 files 变量 files=`ls` echo $files
嵌套使用(对比 $())
反引号不能直接嵌套,必须转义内层 ```;
$() 天然支持嵌套,所以日常更推荐 $()。
# 反引号嵌套要加 \ 转义 echo `echo \`pwd\`` # $() 不用转义,更简洁 echo $(echo $(pwd))
'
作用:单引号,将单引号内的所有内容都原样输出
"
作用:双引号,除了几个特殊字符外,将双引号内的几乎所有内容都原样输出
命令别名
作用
给一条长命令自定义简短别名,简化输入、提升效率
把复杂、冗长、带固定参数的命令,绑定成一个简短自定义名字,不用每次重复敲完整指令。
格式
alias 别名='原命令 - 参数'
查看别名
alias

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

命令ping别名后:
alias ping=‘ping -c 5’ ping5次后自动停止

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

以下为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 |
用户账号文件

说明
-
由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存储密码加密后的密文
![]()

/etc/shadow文件中的每行9个字段的含义为:
----------. 1 root root 628 Jun 28 14:20 /etc/shadow
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
工作组账号文件
/etc/group文件存储每个组工作组信息

| 字段 | 说明 |
|---|---|
| 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
![]()
修改账户
格式
usermod -参数 账户名
参数
-
常用参数 -c,-d,-m,-g,-G,-s,-u 等,意义与useradd命令中的参数相同
-
-l 新账户名:更改账户的名称,必须在该用户未登录的情况下才能使用
-
-L:锁定(暂停)用户账户,使其不能登录使用
-
-U:解锁用户账户
示例
将上例账户test4的家目录移至/home/test4目录下

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

注意
-
密码不能为空
-
密码不要写成回文
-
只有 root 用户才能指定用户名
-
可以使用以下命令设置密码
echo 密码 | passwd --stdin 用户名
echo 密码 | passwd --stdin 用户名 > /dev/null # 无信息提示
删除账户
格式
userdel 账户名
userdel -r 账户名 删除账号的同时,删除账号家目录
示例

账户切换
格式
su 账户名
su 用户名
只是切换用户身份,不加载目标用户完整环境
-
当前工作目录不变
-
沿用原来用户的
PATH、环境变量、Shell 配置 -
只是权限变成目标用户
su - 用户名
完全模拟登录目标用户,完整加载对方所有环境:
-
切换到目标用户家目录
-
重新加载目标用户
.bashrc/.profile、PATH、变量 -
全新登录式 Shell,环境完全属于目标用户
控制用户对系统命令的使用权限
使用sudo命令可以提高普通用户的操作权限,使用前需要root进行配置

可见fox无权进行访问,此时需要用root管理员身份对sudo文件进行配置
输入
visudo 可检测语法错误,推荐使用
进入编辑界面,在100行处添加
账户名 ALL=(ALL) ALL 可以是任何指令,根据需求更改
允许使用的主机=(以谁的身份) 可执行的命令要求

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

工作组管理
创建工作组
格式
groupadd -参数 工作组名称
groupadd -r 工作组名称 建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID
groupadd -g 工作组名称 指定新工作组的GID,默认值是已有的最大的GID加1
示例
向系统中添加一个组ID为2000,组名为group1的新组

修改工作组
格式
groupmod -参数 工作组名称
groupmod -n 工作组名称 新用户组——将用户组的名字改为新名字修改用户组的名称和用户组的GID值
groupmod -g 工作组名称 GID——为用户组指定新的组标识号
示例
将组group1的GID修改为3000,组名修改为group11

删除工作组
格式
userdel 工作组名
被删除的组若是基本组,则必须先删除引用该基本组的用户,然后再删除该基本组
添加、删除组成员
格式
gpasswd -参数 账户 工作组
gpasswd -r 账户 工作组 删除组密码
gpasswd -a 账户 工作组 把用户加入组
gpasswd -d 账户 工作组 把用户从组中删除
gpasswd -M 账户 工作组 同时添加多个用户
gpasswd -A 账户 工作组 给组指派管理员
只有root和组管理员可以使用该权限
示例
新建账户temp1、temp2后加入group2组,并指派temp1为group2工作组的管理员

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

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

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

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

三.Linux文件系统权限
文件一般权限
查看文件详细信息
ls -l 或者 ll

文件权限构成
权限的三类对象
-
owner:所有者,缩写u
-
group :所属组,缩写g
-
other :其他人,缩写o
三种权限

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

文件与目录权限含义
| 字符 | 名称 | 对文件作用 | 对文件夹 / 目录作用 |
|---|---|---|---|
| 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

例2

例3
目录下文件的的递归更改

chown命令
作用
修改文件 / 目录的属主(owner 用户) 和属组(group 用户组)
格式
chown -参数 所有者:所属组 文件名或目录名
chown -参数 所有者:所属组 文件名或目录名
参数-R递归设置
示例
创建一个t4.txt并将其所有者和所属组改为fox

特殊权限
SUID
作用
SUID = Set User ID,仅对二进制可执行文件生效,目录无效
作用:普通用户执行该程序时,临时拥有文件属主的权限。
典型例子:passwd 命令
-
passwd 文件属主是 root
-
普通用户执行 passwd 修改密码时,临时拿到 root 权限,才能修改
/etc/shadow(只有 root 可读)

注意
-
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,此时已经创建好目录以及账户:

删除ACL权限
setfacl -x u:用户名 文件名 删除指定用户的 ACL 权限
setfacl -x g:组名 文件名 删除指定用户组的 ACL 权限
setfacl -b 文件名 删除文件的所有 ACL 权限
掩码权限umask
作用
umask 是权限掩码,控制新建文件 / 目录的默认权限。
系统预设最大权限,减去 umask 掩码,得到新建文件、文件夹最终权限。
-
新建文件的默认权限=0666-umask值
-
新建目录的默认权限=0777-umask值
查看默认umask值
umask

修改umask值
umask xxx xxx为临时修改值
四.管理Linux的联网
配置网络
概念
-
网络接口 = 系统识别的网卡设备,是主机和网络通信的出入口。
物理网卡、虚拟网卡、网桥、隧道都属于网络接口。
分类
-
物理网卡
主板插的有线网口、无线网卡
-
命名示例:
eth0、ens33、enp0s3、wlan0(无线)
-
-
虚拟接口
-
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 热点、网桥、虚拟网卡信息


启停网卡 / 网络连接
启用、禁用物理网卡;激活、断开网络配置。
[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

通过键盘选择选项
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)

-
bytes 值:数据包大小,也就是字节
-
time 值:响应时间,时间越小,速度越快
-
TTL 值:Time To Live, 表示 DNS 记录在 DNS 服务器上存在的时间,它是 IP 协议包的一个值,告诉路由器该数据包何时需要被丢弃。通过TTL 值判断目标系统类型:默认情况下,Linux 系统的 TTL 值为 64 或 255,win11 系统值为644,UNIX 主机的 TTL 值为 255
通过域名访问主机
方法一:静态解析
通过配置/etc/hosts文件实现域名解析
方法
![]()

方法二:DNS域名解析
主机需要 DNS 服务器,把域名翻译成 IP,配置文件 /etc/resolv.conf
-
临时配置(重启网卡失效)
vim /etc/resolv.conf
写入 DNS:
nameserver 223.5.5.5 nameserver 114.114.114.114
-
永久 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 等协议,多用于:
-
访问网页、调试接口(GET/POST)
-
上传 / 下载文件
-
测试服务连通性、模拟浏览器请求

VMware三种网络模式
桥接模式(Bridged)
原理
虚拟机和物理主机处于同一个局域网,相当于局域网里一台独立物理电脑。
IP 特点
和宿主机同网段,路由器分配独立 IP。
连通性
-
虚拟机 ↔ 宿主机:互通
-
虚拟机 ↔ 局域网其他电脑:互通
-
虚拟机 ↔ 外网互联网:能上网
适用场景
需要局域网内其他设备访问虚拟机(服务器、测试集群)
仅主机模式(Host-Only)
原理
只生成宿主机与虚拟机的私有虚拟网卡,完全隔离外网,不经过物理网卡。
IP 特点
VMware 自动分配独立私有网段,和真实局域网无关。
连通性
-
虚拟机 ↔ 宿主机:互通
-
虚拟机 ↔ 局域网其他机器:不通
-
虚拟机 ↔ 外网:无法上网
适用场景
纯本地测试、内网开发,不想虚拟机访问外网。
NAT 模式(网络地址转换,默认模式)
原理
宿主机充当虚拟路由器,虚拟机共享宿主机 IP 上网。
IP 特点
虚拟机使用 VMware 虚拟 NAT 网段,和宿主机不在同一真实网段。
连通性
-
虚拟机 ↔ 宿主机:互通
-
虚拟机 → 外网:可以上网
-
局域网其他电脑 → 虚拟机:默认不通(需端口转发)
适用场景
日常学习 Linux、上网下载软件,最常用默认模式。
五.管理Linux软件包和进程
安装过程
-
下载解压缩源码压缩包
-
分析安装软件环境
-
编译软件
-
安装软件
安装nginx软件
浏览器访问nginx.org

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

下载完成后拖到Linux系统

解压缩
tar zxf nginx-1.30.3.tar.gz
![]()
检查环境,可知缺少部分软件,下载即可
![]()

环境检测成功如图

编译
make

安装
make install

进入目录文件查看得知软件部署完毕
修改环境变量
vim .bash_profile
![]()

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

运行程序

配置yum源
建立本地源
vim CentOS-Base.repo
enabled=0 禁用仓库

# 将本地光盘挂载至本地目录/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个硬盘

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 |
七.搭建论坛
下载所需环境
数据库:


加固数据库

下载scl源文件
![]()
更改SCL文件里网络路径
[root@server1 ~]# cd /etc/yum.repos.d [root@server1 yum.repos.d]# vim CentOS-SCLo-scl.repo

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

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

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

配置nginx


浏览器输入域名/install/php



更多推荐



所有评论(0)