一份不可多得的 《Linux》 学习指南( 2.8W字 )
Linux是1991年由芬兰大学生Linus Torvalds开发的开源操作系统内核,后续经全球开发者协作完善,形成了包含内核、系统工具、应用程序的完整操作系统。开源免费:源代码公开可定制,无版权费用,企业级应用成本极低稳定可靠:服务器场景可连续运行数年不重启,故障率远低于Windows Server跨平台兼容:支持x86、ARM等多种架构,从手机、路由器到超级计算机均能运行安全可控:权限管理严格
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的核心组成
-
Linux内核(Kernel):系统核心,负责管理硬件资源(CPU、内存、磁盘、网络),是应用程序与硬件的桥梁
-
Shell(壳程序):用户与内核的交互界面,接收用户命令并传递给内核执行。常见Shell有: bash:默认Shell,CentOS、Ubuntu等主流发行版标配
-
zsh:功能更强大,支持语法高亮、自动补全,适合桌面用户
-
sh:最基础的Shell,兼容性强但功能简单
-
文件系统:组织文件和目录的方式,Linux采用树形结构,根目录为
/,
常见目录功能:
目录路径核心功能备注/根目录,所有目录的父目录Linux唯一根节点,无盘符概念/bin存放基础用户命令(ls、cp等)所有用户可执行/sbin存放系统管理命令(reboot、ifconfig等)仅root用户可执行/home普通用户家目录如用户user的家目录为/home/user/root管理员(root)家目录与普通用户家目录分离,更安全/etc存放系统配置文件(如网络、服务配置)修改需谨慎,建议先备份/var存放动态变化文件(日志、缓存、数据库)需关注磁盘占用,避免日志撑满/tmp临时文件目录系统重启后文件会清空/usr存放应用程序和共享资源类似Windows的Program Files -
应用程序:如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 准备工具与镜像
-
虚拟机软件: Windows:VMware Workstation 17 Pro(官网下载,可试用30天)
-
macOS:VMware Fusion 13 Pro(官网下载,试用30天)
-
免费替代方案:VirtualBox(Oracle开源,功能稍弱但免费)
-
Linux镜像文件: CentOS 7:官网下载「CentOS-7-x86_64-Minimal-2009.iso」(Minimal版为最小安装,适合服务器学习)
-
Ubuntu 22.04:官网下载「ubuntu-22.04.3-desktop-amd64.iso」(Desktop版带图形界面,适合桌面学习)
2.1.2 虚拟机创建(以VMware Workstation安装CentOS 7为例)
-
新建虚拟机: 打开VMware,点击「创建新的虚拟机」,选择「典型(推荐)」,点击下一步
-
选择「安装程序光盘映像文件(iso)」,点击「浏览」选择下载好的CentOS 7镜像,勾选「稍后安装操作系统」,点击下一步
-
客户机操作系统选择「Linux」,版本选择「CentOS 7 64位」,点击下一步
-
虚拟机名称输入「CentOS 7 Server」,位置选择非系统盘(如D:\VMs),点击下一步
-
磁盘容量设置为20GB(新手足够),选择「将虚拟磁盘存储为单个文件」,点击下一步
-
点击「自定义硬件」,按需调整配置: 内存:建议2GB(最低1GB,低于1GB可能安装失败)
-
处理器:建议2核(最低1核)
-
网络适配器:选择「桥接模式」(可让虚拟机与主机在同一局域网,方便后续远程连接)
-
点击「完成」,虚拟机创建完成
-
安装CentOS 7系统: 选中创建的虚拟机,点击「开启此虚拟机」,等待加载镜像后,出现安装界面: Install CentOS 7:直接安装(推荐)
-
Test this media & install CentOS 7:先检测镜像完整性再安装(耗时久,可选)
-
选择语言:默认「English」(推荐,避免中文路径乱码),点击「Continue」
-
进入安装配置界面,重点配置3项: Date & Time(日期时间):点击进入,选择时区为「Asia/Shanghai」,开启网络时间同步(NTP),点击「Done」
-
Keyboard(键盘):默认「English (US)」,无需修改,点击「Done」
-
Installation Source(安装源):默认使用本地镜像,点击「Done」
-
Software Selection(软件选择):点击进入,选择「Minimal Install」(最小安装,仅含核心组件),右侧可勾选「Compatibility Libraries」(兼容库)和「Development Tools」(开发工具),点击「Done」
-
Installation Destination(安装目标):点击进入,选择「I will configure partitioning」(手动分区),点击「Done」;进入分区界面,选择「Standard Partition」(标准分区),点击左下角「+」添加分区: /boot分区:大小500MB,文件系统ext4
-
swap分区:内存≤4GB时设为内存2倍(如2GB内存设4GB),内存>4GB时设4GB即可
-
/分区:剩余所有空间,文件系统ext4
-
Network & Hostname(网络和主机名):点击进入,开启右上角「ON」按钮,主机名输入「centos7-server」,点击「Apply」,再点击「Done」(开启网络后安装过程会自动下载更新)
-
所有配置完成后,点击「Begin Installation」(开始安装),等待安装进度到100%(约5-10分钟,取决于配置)
-
安装过程中可配置「Root Password」(根密码)和「User Creation」(创建用户): Root Password:点击进入,设置root密码(建议复杂且牢记,如Root@123),若密码简单需点击2次「Done」确认
-
User Creation:点击进入,输入用户名(如user)和密码,勾选「Make this user an administrator」(授予管理员权限),点击「Done」
-
安装完成后,点击「Reboot」(重启),虚拟机自动重启后即可进入CentOS 7系统
-
Ubuntu 22.04桌面版安装差异: 虚拟机创建时选择「Ubuntu 64位」,镜像选择Desktop版iso
-
启动后选择「Install Ubuntu」,语言可选「中文(简体)」
-
键盘布局默认「汉语」,点击下一步
-
安装类型选择「清除整个磁盘并安装Ubuntu」(新手推荐),点击下一步
-
选择时区「上海」,点击下一步
-
输入用户名、密码,勾选「自动登录」,点击下一步,等待安装完成后重启即可
2.1.3 虚拟机网络配置(桥接模式确保联网)
桥接模式下,虚拟机需配置IP(静态或动态)才能联网,以CentOS 7为例:
-
动态获取IP(简单,适合临时使用): 登录系统后,执行命令:
dhclient(获取DHCP服务器分配的IP) -
执行命令:
ip addr,查看网卡信息(通常为ens33),inet后的即为IP地址(如192.168.1.100) -
测试联网:
ping www.baidu.com,若出现字节回复则联网成功(按Ctrl+C停止ping) -
静态IP配置(推荐,适合长期使用): 执行命令编辑网络配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-ens33(ens33为网卡名,需根据实际情况修改) -
按「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服务器,谷歌DNSDNS2=114.114.114.114 # 备用DNS,国内通用 -
按「Esc」退出编辑模式,输入「:wq」保存并退出(若输入错误,输入「:q!」强制退出不保存)
-
重启网络服务:
systemctl restart network -
验证配置:
ip addr查看IP是否生效,ping www.baidu.com测试联网
2.2 场景2:物理机安装(适合专用Linux主机)
将Linux直接安装在物理电脑上,优点是性能无损耗,适合作为主力系统或服务器。注意:安装会清空磁盘数据,务必提前备份重要文件!
2.2.1 准备工作
-
制作启动U盘: 工具:Rufus(Windows)或BalenaEtcher(跨平台,推荐新手)
-
步骤:打开工具,选择Linux镜像文件和U盘(建议8GB以上),点击「开始」,等待制作完成(U盘数据会清空)
-
磁盘分区准备: 单系统安装:直接清空整个磁盘(安装时选择「清除整个磁盘」)
-
双系统安装(Windows+Linux):在Windows的「磁盘管理」中压缩卷,留出至少20GB未分配空间给Linux
-
设置启动顺序: 插入启动U盘,重启电脑,开机时按快捷键进入BIOS(不同品牌快捷键不同:联想F2、戴尔F12、惠普F10、华硕F2)
-
在BIOS中设置「USB Storage Device」为第一启动项,保存并重启
2.2.2 安装步骤
与虚拟机安装步骤基本一致,差异点:
-
磁盘分区时,双系统需选择「未分配空间」进行分区,避免覆盖Windows分区
-
引导程序(GRUB)默认安装在磁盘MBR或EFI分区,确保能识别双系统(安装后重启会显示系统选择菜单)
-
安装完成后,若未出现双系统菜单,需修复GRUB引导(参考后续问题排查章节)
2.3 场景3:云服务器购买(新手最推荐,零配置)
直接购买阿里云、腾讯云等厂商的Linux云服务器,优点是无需本地硬件,随时随地通过网络访问,自带公网IP,适合学习服务器运维和部署应用。
2.3.1 云服务器购买(以阿里云为例)
-
打开阿里云官网,注册并登录,进入「云服务器ECS」购买页面
-
新手选择「入门级」配置: 地域:选择就近地域(如华东1-上海),延迟更低
-
实例规格:1核2GB(新手足够,学生机更便宜)
-
镜像:选择「CentOS 7.9 64位」或「Ubuntu 22.04 64位」
-
存储:40GB高效云盘
-
网络:默认公网IP(按流量计费),带宽1-2Mbps即可
-
安全组:勾选「HTTP 80」「HTTPS 443」「SSH 22」(允许网页访问和远程连接)
-
登录方式:选择「密码登录」,设置root密码(牢记)
-
购买时长:1个月(新手试用,后续可续费)
-
支付完成后,进入「云服务器ECS」控制台,找到购买的服务器,记录公网IP(如47.100.xxx.xxx)
2.3.2 云服务器远程连接(首次登录)
-
Windows连接Linux(用PuTTY): 下载PuTTY:官网下载putty.exe,无需安装直接运行
-
配置连接: Session → Host Name:输入云服务器公网IP
-
Port:22(SSH默认端口)
-
Connection type:SSH
-
点击「Open」,弹出终端窗口,输入用户名「root」,按回车,再输入密码(输入时无显示,输完按回车)
-
登录成功:出现「[root@xxx ~]#」提示符,代表已进入Linux命令行
-
macOS连接Linux(用终端): 打开「终端」,执行命令:
ssh root@公网IP(如ssh root@47.100.xxx.xxx) -
首次连接会提示「Are you sure you want to continue connecting (yes/no)?」,输入「yes」按回车
-
输入root密码,按回车登录(密码无显示)
-
新手友好工具:Xshell(Windows): 功能:支持会话保存、密钥登录、文件传输,比PuTTY更易用
-
步骤:新建会话,输入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为例)
-
打开文件:执行
vim test.sh,默认进入普通模式 -
编辑内容:按i进入插入模式(底部显示--INSERT--),输入脚本内容
-
保存文件:按Esc返回普通模式,按:进入命令模式,输入w回车(w=write)
-
退出编辑器:命令模式输入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位:文件类型(-:普通文件,d:目录,l:链接文件)
-
第2-4位:所有者权限(rwx:读、写、执行)
-
第5-7位:所属组权限(r--:仅读)
-
第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源码为例:
-
安装编译依赖: CentOS:
yum install gcc gcc-c++ pcre-devel zlib-devel openssl-develUbuntu:apt install gcc g++ libpcre3-dev zlib1g-dev libssl-dev -
下载源码包:
wget http://nginx.org/download/nginx-1.24.0.tar.gz(从官网下载指定版本) -
解压源码包:
tar -zxvf nginx-1.24.0.tar.gz(解压到当前目录) -
配置编译参数:
cd nginx-1.24.0./configure --prefix=/usr/local/nginx --with-http_ssl_module(指定安装路径和启用SSL模块) -
编译并安装:
make(编译源码)make install(安装到指定路径) -
启动软件:
/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)
-
查看网卡配置文件名: 配置文件位于/etc/sysconfig/network-scripts/目录,文件名格式为ifcfg-网卡名,如ifcfg-eth0。可通过
ls /etc/sysconfig/network-scripts/ifcfg-*查看。 -
编辑配置文件: 执行
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服务器(国内通用) -
重启网络服务生效:
systemctl restart network或nmcli c reload(NetworkManager重载配置)
2. Ubuntu 18.04+ 配置方式(Netplan)
-
查看Netplan配置文件: 配置文件位于/etc/netplan/目录,文件名通常为01-network-manager-all.yaml(不同系统可能略有差异)。
-
编辑配置文件: 执行
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管理 -
应用配置生效:
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服务安全配置(关键)
-
修改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 -
禁用root用户直接登录: 1. 编辑sshd_config文件,找到"PermitRootLogin yes",修改为"PermitRootLogin no" 2. 重启SSH服务后,需先登录普通用户,再通过su -切换到root (优势:即使攻击者破解普通用户密码,也无法直接获取root权限)
-
启用密钥登录(替代密码登录,更安全):
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添加。
执行脚本
三种执行方式:
-
绝对路径执行:
/home/user/hello.sh -
相对路径执行:
./hello.sh(需在脚本所在目录) -
指定解释器执行:
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
条件判断注意:
-
[和]前后必须有空格 -
变量建议加双引号,避免空格导致错误
-
数字比较用
-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 网络问题排查思路
-
检查本地网络配置:ip addr 确认IP、子网掩码是否正确;ip route 确认网关是否正确
-
测试链路连通性:ping 网关IP(如ping 192.168.1.1),若不通检查物理连接或网关配置;ping 公网IP(如ping 8.8.8.8),若不通检查路由或防火墙
-
测试DNS解析:nslookup www.baidu.com,若解析失败检查/etc/resolv.conf的DNS配置
-
检查端口与防火墙:ss -tulnp 确认服务端口是否监听;防火墙是否开放对应端口(firewall-cmd --list-ports 或 ufw status)
10.2 服务启动失败排查
-
查看服务状态与日志:systemctl status 服务名(查看失败原因);journalctl -u 服务名 -f(实时查看服务日志)
-
检查配置文件:服务启动失败多为配置文件错误,如nginx -t 检查Nginx配置;mysqld --check-config 检查MySQL配置
-
检查端口占用:ss -tulnp | grep 端口号,若端口被占用,停止占用进程或修改服务端口
-
检查权限与依赖:确认服务运行用户有足够权限;检查服务依赖的库文件(ldd 服务二进制文件)
10.3 磁盘空间不足排查
-
查看磁盘占用:df -h 确认哪个分区满了(使用率100%)
-
定位大文件/目录:du -sh /目录/* | sort -rh 按大小排序显示目录占用,找到占用最大的目录;find / -type f -size +100M 查找100M以上的大文件
-
清理空间:删除无用大文件、过期日志(如通过定时任务清理);扩展磁盘分区(若为云服务器,可扩容云盘后扩展分区)
运维核心原则: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 脚本基础、网络分层原理、权限管控逻辑等知识,会成为你应对新技术的“通用语言”。
我是千寻, 这期内容到这里就结束了,我们有缘再会😂😂😂 !!!
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)