linux全称GNU/unix,是一种免费使用和自由传播的类unix操作系统,是一种多任务,多用户,支持多线程和多cpu的操作系统,如Debian,Rhel,SUSE,Oracle Linux。

unix也是一种操作系统,但是其商业化后变得非常封闭且昂贵,且都和价格较高的机器绑定,而linux开源且免费,可靠稳定,性价比很高。

操作系统是连接软硬件的中间层,软件上执行的操作通过操作系统传递给硬件进行响应。

Linux特点:
免费开源,可靠稳定安全,多平台(手机,数码相机等),多用户多任务,多线程多cpu

安卓系统是基于linux开发的系统,主要用于便携设备手机,数码相机,平板电脑等,由google公司开发

红帽是一家开源软件方案供应商,总部位于美国,主要为操作系统,储存,中间件,虚拟化和云计算提供支持服务,红帽的开发源码模式为企业提供跨物理,虚拟,云平台的企业运算解决方案,帮助企业降本增效。也同时和全球用户合作提供技术支持,咨询培训服务

2018年10月29日,ibm以340亿美元收购red hat,其设计领域包括操作系统,储存,云计算,中间件和虚拟化

1.红帽企业Linux7 2014年6月发布,基于rhel7操作系统,企业可整合裸机服务器,虚拟机,基础设施即服务,平台即服务,构建一个强大的数据中心,满足各式各样的需求,最后的版本是7.9

2.红帽企业linux8 2019年5月发布,基于rhel8操作系统,针对混合云时代重新设计的操作系统,旨在支持从企业数据中心到多个公共云的负载和操作,最后的版本是8.5

3.红帽企业Linux9 2022年5月发布,第一个基于centos stream 构建的rhel9操作系统,从裸机服务器,云提供商,到最边缘的企业网络,该系统能跨越混合云环境,推动更加一致的创新,最后的版本是9.6

4.红帽企业Linux10 2025年5月21日发布,基于linux6.12内核开发,是一款企业级操作系统,该系统整合了红帽的云原生技术,安全架构,和ai方面的创新技术,专为混合云和企业运算技术设计

Centos Linux发行版是一款稳定的,可预测的,可复现的,可管理的平台,源于RHEL基于开放源代码规定释出的源码编译的,它是一款开源项目,旨在与RHEL在功能上兼容
Centos完全免费,可以在它的基础上构筑和rhel一样的企业级linux操作系统,不需要向其支付费用
每个版本的Centos都可以通过安全更新获得10年的支持,大概每两年发布一次的新的Centos系统,每个版本大概6个月更新一次以便支持新的硬件,通过这样建立一个安全稳定,高预测性,高重复性的linux环境

CentOS Linux、CentOS Stream 和 RHEL 同属红帽生态,核心差异在于开发位置、更新模式、支持与稳定性,三者是上下游与商业/社区的关系。

一、三者的核心联系(红帽生态链)

它们共享同一套技术栈,形成完整的开发与发布链路:

  1. Fedora:最上游,是新技术、新功能的试验场。
  2. CentOS Stream:RHEL 的上游开发分支,用于预发布、测试、集成即将进入 RHEL 的代码。
  3. RHEL(Red Hat Enterprise Linux):经过严格测试、稳定发布的商业企业版
  4. CentOS Linux(已停止):RHEL 的下游重建版,是 RHEL 发布后的免费克隆。

一句话总结:
Fedora → CentOS Stream → RHEL → CentOS Linux(已停)


二、三者详细区别对比

1. 定位与开发位置

  • RHEL(红帽企业Linux)
    • 定位:商业付费企业级发行版,面向生产环境,提供官方支持与SLA。
    • 位置:下游稳定版,所有代码经过充分测试后发布。
  • CentOS Linux(传统CentOS)
    • 定位:免费社区版,RHEL 的“免费克隆”,移除红帽商标。
    • 位置:RHEL 的下游,在 RHEL 发布后,基于其源码重新编译而成。
  • CentOS Stream
    • 定位:免费滚动开发版,RHEL 的“预览版/开发版”。
    • 位置:RHEL 的上游,代码会先进入 Stream,测试稳定后才合并到 RHEL。

2. 更新与发布模式

  • RHEL
    • 固定版本号(如 RHEL 8、9),定期发布小版本
    • 更新保守、严格,追求极致稳定,补丁以安全修复为主。
  • CentOS Linux
    • 与 RHEL 版本一一对应(如 CentOS 8 对应 RHEL 8)。
    • 大版本更新滞后 RHEL 数月,小更新同步但略晚。
  • CentOS Stream
    • 滚动更新,没有传统意义上的“小版本发布”,代码就绪即推送。
    • 版本号对应 RHEL 大版本(如 Stream 9 对应 RHEL 9 系列),持续接收下一个 RHEL 小版本的代码。

3. 生命周期与支持

  • RHEL
    • 付费订阅,提供**10年+**官方技术支持、安全补丁、硬件认证、知识库等。
    • 有完整的服务等级协议(SLA)。
  • CentOS Linux
    • 社区支持,无官方SLA。
    • 已停止更新:CentOS 8 已于 2021-12-31 结束支持;CentOS 7 于 2024-06-30 结束支持。
  • CentOS Stream
    • 社区支持,无官方SLA。
    • 生命周期与对应 RHEL 大版本的全支持阶段一致(约5年)。

4. 稳定性与适用场景

  • RHEL
    • 最高稳定性,经过红帽全面QA与硬件认证。
    • 适用:生产环境、关键业务、数据库、核心服务器
  • CentOS Linux
    • 极高稳定性,与 RHEL 二进制兼容。
    • 适用:非关键生产、学习、测试(现已不可用)。
  • CentOS Stream
    • 稳定性中等,比 Fedora 稳,但比 RHEL 激进。
    • 适用:开发、预生产、测试、提前体验 RHEL 新特性,不建议用于核心生产。

三、关键时间线与现状

  • 2020年底:红帽宣布CentOS Linux 8 提前终止,重心转向 CentOS Stream。
  • 2021-12-31:CentOS Linux 8 停止支持。
  • 2024-06-30:CentOS Linux 7 停止支持。
  • 现状:
    • RHEL:主流商业企业版,持续更新。
    • CentOS Linux:历史产物,不再维护。
    • CentOS Stream:红帽官方主推的社区版,是未来 RHEL 小版本的上游,开发公测版。

国产linux
1.kylin os:麒麟软件公司开发, Debian系
2.Red Flag os:红旗软件公司开发,Debian系
3.中科方德 os:中科方得软件公司开发,Debian系
4.New Star os:由中兴通讯子公司中兴新支点开发
5.deepin os:武汉深之度科技公司开发,Debian系
6.统信U os:统信软件技术公司开发,Debian系
7.Start os:东莞软件技术公司开发,前身是雨林木风 os,Debian系
*8.Euler os:华为捐赠给开放原子开源中心的linux操作系统,基于Centos源代码开发,面向企业级的商用linux发行版,开源(Open Euler os)
9.Hope Edge os:江苏润和软件公司开发的一款轻量级物联网linux操作系统
10.Fyde os:燧炻科技公司开发的一款轻量级中国版google chrome操作系统
11.Harmoney os:华为开发的鸿蒙系统,用于物联网和智能终端
*12.CTyun os:基于华为的开源欧拉,经过中国电信天翼技术团队的改进,CTyun os内核的各项性能指标全面提升,相比于Centos7.6cpu调度时延降低了约5%,存储关键路径每面读写次数提升了约3%,容器部署密度也大约提升了3%

VMware workstation Pro
可以借助它在单台linux或者pc windows上作为虚拟机安装多个操作系统
1.选择安装语言,推荐选择英文
2.日期时间选择上海时区时间
3.键盘选择默认
4.语言环境
5.介质源默认,也就是我们选择的镜像,可以远程下载
6.定制软件包按需安装,可以选择最小的安装,后续如果需要可以安装完成后自行安装
7.磁盘分区,类似于windows分盘,通常是三个分区(boot,/,swap(交换分区))
swap相当于windows的虚拟内存

关于swap分区,实际上就是从硬盘上划分出来的一小块分区,当物理内存不够的时候,为了不让系统崩溃,操作系统将那些在后台不活跃的进程或者缓存挪到swap分区,将物理内存腾出来给占用较大的进程用
如果是物理内存小于4gb,那么swap内存就可以设置两倍的物理内存大小,如果大于4gb,就可以设置2或4的固定值,防止操作系统性能下降,swap内存只是做应急用

换出:将不活跃的进程挪进swap分区
换入:不活跃的进程被唤醒重新进入物理内存,此时可能会挤掉其他进程

8.Kdump(关闭),是Linux中一个内核转储机制,用于在内核崩溃时保存相关信息,平常我们个人使用时可以关闭它,因为使用kdump需要预留一部分物理内存,这对个人开发者测试是极其不值得,且如果内核崩溃一般都是开发者自己的原因无需分析内核转储的文件,一般只需要重装系统就能解决
内核转储的文件可能非常巨大,基本等同物理大小,如果磁盘太小很容易爆满导致故障

9.网络和主机名,需要远程下载资源时网络可以选择打开,主机名可以自己设置
10.安全策略,通过scap(Security Content Automation Protocol)标准定义,如果设定了安全策略安装程序会自动把系统配置为符合安全标准的状态,例如强密码策略,ssh端口配置
在实际生产环境中一般不会选择很严格的安全策略,因为其有可能会导致一些老旧的脚本跑不通,服务器部署变得困难,更加推荐系统安装完成后,根据业务需求一步步手动加固,这样更灵活,排查问题也方便

11.root密码
12.创建普通用户
13.license接受
14.桌面初始化,首语言选择
15.关闭selinux(安全增强型linux),
selinux旨防提权,防止横向移动,严格规定用户的权限范围,让有些危险的操作即使是root用户也不能执行
vim /etc/selinux/config
SELINUX=disabled
重启后生效
一共有三种模式
1.严格模式Enforcing(阻止并记录)
2.宽容模式Permissive(不阻止但记录)
3.禁用模式Disabled(完全关闭)不加载安全策略
setenforce 0 临时关闭selinux,相当于切换到Permissive
getenforce 获取selinux状态

16.重启(reboot,shutdown -r 0) r是restart
安全关闭系统 shutdown -h 0 h是halt

runlevel等级介绍

等级 英文名称 状态 用途 对应 systemd Target
0 Halt 关机 安全停机、断电 poweroff.target
1 Single User 单用户 维护、修密码、文件系统 rescue.target
2 Multiuser 多用户 本地多用户、无网络 multi-user.target(部分等同 3)
3 Multiuser with Network 完整多用户(文本) 服务器默认、远程登录、网络服务 multi-user.target
4 Reserved 保留 自定义、特殊场景 自定义
5 Graphical 图形界面 桌面、GUI 登录 graphical.target
6 Reboot 重启 正常重启、循环重启 reboot.target

桌面布局介绍

Ctrl+Alt+F1图形界面模式
Ctrl+Alt+F2命令行界面模式

设置主机名为自己姓名全拼
hostnamectl set-hostname zhongli

Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell(命令行解释器) 。事实上,还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用。
bash是大多数Linux系统以及Mac OS X默认的shell,它能运行于大多数类Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现Windows的POSIX虚拟接口

环境变量设置
.bashrc与.bash_profile区别
几乎没有区别,.bashrc在交互式非登录shell时读取,.bash_profile在交互式登录shell时读取;但前者可以通过后者在文件中添加判断条件同时读取

[root@thy ~]#
[thy@thy root]$

tab补全信息 上下翻命令
常用快捷操作
ctrl+a 移动光标至行首
ctrl+e 移动光标至行尾
ctrl+u 剪切光标到行首处的字符
ctrl+向左箭头
ctrl+向右箭头
ctrl+d 退出终端
ctrl+c 终止当前正在运行的命令

基础命令

  • date:查看/更改系统时间
  • uptime:查看系统自启动以来的运行时长
  • who:查看所有已登录用户的信息
  • history:查看成功运行的命令历史记录
  • hostname:查看当前主机名
  • whoami:查看当前登录的用户名
  • id:查看当前用户的UID/GID等身份信息
  • uname -a:查看系统详细内核信息
  • cat /etc/redhat-release:查看红帽系列系统版本信息
  • cat /etc/os-release:其他系列系统版本信息
  • cat /proc/cpuinfo:查看CPU硬件详细信息
  • cat /proc/meminfo:查看物理内存详细信息
  • free:查看物理内存的可用/使用大小
  • su:用户提权/切换(su - name 带环境变量切换,su name 仅切换用户)
  • passwd:更改当前用户/指定用户密码
  • chown:设置文件/目录的所有者和所属组
  • chmod:设置用户对文件/目录的读、写、执行权限
  • ls:列出当前目录下的所有文件和目录
  • cd:切换工作目录(cd ~ 回主目录,cd .. 回上级目录)
  • pwd:显示当前工作目录的完整绝对路径
  • cp:复制文件/目录(cp -r 递归复制目录)
  • rm:删除文件/目录(rm -rf 强制递归删除)
  • mv:移动/重命名文件/目录
  • mkdir:创建目录(mkdir -p 递归创建多级目录)
  • rmdir:删除空目录
  • file:查看指定文件的类型/属性
  • touch:创建空文件/更改文件的时间戳属性
  • find:在指定目录下查找文件/目录
    • -name pattern:按文件名查找,支持使用通配符 *?
    • -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
    • -size [+-]size[cwbkMG]:按文件大小查找,支持使用 +- 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
    • -mtime days:按修改时间查找,支持使用 +- 表示在指定天数前或后,days 是一个整数表示天数。
    • -user username:按文件所有者查找。
    • -group groupname:按文件所属组查找。
    • -exec rm {} \ ;查找后执行的操作
    • -perm 拥有指定权限的
  • du:显示指定文件/目录占用的磁盘空间大小
  • df:显示文件系统的磁盘空间使用情况(含挂载点、使用率)
  • ifconfig:查看/更改网卡网络配置
  • netstat:查看网络连接、端口、路由等配置信息
  • route:查看/更改系统路由表
  • mount:挂载文件系统/设备
  • umount:卸载已挂载的文件系统/设备
  • gzip:压缩文件(生成.gz格式,原文件消失)
  • gunzip:解压缩.gz文件(等同于gzip -d
  • tar:打包/压缩/解压缩(常用:tar -zcvf 压缩,tar -zxvf 解压缩)
    末尾添加--exclude=排除指定模式文件,必须放到要压缩目录的前面
    -p 选项用于保留文件原有权限
    -z压缩文件为tar.gz格式
    -j压缩文件为tar.bz2格式
    -J压缩文件为tar.xz格式
  • cat:一次性输出文件全部内容
  • more:滚动式查看文件内容(仅向下翻)
  • less:分页式查看文件内容(上下翻、搜索)
  • tail:查看文件行尾内容(tail -f 实时监控最新内容)
  • head:查看文件行首内容
  • man:查看命令/配置文件的帮助手册(最常用)
  • info:查看更详细的命令说明
  • --help:查看命令的简易帮助文档(如 ls --help
  • top:实时动态显示当前正在运行的进程(按资源占用排序)
  • ps:查看当前系统的进程状态(常用 ps -ef
    • ps -aux:BSD 风格格式,显示更全、更易读,适合看负载、CPU / 内存占用
      • a = 显示所有用户的进程(all users)
      • u = 显示用户、CPU、内存等详细信息(user-oriented)
      • x = 显示无终端的进程(后台进程)
    • ps -ef:UNIX System V 风格,列更精简,侧重看父子进程关系*
      • -e = 显示所有进程(every process)
      • -f = 完整格式输出(full format)
  • kill:杀死指定进程(kill -9 进程ID 强制杀死)
  • pkill:杀死所有相关进程(和killall等价)
  • clear:清空终端屏幕内容
  • which:查找可执行文件的绝对路径
  • whereis:查找可执行文件的二进制、源代码、man手册路径
  • bc:调用任意精度计算器(终端内进行数值计算)
    -tar -zxvf xxx.tar.gz -C directory 解压缩一个被gzip 压缩的归档文件到指定目录
  • tar -zcvf xxx+$(date +\%Y\%m\%d\%H\%M\%S).tar.gz directory定时任务备份时带备份时间后缀
  • ntpdate ntp服务器地址 将系统时间同步到网络时间服务器
  • w 查看所有已登陆用户的详细信息(用户名,登录终端,登陆时间等)
  • who -u 查看所有已登录用户的信息
  • last -a 查看历史登录记录
  • fdisk -l/parted -l查看所有磁盘分区信息
  • chronyd -q "server ntp.aliyun.com iburst"临时同步系统时间到ntp服务器时间
  • iostat 查看磁盘 IO 明细
  • vmstat 查看系统整体资源
  • crontab -l 查看当前用户定时任务
  • cat /etc/crontab 查看系统级定时任务
  • ls /var/spool/cron 列出用户存放定时任务目录中的文件
  • cat /var/spool/cron/* 查看所有用户定时任务内容
  • sysctl -a 查看所有内核参数
  • vi /etc/security/limits.conf 限制用户进程数的文件
  • vi /etc/sudoers 规定sudo命令可以做什么的文件
  • vi /etc/bashrc 系统全局的的bash配置文件,对所有用户生效
  • runlevel查看运行级别数字
  • systemctl get-default 查看运行级别

如何查看cpu,内存和磁盘使用情况
top,lscpu
top free -h
df -h –total

文件颜色分类
蓝色:目录
浅蓝色:链接
黄色:字符设备
绿色:可执行文件
红色:压缩包
灰色:简单文件

top总结补充

top -o %MEM 系统进程占用内存排序
top -o %CPU 系统进程占用cpu排序
top -o TIME+ 系统进程占用cpu时间

二、top 界面逐行详解(最核心)

第 1 行:系统整体状态(时间、登录、负载)
1
top - 15:30:00 up 10 days,  3:45,  2 users,  load average: 0.05, 0.03, 0.01

含义:

  • 15:30:00:当前系统时间
  • up 10 days:系统已运行 10 天(没重启)
  • 2 users:当前登录 2 个用户
  • load average: 0.05, 0.03, 0.011分钟、5分钟、15分钟系统平均负载
    • 单核 CPU:>1 就开始忙
    • 多核 CPU:总核数以内都正常
第 2 行:进程总数统计
1
Tasks: 150 total,   1 running, 148 sleeping,   0 stopped,   1 zombie
  • total:总进程数
  • running:正在运行的进程
  • sleeping:休眠进程(最常见)
  • stopped:停止的进程
  • zombie:僵尸进程(子进程挂了,但是父进程还没有清理)

第 3 行:CPU 使用率(最重要)
1
%Cpu(s):  2.0 us,  0.5 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.5 si,  0.0 st

每个字段含义:

  • us:用户进程占用 CPU(正常 1–30%)
  • sy:系统内核占用 CPU
  • ni:优先级调整过的进程
  • id:空闲 CPU(越高越好)
  • wa:IO 等待(硬盘慢、磁盘压力大时升高)
  • hi:硬件中断
  • si:软件中断
  • st:虚拟化被偷走的资源(云服务器,物理机抢占cpu时间越长值越高)

快速判断:

  • id 很低 → CPU 满了
  • wa 很高 → 硬盘/IO 慢

第 4 行:内存(Mem)
1
MiB Mem :  3800 total,  1200 free,  1500 used,  1100 buff/cache
  • total:总内存
  • free:完全空闲内存
  • used:已用内存
  • buff(写到硬盘.设备时的临时缓冲)/cache(从硬盘,设备读出的缓存):系统缓存(不是真的被占用

重点:
Linux 会把空闲内存当缓存,所以used 高不代表内存不够,要看 free + buff/cache


第 5 行:交换分区(Swap)
1
MiB Swap:  2048 total,  2048 free,     0 used,1024 avail mem
  • used 越高 → 内存越不够用
  • 经常 swap 被使用 → 建议加内存
    -avail mem真实可用的物理内存

三、top 进程列表(最关键的监控区域)

从第 7 行开始是进程列表:

1
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND

每一列含义(必须掌握)

  1. PID:进程 ID(杀进程用)
  2. USER:进程所属用户
  3. PR:进程的实际优先级
  4. NI:nice 值(负数=优先级高,用户调整的优先级偏移量)
  5. VIRT:虚拟内存(不代表真实占用,进程预估/预测的内存使用量)
  6. RES真实物理内存占用(重点看)
  7. SHR:共享内存
  8. S:进程状态
    • R = running
    • S = sleeping
    • Z = zombie(僵尸)
  9. %CPU:CPU 使用率
  10. %MEM:内存使用率
  11. TIME+:进程累计占用 CPU 时间
  12. COMMAND:进程名称

四、top 常用快捷键

  • P:按 CPU 使用率排序(最常用)
  • M:按内存使用率排序
  • 1:显示每个 CPU 核心使用率
  • q:退出 top
  • h:帮助
  • k:输入 PID 杀进程
  • c:显示完整命令行
  • u:按用户查看进程

vi编辑器
三种模式
1)命令模式 dd剪切 yy复制 G跳转到最后一行 gg跳转到第一行
:进入底线命令模式 p粘贴内容到光标下方 P粘贴内容到光标上方 u撤销上一次的操作 Ctrl+r重做上一次的撤销操作
2)插入模式 按a或者i,o,O进入插入模式
3)esc:进入底线命令模式
编辑器显示行号
1.永久显示
vi /etc/virc 和vi /etc/vimrc
在文件最后一行添加
set number
2.临时显示
在底线命令模式时输入
:set nu

|grep
关于grep:按字符串 / 正则搜索文本并输出匹配行
grep -i 忽略大小写

1
2
3
-v是grep排除的参数,例:查询不包含字母abc的行,例如cat test.txt |grep -v 'abc'
^代表行首,$代表行尾。 ^$是空行的意思
^#表示首字母为#的行,linux里的文件,#号开头一般都是注释内容
1
2
3
4
5
cat /etc/ssh/sshd_config|grep -v ^# |grep -v ^$>>/tmp/a.log
>覆盖
>>追加
< 输入重定向,将符号右边中的文件内容作为左边命令的标准输入
<<即时输入重定向,将输入命令即时写入文件,通常用于写shell脚本

目录结构
/根目录
/usr 系统软件、应用程序、库、命令存放处
/bin用户级二进制文件存放目录 /sbin系统级二进制文件存放目录 centos7、8中是usr/bin或者usr/sbin的软链接
/var/ 经常变化的文件存放的目录,系统和服务日志存放目录
/boot 启动系统要用的文件:内核、grub 引导文件
/etc 系统环境配置文件目录
/opt 用户的安装程序目录,第三方软件目录
/tmp 临时文件,谁都能写,重启自动清空
/dev 设备文件目录
硬盘:/dev/sda、/dev/sdb
光驱:/dev/cdrom
终端:/dev/tty
空设备:/dev/null
无限填0的设备:/dev/zero
/home 普通用户家目录
/lib 动态链接库目录
/proc 进程和缓存目录 (不占硬盘,内存动态生成的虚拟文件系统),操作系统运行时的状态

总结/var/log
存放系统与所有服务的日志文件,默认只有 root 能完整查看

日志文件 作用 / 记录内容
/var/log/messages 系统全局日志,大部分服务、内核、系统报错都在这里(CentOS/RHEL)
/var/log/syslog 类Ubuntu/Debian系统的全局系统日志,类似messages
/var/log/dmesg 内核启动、硬件检测、驱动加载信息
/var/log/secure SSH登录、用户认证、sudo操作等安全相关日志
/var/log/cron 定时任务 crontab 的执行记录与报错
/var/log/maillog 邮件服务(postfix/sendmail)收发日志
/var/log/boot.log 系统启动过程日志
/var/log/firewalld 防火墙 firewalld 运行日志
/var/log/yum.log Yum/dnf 安装、卸载、更新软件包记录
/var/log/nginx/access.log Nginx访问日志
/var/log/nginx/error.log Nginx错误日志
/var/log/mysqld.log MySQL/MariaDB 启动、查询、错误日志

用户及用户组
添加 删除
useradd userdel
userdel -r 删除用户时同时删除家目录
示例:useradd -d -m -s -u -g -c -e username

groupadd groupdel
修改用户及用户组
usermod groupmod

/etc/passwd 存放所有用户的信息,对所有用户可读,有7段
用户名:密码占位(x 表示密码在 shadow:UID(用户 ID):GID(主组 ID):注释 / 说明:家目录
登录 Shell(/bin/bash 表示能登录)

/etc/group 存放所有用户组的信息,对所有用户可读,有4段
组名:密码占位符:GID:此组的附加用户

/etc/shadow 存放所有用户加密密码和密码策略,只有root用户可读,有9段
用户名:加密密码:最后修改时间:密码最小有效期:密码最大有效期:密码到期前警告期:不活动期密码过期后仍能登录:账号过期时间:保留字段

示例:修改上文件中的值chage -E -m -M -W -I username

ls -l aaa
-rw-r–r– 1 root root 1024 3月 10 14:30 aaa

chown 修改文件或者目录 拥有者或者和拥有者及用户组

chmod 修改文件或者目录 权限
r 4 读
w 2 写
x 1 执行
用户:用户组:其他
文件所有者:文件所有者所在用户组:不属于该用户组的其他用户

常用权限组:
755
644
700

-R 对当前目录及其子目录进行递归的操作

问题:
1)特殊权限:

s:进行权限传递;有时候是大写,这时候说明文件底层没有执行权限,此时s无效
SUID4: 临时切换用户身份为文件所有者,操作执行完成之后恢复
比如passwd
SGID2:一个组用户创建的文件继承上级目录所属组,这样其他的目录所属组用户也能对文件进行操作

t:防止误操作
sticky1:同一组的用户可以任意创建文件,但是无法删除或者重命名别人的文件
比如/tmp 用户只能删除自己的临时文件

设置SUID 4777 u+s
设置SGID 2777 g+s
设置Sticky 1777 o+t
全部都给 7777 u+s,g+s,o+t

权限开头
d目录
-普通文件
l链接
软链接:可以跨文件系统,可以对目录进行链接
硬链接:不能跨文件系统 ,不能对目录链接
b块设备文件
c字符设备文件

2)设备:
b:表示块设备文件,以块为单位进行读写,随机访问有缓冲,储存量大,例如硬盘,U盘,光盘 ,我们有时候写文档没保存结果电脑突然断电,重启之后文档内容就没了,这是因为没保存的文件内容仍然在缓冲区没有写进硬盘

c:表示字符设备文件,以字符单位进行读写,顺序访问无缓冲,实时性强,例如键盘,鼠标,终端,做什么动作及时反馈,比如命令行,敲什么出来什么

sda表示整个硬盘 sda1硬盘上的一个分区 sda2也是硬盘上的一个分区 传统MBR分区只允许建立4个分区,如果要建立更多分区必须扩展一个分区,这个扩展的分区只是一个外壳,里面可以建立许多的逻辑分区,逻辑分区必须从5开始;现代为GPT分区,可以划分任意数量的分区
tty tty1代表终端(已经涵盖为终端接口的统称,泛指linux中所有与用户交互的终端会话),配置文件在/etc/systemd/logind.conf

网络配置
1、图形化界面
2、编辑配置文件 直接编辑配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33

从centos8开始network-scripts文件夹消失,此时修改配置文件都是nmcli的配置文件
3、nmcli(自学)用于替代ifconfig命令,修改配置精准且永久生效
查看nmcli d/c
查看网络状态
nmcli general status
管理网络连接
nmcli connection show
管理网络设备
nmcli device show
管理wifi
nmcli device wifi list
配置网络
nmcli connection modify ens33 ipv4.addresses 192.168.142.99/24 ipv4.gateway 192.168.142.2 ipv4.dns 114.114.114.114
修改配置后一键激活
nmcli connection up 网卡名
添加默认网关
route add default gw 1.1.1.1
ip route add default via 1.1.1.1

nmcli网卡配置文件,格式和内容
配置文件在/etc/NetworkManager/system-connections
内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[connection]
id=ens33 # 连接名称(nmcli 显示的名称)
uuid=xxxx-xxxx-xxxx # 唯一标识(nmcli 自动生成)
type=ethernet # 连接类型(ethernet/802-11-wireless/vlan 等)
interface-name=ens33 # 网卡名(如 eth0、ens33、wlan0)
autoconnect=yes # 开机自动连接
permissions= # 权限(默认空)

[ethernet]
mac-address-blacklist= # MAC 黑名单(默认空)
mtu=1500 # MTU 值(默认1500),最大传输单元

[ipv4]
method=manual # IP 配置方式(manual=静态/dhcp=自动/disabled=禁用)
addresses=192.168.1.100/24,192.168.1.1 # IP/子网掩码 + 网关(多IP用逗号分隔)
dns=8.8.8.8;114.114.114.114 # DNS 服务器(分号分隔)
dns-search=example.com # DNS 搜索域(可选,自动补全后缀)
may-fail=no # 配置失败是否影响连接(no=配置失败直接不启动,yes=配置失败仍然启动,缺功能)

[ipv6]
method=disabled # 禁用 IPv6(常用,也可设 auto/manual)

[proxy]
method=none # 代理(默认无)

4、双网卡绑定(自学)bonding
分为主备模式:一张网卡主用,一张网卡做备用
和轮询模式:两张网卡一起用
将两张物理网卡绑定为一张逻辑网卡

一、核心原理

  • 2 块物理网卡 绑定成 1 块逻辑网卡 bond0
  • 常用模式:
    • mode=1(主备):一块坏了自动切另一块,最稳
    • mode=0(轮询):负载均衡
  • 生产/考试 优先用 mode=1

二、环境说明

假设:

  • 物理网卡:eth0eth1
  • 绑定网卡:bond0
  • IP:192.168.1.100/24
  • 网关:192.168.1.1
  • DNS:223.5.5.5

三、步骤(直接复制执行)

1. 安装 bonding 模块(一般已装)

1
yum install -y bonding

2. 加载模块

1
2
modprobe bonding
echo bonding >> /etc/modules-load.d/bonding.conf

四、配置文件(重点)

进入网卡目录:

1
cd /etc/sysconfig/network-scripts/

1)创建 bond0 配置

1
vi ifcfg-bond0

内容:

1
2
3
4
5
6
7
8
9
10
11
TYPE=Bond
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
ONBOOT=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=223.5.5.5
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"

2)配置第一块网卡 eth0

1
vi ifcfg-eth0

内容:

1
2
3
4
5
6
7
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes

3)配置第二块网卡 eth1

1
vi ifcfg-eth1

内容:

1
2
3
4
5
6
7
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes

五、重启网络生效

CentOS 7

1
systemctl restart network

CentOS 8 / Rocky 8

1
2
nmcli connection reload
systemctl restart NetworkManager

六、查看绑定状态

1
cat /proc/net/bonding/bond0

看到:

  • Slave Interface: eth0
  • Slave Interface: eth1
  • Mode: fault-tolerance (active-backup)

就是成功了。


七、常用模式说明

  • mode=0 平衡轮询(负载)
  • mode=1 主备(高可用,考试/生产最常用)
  • mode=4 802.3ad(需要交换机支持链路聚合)

!!!当存在多网卡时,仅第一张网卡配置默认网关,其他网卡通信写路由。

内网网卡配置静态路由 nmcli connection modify ens34 ipv4.gateway “” && nmcli connections modify ens34 +ipv4.routes”10.0.0.0/24 10.0.0.1”

相关网络命令
ifconfig 显示或设置网络设备
netstat -nr 显示ip路由表
netstat -an 显示活跃的网络连接,包括tcp(数据传输协议)、udp(用户数据报协议),走网卡,要经过复杂的网络协议;和unix套接字,走文件系统,a写b读,但不显示进程和id
netstat -natlp 显示活跃的网络tcp连接,并显示进程id和程序名

ss 查看套接字统计信息命令,速度更快,提供更详细的网络链接
ss -ln 只显示端口
ss -lnp 查端口并显示进程
ss -a 查看所有链接 tcp/udp/unix套接字

ethtool 查询修改网卡设置
ifdown/ifup 关闭或者启动指定的网卡

route add/del -host/-net 增加/删除 数据包到内网服务器的路由
route add -net 10.0.0.0/24 gw 192.168.1.254 添加路由
添加静态路由
route add -net 目标网段 netmask 子网掩码 gw 网关IP dev 网卡名
route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.254 dev ens33
添加主机路由
route add -host 目标IP gw 网关IP dev 网卡名
route add -host 192.168.2.100 gw 192.168.1.254 dev ens33

SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
telnet 也是远程桌面链接,默认端口为23

默认端口22,相关配置文件在/etc/ssh/下
ssh有两个配置文件,ssh_config和sshd_config,前者是客户端的配置文件,后者是服务端的配置文件
ssh配置文件修改完成后使用sshd -t验证语法,无输出则说明语法正确
从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)输入密码登录
第二种级别(基于密匙的安全验证)客户端生成公钥和私钥,公钥放在服务器上是加密的,私钥自己保存是解密的

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

客户端包含ssh程序以及像scp(远程拷贝)指定文件进行本地和远程的传输、slogin(远程登陆)直接登录远程服务器的shell、sftp(安全文件传输)可以浏览和传输远程服务器的文件,等其他的应用程序。

scp

1
2
3
4
5
# 本地 → 远程
scp 本地文件 远程用户@IP:远程路径

# 远程 → 本地
scp 远程用户@IP:远程文件 本地路径

sftp

1
2
3
4
5
6
7
8
9
10
sftp user@192.168.1.100

进入后常用命令
- `ls`:看远程目录
- `lls`:看本地目录
- `cd`:切换远程目录
- `lcd`:切换本地目录
- `get 文件名`:下载
- `put 文件名`:上传
- `exit`:退出

slogin

1
就是ssh

sshd_config 配置文件常见的安全加固参数修改
Port 18933 ssh;连接的默认端口
PermitRootLogin no 是否允许远程用户直接以root登陆,一般都需要进入提权输入密码保证安全
PermitEmptyPasswords no 是否允许空密码用户登录
PasswordAuthentication yes 是否进行密码验证 口令验证

ssh配置免密登录

1
2
3
4
5
ssh-keygen -t rsa
ssh-copy-id root@192.168.142.67
vi /etc/ssh/sshd_config
passwordAuthentication no
systemctl restart sshd

/etc/services 端口号与服务名称的对照表,用于让系统和程序识别端口对应的服务

如果修改或添加了/etc/systemd/system下的*.service后需要执行命令systemctl daemon-reload

如果ssh登录对话框反应异常慢
修改sshd_config
改UseDNS yes 为no

systemctl stop sshd
systemctl start sshd
systemctl restart sshd
systemctl status sshd

PS:如果配置文件修改正确 但是服务启动失败 请检查selinux状态,
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]#

安装方式
1.源码编译安装/configure; make; make install

1. 准备编译环境

1
2
# 安装编译依赖(编译器、依赖库)
dnf install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel wget
  • gcc/gcc-c++:C/C++ 编译器(核心)
  • pcre-devel:正则表达式库(Nginx 地址重写必备)
  • zlib-devel:压缩库(传输压缩必备)
  • openssl-devel:SSL 库(HTTPS 必备)

2. 下载源码包

1
2
3
4
5
6
# 下载 Nginx 稳定版源码(可替换为最新版本)
wget https://nginx.org/download/nginx-1.26.0.tar.gz

# 解压
tar -zxvf nginx-1.26.0.tar.gz
cd nginx-1.26.0

3. 配置编译参数(核心:自定义功能)

1
2
3
4
5
6
7
# 配置编译参数(指定安装路径、启用/禁用模块)
./configure \
--prefix=/usr/local/nginx \ # 安装根目录
--sbin-path=/usr/local/nginx/sbin/nginx \ # 可执行文件路径
--conf-path=/usr/local/nginx/conf/nginx.conf \ # 配置文件路径
--with-http_ssl_module \ # 启用 HTTPS 模块
--with-http_gzip_static_module # 启用 gzip 压缩模块

./configure –prefix=/usr/local/nginx –sbin-path=/usr/local/nginx/sbin/nginx –conf-path=/usr/local/nginx/conf/nginx.conf –with-http_ssl_module –with-http_gzip_static_module

  • 执行后无报错 → 配置成功;若报错,检查依赖是否安装完整。

4. 编译 + 安装

1
2
3
4
5
# 编译(-j 后接 CPU 核心数,加速编译,如 -j4)
make -j2

# 安装(将编译好的文件复制到指定路径)
make install

5. 验证安装 & 启动

1
2
3
4
5
6
7
8
# 验证版本(确认安装成功)
/usr/local/nginx/sbin/nginx -v

# 启动 Nginx
/usr/local/nginx/sbin/nginx

# 验证运行状态
ss -tulnp | grep nginx

2.直接下载二进制可执行文件解压即用

1
2
3
4
5
6
7
# 重新创建临时目录
mkdir -p /tmp/nodejs && cd /tmp/nodejs

# 下载 Node.js 18.20.1(适配 CentOS 7/8,无库版本问题)
wget https://nodejs.org/dist/v18.20.1/node-v18.20.1-linux-x64.tar.xz
# 国内镜像(更快):
# wget https://cdn.npmmirror.com/binaries/node/v18.20.1/node-v18.20.1-linux-x64.tar.xz

步骤 1:解压安装并验证

1
2
3
4
5
6
7
8
9
10
11
# 解压
tar -xJf node-v18.20.1-linux-x64.tar.xz
# 移动到系统目录
mv node-v18.20.1-linux-x64 /usr/local/nodejs
# 配置环境变量(若之前配过可跳过)
echo 'export PATH=$PATH:/usr/local/nodejs/bin' >> /etc/profile
source /etc/profile

# 验证(无报错即成功)
node -v # 输出 v18.20.1
npm -v # 输出 10.5.0

rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
套件:软件包工具集合

rpm -qa |grep xxx 查询所有含关键词xxx的套件
rpm -ivh xxx.rpm 安装套件
rpm -e xxx删除指定的套件
rpm -e xxx –nodeps  强制卸载,不验证套件档的相互关联性,不在卸载被依赖套件时同时卸载依赖套件

qt-mysql-4.8.7-8.el7.x86_64.rpm
包名-版本号-发布号.适用系统.架构.后缀

yum
基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

配置本地源
cd /etc/yum.repos.d/
vi dvd.repo
[dvd]仓库id
name=dvdrom 下载源名
baseurl=file:///dvd 下载链接或者本地dvd下的file文件
gpgcheck=0检查数字签名,防止下载被篡改的套件
gpgkey=gpg密钥文件路径
enabled=1是否启用
priority=1配置多个源时使用的优先级

为什么要配置本地源
本地源快,稳,断网可用
网络源全,新,可按需更新

配置行 详细解释 关键注意事项
[dvd] 仓库 ID(repository ID)
作用:YUM 识别不同仓库的唯一标识,不能重复(如多个 repo 文件中不能有相同的 ID);✅ 要求:只能包含字母、数字、下划线、短横线,不能有空格 / 特殊字符;
示例:可改为[local-dvd],更直观。 必须用[]包裹,是配置块的开始,缺一不可。

name=dvdrom 下载源名 仓库名称(描述信息)
作用:对仓库的备注说明,方便管理员识别(如 “本地 DVD 源”),不影响 YUM 功能;
要求:可自定义,支持中文(建议用英文避免乱码)。 仅为注释,无严格格式要求,但name=前缀必须保留。

baseurl=file:///dvd 仓库地址(YUM 获取安装包的路径)
核心含义:- file://:表示本地文件协议(区别于外网的http:///ftp://);- /dvd:是你本地挂载 CentOS DVD 光盘的目录(需先执行mount /dev/cdrom /dvd挂载);
作用:告诉 YUM“从/dvd目录下读取安装包”。
关键前提:必须先将 DVD 光盘挂载到/dvd目录,否则 YUM 会报错 “找不到源”;
路径格式:file://后必须跟绝对路径,且三个斜杠(file:///)是固定格式(file://是协议,/dvd是路径)。

gpgcheck=0 GPG 签名校验开关
核心含义:- gpgcheck=1:开启校验(默认),YUM 会检查安装包的 GPG 数字签名,确认包未被篡改、来源合法;- gpgcheck=0:关闭校验,跳过签名检查;
为什么设为 0:本地 DVD 是官方原版光盘,包本身可信,关闭校验可加快安装速度,避免因缺少 GPG 密钥导致安装失败。
补充:若要开启校验(gpgcheck=1),需额外添加gpgkey=参数指定密钥文件路径(如gpgkey=file:///dvd/RPM-GPG-KEY-CentOS-7)。

配置网络 联网状态下 获得国内开源 .repo(阿里 腾讯 百度 清华等等开源源)

yum clean all 清除全部

安装软件(以foo-x.x.x.rpm为例):yum install foo-x.x.x.rpm
删除软件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm
升级软件:yum upgrade foo删除过时包或者yum update foo保留过时包
查询信息:yum info foo
搜索软件(以包含foo字段为例):yum search foo
显示软件包依赖关系:yum deplist foo
列出所有可用软件包:yum list
清除缓存:yum clean all
查看所有可更新软件清单的命令

自学DNF
DNF是yum的升级版,解析更快,内存占用低,API更加友好,从centos8开始就已经开始使用,此时还能使用的yum在底层是dnf的软链接

什么是文件系统:操作系统用来管理存储设备上的数据和文件
win底层文件系统是NTFS,微软独有,安全但封闭;插入多少硬盘就有多少个根目录,分盘之后每个盘都是一个根目录;windows的设备是独立的,可以直接读取,互不影响;对文件名大小写不敏感
linux底层文件系统是Ext4(centos6/7),或者XFS(centos8),它的文件系统类型很多,因为它开源,所有的文件系统类型都能识别,包括NTFS;不管插入多少块硬盘,都只有一个根目录,新加入的设备不能直接读取,需要挂载到media目录或者mnt目录;对文件名大小写敏感

rhel5(ext3)/6(ext4)/7(XFS)
ext3 在ext2的基础上新增了日志功能,重启后不需要文件系统检查,速度很快, 支持的最大16TB文件系统和最大2TB文件,只能创建32000个子目录,传统服务器小规模使用
ext4 在ext3的基础上进行了大容量优化,支持最大1EB文件系统,单个文件最大16TB,支持无限子目录,中小规模
xfs 最大支持8EB减1字节的单个文件系统,在多线程,大文件读写场景下性能很高,xfs只能扩大超大规模,企业使用

FAT32(单个文件不能超过4GB)/exFAT(支持单个文件超大16EB) 最通用,兼容性最强,能够同时被linux和windows识别

lsblk 树状结构列出所有可用的块设备信息,并显示其基本信息 其显示的类型有:disk硬盘 part分区 rom光驱 lvm逻辑卷
blkid 识别块设备属性,显示块设备标签,uuid,文件系统类型
UUID 通用设备唯一识别码

/etc/fstab规定系统启动时硬盘分区挂载目录·

fdisk/parted都是磁盘分区管理工具
fdisk是传统的MBR分区使用,最大只支持2tb的硬盘
parted默认GPT分区使用,适应现代大容量储存,最高支持PB级别

mkfs.xfs 格式化

mount 设备 挂载点 挂载linux系统之外的文件
umount 设备/挂载点 卸载已经挂载的文件

MBR/msdos(最大支持四个主分区)
主引导记录(Master Boot Record , MBR)是指一个存储设备的开头 512 字节(第0个扇区),每512个字节为一个扇区。它包含操作系统的引导器和存储设备的分区表。磁盘容量最大支持2TB,无法备份

GPT/guid(支持无限个分区)
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。它是统一可扩展固件接口标准的一部分,它使用全局唯一标识来标识设备。它是新一代分区表格式,用以替代 MBR 分区表。它用来解决 MBR 分区表的缺点,同时带来了一些优点。磁盘容量支持无限大,支持备份

如何去实现一个文件系统的挂载

1.lsblk查看要挂载的文件
2.创建要挂载的目录
3.
使用mount挂载(临时挂载,重启之后失效)
写入配置文件挂载
1)获取uuid
2)编辑/etc/fstab
3)在文件末尾添加要挂载的信息
UUID=ssa-3546-….. /wuxie xfs defaults 0 0
要挂载的文件uuid或者是绝对路径 挂载点 文件系统类型 权限(defaults可读可写) 是否备份 是否开机检查磁盘
4)使用mount -a验证是否有报错,有报错千万不能重启,立即检查修改

4.使用df -h查看新目录是否有空间大小
5.使用umount卸载

添加磁盘1 10GB 分区 格式化 永久挂载 fdisk 只能进行MBR分区,最大只支持2tb的硬盘

1.虚拟机设置新建磁盘,假设为sdb
2.fdisk sdb
3.n 新建分区
4.p 分区类型为主分区
5.选择分区号,起始扇区(这里直接默认),最后必须输入w保存
6.退出quit
6.5.通知系统更新分区表partprobe
7.格式化分区 mkfs.xfs /dev/sdb 或者使用mkfs.ext4
8.挂载分区后即可使用 blkid - vim /etc/fstab -添加-mount -a验证

添加磁盘2 10GB 分区 格式化 永久挂载 parted 支持两种分区

1.虚拟机设置新建磁盘,假设为sdb
2.parted sdb
print
3.mklabel gpt
print
4.mkpart
5.选择名称,文件系统类型,起止位置(start0-end100%)
6.退出quit
6.5.通知系统更新分区表partprobe
7.格式化分区 mkfs.xfs /dev/sdb
8.挂载分区后即可使用 blkid - vim /etc/fstab -添加-mount -a验证

parted分区扩容

1. 确认磁盘与分区

1
2
lsblk          # 看磁盘(如/dev/sda)、分区、挂载
parted /dev/sda print # 查看分区表、磁盘总大小、分区起止

记录:磁盘路径目标分区号当前结束位置

2. 进入 parted 交互

1
parted /dev/sda

3. 扩容分区(关键)

1
2
3
4
5
(parted) print                # 确认分区信息
(parted) resizepart 分区号 # 如 resizepart 1
结束位置? [当前大小]? 100% # 扩到磁盘末尾;也可写 50GiB
(parted) print # 检查是否生效
(parted) quit # 退出
  • 100% = 扩到磁盘末尾(最常用)
  • 也可指定具体大小:50GiB20000MB

4. 刷新内核分区表(可选,部分系统自动生效)

1
partprobe /dev/sda

5. 扩容文件系统

根据文件系统类型选其一:

  • ext4/ext3/ext2
    1
    resize2fs /dev/sda1  # 自动扩满分区
  • xfs
    1
    xfs_growfs /挂载点    # 如 /、/data

6. 验证

1
2
lsblk
df -h

与逻辑分区有关
高级扩展-LVM管理(弹性管理空间)
pv 物理卷 pvcreate pvs查看物理卷信息
vg 卷组由物理卷组成 vgcreate vgs查看卷组信息
lv 逻辑卷从卷组中拿取空间后挂载使用 lvcreate lvs查看逻辑卷信息
pv组成vg,vg提供空间划分lv,lv上创建文件系统,提供存储空间

1.pvcreate 创建物理卷,打个标签
2.vgcreate 创建卷组 vgextend(lvresize) vg_data /dev/sdc 拓展卷组 vgreduce vg_data /dev/sdb->vgremove vg_data
3.lvcreate -L 5G -n lv_data vg_data
4.mkfs.xfs /dev/vg_data/lv_data
5.执行挂载操作
6.这里扩容的是逻辑卷lvextend -L 1G /dev/vg_data/lv_data 扩容到多少GB,不是扩容多少GB,属于在线扩容
离线扩容需要先卸载文件系统,一般用于缩容和老版本ext
7.这里扩容文件系统
命令 适用文件系统 核心作用 关键特性
xfs_growfs /dev/vg_data/lv_data XFS(CentOS7+/RHEL7 + 默认) 在线扩展 XFS 文件系统到逻辑卷的最大可用空间 仅支持扩容,不支持缩容;无需指定扩容大小,自动识别 LV 新容量
resize2fs /dev/vg_data/lv_data ext系列 在线扩展 ext 系列文件系统到逻辑卷的最大可用空间 支持扩容(在线),ext4 可有限缩容(需离线);可指定扩容大小

xfs只可以扩容不可以缩容
ext4 是 Linux 中最经典、最稳定的日志型文件系统之一,支持创建、在线扩容、离线缩容(缩容有风险,需谨慎)。下面我会按「创建 → 扩容 → 缩容」的完整流程,结合实操命令和注意事项详细讲解,所有步骤都可直接在 CentOS/RHEL 7+ 中验证。

一、ext4 文件系统的创建

创建 ext4 的核心命令是 mkfs.ext4,需先准备好块设备(物理磁盘分区、LVM 逻辑卷等),再格式化。

1. 前置条件

  • 准备待格式化的设备(如 /dev/sdb1 分区、/dev/vg_data/lv_data 逻辑卷);
  • 设备未被挂载(umount /dev/sdb1 确保卸载);
  • 备份设备内原有数据(格式化会清空所有数据)。

2. 核心命令(基础创建)

1
2
3
4
5
# 格式化 /dev/sdb1 为 ext4 文件系统(最常用)
mkfs.ext4 /dev/sdb1

# 可选:自定义参数(如指定块大小、卷标)
mkfs.ext4 -b 4096 -L data_disk /dev/sdb1

3. 关键参数解释

参数 作用 示例/说明
-b 指定块大小(可选:1024/2048/4096字节,默认4096) -b 4096:适合大文件场景,提升读写效率
-L 设置文件系统卷标(便于识别) -L data_disk:卷标为 data_disk
-i 指定 inode 密度(每多少字节分配一个 inode) -i 8192:适合小文件多的场景,避免 inode 耗尽
-m 预留空间比例(默认5%,用于维护和防止磁盘满) -m 1:仅预留1%空间(数据盘可减小)
-F 强制格式化(无需确认,适合脚本) mkfs.ext4 -F /dev/sdb1

4. 验证创建结果

1
2
3
# 查看文件系统类型和信息
blkid /dev/sdb1 # 确认 TYPE="ext4"
dumpe2fs /dev/sdb1 | head # 查看 ext4 详细参数(超级块、块大小、inode 等)

5. 挂载使用(创建后必做)

1
2
3
4
5
6
7
8
9
# 创建挂载点
mkdir -p /mnt/data

# 临时挂载
mount -t 文件系统类型 /dev/sdb1 /mnt/data

# 永久挂载(写入 /etc/fstab)
echo "/dev/sdb1 /mnt/data ext4 defaults 0 0" >> /etc/fstab
mount -a # 验证 fstab 配置

二、ext4 文件系统的扩容(推荐在线操作)

ext4 支持在线扩容(无需卸载,业务无感知),核心流程是「先扩底层设备(分区/LV)→ 再扩文件系统」。

1. 前置条件

  • 底层设备(分区/LV)有扩容空间(如 LVM 卷需先扩展 LV,分区需先调整分区大小);
  • 文件系统已挂载(在线扩容),且无损坏(先执行 fsck -n /dev/sdb1 检查)。

2. 完整扩容流程(以 LVM 逻辑卷为例)

假设要将 /dev/vg_data/lv_data(挂载到 /mnt/data)扩容 20G:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 步骤1:查看当前状态(确认初始容量)
df -Th /mnt/data # 查文件系统容量
lvdisplay /dev/vg_data/lv_data # 查 LV 容量

# 步骤2:扩展底层设备(LVM 卷)
# 方式1:增加 20G 空间
lvextend -L +20G /dev/vg_data/lv_data
# 方式2:使用卷组中所有剩余空间
lvextend -l +100%FREE /dev/vg_data/lv_data

# 步骤3:扩展 ext4 文件系统(核心)
resize2fs /dev/vg_data/lv_data # 自动扩到设备最大容量
# 可选:指定扩容到固定大小(如 80G)
# resize2fs /dev/vg_data/lv_data 80G

# 步骤4:验证扩容结果
df -Th /mnt/data # 查看文件系统容量是否增加

3. 关键注意事项

  • 扩容顺序:先扩设备(LV/分区),再扩文件系统,反之会损坏文件系统;
  • resize2fs 仅支持设备名(如 /dev/vg_data/lv_data),不支持挂载点;
  • 若扩容分区(非 LVM):需先通过 fdisk/parted 调整分区大小(需卸载),再执行 resize2fs

三、ext4 文件系统的缩容(高风险,谨慎操作)

ext4 仅支持离线缩容(必须卸载),且缩容失败易导致数据丢失,优先推荐「备份 → 格式化 → 恢复」,仅在无备份时尝试缩容。

1. 前置条件(必须满足)

  • 卸载文件系统(umount /dev/sdb1);
  • 备份所有数据(缩容前必做,防止数据丢失);
  • 检查文件系统完整性(fsck -f /dev/sdb1,修复所有错误)。

2. 完整缩容流程(以 /dev/sdb1 缩容到 50G 为例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 步骤1:卸载文件系统(关键)
umount /dev/sdb1

# 步骤2:强制检查并修复文件系统(必须!)
fsck -f /dev/sdb1 # 若有错误未修复,缩容会失败

# 步骤3:缩容 ext4 文件系统(先缩文件系统!)
resize2fs /dev/sdb1 50G # 缩容到 50G(需小于当前设备容量)

# 步骤4:缩容底层设备(分区/LV)
# 若为 LVM 卷:
lvreduce -L 50G /dev/sdb1
# 若为分区:通过 fdisk/parted 调整分区大小(删除原分区,重建更小的分区,注意保留签名)

# 步骤5:重新挂载验证
mount /dev/sdb1 /mnt/data
df -Th /mnt/data # 确认容量为 50G
  • 缩容顺序:先缩文件系统(resize2fs),再缩底层设备,顺序反了会直接损坏文件系统;
  • 缩容大小:resize2fs 指定的大小必须 ≤ 底层设备缩容后的大小,且不能小于文件系统实际已用空间;
  • 数据备份:即使步骤正确,也可能因磁盘坏块、元数据异常导致数据丢失,缩容前必须备份;
  • 不推荐场景:大容量(>100G)、小文件多的 ext4 缩容,优先用「备份-格式化-恢复」替代。

四、ext4 创/扩/缩核心总结

操作 核心命令 关键特性 风险等级
创建 mkfs.ext4 /dev/xxx 支持自定义块大小、inode 密度、预留空间 低(仅清空数据)
扩容 lvextend → resize2fs 在线操作,无停机,自动扩展到最大容量 低(几乎无风险)
缩容 umount → fsck → resize2fs → 缩设备 离线操作,需严格按顺序,易丢数据 高(谨慎操作)

五、核心注意事项

  1. 无论扩容/缩容,先执行 fsck 检查文件系统完整性;
  2. 缩容仅作为应急手段,生产环境优先用「备份-重建」替代;
  3. ext4 预留空间(默认5%):系统盘保留5%,数据盘可通过 tune2fs -m 1 /dev/sdb1 减小到1%;
  4. 查看 ext4 详细信息:dumpe2fs /dev/sdb1(超级块、inode、块大小等)。

简单记:ext4 创建用 mkfs.ext4,扩容先扩卷再 resize2fs,缩容先 resize2fs 再缩卷(必备份!)

ext4文件系统的创建,扩容,缩容
工具 适用文件系统 核心作用 关键特性
xfs_repair XFS(CentOS7+/RHEL7 + 默认) 检测并修复损坏的 XFS 文件系统 专为 XFS 设计,支持大容量(TiB 级),需离线修复
fsck ext2/ext3/ext4、FAT32、NTFS(需插件) 检测并修复损坏的非 XFS 文件系统 通用工具,ext 系列为主,支持自动 / 交互修复

与磁盘有关
raid 磁盘冗余(多存一份数据或校验)阵列(将所有盘整合在一起,提升性能空间安全性),把所有的硬盘拼在一起
主要应用在物理机上而不是虚拟机

硬raid独立的raid硬件卡,成本很高,性能很高
软raid靠操作系统内核和主机的cpu模拟

raid1.0 以盘为单位做冗余
raid级别
raid0 条带模式 要快不怕丢 数据切碎均匀分布到所有硬盘上,最快,空间利用率100%,适合临时或者缓存数据
raid1 镜像模式 要安全不缺钱 两个硬盘上的数据完全镜像,最安全,空间利用率只有50%,适合做物理机的系统盘
raid5 带校验的条带模式 平衡安全空间 数据也是分散存,但是会留一部分空间做校验,数据和校验也是轮流均匀存入在硬盘上,至少需要三块盘,一个盘坏了用其他的盘进行XOR,一个方程运算计算出坏盘的数据
raid6 带双校验的条带模式 更安全 至少四块盘,使用XOR和伽罗瓦域,两个方程将数据和双校验轮流均匀地储存在所有硬盘上 空间利用率较低
raid1+0 先镜像再条带模式 企业使用 既安全又稳定。但是空间利用率只有一半,允许坏一半的盘
raid0+1 先条带再镜像 没人用
hotspare热备盘 企业使用 随时待命的备用盘

raid2.0 以块为单位做冗余,切块虚拟化冗余(现代系统使用,有很大数量的硬盘,以块为单位的数据丢失可以忽略)

mdadm –create –verbose /dev/md0
–level=5
–raid-devices=3
/dev/sdb /dev/sdc /dev/sdd

防火墙firewalld(面向服务和区域)
1.启动firewalld服务
systemctl start firewalld.service
2.关闭firewalld服务
systemctl stop firewalld.service
3.重启firewalld服务
systemctl restart firewalld.service
4.查看firewalld状态
systemctl status firewalld.service
5.开机自启firewalld
systemctl enable firewalld
6.查看版本
firewall-cmd –version
7.查看帮助
firewall-cmd –help
8.显示状态
firewall-cmd –state
9.查看所有打开的策略
firewall-cmd –zone=public –list-all
10.更新防火墙规则
firewall-cmd –reload
11.添加开放端口
firewall-cmd –zone=public –add-port=80/tcp –permanent
firewall-cmd –zone=public –add-service=ssh –permanent
(permanent永久生效,没有此参数重启后失效)
12.查看端口是否开放
firewall-cmd –zone=public –query-port=80/tcp
13.删除开放端口
firewall-cmd –zone=public –remove-port=80/tcp –permanent
14.允许某个IP(或者ip段)访问所有端口
firewall-cmd –add-source=192.168.1.100/24 –permanent
15.添加网卡到区域
firewall-cmd –zone=trustd –add-interface=ens33 –permanent
16.禁止某个网段访问某个端口
firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4” source address=”192.168.1.0/24” port port=”8080” protocol=”tcp” reject’

区域名称 安全级别 核心含义 适用场景
trusted 最低 允许所有流量,不做任何限制 完全可信内网、测试机、关闭防火墙效果
home 仅拒绝外部主动连接,放行常用内网服务 家庭局域网、内网办公环境
internal 同 home,偏向企业内部网络 公司内网服务器、内部业务环境
work 中低 仅放行 ssh、dhcpv6 等基础服务 办公区服务器、普通工作网络
public 中等(默认) 仅放行 ssh、dhcpv6、icmp,其余拒绝 公网服务器、云主机、公共场所网络
dmz 中高 仅开放少量对外服务,严格限制 对外暴露的前置服务器(隔离区)
external 中高 用于网关 NAT 转发,默认开启伪装 路由器、网关、防火墙出口设备
block 拒绝所有连接,并返回拒绝提示 高安全要求、明确拒绝外部访问
drop 最高 直接丢弃所有数据包,无任何响应 最高安全场景、隐藏主机、防扫描

注:每次更改firewall规则后需重新加载(firewall-cmd –reload)

6版本 iptables(面向端口和ip)

service iptables stop
service iptables start
service iptables restatus
service iptables status
iptables -L
iptables -A INPUT -p tcp –dport 80 -j ACCEPT 添加
iptables -D INPUT -p udp –dport 53 -j ACCEPT删除
修改需要先删除再添加

彻底关闭iptables
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -L -n

iptables 是底层静态防火墙,修改需要重启,会断开连接;firewalld 是上层动态防火墙管理服务
iptables 重启 / 重载时会清空并重建规则,导致当前所有连接(包括你的 SSH)断开,必须重连;
firewalld 动态生效,不断开连接

#查看已启动的服务列表

systemctl list-unit-files –type=service|grep enabled
作用是列出系统中所有类型为 “服务(service)”、且开机自启状态为 “enabled” 的单元文件

ps:6版本-系统使用service chkconfig命令控制服务

crontab定时任务
crontab -l 列出定时文件
crontab -e 编辑定时文件
相当于打开vi编辑器

1
2
3
4
5
6
7
8
9
10
11
12
13
*    *    *    *    *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

*表示每分钟/小时/执行一次
a-b表示第a分钟到第b分钟执行......
*/n表示每个n个时间间隔执行一次
a,b,c表示第a,b,c分钟执行一次/第a,b,c小时执行一次......

快照:虚拟机在某个时间点状态下的副本,包含磁盘,内存,设备状态
内存快照:开机状态下,带内存
磁盘快照:关机状态下,不带内存

linux单用户模式破解root密码

1)开机时grup引导界面按下e编辑
2)找到linux16(centos7)那行,找到“ro”,ro的意思是read only,将“ro”替换成 rw init=/sysroot/bin/sh
linux(centos8,9,10)将“ro”替换为rw 然后结尾添加init=/bin/bash
按Ctrl-x 进行进入单用户模式
3)执行chroot /sysroot。其中chroot命令用来切换系统,/sysroot/目录就是原始系统
4)如果要修改root密码,passwd root,给予root用户新密码,用户密码存在etc/shadow
touch /.autorelabel 执行这行命令作用是让SELinux生效,新修改过的文件标签会变成通用标签etc_t,这条命令使其回到原来的标签shadow_t
如果不执行,密码不会生效。
exit,reboot 验证
linux(centos8,9,10)exec /sbin/init

linux救援模式
1.选择需要救援的系统,dvd选项选择我们需要的镜像,并勾选启动时连接
2.启动虚拟机时进入固件
3.boot菜单下将CD—ROM Drive通过shift+移动到最上方,然后F10保存,然后重启
4.重启出现界面后选择Troubleshooting,回车,选择Rescue system
5.选择continue,之后的下一个选项直接回车
6.系统检测通过之后运行 chroot /mnt/sysimage,命令提示符从sh-4.2#变为bash-4.2#
7.此时可以使用ls检查本地目录
8.进入需要修改目录修改损坏的文件
9.exit退出 init 0关机
10.进入固件模式恢复boot然后重启
11.进入系统后查看修改后的文件

如何查看系统内核参数并临时修改,最后永久生效
sysctl 内核参数名 查看指定参数值
sysctl -w 内核参数名=值 临时修改参数值
vi /etc/sysctl.conf 永久修改内核参数值
sysctl -p 修改内核参数后重载

三个文件描述符
0=stdin 标准输入(键盘输入)
1=stdout 标准输出 (正常打印内容)
2=stderr 错误输出 (报错内容)
2>$1 将错误输出重定向到标准输出

kill,chmod/chown,mv/cp,rm/touch,mkdir,ls使用管道符连接其它命令时都必须添加xargs传参,只添加管道符不生效

lsof 查找与文件等相关的进程

Linux启动过程
1.bios自检
2.加载MBR中的引导程序(GRUB)
3.引导程序加载内核
4.内核初始化硬件,挂载根文件系统
5.启动第一个进程init或systemctl (pid=0)
6.根据/etc/inittab进入运行级别
7.进入指定界面,完成启动