Linux从入门到精通:超详细全场景教程(2025版)

本教程特点:1. 兼顾服务器(CentOS 7)和桌面(Ubuntu 22.04)场景;2. 操作步骤附带截图级说明;3. 包含常见问题排查方案;4. 提供实战案例巩固知识点。建议收藏后按章节逐步学习,重点操作务必动手实践。

第一章:Linux基础认知——先搞懂核心概念

1.1 什么是Linux?

Linux是1991年由芬兰大学生Linus Torvalds开发的开源操作系统内核,后续经全球开发者协作完善,形成了包含内核、系统工具、应用程序的完整操作系统。与Windows、macOS不同,Linux的核心优势在于:

  • 开源免费:源代码公开可定制,无版权费用,企业级应用成本极低

  • 稳定可靠:服务器场景可连续运行数年不重启,故障率远低于Windows Server

  • 跨平台兼容:支持x86、ARM等多种架构,从手机、路由器到超级计算机均能运行

  • 安全可控:权限管理严格,恶意软件难以入侵,无需安装杀毒软件

  • 高效灵活:命令行操作效率极高,资源占用低,可根据需求裁剪系统组件

1.2 Linux的核心组成

  1. Linux内核(Kernel):系统核心,负责管理硬件资源(CPU、内存、磁盘、网络),是应用程序与硬件的桥梁

  2. Shell(壳程序):用户与内核的交互界面,接收用户命令并传递给内核执行。常见Shell有: bash:默认Shell,CentOS、Ubuntu等主流发行版标配

  3. zsh:功能更强大,支持语法高亮、自动补全,适合桌面用户

  4. sh:最基础的Shell,兼容性强但功能简单

  5. 文件系统:组织文件和目录的方式,Linux采用树形结构,根目录为/

    常见目录功能
    目录路径核心功能备注/根目录,所有目录的父目录Linux唯一根节点,无盘符概念
    /bin存放基础用户命令(ls、cp等)所有用户可执行
    /sbin存放系统管理命令(reboot、ifconfig等)仅root用户可执行
    /home普通用户家目录如用户user的家目录为/home/user
    /root管理员(root)家目录与普通用户家目录分离,更安全
    /etc存放系统配置文件(如网络、服务配置)修改需谨慎,建议先备份
    /var存放动态变化文件(日志、缓存、数据库)需关注磁盘占用,避免日志撑满
    /tmp临时文件目录系统重启后文件会清空
    /usr存放应用程序和共享资源类似Windows的Program Files

  6. 应用程序:如Web服务器(Nginx)、数据库(MySQL)、文本编辑器(Vim)等,通过包管理器安装管理

1.3 主流Linux发行版及选择建议

发行版=Linux内核+系统工具+应用程序+桌面环境(可选),不同发行版适配不同场景,新手无需纠结,按场景选择即可:

发行版

核心特点

适用场景

包管理器

新手友好度

CentOS 7

RHEL(红帽企业版)社区克隆版,稳定可靠,长期支持

服务器(Web、数据库、中间件)

YUM(rpm包)

★★★☆☆

Ubuntu 22.04

Debian衍生版,桌面环境优秀,软件生态丰富

桌面办公、开发环境、轻量服务器

APT(deb包)

★★★★★

Red Hat Enterprise Linux(RHEL)

企业级付费版,官方技术支持,稳定性极强

金融、政府等关键业务服务器

YUM

★★★☆☆

Fedora

RHEL测试版,更新快,支持最新技术

开发者测试环境、技术尝鲜

DNF(YUM升级版)

★★★★☆

Debian

稳定性仅次于RHEL,开源社区驱动,无商业支持

服务器、嵌入式设备

APT

★★★☆☆

Kali Linux

基于Debian,预装渗透测试工具

网络安全、渗透测试

APT

★★☆☆☆

新手入门建议:桌面用户选Ubuntu 22.04,服务器用户选CentOS 7(免费稳定)或Alibaba Cloud Linux 3(阿里云优化版)。本教程后续操作均基于这两个版本展开。

1.4 Linux与Windows的核心差异

对比维度

Linux

Windows

文件系统

树形结构,根目录/,无盘符

多盘符(C:、D:),每个盘符独立目录

权限管理

严格的用户/组权限(读、写、执行)

基于用户账户类型(管理员、标准用户)

操作方式

命令行为主,桌面为辅(服务器通常无桌面)

图形界面为主,命令行为辅(PowerShell)

软件安装

包管理器(YUM/APT),自动解决依赖

exe安装包,手动点击下一步,依赖需自行处理

后台服务

守护进程(Daemon),通过systemctl管理

服务(Services),通过服务管理器管理

硬件资源

资源占用低,老旧硬件适配好

资源占用高,对硬件要求较高

第二章:Linux环境搭建——3种场景全覆盖

根据使用需求,Linux环境搭建分为「虚拟机安装」「物理机安装」「云服务器购买」三种场景,新手优先推荐虚拟机或云服务器(无需折腾硬件)。

2.1 场景1:虚拟机安装(Windows/macOS桌面用户首选)

通过VMware Workstation(Windows)或VMware Fusion(macOS)创建虚拟机,模拟Linux运行环境,优点是不影响原有系统,可随时快照恢复。

2.1.1 准备工具与镜像

  1. 虚拟机软件: Windows:VMware Workstation 17 Pro(官网下载,可试用30天)

  2. macOS:VMware Fusion 13 Pro(官网下载,试用30天)

  3. 免费替代方案:VirtualBox(Oracle开源,功能稍弱但免费)

  4. Linux镜像文件: CentOS 7:官网下载「CentOS-7-x86_64-Minimal-2009.iso」(Minimal版为最小安装,适合服务器学习)

  5. Ubuntu 22.04:官网下载「ubuntu-22.04.3-desktop-amd64.iso」(Desktop版带图形界面,适合桌面学习)

2.1.2 虚拟机创建(以VMware Workstation安装CentOS 7为例)

  1. 新建虚拟机: 打开VMware,点击「创建新的虚拟机」,选择「典型(推荐)」,点击下一步

  2. 选择「安装程序光盘映像文件(iso)」,点击「浏览」选择下载好的CentOS 7镜像,勾选「稍后安装操作系统」,点击下一步

  3. 客户机操作系统选择「Linux」,版本选择「CentOS 7 64位」,点击下一步

  4. 虚拟机名称输入「CentOS 7 Server」,位置选择非系统盘(如D:\VMs),点击下一步

  5. 磁盘容量设置为20GB(新手足够),选择「将虚拟磁盘存储为单个文件」,点击下一步

  6. 点击「自定义硬件」,按需调整配置: 内存:建议2GB(最低1GB,低于1GB可能安装失败)

  7. 处理器:建议2核(最低1核)

  8. 网络适配器:选择「桥接模式」(可让虚拟机与主机在同一局域网,方便后续远程连接)

  9. 点击「完成」,虚拟机创建完成

  10. 安装CentOS 7系统: 选中创建的虚拟机,点击「开启此虚拟机」,等待加载镜像后,出现安装界面: Install CentOS 7:直接安装(推荐)

  11. Test this media & install CentOS 7:先检测镜像完整性再安装(耗时久,可选)

  12. 选择语言:默认「English」(推荐,避免中文路径乱码),点击「Continue」

  13. 进入安装配置界面,重点配置3项: Date & Time(日期时间):点击进入,选择时区为「Asia/Shanghai」,开启网络时间同步(NTP),点击「Done」

  14. Keyboard(键盘):默认「English (US)」,无需修改,点击「Done」

  15. Installation Source(安装源):默认使用本地镜像,点击「Done」

  16. Software Selection(软件选择):点击进入,选择「Minimal Install」(最小安装,仅含核心组件),右侧可勾选「Compatibility Libraries」(兼容库)和「Development Tools」(开发工具),点击「Done」

  17. Installation Destination(安装目标):点击进入,选择「I will configure partitioning」(手动分区),点击「Done」;进入分区界面,选择「Standard Partition」(标准分区),点击左下角「+」添加分区: /boot分区:大小500MB,文件系统ext4

  18. swap分区:内存≤4GB时设为内存2倍(如2GB内存设4GB),内存>4GB时设4GB即可

  19. /分区:剩余所有空间,文件系统ext4

  20. Network & Hostname(网络和主机名):点击进入,开启右上角「ON」按钮,主机名输入「centos7-server」,点击「Apply」,再点击「Done」(开启网络后安装过程会自动下载更新)

  21. 所有配置完成后,点击「Begin Installation」(开始安装),等待安装进度到100%(约5-10分钟,取决于配置)

  22. 安装过程中可配置「Root Password」(根密码)和「User Creation」(创建用户): Root Password:点击进入,设置root密码(建议复杂且牢记,如Root@123),若密码简单需点击2次「Done」确认

  23. User Creation:点击进入,输入用户名(如user)和密码,勾选「Make this user an administrator」(授予管理员权限),点击「Done」

  24. 安装完成后,点击「Reboot」(重启),虚拟机自动重启后即可进入CentOS 7系统

  25. Ubuntu 22.04桌面版安装差异: 虚拟机创建时选择「Ubuntu 64位」,镜像选择Desktop版iso

  26. 启动后选择「Install Ubuntu」,语言可选「中文(简体)」

  27. 键盘布局默认「汉语」,点击下一步

  28. 安装类型选择「清除整个磁盘并安装Ubuntu」(新手推荐),点击下一步

  29. 选择时区「上海」,点击下一步

  30. 输入用户名、密码,勾选「自动登录」,点击下一步,等待安装完成后重启即可

2.1.3 虚拟机网络配置(桥接模式确保联网)

桥接模式下,虚拟机需配置IP(静态或动态)才能联网,以CentOS 7为例:

  1. 动态获取IP(简单,适合临时使用): 登录系统后,执行命令:dhclient(获取DHCP服务器分配的IP)

  2. 执行命令:ip addr,查看网卡信息(通常为ens33),inet后的即为IP地址(如192.168.1.100)

  3. 测试联网:ping www.baidu.com,若出现字节回复则联网成功(按Ctrl+C停止ping)

  4. 静态IP配置(推荐,适合长期使用): 执行命令编辑网络配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33(ens33为网卡名,需根据实际情况修改)

  5. 按「i」进入编辑模式,修改以下内容:
    BOOTPROTO=static # 从dhcp改为static(静态IP)
    ONBOOT=yes # 开机自动启用网卡
    IPADDR=192.168.1.105 # 静态IP,需与主机同网段(如主机IP为192.168.1.100,可设192.168.1.105)
    NETMASK=255.255.255.0 # 子网掩码,默认即可
    GATEWAY=192.168.1.1 # 网关,与主机网关一致(可在Windows的网络连接中查看) DNS1=8.8.8.8 # DNS服务器,谷歌DNS
    DNS2=114.114.114.114 # 备用DNS,国内通用

  6. 按「Esc」退出编辑模式,输入「:wq」保存并退出(若输入错误,输入「:q!」强制退出不保存)

  7. 重启网络服务:systemctl restart network

  8. 验证配置:ip addr查看IP是否生效,ping www.baidu.com测试联网

2.2 场景2:物理机安装(适合专用Linux主机)

将Linux直接安装在物理电脑上,优点是性能无损耗,适合作为主力系统或服务器。注意:安装会清空磁盘数据,务必提前备份重要文件!

2.2.1 准备工作

  1. 制作启动U盘: 工具:Rufus(Windows)或BalenaEtcher(跨平台,推荐新手)

  2. 步骤:打开工具,选择Linux镜像文件和U盘(建议8GB以上),点击「开始」,等待制作完成(U盘数据会清空)

  3. 磁盘分区准备: 单系统安装:直接清空整个磁盘(安装时选择「清除整个磁盘」)

  4. 双系统安装(Windows+Linux):在Windows的「磁盘管理」中压缩卷,留出至少20GB未分配空间给Linux

  5. 设置启动顺序: 插入启动U盘,重启电脑,开机时按快捷键进入BIOS(不同品牌快捷键不同:联想F2、戴尔F12、惠普F10、华硕F2)

  6. 在BIOS中设置「USB Storage Device」为第一启动项,保存并重启

2.2.2 安装步骤

与虚拟机安装步骤基本一致,差异点:

  1. 磁盘分区时,双系统需选择「未分配空间」进行分区,避免覆盖Windows分区

  2. 引导程序(GRUB)默认安装在磁盘MBR或EFI分区,确保能识别双系统(安装后重启会显示系统选择菜单)

  3. 安装完成后,若未出现双系统菜单,需修复GRUB引导(参考后续问题排查章节)

2.3 场景3:云服务器购买(新手最推荐,零配置)

直接购买阿里云、腾讯云等厂商的Linux云服务器,优点是无需本地硬件,随时随地通过网络访问,自带公网IP,适合学习服务器运维和部署应用。

2.3.1 云服务器购买(以阿里云为例)

  1. 打开阿里云官网,注册并登录,进入「云服务器ECS」购买页面

  2. 新手选择「入门级」配置: 地域:选择就近地域(如华东1-上海),延迟更低

  3. 实例规格:1核2GB(新手足够,学生机更便宜)

  4. 镜像:选择「CentOS 7.9 64位」或「Ubuntu 22.04 64位」

  5. 存储:40GB高效云盘

  6. 网络:默认公网IP(按流量计费),带宽1-2Mbps即可

  7. 安全组:勾选「HTTP 80」「HTTPS 443」「SSH 22」(允许网页访问和远程连接)

  8. 登录方式:选择「密码登录」,设置root密码(牢记)

  9. 购买时长:1个月(新手试用,后续可续费)

  10. 支付完成后,进入「云服务器ECS」控制台,找到购买的服务器,记录公网IP(如47.100.xxx.xxx)

2.3.2 云服务器远程连接(首次登录)

  1. Windows连接Linux(用PuTTY): 下载PuTTY:官网下载putty.exe,无需安装直接运行

  2. 配置连接: Session → Host Name:输入云服务器公网IP

  3. Port:22(SSH默认端口)

  4. Connection type:SSH

  5. 点击「Open」,弹出终端窗口,输入用户名「root」,按回车,再输入密码(输入时无显示,输完按回车)

  6. 登录成功:出现「[root@xxx ~]#」提示符,代表已进入Linux命令行

  7. macOS连接Linux(用终端): 打开「终端」,执行命令:ssh root@公网IP(如ssh root@47.100.xxx.xxx)

  8. 首次连接会提示「Are you sure you want to continue connecting (yes/no)?」,输入「yes」按回车

  9. 输入root密码,按回车登录(密码无显示)

  10. 新手友好工具:Xshell(Windows): 功能:支持会话保存、密钥登录、文件传输,比PuTTY更易用

  11. 步骤:新建会话,输入IP和端口,保存后双击连接,输入用户名和密码即可

云服务器安全提示:1. 首次登录后立即修改root密码(passwd命令);2. 禁止使用弱密码(如123456);3. 后续建议创建普通用户登录,避免直接使用root;4. 定期更新系统(yum update或apt update)。

第三章:Linux核心操作——命令行必学技能

Linux的核心竞争力在于命令行,掌握以下命令可解决90%的日常操作。建议新手边学边记,用一个专门的文档记录常用命令,操作时对照执行。

命令行通用技巧:1. 按Tab键自动补全命令或路径(避免输错);2. 按上下箭头切换历史命令;3. 按Ctrl+C终止当前运行的命令;4. 命令后加「--help」查看帮助(如ls --help);5. 用man命令查看详细手册(如man ls,按q退出)。

3.1 系统登录与用户管理

3.1.1 登录与切换用户

操作场景

命令

说明

远程登录Linux

ssh 用户名@IP地址

如ssh user@192.168.1.100,首次登录需输入yes确认

切换到root用户

su -

输入root密码,切换后提示符从$变为#

切换到普通用户

su - 用户名

如su - user,从root切换到普通用户无需密码

临时执行管理员命令

sudo 命令

普通用户需有sudo权限,输入自身密码执行

退出当前用户登录

exit 或 logout

远程登录时退出会断开连接

3.1.2 用户与组管理(需root权限)

操作场景

命令

示例

创建用户

useradd [选项] 用户名

useradd -m user(-m自动创建家目录)

设置用户密码

passwd 用户名

passwd user(输入密码时无显示)

删除用户

userdel [选项] 用户名

userdel -r user(-r删除家目录)

创建用户组

groupadd 组名

groupadd dev(创建开发组)

将用户加入组

usermod -G 组名 用户名

usermod -G dev user(将user加入dev组)

查看用户所属组

groups 用户名

groups user(显示user所属的所有组)

查看所有用户

cat /etc/passwd

每行代表一个用户,格式:用户名:密码占位符:UID:GID:描述:家目录:Shell

授予普通用户sudo权限

visudo

在文件中添加:user ALL=(ALL) ALL(user可执行所有sudo命令)

3.2 文件与目录操作(核心重点)

Linux中「一切皆文件」,掌握文件操作是基础中的基础。以下命令需熟练掌握,建议逐个执行练习。

3.2.1 目录切换与查看

命令

功能说明

示例

pwd

显示当前工作目录的绝对路径

pwd → /home/user

cd 目录路径

切换工作目录

cd /etc(切换到/etc目录)

cd ..

切换到上级目录

从/home/user切换到/home

cd ~

切换到当前用户的家目录

root用户切换到/root,普通用户切换到/home/用户名

cd -

切换到上一次工作目录

从/etc切换回之前的目录

ls [选项]

列出目录中的文件和子目录

ls -l(详细列表,显示权限、大小等)

ls -a

显示所有文件(包括隐藏文件,以.开头)

ls -a → 显示.、..、.bashrc等隐藏文件

ls -lh

以人类可读格式显示文件大小(KB、MB)

ls -lh → 显示1.2M、500K等大小

tree [目录]

以树形结构显示目录结构(需安装tree工具)

yum install tree(CentOS);apt install tree(Ubuntu)

3.2.2 文件与目录创建、删除、复制、移动

操作类型

命令

功能说明

示例

创建

mkdir [选项] 目录名

创建目录

mkdir test(创建test目录)

mkdir -p 目录路径

创建多级目录(父目录不存在时自动创建)

mkdir -p a/b/c(创建a目录下的b目录下的c目录)

创建文件

touch 文件名

创建空文件,若文件存在则更新修改时间

touch file.txt(创建file.txt空文件)

删除

rm [选项] 文件名

删除文件

rm file.txt(删除file.txt,需确认)

rm -rf 目录名

强制删除目录及所有内容(-r递归,-f强制)

rm -rf test(删除test目录及其中所有文件,慎用!)

复制

cp [选项] 源文件 目标路径

复制文件

cp file.txt test/(将file.txt复制到test目录)

cp -r 源目录 目标路径

复制目录及内容(-r递归)

cp -r test test2(复制test目录为test2)

移动/重命名

mv 源文件 目标路径

移动文件到指定路径

mv file.txt test/(将file.txt移动到test目录)

mv 旧名 新名

重命名文件或目录

mv file.txt new.txt(将file.txt重命名为new.txt)

危险命令警告:rm -rf / 会强制删除根目录下所有文件,导致系统崩溃,绝对禁止执行!执行rm命令时务必确认路径正确,尤其是加-rf选项时。

3.2.3 文件内容查看与编辑

Linux中文本编辑工具主要有Vim和Nano,Vim功能强大但学习曲线陡,Nano简单易用适合新手。无论是查看配置文件还是编写脚本,都需要熟练掌握相关命令和工具。

3.2.3.1 文件内容查看命令

不同场景需选择合适的查看命令,小文件可直接显示全部内容,大文件建议分页查看,日志文件常用实时监控命令。

命令

核心功能

常用选项

实战示例

cat

显示文件全部内容,适合小文件

-n:显示行号;-A:显示隐藏字符

cat -n /etc/hosts(带行号查看主机配置)

more

分页显示文件内容,正向滚动

-d:显示操作提示;-num:指定每页行数

more -20 /var/log/messages(每页显示20行日志)

less

分页显示,支持双向滚动和搜索

-i:忽略搜索大小写;-N:显示行号

less -N /etc/passwd(带行号查看用户信息)

head

显示文件开头部分内容

-n 数字:指定显示行数(默认10行)

head -5 /etc/hostname(显示前5行主机名配置)

tail

显示文件尾部内容,支持实时监控

-n 数字:指定行数;-f:实时跟踪更新

tail -f /var/log/nginx/access.log(实时监控访问日志)

grep

搜索文件中匹配的字符串

-i:忽略大小写;-n:显示行号;-v:反向匹配

grep -n "root" /etc/passwd(搜索含root的行并显示行号)

高频组合用法:实时监控日志并筛选关键词,如tail -f /var/log/secure | grep "Failed",可实时捕捉登录失败记录。

3.2.3.2 文本编辑工具:Nano(新手首选)

Nano是Linux默认自带的简易编辑器,操作直观,无需模式切换,类似Windows记事本,适合新手快速编辑文件。

操作场景

操作步骤/快捷键

说明

打开/创建文件

nano 文件名

如nano test.txt,文件不存在则自动创建

编辑内容

直接键盘输入、删除、复制粘贴

Windows复制粘贴用Ctrl+Shift+C/V,macOS用Cmd+C/V

保存文件

Ctrl + O(字母O),回车确认

底部会提示文件名,确认后完成保存

退出编辑器

Ctrl + X

未保存时会提示是否保存,按Y确认、N放弃

搜索内容

Ctrl + W,输入关键词回车

全称"Where Is",快速定位关键词位置

3.2.3.3 文本编辑工具:Vim(运维必备)

Vim是Linux最强大的编辑器,支持语法高亮、多窗口编辑等高级功能,核心是模式切换,需熟练掌握三种核心模式。

1. 三种核心模式及切换

普通模式(Normal Mode)

- 进入:打开Vim后默认进入

- 功能:移动光标、复制删除、切换模式

- 示例:h/j/k/l(上下左右移动)

插入模式(Insert Mode)

- 进入:普通模式按i/a/o

- 功能:输入编辑文本

- 退出:按Esc返回普通模式

命令模式(Command Mode)

- 进入:普通模式按:(英文冒号)

- 功能:保存、退出、搜索替换

- 执行:输入命令后按回车

2. 基础操作流程(以编辑test.sh为例)
  1. 打开文件:执行vim test.sh,默认进入普通模式

  2. 编辑内容:按i进入插入模式(底部显示--INSERT--),输入脚本内容

  3. 保存文件:按Esc返回普通模式,按:进入命令模式,输入w回车(w=write)

  4. 退出编辑器:命令模式输入q回车(q=quit),或直接输入wq回车(保存并退出)

3. 常用快捷键(普通模式)

功能分类

快捷键

功能说明

光标移动

gg / G

跳转到文件首行/末行

nG(如5G)

跳转到第n行(需先显示行号::set nu)

$ / ^

跳转到当前行尾/行首

w / b

按单词向前/向后跳转

编辑操作

dd / yy

删除当前行/复制当前行

ndd / nyy

删除/复制n行(如3dd删除3行)

p / P

粘贴到光标下/上方

u / Ctrl+r

撤销上一步/重做上一步

3.3 文件权限管理

Linux通过严格的权限管理保障系统安全,每个文件/目录都有所有者、所属组和其他用户三类权限,分别对应读(r)、写(w)、执行(x)三种操作。

3.3.1 权限查看

执行ls -l命令可查看文件权限,示例输出: -rwxr--r-- 1 root root 123 Apr 10 14:30 test.sh

权限字段解析(-rwxr--r--):

  1. 第1位:文件类型(-:普通文件,d:目录,l:链接文件)

  2. 第2-4位:所有者权限(rwx:读、写、执行)

  3. 第5-7位:所属组权限(r--:仅读)

  4. 第8-10位:其他用户权限(r--:仅读)

3.3.2 权限修改(chmod命令)

chmod命令通过数字或符号方式修改权限,数字方式更高效,符号方式更直观。

修改方式

权限对应数字

命令格式

示例

数字方式

r=4,w=2,x=1,无权限=0

chmod 数字 文件名

chmod 755 test.sh(所有者rwx,其他rx)

常见组合:755(程序脚本)、644(配置文件)

chmod -R 数字 目录名

chmod -R 777 data/(递归修改目录权限,慎用)

符号方式

u=所有者,g=所属组,o=其他,a=所有;+添加,-移除,=设置

chmod 符号 权限 文件名

chmod u+x test.sh(给所有者添加执行权限)

3.3.3 所有者与所属组修改

操作场景

命令

示例

修改所有者

chown 用户名 文件名

chown user test.sh(将test.sh所有者改为user)

修改所属组

chgrp 组名 文件名

chgrp dev test.sh(将test.sh所属组改为dev)

同时修改所有者和组

chown 用户名:组名 文件名

chown user:dev test.sh(同时修改所有者和组)

第四章:Linux系统管理基础

系统管理是Linux运维的核心,包括进程管理、服务管理、磁盘管理和日志管理等,掌握这些技能可保障系统稳定运行。

4.1 进程管理

进程是正在运行的程序实例,通过进程管理可查看进程状态、终止异常进程,优化系统资源占用。

操作场景

命令

常用选项/示例

查看所有进程

ps

ps -ef(显示所有进程详细信息);ps aux(显示进程资源占用)

实时查看进程动态

top

按P排序CPU占用,按M排序内存占用,按q退出

搜索指定进程

ps + grep

ps -ef | grep nginx(查看nginx相关进程)

终止进程

kill / killall

kill 进程ID(温和终止);kill -9 进程ID(强制终止);killall nginx(终止所有nginx进程)

后台运行进程

命令 &

nohup ./test.sh &(后台运行脚本,断开连接不终止)

4.2 服务管理(systemctl命令)

CentOS 7及以上版本和Ubuntu 16.04及以上版本均使用systemctl管理系统服务,替代传统的service命令。

操作场景

命令(以nginx为例)

说明

启动服务

systemctl start nginx

立即启动nginx服务

停止服务

systemctl stop nginx

立即停止nginx服务

重启服务

systemctl restart nginx

停止后重新启动,配置修改后常用

重新加载配置

systemctl reload nginx

不停止服务,加载新配置,更安全

查看服务状态

systemctl status nginx

显示服务是否运行、进程ID、日志等

设置开机自启

systemctl enable nginx

系统重启后自动启动服务

禁止开机自启

systemctl disable nginx

取消服务开机自启

查看开机自启状态

systemctl is-enabled nginx

返回enabled(已启用)或disabled(已禁用)

4.3 磁盘管理

磁盘管理主要包括查看磁盘占用、挂载磁盘、分区管理等,避免磁盘空间不足导致系统异常。

操作场景

命令

示例/说明

查看磁盘占用

df

df -h(以人类可读格式显示,如GB、MB)

查看目录占用

du

du -sh /home/*(显示/home下各目录大小,s汇总,h可读)

查看磁盘分区

fdisk

fdisk -l(查看所有磁盘分区信息,需root权限)

挂载磁盘

mount

mount /dev/sdb1 /data(将/dev/sdb1分区挂载到/data目录)

设置开机自动挂载

编辑/etc/fstab

添加一行:/dev/sdb1 /data ext4 defaults 0 0,保存后执行mount -a生效

卸载磁盘

umount

umount /data(卸载/data目录挂载的磁盘,需先退出该目录)

4.4 日志管理

Linux日志集中存储在/var/log目录下,通过分析日志可排查系统故障、监控用户操作和程序运行状态。

日志文件

核心内容

查看命令示例

/var/log/messages

系统通用日志,记录内核和应用程序信息

tail -f /var/log/messages(实时监控系统日志)

/var/log/secure

安全日志,记录用户登录、sudo操作等

grep "Accepted" /var/log/secure(查看成功登录记录)

/var/log/boot.log

系统启动日志,记录开机过程中的服务启动情况

cat /var/log/boot.log | grep "failed"(查看启动失败的服务)

/var/log/cron

定时任务日志,记录crontab任务的执行情况

less /var/log/cron(分页查看定时任务日志)

/var/log/nginx/access.log

Nginx访问日志,记录所有请求信息

grep "404" /var/log/nginx/access.log(查看404错误请求)

第五章:Linux软件管理

Linux软件管理主要通过包管理器实现,不同发行版包管理器不同,CentOS使用YUM(基于RPM包),Ubuntu使用APT(基于DEB包)。

5.1 CentOS系统(YUM包管理器)

操作场景

命令

示例

更新软件源缓存

yum makecache

更新本地缓存,加快软件查找速度

安装软件

yum install 软件名

yum install nginx(安装nginx服务)

卸载软件

yum remove 软件名

yum remove nginx(卸载nginx服务)

更新软件

yum update 软件名

yum update nginx(更新nginx到最新版本)

搜索软件

yum search 关键词

yum search web server(搜索web服务器相关软件)

查看软件信息

yum info 软件名

yum info nginx(查看nginx版本、描述等信息)

列出已安装软件

yum list installed

yum list installed | grep nginx(查看是否安装nginx)

5.2 Ubuntu系统(APT包管理器)

操作场景

命令

示例

更新软件源列表

apt update

获取最新的软件源信息

安装软件

apt install 软件名

apt install nginx(安装nginx服务)

卸载软件

apt remove 软件名

apt remove nginx(卸载nginx服务)

彻底卸载(含配置文件)

apt purge 软件名

apt purge nginx(彻底卸载nginx及配置文件)

更新软件

apt upgrade 软件名

apt upgrade nginx(更新nginx到最新版本)

搜索软件

apt search 关键词

apt search web server(搜索web服务器相关软件)

查看软件信息

apt show 软件名

apt show nginx(查看nginx版本、描述等信息)

5.3 源码编译安装(通用方式)

当包管理器中没有所需软件或需要特定版本时,可通过源码编译安装,步骤通用且灵活。以安装nginx源码为例:

  1. 安装编译依赖: CentOS:yum install gcc gcc-c++ pcre-devel zlib-devel openssl-devel Ubuntu:apt install gcc g++ libpcre3-dev zlib1g-dev libssl-dev

  2. 下载源码包wget http://nginx.org/download/nginx-1.24.0.tar.gz(从官网下载指定版本)

  3. 解压源码包tar -zxvf nginx-1.24.0.tar.gz(解压到当前目录)

  4. 配置编译参数cd nginx-1.24.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module(指定安装路径和启用SSL模块)

  5. 编译并安装make(编译源码) make install(安装到指定路径)

  6. 启动软件/usr/local/nginx/sbin/nginx(执行启动脚本)

第六章:Linux网络配置与管理

网络配置是Linux服务器的基础,无论是本地网络还是公网访问,都需要掌握IP配置、端口管理、防火墙设置等核心技能。合理的网络配置能保障服务稳定访问,同时提升系统安全性。

6.1 网络信息查看

网络信息查看是排查网络问题的第一步,通过以下命令可全面掌握服务器网络状态,包括网卡、路由、连通性、端口占用等关键信息。

操作场景

命令

示例/说明

查看网卡IP信息

ip addr / ifconfig

ip addr(推荐,显示所有网卡IP、MAC、状态等;ifconfig为传统命令,部分系统需安装net-tools)

查看路由表

ip route / route

ip route(显示网关、目标网络、网卡等路由信息;示例:default via 192.168.1.1 dev eth0 表示默认网关为192.168.1.1)

测试网络连通性

ping

ping -c 4 www.baidu.com(-c指定发送4个数据包,避免无限循环;按Ctrl+C强制停止)

测试TCP端口连通性

telnet / nc(netcat)

telnet 192.168.1.100 80(测试目标IP的80端口;nc -zv 192.168.1.100 80-88 扫描80-88端口开放情况)

查看端口占用情况

ss / netstat

ss -tuln(-t显示TCP、-u显示UDP、-l显示监听、-n显示端口号;netstat -tuln 需安装net-tools,功能类似)

查看进程与端口关联

ss -tulnp / netstat -tulnp

ss -tulnp | grep 80(查看80端口被哪个进程占用,需root权限)

查看DNS配置

cat /etc/resolv.conf / nslookup

cat /etc/resolv.conf 查看DNS服务器地址;nslookup www.baidu.com 测试DNS解析是否正常

查看网络接口流量

iftop

需安装(yum install iftop / apt install iftop),实时显示网卡进出流量,按q退出

6.2 IP地址配置(临时/永久)

IP配置分为临时配置(重启网络或服务器后失效)和永久配置(重启后仍生效),不同Linux发行版永久配置方式略有差异,需区分操作。

6.2.1 临时IP配置(快速测试)

适合临时测试网络,无需修改配置文件,通过ip命令直接操作。

操作场景

命令(以eth0网卡为例)

示例

设置IP地址和子网掩码

ip addr add IP/子网掩码 dev 网卡名

ip addr add 192.168.1.100/24 dev eth0

删除IP地址

ip addr del IP/子网掩码 dev 网卡名

ip addr del 192.168.1.100/24 dev eth0

设置默认网关

ip route add default via 网关IP dev 网卡名

ip route add default via 192.168.1.1 dev eth0

重启网卡(使配置生效)

ip link set 网卡名 up/down

ip link set eth0 down && ip link set eth0 up(先禁用再启用)

6.2.2 永久IP配置(分发行版)

永久配置需修改网络配置文件,CentOS 7+和Ubuntu 18.04+是目前主流版本,以下分别说明其配置方式。

1. CentOS 7+ 配置方式(NetworkManager)
  1. 查看网卡配置文件名: 配置文件位于/etc/sysconfig/network-scripts/目录,文件名格式为ifcfg-网卡名,如ifcfg-eth0。可通过ls /etc/sysconfig/network-scripts/ifcfg-*查看。

  2. 编辑配置文件: 执行vim /etc/sysconfig/network-scripts/ifcfg-eth0,          添加/修改以下关键参数:

    TYPE=Ethernet # 网络类型:以太网
    BOOTPROTO=static # IP获取方式:static(静态)/dhcp(动态)
    NAME=eth0 # 网卡名
    DEVICE=eth0 # 设备名,与NAME一致
    ONBOOT=yes # 开机自动启用网卡
    IPADDR=192.168.1.100 # 静态IP地址
    NETMASK=255.255.255.0 # 子网掩码
    GATEWAY=192.168.1.1 # 默认网关
    DNS1=8.8.8.8 # 首选DNS服务器(谷歌)
    DNS2=114.114.114.114 # 备用DNS服务器(国内通用)

  3. 重启网络服务生效
    systemctl restart networknmcli c reload(NetworkManager重载配置)

2. Ubuntu 18.04+ 配置方式(Netplan)
  1. 查看Netplan配置文件: 配置文件位于/etc/netplan/目录,文件名通常为01-network-manager-all.yaml(不同系统可能略有差异)。

  2. 编辑配置文件: 执行vim /etc/netplan/01-network-manager-all.yaml
    注意yaml文件严格缩进(用空格,不支持Tab):
    network:
     
    ethernets: eth0: # 网卡名
       
    dhcp4: no # 禁用IPv4动态获取
       
    addresses: [192.168.1.100/24] # 静态IP+子网掩码
       
    gateway4: 192.168.1.1 # 默认网关
       
    nameservers:
         
    addresses: [8.8.8.8, 114.114.114.114] # DNS服务器
      version: 2
     
    renderer: NetworkManager # 使用NetworkManager管理

  3. 应用配置生效netplan apply(无需重启服务,立即生效)

6.3 防火墙配置(核心安全)

防火墙用于控制服务器端口的进出流量,是抵御网络攻击的第一道防线。CentOS默认使用firewalld,Ubuntu默认使用ufw,两者功能类似但命令不同。

6.3.1 CentOS 7+ 防火墙(firewalld)

操作场景

命令

示例/说明

查看防火墙状态

systemctl status firewalld

active(running)表示运行中,inactive表示已停止

启动/停止/重启防火墙

systemctl start/stop/restart firewalld

systemctl start firewalld(启动防火墙)

设置开机自启/禁用

systemctl enable/disable firewalld

systemctl enable firewalld(开机自动启动)

开放指定端口(永久)

firewall-cmd --zone=public --add-port=端口/tcp --permanent

firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端口,HTTP服务常用)

开放端口范围(永久)

firewall-cmd --zone=public --add-port=起始-结束/tcp --permanent

firewall-cmd --zone=public --add-port=3306-3308/tcp --permanent(开放3306-3308端口)

关闭指定端口(永久)

firewall-cmd --zone=public --remove-port=端口/tcp --permanent

firewall-cmd --zone=public --remove-port=80/tcp --permanent(关闭80端口)

重载配置生效

firewall-cmd --reload

修改规则后必须执行,否则不生效

查看已开放端口

firewall-cmd --zone=public --list-ports

列出所有永久开放的端口

6.3.2 Ubuntu 防火墙(ufw)

操作场景

命令

示例/说明

查看防火墙状态

ufw status

Status: active 表示运行中,inactive表示已停止

启动/停止防火墙

ufw enable/disable

ufw enable(启动防火墙,会提示"Command may disrupt existing ssh connections",确认后回车)

开放指定端口

ufw allow 端口/tcp

ufw allow 443/tcp(开放443端口,HTTPS服务常用)

开放端口范围

ufw allow 起始:结束/tcp

ufw allow 8000:9000/tcp(开放8000-9000端口)

关闭指定端口

ufw deny 端口/tcp

ufw deny 80/tcp(关闭80端口)

删除规则

ufw delete 规则(allow/deny 端口)

ufw delete allow 80/tcp(删除开放80端口的规则)

重置防火墙(清空所有规则)

ufw reset

谨慎使用,会删除所有自定义规则

6.4 网络服务管理(SSH为例)

SSH是远程管理Linux服务器的核心服务,默认端口22,为提升安全性,常需修改默认端口、禁用密码登录等配置。

6.4.1 SSH服务基础操作

操作场景

命令(CentOS/Ubuntu通用)

说明

查看SSH服务状态

systemctl status sshd(CentOS)/ systemctl status ssh(Ubuntu)

确认服务是否正常运行

启动/重启/停止SSH服务

systemctl start/restart/stop sshd(CentOS)/ systemctl start/restart/stop ssh(Ubuntu)

修改配置后需重启服务生效

设置开机自启SSH服务

systemctl enable sshd(CentOS)/ systemctl enable ssh(Ubuntu)

确保服务器重启后可远程连接

6.4.2 SSH服务安全配置(关键)
  1. 修改SSH默认端口(避免暴力破解)
    1. 编辑SSH配置文件:

    CentOS:vim /etc/ssh/sshd_config
    Ubuntu:vim /etc/ssh/sshd_config

    2. 找到"#Port 22",删除#并修改为自定义端口(如Port 2222,端口范围1-65535,建议10000以上)

    3. 开放新端口的防火墙规则(参考6.3章节)

    4. 重启SSH服务:
     systemctl restart sshd(CentOS)
      systemctl restart ssh(Ubuntu)

    5. 测试新端口连接:ssh 用户名@IP -p 2222

  2. 禁用root用户直接登录: 1. 编辑sshd_config文件,找到"PermitRootLogin yes",修改为"PermitRootLogin no" 2. 重启SSH服务后,需先登录普通用户,再通过su -切换到root (优势:即使攻击者破解普通用户密码,也无法直接获取root权限)

  3. 启用密钥登录(替代密码登录,更安全)
    1. 在本地机器生成密钥对(Windows需安装Git Bash或PuTTYgen): ssh-keygen -t rsa(按回车默认生成,无需设置密码)
    2. 上传公钥到服务器(本地执行): ssh-copy-id -p 2222 用户名@IP(替换为实际端口、用户名和IP)
    3. 编辑sshd_config文件,启用密钥登录: "PubkeyAuthentication yes"(确保未注释)、"PasswordAuthentication no"(禁用密码登录)
    4. 重启SSH服务,后续登录无需输入密码

第七章:Linux定时任务(Cron)

定时任务用于自动执行重复操作,如日志清理、数据备份、服务重启等,是Linux运维自动化的基础工具。通过crontab命令管理,支持分钟、小时、日、月、周等时间维度的调度。

7.1 Cron基础操作

操作场景

命令

示例/说明

编辑当前用户的定时任务

crontab -e

首次执行会提示选择编辑器,推荐选择vim(输入3并回车)

查看当前用户的定时任务

crontab -l

列出所有已配置的定时任务

删除当前用户的所有定时任务

crontab -r

谨慎使用,会清空所有任务,可先执行crontab -l备份

查看Cron服务状态

systemctl status crond(CentOS)/ systemctl status cron(Ubuntu)

确保服务运行中,否则定时任务无法执行

启动/重启Cron服务

systemctl start/restart crond(CentOS)/ systemctl start/restart cron(Ubuntu)

修改定时任务后无需重启服务,立即生效

7.2 定时任务语法规则

crontab文件中每一行代表一个定时任务,格式为: 分钟 小时 日 月 星期 要执行的命令

字段

取值范围

特殊符号含义

分钟

0-59

*:任意值; ,:多个值(如1,3表示1和3); -:范围(如1-5表示1到5); /:步长(如*/10表示每10个单位)

小时

0-23

1-31

1-12 或 Jan-Dec

星期

0-7(0和7均为周日)或 Sun-Sat

7.3 常见定时任务示例

需求描述

定时任务命令

说明

每天凌晨2点执行日志清理脚本

0 2 * * * /home/user/clean_log.sh

分钟0、小时2,日/月/星期任意,执行指定脚本

每小时的第30分钟备份数据库

30 * * * * /usr/bin/mysqldump -u root -p123456 dbname > /backup/db_$(date +%Y%m%d_%H%M%S).sql

$(date +...) 生成时间戳,避免备份文件覆盖

每周日晚上10点重启nginx服务

0 22 * * 0 systemctl restart nginx

星期0(周日)、小时22、分钟0执行重启命令

每月1号和15号上午9点同步数据

0 9 1,15 * * /home/user/sync_data.sh

日字段为1和15,小时9,分钟0执行同步脚本

每10分钟检查服务器负载

*/10 * * * * uptime >> /home/user/load_log.txt

分钟字段*/10表示每10分钟,>> 追加日志到文件

注意事项:1. 命令必须使用绝对路径(如/usr/bin/mysqldump,可通过which 命令名查看绝对路径);2. 脚本需添加执行权限(chmod +x 脚本名);3. 输出日志建议重定向(> 覆盖,>> 追加),避免Cron发送邮件通知。

第八章:Linux Shell脚本基础

Shell脚本是将一系列Linux命令按逻辑组合而成的文本文件,可实现自动化运维(如批量操作、故障排查、数据处理等)。掌握Shell脚本能大幅提升运维效率,是Linux进阶的核心技能。

8.1 Shell脚本入门(第一个脚本)

创建脚本文件

执行 vim hello.sh,脚本文件通常以 .sh为后缀(非强制,但规范)。

编写脚本内容

脚本第一行必须指定解释器(#!/bin/bash表示使用Bash解释器),后续添加命令:

#!/bin/bash
# 这是注释,描述脚本功能:输出问候语并显示系统信息
echo "Hello Linux! 欢迎学习Shell脚本"  # 输出文本
echo "当前系统时间:$(date)"           # 执行date命令并输出结果
echo "当前登录用户:$(whoami)"         # 显示当前用户名
echo "当前工作目录:$(pwd)"            # 显示当前工作目录

注释说明#开头的行为注释(单行),用于解释脚本功能,不执行。

添加执行权限

Shell脚本默认无执行权限,需通过 chmod +x hello.sh添加。

执行脚本

三种执行方式:

  1. 绝对路径执行:/home/user/hello.sh

  2. 相对路径执行:./hello.sh(需在脚本所在目录)

  3. 指定解释器执行:bash hello.sh(无需执行权限,直接调用解释器)

8.2 Shell脚本核心语法(变量与流程控制)

8.2.1 变量定义与使用

变量用于存储数据(如路径、参数、计算结果等),定义时等号两边无空格,使用时加 $符号。

#!/bin/bash
# 定义变量
name="ZhangSan"           # 字符串变量
age=25                   # 数字变量
work_dir="/home/user"    # 路径变量

# 使用变量
echo "姓名:$name"
echo "年龄:$age"
echo "工作目录:$work_dir"

# 变量运算(数字运算需用$(( )) 或 let)
echo "年龄加5:$((age + 5))"
let new_age=age+10
echo "年龄加10:$new_age"

# 命令结果赋值给变量
current_date=$(date +%Y%m%d)
echo "当前日期:$current_date"

# 接收用户输入(read命令)
read -p "请输入你的职业:" job  # -p 显示提示信息
echo "你的职业是:$job"
8.2.2 条件判断(if语句)

用于根据条件执行不同命令,常见条件:文件是否存在、数字大小比较、字符串是否相等。

#!/bin/bash
# 示例1:判断文件是否存在
file="/home/user/hello.sh"
if [ -f "$file" ]; then  # -f 判断是否为普通文件
    echo "$file 存在,文件大小:$(du -sh $file)"
else
    echo "$file 不存在"
fi

# 示例2:数字大小比较
read -p "请输入一个数字:" num
if [ $num -gt 100 ]; then  # -gt 大于,-lt 小于,-eq 等于,-ge 大于等于,-le 小于等于
    echo "$num 大于100"
elif [ $num -eq 100 ]; then
    echo "$num 等于100"
else
    echo "$num 小于100"
fi

# 示例3:字符串比较
read -p "请输入yes或no:" answer
if [ "$answer" = "yes" ]; then  # = 字符串相等,!= 不相等
    echo "你输入了yes"
elif [ "$answer" = "no" ]; then
    echo "你输入了no"
else
    echo "输入无效"
fi

条件判断注意

  1. [和 ]前后必须有空格

  2. 变量建议加双引号,避免空格导致错误

  3. 数字比较用 -gt/-lt等,字符串比较用 =/!=

8.2.3 循环语句(for/while)

用于重复执行命令,for循环适合固定次数循环,while循环适合条件循环。

#!/bin/bash
# 示例1:for循环(遍历列表)
echo "遍历1-5数字:"
for i in 1 2 3 4 5; do
    echo "数字:$i"
done

# 示例2:for循环(遍历目录文件)
echo "当前目录下的.sh文件:"
for file in *.sh; do
    echo "$file"
done

# 示例3:while循环(条件循环)
echo "倒计时5秒:"
count=5
while [ $count -ge 1 ]; do
    echo "$count"
    sleep 1  # 暂停1秒
    let count=count-1
done
echo "倒计时结束!"

8.3 实用Shell脚本案例(日志清理)

需求:清理 /var/log目录下30天前的 .log日志文件,保留清理记录。

#!/bin/bash
# 日志清理脚本,每天凌晨2点执行(配合Cron使用)

# 清理目录
log_dir="/var/log"
# 日志保存天数
save_days=30
# 清理记录文件
log_file="/home/user/clean_log_$(date +%Y%m%d).txt"

# 记录开始时间
echo "日志清理开始时间:$(date)" >> "$log_file"
echo "----------------------------------------" >> "$log_file"

# 清理30天前的.log文件(-mtime +30 表示修改时间超过30天)
find "$log_dir" -name "*.log" -type f -mtime +$save_days -print -delete >> "$log_file" 2>&1
# -print 显示清理的文件,-delete 删除文件,2>&1 把错误信息也写入日志

# 记录结束时间
echo "----------------------------------------" >> "$log_file"
echo "日志清理结束时间:$(date)" >> "$log_file"
echo "共清理 $(grep -c "deleted" "$log_file") 个日志文件" >> "$log_file"

使用方式:添加执行权限后,通过Cron设置每天凌晨2点执行(参考第七章定时任务示例)。

第九章:Linux运维常见问题排查

运维过程中难免遇到各种问题,掌握常见问题的排查思路和方法,能快速定位并解决问题,减少服务中断时间。

10.1 网络问题排查思路

  1. 检查本地网络配置:ip addr 确认IP、子网掩码是否正确;ip route 确认网关是否正确

  2. 测试链路连通性:ping 网关IP(如ping 192.168.1.1),若不通检查物理连接或网关配置;ping 公网IP(如ping 8.8.8.8),若不通检查路由或防火墙

  3. 测试DNS解析:nslookup www.baidu.com,若解析失败检查/etc/resolv.conf的DNS配置

  4. 检查端口与防火墙:ss -tulnp 确认服务端口是否监听;防火墙是否开放对应端口(firewall-cmd --list-ports 或 ufw status)

10.2 服务启动失败排查

  1. 查看服务状态与日志:systemctl status 服务名(查看失败原因);journalctl -u 服务名 -f(实时查看服务日志)

  2. 检查配置文件:服务启动失败多为配置文件错误,如nginx -t 检查Nginx配置;mysqld --check-config 检查MySQL配置

  3. 检查端口占用:ss -tulnp | grep 端口号,若端口被占用,停止占用进程或修改服务端口

  4. 检查权限与依赖:确认服务运行用户有足够权限;检查服务依赖的库文件(ldd 服务二进制文件)

10.3 磁盘空间不足排查

  1. 查看磁盘占用:df -h 确认哪个分区满了(使用率100%)

  2. 定位大文件/目录:du -sh /目录/* | sort -rh 按大小排序显示目录占用,找到占用最大的目录;find / -type f -size +100M 查找100M以上的大文件

  3. 清理空间:删除无用大文件、过期日志(如通过定时任务清理);扩展磁盘分区(若为云服务器,可扩容云盘后扩展分区)

运维核心原则:1. 遇到问题先看日志(日志是排查问题的核心依据);2. 修改配置前先备份(如cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak);3. 复杂操作先在测试环境验证,再在生产环境执行。

第十章:Linux系统性能优化实战

系统性能优化是运维工作的核心能力之一,需基于“监控-分析-优化-验证”的闭环流程,针对CPU、内存、磁盘、网络等关键维度精准调优,最终实现服务响应提速、资源利用率提升的目标。

11.1 性能监控工具与指标解读

优化前需先通过工具采集性能数据,明确瓶颈所在,常用工具及核心指标如下:

  • 综合监控工具:top(实时查看进程资源占用,重点关注%us用户态CPU占比、%sy内核态CPU占比、%id空闲CPU、KiB Mem内存使用)、htop(top增强版,支持鼠标操作和彩色显示);glances(全维度监控,含系统负载、磁盘IO、网络流量等,支持Web界面)。

  • CPU专项监控:mpstat -P ALL 1(查看每个CPU核心的负载,若单个核心%us+%sy接近100%,可能存在单线程瓶颈);pidstat -u 1(查看单个进程的CPU使用情况,定位高CPU进程)。

  • 内存专项监控:free -h(查看内存总容量、已用、缓存、交换分区使用,重点关注buff/cache缓存占用和Swap使用率,Swap频繁使用说明内存不足);vmstat 1(查看内存交换情况,si/so列持续非零表示内存紧张)。

  • 磁盘IO专项监控:iostat -x 1(查看磁盘读写速率、IO等待时间%util,%util接近100%表示磁盘IO饱和);iotop(实时查看进程磁盘IO占用,定位高IO进程)。

  • 网络专项监控:sar -n DEV 1(查看网卡收发流量rxkB/s、txkB/s,判断是否带宽饱和);iftop(实时显示网卡连接的流量排行,定位大流量连接)。

11.2 各维度性能优化方法

11.2.1 CPU优化

CPU瓶颈多源于进程调度不合理或单线程服务过载,优化思路如下:

  • 进程调度优化:通过nice/renice调整进程优先级(范围-20至19,值越小优先级越高),如将核心服务优先级提高:renice -10 进程PID;对实时性要求高的服务,使用chrt设置调度策略,如chrt -f 99 进程PID(FIFO调度策略,优先级99)。

  • 单线程瓶颈解决:将单线程服务改为多线程/多进程模式(如Nginx开启多worker进程,数量建议设为CPU核心数);若为业务代码问题,优化算法减少CPU计算量(如避免循环冗余)。

  • 关闭无用进程:通过systemctl disable --now 服务名停止并禁用无用服务(如postfix、cups等默认开启的非必要服务),减少CPU资源占用。

11.2.2 内存优化

内存优化核心是减少无效占用、合理利用缓存,避免内存泄漏:

  • 缓存优化:Linux会将空闲内存用于缓存(buff/cache),当应用需要内存时会自动释放,无需手动清理;若需强制释放缓存,可执行sync && echo 3 > /proc/sys/vm/drop_caches(仅应急使用,不建议常规操作)。

  • 交换分区优化:若内存充足,可降低swappiness值减少内存交换(echo 10 > /proc/sys/vm/swappiness,永久生效需修改/etc/sysctl.conf添加vm.swappiness=10);若内存不足,需扩容物理内存或调整应用内存配置(如Java服务通过-Xmx限制最大堆内存)。

  • 内存泄漏排查:通过ps -o rss,vsize 进程PID查看进程内存增长趋势,或使用valgrind工具检测C/C++程序内存泄漏;对Java服务,使用jmap生成堆快照、jhat分析泄漏点。

11.2.3 磁盘IO优化

磁盘是系统最慢的硬件,优化重点是减少IO次数、提高IO效率:

  • 文件系统优化:机械硬盘建议使用ext4文件系统,开启日志模式调整(mount -o data=ordered /dev/sda1,减少日志IO);SSD建议使用xfs文件系统,关闭冗余功能(如关闭磁盘预读echo 0 > /sys/block/sda/queue/read_ahead_kb)。

  • IO调度器优化:机械硬盘使用mq-deadline调度器(echo mq-deadline > /sys/block/sda/queue/scheduler),优化读写顺序;SSD使用none/kyber调度器,减少调度开销(永久生效需修改/etc/udev/rules.d/60-scheduler.rules配置)。

  • 应用层面优化:将频繁读写的文件(如日志、缓存)存储在SSD分区;开启应用缓存(如Nginx开启proxy_cache、MySQL开启查询缓存);避免大量小文件频繁读写,可合并文件或使用内存文件系统tmpfs(如mount -t tmpfs tmpfs /var/log/tmp -o size=1G)。

11.2.4 网络优化

网络优化聚焦于降低延迟、提高吞吐量,需结合协议与应用配置调整:

  • 内核参数优化:修改/etc/sysctl.conf调整TCP参数,如增加端口范围(net.ipv4.ip_local_port_range = 1024 65535)、开启TCP复用(net.ipv4.tcp_tw_reuse = 1)、调整TCP缓存(net.core.somaxconn = 1024,提高监听队列上限),修改后执行sysctl -p生效。

  • 应用配置优化:Nginx优化worker_processes(设为CPU核心数)、worker_connections(提高单进程最大连接数);MySQL优化max_connections(最大连接数)、wait_timeout(空闲连接超时时间),避免连接数过多导致的网络阻塞。

  • 带宽优化:对大文件传输服务,开启压缩(如Nginx开启gzip压缩);使用CDN加速静态资源访问,减少源站带宽压力。

11.3 优化验证与持续监控

优化后需通过工具验证效果,如通过ab(Apache Bench)测试Web服务并发量(ab -n 1000 -c 100 http://目标IP/),对比优化前后的响应时间、并发成功率;通过sar -o 性能文件 1 60记录优化后性能数据,与历史数据对比。

建议搭建持续监控平台(如Prometheus+Grafana),将关键性能指标可视化,设置阈值告警(如CPU使用率>90%、内存使用率>85%时告警),实现性能问题的提前预警。

第十一章:Linux系统安全加固策略

Linux系统作为服务器主流操作系统,其安全性直接决定业务数据与服务稳定性。安全加固需遵循“最小权限、纵深防御”原则,从账户、权限、网络、日志、漏洞等维度构建防护体系。

12.1 账户与权限加固

账户是系统访问的入口,权限失控是安全漏洞的主要根源,核心加固措施如下:

12.1.1 账户管理优化

  • 禁用root远程登录:修改/etc/ssh/sshd_config,设置PermitRootLogin no,同时创建普通用户并赋予sudo权限(useradd ops && passwd ops && usermod -aG sudo ops),通过普通用户+sudo方式管理系统,减少root账户暴露风险。

  • 清理无用账户与组:通过cat /etc/passwd查看所有账户,删除默认存在的无用账户(如lp、games、ftp等),执行userdel -r 账户名彻底删除(-r删除家目录);同理清理/etc/group中的无用组。

  • 设置密码策略:修改/etc/login.defs设置密码有效期(PASS_MAX_DAYS 90)、最小长度(PASS_MIN_LEN 8)、密码历史(PASS_MIN_DAYS 7,禁止7天内重复使用旧密码);安装pam_cracklib模块(apt install libpam-cracklib 或 yum install pam-cracklib),在/etc/pam.d/system-auth中添加password requisite pam_cracklib.so retry=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1,强制密码包含字母、数字、特殊字符。

  • 使用SSH密钥登录:禁用密码登录,改用密钥登录。客户端生成密钥对(ssh-keygen -t rsa -b 4096),通过ssh-copy-id ops@目标IP将公钥上传至服务器;服务器修改/etc/ssh/sshd_config,设置PasswordAuthentication no、PubkeyAuthentication yes,重启sshd服务(systemctl restart sshd)。

12.1.2 权限控制加固

  • 文件与目录权限最小化:关键配置文件权限设置为600(仅所有者可读写),如chmod 600 /etc/ssh/sshd_config、chmod 600 /etc/sudoers;系统命令权限设置为755(所有者可执行,其他只读),如chmod 755 /bin/ls;禁止普通用户修改系统文件,对敏感目录(如/root、/etc)执行chattr +i 目录名,锁定目录防止删除或修改(解锁用chattr -i)。

  • sudo权限精细化控制:修改/etc/sudoers文件(需用visudo命令编辑,避免语法错误),为普通用户分配指定命令权限,如ops ALL=(ALL) /usr/bin/systemctl restart nginx,限制用户仅能执行nginx重启命令,而非所有sudo命令。

  • 禁用SUID/SGID权限:SUID/SGID权限允许用户以文件所有者权限执行命令,存在提权风险。通过find / -type f -perm -4000 2>/dev/null查找所有SUID文件,对非必要文件(如/usr/bin/find)执行chmod u-s 文件名,移除SUID权限;同理用find / -type f -perm -2000 2>/dev/null查找SGID文件并处理。

12.2 网络安全加固

网络是系统受攻击的主要通道,需通过防火墙、端口限制、协议优化等方式阻断非法访问。

12.2.1 防火墙配置

  • CentOS/RHEL系统:使用firewalld防火墙,仅开放必要端口(如SSH 22、Web 80/443),命令如下:firewall-cmd --add-port=22/tcp --permanent(永久开放22端口)、firewall-cmd --add-port=80/tcp --permanent、firewall-cmd --reload(重载配置);删除无用端口用firewall-cmd --remove-port=端口号/tcp --permanent。

  • Ubuntu/Debian系统:使用ufw防火墙,开启防火墙(ufw enable)、开放必要端口(ufw allow 22/tcp、ufw allow 80/tcp)、查看状态(ufw status);禁止所有入站连接(ufw default deny incoming)、允许所有出站连接(ufw default allow outgoing),实现“默认拒绝,按需开放”。

  • 高级防护:对高风险端口(如22),限制仅指定IP访问,如firewalld配置:firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept' --permanent,仅允许192.168.1.0网段访问SSH。

12.2.2 端口与服务加固

  • 关闭无用端口与服务:通过ss -tulnp查看所有监听端口,结合systemctl list-unit-files --type=service查看运行服务,禁用无用服务(如telnet、ftp、rpcbind等),执行systemctl disable --now 服务名停止并禁用。

  • 修改默认端口:将SSH默认22端口修改为非知名端口(如2222),修改/etc/ssh/sshd_config的Port 2222,重启sshd服务;同时在防火墙开放新端口,避免无法远程连接。

  • 禁用不安全协议:修改/etc/ssh/sshd_config,禁用SSHv1协议(Protocol 2)、禁用弱加密算法(如Ciphers aes256-ctr,aes192-ctr,aes128-ctr),重启sshd服务;禁用HTTP、Telnet等明文协议,改用HTTPS、SSH等加密协议。

12.3 日志与审计加固

日志是安全事件追溯的关键依据,需确保日志完整、不可篡改,并实现集中管理。

12.3.1 系统日志配置

  • 日志轮转配置:修改/etc/logrotate.d/syslog配置日志轮转策略,如设置每周轮转一次(weekly)、保留4周日志(rotate 4)、轮转后压缩(compress),避免日志文件过大占用磁盘空间。

  • 关键日志权限:设置/var/log/secure(认证日志)、/var/log/messages(系统日志)权限为600(chmod 600 /var/log/secure),仅root用户可查看,防止日志被篡改或泄露。

  • 开启审计日志:安装auditd服务(apt install auditd 或 yum install auditd),启动并设置开机自启(systemctl enable --now auditd);配置审计规则,如监控/etc/passwd文件(auditctl -w /etc/passwd -p rwxa -k passwd_change),记录对该文件的读写执行操作,通过ausearch -k passwd_change查看审计记录。

12.3.2 日志集中管理

单台服务器日志难以统一分析,建议搭建日志集中管理平台(如ELK Stack:Elasticsearch+Logstash+Kibana),将多台服务器日志汇总至Elasticsearch,通过Kibana可视化查询与分析;设置日志告警规则,如检测到多次SSH登录失败(grep "Failed password" /var/log/secure | wc -l)时,通过脚本发送邮件或短信告警。

12.4 漏洞与补丁管理

系统漏洞是攻击者入侵的主要途径,需建立定期漏洞扫描与补丁更新机制。

  • 漏洞扫描:使用开源工具OpenVAS或商业工具Nessus定期扫描系统漏洞,生成漏洞报告;重点关注高风险漏洞(如心脏出血、永恒之蓝等),优先修复。

  • 补丁更新:定期执行系统更新命令(apt update && apt upgrade -y 或 yum update -y),安装安全补丁;对生产环境,建议先在测试环境验证补丁兼容性,再批量更新,避免补丁导致服务异常。

  • 第三方软件管理:及时更新Web服务(Nginx、Apache)、数据库(MySQL、PostgreSQL)等第三方软件,删除未使用的软件包(apt remove 软件名 或 yum remove 软件名),减少漏洞攻击面。

第十二章 : 结尾语

当你读到这里,我们已一同走完了Linux运维从基础入门到进阶实战的完整旅程。

其一,“日志为纲,备份为基”是运维的生存底线。无论是网络不通、服务宕机还是数据丢失,日志永远是定位问题的第一线索,而“修改前先备份”的习惯,则是避免小失误酿成大故障的最后防线。教程中从 journalctl 查看服务日志到 cp 命令备份配置文件,从定时任务备份数据到审计日志追溯操作,始终贯穿这一原则,这也是资深运维人员的“本能反应”。

其二,“监控先行,主动防御”是运维的进阶思维。初级运维被动响应问题,高级运维主动预判风险。从 topiostat 等基础工具的指标解读,到 Prometheus + Grafana 的可视化监控,再到安全审计与漏洞扫描的提前预警,核心都是将“事后救火”转化为“事前防控”,这也是现代运维从“技术支持”转向“业务保障”的关键跨越。

其三,“自动化赋能,标准化落地”是运维的效率核心。当服务器数量从几台增长到上百台,手动操作的效率瓶颈与出错风险会呈指数级上升。Ansible 的批量执行、SaltStack 的状态管理、Airflow 的工作流调度,本质上都是通过工具将重复工作标准化、自动化,让运维人员从“机械操作”中解放出来,聚焦于架构优化、风险预判等更高价值的工作。

Linux 运维是一个“终身学习”的领域。随着云计算、容器化、微服务等技术的发展,运维的边界在不断扩展——从物理机运维到云服务器管理,从单节点部署到集群调度,从传统运维到 DevOps 融合,新的技术与场景不断涌现。但无论技术如何迭代,“保障稳定、提升效率、支撑业务”的核心逻辑始终不变。教程中学习的 shell 脚本基础、网络分层原理、权限管控逻辑等知识,会成为你应对新技术的“通用语言”。

我是千寻, 这期内容到这里就结束了,我们有缘再会😂😂😂 !!!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐