摘要

本篇博客以 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)。常见的发行版主要有以下几类:

  1. Debian 系列(如 Ubuntu、Linux Mint)
    • 特点:用户友好、社区庞大、软件包丰富。
    • 适合对象:初学者、桌面用户、Web 开发者。
    • 代表:Ubuntu LTS 稳定易用,Mint 界面更接近 Windows。
  2. Red Hat 系列(如 CentOS、Rocky Linux、Fedora)
    • 特点:稳定、安全,广泛应用于企业生产环境。
    • 适合对象:学习服务器运维、企业应用部署。
    • 代表:Fedora 新特性前沿,CentOS/AlmaLinux/ RockyLinux 更适合稳定生产环境。
  3. Arch 系列(如 Arch Linux、Manjaro)
    • 特点:灵活、极简、可定制化程度高。
    • 适合对象:有一定基础的用户、喜欢“从零搭建”系统的人。
    • 代表:Arch Wiki 是学习 Linux 的宝库,Manjaro 作为衍生版更易上手。
  4. 其他特色发行版
    • openSUSE(企业与开发者兼顾)
    • Kali Linux(安全测试专用)
    • Raspberry Pi OS(物联网、嵌入式设备)

建议:单纯作为新手体验推荐从 Ubuntu 入门;如果目标是生产实践,可以选择 CentOS Stream 或 Rocky Linux;若想追求深度理解,可尝试 Arch Linux

3.2、Linux 安装方式

根据不同需求,我们可以选择以下几种安装方式:

  1. 物理机安装(双系统/单系统)
    • 直接在电脑硬盘上安装 Linux,作为主系统或与 Windows 共存。
    • 优点:性能最佳,贴近真实使用场景。
    • 缺点:需要分区,存在误操作导致数据丢失的风险。
    • 场景:长期学习、作为主要工作系统。
  2. 虚拟机安装
    • 使用 VirtualBox、VMware 等虚拟化软件,在 Windows 或 macOS 上运行 Linux。
    • 优点:安全、易于恢复快照、适合练习。
    • 缺点:性能略受限,需一定硬件资源。
    • 场景:学习入门、命令行练习。
  3. WSL(Windows Subsystem for Linux)
    • 在 Windows 10/11 上直接运行 Linux 子系统。
    • 优点:无需虚拟机,性能接近原生,能直接在 Windows 和 Linux 环境中切换。
    • 缺点:对图形界面支持有限(WSL2 已有改善)。
    • 场景:开发者、需要在 Windows 环境中体验 Linux。
  4. 云服务器安装
    • 在阿里云、腾讯云、AWS 等云平台购买 VPS,安装 Linux。
    • 优点:无需本地配置,直接拥有公网 IP。
    • 缺点:需付费,对新手有一定门槛。
    • 场景:运维实践、部署项目。

3.3、虚拟机安装示例(以 VMware + CentOS 为例)

  1. 下载 VMware
    前往 VMware 官网 下载并安装。
  2. 获取 CentOS 镜像文件(ISO)
    前往 CentOS 官网 下载你喜欢的版本,例如 CentOS 7.4
  3. 创建虚拟机
    • 打开 VMware → 新建 → 选择 Linux/Ubuntu 类型。
    • 分配内存(推荐 ≥ 2GB)和硬盘空间(推荐 ≥ 20GB)。
  4. 加载 ISO 文件并安装
    • 在虚拟机设置中挂载 ISO 文件。
    • 启动虚拟机,进入 Ubuntu 安装界面,按提示操作。

3.4、基本环境配置

  1. 更新系统

    sudo apt update && sudo apt upgrade -y   # Ubuntu/Debian
    sudo dnf update -y                      # Fedora/RedHat
  2. 安装常用工具

    sudo yum install -y vim wget curl net-tools git
  3. 创建普通用户并赋予 sudo 权限

    adduser student
    passwd student
    usermod -aG wheel student
  4. 配置网络与软件源

    • 使用国内镜像源(如清华、中科大镜像),提高下载速度。
    • 配置静态 IP(在服务器环境中常见)。

3.5、必备工具与软件

  • 编辑器:vim、nano

  • 系统监控工具:htop、iftop、iotop

  • 网络工具:net-tools、telnet、nmap

  • 开发工具

    sudo yum groupinstall -y "Development Tools"

3.6、学习环境优化(推荐)

  1. 启用命令自动补全

    sudo yum install -y bash-completion
  2. 配置常用别名
    编辑 ~/.bashrc 添加:

    alias ll='ls -alF'
    alias vi='vim'
  3. 远程连接工具

    • 本地使用 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 文件系统的基本概念

  1. 一切皆文件
    • 普通文件(文本、程序、图片等)
    • 目录(特殊文件,包含文件列表)
    • 设备(硬件被抽象为文件,如 /dev/sda 表示硬盘)
    • 进程和内核信息(如 /proc/cpuinfo
  2. 根目录(/)
    • Linux 没有 Windows 的 “C盘、D盘” 概念。
    • 所有文件和目录都挂载在 根目录 / 之下。
  3. 挂载(Mount)
    • 不同的存储设备必须 “挂载” 到某个目录下才能使用。
    • 示例:U 盘可能被挂载到 /media/usb

4.2、FHS 标准(Filesystem Hierarchy Standard)

Linux 发行版的目录结构遵循 FHS(文件系统层次标准)。常见目录功能如下:

目录说明
/根目录,所有目录的起点
/bin存放基本命令(如 lscpcat),所有用户可用
/sbin系统管理命令(如 shutdownifconfig),通常仅 root 使用
/boot系统启动所需文件(内核、引导加载器 GRUB)
/dev设备文件目录(硬盘、终端、U盘等)
/etc配置文件目录(如 passwdssh/sshd_config
/home普通用户的主目录(如 /home/student
/rootroot 用户的主目录
/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、初学者常见操作示例

  1. 查看目录结构:

    tree / -L 1      # 显示根目录下的一级目录
  2. 查找文件:

    find /etc -name "ssh*"
  3. 查看磁盘使用情况:

    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 把所有数据组织在目录树下,日常操作的第一步就是熟悉目录管理。

  1. 路径相关

    pwd             # 显示当前目录
    cd /etc         # 切换到 /etc 目录
    cd ~            # 回到当前用户主目录
    cd -            # 返回上一次所在目录
  2. 目录操作

    ls -l           # 显示详细列表
    ls -a           # 显示隐藏文件
    mkdir test      # 创建目录
    rmdir test      # 删除空目录
    rm -rf test     # 强制删除目录及其内容
  3. 文件操作

    touch file.txt       # 创建空文件
    cp file1 file2       # 复制文件
    mv file1 /tmp/       # 移动文件
    mv file1 file2       # 重命名文件
    rm file.txt          # 删除文件
  4. 查看文件内容

    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 保存退出)
  1. 常用命令
    • :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 系统或某些服务运行所需要的用户。
  • 例如:nobodyapachemysql 等。
  • 这些用户没有实际登录权限。

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 安全的核心。

  • 学会创建用户、分组、设置密码与权限,是日常管理的基本功。
  • 通过 chmodchownsudo,可以精细地控制访问权限。
  • 理解特殊权限(SUID、SGID、Sticky Bit),有助于理解 Linux 系统服务的安全机制。

实践建议:

  1. 在 CentOS 系统中新建几个用户,尝试分配不同权限。
  2. 观察不同用户在访问同一个文件时的差异。
  3. 修改文件权限,验证哪些用户可以访问,哪些不可以。

通过动手操作,才能真正理解 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 为例):

  1. 下载源码:

    wget http://nginx.org/download/nginx-1.22.0.tar.gz
  2. 解压源码:

    tar -zxvf nginx-1.22.0.tar.gz
    cd nginx-1.22.0
  3. 配置编译参数:

    ./configure --prefix=/usr/local/nginx
  4. 编译并安装:

    make && sudo make install
  5. 启动 nginx:

    /usr/local/nginx/sbin/nginx

7.6、Snap 与 Flatpak(补充)

除了传统的 RPM/YUM,现在还有跨发行版的包管理工具:

  1. Snap(Ubuntu 推广,CentOS 需手动安装)

    sudo snap install package_name
  2. Flatpak(跨平台)

    flatpak install package_name

这些工具打包了软件所需的依赖,更适合桌面应用。

7.7、常见问题与解决方案

  1. 安装失败,提示依赖缺失
    • 使用 yum install -y package_name 自动解决依赖。
  2. 找不到软件包
    • 可能仓库未启用,尝试安装 epel-release 或检查 yum repolist
  3. 网络慢
    • 修改 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 提供跨发行版支持,更适合桌面应用。

实践建议

  1. 尝试使用 yum 安装常见工具,如 vimgitwget
  2. 配置阿里云或清华的 YUM 源,体验加速效果。
  3. 使用源码安装一次 nginxredis,体验与包管理工具的区别。

8、进程与服务管理

Linux 是一个多用户、多任务的操作系统,其核心机制之一就是 进程管理。进程是系统运行中最基本的执行单位,每一个命令、应用程序、服务都以进程的形式存在。理解和掌握进程与服务管理,不仅有助于我们排查系统问题,还能提升运维与管理能力。

8.1、进程基础

8.1.1、什么是进程?

  • 进程(Process) 是运行中的程序的实例,每个进程都拥有独立的 PID(进程 ID)
  • Linux 下几乎所有任务(包括守护进程、用户命令、后台程序)都是进程。

8.1.2、进程的分类

  1. 前台进程
    • 在终端运行,用户可直接交互。
    • 示例:执行 vim file.txt
  2. 后台进程
    • 在后台运行,通常不需要用户交互。
    • 示例:运行 Web 服务、数据库服务。
  3. 守护进程(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、小结

  • 进程管理:掌握 pstopkill 等命令,可以快速定位和终止异常进程。
  • 服务管理:熟悉 systemctl 命令,能轻松控制系统服务的启停与开机自启。
  • 实战建议
    1. 通过 pstop 查看系统中最耗资源的进程。
    2. 启动和关闭 nginxsshd 等服务,观察效果。
    3. 使用 systemctl enable 设置一个服务开机自启。
    4. 使用 jobsfgbg 体验前后台任务切换。

理解并掌握进程与服务管理,不仅能帮助你维护系统稳定性,还能为进一步学习 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
  • 提供加密传输,保证安全性。
  • 常用客户端:sshPuTTY(Windows)、MobaXtermXshell

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、使用密钥认证(推荐)

  1. 在本地生成密钥:

    ssh-keygen -t rsa

    会生成 ~/.ssh/id_rsa(私钥)和 id_rsa.pub(公钥)。

  2. 将公钥上传到服务器:

    ssh-copy-id user@server_ip

    或手动写入:~/.ssh/authorized_keys

  3. 之后登录服务器无需密码:

    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

进入后可使用 lscdgetput 传输文件。

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、小结

  • 网络配置:熟悉 ifconfigipnmcli,能快速修改和查看网络参数。
  • 远程连接:掌握 ssh 登录与密钥认证,是日常管理的必备技能。
  • 文件传输:SCP、SFTP、rsync 是常见工具,适合不同场景。
  • 安全加固:修改 SSH 端口、关闭 root 登录、使用密钥认证,能提升远程管理的安全性。

实践建议

  1. 配置一台 CentOS 虚拟机,尝试使用 ssh 远程登录。
  2. 修改 SSH 配置文件,禁止 root 登录,改用普通用户+sudo。
  3. 使用 scp 在本地与远程之间传输文件。
  4. 使用 firewalld 开放和关闭端口,测试远程连接的效果。

掌握网络与远程连接,意味着你可以随时随地安全地管理你的 Linux 服务器,这是 Linux 学习的重要里程碑。


10、Shell 脚本入门

10.1、什么是 Shell 与 Shell 脚本

在 Linux 系统中,Shell 是用户与内核之间的桥梁。它既是一种命令解释器,用来执行用户输入的命令,也是一种编程语言,支持变量、条件判断、循环、函数等。

常见的 Shell 类型有:

  • sh:最早的 Bourne Shell。
  • bash:Bourne Again Shell,Linux 默认 Shell,功能更强大。
  • zshfish:增强型 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

  1. 直接调用解释器运行:

    bash test.sh
  2. 赋予执行权限后运行:

    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 脚本调试与最佳实践

  1. 调试脚本

    bash -x script.sh

    -x 参数会显示执行过程,方便排错。

  2. 写注释:给脚本加上清晰的注释,方便维护。

  3. 使用函数:提高脚本可读性与复用性。

  4. 错误处理:在脚本开头加上:

    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

  1. 下载 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'
  2. 安装:

    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、常见问题分类

  1. 系统启动问题
    • 启动卡在 grubkernel panic
    • 无法进入多用户模式(黑屏、循环重启)
  2. 用户与权限问题
    • 忘记 root 密码
    • 普通用户权限不足,无法执行关键命令
  3. 网络与连接问题
    • 无法联网(ping 不通外网)
    • SSH 远程连接失败
  4. 服务与进程问题
    • 服务无法启动或异常退出
    • 进程占用 CPU 或内存过高
  5. 磁盘与文件系统问题
    • 磁盘空间不足
    • 文件系统损坏或只读
  6. 软件与包管理问题
    • yum/dnf 安装失败
    • 依赖冲突

13.2、排错思路与通用方法

排错通常遵循 “由表及里、由简到繁” 的原则:

  1. 明确现象:先确认问题是 网络、权限、服务还是系统
  2. 查看日志:系统日志和应用日志是第一手资料。
    • 系统日志:/var/log/messages
    • 安全日志:/var/log/secure
    • 服务日志:如 /var/log/httpd//var/log/nginx/
  3. 使用工具定位
    • 进程pstophtop
    • 网络pingssnetstattraceroute
    • 磁盘df -hdu -shlsblk
  4. 验证配置:检查配置文件是否正确(如 sshd_confignginx.conf)。
  5. 分步排查:逐层验证,从 硬件 → 系统 → 服务 → 应用

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 不通。
排查思路

  1. 查看网卡状态:
nmcli device status
  1. 确认 IP 地址:
ip addr show
  1. 检查网关与 DNS:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
cat /etc/resolv.conf
  1. 测试:
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 -hdu -sh
检查网络pingtraceroute
编辑网卡配置nmclinmtui

13.5、小结

  • 日志是关键:遇到问题第一步先看日志。
  • 逐层排查:不要一上来就怀疑系统崩了,要按 硬件→系统→服务→应用 的顺序。
  • 善用工具:熟悉 systemctljournalctlssdf 等命令,可以快速定位问题。
  • 建立排错笔记:记录自己遇到的问题和解决方法,下次类似问题可以快速解决。

14、学习资源与实践建议

Linux 学习不仅仅是掌握一些命令,更重要的是理解背后的原理,并在实践中不断积累经验。CentOS 作为一款稳定的企业级 Linux 发行版,非常适合作为学习和开发的环境。本章将为你梳理学习路径、推荐优质资源,并提供实践建议,帮助你高效掌握 Linux。

14.1、学习方式与路径

  1. 基础命令学习

    • 从文件操作(lscpmv)、权限管理(chmodchown)、进程控制(pskill)等入手。

    • 每学习一个命令,都要实际操作并查看 man 手册:

      man ls
  2. 系统原理理解

    • 学习 Linux 的启动流程、进程管理机制、文件系统结构。
    • 理解 systemd、内核、用户态与内核态的关系。
  3. 服务与网络配置

    • 学会配置 Nginx、Apache、MySQL、SSH 等常用服务。
    • 掌握防火墙(firewalld/iptables)和 SELinux 基础。
  4. 开发与运维结合

    • 熟悉开发环境(GCC、Make、Git)。
    • 掌握运维工具(systemctl、journalctl、crontab)。
  5. 进阶与专项

    • 学习 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、核心知识回顾

  1. Linux 基础与发展
    • 了解了 Linux 的起源与发展历程,从 Unix 演变到现代的 CentOS/RHEL。
    • 掌握了 Linux 的文件系统结构、目录层次、文件权限体系,为日常操作和系统管理奠定基础。
  2. 系统安装与环境准备
    • 学会在 CentOS 上安装系统、配置网络、创建用户、安装基础工具。
    • 熟悉包管理器(yum/dnf)和系统更新操作,为后续软件安装与开发环境搭建做好准备。
  3. 文件系统与基本操作
    • 掌握常用文件操作命令:lscpmvrmchmodchown 等。
    • 理解 Linux 的权限管理机制、符号链接、硬链接,能高效管理文件与目录。
  4. 用户与权限管理
    • 掌握用户与组的创建、删除、修改。
    • 理解 Sudo、权限分级和安全策略,能够合理配置系统权限,保障安全。
  5. 软件安装与服务管理
    • 学会安装、升级和卸载软件包。
    • 掌握 systemd 管理服务和进程的基本操作:启动、停止、启用、禁用、状态查看。
  6. 网络与远程连接
    • 配置网络接口、DNS、网关,排查网络故障。
    • 熟练使用 SSH、scp、sftp 等工具进行远程连接和文件传输。
  7. Shell 脚本与自动化
    • 掌握 Shell 脚本基础语法、条件判断、循环、函数和变量使用。
    • 能编写日常管理脚本,实现任务自动化、日志分析、监控告警等功能。
  8. 日志与系统监控
    • 了解系统日志结构及常用日志文件位置。
    • 掌握 journalctl、logrotate、top、htop、vmstat 等监控工具。
    • 能通过日志和监控信息快速排查问题。
  9. 开发环境搭建
    • 搭建 C/C++、Python、Java、Node.js 等开发环境。
    • 安装和配置数据库(MySQL、PostgreSQL)及版本控制工具(Git、SVN)。
    • 熟悉编辑器与 IDE,如 Vim、VS Code、Eclipse,为开发实践提供高效工具。
  10. 常见问题与排错技巧
    • 系统启动、网络、服务、磁盘、软件安装常见问题的排查思路。
    • 使用日志、系统命令和配置文件进行快速定位和解决问题。
  11. 学习资源与实践建议
    • 提供了官方文档、在线课程、书籍、社区和实践平台。
    • 强调边学边做、搭建个人实验环境、参与开源项目、写笔记总结的有效学习策略。

15.2、学习方法总结

  • 理论与实践结合:Linux 的学习必须以动手操作为核心,命令、服务和配置都需要在实践中熟悉。
  • 问题导向学习:遇到问题时,通过日志分析、命令检查、配置调整解决问题,提升解决问题能力。
  • 循序渐进:从基础操作到高级管理,从单机操作到服务部署,逐步深入,形成完整知识体系。
  • 持续积累与总结:通过笔记、博客、实验脚本,将零散知识沉淀为可复用经验。

15.3、未来学习与应用展望

  1. 深入系统内核与性能优化
    • 学习 Linux 内核原理、内存管理、进程调度、IO 调度等。
    • 掌握性能分析工具(perf、strace、iostat 等),进行系统调优。
  2. 高级网络与安全管理
    • 掌握防火墙策略、SELinux 高级配置、VPN 和安全加固。
    • 学习日志分析与入侵检测,提升系统安全能力。
  3. 自动化运维与容器化
    • 学习 Ansible、SaltStack 等自动化运维工具。
    • 掌握 Docker、Kubernetes 等容器技术,实现环境标准化与微服务部署。
  4. 开发实践与项目落地
    • 将 Linux 开发环境与版本控制、数据库、Web 服务结合,搭建完整项目。
    • 参与开源项目,提升实际问题解决能力。
  5. 持续学习与社区参与
    • 积极参与开源社区(GitHub、Stack Overflow、Linux 内核邮件列表)。
    • 学习最新 Linux 发行版特性、工具链和开发框架,保持技术敏锐度。

15.4、结语

Linux 是一个功能强大、灵活且广泛应用的操作系统。通过系统学习和实践,你已经掌握了从基础操作到开发环境搭建、从系统管理到问题排查的完整技能体系。

未来,持续动手实践、深入理解系统原理、积极参与开源与社区,将让你不仅能够熟练使用 Linux,还能在系统运维、后端开发、云计算与容器化等领域游刃有余。

正如 Linux 的哲学一样:简洁、稳健、自由,掌握它,就是掌握无数可能。


希望这篇博客对您有所帮助,也欢迎您在此基础上进行更多的探索和改进。如果您有任何问题或建议,欢迎在评论区留言,我们可以共同探讨和学习。更多知识分享可以访问 我的个人博客网站




posted on 2025-09-15 21:02  ycfenxi  阅读(13)  评论(0)    收藏  举报