摘要
本篇博客以 CentOS 为例,系统讲解了 Linux 的入门知识和实战技能。内容涵盖系统安装、文件系统与目录结构、基本操作、用户与权限管理、软件安装与服务管理、网络配置与远程连接、Shell 脚本编程、日志监控、开发环境搭建及常见问题排查。文章不仅详细介绍各类命令与操作,还提供实用实践建议与学习资源,帮助新手从零开始快速掌握 Linux 系统管理与开发能力。无论是入门学习,还是日常运维和开发实践,本博客都能作为全面参考指南。
1、引言
当你第一次听到 “Linux” 这个名字时,或许会觉得它神秘而陌生:屏幕上闪烁的黑底白字、电影里黑客飞快敲击的命令行,让人既好奇又有些畏惧。与 Windows 或 macOS 那种 “点击下一步即可完成” 的体验不同,Linux 的世界里充满了看似复杂的命令、陌生的目录结构,以及和日常习惯完全不同的操作方式。许多新手第一次接触时,都会被这些差异吓到,甚至怀疑自己能否学会。
然而,正是这种差异,成就了 Linux 独特的魅力。
Linux 不只是一个操作系统,更是一种 理念与工具的结合:它强调 “一切皆文件” 的统一哲学,倡导 “小工具解决大问题” 的高效方法,更代表着自由与开放的开源精神。正因为如此,Linux 才能在全球范围内拥有如此广泛的影响力:从超级计算机到智能手机,从云计算平台到嵌入式设备,Linux 几乎无处不在。换句话说,只要你在使用互联网,你就一定在间接地使用 Linux。
对于学习者而言,掌握 Linux 并非一蹴而就的过程。它可能会让你在权限不足时手足无措,也可能让你因找不到命令而焦虑。但随着理解的加深,你会发现自己逐渐掌握了系统的核心逻辑,拥有了以更底层、更高效方式驾驭计算机的能力。Linux 的学习,正是一场“揭开黑箱”的探索之旅。
本指南正是为 零基础的新手 准备的。我们将从 Linux 的历史和发行版选择讲起,带你完成系统安装和环境准备;接着逐步掌握文件系统、命令行操作、用户权限、软件管理、进程控制和网络连接等核心知识;最后,还会介绍 Shell 脚本、系统日志、开发环境搭建等实用技能。通过循序渐进的学习,你不仅能学会 “怎么用”,更能理解“为什么这样用”。
希望读完这份指南,你能够从初次面对命令行的畏惧,走向熟练运用 Linux 的自信;不再把它视作陌生的黑屏系统,而是把它当作未来学习和工作的可靠伙伴。接下来,就让我们一起走进 Linux 的世界,从零开始,揭开它的神秘面纱。
2、Linux 简介与发展历史
2.1、Linux 的诞生
Linux 的故事要从 1991 年说起。当时,芬兰赫尔辛基大学的学生 Linus Torvalds 因为不满意学校提供的专有 UNIX 系统(Minix 的功能有限且不开源),决定编写一个属于自己的操作系统内核。他在一封邮件中写下了那句著名的话:
“Hello everybody out there using Minix — I’m doing a (free) operating system (just a hobby, won’t be big and professional like GNU) for 386(486) AT clones…”
最初,Linux 只是 Linus 的个人项目,他并没有料想到它会成长为如今全球最流行的操作系统之一。但由于 Linux 采用 开源许可(GNU GPL),全球的开发者可以自由地下载、修改和分享代码,这为 Linux 的快速发展奠定了坚实基础。
2.2、Linux 与 GNU 的关系
要理解 Linux,就绕不开 GNU 项目。
早在 1983 年,Richard Stallman 就发起了 GNU(GNU’s Not Unix!)项目,目标是开发一个完全自由的类 UNIX 操作系统。GNU 项目几乎完成了系统所需的所有组件:编译器(GCC)、库、工具集、Shell……唯独缺少一个关键的内核(当时的 Hurd 内核进展缓慢)。
Linus 的 Linux 内核恰好填补了这一空白。当 Linux 内核与 GNU 的工具链结合后,一个完整、自由且强大的操作系统生态就此诞生。因此严格来说,很多人称我们日常使用的系统为 GNU/Linux,但为了简洁,人们通常简称 Linux。
2.3、Linux 与 UNIX 的关系
Linux 不是直接从 UNIX 源码发展而来,而是 类 UNIX 系统。
它在设计理念和命令体系上大量借鉴了 UNIX,保持了兼容性,但内核本身是 Linus 从零开发的。UNIX 在上世纪 70~80 年代广泛应用于大型机和工作站,但由于版权和费用问题,限制了其普及。Linux 则通过开源的方式,将类 UNIX 系统带入了大众视野,让任何人都能使用和改进。
2.4、Linux 的发展与壮大
自 1991 年至今,Linux 发展已经超过三十年,逐渐形成了庞大而繁荣的生态系统:
- 1991 年:Linus 发布 Linux 0.01 内核,只有不到 1 万行代码。
- 1992 年:Linux 内核采用 GNU GPL 许可,真正成为自由软件。
- 1994 年:Linux 1.0 正式发布,支持多任务与 TCP/IP 网络协议。
- 1996 年:Linux 2.0 发布,开始支持多处理器(SMP)。此时 Linux 已逐步进入企业和服务器市场。
- 2000 年后:互联网兴起,Linux 成为服务器的首选系统。Google、Amazon 等互联网巨头广泛采用 Linux。
- 2007 年起:智能手机普及,基于 Linux 内核的 Android 系统爆发式增长,让 Linux 真正走进大众生活。
- 现今:Linux 已是超级计算机、云计算、嵌入式设备的绝对主角,并持续活跃在全球技术舞台。
2.5、Linux 发行版的出现
随着 Linux 内核的不断完善,社区和企业开始将内核与不同的软件工具、桌面环境、包管理器打包,形成了各种 Linux 发行版(Distribution)。常见的发行版包括:
- Debian 系列
- Debian:以稳定著称,社区驱动
- Ubuntu:对用户友好,适合新手与桌面使用
- Deepin:国产发行版,注重桌面体验
- Red Hat 系列
- RHEL(Red Hat Enterprise Linux):企业级,收费支持
- CentOS(现已转向 CentOS Stream):RHEL 的免费替代
- Fedora:前沿性强,作为 RHEL 的实验田
- 其他特色发行版
- Arch Linux:极简,用户自行定制,学习价值高
- Gentoo:源码编译,性能极致优化
- Kali Linux:专注渗透测试与网络安全
每个发行版在界面、软件管理、更新方式上都有差异,但核心内核始终是 Linux。
2.6、Linux 的应用领域
Linux 的成功不仅在于它的开源属性,更在于它在各个领域的广泛应用:
- 服务器与互联网基础设施
全球超过 90% 的服务器运行 Linux,Apache、Nginx、MySQL 等关键组件与 Linux 紧密结合。 - 超级计算机
TOP500 榜单显示,世界上几乎所有超级计算机都运行 Linux。 - 嵌入式与物联网
智能路由器、智能电视、车载系统等,大多以 Linux 为内核。 - 移动设备
Android 系统基于 Linux 内核,成为全球使用最广泛的移动操作系统。 - 开发与科研
Linux 提供了开放的环境,C/C++、Python、AI 框架、分布式计算等,都在 Linux 上表现最佳。
2.7、Linux 的核心价值
总结来说,Linux 的核心价值在于:
- 开源与自由:任何人都可以自由使用、修改和传播。
- 稳定与安全:服务器长期运行不宕机,安全性高。
- 可定制性强:从极简到完整桌面,用户可根据需求自由构建。
- 社区驱动:拥有全球最活跃的开源社区,持续发展。
Linux 从一个大学生的 “兴趣项目”,成长为全球最重要的操作系统之一,是开源精神的最佳见证。
3、Linux 系统安装与环境准备
在了解了 Linux 的历史和发展之后,下一步就是让它 “跑起来”。Linux 的学习不应停留在纸面,而是要通过实际操作才能真正掌握。无论你是希望在日常开发中使用 Linux,还是仅仅出于学习目的,安装一个可用的 Linux 系统环境都是第一步。下面,我们将从发行版选择、安装方式、虚拟化环境配置到基本工具准备,逐步展开。
3.1、Linux 发行版选择
Linux 的内核是统一的,但不同的组织或社区在此基础上开发出了各式各样的 发行版(Distribution, Distro)。常见的发行版主要有以下几类:
- Debian 系列(如 Ubuntu、Linux Mint)
- 特点:用户友好、社区庞大、软件包丰富。
- 适合对象:初学者、桌面用户、Web 开发者。
- 代表:Ubuntu LTS 稳定易用,Mint 界面更接近 Windows。
- Red Hat 系列(如 CentOS、Rocky Linux、Fedora)
- 特点:稳定、安全,广泛应用于企业生产环境。
- 适合对象:学习服务器运维、企业应用部署。
- 代表:Fedora 新特性前沿,CentOS/AlmaLinux/ RockyLinux 更适合稳定生产环境。
- Arch 系列(如 Arch Linux、Manjaro)
- 特点:灵活、极简、可定制化程度高。
- 适合对象:有一定基础的用户、喜欢“从零搭建”系统的人。
- 代表:Arch Wiki 是学习 Linux 的宝库,Manjaro 作为衍生版更易上手。
- 其他特色发行版
- openSUSE(企业与开发者兼顾)
- Kali Linux(安全测试专用)
- Raspberry Pi OS(物联网、嵌入式设备)
建议:单纯作为新手体验推荐从 Ubuntu 入门;如果目标是生产实践,可以选择 CentOS Stream 或 Rocky Linux;若想追求深度理解,可尝试 Arch Linux。
3.2、Linux 安装方式
根据不同需求,我们可以选择以下几种安装方式:
- 物理机安装(双系统/单系统)
- 直接在电脑硬盘上安装 Linux,作为主系统或与 Windows 共存。
- 优点:性能最佳,贴近真实使用场景。
- 缺点:需要分区,存在误操作导致数据丢失的风险。
- 场景:长期学习、作为主要工作系统。
- 虚拟机安装
- 使用 VirtualBox、VMware 等虚拟化软件,在 Windows 或 macOS 上运行 Linux。
- 优点:安全、易于恢复快照、适合练习。
- 缺点:性能略受限,需一定硬件资源。
- 场景:学习入门、命令行练习。
- WSL(Windows Subsystem for Linux)
- 在 Windows 10/11 上直接运行 Linux 子系统。
- 优点:无需虚拟机,性能接近原生,能直接在 Windows 和 Linux 环境中切换。
- 缺点:对图形界面支持有限(WSL2 已有改善)。
- 场景:开发者、需要在 Windows 环境中体验 Linux。
- 云服务器安装
- 在阿里云、腾讯云、AWS 等云平台购买 VPS,安装 Linux。
- 优点:无需本地配置,直接拥有公网 IP。
- 缺点:需付费,对新手有一定门槛。
- 场景:运维实践、部署项目。
3.3、虚拟机安装示例(以 VMware + CentOS 为例)
- 下载 VMware
前往 VMware 官网 下载并安装。 - 获取 CentOS 镜像文件(ISO)
前往 CentOS 官网 下载你喜欢的版本,例如 CentOS 7.4。 - 创建虚拟机
- 打开 VMware → 新建 → 选择 Linux/Ubuntu 类型。
- 分配内存(推荐 ≥ 2GB)和硬盘空间(推荐 ≥ 20GB)。
- 加载 ISO 文件并安装
- 在虚拟机设置中挂载 ISO 文件。
- 启动虚拟机,进入 Ubuntu 安装界面,按提示操作。
3.4、基本环境配置
更新系统
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian sudo dnf update -y # Fedora/RedHat
安装常用工具
sudo yum install -y vim wget curl net-tools git
创建普通用户并赋予 sudo 权限
adduser student passwd student usermod -aG wheel student
配置网络与软件源
- 使用国内镜像源(如清华、中科大镜像),提高下载速度。
- 配置静态 IP(在服务器环境中常见)。
3.5、必备工具与软件
编辑器:vim、nano
系统监控工具:htop、iftop、iotop
网络工具:net-tools、telnet、nmap
开发工具:
sudo yum groupinstall -y "Development Tools"
3.6、学习环境优化(推荐)
启用命令自动补全
sudo yum install -y bash-completion
配置常用别名
编辑~/.bashrc
添加:alias ll='ls -alF' alias vi='vim'
远程连接工具
本地使用 Xshell、MobaXterm、PuTTY 远程管理虚拟机或云服务器。
配置 SSH 服务:
sudo yum install -y openssh-server sudo systemctl enable sshd sudo systemctl start sshd
3.7、小结
通过本节的学习,你已经能够根据自己的需求选择合适的发行版,并在物理机、虚拟机或云端搭建好 Linux 环境。与此同时,你也完成了系统的基本配置,安装了常用工具。
下一步,我们将深入 Linux 文件系统与目录结构,带你理解 Linux 的核心设计理念:一切皆文件。这是理解 Linux 世界的基石,也决定了后续命令行操作和系统管理的逻辑。
4、Linux 文件系统与目录结构
Linux 的学习之路,从理解 文件系统 开始。Linux 有一个核心设计理念:一切皆文件(Everything is a file)。无论是普通的文本、程序、设备,甚至是网络接口,在 Linux 中都以文件的形式存在和管理。这种统一抽象让系统更具灵活性和扩展性,也是我们学习 Linux 的必经之路。
在本节中,我们将从 Linux 的文件系统特点、目录结构标准、关键目录功能,到挂载机制与权限管理,全面理解 Linux 文件系统的运行逻辑。
4.1、Linux 文件系统的基本概念
- 一切皆文件
- 普通文件(文本、程序、图片等)
- 目录(特殊文件,包含文件列表)
- 设备(硬件被抽象为文件,如
/dev/sda
表示硬盘) - 进程和内核信息(如
/proc/cpuinfo
)
- 根目录(/)
- Linux 没有 Windows 的 “C盘、D盘” 概念。
- 所有文件和目录都挂载在 根目录
/
之下。
- 挂载(Mount)
- 不同的存储设备必须 “挂载” 到某个目录下才能使用。
- 示例:U 盘可能被挂载到
/media/usb
。
4.2、FHS 标准(Filesystem Hierarchy Standard)
Linux 发行版的目录结构遵循 FHS(文件系统层次标准)。常见目录功能如下:
目录 | 说明 |
---|---|
/ | 根目录,所有目录的起点 |
/bin | 存放基本命令(如 ls 、cp 、cat ),所有用户可用 |
/sbin | 系统管理命令(如 shutdown 、ifconfig ),通常仅 root 使用 |
/boot | 系统启动所需文件(内核、引导加载器 GRUB) |
/dev | 设备文件目录(硬盘、终端、U盘等) |
/etc | 配置文件目录(如 passwd 、ssh/sshd_config ) |
/home | 普通用户的主目录(如 /home/student ) |
/root | root 用户的主目录 |
/lib /lib64 | 系统库文件,支持程序运行 |
/media | 可移动设备挂载点(U盘、光盘) |
/mnt | 临时挂载点 |
/opt | 第三方软件安装目录 |
/proc | 内核与进程信息的虚拟文件系统(如 /proc/cpuinfo ) |
/run | 运行时数据(系统启动后生成) |
/srv | 服务数据(如网站数据、FTP 资源) |
/tmp | 临时文件目录(系统重启会清空) |
/usr | 用户级应用与文件,包含二进制、库、文档等 |
/var | 可变数据(日志、邮件、缓存、数据库等) |
4.3、重要目录详解
4.3.1、/etc
- 存放系统的全局配置文件。
- 例如:
/etc/passwd
:用户账户信息/etc/shadow
:用户密码信息/etc/fstab
:系统挂载配置/etc/ssh/sshd_config
:SSH 服务配置
4.3.2、/var
- 保存经常变化的数据。
- 常见子目录:
/var/log
:系统日志文件,如/var/log/messages
/var/www
:网站文件(若安装了 Apache/Nginx)/var/lib
:应用运行时生成的数据
4.3.3、/proc
虚拟文件系统,反映内核和进程状态。
例如:
cat /proc/cpuinfo # 查看 CPU 信息 cat /proc/meminfo # 查看内存信息
4.3.4、/dev
- 存放设备文件。
- 常见示例:
/dev/sda
:第一个硬盘/dev/tty
:终端设备/dev/null
:空设备(丢弃输出)
4.4、路径与文件定位
Linux 使用 绝对路径 和 相对路径:
- 绝对路径:从根目录
/
开始,例如/etc/passwd
。 - 相对路径:基于当前工作目录,例如
../logs
。
常用路径操作命令:
pwd # 显示当前目录
cd /etc # 切换到绝对路径
cd ../ # 切换到上一级目录
cd ~/ # 切换到当前用户主目录
4.5、文件类型与查看
Linux 文件有以下常见类型:
-
普通文件d
目录l
符号链接(类似 Windows 的快捷方式)b
块设备文件(硬盘等)c
字符设备文件(终端等)p
管道文件s
套接字文件
查看文件类型:
ls -l
file filename
4.6、挂载与卸载
在 Linux 中,设备需要挂载才能使用:
mount /dev/sdb1 /mnt/usb # 挂载 U 盘到 /mnt/usb
umount /mnt/usb # 卸载
挂载信息可以通过 /etc/fstab
配置开机自动挂载。
4.7、初学者常见操作示例
查看目录结构:
tree / -L 1 # 显示根目录下的一级目录
查找文件:
find /etc -name "ssh*"
查看磁盘使用情况:
df -h du -sh /var/*
4.8、小结
Linux 的文件系统和目录结构是理解操作系统运作的基石。
通过本节,你已经知道:
- Linux 将一切抽象为文件;
- 根目录
/
是所有路径的起点; - 每个目录有其独特的功能和用途;
- 设备需要挂载才能使用;
- 文件类型与权限密切相关。
理解这些概念后,下一步我们将进入 Linux 基础命令行操作。这是新手最常用、最重要的技能,掌握命令行不仅能提高效率,更能让你真正走进 Linux 的世界。
5、Linux 基本操作
Linux 的学习核心在于 命令行(Command Line Interface, CLI)。
与 Windows 的图形化操作不同,Linux 更加依赖终端输入命令来完成各种任务。虽然一开始可能觉得命令行复杂,但熟悉之后你会发现,命令行不仅高效,还能让你对系统拥有更全面的掌控力。
本节将带你从登录系统、文件与目录操作,到用户管理、进程监控、网络工具,逐步掌握 Linux 的基本操作技能。
5.1、登录与终端操作
5.1.1、本地登录
- 在虚拟机/物理机中,开机后可直接输入用户名和密码进入系统。
5.1.2、远程登录(SSH)
在本地终端通过 SSH 登录远程服务器:
ssh user@server_ip
退出远程会话:
exit
5.1.3、切换用户
su - root # 切换到 root 用户
su - student # 切换到 student 用户
sudo command # 临时以 root 权限执行命令
5.2、文件与目录操作
Linux 把所有数据组织在目录树下,日常操作的第一步就是熟悉目录管理。
路径相关
pwd # 显示当前目录 cd /etc # 切换到 /etc 目录 cd ~ # 回到当前用户主目录 cd - # 返回上一次所在目录
目录操作
ls -l # 显示详细列表 ls -a # 显示隐藏文件 mkdir test # 创建目录 rmdir test # 删除空目录 rm -rf test # 强制删除目录及其内容
文件操作
touch file.txt # 创建空文件 cp file1 file2 # 复制文件 mv file1 /tmp/ # 移动文件 mv file1 file2 # 重命名文件 rm file.txt # 删除文件
查看文件内容
cat file.txt # 一次性查看整个文件 more file.txt # 分页查看 less file.txt # 支持上下翻页、搜索 head -n 10 file.txt # 查看前 10 行 tail -n 10 file.txt # 查看后 10 行 tail -f logfile # 实时监控日志
5.3、用户与权限管理
Linux 是多用户系统,权限机制保障了系统安全。
5.3.1、用户相关
whoami # 查看当前用户
id # 查看用户 UID/GID
adduser testuser # 添加用户
passwd testuser # 设置密码
userdel -r testuser # 删除用户及其主目录
5.3.2、用户组
groupadd devs # 创建用户组
usermod -aG devs testuser # 将用户加入组
5.3.3、文件权限
- 三类权限:读 ®、写 (w)、执行 (x)
- 三类用户:所有者 (u)、同组用户 (g)、其他用户 (o)
查看权限:
ls -l
# -rw-r--r-- 1 root root 1234 Sep 12 2025 file.txt
修改权限:
chmod 755 script.sh # 所有者 rwx,组和其他用户 r-x
chmod u+x script.sh # 给所有者增加执行权限
修改所有者:
chown user:group file.txt
5.4、进程管理
Linux 中运行的每个程序都是进程,可以通过命令进行查看和管理。
5.4.1、查看进程
ps aux # 显示所有进程
top # 动态显示进程
htop # 更美观的进程监控(需安装)
5.4.2、结束进程
kill -9 PID # 强制终止进程
5.4.3、后台运行
command & # 在后台运行
jobs # 查看后台任务
fg %1 # 将任务调回前台
5.5、软件包管理(YUM/DNF)
CentOS 使用 yum(7.x) 或 dnf(8.x/Stream) 作为包管理器。
5.5.1、更新系统
sudo yum update -y # CentOS 7
sudo dnf update -y # CentOS 8/Stream
5.5.2、安装/卸载软件
sudo yum install -y vim git wget
sudo yum remove -y vim
5.5.3、搜索软件包
yum search nginx
5.5.4、查看已安装软件
rpm -qa | grep nginx
5.6、磁盘与目录管理
5.6.1、磁盘空间
df -h # 查看磁盘使用情况
du -sh /var/* # 查看目录占用大小
5.6.2、挂载/卸载设备
mount /dev/sdb1 /mnt/usb
umount /mnt/usb
5.7、网络操作
5.7.1、查看网络配置
ip addr
5.7.2、测试网络
ping www.baidu.com
curl -I www.baidu.com
5.7.3、查看端口占用
netstat -tulnp # CentOS 7
ss -tulnp # CentOS 8/Stream
5.8、常用压缩与解压
5.8.1、tar 打包/解包
tar -cvf file.tar dir/ # 打包
tar -xvf file.tar # 解包
tar -czvf file.tar.gz dir/ # 压缩
tar -xzvf file.tar.gz # 解压
5.8.2、zip/unzip
zip -r file.zip dir/
unzip file.zip
5.9、文本编辑器(vim 基础)
5.9.1、打开文件
vim file.txt
5.9.2、常用模式
- 普通模式:默认状态,用于浏览
- 插入模式:按
i
进入,输入文字 - 命令模式:按
:
输入命令(如:wq
保存退出)
- 常用命令
:w
保存:q
退出:wq
保存并退出:q!
强制退出不保存
5.10、小结
通过本节的学习,你已经掌握了 Linux 的 基本操作技能:
- 登录与切换用户;
- 文件与目录管理;
- 用户权限与安全控制;
- 软件包管理;
- 进程与网络操作;
- 压缩解压与文本编辑。
这些是 Linux 使用的基础功,几乎所有进阶学习(如服务部署、系统运维、Shell 编程)都依赖于这些命令的熟练掌握。
6、用户与权限管理
在 Linux 中,用户与权限管理是系统安全与多用户协作的核心。Linux 是一个多用户操作系统,每个用户都在系统中有独立的身份与权限。通过合理的用户和权限管理,可以有效避免误操作、数据泄露和安全漏洞。下面我们将从用户管理、组管理到权限机制逐步展开。
6.1、Linux 用户体系概述
Linux 系统中所有的操作都与 用户 有关。用户按照角色和权限,大致分为三类:
6.1.1、超级用户(root)
- 拥有系统最高权限,可以执行任何操作。
- 用户名:
root
,用户 ID(UID):0
。 - 特点:可以管理用户、修改系统文件、安装卸载软件、启动/关闭服务。
6.1.2、普通用户
- 由系统管理员创建。
- 权限受限,只能在主目录下(如
/home/username
)进行大多数操作。 - 不能直接操作系统关键文件。
6.1.3、系统用户
- 通常是 Linux 系统或某些服务运行所需要的用户。
- 例如:
nobody
、apache
、mysql
等。 - 这些用户没有实际登录权限。
6.2、用户管理
6.2.1、新建用户
# 新建用户
sudo useradd username
# 新建用户并指定主目录
sudo useradd -m -d /home/username username
6.2.2、设置用户密码
sudo passwd username
系统会提示输入两次密码。
6.2.3、删除用户
# 删除用户但保留主目录
sudo userdel username
# 删除用户及其主目录
sudo userdel -r username
6.2.4、查看用户信息
id username # 查看 UID、GID 和所属组
whoami # 查看当前登录用户名
cat /etc/passwd # 查看系统中所有用户
6.3、用户组管理
Linux 使用 组(Group) 来方便管理多个用户的权限。
6.3.1、新建组
sudo groupadd groupname
6.3.2、删除组
sudo groupdel groupname
6.3.3、将用户添加到组
# 添加到附加组
sudo usermod -aG groupname username
# 设置主组
sudo usermod -g groupname username
6.3.4、查看用户所属组
groups username
6.4、文件权限管理
Linux 对文件的权限分为 读(r)、写(w)、执行(x),并且分配给 所有者(owner)、所属组(group)、其他用户(others) 三类用户。
6.4.1、查看文件权限
ls -l
输出示例:
-rw-r--r-- 1 root root 1234 Sep 10 10:00 test.txt
- -rw-r–r–:权限位
- 第 1 位:文件类型(- 普通文件,d 目录,l 软链接)
- 接下来的 9 位:分别代表 所有者 / 组 / 其他用户 的权限。
例如:
rw-
= 可读可写r--
= 只读rwx
= 可读可写可执行
6.4.2、修改权限 chmod
# 给文件所有者增加执行权限
chmod u+x file.sh
# 去掉其他用户的写权限
chmod o-w file.txt
# 通过数字修改权限(r=4, w=2, x=1)
chmod 755 file.sh
解释:
755
= 所有者(7=rwx)、组(5=r-x)、其他用户(5=r-x)
6.4.3、修改文件所有者与组 chown
# 修改文件所有者
sudo chown user file.txt
# 修改文件所属组
sudo chgrp group file.txt
# 同时修改所有者和组
sudo chown user:group file.txt
6.5、权限提升与 sudo
普通用户权限有限,如果需要执行系统管理操作,可以使用 sudo
临时获取管理员权限。
6.5.1、使用 sudo
sudo command
6.5.2、配置 sudo 权限
编辑 /etc/sudoers
(推荐使用 visudo
命令):
username ALL=(ALL) ALL
这样,用户 username
就能通过 sudo
执行任何命令。
6.6、特殊权限(高级内容)
Linux 除了普通的 rwx
外,还有一些特殊权限:
6.6.1、SUID(Set User ID)
- 文件执行时,临时获取文件所有者的权限。
- 示例:
/usr/bin/passwd
命令具有 SUID,普通用户可修改自己的密码。
6.6.2、SGID(Set Group ID)
- 文件执行时,临时获得文件所属组的权限。
- 用于目录时,目录中新建文件自动继承目录所属组。
6.6.3、Sticky Bit
- 常用于
/tmp
目录,表示该目录下的文件只能由文件所有者或 root 删除。
设置方式:
chmod 4755 file # 设置 SUID
chmod 2755 file # 设置 SGID
chmod 1755 dir # 设置 Sticky Bit
6.7、小结
用户与权限管理是 Linux 安全的核心。
- 学会创建用户、分组、设置密码与权限,是日常管理的基本功。
- 通过
chmod
、chown
、sudo
,可以精细地控制访问权限。 - 理解特殊权限(SUID、SGID、Sticky Bit),有助于理解 Linux 系统服务的安全机制。
实践建议:
- 在 CentOS 系统中新建几个用户,尝试分配不同权限。
- 观察不同用户在访问同一个文件时的差异。
- 修改文件权限,验证哪些用户可以访问,哪些不可以。
通过动手操作,才能真正理解 Linux 用户与权限管理的精髓。
7、软件安装与管理
在 Linux 中,软件的安装与管理与 Windows 有很大不同。Windows 用户通常通过 .exe
或 .msi
文件安装软件,而在 Linux 中,软件通常以 软件包(package) 的形式出现,并通过 包管理工具(Package Manager) 来统一安装、升级和卸载。
对于 CentOS 这类基于 Red Hat 的系统,主要使用 RPM(Red Hat Package Manager) 和 YUM(Yellowdog Updater, Modified)/DNF 来进行软件管理。下面我们将从概念到实操,详细介绍 Linux 的软件管理方法。
7.1、软件包管理工具概述
7.1.1、RPM
- 定义:Red Hat Package Manager,早期 Linux 的标准包管理方式。
- 文件格式:
.rpm
- 特点:安装和卸载单个软件包方便,但需要手动解决依赖问题。
7.1.2、YUM
- 定义:基于 RPM 的高级包管理工具,会自动处理依赖。
- 来源:从软件仓库(Repository)下载并安装软件。
- 命令示例:
yum install
,yum remove
,yum update
。
7.1.3、DNF(CentOS 8+ 默认)
- 定义:YUM 的升级版,更高效,依赖解决更完善。
- 命令:与 YUM 基本相同,但推荐使用
dnf
。
7.2、RPM 管理软件
7.2.1、安装软件
sudo rpm -ivh package.rpm
参数解释:
-i
:安装-v
:显示详细信息-h
:显示安装进度
7.2.2、卸载软件
sudo rpm -e package_name
7.2.3、查询软件包
rpm -q package_name # 查询是否安装
rpm -qa # 列出所有已安装的软件包
rpm -ql package_name # 查看软件安装路径
缺点:RPM 需要手动解决依赖,适合本地安装单个软件包,不适合复杂应用。
7.3、YUM/DNF 管理软件(推荐)
在 CentOS 中,推荐使用 YUM/DNF,因为它会自动解决依赖问题,极大简化操作。
7.3.1、安装软件
# CentOS 7
sudo yum install package_name -y
# CentOS 8 及以后
sudo dnf install package_name -y
示例:
sudo yum install git -y
7.3.2、卸载软件
sudo yum remove package_name -y
7.3.3、更新软件
sudo yum update package_name
更新系统所有软件包:
sudo yum update -y
7.3.4、搜索软件
sudo yum search keyword
7.3.5、查看软件信息
sudo yum info package_name
7.4、软件仓库管理
Linux 软件来源于 软件仓库(Repository),仓库里存放了大量 .rpm
包。默认情况下,CentOS 已经配置了官方仓库,但我们也可以添加第三方仓库以获得更多软件。
7.4.1、查看仓库
yum repolist all
7.4.2、添加第三方仓库
安装 EPEL(Extra Packages for Enterprise Linux)仓库:
sudo yum install epel-release -y
7.4.3、禁用/启用仓库
yum --disablerepo=repo_name install package
yum --enablerepo=repo_name install package
7.5、源码安装(进阶)
除了 RPM/YUM,还可以通过 源码编译 的方式安装软件。源码安装的优点是灵活,可以自定义功能,但缺点是耗时、难以维护。
步骤示例(以 nginx 为例):
下载源码:
wget http://nginx.org/download/nginx-1.22.0.tar.gz
解压源码:
tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0
配置编译参数:
./configure --prefix=/usr/local/nginx
编译并安装:
make && sudo make install
启动 nginx:
/usr/local/nginx/sbin/nginx
7.6、Snap 与 Flatpak(补充)
除了传统的 RPM/YUM,现在还有跨发行版的包管理工具:
Snap(Ubuntu 推广,CentOS 需手动安装)
sudo snap install package_name
Flatpak(跨平台)
flatpak install package_name
这些工具打包了软件所需的依赖,更适合桌面应用。
7.7、常见问题与解决方案
- 安装失败,提示依赖缺失
- 使用
yum install -y package_name
自动解决依赖。
- 使用
- 找不到软件包
- 可能仓库未启用,尝试安装
epel-release
或检查yum repolist
。
- 可能仓库未启用,尝试安装
- 网络慢
- 修改 YUM 源为国内镜像(如阿里云、清华大学、网易)。
示例:
sudo sed -i 's|mirror.centos.org|mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo
sudo yum makecache
7.8、小结
- RPM 适合单独安装本地软件包,但需要手动解决依赖。
- YUM/DNF 是 CentOS 的主流方式,推荐日常使用。
- 源码安装 灵活但复杂,适合需要特殊编译选项的场景。
- Snap/Flatpak 提供跨发行版支持,更适合桌面应用。
实践建议:
- 尝试使用
yum
安装常见工具,如vim
、git
、wget
。 - 配置阿里云或清华的 YUM 源,体验加速效果。
- 使用源码安装一次
nginx
或redis
,体验与包管理工具的区别。
8、进程与服务管理
Linux 是一个多用户、多任务的操作系统,其核心机制之一就是 进程管理。进程是系统运行中最基本的执行单位,每一个命令、应用程序、服务都以进程的形式存在。理解和掌握进程与服务管理,不仅有助于我们排查系统问题,还能提升运维与管理能力。
8.1、进程基础
8.1.1、什么是进程?
- 进程(Process) 是运行中的程序的实例,每个进程都拥有独立的 PID(进程 ID)。
- Linux 下几乎所有任务(包括守护进程、用户命令、后台程序)都是进程。
8.1.2、进程的分类
- 前台进程
- 在终端运行,用户可直接交互。
- 示例:执行
vim file.txt
。
- 后台进程
- 在后台运行,通常不需要用户交互。
- 示例:运行 Web 服务、数据库服务。
- 守护进程(Daemon)
- 一种特殊的后台进程,常驻内存,提供系统或服务功能。
- 示例:
sshd
(远程登录)、crond
(定时任务)。
8.2、查看进程信息
8.2.1、ps
命令
ps aux # 查看所有进程
ps -ef # 显示完整格式
- a:显示所有用户的进程
- u:显示用户相关信息
- x:显示无控制终端的进程
示例:
ps aux | grep nginx
可用于查找特定进程。
8.2.2、top
命令
top
- 动态显示系统进程状态,类似 Windows 任务管理器。
- 常用快捷键:
q
退出k
杀死进程P
按 CPU 使用率排序M
按内存使用率排序
8.2.3、htop
(增强版)
sudo yum install htop -y
htop
- 图形化界面,更直观。
8.3、进程管理
8.3.1、启动进程
直接执行程序即可启动进程,例如:
./program &
&
表示在后台运行。
8.3.2、停止进程
kill -9 PID
-9
表示强制终止。可以使用
pkill
根据进程名杀死:pkill nginx
8.3.3、后台运行与作业控制
将任务放到后台运行:
command &
挂起任务:
Ctrl + Z
查看后台任务:
jobs
恢复任务:
fg %1 # 恢复到前台 bg %1 # 在后台继续执行
8.4、服务管理(systemd)
在 CentOS 7 及以上,Linux 默认使用 systemd 来管理服务。
8.4.1、查看服务状态
systemctl status service_name
示例:
systemctl status sshd
8.4.2、启动与停止服务
sudo systemctl start service_name # 启动服务
sudo systemctl stop service_name # 停止服务
sudo systemctl restart service_name # 重启服务
8.4.3、开机自启管理
sudo systemctl enable service_name # 设置开机自启
sudo systemctl disable service_name # 取消开机自启
8.4.4、查看服务是否开机启动
systemctl is-enabled service_name
8.4.5、查看所有服务
systemctl list-units --type=service
8.5、常用命令与应用场景
8.5.1、监控 CPU/内存占用最高的进程
top
8.5.2、查看某个端口的进程
sudo netstat -tulnp | grep 80
8.5.3、杀死占用端口的进程
sudo fuser -k 80/tcp
8.5.4、查看某个服务是否运行
systemctl status nginx
8.5.5、快速重启服务
sudo systemctl restart firewalld
8.6、小结
- 进程管理:掌握
ps
、top
、kill
等命令,可以快速定位和终止异常进程。 - 服务管理:熟悉
systemctl
命令,能轻松控制系统服务的启停与开机自启。 - 实战建议:
- 通过
ps
和top
查看系统中最耗资源的进程。 - 启动和关闭
nginx
、sshd
等服务,观察效果。 - 使用
systemctl enable
设置一个服务开机自启。 - 使用
jobs
、fg
、bg
体验前后台任务切换。
- 通过
理解并掌握进程与服务管理,不仅能帮助你维护系统稳定性,还能为进一步学习 Linux 性能优化与安全加固 打下坚实基础。
9、网络与远程连接
在 Linux 系统中,网络与远程连接是日常运维和管理的重要环节。通过网络,我们可以让 Linux 服务器与外界通信;通过远程连接,我们可以从本地电脑安全地管理远程服务器。对新手而言,掌握网络配置与远程连接是使用 Linux 的关键步骤。
9.1、Linux 网络基础
9.1.1、网络接口
Linux 系统中的网络接口常见命名方式:
- eth0 / eth1:传统的有线网卡名称。
- ens33 / enp0s3:新版本(CentOS 7+)采用的 “可预测命名”。
- lo:回环接口(Loopback),代表本机 IP
127.0.0.1
。
9.1.2、IP 地址与子网
- IP 地址:计算机在网络中的唯一标识。
- 子网掩码:用于划分网络和主机地址。
- 默认网关:数据包发往外部网络的出口。
- DNS 服务器:将域名解析为 IP 地址。
9.2、网络配置方法(CentOS 为例)
9.2.1、临时配置 IP(ifconfig
/ ip
)
# 使用 ifconfig 配置 IP
sudo ifconfig ens33 192.168.1.100 netmask 255.255.255.0 up
# 使用 ip 命令配置 IP
sudo ip addr add 192.168.1.100/24 dev ens33
临时配置,重启后失效。
9.2.2、永久配置 IP(修改配置文件)
CentOS 的网络配置文件存放在 /etc/sysconfig/network-scripts/
,文件名一般为 ifcfg-ens33
。
示例配置:
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
修改完成后重启网络服务:
sudo systemctl restart network
9.2.3、使用 nmcli
工具配置(推荐)
# 查看网络连接
nmcli connection show
# 设置静态 IP
nmcli connection modify ens33 ipv4.addresses 192.168.1.100/24
nmcli connection modify ens33 ipv4.gateway 192.168.1.1
nmcli connection modify ens33 ipv4.dns 8.8.8.8
nmcli connection modify ens33 ipv4.method manual
# 启用配置
nmcli connection up ens33
9.3、网络常用命令
9.3.1、测试网络连通性
ping www.baidu.com
9.3.2、查看网络配置
ifconfig # 传统命令
ip addr # 新推荐命令
9.3.3、查看路由
route -n
ip route
9.3.4、查看端口占用
netstat -tulnp | grep 22
ss -tulnp | grep 22
9.3.5、DNS 解析测试
nslookup www.baidu.com
dig www.baidu.com
9.4、远程连接(SSH)
9.4.1、SSH 概述
- SSH(Secure Shell) 是 Linux 最常用的远程登录方式,默认端口
22
。 - 提供加密传输,保证安全性。
- 常用客户端:
ssh
、PuTTY
(Windows)、MobaXterm
、Xshell
。
9.4.2、使用 SSH 登录
在本地电脑上执行:
ssh username@server_ip
示例:
ssh root@192.168.1.100
9.4.3、修改 SSH 配置
SSH 配置文件位于 /etc/ssh/sshd_config
。
常见配置项:
Port 22 # 默认端口,可以改为其他端口
PermitRootLogin no # 禁止 root 用户直接登录
PasswordAuthentication yes # 是否允许密码登录
修改后重启服务:
sudo systemctl restart sshd
9.4.4、使用密钥认证(推荐)
在本地生成密钥:
ssh-keygen -t rsa
会生成
~/.ssh/id_rsa
(私钥)和id_rsa.pub
(公钥)。将公钥上传到服务器:
ssh-copy-id user@server_ip
或手动写入:
~/.ssh/authorized_keys
。之后登录服务器无需密码:
ssh user@server_ip
9.5、远程文件传输
9.5.1、SCP(基于 SSH)
# 从本地复制文件到远程
scp file.txt user@192.168.1.100:/home/user/
# 从远程复制文件到本地
scp user@192.168.1.100:/home/user/file.txt ./
9.5.2、SFTP(交互式)
sftp user@192.168.1.100
进入后可使用 ls
、cd
、get
、put
传输文件。
9.5.3、rsync(高效同步)
rsync -avz file.txt user@192.168.1.100:/home/user/
支持断点续传和目录同步。
9.6、防火墙与端口管理
远程连接前需要保证服务器端口开放。
9.6.1、查看防火墙状态
sudo systemctl status firewalld
9.6.2、开放端口(以 22 为例)
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
sudo firewall-cmd --reload
9.6.3、查看开放端口
sudo firewall-cmd --list-ports
9.7、小结
- 网络配置:熟悉
ifconfig
、ip
、nmcli
,能快速修改和查看网络参数。 - 远程连接:掌握
ssh
登录与密钥认证,是日常管理的必备技能。 - 文件传输:SCP、SFTP、rsync 是常见工具,适合不同场景。
- 安全加固:修改 SSH 端口、关闭 root 登录、使用密钥认证,能提升远程管理的安全性。
实践建议:
- 配置一台 CentOS 虚拟机,尝试使用
ssh
远程登录。 - 修改 SSH 配置文件,禁止 root 登录,改用普通用户+sudo。
- 使用
scp
在本地与远程之间传输文件。 - 使用
firewalld
开放和关闭端口,测试远程连接的效果。
掌握网络与远程连接,意味着你可以随时随地安全地管理你的 Linux 服务器,这是 Linux 学习的重要里程碑。
10、Shell 脚本入门
10.1、什么是 Shell 与 Shell 脚本
在 Linux 系统中,Shell 是用户与内核之间的桥梁。它既是一种命令解释器,用来执行用户输入的命令,也是一种编程语言,支持变量、条件判断、循环、函数等。
常见的 Shell 类型有:
- sh:最早的 Bourne Shell。
- bash:Bourne Again Shell,Linux 默认 Shell,功能更强大。
- zsh、fish:增强型 Shell,用户体验更好。
所谓 Shell 脚本(Shell Script),就是将一系列 Shell 命令写入文件中,通过脚本一次性执行。它的优势在于:
- 自动化:批量执行任务,减少重复操作。
- 可移植性:在不同的 Linux 系统上可运行。
- 灵活性:支持流程控制、文本处理、系统管理。
10.2、Shell 脚本的基本结构
10.2.1、脚本文件格式
一个典型的 Shell 脚本由以下部分组成:
#!/bin/bash
# 这是一个简单的 Shell 脚本示例
echo "Hello, Linux!"
解释:
#!/bin/bash
:称为 shebang,指定脚本所用的解释器。#
开头的是注释,用来说明脚本作用。echo
:输出内容到终端。
10.2.2、执行脚本的方式
假设脚本名为 test.sh
:
直接调用解释器运行:
bash test.sh
赋予执行权限后运行:
chmod +x test.sh # 添加执行权限 ./test.sh
10.3、Shell 脚本中的变量
10.3.1、定义变量
name="Lenyiin"
echo "Hello, $name"
=
两边不能有空格。- 使用变量时需要在前面加
$
。
10.3.2、环境变量
环境变量如 $PATH
、$HOME
、$USER
等,在系统范围内可用:
echo $HOME
echo $USER
10.3.3、命令替换
把命令的执行结果赋值给变量:
today=$(date +%Y-%m-%d)
echo "Today is $today"
10.4、条件判断与流程控制
10.4.1、if 条件语句
#!/bin/bash
read -p "请输入一个数字: " num
if [ $num -gt 10 ]; then
echo "数字大于10"
else
echo "数字小于或等于10"
fi
常用比较运算符:
-eq
:等于-ne
:不等于-gt
:大于-lt
:小于-ge
:大于等于-le
:小于等于
10.4.2、case 语句
#!/bin/bash
read -p "请输入一个字母: " char
case $char in
a) echo "你输入了 a";;
b) echo "你输入了 b";;
*) echo "未知输入";;
esac
10.5、循环结构
10.5.1、for 循环
for i in 1 2 3 4 5
do
echo "第 $i 次循环"
done
也可以用于遍历文件:
for file in *.txt
do
echo "发现文件: $file"
done
10.5.2、while 循环
count=1
while [ $count -le 5 ]
do
echo "循环 $count 次"
count=$((count+1))
done
10.6、函数
Shell 脚本支持定义函数,便于复用:
#!/bin/bash
greet() {
echo "Hello, $1!"
}
greet "Linux"
解释:
- 函数名后紧跟
()
。 $1
表示第一个参数,$2
表示第二个参数。
10.7、常见 Shell 脚本应用场景
10.7.1、自动备份
#!/bin/bash
backup_dir="/backup/$(date +%Y-%m-%d)"
mkdir -p $backup_dir
cp -r /etc $backup_dir
echo "备份完成,保存到 $backup_dir"
10.7.2、批量重命名文件
#!/bin/bash
i=1
for file in *.jpg
do
mv "$file" "image_$i.jpg"
((i++))
done
10.7.3、检测服务是否运行
#!/bin/bash
if pgrep nginx > /dev/null
then
echo "nginx 正在运行"
else
echo "nginx 未运行"
fi
10.8、Shell 脚本调试与最佳实践
调试脚本:
bash -x script.sh
-x
参数会显示执行过程,方便排错。写注释:给脚本加上清晰的注释,方便维护。
使用函数:提高脚本可读性与复用性。
错误处理:在脚本开头加上:
set -e # 遇到错误立即退出
10.9、小结
Shell 脚本是 Linux 世界中最强大的工具之一,它让我们能够通过几行简单的代码实现自动化、批量处理和系统管理。对于新手来说,熟悉变量、条件判断、循环和函数,就已经能完成大多数常见任务。
接下来,我们将进一步学习 系统日志与监控,掌握如何追踪系统运行状态、排查故障,为更深入的运维和开发做好准备。
11、日志与系统监控
11.1、为什么需要日志与监控
在 Linux 系统中,日志与监控是保障系统稳定性和安全性的“眼睛”。
- 日志(Log):记录系统、服务、应用运行时发生的事件,方便排查问题、分析性能、审计安全。
- 系统监控(Monitoring):实时观察系统资源与服务状态,帮助管理员及时发现问题并采取措施。
无论是运维工程师,还是日常使用 Linux 的开发者,掌握日志与监控都是必备技能。
11.2、Linux 日志系统
11.2.1、Syslog 与 rsyslog
Linux 的日志体系由 Syslog 发展而来,目前主流的是 rsyslog,它具备更高的性能和灵活性。其主要功能:
- 收集来自内核、系统服务和应用的日志。
- 按照配置规则分类存储到不同文件。
- 支持远程日志收集。
配置文件位置:
/etc/rsyslog.conf
/etc/rsyslog.d/*.conf
11.2.2、日志文件的分类与路径
日志一般存放在 /var/log/
目录下,常见文件有:
/var/log/messages
:系统的主要日志,记录大多数信息。/var/log/syslog
(Debian 系):类似于 messages,用于系统消息。/var/log/dmesg
:内核环形缓冲区日志,记录系统启动信息。/var/log/auth.log
:身份验证日志,记录登录、sudo 等操作。/var/log/secure
(CentOS 系):安全相关日志。/var/log/cron
:计划任务执行情况。/var/log/httpd/
或/var/log/nginx/
:Web 服务器日志。
11.2.3、查看日志的常用命令
实时查看日志:
tail -f /var/log/messages
查看开机信息:
dmesg | less
搜索关键字:
grep "error" /var/log/syslog
11.3、日志管理工具
11.3.1、journalctl
现代 Linux(systemd 系统)使用 journald 管理日志。
查看所有日志:
journalctl
查看指定服务日志:
journalctl -u sshd
查看今天的日志:
journalctl --since "today"
实时查看:
journalctl -f
11.3.2、logrotate
日志文件会不断增长,为避免占满磁盘,Linux 使用 logrotate 进行日志轮转:
- 定期压缩、清理旧日志。
- 支持自定义保留时间与压缩策略。
配置文件:
/etc/logrotate.conf
/etc/logrotate.d/
手动执行:
logrotate -f /etc/logrotate.conf
11.4、系统监控基础工具
11.4.1、top
实时显示系统进程与资源占用情况。
top
关键字段:
%CPU
:进程占用 CPU 百分比。%MEM
:进程占用内存比例。load average
:系统负载,三个数值分别对应 1 分钟、5 分钟、15 分钟的平均负载。
11.4.2、htop
top
的增强版,更直观,支持交互式操作:
htop
11.4.3、free
查看内存使用情况:
free -h
11.4.4、df 与 du
查看磁盘分区使用情况:
df -h
查看某个目录占用空间:
du -sh /var/log
11.4.5、vmstat
显示 CPU、内存、IO 等整体情况:
vmstat 1
11.4.6、iostat
监控磁盘 I/O:
iostat -x 2
11.5、网络监控工具
11.5.1、netstat / ss
查看端口与连接情况:
netstat -tulnp # 显示正在监听的端口
ss -tulnp # 推荐,替代 netstat
11.5.2、ping 与 traceroute
检查网络连通性:
ping www.baidu.com
跟踪路由路径:
traceroute www.baidu.com
11.5.3、tcpdump
抓取网络数据包:
tcpdump -i eth0 port 80
11.5.4、nload / iftop
实时显示网络流量:
nload
查看占用带宽的进程:
iftop
11.6、高级监控与报警
- Nagios:经典的企业级监控工具。
- Zabbix:分布式监控平台,支持图形化展示与报警。
- Prometheus + Grafana:现代云原生监控方案,支持可视化与报警规则。
这些工具能帮助管理员在大规模集群中进行监控与告警。
11.7、实际案例
11.7.1、检查系统负载是否过高
uptime
# 输出示例:
# 14:35:02 up 10 days, 2:15, 2 users, load average: 0.25, 0.40, 0.35
如果 load average 长期高于 CPU 核心数,说明系统压力过大。
11.7.2、定时检查日志关键字并报警
编写脚本监控 /var/log/secure
:
#!/bin/bash
if grep "Failed password" /var/log/secure > /dev/null
then
echo "警告:检测到暴力破解尝试!" | mail -s "安全警报" admin@example.com
fi
11.8、小结
日志是 Linux 系统的 “黑匣子”,记录了从内核到服务的一切运行情况;监控工具则像 “仪表盘”,帮助我们实时掌握系统状态。两者结合,才能确保系统的稳定与安全。
12、Linux 常见开发环境搭建
12.1、为什么要在 Linux 上搭建开发环境
Linux 不仅是服务器和运维人员的主力系统,也是开发者的高效工作平台。
- 稳定性与性能:Linux 对资源管理更高效,特别适合大型软件开发与运行。
- 丰富的工具链:几乎所有主流编程语言与工具都在 Linux 上有良好支持。
- 一致性:从开发环境到生产环境保持一致,减少 “只在我机器上能跑” 的问题。
因此,掌握 Linux 上的开发环境搭建,是迈向专业开发者的重要一步。
12.2、基础工具与包管理器
在 CentOS(Red Hat 系)系统中,常用的包管理器是 yum 或新版的 dnf。
12.2.1、更新系统
sudo yum update -y
12.2.2、安装常用工具包
sudo yum groupinstall "Development Tools" -y
sudo yum install wget curl git vim cmake -y
- Development Tools:包含 gcc、g++、make、gdb 等开发常用工具。
- wget/curl:网络请求工具。
- git:版本控制工具。
- vim:轻量编辑器。
- cmake:跨平台构建工具。
12.3、C/C++ 开发环境
12.3.1、GCC 编译器
CentOS 默认已提供 gcc/g++,安装命令:
sudo yum install gcc gcc-c++ -y
编译示例:
gcc hello.c -o hello
./hello
12.3.2、GDB 调试器
sudo yum install gdb -y
使用示例:
gdb ./hello
12.3.3、CMake
构建大型项目常用:
sudo yum install cmake -y
12.4、Python 开发环境
12.4.1、安装 Python
CentOS 7 默认 Python 版本较低,可手动安装:
sudo yum install python3 python3-pip -y
12.4.2、虚拟环境
python3 -m venv myenv
source myenv/bin/activate
12.4.3、常用库安装
pip install requests numpy pandas flask
12.5、Java 开发环境
12.5.1、安装 JDK
sudo yum install java-11-openjdk java-11-openjdk-devel -y
12.5.2、设置环境变量
编辑 /etc/profile
,添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
使其生效:
source /etc/profile
12.5.3、验证安装
java -version
12.6、Web 开发环境
12.6.1、Node.js
sudo yum install -y nodejs npm
验证:
node -v
npm -v
12.6.2、常用 Web 框架
npm install -g express vue angular
12.7、数据库环境
12.7.1、MySQL / MariaDB
sudo yum install mariadb-server mariadb -y
sudo systemctl enable mariadb
sudo systemctl start mariadb
初始化:
mysql_secure_installation
12.7.2、PostgreSQL
sudo yum install postgresql-server postgresql-contrib -y
sudo postgresql-setup initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql
12.8、常用版本控制工具
12.8.1、Git
sudo yum install git -y
git config --global user.name "YourName"
git config --global user.email "you@example.com"
12.8.2、SVN
sudo yum install subversion -y
12.9、编辑器与 IDE
12.9.1、Vim
轻量编辑器,常用于服务器端快速编辑:
sudo yum install vim -y
12.9.2、VS Code
下载 RPM 包:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
安装:
sudo yum install code -y
12.9.3、Eclipse / IntelliJ IDEA
适合 Java 开发,可下载 tar.gz 包解压安装。
12.10、容器与虚拟化(可选)
现代开发环境常使用容器:
12.10.1、Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce -y
sudo systemctl start docker
sudo systemctl enable docker
12.10.2、Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
12.11、小结
在 CentOS 上搭建开发环境的过程,其实就是一个“拼积木”的过程:
- C/C++ 提供系统级编程支持;
- Python/Java/Node.js 提供多样化应用开发能力;
- 数据库让数据存储和处理更高效;
- Git 等版本控制工具保障协作;
- 编辑器与 IDE 提升开发效率;
- Docker 等容器化工具让环境部署更轻松。
通过这些工具的组合,你就能在 Linux 上搭建一个功能齐全、适合自己需求的开发环境。
13、常见问题与排错技巧
在 CentOS 系统的日常使用与运维过程中,无论是开发者还是运维人员,都不可避免地会遇到各种问题。学会 快速定位问题、分析原因并解决,是提升 Linux 使用能力的关键。本章将从常见问题入手,结合实际案例,介绍排错思路和常用工具。
13.1、常见问题分类
- 系统启动问题
- 启动卡在
grub
或kernel panic
- 无法进入多用户模式(黑屏、循环重启)
- 启动卡在
- 用户与权限问题
- 忘记 root 密码
- 普通用户权限不足,无法执行关键命令
- 网络与连接问题
- 无法联网(ping 不通外网)
- SSH 远程连接失败
- 服务与进程问题
- 服务无法启动或异常退出
- 进程占用 CPU 或内存过高
- 磁盘与文件系统问题
- 磁盘空间不足
- 文件系统损坏或只读
- 软件与包管理问题
- yum/dnf 安装失败
- 依赖冲突
13.2、排错思路与通用方法
排错通常遵循 “由表及里、由简到繁” 的原则:
- 明确现象:先确认问题是 网络、权限、服务还是系统。
- 查看日志:系统日志和应用日志是第一手资料。
- 系统日志:
/var/log/messages
- 安全日志:
/var/log/secure
- 服务日志:如
/var/log/httpd/
、/var/log/nginx/
- 系统日志:
- 使用工具定位:
- 进程:
ps
、top
、htop
- 网络:
ping
、ss
、netstat
、traceroute
- 磁盘:
df -h
、du -sh
、lsblk
- 进程:
- 验证配置:检查配置文件是否正确(如
sshd_config
、nginx.conf
)。 - 分步排查:逐层验证,从 硬件 → 系统 → 服务 → 应用。
13.3、典型问题与解决方案
13.3.1、忘记 root 密码
解决方法:单用户模式修改密码
# 开机时在 grub 界面按 e
# 找到 linux16 开头的行,添加:rd.break
# Ctrl + X 启动,进入紧急模式
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel # selinux 自动恢复
exit
reboot
13.3.2、系统无法联网
现象:ping www.baidu.com
不通。
排查思路:
- 查看网卡状态:
nmcli device status
- 确认 IP 地址:
ip addr show
- 检查网关与 DNS:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
cat /etc/resolv.conf
- 测试:
ping 114.114.114.114 # 测试是否能访问 IP
ping www.baidu.com # 测试是否能解析域名
解决方法:
- 编辑网卡配置
ifcfg-ens33
,设置ONBOOT=yes
。 - 重启网络服务:
systemctl restart NetworkManager
13.3.3、SSH 连接失败
常见原因:
- SSH 服务未启动:
systemctl status sshd
systemctl start sshd
systemctl enable sshd
- 防火墙未放行 22 端口:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
- SELinux 拒绝:
getenforce
setenforce 0 # 临时关闭
13.3.4、磁盘空间不足
排查:
df -h # 查看磁盘分区使用情况
du -sh * # 查看目录大小
常见解决办法:
- 清理日志:
> /var/log/messages
> /var/log/secure
- 清理缓存:
yum clean all
- 删除无用文件或旧内核:
rpm -q kernel
yum remove kernel-xxxx
13.3.5、服务无法启动
以 Nginx 为例:
systemctl status nginx
journalctl -xeu nginx
常见问题:
- 配置文件错误:
nginx -t
- 端口被占用:
ss -lntp | grep 80
- SELinux 拦截:
setsebool -P httpd_can_network_connect on
13.3.6、yum/dnf 安装失败
错误 1:网络问题
- 检查是否能访问
mirror.centos.org
- 配置国内镜像源,如阿里云:
yum install -y wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
错误 2:依赖冲突
- 使用
--skip-broken
跳过错误 - 使用
yum deplist package
查看依赖
13.4、实用排错命令速查表
场景 | 命令 |
---|---|
查看系统日志 | journalctl -xe |
查看服务状态 | systemctl status xxx |
查找端口占用 | ss -lntp |
查看 CPU/内存 | top / htop |
查找大文件 | find / -type f -size +500M |
检查磁盘使用 | df -h 、du -sh |
检查网络 | ping 、traceroute |
编辑网卡配置 | nmcli 、nmtui |
13.5、小结
- 日志是关键:遇到问题第一步先看日志。
- 逐层排查:不要一上来就怀疑系统崩了,要按 硬件→系统→服务→应用 的顺序。
- 善用工具:熟悉
systemctl
、journalctl
、ss
、df
等命令,可以快速定位问题。 - 建立排错笔记:记录自己遇到的问题和解决方法,下次类似问题可以快速解决。
14、学习资源与实践建议
Linux 学习不仅仅是掌握一些命令,更重要的是理解背后的原理,并在实践中不断积累经验。CentOS 作为一款稳定的企业级 Linux 发行版,非常适合作为学习和开发的环境。本章将为你梳理学习路径、推荐优质资源,并提供实践建议,帮助你高效掌握 Linux。
14.1、学习方式与路径
基础命令学习
从文件操作(
ls
、cp
、mv
)、权限管理(chmod
、chown
)、进程控制(ps
、kill
)等入手。每学习一个命令,都要实际操作并查看 man 手册:
man ls
系统原理理解
- 学习 Linux 的启动流程、进程管理机制、文件系统结构。
- 理解 systemd、内核、用户态与内核态的关系。
服务与网络配置
- 学会配置 Nginx、Apache、MySQL、SSH 等常用服务。
- 掌握防火墙(firewalld/iptables)和 SELinux 基础。
开发与运维结合
- 熟悉开发环境(GCC、Make、Git)。
- 掌握运维工具(systemctl、journalctl、crontab)。
进阶与专项
- 学习 Shell 脚本编程。
- 掌握性能调优、监控工具(如 top、sar、iotop)。
- 学习容器与虚拟化(Docker、KVM)。
14.2、学习资源推荐
14.2.1、官方文档
- CentOS 官方文档
https://www.centos.org/docs/
提供系统安装、配置和管理的官方参考。 - Red Hat 官方文档(CentOS 与 RHEL 高度兼容)
https://access.redhat.com/documentation/
14.2.2、在线课程与学习平台
- Linux 基础入门(菜鸟教程)
https://www.runoob.com/linux/linux-tutorial.html - Coursera / Udemy
- 《Linux for Developers》
- 《Linux Administration Bootcamp》
- B 站
- 常见 Linux 入门视频,如《Linux 运维基础》、《Linux 系统编程》。
14.2.3、经典书籍
- 《鸟哥的 Linux 私房菜》——入门与进阶必读。
- 《Unix 环境高级编程》(APUE)——系统编程经典。
- 《Linux 就该这么学》——适合入门和进阶。
- 《Linux 高性能服务器编程》——偏向后端开发。
14.2.4、社区与论坛
- Stack Overflow(解决实际问题的宝库)
- CSDN / 掘金 / 博客园(中文学习笔记丰富)
- Linux 内核社区 / kernel.org(进阶学习内核开发)
14.2.5、工具与实践资源
- 在线 Linux 实验环境:
- https://labs.play-with-docker.com
- 虚拟机环境:
- 推荐使用 VMware / VirtualBox 创建 CentOS 虚拟机,保证学习环境安全可控。
- 使用 Vagrant 或 Docker 快速搭建实验环境。
14.3、实践建议
14.3.1、边学边做,避免纸上谈兵
- 学到
useradd
命令,就创建几个用户实验权限。 - 学到
systemctl
,就尝试启停一个服务。
14.3.2、搭建个人实验环境
- 在虚拟机或云服务器上安装 CentOS。
- 搭建 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx + MySQL + PHP)环境。
- 部署一个自己的博客或项目,实践运维流程。
14.3.3、动手写 Shell 脚本
- 从简单脚本开始:批量创建用户、定时备份文件。
- 再深入到监控 CPU、磁盘、日志分析脚本。
14.3.4、参与开源项目或答疑社区
- 在 GitHub 上找一些 Linux 相关的开源工具,尝试使用或提交 bug。
- 在论坛或群组中解答他人的问题,加深理解。
14.3.5、记录学习笔记
- 将常用命令、排错步骤、心得写成笔记或博客。
- 笔记不仅能帮助复习,还能作为简历亮点。
14.4、学习建议总结
- 先打基础:掌握常用命令和操作习惯。
- 多动手:遇到问题自己先查日志、试命令,而不是直接问。
- 逐步深入:从文件系统到进程管理,再到服务配置,逐级提升。
- 善用资源:多读官方文档,结合社区经验。
- 养成习惯:做笔记、写脚本、搭建小项目,将理论转化为实战。
一句话总结:
学习 Linux,关键在于 实践 + 总结,不断用实际问题锻炼自己,才能真正掌握这门技术。
15、总结与展望
经过本篇 Linux 入门指南(以 CentOS 为例) 的系统学习,我们从基础操作、系统管理到开发环境搭建,再到日志监控与排错技巧,全面掌握了 Linux 系统的方方面面。本章将对所学内容进行总结,并为未来学习和实践提供展望。
15.1、核心知识回顾
- Linux 基础与发展
- 了解了 Linux 的起源与发展历程,从 Unix 演变到现代的 CentOS/RHEL。
- 掌握了 Linux 的文件系统结构、目录层次、文件权限体系,为日常操作和系统管理奠定基础。
- 系统安装与环境准备
- 学会在 CentOS 上安装系统、配置网络、创建用户、安装基础工具。
- 熟悉包管理器(yum/dnf)和系统更新操作,为后续软件安装与开发环境搭建做好准备。
- 文件系统与基本操作
- 掌握常用文件操作命令:
ls
、cp
、mv
、rm
、chmod
、chown
等。 - 理解 Linux 的权限管理机制、符号链接、硬链接,能高效管理文件与目录。
- 掌握常用文件操作命令:
- 用户与权限管理
- 掌握用户与组的创建、删除、修改。
- 理解 Sudo、权限分级和安全策略,能够合理配置系统权限,保障安全。
- 软件安装与服务管理
- 学会安装、升级和卸载软件包。
- 掌握 systemd 管理服务和进程的基本操作:启动、停止、启用、禁用、状态查看。
- 网络与远程连接
- 配置网络接口、DNS、网关,排查网络故障。
- 熟练使用 SSH、scp、sftp 等工具进行远程连接和文件传输。
- Shell 脚本与自动化
- 掌握 Shell 脚本基础语法、条件判断、循环、函数和变量使用。
- 能编写日常管理脚本,实现任务自动化、日志分析、监控告警等功能。
- 日志与系统监控
- 了解系统日志结构及常用日志文件位置。
- 掌握 journalctl、logrotate、top、htop、vmstat 等监控工具。
- 能通过日志和监控信息快速排查问题。
- 开发环境搭建
- 搭建 C/C++、Python、Java、Node.js 等开发环境。
- 安装和配置数据库(MySQL、PostgreSQL)及版本控制工具(Git、SVN)。
- 熟悉编辑器与 IDE,如 Vim、VS Code、Eclipse,为开发实践提供高效工具。
- 常见问题与排错技巧
- 系统启动、网络、服务、磁盘、软件安装常见问题的排查思路。
- 使用日志、系统命令和配置文件进行快速定位和解决问题。
- 学习资源与实践建议
- 提供了官方文档、在线课程、书籍、社区和实践平台。
- 强调边学边做、搭建个人实验环境、参与开源项目、写笔记总结的有效学习策略。
15.2、学习方法总结
- 理论与实践结合:Linux 的学习必须以动手操作为核心,命令、服务和配置都需要在实践中熟悉。
- 问题导向学习:遇到问题时,通过日志分析、命令检查、配置调整解决问题,提升解决问题能力。
- 循序渐进:从基础操作到高级管理,从单机操作到服务部署,逐步深入,形成完整知识体系。
- 持续积累与总结:通过笔记、博客、实验脚本,将零散知识沉淀为可复用经验。
15.3、未来学习与应用展望
- 深入系统内核与性能优化
- 学习 Linux 内核原理、内存管理、进程调度、IO 调度等。
- 掌握性能分析工具(perf、strace、iostat 等),进行系统调优。
- 高级网络与安全管理
- 掌握防火墙策略、SELinux 高级配置、VPN 和安全加固。
- 学习日志分析与入侵检测,提升系统安全能力。
- 自动化运维与容器化
- 学习 Ansible、SaltStack 等自动化运维工具。
- 掌握 Docker、Kubernetes 等容器技术,实现环境标准化与微服务部署。
- 开发实践与项目落地
- 将 Linux 开发环境与版本控制、数据库、Web 服务结合,搭建完整项目。
- 参与开源项目,提升实际问题解决能力。
- 持续学习与社区参与
- 积极参与开源社区(GitHub、Stack Overflow、Linux 内核邮件列表)。
- 学习最新 Linux 发行版特性、工具链和开发框架,保持技术敏锐度。
15.4、结语
Linux 是一个功能强大、灵活且广泛应用的操作系统。通过系统学习和实践,你已经掌握了从基础操作到开发环境搭建、从系统管理到问题排查的完整技能体系。
未来,持续动手实践、深入理解系统原理、积极参与开源与社区,将让你不仅能够熟练使用 Linux,还能在系统运维、后端开发、云计算与容器化等领域游刃有余。
正如 Linux 的哲学一样:简洁、稳健、自由,掌握它,就是掌握无数可能。
希望这篇博客对您有所帮助,也欢迎您在此基础上进行更多的探索和改进。如果您有任何问题或建议,欢迎在评论区留言,我们可以共同探讨和学习。更多知识分享可以访问 我的个人博客网站 。