当前位置:首页>Linux>【全新 Linux 2.0 教程】数据开发工程师专用版

【全新 Linux 2.0 教程】数据开发工程师专用版

  • 2026-02-02 15:58:05
【全新 Linux 2.0 教程】数据开发工程师专用版

🐧 Linux 入门到实战

🎯 第一章:操作系统概述

什么是操作系统?

操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。

操作系统的主要功能

进程管理:负责程序的加载、执行、调度与终止内存管理:分配和管理系统内存资源文件系统管理:提供文件存储、访问、保护机制设备管理:管理各类硬件设备的驱动与访问用户接口:提供命令行或图形化操作界面

主流操作系统对比

操作系统类型
代表产品
主要特点
应用场景
Windows
Windows 10/11
图形化界面友好,软件生态丰富
个人办公、游戏娱乐
macOS
macOS Big Sur+
设计优美,稳定性强
创意设计、开发工作
Linux
CentOS、Ubuntu
开源免费,稳定性高,安全性强
服务器、大数据平台

🐧 第二章:Linux 系统概述

Linux 的历史由来

Linux 诞生于1991年,由芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开发。当时林纳斯不满意Minix(一个教学用的类Unix操作系统),决定开发一个自由的操作系统内核。

发展历程

  • 1991年:Linux 0.01版本发布
  • 1992年:采用GPL许可证,成为自由软件
  • 1993年:Slackware等早期发行版出现
  • 1994年:Linux 1.0正式发布
  • 2003年:Red Hat Enterprise Linux (RHEL) 发布
  • 2004年:CentOS项目启动(基于RHEL的免费版本)

Linux 的核心特点

开源免费:源代码公开,可自由使用、修改和分发稳定可靠:可连续运行数年而不需要重启安全高效:权限管理机制完善,病毒较少强大的网络功能:原生支持各种网络协议和服务丰富的软件生态:拥有大量的开源软件支持

Linux 发行版家族

Red Hat系列:RHEL、CentOS、FedoraDebian系列:Debian、Ubuntu、Linux MintSUSE系列:SUSE Linux Enterprise、openSUSEArch系列:Arch Linux、Manjaro


🛠️ 第三章:Linux 系统环境搭建

VMware 虚拟机安装配置

5.0 安装前准备

硬件要求

  • CPU:双核以上,支持虚拟化技术(Intel VT-x或AMD-V)
  • 内存:8GB以上(建议分配4GB给虚拟机)
  • 硬盘:100GB以上可用空间
  • 网络:稳定的网络连接

软件准备

  • VMware Workstation Pro 16.x 或更高版本
  • CentOS 7 ISO镜像文件(CentOS-7-x86_64-DVD-2009.iso)

VMware 安装步骤

  1. 下载安装包:从VMware官网下载Workstation Pro安装程序
  2. 运行安装向导:双击安装包,按提示完成安装
  3. 输入许可证:输入购买的产品密钥或选择试用
  4. 完成安装:重启系统确保虚拟机服务正常启动

CentOS 7 虚拟机创建

  1. 新建虚拟机
文件 → 新建虚拟机 → 典型(推荐) → 下一步
  1. 选择安装源
安装程序光盘映像文件(iso) → 浏览选择CentOS-7-x86_64-DVD-2009.iso
  1. 配置虚拟机信息
客户机操作系统:Linux
版本:CentOS 7 64位
虚拟机名称:CentOS7-BigData
位置:D:\VMware\CentOS7-BigData
  1. 指定磁盘容量
最大磁盘大小:100GB
选择:将虚拟磁盘存储为单个文件
  1. 自定义硬件配置
内存:4096MB
处理器:2个
网络适配器:NAT模式
CD/DVD:使用ISO镜像文件

CentOS 7 系统安装

  1. 启动虚拟机,选择"Install CentOS 7"

  2. 语言选择:中文 → 简体中文(中国)

  3. 安装信息摘要配置

日期和时间

地区:亚洲
城市:上海

键盘布局

添加:汉语

语言支持

添加:中文(简体,中国)

安装源

选择:本地介质

软件选择

选择:基础设施服务器
附加选项:开发工具

安装位置

选择:我要配置分区
分区方案:
/boot:1GB(标准分区)
swap:4GB(标准分区)
/:剩余空间(LVM)

网络和主机名

主机名:bigdata-node01
网络配置:打开以太网连接
  1. 开始安装,设置root密码和创建用户

网络配置详解

配置静态IP地址

  1. 查看当前网络配置
ip addr show
  1. 编辑网络配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
  1. 配置文件内容(详细解释每个参数):
TYPE="Ethernet"# 网络类型:以太网
BOOTPROTO="static"# 获取IP方式:static静态IP、dhcp动态IP、none不指定
DEFROUTE="yes"# 是否设置为默认路由:yes是、no否
IPV4_FAILURE_FATAL="no"# IPv4失败时是否致命:no继续、yes停止
IPV6INIT="yes"# 是否启用IPv6:yes启用、no禁用
IPV6_AUTOCONF="yes"# IPv6是否自动配置:yes是、no否
IPV6_DEFROUTE="yes"# IPv6是否默认路由:yes是、no否
IPV6_FAILURE_FATAL="no"# IPv6失败时是否致命:no继续、yes停止
NAME="ens33"# 网络连接名称
UUID="xxxx-xxxx-xxxx-xxxx"# 唯一标识符
DEVICE="ens33"# 设备名称
ONBOOT="yes"# 开机是否启动:yes启动、no不启动
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服务器
  1. 重启网络服务
systemctl restart network
  1. 验证网络连接
ping www.baidu.com

主机名配置

  1. 临时修改主机名
hostname bigdata-node01
  1. 永久修改主机名
hostnamectl set-hostname bigdata-node01
  1. 配置hostname文件(永久修改)
echo"主机名" >> /etc/hostname

💻 第四章:Linux 常用命令详解

4.1 文件和目录操作命令

ls 命令 - 列出目录内容

命令格式ls [选项] [路径]

常用参数

  • -a, --all:显示所有文件,包括隐藏文件(以.开头的文件)
  • -l:使用长格式显示详细信息(权限、所有者、大小、时间等)
  • -h, --human-readable:以人类可读的方式显示文件大小(K、M、G)
  • -d, --directory:显示目录本身的信息,而不是目录内容
  • -t:按修改时间排序,最新的在前
  • -r, --reverse:反向排序
  • -S:按文件大小排序,最大的在前
  • -R, --recursive:递归显示子目录内容
  • -i, --inode:显示文件的inode号
  • -F, --classify:在文件名后添加标识符(/表示目录,*表示可执行文件)

使用示例

ls -la /home          # 显示/home目录下所有文件的详细信息
ls -lh /var/log# 以人类可读方式显示日志文件大小
ls -lt /tmp           # 按时间排序显示/tmp目录内容
ls -d /etc            # 只显示/etc目录本身的信息
ls -R /data           # 递归显示/data目录及其子目录内容

注意: 通过 命令 --help 可以常看命令的帮助文档。

cd 命令 - 切换目录

命令格式cd [目录路径]

常用参数

  • ~ 或省略:切换到当前用户的主目录
  • -:切换到上一次所在的目录
  • ..:切换到上级目录
  • .:当前目录
  • /:根目录

使用示例

cd /home/user         # 切换到指定目录
cd ~                  # 切换到主目录
cd -                  # 切换到上一次所在的目录
cd ..                 # 切换到上级目录
cd ../..              # 切换到上两级目录

pwd 命令 - 显示当前工作目录

命令格式pwd [选项]

常用参数

  • -L, --logical:显示逻辑路径(默认)
  • -P, --physical:显示物理路径(解析符号链接)

使用示例

pwd# 显示当前目录的完整路径
pwd -P               # 显示物理路径,不显示符号链接

mkdir 命令 - 创建目录

命令格式mkdir [选项] 目录名

常用参数

  • -p, --parents:递归创建目录,如果父目录不存在则一并创建
  • -m, --mode:设置目录权限
  • -v, --verbose:显示创建过程

使用示例

mkdir testdir         # 创建单个目录
mkdir -p /data/logs/2024/01  # 递归创建多级目录
mkdir -m 755 /data/public  # 创建目录并设置权限为755
mkdir -v newdir       # 显示创建过程

touch 命令 - 创建空文件或更新时间戳

命令格式touch [选项] 文件

常用参数

  • -a:只修改访问时间
  • -m:只修改修改时间
  • -c, --no-create:不创建新文件,只更新时间戳
  • -d, --date=STRING:使用指定的时间而不是当前时间
  • -t STAMP:使用指定的时间戳

使用示例

touch newfile.txt     # 创建新文件或更新时间戳
touch -a file.txt     # 只更新访问时间
touch -m file.txt     # 只更新修改时间
touch -c file.txt     # 不创建文件,只更新时间戳
touch -d "2024-01-01" file.txt  # 设置为指定日期

rm 命令 - 删除文件或目录

命令格式rm [选项] 文件或目录

常用参数

  • -f, --force:强制删除,不提示确认
  • -i:删除前逐一确认
  • -r, -R, --recursive:递归删除目录及其内容
  • -v, --verbose:显示删除过程
  • -d, --dir:删除空目录

使用示例

rm file.txt           # 删除单个文件(会提示确认)
rm -f file.txt        # 强制删除文件,不提示
rm -rf /data/temp     # 递归强制删除目录及其内容
rm -i *.log# 删除前逐一确认
rm -v oldfile         # 显示删除过程

cp 命令 - 复制文件或目录

命令格式cp [选项] 源文件 目标文件

常用参数

  • -r, -R, --recursive:递归复制目录及其内容
  • -i, --interactive:覆盖前提示确认
  • -f, --force:强制复制,如果目标文件存在则强制覆盖
  • -p:保持文件属性(权限、时间戳等)
  • -v, --verbose:显示复制过程
  • -a, --archive:归档复制,保持所有属性并递归复制
  • -u, --update:只在源文件比目标文件新或目标文件不存在时才复制

使用示例

cp file.txt backup.txt  # 复制文件
cp -r /data /backup     # 递归复制目录
cp -i file.txt /tmp/    # 覆盖前提示确认
cp -p file.txt newfile  # 保持文件属性复制
cp -v *.txt /backup     # 显示复制过程
cp -u source.txt dest.txt  # 只在新文件时复制

mv 命令 - 移动或重命名文件

命令格式mv [选项] 源文件 目标文件

常用参数

  • -i, --interactive:覆盖前提示确认
  • -f, --force:强制移动,不提示
  • -v, --verbose:显示移动过程
  • -n, --no-clobber:不覆盖已存在的文件
  • -u, --update:只在新文件时移动

使用示例

mv old.txt new.txt    # 重命名文件
mv file.txt /tmp/     # 移动文件到目录
mv -i source.txt dest.txt  # 覆盖前确认
mv -v *.log /logs     # 显示移动过程
mv dir1/ dir2/        # 移动目录

4.2 基础文本处理命令

echo 命令 - 输出文本和变量

命令格式echo [选项] [字符串或变量]

常用参数

  • -n:不换行输出
  • -e:启用转义字符解释
  • -E:禁用转义字符解释(默认)

常用转义字符

  • \n:换行
  • \t:制表符
  • \\:反斜杠
  • \$:美元符号

使用示例

echo"Hello World"# 基本输出
echo -n "请输入:"# 不换行输出
echo -e "Line 1\nLine 2"# 使用转义字符
echo"当前用户是:$USER"# 输出变量
echo"今天日期是:$(date)"# 输出命令结果

输出重定向

标准输出重定向

  • >:覆盖写入文件
  • >>:追加写入文件

标准错误重定向

  • 2>:重定向错误输出
  • 2>&1:将错误输出重定向到标准输出

使用示例

echo"Hello" > file.txt               # 写入文件(覆盖)
echo"World" >> file.txt              # 追加到文件
ls -l /etc > output.txt 2> error.txt # 标准输出和错误分别重定向
ls -l /etc > output.txt 2>&1          # 输出和错误都重定向到同一文件
ls -l /etc &> output.txt              # 简化的全部重定向方式

cat 命令 - 显示文件内容

命令格式cat [选项] 文件

常用参数

  • -n, --number:显示行号
  • -b, --number-nonblank:对非空行显示行号
  • -s, --squeeze-blank:压缩连续的空行到一行
  • -E, --show-ends:在每行结束处显示$
  • -T, --show-tabs:将TAB字符显示为^I
  • -v, --show-nonprinting:显示非打印字符

使用示例

cat file.txt          # 显示文件内容
cat -n file.txt       # 显示文件内容并显示行号
cat file1.txt file2.txt  # 显示多个文件内容
cat -b file.txt       # 对非空行显示行号
cat -E file.txt       # 显示行尾符号

more 命令 - 分页显示文件内容

命令格式more [选项] 文件

常用参数

  • +n:从第n行开始显示
  • -n:定义屏幕大小为n行
  • -d:显示帮助信息
  • -c:不滚屏,显示新内容时清屏

使用交互

  • Space:向下翻页
  • Enter:向下翻行
  • b:向上翻页
  • /字符串:搜索字符串
  • q:退出

使用示例

more longfile.txt     # 分页显示长文件
more +100 file.txt    # 从第100行开始显示
ls -la | more         # 将命令输出分页显示

less 命令 - 增强版分页显示

命令格式less [选项] 文件

常用参数

  • -N:显示行号
  • -i:搜索时忽略大小写
  • -m:显示百分比
  • -S:不换行显示长行

使用交互

  • Space:向下翻页
  • b:向上翻页
  • j/k:向下/向上移动一行
  • /字符串:向下搜索
  • ?字符串:向上搜索
  • n:重复上次搜索
  • q:退出

使用示例

less largefile.txt    # 分页显示大文件
less -N file.txt      # 显示行号
ps aux | less         # 分页显示进程信息

head 命令 - 显示文件开头内容

命令格式head [选项] 文件

常用参数

  • -n NUM:显示前NUM行(默认10行)
  • -c NUM:显示前NUM个字节
  • -q:不显示文件名(当显示多个文件时)

使用示例

head file.txt         # 显示前10行
head -n 20 file.txt   # 显示前20行
head -n -5 file.txt   # 显示除最后5行外的所有内容
head -c 100 file.txt  # 显示前100个字节

tail 命令 - 显示文件末尾内容

命令格式tail [选项] 文件

常用参数

  • -n NUM:显示后NUM行(默认10行)
  • -c NUM:显示后NUM个字节
  • -f, --follow:动态跟踪文件内容变化
  • -F:类似-f,但在文件不可读时继续尝试
  • --pid=PID:与-f一起使用,当指定进程结束时停止跟踪

使用示例

tail file.txt         # 显示后10行
tail -n 50 file.txt   # 显示后50行
tail -f log.txt       # 动态跟踪日志文件
tail -n +20 file.txt  # 从第20行开始显示

grep 命令 - 文本搜索工具

命令格式grep [选项] 模式 文件

常用参数

  • -i, --ignore-case:忽略大小写
  • -v, --invert-match:反向匹配,显示不匹配的行
  • -n, --line-number:显示匹配行的行号
  • -c, --count:只显示匹配的行数
  • -l, --files-with-matches:只显示包含匹配的文件名
  • -r, --recursive:递归搜索目录
  • -w, --word-regexp:匹配整个单词
  • -A NUM:显示匹配行后NUM行
  • -B NUM:显示匹配行前NUM行
  • -C NUM:显示匹配行前后各NUM行
  • --color=auto:高亮显示匹配内容

使用示例

grep "error" log.txt  # 搜索包含error的行
grep -i "error" log.txt  # 忽略大小写搜索
grep -n "error" log.txt  # 显示行号
grep -v "error" log.txt  # 显示不包含error的行
grep -r "error" /var/log# 递归搜索目录
grep -A 3 -B 3 "error" log.txt  # 显示匹配行前后3行

4.3 文件内容编辑命令

vi/vim 编辑器 - 强大的文本编辑器

vi/vim 基本模式

  • 命令模式:等待用户操作(默认的模式)
  • 编辑模式:用于用户编辑文件内容
  • 末行模式:用于用户保存或退出

基本操作

vi filename                 # 打开或创建文件
vim filename               # 使用vim编辑器(增强版)

模式切换

  • i:在当前位置前插入
  • a:在当前位置后插入
  • o:在当前行下方新建一行
  • O:在当前行上方新建一行
  • Esc:返回普通模式

导航命令(命令模式):

  • h/j/k/l:左/下/上/右移动
  • w/b:下一个/上一个单词
  • ^/$:行首/行尾
  • gg/G:文件开头/文件末尾
  • nG:跳到第n行

编辑命令(命令模式):

  • x:删除当前字符
  • dd:删除当前行
  • yy:复制当前行
  • p:粘贴到当前行下方
  • P:粘贴到当前行上方
  • u:撤销
  • Ctrl+r:重做

搜索替换(命令模式):

  • /关键词:向下搜索
  • ?关键词:向上搜索
  • n:下一个匹配
  • N:上一个匹配

替换操作(末行模式)

  • :s/old/new/g:替换当前行
  • :%s/old/new/g:替换整个文件

保存退出(命令模式):

  • :w:保存
  • :q:退出
  • :wq 或 ZZ:保存并退出
  • :q!:强制退出不保存
  • :e!:放弃修改重新加载

补充(命令模式):

  • :set nu :显示行号
  • :set nonu :不显示行号
  • :n : n 表示数字,跳转到第几行
  • :nd: n 表示数字,d表示删除,n可以是个范围(1,5 | 2,9 | 1,$ ....)

使用示例

# 编辑文件
vi /etc/hosts

# 在普通模式下:
i                           # 进入插入模式
192.168.1.100 server01     # 输入内容
Esc                         # 返回普通模式
:wq                         # 保存并退出

4.4 文件权限管理命令

📋 文件类型与权限详解

文件类型识别: 在Linux中,每个文件和目录都有特定的类型,通过ls -l命令可以查看文件类型:

ls -l /etc/passwd
-rw-r--r--. 1 root root 2659 Jan  1 12:00 /etc/passwd

文件类型标识符(第一个字符):

  • -:普通文件(regular file)
  • d:目录(directory)
  • l:符号链接(symbolic link)
  • c:字符设备文件(character device)
  • b:块设备文件(block device)
  • p:命名管道(named pipe)
  • s:套接字文件(socket)

文件类型查看命令

# 查看文件类型
file /etc/passwd           # ASCII text
file /bin/ls               # ELF 64-bit LSB executable

# 查看文件详细信息
stat /etc/passwd           # 显示文件的详细状态信息
ls -la /dev/               # 查看设备文件

特殊文件类型详解

1. 普通文件(-)

# 文本文件
-rw-r--r-- 1 root root  100 Jan  1 10:00 config.txt

# 二进制可执行文件
-rwxr-xr-x 1 root root 5000 Jan  1 10:00 program

# 数据文件
-rw-r--r-- 1 root root  200 Jan  1 10:00 data.dat

2. 目录文件(d)

drwxr-xr-x 2 root root 4096 Jan  1 10:00 documents/

# 目录权限含义:
# r:可以列出目录内容(ls)
# w:可以在目录中创建、删除文件
# x:可以进入目录(cd)

3. 符号链接(l)

lrwxrwxrwx 1 root root    9 Jan  1 10:00 link -> target.txt

# 创建符号链接
ln -s target.txt link      # 创建软链接
readlink link             # 查看链接指向的目标

4. 设备文件

# 字符设备(c)- 串行设备,如终端
 crw--w---- 1 root tty  4, 0 Jan  1 10:00 /dev/tty0

# 块设备(b)- 随机访问设备,如硬盘
 brw-rw---- 1 root disk 8, 0 Jan  1 10:00 /dev/sda

# 设备文件格式:主设备号,次设备号
# 主设备号:设备类型
# 次设备号:具体设备实例

5. 命名管道(p)

prw------- 1 root root    0 Jan  1 10:00 mypipe

# 创建命名管道
mkfifo mypipe              # 创建命名管道
ls -l mypipe              # 查看管道文件

6. 套接字文件(s)

srwxrwxrwx 1 root root    0 Jan  1 10:00 socket

# 套接字用于进程间网络通信
# 通常由应用程序自动创建

chmod 命令 - 修改文件权限

权限表示方法

  • 数字表示法:4(读r)、2(写w)、1(执行x)
    • 7 = rwx (4+2+1)
    • 6 = rw- (4+2)
    • 5 = r-x (4+1)
    • 4 = r-- (4)
  • 符号表示法:u(用户)、g(组)、o(其他)、a(所有)
    • u+x:给用户添加执行权限
    • g-w:移除组的写权限
    • o=r:设置其他人的权限为只读
    • a+r:给所有人添加读权限

权限对文件和目录的不同含义

权限
对文件的含义
对目录的含义
r (读)
可以读取文件内容
可以列出目录内容(ls)
w (写)
可以修改文件内容
可以在目录中创建、删除、重命名文件
x (执行)
可以执行文件(程序或脚本)
可以进入目录(cd)

常用参数

  • -R, --recursive:递归修改目录及其内容的权限
  • -v, --verbose:显示修改过程
  • -c, --changes:只在权限改变时显示信息

使用示例

chmod 755 script.sh   # 用户:rwx,组:r-x,其他:r-x
chmod u+x file.txt    # 给用户添加执行权限
chmod g-w file.txt    # 移除组的写权限
chmod 644 *.txt       # 所有txt文件设为rw-r--r--
chmod -R 755 /data    # 递归修改/data目录权限

特殊权限位

# SUID (Set User ID) - 4000
chmod u+s program       # 设置SUID权限
# 当用户执行该程序时,以程序所有者的身份运行

# SGID (Set Group ID) - 2000  
chmod g+s directory     # 设置SGID权限
# 在目录中创建的新文件将继承目录的组

# Sticky Bit - 1000
chmod +t /tmp           # 设置粘滞位
# 只有文件所有者才能删除目录中的文件(如/tmp目录)

# 数字表示法
chmod 4755 program      # 设置SUID (4) + 755
chmod 2755 directory    # 设置SGID (2) + 755  
chmod 1755 /tmp         # 设置Sticky Bit (1) + 755

chown 命令 - 修改文件所有者

命令格式chown [选项] [所有者][:[组]] 文件

常用参数

  • -R, --recursive:递归修改目录及其内容的所有者
  • -v, --verbose:显示修改过程
  • -c, --changes:只在所有者改变时显示信息
  • --from=当前所有者:当前组:只在当前所有者匹配时才修改

使用示例

chown user file.txt   # 修改文件所有者为user
chown user:group file.txt  # 同时修改所有者和所属组
chown :group file.txt  # 只修改所属组
chown -R user:group /data  # 递归修改目录所有者
chown -v user file.txt  # 显示修改过程

文件权限查看与解析

# 详细查看文件权限
ls -l filename            # 查看文件权限
ls -ld directory/        # 查看目录权限
ls -la /tmp              # 查看所有文件包括隐藏文件



# 权限数字计算
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6  
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4

# 所以:
# rwxr-xr-x = 755
# rw-r--r-- = 644
# rwx------ = 700

权限验证命令

# 检查文件权限
test -r file.txt && echo"可读" || echo"不可读"
test -w file.txt && echo"可写" || echo"不可写"
test -x script.sh && echo"可执行" || echo"不可执行"

# 使用[ ]进行权限检查
[ -r file.txt ] && echo"文件可读"
[ -w file.txt ] && echo"文件可写"
[ -x script.sh ] && echo"脚本可执行"
[ -d directory ] && echo"是目录"
[ -f file.txt ] && echo"是普通文件"
[ -L linkname ] && echo"是符号链接"

chgrp 命令 - 修改文件所属组

命令格式chgrp [选项] 组 文件

常用参数

  • -R, --recursive:递归修改目录及其内容的所属组
  • -v, --verbose:显示修改过程
  • -c, --changes:只在所属组改变时显示信息

使用示例

chgrp admin file.txt   # 修改文件所属组为admin
chgrp -R admin /data   # 递归修改目录所属组
chgrp -v admin file.txt  # 显示修改过程

4.5 用户和组管理命令(详细版)

useradd 命令 - 添加用户

命令格式useradd [选项] 用户名

常用参数

  • -d, --home HOME_DIR:指定用户主目录
  • -m, --create-home:创建用户主目录
  • -s, --shell SHELL:指定用户登录shell
  • -g, --gid GROUP:指定主要组
  • -G, --groups GROUPS:指定附加组
  • -u, --uid UID:指定用户ID
  • -c, --comment COMMENT:添加用户描述
  • -e, --expiredate EXPIRE_DATE:设置账户过期日期
  • -f, --inactive INACTIVE:设置密码过期后账户禁用天数

使用示例

useradd testuser      # 创建新用户
useradd -m -d /home/test testuser  # 创建用户并指定主目录
useradd -s /bin/bash testuser  # 指定登录shell
useradd -g users -G admin,db testuser  # 指定主要组和附加组
useradd -u 1001 testuser  # 指定用户ID
useradd -c "Test User" testuser  # 添加用户描述

passwd 命令 - 设置用户密码

命令格式passwd [选项] [用户名]

常用参数

  • -d, --delete:删除用户密码
  • -l, --lock:锁定用户账户
  • -u, --unlock:解锁用户账户
  • -e, --expire:强制用户下次登录时修改密码
  • -n, --minimum DAYS:设置密码最小使用天数
  • -x, --maximum DAYS:设置密码最大使用天数
  • -w, --warning DAYS:设置密码过期警告天数

使用示例

passwd testuser       # 设置用户密码
passwd -l testuser    # 锁定用户账户
passwd -u testuser    # 解锁用户账户
passwd -e testuser    # 强制下次登录修改密码
passwd -d testuser    # 删除用户密码

userdel 命令 - 删除用户

命令格式userdel [选项] 用户名

常用参数

  • -r, --remove:删除用户主目录和邮件目录
  • -f, --force:强制删除用户,即使用户仍在登录

使用示例

userdel testuser      # 只删除用户,保留主目录
userdel -r testuser   # 删除用户及其主目录
userdel -f testuser   # 强制删除用户

usermod 命令 - 修改用户属性

命令格式usermod [选项] 用户名

常用参数

  • -d, --home HOME_DIR:修改用户主目录
  • -m, --move-home:移动用户主目录到新位置
  • -s, --shell SHELL:修改用户登录shell
  • -g, --gid GROUP:修改主要组
  • -G, --groups GROUPS:修改附加组
  • -u, --uid UID:修改用户ID
  • -c, --comment COMMENT:修改用户描述
  • -L, --lock:锁定用户账户
  • -U, --unlock:解锁用户账户

使用示例

usermod -d /new/home testuser  # 修改用户主目录
usermod -s /bin/zsh testuser  # 修改登录shell
usermod -g newgroup testuser  # 修改主要组
usermod -G group1,group2 testuser  # 修改附加组
usermod -L testuser    # 锁定用户账户
usermod -U testuser    # 解锁用户账户

groupadd 命令 - 添加组

命令格式groupadd [选项] 组名

常用参数

  • -g, --gid GID:指定组ID
  • -r, --system:创建系统组
  • -f, --force:如果组已存在,强制成功退出

使用示例

groupadd admin        # 创建新组
groupadd -g 1001 admin  # 指定组ID
groupadd -r system    # 创建系统组

groupdel 命令 - 删除组

命令格式groupdel  组名

使用示例

groupdel admin        # 删除组

groupmod 命令 - 修改组属性

命令格式groupmod [选项] 组名

常用参数

  • -g, --gid GID:修改组ID
  • -n, --new-name NEW_NAME:修改组名

使用示例

groupmod -g 1002 admin  # 修改组ID
groupmod -n newadmin admin  # 修改组名

4.6 压缩和解压命令

gzip 命令 - gzip压缩

命令格式gzip [选项] 文件

常用参数

  • -d, --decompress:解压缩
  • -c, --stdout:将输出写入标准输出,保留原文件
  • -v, --verbose:显示压缩过程
  • -1 到 -9:压缩级别,1最快压缩比最低,9最慢压缩比最高
  • -r, --recursive:递归处理目录

使用示例

gzip file.txt         # 压缩文件,原文件会被删除
gzip -d file.txt.gz   # 解压缩文件
gzip -c file.txt > file.txt.gz  # 压缩并保留原文件
gzip -v file.txt      # 显示压缩过程

zip 命令 - zip压缩

命令格式zip [选项] 压缩包名 文件或目录

常用参数

  • -r, --recurse-paths:递归处理目录
  • -v, --verbose:显示详细过程
  • -q, --quiet:安静模式,不显示过程
  • -9:最高压缩比
  • -0:不压缩,只存储
  • -x:排除指定文件
  • -m:压缩后删除原文件

使用示例

zip archive.zip file1 file2  # 压缩文件
zip -r archive.zip /data  # 递归压缩目录
zip -r archive.zip /data -x "*.log"# 排除日志文件
zip -9 archive.zip file.txt  # 最高压缩比

unzip 命令 - zip解压缩

命令格式unzip [选项] 压缩包名

常用参数

  • -l:列出压缩包内容
  • -v:显示详细信息
  • -d 目录:解压到指定目录
  • -o:覆盖已存在的文件
  • -n:不覆盖已存在的文件
  • -q:安静模式

使用示例

unzip archive.zip     # 解压缩zip文件
unzip -l archive.zip  # 查看zip文件内容
unzip archive.zip -d /tmp  # 解压到指定目录
unzip -o archive.zip  # 覆盖已存在文件

tar 命令 - 打包和压缩

命令格式tar [选项] 包名 指定文件

常用参数

  • -c, --create:创建新的归档文件
  • -x, --extract:解包归档文件
  • -t, --list:列出归档文件内容
  • -v, --verbose:显示详细过程
  • -f, --file:指定归档文件名
  • -z, --gzip:通过gzip压缩/解压缩
  • -j, --bzip2:通过bzip2压缩/解压缩
  • -J, --xz:通过xz压缩/解压缩
  • -C, --directory:解压到指定目录
  • --exclude=PATTERN:排除匹配的文件

使用示例

tar -cvf archive.tar file1 file2  # 创建tar包
tar -xvf archive.tar              # 解包tar文件
tar -tvf archive.tar              # 查看tar包内容
tar -czvf archive.tar.gz /data    # 创建gzip压缩的tar包
tar -xzvf archive.tar.gz          # 解压gzip压缩的tar包
tar -xvf archive.tar -C /tmp       # 解压到指定目录

4.7 定时任务命令

crontab 命令 - 定时任务管理

命令格式crontab [选项] [文件]

常用参数

  • -e:编辑当前用户的crontab文件
  • -l:列出当前用户的crontab内容
  • -r:删除当前用户的crontab文件
  • -u 用户:指定要操作的用户(需要root权限)
  • -i:删除前提示确认

时间格式

* * * * * command
│ │ │ │ │
│ │ │ │ └─── 星期 (0-7, 0和7都表示星期日)
│ │ │ └───── 月份 (1-12)
│ │ └─────── 日期 (1-31)
│ └───────── 小时 (0-23)
└─────────── 分钟 (0-59)

特殊符号

  • *:任意值
  • ,:列举值(如1,3,5)
  • -:范围值(如1-5)
  • /:步进值(如*/5表示每5个单位)

使用示例

# 编辑定时任务
crontab -e

# 每小时的第5分钟执行
5 * * * * /script.sh

# 每天的2:30执行
30 2 * * * /script.sh

# 每周一的8:00执行
0 8 * * 1 /script.sh

# 每月1号的0:00执行
0 0 1 * * /script.sh

# 每5分钟执行一次
*/5 * * * * /script.sh

# 查看定时任务
crontab -l

# 删除定时任务
crontab -r

at 命令 - 一次性定时任务

命令格式at [选项] 时间

常用参数

  • -f 文件:从指定文件读取命令
  • -l:列出待执行的at任务
  • -d 任务号:删除指定的at任务
  • -c 任务号:查看指定任务的内容
  • -m:任务完成后发送邮件给用户

时间格式

  • HH:MM:指定小时和分钟(如14:30)
  • now + n minutes/hours/days/weeks:相对时间
  • midnight/noon/teatime:特殊时间
  • MMDDYY 或 MM/DD/YY:指定日期

使用示例

# 在指定时间执行命令
echo"backup.sh" | at 14:30
at 14:30
> /script/backup.sh
> Ctrl+D

# 查看待执行的at任务
at -l

# 删除at任务
at -d 1

# 相对时间
at now + 2 hours
at now + 30 minutes
at now + 1 day

4.8 正则表达式基础

📖 正则表达式概述

正则表达式(Regular Expression,简称regex或regexp)是一种用于匹配字符串中字符组合的模式。在Linux文本处理中,正则表达式是三剑客(grep、sed、awk)的核心基础,掌握正则表达式对于高效的文本处理至关重要。

🔤 基本正则表达式(BRE)元字符

字符匹配

  • .:匹配任意单个字符(除换行符)
  • []:匹配方括号内的任意一个字符
  • [^]:匹配不在方括号内的任意一个字符
  • \:转义特殊字符

使用示例

grep 'a.c' file.txt      # 匹配a、c之间有任意字符的字符串,如abc、aac、a1c
grep '[aeiou]' file.txt   # 匹配任意元音字母
grep '[0-9]' file.txt    # 匹配任意数字
grep '[^0-9]' file.txt   # 匹配任意非数字字符
grep '\.' file.txt      # 匹配实际的点号字符

位置锚定

  • ^:匹配行首
  • $:匹配行尾
  • \<:匹配词首
  • \>:匹配词尾

使用示例

grep '^hello' file.txt   # 匹配以hello开头的行
grep 'world$' file.txt   # 匹配以world结尾的行
grep '^$' file.txt       # 匹配空行
grep '\<word' file.txt  # 匹配以word开头的单词
grep 'word\>' file.txt  # 匹配以word结尾的单词

重复匹配

  • *:匹配前面的字符0次或多次
  • \{n\}:匹配前面的字符恰好n次
  • \{n,\}:匹配前面的字符至少n次
  • \{n,m\}:匹配前面的字符n到m次

使用示例

grep 'ab*c' file.txt        # 匹配ac、abc、abbc、abbbc等
grep 'o\{2\}' file.txt     # 匹配恰好两个连续的o
grep 'o\{2,\}' file.txt    # 匹配至少两个连续的o
grep 'o\{1,3\}' file.txt  # 匹配1到3个连续的o

🚀 扩展正则表达式(ERE)

扩展正则表达式提供了更强大的匹配能力,在grep中使用-E选项,在sed中使用-r选项启用。

重复匹配

  • +:匹配前面的字符1次或多次
  • ?:匹配前面的字符0次或1次
  • {n}:匹配前面的字符恰好n次
  • {n,}:匹配前面的字符至少n次
  • {n,m}:匹配前面的字符n到m次

使用示例

grep -E 'ab+c' file.txt     # 匹配abc、abbc、abbbc等(至少一个b)
grep -E 'ab?c' file.txt     # 匹配ac或abc(b可选)
grep -E 'o{2}' file.txt     # 匹配恰好两个连续的o
grep -E 'colou?r' file.txt  # 匹配color或colour

分组和引用

  • ():分组,将多个字符当作一个整体
  • |:或运算,匹配多个模式中的任意一个
  • \n:向后引用,n为1-9的数字

使用示例

grep -E '(ab)+' file.txt     # 匹配ab、abab、ababab等
grep -E 'cat|dog' file.txt   # 匹配cat或dog
grep -E 'go{2}d|bad' file.txt # 匹配good或bad

# 分组引用示例
echo"the the" | grep -E '(\w+) \1'# 匹配重复的单词

预定义字符类

  • \w:匹配单词字符(字母、数字、下划线)
  • \W:匹配非单词字符
  • \s:匹配空白字符(空格、制表符等)
  • \S:匹配非空白字符
  • \d:匹配数字(0-9)
  • \D:匹配非数字字符

使用示例

grep -E '\w+' file.txt      # 匹配一个或多个单词字符
grep -E '\d{3}' file.txt    # 匹配恰好3个数字
grep -E '\s+' file.txt      # 匹配一个或多个空白字符

🛠️ 正则表达式在三剑客中的应用

grep 与正则表达式

grep命令默认使用基本正则表达式,使用-E选项启用扩展正则表达式。

基本用法

grep "pattern" file.txt           # 基本字符串匹配
grep -E "pattern1|pattern2" file.txt  # 扩展正则,匹配多个模式
grep -P "pattern" file.txt        # 使用Perl兼容正则表达式(部分系统支持)

高级示例

# 匹配IP地址
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' file.txt

# 匹配邮箱地址
grep -E '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b' file.txt

# 匹配日期格式(YYYY-MM-DD)
grep -E '\b[0-9]{4}-[0-9]{2}-[0-9]{2}\b' file.txt

# 匹配手机号码(中国)
grep -E '\b1[3-9][0-9]{9}\b' file.txt

# 匹配URL
grep -E 'https?://[^/]+' file.txt

grep常用正则选项

grep -i "pattern" file.txt        # 忽略大小写
grep -v "pattern" file.txt        # 反向匹配(不匹配的行)
grep -w "pattern" file.txt        # 匹配整个单词
grep -x "pattern" file.txt        # 匹配整行
grep -A 2 "pattern" file.txt      # 显示匹配行及后2行
grep -B 2 "pattern" file.txt      # 显示匹配行及前2行
grep -C 2 "pattern" file.txt      # 显示匹配行及前后各2行
sed 与正则表达式

sed命令支持基本正则表达式,使用-r选项启用扩展正则表达式。

基本替换语法

sed 's/regexp/replacement/' file.txt      # 替换每行第一个匹配
sed 's/regexp/replacement/g' file.txt     # 替换所有匹配
sed -r 's/regexp/replacement/' file.txt   # 使用扩展正则表达式

高级sed正则示例

# 提取行首的数字
sed 's/^\([0-9]\+\).*/\1/' file.txt

# 删除HTML标签
sed 's/<[^>]*>//g' file.html

# 格式化电话号码(123-456-7890)
sed -r 's/([0-9]{3})([0-9]{3})([0-9]{4})/\1-\2-\3/' file.txt

# 提取URL中的域名
sed -r 's|https?://([^/]+).*|\1|' file.txt

# 将日期格式从MM/DD/YYYY转换为YYYY-MM-DD
sed -r 's|([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})|\3-\1-\2|' file.txt

sed地址定界与正则

sed '/pattern/d' file.txt           # 删除匹配pattern的行
sed '/pattern/s/old/new/g' file.txt # 在匹配pattern的行中替换
sed '/start_pattern/,/end_pattern/d' file.txt  # 删除两个模式之间的行
sed '1,/pattern/s/old/new/' file.txt # 从第1行到匹配pattern的行进行替换
awk 与正则表达式

awk内置强大的正则表达式支持,可以在模式和动作中使用。

基本正则匹配

awk '/pattern/ {print}' file.txt           # 匹配包含pattern的行
awk '!/pattern/ {print}' file.txt          # 匹配不包含pattern的行
awk '$1 ~ /pattern/ {print}' file.txt     # 匹配第1列包含pattern的行
awk '$1 !~ /pattern/ {print}' file.txt    # 匹配第1列不包含pattern的行

高级awk正则示例

# 匹配以数字开头的行
awk '/^[0-9]/ {print}' file.txt

# 匹配IP地址并提取
awk '/\b([0-9]{1,3}\.){3}[0-9]{1,3}\b/ {print}' file.txt

# 匹配邮箱地址并统计
awk '/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/ {count++} END {print "邮箱数量:", count}' file.txt

# 匹配日期并重新格式化
awk 'match($0, /([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})/, arr) {print arr[3] "-" arr[1] "-" arr[2]}' file.txt

# 使用split函数和正则提取域名
awk '{split($0, arr, "https?://"); if(length(arr)>1) {split(arr[2], dom, "/"); print dom[1]}}' file.txt

awk内置字符串函数与正则

# sub函数:替换第一个匹配
awk '{sub(/pattern/, "replacement"); print}' file.txt

# gsub函数:替换所有匹配
awk '{gsub(/pattern/, "replacement"); print}' file.txt

# match函数:返回匹配位置
awk 'match($0, /pattern/) {print "匹配位置:", RSTART, "匹配长度:", RLENGTH}' file.txt

# split函数:按正则分割
awk '{n = split($0, arr, /[,:;]/); for(i=1; i<=n; i++) print arr[i]}' file.txt

💡 正则表达式实战技巧

性能优化建议

  1. 尽量使用具体的字符类[0-9].更高效
  2. 避免过度使用通配符.*可能导致回溯过多
  3. 使用非贪婪匹配:在支持的情况下使用.*?代替.*
  4. 预编译正则表达式:在脚本中多次使用时考虑预编译

调试技巧

# 使用grep --color高亮显示匹配部分
grep --color -E 'pattern' file.txt

# 使用grep -o只显示匹配的部分
grep -o -E 'pattern' file.txt

# 使用sed -n和p命令只显示匹配的行
sed -n '/pattern/p' file.txt

# 使用awk打印匹配位置和长度
awk 'match($0, /pattern/) {print NR ":" RSTART "-" RSTART+RLENGTH-1 ":" $0}' file.txt

常见模式参考

# 匹配整数
^[0-9]+$

# 匹配浮点数
^[0-9]+\.[0-9]+$

# 匹配十六进制颜色代码
^#[0-9A-Fa-f]{6}$

# 匹配中文字符
[\u4e00-\u9fa5]

# 匹配HTML标签
<[^>]+>

# 匹配JSON字符串
"[^"\\]*(\\.[^"\\]*)*"

4.9 文本处理三剑客实战

grep 命令 - 文本搜索专家

grep(Global Regular Expression Print)是Linux中最常用的文本搜索工具,支持强大的正则表达式。

命令格式grep [选项] 模式 文件

常用参数

  • -i, --ignore-case:忽略大小写
  • -v, --invert-match:反向匹配,显示不匹配的行
  • -n, --line-number:显示匹配行的行号
  • -c, --count:只显示匹配的行数
  • -l, --files-with-matches:只显示包含匹配的文件名
  • -r, --recursive:递归搜索目录
  • -w, --word-regexp:匹配整个单词
  • -A NUM:显示匹配行后NUM行
  • -B NUM:显示匹配行前NUM行
  • -C NUM:显示匹配行前后各NUM行
  • --color=auto:高亮显示匹配内容
  • -E, --extended-regexp:使用扩展正则表达式
  • -P, --perl-regexp:使用Perl兼容正则表达式

实战示例

# 基本文本搜索
grep "error" log.txt                    # 搜索包含error的行
grep -i "error" log.txt                 # 忽略大小写搜索
grep -n "error" log.txt                 # 显示行号
grep -v "error" log.txt                 # 显示不包含error的行
grep -c "error" log.txt                # 统计匹配行数

# 高级正则表达式搜索
grep -E "error|fail|exception" log.txt  # 匹配多个错误关键词
grep -E "\b[0-9]{3}-[0-9]{3}-[0-9]{4}\b" file.txt  # 匹配电话号码格式
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b" file.txt  # 匹配邮箱

# 上下文搜索
grep -A 3 "error" log.txt               # 显示匹配行及后3行
grep -B 3 "error" log.txt               # 显示匹配行及前3行
grep -C 3 "error" log.txt               # 显示匹配行及前后各3行

# 文件搜索
grep -r "error" /var/log/               # 递归搜索目录
grep -l "error" *.log# 只显示包含匹配的文件名
grep -w "error" log.txt                 # 匹配整个单词(不会匹配errors)

# 复杂模式匹配
grep -E "^2024-01-01.*error.*timeout" log.txt  # 匹配特定日期和错误类型的行
grep -P "(?<=user:)[a-zA-Z0-9]+" log.txt       # 使用Perl正则提取用户名
grep --color=auto "error" log.txt              # 高亮显示匹配内容

sed 命令 - 流编辑器

sed(Stream Editor)是一个强大的流编辑器,可以对文本进行各种转换和处理。

命令格式sed [选项] '脚本' 文件

常用参数

  • -n:关闭默认输出
  • -e 脚本:添加要执行的脚本
  • -f 脚本文件:从文件读取脚本
  • -i:直接修改文件内容
  • -r, -E:使用扩展正则表达式

常用操作

  • s/旧字符串/新字符串/:替换(默认只替换每行第一个)
  • s/旧字符串/新字符串/g:全局替换
  • d:删除行
  • p:打印行
  • i\:插入行
  • a\:追加行
  • c\:替换整行
  • y/字符集1/字符集2/:字符转换

实战示例

# 基本替换操作
sed 's/old/new/' file.txt               # 替换每行第一个old为new
sed 's/old/new/g' file.txt              # 替换所有old为new
sed 's/old/new/2' file.txt              # 只替换每行第2个old
sed -i 's/old/new/g' file.txt           # 直接修改文件

# 使用正则表达式的替换
sed -r 's/([0-9]{3})([0-9]{3})([0-9]{4})/\1-\2-\3/' file.txt  # 格式化电话号码
sed -r 's|https?://[^/]+||' file.txt                           # 删除URL中的协议和域名
sed 's/<[^>]*>//g' file.html                                     # 删除HTML标签

# 删除操作
sed '/pattern/d' file.txt               # 删除包含pattern的行
sed '/^$/d' file.txt                    # 删除空行
sed '/^#/d' file.txt                     # 删除注释行(以
#开头
sed '1,5d' file.txt                     # 删除1到5行
sed '$d' file.txt                       # 删除最后一行

# 打印操作
sed -n '1,5p' file.txt                  # 显示1到5行(类似head)
sed -n '5,$p' file.txt                  # 显示第5行到末尾(类似tail从第5行开始)
sed -n '/pattern/p' file.txt            # 只显示包含pattern的行(类似grep)

# 插入和追加
sed '1i\newline' file.txt               # 在第1行前插入新行
sed '$a\newline' file.txt               # 在最后追加新行
sed '/pattern/a\newline' file.txt       # 在匹配pattern的行后追加新行

# 多命令组合
sed -e 's/old/new/' -e 's/foo/bar/' file.txt  # 执行多个替换
sed 's/old/new/; s/foo/bar/' file.txt         # 在同一脚本中执行多个命令

# 高级文本处理
sed -r 's/^([A-Z][a-z]+) ([A-Z][a-z]+)$/\2, \1/' file.txt  # 交换姓名顺序(Last, First)
sed 's/\b\w/\u&/g' file.txt                                 # 将每个单词首字母大写
sed -r 's/([a-z])([A-Z])/\1_\L\2/g' file.txt               # 将驼峰命名转换为下划线命名

awk 命令 - 文本处理利器

awk是一个功能强大的文本处理工具,特别适合处理结构化文本数据。

命令格式awk [选项] '模式{动作}' 文件

常用参数

  • -F 分隔符:指定字段分隔符
  • -v 变量=值:定义变量
  • -f 脚本文件:从文件读取awk脚本

内置变量

  • $0:整行内容
  • $1,$2,...:第1,2,...个字段
  • NF:当前行的字段数(Number of Fields)
  • NR:当前行号(Number of Records)
  • FNR:当前文件中的行号
  • FS:字段分隔符(Field Separator)
  • OFS:输出字段分隔符(Output Field Separator)
  • RS:记录分隔符(Record Separator)
  • ORS:输出记录分隔符(Output Record Separator)
  • FILENAME:当前文件名

实战示例

# 基本字段处理
awk '{print $1}' file.txt               # 打印第1列
awk '{print $1, $3}' file.txt          # 打印第1和第3列
awk -F: '{print $1,$3}' /etc/passwd     # 指定分隔符为冒号,打印用户名和UID
awk -F',''{print NF}' file.csv         # 显示每行的字段数

# 行号处理
awk '{print NR, $0}' file.txt           # 显示行号和整行内容
awk 'NR>1{print}' file.txt               # 跳过第1行(常用于跳过表头)
awk 'NR==5{print}' file.txt              # 只显示第5行
awk 'NR%2==0{print}' file.txt            # 只显示偶数行

# 条件过滤
awk '$3>80{print}' file.txt              # 打印第3列大于80的行
awk '$1=="root"{print}' /etc/passwd     # 打印第1列等于root的行
awk '$1~/pattern/{print}' file.txt      # 打印第1列匹配pattern的行
awk '$1!~/pattern/{print}' file.txt     # 打印第1列不匹配pattern的行

# 数学计算
awk '{sum+=$3} END {print "总和:", sum}' file.txt      # 求第3列的和
awk '{sum+=$3; count++} END {print "平均值:", sum/count}' file.txt  # 求平均值
awk '$3>max{max=$3} END {print "最大值:", max}' file.txt             # 求最大值
awk 'NR==1{min=$3} $3<min{min=$3} END {print "最小值:", min}' file.txt # 求最小值

# 字符串处理
awk '{print length($0)}' file.txt       # 显示每行的字符数
awk '{print toupper($0)}' file.txt      # 将整行转换为大写
awk '{print tolower($0)}' file.txt      # 将整行转换为小写
awk '{gsub(/old/, "new"); print}' file.txt  # 全局替换(类似sed的g)

# 格式化输出
awk '{printf "%-10s %5d %8.2f\n", $1, $2, $3}' file.txt  # 格式化输出
awk 'BEGIN{printf "%-10s %-10s %-10s\n", "Name", "Age", "Score"; print "----------"} {printf "%-10s %5d %8.2f\n", $1, $2, $3}' file.txt  # 带表头

# 多文件处理
awk '{count[FNR]++} END {for(i=1;i<=FNR;i++) print i, count[i]}' file1.txt file2.txt  # 统计每行出现的文件数

# 数组和关联数组
awk '{count[$1]++} END {for(word in count) print word, count[word]}' file.txt  # 统计单词出现次数
awk '!seen[$0]++' file.txt              # 删除重复行(保留第一次出现的)

# 高级正则表达式应用
awk 'match($0, /([0-9]{3})-([0-9]{3})-([0-9]{4})/, arr) {print arr[1], arr[2], arr[3]}' file.txt  # 提取电话号码
awk 'BEGIN{IGNORECASE=1} /pattern/' file.txt  # 忽略大小写匹配

🚀 三剑客组合应用实战

日志分析场景

# 统计不同错误类型的数量
grep -E "(ERROR|WARN|INFO)" app.log | awk '{count[$2]++} END {for(type in count) print type, count[type]}'

# 提取特定时间段的日志并统计访问量
sed -n '/2024-01-01 14:00:00/,/2024-01-01 15:00:00/p' access.log | awk '{print $1}' | sort | uniq -c | sort -nr

# 分析访问日志,统计每个IP的访问次数
grep -v "^#" access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20

# 统计响应时间超过1秒的记录
grep -E '" [0-9]{3} [0-9]{4,}' access.log | awk '{print $1, $7, $9}'

数据处理场景

# 从CSV文件中提取特定列并重新格式化
awk -F',''$5>100 {printf "用户:%s, 消费:%.2f, 等级:%s\n", $2, $5, $6}' users.csv

# 合并两个文件的关联数据
awk -F',''NR==FNR{a[$1]=$2; next} ($1 in a){print $0, a[$1]}' file1.csv file2.csv

# 数据清洗:删除空行和注释行
sed '/^$/d; /^#/d' data.txt | awk 'NF>0 {print}'

# 统计文本中各种字符的出现频率
sed 's/\(.\)/\1\n/g' file.txt | grep -v '^$' | sort | uniq -c | sort -nr

系统管理场景

# 分析系统进程,统计内存使用超过1GB的进程
ps aux | awk '$6>1048576 {print $2, $11, $6/1024 "MB"}'

# 统计磁盘使用情况,找出大文件
find / -type f -size +100M -exec ls -lh {} \; | awk '{print $5, $9}' | sort -nr

# 分析网络连接状态
netstat -an | grep -E "(ESTABLISHED|LISTEN)" | awk '{state[$NF]++} END {for(s in state) print s, state[s]}'

# 监控系统负载,超过阈值时发送告警
uptime | awk -F'load average:''{print $2}' | awk -F',''{if($1>8.0) print "系统负载过高:" $1}'

💡 三剑客性能优化技巧

grep优化

# 对于大文件,使用固定字符串搜索更快
grep -F "fixed_string" large_file.txt     # 比正则表达式搜索更快

# 限制搜索范围,避免全文件扫描
grep "pattern" file.txt | head -100       # 只获取前100个匹配

# 使用多线程加速(部分grep版本支持)
grep --mmap "pattern" large_file.txt      # 使用内存映射

sed优化

# 避免不必要的全局替换
sed 's/pattern/replacement/' file.txt   # 如果只需要替换第一个,不要加g

# 对于大文件,使用就地编辑节省内存
sed -i 's/pattern/replacement/' large_file.txt  # 直接修改文件,不创建临时文件

# 组合多个操作为单个sed脚本
sed -e 's/pat1/rep1/' -e 's/pat2/rep2/' -e '/pat3/d' file.txt  # 比多次调用sed更高效

awk优化

# 预定义变量,避免重复计算
awk 'BEGIN{OFS=","} {print $1, $2}' file.txt  # 在BEGIN块中设置输出分隔符

# 使用next跳过不需要的行
awk '$1=="#" {next} {process($0)}' file.txt   # 跳过注释行,避免不必要的处理

# 合理使用数组,避免内存溢出
awk '{if(NR%1000==0) {process_array(); delete a}} {a[NR]=$0}' large_file.txt

# 对于数值计算,使用内置函数而非外部命令
awk '{sum+=$1} END {print sum}' file.txt     # 比调用外部计算器更高效

4.9 系统管理命令

🔧 系统信息类

uname - 显示系统信息

uname                       # 显示内核名称
uname -a                    # 显示所有系统信息
uname -r                    # 显示内核版本
uname -m                    # 显示硬件架构

uptime - 显示系统运行时间

uptime                      # 显示系统运行时间、用户数、负载
uptime -p                   # 显示格式化的运行时间

date - 显示或设置系统日期时间

date                        # 显示当前日期时间
date +"%Y-%m-%d %H:%M:%S"# 格式化显示
date -s "2024-01-01 12:00:00"# 设置日期时间

cal - 显示日历

cal                         # 显示当月日历
cal 2024                    # 显示2024年全年日历
cal 12 2024                 # 显示2024年12月日历

⏰ 系统时间管理

系统时间概念:

  • 系统时间(System Time):Linux内核维护的时间,从1970年1月1日00:00:00 UTC开始计算
  • 硬件时间(RTC Time):主板上的实时时钟(RTC)芯片维护的时间
  • UTC时间:协调世界时,全球统一的时间标准
  • 本地时间:根据时区转换后的当地时间

查看时间信息:

date                        # 显示当前本地时间
date -u                     # 显示UTC时间
timedatectl                 # 显示详细时间信息(CentOS 7+)
hwclock                     # 显示硬件时间

时间格式详解:

# 常用时间格式字符串
%Y  # 年份(4位,如2024)
%m  # 月份(01-12)
%d  # 日期(01-31)
%H  # 小时(00-23,24小时制)
%I  # 小时(01-12,12小时制)
%M  # 分钟(00-59)
%S  # 秒(00-59)
%s  # Unix时间戳(秒数)
%A  # 星期几(完整名称,如Monday)
%a  # 星期几(缩写,如Mon)
%B  # 月份名称(完整,如January)
%b  # 月份名称(缩写,如Jan)
%p  # AM/PM
%Z  # 时区缩写

时间格式化示例:

date +"%Y-%m-%d"# 2024-01-01
date +"%H:%M:%S"# 14:30:45
date +"%Y-%m-%d %H:%M:%S"# 2024-01-01 14:30:45
date +"%A, %B %d, %Y"# Monday, January 01, 2024
date +"%s"# Unix时间戳(1704117045)
date +"%Y-%m-%d_%H-%M-%S"# 文件名格式(2024-01-01_14-30-45)

时间计算:

# 显示昨天、明天
date -d "yesterday"# 昨天
date -d "tomorrow"# 明天
date -d "1 day ago"# 1天前
date -d "1 week ago"# 1周前
date -d "1 month ago"# 1个月前
date -d "+3 days"# 3天后
date -d "next monday"# 下周一
date -d "last friday"# 上周五

设置系统时间:

# 设置日期和时间(需要root权限)
date -s "2024-01-01 14:30:45"
date -s "20240101 14:30:45"# 简写格式
date -s "14:30:45"# 只设置时间

# 同步网络时间(需要安装ntpdate)
yum install -y ntpdate
ntpdate pool.ntp.org          # 同步网络时间
hwclock --systohc             # 将系统时间写入硬件时间

时区设置:

# 查看当前时区
ls -l /etc/localtime          # 查看时区链接
cat /etc/timezone             # 查看时区文件(某些系统)

# 列出所有可用时区
timedatectl list-timezones    # CentOS 7+
ls /usr/share/zoneinfo/       # 传统方式

# 设置时区(CentOS 7+)
timedatectl set-timezone Asia/Shanghai
timedatectl set-timezone America/New_York

# 传统方式设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

NTP时间同步:

# 安装NTP服务
yum install -y ntp

# 启动NTP服务
systemctl start ntpd
systemctl enable ntpd

# 手动同步时间
ntpdate -u pool.ntp.org

# 查看NTP同步状态
ntpq -p                       # 查看NTP服务器状态
timedatectl status            # 查看时间同步状态

📊 系统资源类

top - 实时显示系统进程

top                         # 显示系统进程信息
top -u username             # 显示指定用户的进程

htop - 增强版进程查看器(需安装)

yum install -y htop         # 安装htop
htop                        # 显示彩色进程信息

free - 显示内存使用情况

free                        # 显示内存信息
free -h                     # 人性化显示
free -m                     # 以MB为单位显示

df - 显示磁盘空间使用情况

df                          # 显示磁盘使用情况
df -h                       # 人性化显示
df -T                       # 显示文件系统类型

du - 显示目录空间使用情况

du                          # 显示当前目录大小
du -h                       # 人性化显示
du -sh /home/user/          # 显示指定目录总大小

🔄 进程管理类

ps - 显示进程状态

ps                          # 显示当前用户的进程
ps -ef                      # 显示所有进程的详细信息
ps aux                      # 显示所有进程的详细信息(BSD风格)
ps -ef | grep nginx         # 查找特定进程

kill - 终止进程

kill PID                    # 正常终止指定进程
kill -9 PID                 # 强制终止进程
killall process_name        # 按名称终止所有相关进程

jobs - 显示后台任务

jobs# 显示当前shell的后台任务
jobs -l                     # 显示详细信息

bg - 将任务放到后台运行

bg %1                       # 将任务1放到后台运行

fg - 将后台任务放到前台

fg %1                       # 将任务1放到前台运行

4.10 软件包管理命令

📦 YUM 包管理器

yum - CentOS 软件包管理

yum update                  # 更新所有软件包
yum install package         # 安装软件包
yum remove package          # 卸载软件包
yum search keyword          # 搜索软件包
yum list installed          # 列出已安装软件包
yum info package            # 显示软件包信息
yum clean all               # 清理缓存

🔧 RPM 包管理

rpm - RPM软件包管理

rpm -ivh package.rpm        # 安装RPM包
rpm -Uvh package.rpm        # 升级RPM包
rpm -e package              # 卸载RPM包
rpm -qa                     # 查询所有已安装包
rpm -qi package             # 查询软件包信息
rpm -ql package             # 查询软件包文件列表
rpm -qf /path/file          # 查询文件所属软件包

4.11 网络相关命令

🌐 网络配置类

ping - 测试网络连通性

ping www.baidu.com          # 持续ping测试
ping -c 4 www.baidu.com     # 指定ping次数
ping -i 0.5 www.baidu.com   # 设置间隔时间

ifconfig - 显示/配置网络接口(需安装net-tools)

yum install -y net-tools    # 安装ifconfig
ifconfig                    # 显示所有网络接口
ifconfig eth0               # 显示指定接口信息
ifconfig eth0 up            # 启用接口
ifconfig eth0 down          # 禁用接口

ip - 现代网络配置工具

ip addr show                # 显示IP地址信息
ip link show                # 显示网络接口信息
ip route show               # 显示路由表
ip addr add 192.168.1.100/24 dev eth0  # 添加IP地址

netstat - 显示网络连接信息

yum install -y net-tools    # 安装netstat
netstat -tuln               # 显示监听端口
netstat -an                 # 显示所有连接
netstat -rn                 # 显示路由表
netstat -i                  # 显示网络接口统计

ss - 现代网络连接查看工具

ss -tuln                    # 显示监听端口
ss -an                      # 显示所有连接
ss -s                       # 显示统计信息
ss -p                       # 显示进程信息

📡 网络工具类

wget - 下载文件

wget http://example.com/file.zip    # 下载文件
wget -c http://example.com/file.zip # 断点续传
wget -O newname.zip http://example.com/file.zip  # 指定保存名称
wget -b http://example.com/file.zip # 后台下载

curl - 网络数据传输工具

curl http://example.com     # 获取网页内容
curl -O http://example.com/file.zip  # 下载文件
curl -I http://example.com  # 只显示响应头
curl -u user:pass http://example.com # 带认证访问

ssh - 远程登录

ssh user@192.168.1.100      # 远程登录
ssh -p 2222 user@host       # 指定端口登录
ssh -i key.pem user@host    # 使用密钥登录

scp - 安全复制文件

scp file.txt user@host:/path/        # 上传文件
scp user@host:/path/file.txt ./      # 下载文件
scp -r dir/ user@host:/path/         # 递归复制目录
scp -P 2222 file.txt user@host:/path/ # 指定端口

4.12 快速参考速查表

📋 常用命令快速索引

命令类型
常用命令
基本用法
文件操作
ls, cd, pwd, mkdir, rm, cp, mv, touch
目录导航、文件管理
文本处理
cat, more, less, head, tail, grep, echo
文件查看、内容搜索
文件编辑
vi/vim
文本编辑
权限管理
chmod, chown, chgrp
文件权限和所有权
用户管理
useradd, passwd, userdel, usermod
用户账户管理
压缩解压
tar, gzip, zip, unzip
文件压缩和解压
定时任务
crontab, at
计划任务管理
文本处理
grep, sed, awk
高级文本处理
系统信息
uname, top, free, df, du, ps
系统状态和资源配置
进程管理
kill, jobs, bg, fg
进程和任务控制
网络工具
ping, ifconfig, ip, netstat, ss
网络配置和诊断
软件管理
yum, rpm
软件包安装和管理
时间管理
date, timedatectl, hwclock
系统时间设置和管理

🔍 文件类型速查表

类型标识
文件类型
说明
示例
-
普通文件
文本、二进制、数据文件
-rw-r--r-- file.txt
d
目录
文件夹
drwxr-xr-x directory/
l
符号链接
快捷方式
lrwxrwxrwx link -> target
c
字符设备
串行设备(终端)
crw--w---- /dev/tty0
b
块设备
随机访问设备(硬盘)
brw-rw---- /dev/sda
p
命名管道
进程间通信
prw------- mypipe
s
套接字
网络通信
srwxrwxrwx socket

🔐 权限数字对照表

权限
数字
二进制
含义
rwx
7
111
读+写+执行
rw-
6
110
读+写
r-x
5
101
读+执行
r--
4
100
只读
-wx
3
011
写+执行
-w-
2
010
只写
--x
1
001
只执行
---
0
000
无权限

⏰ 时间格式速查表

格式符
含义
示例
%Y
4位年份
2024
%y
2位年份
24
%m
月份(01-12)
01
%d
日期(01-31)
01
%H
小时(00-23)
14
%I
小时(01-12)
02
%M
分钟(00-59)
30
%S
秒(00-59)
45
%s
Unix时间戳
1704117045
%A
星期几(完整)
Monday
%a
星期几(缩写)
Mon
%B
月份名称(完整)
January
%b
月份名称(缩写)
Jan
%p
AM/PM
PM
%Z
时区
CST

🗄️ 第五章:MySQL 5.7 安装部署

安装前准备

系统环境检查

  1. 检查系统版本
cat /etc/redhat-release
  1. 检查是否已安装MySQL
rpm -qa | grep mysql
  1. 卸载系统自带的MariaDB(如果存在):
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

下载MySQL安装包

  1. 创建软件下载目录
mkdir -p /opt/software
cd /opt/software
  1. 下载MySQL 5.7.28 RPM包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

5.1 MySQL 安装步骤

解压安装包

tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

解压后包含以下RPM包:

  • mysql-community-common-5.7.28-1.el7.x86_64.rpm
  • mysql-community-libs-5.7.28-1.el7.x86_64.rpm
  • mysql-community-client-5.7.28-1.el7.x86_64.rpm
  • mysql-community-server-5.7.28-1.el7.x86_64.rpm

按顺序安装RPM包

  1. 安装common包
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
  1. 安装libs包
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
  1. 安装client包
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
  1. 安装server包
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

解决依赖问题

如果遇到依赖问题,使用yum安装:

yum install -y libaio
yum install -y net-tools

5.2 MySQL 配置与启动

启动MySQL服务

  1. 启动服务
systemctl start mysqld
  1. 设置开机启动
systemctl enable mysqld
  1. 检查服务状态
systemctl status mysqld

获取临时密码

MySQL 5.7安装后会生成临时密码:

grep 'temporary password' /var/log/mysqld.log

输出示例:

2024-01-01T00:00:00.000000Z 1 [Note] A temporary password is generated for root@localhost: Abcdefg1!

修改root密码

  1. 使用临时密码登录
mysql -u root -p
  1. 修改密码(密码需要包含大小写字母、数字和特殊字符):
ALTERUSER'root'@'localhost'IDENTIFIEDBY'NewPass123!';
  1. 退出MySQL
exit;

配置MySQL远程访问

  1. 登录MySQL
mysql -u root -p
  1. 授权远程访问
GRANTALLPRIVILEGESON *.* TO'root'@'%'IDENTIFIEDBY'NewPass123!'WITHGRANTOPTION;
FLUSHPRIVILEGES;
  1. 修改MySQL配置文件
vi /etc/my.cnf

在[mysqld]部分添加:

bind-address = 0.0.0.0
  1. 重启MySQL服务
systemctl restart mysqld
  1. 开放防火墙端口
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

5.3 MySQL 基础操作

数据库操作

  1. 创建数据库
CREATEDATABASE bigdata CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci;
  1. 查看数据库
SHOWDATABASES;
  1. 删除数据库
DROPDATABASE bigdata;
  1. 选择数据库
USE bigdata;

表操作

  1. 创建表
CREATETABLEusers (
idINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50NOTNULL,
    email VARCHAR(100UNIQUE,
    created_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP
);
  1. 查看表结构
DESCRIBEusers;
  1. 查看所有表
SHOWTABLES;
  1. 删除表
DROPTABLEusers;

数据操作

  1. 插入数据
INSERTINTOusers (username, email) VALUES ('admin''admin@example.com');
  1. 查询数据
SELECT * FROMusers;
SELECT username, email FROMusersWHEREid = 1;
  1. 更新数据
UPDATEusersSET email = 'newemail@example.com'WHERE username = 'admin';
  1. 删除数据
DELETEFROMusersWHEREid = 1;

用户权限管理

  1. 创建新用户
CREATEUSER'bigdata'@'%'IDENTIFIEDBY'Bigdata123!';
  1. 授权
GRANTALLPRIVILEGESON bigdata.* TO'bigdata'@'%';
FLUSHPRIVILEGES;
  1. 查看用户权限
SHOWGRANTSFOR'bigdata'@'%';
  1. 撤销权限
REVOKEALLPRIVILEGESON bigdata.* FROM'bigdata'@'%';
  1. 删除用户
DROPUSER'bigdata'@'%';

数据备份与恢复

  1. 备份数据库
mysqldump -u root -p bigdata > bigdata_backup.sql
  1. 恢复数据库
mysql -u root -p bigdata < bigdata_backup.sql
  1. 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql

性能优化配置

  1. 编辑配置文件
vi /etc/my.cnf
  1. 添加优化参数
[mysqld]
# 基本设置
basedir=/usr/local/mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

# 连接设置
max_connections=200
max_connect_errors=1000
wait_timeout=600
interactive_timeout=600

# 内存设置
key_buffer_size=256M
max_allowed_packet=64M
table_open_cache=256
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M
myisam_sort_buffer_size=64M

# InnoDB设置
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50

# 日志设置
log_error=/var/log/mysqld.log
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2
  1. 重启MySQL服务
systemctl restart mysqld

常用管理命令

  1. 查看MySQL版本
mysql -V
  1. 查看数据库大小
SELECT table_schema AS'Database'
ROUND(SUM(data_length + index_length) / 1024 / 10242AS'Size (MB)'
FROM information_schema.tables 
GROUPBY table_schema;
  1. 查看连接状态
SHOWPROCESSLIST;
SHOWSTATUSLIKE'Threads%';
  1. 查看表状态
SHOWTABLESTATUSFROM bigdata;
  1. 优化表
OPTIMIZETABLEusers;
  1. 修复表
REPAIRTABLEusers;

安全配置建议

  1. 删除匿名用户
DELETEFROM mysql.user WHEREUser='';
FLUSHPRIVILEGES;
  1. 禁止root远程登录(可选):
DELETEFROM mysql.user WHEREUser='root'AND Host NOTIN ('localhost''127.0.0.1''::1');
FLUSHPRIVILEGES;
  1. 删除测试数据库
DROPDATABASEIFEXISTStest;
DELETEFROM mysql.db WHERE Db='test'OR Db='test\\_%';
FLUSHPRIVILEGES;
  1. 设置密码过期策略
ALTERUSER'bigdata'@'%'PASSWORDEXPIREINTERVAL90DAY;
  1. 限制用户资源
ALTERUSER'bigdata'@'%'
WITH MAX_QUERIES_PER_HOUR 1000
     MAX_UPDATES_PER_HOUR 100
     MAX_CONNECTIONS_PER_HOUR 10;

📖 附录

Linux 常用快捷键

快捷键
功能说明
Tab
命令/文件名自动补全
Ctrl+C
终止当前进程
Ctrl+D
退出当前终端
Ctrl+Z
暂停当前进程
Ctrl+L
清屏
Ctrl+A
光标移到行首
Ctrl+E
光标移到行尾
Ctrl+U
删除光标到行首的内容
Ctrl+K
删除光标到行尾的内容
Ctrl+R
搜索历史命令
↑/↓
浏览历史命令

常用符号说明

符号
说明
示例
>
输出重定向
ls > file.txt
>>
追加输出重定向
echo "test" >> file.txt
<
输入重定向
wc < file.txt
`
`
管道符
;
命令分隔符
cd /home; ls -l
&&
逻辑与
mkdir test && cd test
||
逻2辑或
cd test || mkdir test
&
后台运行
python script.py &
$
变量引用
echo $HOME
*
通配符
ls *.txt
?
单字符通配符
ls file?.txt
~
主目录
cd ~
.
当前目录
./script.sh
..
上级目录
cd ..

常见问题解决方案

1. 忘记root密码

  1. 重启系统,在GRUB菜单按e进入编辑模式
  2. 找到linux16行,在末尾添加rd.break
  3. Ctrl+X启动
  4. 执行以下命令:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
exit
reboot

2. 磁盘空间不足

  1. 查看磁盘使用情况
df -h
du -sh /*
  1. 清理日志文件
find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
  1. 清理YUM缓存
yum clean all
  1. 查找大文件
find / -type f -size +100M -exec ls -lh {} \;

3. 网络连接问题

  1. 检查网络配置
ip addr show
ping 8.8.8.8
  1. 重启网络服务
systemctl restart network
  1. 检查DNS配置
cat /etc/resolv.conf
  1. 检查防火墙
systemctl status firewalld
firewall-cmd --list-all

4. 进程无法终止

  1. 查找进程
ps -ef | grep 进程名
  1. 尝试正常终止
kill PID
  1. 强制终止
kill -9 PID
  1. 查找并终止所有相关进程
pkill -f 进程名

5. 文件权限问题

  1. 查看文件权限
ls -l 文件名
  1. 修改文件权限
chmod 755 文件名
  1. 修改文件所有者
chown 用户:组 文件名
  1. 递归修改目录权限
chmod -R 755 目录名

学习资源推荐

官方文档

  • CentOS 官方文档
  • MySQL 官方文档
  • Linux 文档项目

恭喜您完成了Linux入门到实战课程的学习! 🎉

通过本课程的学习,您已经掌握了Linux操作系统的核心技能,包括:

  • ✅ Linux基础概念和系统架构
  • ✅ 虚拟机环境搭建和网络配置
  • ✅ 文件和目录管理
  • ✅ 文本处理和文件编辑
  • ✅ 权限管理和用户管理
  • ✅ 压缩解压和定时任务
  • ✅ 系统管理和网络配置
  • ✅ MySQL数据库安装部署

这些技能将为您后续的大数据学习和工作奠定坚实的基础。继续加油!💪

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-09 04:06:18 HTTP/2.0 GET : https://f.mffb.com.cn/a/460107.html
  2. 运行时间 : 0.230527s [ 吞吐率:4.34req/s ] 内存消耗:4,941.44kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=cd1d9e985bcb98f4e38c7994aac79f11
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000960s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001504s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000690s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000668s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001574s ]
  6. SELECT * FROM `set` [ RunTime:0.000707s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001540s ]
  8. SELECT * FROM `article` WHERE `id` = 460107 LIMIT 1 [ RunTime:0.001704s ]
  9. UPDATE `article` SET `lasttime` = 1770581178 WHERE `id` = 460107 [ RunTime:0.020791s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.002879s ]
  11. SELECT * FROM `article` WHERE `id` < 460107 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001466s ]
  12. SELECT * FROM `article` WHERE `id` > 460107 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001556s ]
  13. SELECT * FROM `article` WHERE `id` < 460107 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002452s ]
  14. SELECT * FROM `article` WHERE `id` < 460107 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002446s ]
  15. SELECT * FROM `article` WHERE `id` < 460107 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005047s ]
0.234812s