当前位置:首页>Linux>新手必会:20个最常用的 Linux 命令详解

新手必会:20个最常用的 Linux 命令详解

  • 2026-07-01 15:46:46
新手必会:20个最常用的 Linux 命令详解

新手必会:20个最常用的 Linux 命令详解

背景与适用场景

Linux 命令行是运维工作的根基。无论是排查故障、分析性能,还是批量操作服务器,命令行都是最直接、最高效的手段。相比图形界面,命令行的优势在于:可以精确控制、可编写脚本重复执行、可通过 SSH 远程操作、可结合管道实现复杂的数据处理。

在生产环境中,运维工程师每天打交道最多的就是命令行工具。一个熟练的运维工程师,看到一个错误现象,能在几秒内定位到应该用哪个命令、查看哪个输出、判断哪个指标。这一点靠的是对命令的肌肉记忆和对系统行为的理解。

本文面向初中级运维工程师和系统管理员,选取了日常工作中最常用的 20 个 Linux 命令,分成五类讲解:文件与目录操作、文本查看与处理、权限与所有者、磁盘与文件系统、进程与资源、网络诊断。每个命令都给出详细参数说明、实战用法和避坑指南。

为什么要讲这 20 个命令?因为根据笔者多年的运维经验,这 20 个命令覆盖了 80% 以上的日常操作场景。把这 20 个命令用熟练,比去背几百个不常用的命令强得多。


第一部分:文件与目录操作

文件与目录操作是最基础的一类命令。ls、cd、cp、mv、rm 这五个命令,几乎每天都要用到。

1. ls — 目录内容查看

ls 是 list 的缩写,用于列出目录内容。这是查看文件结构最常用的命令。

基本用法

ls /var/log

这条命令列出 /var/log 目录下的所有文件和子目录。

常用参数

  • -l:以长格式显示,包含文件类型、权限、链接数、所有者、所属组、大小、修改时间
  • -a:显示所有文件,包括以点开头的隐藏文件
  • -h:配合 -l 使用,以人类可读的方式显示文件大小(K、M、G)
  • -t:按修改时间排序,最新修改的文件排在前面
  • -r:反向排序
  • -R:递归显示子目录内容

实战示例

查看当前目录下所有文件的详细信息,包括隐藏文件:

ls -lha

输出示例:

total 28drwxr-xr-x  3 root root 4096 May 29 10:30 .drwxrwxr-x  9 root root 4096 May 29 09:00 ..-rw-r--r--  1 root root  862 May 29 10:30 .bashrc-rw-r--r--  1 root root  182 May 28 14:20 .profiledrwxr-xr-x  2 root root 4096 May 29 08:45 cache-rw-r--r--  1 root root  12K May 29 10:30 error.log-rw-r--r--  1 root root  45M May 29 09:15 application.log

解释一下每列的含义:

  • 第一列:文件类型和权限。d 开头表示目录,- 开头表示普通文件,l 开头表示符号链接
  • 第二列:硬链接数
  • 第三列:文件所有者
  • 第四列:文件所属组
  • 第五列:文件大小
  • 第六到八列:最后修改时间
  • 第九列:文件名

按文件大小排序,找出最大的几个文件:

ls -lhS /var/log | head -20

按修改时间排序,找出最近修改的文件:

ls -lt /var/log | head -20

避坑指南

  1. ls 默认不显示隐藏文件,如果要看隐藏文件必须加 -a 参数
  2. ls -l 显示的大小是字节数,对于大文件可能很难读。加 -h 参数显示为 K、M、G 单位
  3. ls 的时间显示是最后修改时间,不是创建时间。Linux 文件系统不记录创建时间
  4. 在生产环境查看大目录时,ls 可能很慢。可以用 ls -U 按物理顺序显示,跳过排序步骤

2. cd — 目录切换

cd 是 change directory 的缩写,用于切换当前工作目录。

基本用法

cd /var/log

切换到 /var/log 目录。

常用技巧

切换到当前用户的家目录:

cd ~

或者直接输入:

cd

切换到上一个工作目录:

cd -

返回上一层目录:

cd ..

实战示例

在 shell 脚本中切换到特定目录并执行操作:

#!/bin/bashcd /var/log/myappls -la *.log

注意:cd 命令如果失败,后续命令会在错误的目录下执行。在脚本中应该加上判断:

#!/bin/bashif ! cd /var/log/myapp 2>/dev/null; thenecho"目录不存在或无法访问"exit 1fils -la *.log

绝对路径与相对路径

绝对路径以 / 开头,从根目录开始定位:

cd /var/log/nginx

相对路径从当前目录开始定位:

# 当前在 /varcdlog/nginx

避坑指南

  1. 路径中不要随意省略 ~,因为 ~ 代表当前用户的家目录,不同用户执行结果不同
  2. 脚本中尽量使用绝对路径,避免因当前工作目录不同而出现意外
  3. 路径中的空格需要转义:cd "My Documents" 或 cd My\ Documents

3. cp — 文件复制

cp 是 copy 的缩写,用于复制文件或目录。

基本用法

复制单个文件:

cp /var/log/syslog /tmp/syslog.bak

复制并改名:

cp /var/log/syslog /tmp/backup_syslog

常用参数

  • -r 或 -R:递归复制整个目录
  • -p:保留文件的权限、时间戳等属性
  • -i:交互式复制,如果目标文件存在会提示确认
  • -v:显示复制过程的详细信息
  • -f:强制覆盖已存在的目标文件
  • -u:只复制源文件比目标文件新或目标文件不存在的情况
  • --preserve:指定要保留的属性,如 --preserve=mode,ownership,timestamps

实战示例

备份整个日志目录:

cp -r /var/log/myapp /tmp/myapp_backup_$(date +%Y%m%d)

说明:$(date +%Y%m%d) 是命令替换,生成当前日期字符串,如 20260529。

保留原属性复制配置文件:

cp -p /etc/nginx/nginx.conf /tmp/nginx.conf.bak

备份时显示详细信息:

cp -rv /data/app /backup/app_$(date +%Y%m%d_%H%M%S)

避坑指南

  1. 复制目录必须加 -r 参数,否则会报错
  2. 默认情况下 cp 会覆盖已存在的同名文件,不会提示。加 -i 可以开启确认
  3. 复制大文件时,如果目标磁盘空间不足,cp 会失败但不删除已复制的部分,可能造成磁盘空间浪费
  4. 复制链接文件时,默认复制的是链接本身而不是指向的文件。如果想复制链接指向的文件,使用 cp -L
  5. 生产环境复制重要文件前,最好先检查目标磁盘空间:df -h /backup

检查磁盘空间后再复制

# 检查目标磁盘空间df -h /backup# 检查源文件大小ls -lh /data/app# 确认空间足够后再复制cp -r /data/app /backup/app_backup

4. mv — 文件移动与重命名

mv 是 move 的缩写,用于移动或重命名文件。

基本用法

移动文件到另一个目录:

mv /var/log/myapp.log /tmp/myapp.log

重命名文件:

mv /tmp/myapp.log /tmp/myapp.old.log

常用参数

  • -i:交互式移动,目标文件存在时提示确认
  • -v:显示移动过程的详细信息
  • -f:强制移动,不做任何确认
  • -n:不覆盖已存在的目标文件
  • -u:只移动源文件比目标文件新或目标文件不存在的情况

实战示例

按日期归档日志文件:

mv /var/log/myapp.log /var/log/archive/myapp_$(date +%Y%m%d).log

批量重命名:将目录下所有 .txt 文件改为 .log:

# 方法一:使用 rename 命令(如果系统有安装)rename 's/\.txt$/\.log/' *.txt# 方法二:使用循环for f in *.txt; do    mv "$f""${f%.txt}.log"done

将文件移动到以日期命名的目录:

# 创建以日期命名的目录mkdir -p /backup/$(date +%Y%m%d)# 移动文件mv /data/important.db /backup/$(date +%Y%m%d)/important.db

避坑指南

  1. mv 默认覆盖已存在的同名文件,不会提示。使用 -i 可以开启确认
  2. 移动跨分区的大文件可能很慢,因为实际是复制后删除
  3. 移动系统文件(如 /etc/passwd)时要格外小心,确保知道后果
  4. 批量重命名时,建议先用 ls 预览要操作的文件,确认无误后再执行

5. rm — 文件删除

rm 是 remove 的缩写,用于删除文件或目录。这是最危险的命令之一,误删后很难恢复。

基本用法

删除单个文件:

rm /tmp/tempfile.txt

常用参数

  • -r 或 -R:递归删除整个目录
  • -f:强制删除,不做任何确认(即使文件是只读的)
  • -i:交互式删除,每个文件都提示确认
  • -v:显示删除过程的详细信息

实战示例

删除目录下所有 .log 文件(带确认提示):

rm -i /var/log/myapp/*.log

删除整个目录及内容(带确认提示):

rm -ri /tmp/myapp_backup

强制删除所有临时文件:

rm -rf /tmp/myapp_temp_*

危险操作演示

以下命令极具破坏性,绝对不能在生产环境执行:

# 删除根目录 - 灾难性的,不要执行rm -rf /# 删除 /etc 目录 - 不要执行rm -rf /etc# 删除 /var/log 目录 - 不要执行rm -rf /var/log# 删除了整个用户家目录 - 不要执行rm -rf ~/*

安全建议

  1. 删除前先确认当前位置和文件名:pwd 和 ls
  2. 删除重要文件前先备份
  3. 使用 -i 参数开启确认提示,尤其是在 shell 脚本中
  4. 生产环境执行删除操作前,先用 ls 预览要删除的文件
  5. 设置别名保护:alias rm='rm -i',但注意这在 root 用户下可能被 -f 参数覆盖

查看危险别名

# 查看 rm 是否被别名保护alias rm# 如果输出是 alias rm='rm -i',说明有保护

恢复误删文件

如果不小心误删了文件,可以尝试以下方法恢复,但不一定成功:

  1. 查看是否有备份
  2. 如果是 ext4 文件系统,可以尝试使用 extundelete 工具恢复(需要提前安装)
  3. 如果是 xfs 文件系统,可以使用 xfsdump 备份恢复
  4. 如果在容器中,删除了容器内的文件,恢复可能性很小

最好的防护是做好备份和权限控制,而不是依赖恢复。


第二部分:文本查看与处理

文本查看与处理是日志分析、配置检查、数据统计的基础。cat、grep、head/tail、wc 这几个命令组合起来,可以解决大部分文本处理需求。

6. cat — 文件内容查看

cat 是 concatenate 的缩写,用于查看文件内容或连接多个文件。

基本用法

查看整个文件内容:

cat /etc/passwd

合并多个文件:

cat file1.txt file2.txt > combined.txt

在文件末尾追加内容:

cat >> file.txt <<EOF这是新追加的行EOF

常用参数

  • -n:显示行号
  • -b:显示行号,但空行不编号
  • -s:将连续多个空行压缩为一个空行
  • -A:显示所有字符,包括控制字符(如 Tab 显示为 ^I,换行显示为 $)

实战示例

查看文件并显示行号(适合排查配置错误):

cat -n /etc/nginx/nginx.conf | head -50

查看文件并压缩空行:

cat -s /var/log/myapp.log

查看文件并显示所有控制字符(检查行尾是否正确):

cat -A /etc/passwd

正常行尾: $Windows 换行符:^M$Unix 换行符:$

避坑指南

  1. cat 会一次性把整个文件加载到内存,对于大文件(如几个 G 的日志)会导致内存耗尽。查看大文件应该用 less 或 tail
  2. cat 适合查看小文件或配置文件的完整性,不适合查看长文件
  3. 二进制文件不要用 cat 查看,会在终端输出乱码,可能导致终端行为异常。如果不小心查看了二进制文件,输入 reset 命令恢复终端

查看大文件的正确方式

# 分页查看大文件less /var/log/myapp.log# 只看前 100 行head -100 /var/log/myapp.log# 只看最后 100 行tail -100 /var/log/myapp.log# 实时监控文件变化(追加的内容)tail -f /var/log/myapp.log

7. grep — 文本搜索

grep 是 global regular expression print 的缩写,是最强大的文本搜索工具之一。

基本用法

在文件中搜索包含特定字符串的行:

grep "error" /var/log/myapp.log

常用参数

  • -i:忽略大小写
  • -v:反向选择,显示不包含匹配模式的行
  • -n:显示匹配行的行号
  • -r 或 -R:递归搜索目录
  • -c:只显示匹配的行数
  • -l:只显示包含匹配模式的文件名
  • -L:显示不包含匹配模式的文件名
  • -A n:显示匹配行及其后面的 n 行
  • -B n:显示匹配行及其前面的 n 行
  • -e:指定多个匹配模式
  • -w:整词匹配
  • -E:使用扩展正则表达式

实战示例

搜索错误日志:

grep -i "error" /var/log/myapp.log | head -50

搜索多个关键词(满足任一即可):

grep -E "error|fatal|exception" /var/log/myapp.log

搜索并显示匹配行的前后 5 行(查看上下文):

grep -B 5 -A 5 "timeout" /var/log/myapp.log

统计关键词出现次数:

grep -c "error" /var/log/myapp.log

找出所有包含关键词的文件:

grep -l "database connection" /var/log/*.log

递归搜索目录中所有文件:

grep -r "Failed password" /var/log/secure

使用正则表达式搜索 IP 地址:

grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" /var/log/myapp.log

grep 与管道结合

grep 经常和其他命令结合使用:

# 查看当前所有进程ps aux# 查找特定进程ps aux | grep nginx# 查看某个用户的进程ps -u www-data# 过滤健康检查日志(假设健康检查路径是 /health)tail -f /var/log/myapp.log | grep -v "/health"

性能优化

搜索大文件时,grep 可能很慢。优化方法:

  1. 使用 --mmap 选项(如果内核支持):grep --mmap "pattern" largefile.log
  2. 先用 grep -F 搜索固定字符串,比正则表达式快
  3. 如果文件是压缩格式,使用 zgrep 搜索压缩文件
  4. 考虑使用 ripgrep(rg)替代 grep,它更快且默认支持多种高级特性
# 安装 ripgrep(如果可用)apt install ripgrep  # Debian/Ubuntuyum install ripgrep  # CentOS/RHEL# 使用 ripgreprg "error" /var/log/myapp.log

避坑指南

  1. grep 默认使用基本正则表达式,一些特殊字符需要转义。如果使用扩展正则表达式,加 -E 参数
  2. 搜索的字符串如果包含特殊字符(如 $、*、?),需要转义或加引号
  3. grep 默认区分大小写,使用 -i 忽略大小写
  4. 如果搜索目录,grep 默认只搜索普通文件,不会跟随符号链接。使用 -R 可以跟随符号链接

8. head 与 tail — 文件头部和尾部查看

head 用于查看文件开头部分,tail 用于查看文件结尾部分。这两个命令在日志分析中非常有用。

head 基本用法

head /var/log/myapp.log

默认显示前 10 行。

head 常用参数

  • -n:指定显示的行数
  • -c:指定显示的字节数
  • -q:多个文件时不显示文件名

tail 基本用法

tail /var/log/myapp.log

默认显示最后 10 行。

tail 常用参数

  • -n:指定显示的行数
  • -c:指定显示的字节数
  • -f:实时监控文件追加内容(Ctrl+C 退出)
  • -F:实时监控文件,如果文件被删除或重命名,会继续监控新文件
  • --retry:持续尝试打开文件(配合 -F 使用)

实战示例

查看配置文件的前 50 行:

head -n 50 /etc/nginx/nginx.conf

查看日志的最后 100 行:

tail -n 100 /var/log/myapp.log

实时监控日志文件:

tail -f /var/log/myapp.log

实时监控并高亮显示错误:

tail -f /var/log/myapp.log | grep --color=auto -E "error|fatal|exception|$"

监控多个日志文件:

tail -f /var/log/myapp/*.log

查看文件末尾并持续监控(文件轮转场景):

tail -F /var/log/myapp.log

当日志文件被轮转(从 myapp.log 变成 myapp.log.1),tail -F 会自动开始监控新的 myapp.log 文件。

分析日志增长量

想知道日志文件每分钟增长多少行:

# 先记录当前行数before=$(wc -l < /var/log/myapp.log)sleep 60after=$(wc -l < /var/log/myapp.log)echo"每分钟增长: $((after - before)) 行"

查找特定时间段的日志

# 查看 2026-05-29 10点到11点之间的日志# 假设日志格式是 [2026-05-29 10:30:00] 这种格式grep "2026-05-29 1[0-1]:" /var/log/myapp.log

tail 与日志轮转

日志文件被轮转后,tail -f 会继续监控原文件描述符,可能看不到新文件内容。使用 -F 参数可以自动适应日志轮转:

# 不推荐:日志轮转后失效tail -f /var/log/myapp.log# 推荐:自动适应日志轮转tail -F /var/log/myapp.log

避坑指南

  1. tail -f 会一直占用终端,直到按 Ctrl+C 退出
  2. 查看大文件时,head 和 tail 比 cat 更高效
  3. tail -f 监控的文件如果被删除,监控会失效。使用 -F 可以处理这种情况
  4. 如果日志格式不包含时间戳,难以直接用 grep 按时间过滤。这种情况建议使用 awk 或专用日志分析工具

9. wc — 行数统计

wc 是 word count 的缩写,用于统计文件的行数、单词数、字节数。

基本用法

wc /var/log/myapp.log

输出格式:行数 单词数 字节数 文件名

常用参数

  • -l:只统计行数
  • -w:只统计单词数
  • -c:只统计字节数
  • -m:只统计字符数
  • -L:显示文件中最长一行的长度

实战示例

统计日志文件总行数:

wc -l /var/log/myapp.log

统计目录下所有日志文件的总行数:

wc -l /var/log/myapp/*.log

统计当前目录下的文件数量(相当于 ls | wc -l):

ls -1 | wc -l

查找行数最多的文件:

wc -l /var/log/*.log | sort -n | tail -5

统计日志中错误出现的次数:

grep -c "error" /var/log/myapp.log

或者:

grep "error" /var/log/myapp.log | wc -l

管道结合使用

统计当前登录用户数:

who | wc -l

统计 TCP 连接数:

netstat -an | grep ESTABLISHED | wc -l

或者使用 ss(更快):

ss -tan state established | wc -l

统计进程数:

ps aux | wc -l

注意:ps aux | wc -l 的输出包含标题行,所以实际进程数要减 1。

避坑指南

  1. wc -l 统计的是换行符数量,如果文件最后一行没有换行符,实际行数会少 1
  2. 统计单词数时,wc 按空格和换行符分割,中文文本统计不准确
  3. 统计大文件时要等待一下,磁盘 I/O 可能较慢

第三部分:权限与所有者

Linux 的权限模型是运维工程师必须掌握的核心概念。chmod 和 chown 是最常用的权限管理命令。

10. chmod — 权限修改

chmod 是 change mode 的缩写,用于修改文件或目录的权限。

Linux 权限模型

Linux 每个文件有三类权限:

  • 所有者权限(user):文件所属用户的权限
  • 所属组权限(group):文件所属组的成员的权限
  • 其他用户权限(others):其他所有用户的权限

每类权限有三个标志:

  • 读(r):查看文件内容 / 列出目录内容
  • 写(w):修改文件内容 / 在目录中创建/删除文件
  • 执行(x):执行文件 / 进入目录

权限的数字化表示:

  • r = 4
  • w = 2
  • x = 1

用三个数字表示,如 755 = 所有者 rwx(7) + 所属组 r-x(5) + 其他用户 r-x(5)

基本用法

使用数字形式修改权限:

chmod 755 /path/to/file

使用符号形式修改权限:

chmod u+x /path/to/file    # 给所有者添加执行权限chmod g-w /path/to/file    # 从所属组移除写权限chmod o=r /path/to/file    # 设置其他用户只有读权限chmod a+x /path/to/file    # 给所有人添加执行权限

常用参数

  • -R:递归修改目录及其内容的权限
  • -v:显示每个文件的权限变更详情
  • -c:只在权限发生变化时报告
  • -f:不显示错误信息

常见权限值

权限值
含义
用途
777
rwxrwxrwx
所有人可读可写可执行(危险)
755
rwxr-xr-x
所有者可读写执行,组和其他人可读执行
644
rw-r--r--
所有者可读写,组和其他人只读
600
rw-------
只有所有者可读写
500
r-x------
所有者可读执行
400
r--------
只有所有者可读

实战示例

让脚本可执行:

chmod +x /usr/local/bin/myscript.sh

设置目录权限为 755(目录通常需要执行权限才能进入):

chmod 755 /var/www/html

设置文件权限为 644(普通配置文件):

chmod 644 /etc/nginx/nginx.conf

批量设置目录下所有文件为 644,目录为 755:

# 进入目录cd /var/www/html# 设置所有文件为 644find . -type f -exec chmod 644 {} \;# 设置所有目录为 755find . -type d -exec chmod 755 {} \;

更高效的方式:

# 755 for directories, 644 for filesfind /var/www/html -type d -exec chmod 755 {} \;find /var/www/html -type f -exec chmod 644 {} \;

安全权限设置

Web 应用常用权限方案:

# 网站根目录chown -R www-data:www-data /var/www/html# 只给 www-data 写权限chmod -R 755 /var/www/htmlchmod -R 775 /var/www/html/uploads  # 上传目录需要可写

数据库文件权限(MySQL 为例):

chown -R mysql:mysql /var/lib/mysqlchmod -R 700 /var/lib/mysql  # 只有 mysql 用户可访问

避坑指南

  1. 不要设置 777 权限,这是严重的安全漏洞
  2. 修改系统文件权限前,先备份原权限:getfacl file > file.acl.bak
  3. 目录需要执行权限才能访问内容,设置目录权限时要注意
  4. 使用 -R 参数时要格外小心,确保目录结构和文件类型符合预期
  5. 网站目录权限不要设置过于宽松,防止 webshell 上传后能执行

恢复误修改的权限

如果用 getfacl 备份过权限:

setfacl --restore=file.acl.bak

11. chown — 所有者修改

chown 是 change owner 的缩写,用于修改文件或目录的所有者和所属组。

基本用法

修改文件所有者:

chown user /path/to/file

修改文件所有者和所属组:

chown user:group /path/to/file

只修改所属组:

chown :group /path/to/file# 或chgrp group /path/to/file

常用参数

  • -R:递归修改目录及其内容的所有者和所属组
  • -v:显示每个文件的变更详情
  • -c:只在发生变化时报告
  • --reference=RFILE:参考另一个文件的owner和group

实战示例

修改目录所有者为 www-data:

chown -R www-data:www-data /var/www/html

修改文件所有者并保留所属组:

chown nginx /var/log/nginx/access.log

修改所属组(保留所有者):

chown :www-data /var/log/myapp.log

复制另一文件的权限设置:

chown --reference=/etc/passwd /etc/shadow

Web 应用典型权限设置

Nginx + PHP-FPM 场景:

# 假设 Nginx 以 www-data 用户运行,PHP-FPM 以 www-data 用户运行# 网站目录chown -R www-data:www-data /var/www/html# 上传目录(需要可写)chown -R www-data:www-data /var/www/html/uploads# 缓存目录chown -R www-data:www-data /var/www/html/cache

Nginx + PHP-FPM 不同用户场景(推荐生产使用):

# 假设 Nginx 以 nginx 用户运行,PHP-FPM 以 php-fpm 用户运行# 网站目录所有者设为 nginxchown -R nginx:nginx /var/www/html# 上传目录所有者设为 php-fpm,确保 PHP 可以写入chown -R php-fpm:php-fpm /var/www/html/uploads# 或者给两组用户都赋权(使用 ACL)setfacl -R -m u:nginx:rx /var/www/html/uploadssetfacl -R -m u:php-fpm:rw /var/www/html/uploads

数据库权限设置

MySQL 数据目录:

chown -R mysql:mysql /var/lib/mysqlchmod -R 700 /var/lib/mysql

PostgreSQL 数据目录:

chown -R postgres:postgres /var/lib/postgresqlchmod -R 700 /var/lib/postgresql

避坑指南

  1. 修改系统文件所有者前,确保知道后果,某些系统文件必须保持特定所有者才能正常工作
  2. 递归修改时,确保目录结构符合预期,可以用 find 先预览
  3. 不要把文件所有者改成不存在的用户
  4. Web 应用文件所有者要与运行用户匹配,否则会出现无法读取或写入的问题

诊断权限问题

权限问题的典型表现:

  1. Web 应用无法读取文件:检查文件所有者是否与应用运行用户一致
  2. Web 应用无法写入文件:检查文件所有者是否有写权限
  3. 执行脚本报错 "Permission denied":检查脚本是否有执行权限

诊断命令:

# 查看文件详细信息ls -la /path/to/file# 查看目录详细内容ls -ld /path/to/directory# 查看文件 ACLgetfacl /path/to/file# 查看进程以哪个用户运行ps aux | grep nginxps aux | grep php-fpm

第四部分:磁盘与文件系统

磁盘空间管理是运维的基本功。df、du、mount 这三个命令用于查看磁盘使用情况和挂载存储设备。

12. df — 磁盘空间查看

df 是 disk free 的缩写,用于查看文件系统的磁盘空间使用情况。

基本用法

df

常用参数

  • -h:人类可读格式(K、M、G)
  • -T:显示文件系统类型
  • -i:显示 inode 信息(而不是磁盘块)
  • -a:显示所有文件系统,包括虚拟文件系统
  • -l:只显示本地文件系统
  • -BG:以 1G 为单位显示
  • -BM:以 1M 为单位显示

实战示例

以人类可读格式查看磁盘空间:

df -h

输出示例:

Filesystem      Size  Used Avail Use% Mounted on/dev/sda1      100G   45G   55G  45% //dev/sdb1      500G  350G  150G  70% /datatmpfs           16G  2.0G   14G  13% /dev/shm/dev/sda2       50G   30G   20G  60% /var

解释每列:

  • Filesystem:文件系统设备名或 UUID
  • Size:文件系统总大小
  • Used:已使用空间
  • Avail:可用空间
  • Use%:使用百分比
  • Mounted on:挂载点

查看所有文件系统包括伪文件系统:

df -ha

查看 inode 使用情况(适合排查小文件过多问题):

df -hi

输出示例:

Filesystem      Inodes IUsed IFree IUse% Mounted on/dev/sda1      655360  82000 573360   13% //dev/sdb1     3276800 150000 3126800    5% /data

查看文件系统类型:

df -hT

输出示例:

Filesystem     Type      Size  Used Avail Use% Mounted on/dev/sda1      ext4      100G   45G   55G  45% //dev/sdb1      xfs       500G  350G  150G  70% /datatmpfs          tmpfs      16G  2.0G   14G  13% /dev/shm

磁盘空间告警判断

生产环境通常设置磁盘空间告警,常见阈值:

分区
告警阈值
说明
/
85%
根分区满会导致系统异常
/var
85%
日志、缓存可能撑满
/data
90%
数据分区允许较高使用率
/tmp
90%
临时文件分区

排查磁盘告警的步骤

  1. 查看是哪个分区满了
df -h | grep -E "100%|9[0-9]%"
  1. 查看该挂载点下哪些目录占用最多空间
du -sh /data/*
  1. 确认是日志、缓存、数据还是临时文件

  2. 制定清理或扩容方案

常见清理场景

# 清理旧日志(保留最近 7 天)find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;# 清理临时目录rm -rf /tmp/myapp_*# 清理缓存(需要确认哪些可以删)du -sh /var/cache/*

避坑指南

  1. df 显示的是文件系统层面的使用情况,即使文件被删除,如果进程还持有文件描述符,空间也不会释放
  2. ext4 文件系统保留 5% 空间给 root 用户,普通用户看到的使用率会更高
  3. tmpfs 文件系统使用内存作为存储,断电后数据丢失
  4. NFS 等网络文件系统显示的使用情况可能不准确

磁盘空间不释放的排查

进程删除了文件但空间不释放:

# 找到持有已删除文件的进程lsof +L1

输出示例:

COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NLINK    NODE NAMEnginx     1234     www-data   4u   REG   8,1  52428800     0 123456 /var/log/myapp.log (deleted)

处理方法:

  1. 重启进程:systemctl restart nginx
  2. 或者发送 HUP 信号让进程重新打开日志文件:kill -HUP 1234

13. du — 目录大小查看

du 是 disk usage 的缩写,用于查看目录或文件的磁盘使用量。

基本用法

du /var/log

常用参数

  • -h:人类可读格式
  • -s:显示总计,不显示每个子目录
  • -a:显示所有文件,而不只是目录
  • -d N:显示到第 N 层目录
  • --max-depth=N:显示到第 N 层目录(简写为 -d)
  • -c:显示总计
  • -BM:以 1M 为单位显示

实战示例

查看当前目录总大小:

du -sh .

查看 /var/log 下每个目录的大小:

du -sh /var/log/*

按大小排序(需要结合 sort):

du -sh /var/log/* | sort -rh

查看当前目录下最大的 10 个文件或目录:

du -ah . | sort -rh | head -10

查看 /data 目录下占用空间最多的子目录(最多显示 1 层):

du -h --max-depth=1 /data

统计目录下日志文件总大小:

du -ch /var/log/myapp/*.log

输出最后一行的 total 就是总和。

实战:排查哪个目录占用最多空间

# 步骤1:查看根目录下各挂载点大小df -h# 步骤2:查看 /data 下最大的目录du -sh /data/*# 步骤3:进入占用最大的目录,继续排查du -sh /data/logs/*# 步骤4:找到具体的大文件du -ah /data/logs | sort -rh | head -20

批量查找大文件

# 查找 /var/log 下超过 100M 的文件find /var/log -type f -size +100M -exec ls -lh {} \;# 查找 /var/log 下超过 100M 的文件并排序find /var/log -type f -size +100M -exec ls -lh {} \; | sort -k5 -rh

避坑指南

  1. du 统计的是磁盘使用量,如果文件有硬链接会被重复计算
  2. du 默认不统计隐藏文件,需要加 -a 或明确指定
  3. du 统计目录时,会包含子目录,但不会重复计算子目录本身
  4. 统计大目录时 du 可能很慢,可以加 --apparent-size 参数跳过 inode 统计

性能优化

统计大目录时加速:

# 跳过某些不需要统计的目录du -sh /data --exclude='*.tmp'# 使用并行统计(如果系统有多个 CPU 核心)find /data -type d -print0 | xargs -0 -P 4 du -sh

14. mount — 挂载操作

mount 命令用于将存储设备或网络文件系统挂载到指定目录。

基本用法

挂载 ISO 文件:

mount -o loop /path/to/image.iso /mnt/iso

挂载 U 盘(假设 U 盘设备名为 /dev/sdb1):

mount /dev/sdb1 /mnt/usb

挂载 NFS 网络文件系统:

mount -t nfs 192.168.1.100:/data /mnt/nfs

常用参数

  • -t:指定文件系统类型,如 ext4、xfs、nfs、tmpfs、iso9660
  • -o:指定挂载选项,如 ro(只读)、rw(读写)、noexec(不允许执行)、nosuid(忽略 suid)、defaults(使用默认选项)
  • -a:挂载 /etc/fstab 中定义的所有文件系统
  • -l:列出所有已挂载的文件系统(带标签)
  • -o remount:重新挂载(用于修改挂载选项,如把只读改为读写)

查看当前挂载情况

# 查看所有已挂载的文件系统mount# 查看 /etc/fstab 中定义的文件系统cat /etc/fstab# 查看磁盘 UUID(推荐用于 fstab 配置)blkid# 查看已挂载的文件系统(格式化输出)df -h

常用挂载场景

挂载 tmpfs(内存文件系统,适合存储临时数据):

mount -t tmpfs -o size=2G tmpfs /mnt/tmp

挂载 bind(将一个目录挂载到另一个位置):

mount --bind /data/app /var/www/html/data

只读挂载:

mount -o ro /dev/sdb1 /mnt/usb

重新挂载(修改已挂载文件系统的选项):

# 将 / 重新挂载为只读(进入单用户模式前常用)mount -o remount,ro /# 将 /data 重新挂载为读写mount -o remount,rw /data

开机自动挂载配置

在 /etc/fstab 中添加:

# 格式:<设备> <挂载点> <类型> <选项> <dump> <pass># UUID 获取方式:blkid /dev/sda1UUID=550e8400-e29b-41d4-a716-446655440000 /data ext4 defaults 0 2

测试 fstab 配置是否正确(不实际挂载):

mount -f /etc/fstab

卸载设备

# 普通卸载umount /mnt/usb# 强制卸载(设备忙时)umount -f /mnt/usb# 卸载所有已挂载的文件系统(谨慎使用)umount -a

避坑指南

  1. 卸载前确保没有进程还在使用该文件系统
  2. 修改 /etc/fstab 前务必备份,并使用 mount -f 测试
  3. 生产环境挂载网络文件系统(如 NFS)要考虑网络延迟和稳定性
  4. 挂载选项要符合安全要求,如 nosuid、noexec、ro 等

挂载相关故障排查

挂载失败常见原因:

  1. 挂载点不存在 → 创建目录
  2. 设备不存在 → 检查设备名是否正确
  3. 设备正在使用 → 先关闭相关进程
  4. 文件系统损坏 → 使用 fsck 修复
  5. 权限问题 → 检查目标目录权限

第五部分:进程与资源

进程管理是运维的核心工作之一。ps、top、kill 这三个命令是进程管理的基础。

15. ps — 进程查看

ps 是 process status 的缩写,用于查看当前运行的进程状态。

基本用法

查看当前终端的进程:

ps

查看所有进程(完整格式):

ps aux

参数说明:

  • a:显示所有终端的进程
  • u:显示进程详细信息(用户、CPU、内存等)
  • x:显示没有控制终端的进程(守护进程)

查看指定进程的 PID:

ps aux | grep nginx

常用参数组合

查看进程并按 CPU 使用率排序:

ps aux --sort=-%cpu | head -20

查看进程并按内存使用率排序:

ps aux --sort=-%mem | head -20

查看特定用户的进程:

ps -u www-data

查看特定进程(按名称):

ps aux | grep -E "nginx|php-fpm"

显示进程树(父子关系):

ps auxwf

或者:

pstree -ap

ps 输出字段说明

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDwww-data  1234  0.5  2.1 152340  8456 ?        S    May28   0:23 nginx: worker process
  • USER:进程所属用户
  • PID:进程 ID
  • %CPU:CPU 使用百分比
  • %MEM:内存使用百分比
  • VSZ:虚拟内存大小(KB)
  • RSS:物理内存大小(KB)
  • TTY:关联的终端,? 表示没有终端
  • STAT:进程状态
  • START:进程启动时间
  • TIME:累计 CPU 时间
  • COMMAND:进程命令

STAT 进程状态码

状态码
含义
R
运行中或可运行
S
可中断的睡眠
D
不可中断的睡眠(通常是 I/O 等待)
Z
僵尸进程
T
暂停或跟踪
X
死亡进程(不显示)

修饰符:

  • <:高优先级
  • N:低优先级
  • L:锁定在内存中
  • s:会话领导进程
  • l:多线程进程
  • +:前台进程组

实战示例

查找 CPU 占用最高的进程:

ps aux --sort=-%cpu | head -10

查找内存占用最高的进程:

ps aux --sort=-%mem | head -10

查看某个用户运行的所有进程:

ps -u mysql

查看某个具体 PID 的进程:

ps -p 1234

或者:

ps -p $(pgrep -f nginx)

查看进程启动命令和参数:

ps -p 1234 -o args=

结合管道和 grep 查找进程

# 查找包含关键词的进程ps aux | grep "java"# 排除 grep 本身ps aux | grep "java" | grep -v grep# 精确匹配进程名ps aux | grep -E "^.*nginx.*$"

pgrep 命令

pgrep 是专门用于查找进程 ID 的命令,比 ps + grep 更简洁:

# 查找 nginx 进程的 PIDpgrep nginx# 查找并显示进程名pgrep -a nginx# 查找指定用户的进程pgrep -u www-data nginx

pkill 和 killall

根据进程名终止进程:

# 终止所有 nginx 进程pkill nginx# 强制终止(发送 SIGKILL)pkill -9 nginx# killall 根据进程名终止killall nginx

避坑指南

  1. ps aux 显示的 CPU 和内存百分比是瞬时值,不是平均值
  2. 进程名匹配要小心,避免误杀相似名称的进程
  3. 杀死系统关键进程会导致服务中断,要确认进程用途后再操作
  4. 僵尸进程无法被杀死,需要杀死其父进程或重启系统

16. top 与 htop — 实时进程监控

top 是 Linux 下最常用的实时进程监控工具,可以动态显示系统资源使用情况和进程状态。

基本用法

top

top 交互命令

在 top 运行期间,可以按以下键进行交互:

  • q:退出 top
  • P:按 CPU 使用率排序
  • M:按内存使用率排序
  • T:按累计时间排序
  • k:终止一个进程(会提示输入 PID 和信号)
  • r:修改进程优先级(renice)
  • u:查看指定用户的进程
  • n:修改显示的进程数量
  • c:显示完整命令路径
  • l:显示/隐藏第一行负载信息
  • m:显示/隐藏内存信息
  • f:选择显示字段
  • W:保存当前配置到 ~/.toprc

top 常用选项

按 CPU 使用率排序,每 5 秒刷新一次:

top -b -d 5 -o %CPU | head -50

参数说明:

  • -b:批处理模式,适合输出到文件
  • -d:刷新间隔(秒)
  • -o:排序字段

查看特定用户的进程:

top -u www-data

查看特定 PID 的进程:

top -p 1234

只显示前 20 个进程:

top -b -n 1 | head -27

top 输出字段

top - 14:30:25 up 45 days,  3:22,  1 user,  load average: 0.52, 0.58, 0.59Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie%Cpu(s):  5.3 us,  2.1 sy,  0.0 ni, 92.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stMiB Mem :  31984.6 total,   8456.2 free,  18456.3 used,   5072.1 buff/cacheMiB Swap:   8192.0 total,   8192.0 free,      0.0 used.  12456.2 avail Mem  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+    COMMAND 1234 www-data  20   0  152340   8456   2344 S   2.0   0.0    0:23.45 nginx 5678 mysql     20   0 1234560  456780  12344 S   1.5   1.4  12:34.56 mysqld

字段说明:

  • load average:系统负载,1 分钟、5 分钟、15 分钟平均值
  • us:用户空间 CPU 使用率
  • sy:内核空间 CPU 使用率
  • id:空闲 CPU 百分比
  • wa:I/O 等待 CPU 百分比
  • PR:优先级
  • NI:nice 值
  • VIRT:虚拟内存大小
  • RES:物理内存大小(常驻内存)
  • SHR:共享内存大小
  • TIME+:累计 CPU 时间

htop 介绍

htop 是 top 的增强版,界面更友好,操作更便捷(需要单独安装)。

# 安装 htopapt install htop  # Debian/Ubuntuyum install htop  # CentOS/RHEL# 启动 htophtop

htop 的优势:

  1. 界面更直观,颜色区分进程状态
  2. 支持鼠标操作
  3. 支持树形显示进程关系
  4. 可以垂直或水平滚动查看更多列
  5. 支持快捷键 F1-F10

实战:排查 CPU 过高

# 步骤1:运行 top 查看 CPU 使用情况top# 步骤2:按 P 排序,查看 CPU 占用最高的进程# 观察 %CPU 列# 步骤3:如果 nginx 进程 CPU 过高,查看其具体连接ps aux | grep nginx# 步骤4:查看 nginx 连接状态分布netstat -an | grep :80 | awk '/^tcp/ {print $6}' | sort | uniq -c# 步骤5:如果是 PHP-FPM CPU 高,查看慢请求tail -100 /var/log/php-fpm/slow.log

实战:排查内存过高

# 步骤1:运行 top 查看内存使用情况top# 步骤2:按 M 排序,查看内存占用最高的进程# 步骤3:检查是否有进程内存泄漏# 连续观察某个进程的 RES 值是否不断增长watch -n 5 'ps -p 1234 -o pid,%mem,rs'

避坑指南

  1. top 显示的是瞬时值,要观察一段时间才能判断是否存在持续问题
  2. load average 要结合 CPU 核心数判断,8 核 CPU 的 load 8 才是 100% 使用
  3. 内存使用率高不一定有问题,Linux 会尽可能利用内存做缓存
  4. 进程状态为 D(不可中断睡眠)通常是等待 I/O,此时 CPU 使用率可能很低

17. kill — 进程终止

kill 命令用于向进程发送信号,最常用的场景是终止进程。

基本用法

kill PID

这会发送 SIGTERM 信号(15),请求进程正常终止。

常用信号

信号
编号
说明
用途
SIGTERM
15
终止信号
正常终止进程,进程可以捕获并清理后退出
SIGKILL
9
强制终止
强制杀死进程,无法捕获,进程立即退出
SIGHUP
1
挂起信号
通常用于让进程重新读取配置文件
SIGINT
2
中断信号
Ctrl+C 发送的信号
SIGQUIT
3
退出信号
生成 core dump

强制终止进程

kill -9 PID

或者:

kill -SIGKILL PID

发送其他信号

让进程重新读取配置文件(以 Nginx 为例):

kill -HUP $(pgrep nginx)

暂停进程:

kill -STOP PID

恢复暂停的进程:

kill -CONT PID

批量终止进程

终止所有 nginx 进程:

killall nginx

或者:

pkill nginx

强制终止:

killall -9 nginx

查找并终止进程

查找某个端口对应的进程并终止:

# 方法1:使用 lsofkill -9 $(lsof -t -i:8080)# 方法2:使用 netstatkill -9 $(netstat -tlnp | grep :8080 | awk '{print $7}' | cut -d'/' -f1)# 方法3:使用 fuserkill -9 $(fuser -n tcp 8080 2>/dev/null)

优雅终止进程

生产环境建议按以下顺序终止进程:

  1. 先发送 SIGTERM,让进程有时间清理
  2. 等待一段时间(通常 10-30 秒)
  3. 如果进程仍未退出,发送 SIGKILL
# 优雅终止 Nginxkill -TERM $(pgrep nginx)# 等待 15 秒sleep 15# 检查进程是否还在ps aux | grep nginx# 如果还在,强制终止kill -9 $(pgrep nginx)

写一个终止脚本

#!/bin/bash# 终止指定名称的进程PROCESS_NAME=$1if [ -z "$PROCESS_NAME" ]; thenecho"用法: $0 <进程名>"exit 1fi# 查找进程 PIDPIDS=$(pgrep -f "$PROCESS_NAME")if [ -z "$PIDS" ]; thenecho"没有找到进程: $PROCESS_NAME"exit 0fiecho"找到进程: $PIDS"echo"发送 SIGTERM 信号..."# 发送 SIGTERMecho"$PIDS" | xargs kill# 等待 10 秒sleep 10# 检查是否还在REMAINING=$(pgrep -f "$PROCESS_NAME")if [ -n "$REMAINING" ]; thenecho"进程仍未退出,发送 SIGKILL..."echo"$REMAINING" | xargs kill -9fiecho"进程已终止"

避坑指南

  1. 绝对不能用 kill -9 终止 PostgreSQL、MySQL 等数据库的写进程,可能导致数据损坏
  2. 终止进程前,确认进程是否在处理重要任务
  3. 系统关键进程(如 init、sshd)不能随意终止
  4. 杀死父进程不会自动杀死子进程,子进程会变成孤儿进程被 init 收养
  5. 容器内的 kill 行为可能与宿主机不同,要注意

查看信号对进程的影响

每个进程对信号的处理方式不同,查看进程可用的信号:

# 查看进程 1234 能处理的信号kill -l 1234# 或查看所有信号列表kill -l

第六部分:网络诊断

网络问题是运维排查中最复杂的类型之一。ping、netstat/ss、curl 是最基础的网络诊断工具。

18. ping — 网络连通性

ping 是最基础的网络诊断工具,用于测试主机之间的连通性。

基本用法

ping 192.168.1.1

ping 域名:

ping www.baidu.com

常用参数

  • -c:指定 ping 的次数
  • -i:指定 ping 的间隔(秒)
  • -t:指定 TTL 值
  • -s:指定数据包大小
  • -f:快速 ping( flooding,显示每个请求,root 用户可用)
  • -w:指定超时时间(秒)
  • -W:指定等待响应时间(秒)

实战示例

ping 4 次后自动停止:

ping -c 4 192.168.1.1

每 2 秒 ping 一次:

ping -i 2 192.168.1.1

指定数据包大小(用于测试 MTU):

ping -s 1472 192.168.1.1

TTL 追踪(查看经过多少跳):

ping -t 64 192.168.1.1

ping 失败原因判断:

# "Destination Host Unreachable" - 路由问题或目标主机不存在# "Destination Port Unreachable" - 目标主机存在但协议不匹配# "Request timeout" - 防火墙阻止或目标主机不响应# "From 192.168.1.254: time exceeded" - 路由环路或 TTL 为 0

MTU 问题排查

MTU(Maximum Transmission Unit)最大传输单元,默认是 1500 字节。如果网络路径中有更小的 MTU,ping 大数据包会失败。

测试路径最大 MTU:

# 正常 MTU(1500)应该成功ping -s 1472 -c 1 8.8.8.8# 如果失败,逐步减小数据包大小ping -s 1400 -c 1 8.8.8.8ping -s 1300 -c 1 8.8.8.8

网络延迟分析

ping 输出示例:

64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=15.4 ms
  • 64 bytes:数据包大小
  • 8.8.8.8:目标 IP
  • icmp_seq=1:ICMP 序列号
  • ttl=117:生存时间(每经过一个路由减 1)
  • time=15.4 ms:往返延迟

分析延迟:

  • < 50ms:网络状况良好

  • 50-100ms:有一定延迟

  • 100ms:延迟严重

  • 抖动大(延迟忽高忽低):网络不稳定

脚本检测网络连通性

#!/bin/bash# 检测网络连通性HOSTS=("8.8.8.8""114.114.114.114""www.baidu.com")FAILED=0for HOST in"${HOSTS[@]}"doif ping -c 1 -W 3 "$HOST" > /dev/null 2>&1; thenecho"[OK] $HOST 可达"elseecho"[FAIL] $HOST 不可达"        FAILED=$((FAILED+1))fidoneif [ $FAILED -gt 0 ]; thenecho"网络检测失败: $FAILED 个主机不可达"exit 1elseecho"网络检测正常"exit 0fi

避坑指南

  1. ping 通不代表网络完全正常,ping 只测试 ICMP 协议,TCP/UDP 可能被防火墙拦截
  2. 有些服务器禁用 ICMP ping,不通不代表网络不通
  3. ping 结果受网络拥塞、路由跳数等多因素影响,要综合判断
  4. 快速 ping(ping -f)会发送大量数据包,可能影响网络性能,谨慎使用

19. netstat 与 ss — 端口与连接

netstat 和 ss 都用于查看网络连接、路由表、接口统计等信息。ss 是 netstat 的现代替代品,速度更快。

netstat 基本用法

查看所有连接:

netstat -an

参数说明:

  • -a:显示所有连接
  • -n:显示数字地址和端口(不解析域名)
  • -t:显示 TCP 连接
  • -u:显示 UDP 连接
  • -l:只显示监听状态的连接
  • -p:显示进程信息
  • -r:显示路由表
  • -i:显示网络接口信息
  • -s:显示网络统计信息

ss 基本用法

ss -tan state established

参数说明:

  • -t:显示 TCP 连接
  • -u:显示 UDP 连接
  • -a:显示所有连接
  • -n:不解析域名
  • -l:只显示监听端口
  • -p:显示进程信息
  • -o:显示计时器信息
  • state:过滤连接状态

常用连接状态

状态
说明
ESTABLISHED
已建立连接
SYN_SENT
发送连接请求,等待确认
SYN_RECV
收到连接请求,等待确认
LISTEN
监听中
TIME_WAIT
连接已关闭,等待处理残余数据包
CLOSE_WAIT
被动关闭,等待本地应用程序关闭
CLOSED
完全关闭
LAST_ACK
最后确认
CLOSING
同时关闭

实战示例

查看所有监听端口:

# netstat 方式netstat -tlnp# ss 方式(更快)ss -tlnp

输出示例:

State      Recv-Q   Send-Q   Local Address:Port    Peer Address:Port   ProcessLISTEN     0        128      0.0.0.0:22            0.0.0.0:*           users:(("sshd",pid=1234,fd=3))LISTEN     0        511      0.0.0.0:80            0.0.0.0:*           users:(("nginx",pid=5678,fd=6))

查看所有已建立的连接:

ss -tan state established

查看连接特定端口的进程:

# 查看 80 端口的连接ss -tlnp | grep :80# 查看连接到本机 80 端口的所有 IPss -tnp | grep ':80'

查看连接数统计:

# 统计各状态的连接数ss -tan | awk '{print $1}' | sort | uniq -c# 统计每个 IP 的连接数ss -tan | awk '/ESTAB/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

查看 TCP 连接超时时间:

ss -tan state time-wait

查看端口被哪个进程占用:

# 方法1:使用 netstatnetstat -tlnp | grep :8080# 方法2:使用 ssss -tlnp | grep :8080# 方法3:使用 lsoflsof -i :8080# 方法4:使用 fuserfuser 8080/tcp

连接数过多问题排查

# 步骤1:查看当前连接数ss -s# 步骤2:查看 TIME_WAIT 连接数ss -tan state time-wait | wc -l# 步骤3:查看 CLOSE_WAIT 连接数ss -tan state close-wait | wc -l# 步骤4:找出连接数最多的 IPss -tan | awk '/ESTAB/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

优化 TIME_WAIT

Linux 内核参数调整:

# 启用快速回收 TIME_WAITsysctl -w net.ipv4.tcp_tw_reuse=1# 设置 TIME_WAIT 超时时间(默认 60 秒)sysctl -w net.ipv4.tcp_fin_timeout=30# 启用 TCP 快速打开sysctl -w net.ipv4.tcp_fastopen=3

查看当前值:

sysctl net.ipv4.tcp_tw_reusesysctl net.ipv4.tcp_fin_timeout

永久生效需要写入 /etc/sysctl.conf:

echo"net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.confecho"net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.confsysctl -p

避坑指南

  1. netstat -an 会解析域名,速度慢。大服务器上建议用 ss
  2. 查看进程信息需要 root 权限
  3. TIME_WAIT 是正常状态,不要看到 TIME_WAIT 就认为是问题
  4. 连接数突然暴增可能是被攻击或爬虫,需要结合业务判断

20. curl — HTTP 请求

curl 是强大的 HTTP 客户端工具,用于发送各种 HTTP 请求、测试接口、下载文件等。

基本用法

发送 GET 请求:

curl https://www.example.com

发送 POST 请求:

curl -X POST https://api.example.com/data

常用参数

  • -X:指定 HTTP 方法(GET、POST、PUT、DELETE 等)
  • -d:发送 POST 数据
  • -H:添加 HTTP 头
  • -A:设置 User-Agent
  • -v:显示详细请求和响应
  • -VV:显示更详细的调试信息
  • -i:显示响应头
  • -I:只显示响应头
  • -o:输出到文件
  • -O:下载文件并保存原始文件名
  • -L:跟随重定向
  • -s:静默模式,不显示进度条
  • -S:出错时显示错误
  • -w:自定义输出格式
  • -x:指定代理服务器
  • -k:不验证 SSL 证书
  • --cert:指定客户端证书
  • --key:指定客户端私钥

实战示例

发送 JSON 数据的 POST 请求:

curl -X POST https://api.example.com/users \  -H "Content-Type: application/json" \  -d '{"name":"test","email":"test@example.com"}'

带认证的请求:

# Basic Authcurl -u username:password https://api.example.com/profile# Bearer Tokencurl -H "Authorization: Bearer TOKEN" https://api.example.com/profile

下载文件:

# 下载并保存为 original_filenamecurl -O https://example.com/file.zip# 下载并保存为指定文件名curl -o myfile.zip https://example.com/file.zip

查看响应头:

curl -I https://www.example.com

跟随重定向并查看最终响应:

curl -L -I https://short.url/abc

自定义 User-Agent:

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://www.example.com

自定义输出格式:

# 显示 HTTP 状态码curl -w "%{http_code}" -s -o /dev/null https://www.example.com# 显示完整信息curl -w "HTTP Code: %{http_code}\nTotal Time: %{time_total}s\n" -s -o /dev/null https://www.example.com

检测网站可用性脚本:

#!/bin/bashURL=$1EXPECTED_CODE=${2:-200}HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" -L "$URL")if [ "$HTTP_CODE" = "$EXPECTED_CODE" ]; thenecho"[OK] $URL 返回 $HTTP_CODE"exit 0elseecho"[FAIL] $URL 返回 $HTTP_CODE,期望 $EXPECTED_CODE"exit 1fi

测试 API 响应时间:

curl -w "\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nSSL: %{time_appconnect}s\nTotal: %{time_total}s\n" \  -o /dev/null -s https://www.example.com

测试多个接口:

#!/bin/bash# 健康检查脚本ENDPOINTS=("https://api.example.com/health""https://api.example.com/status""https://api.example.com/ping")ALL_OK=truefor endpoint in"${ENDPOINTS[@]}"do    HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}" -L "$endpoint")if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "204" ]; thenecho"[OK] $endpoint -> $HTTP_CODE"elseecho"[FAIL] $endpoint -> $HTTP_CODE"        ALL_OK=falsefidoneif [ "$ALL_OK" = true ]; thenecho"所有接口正常"exit 0elseecho"部分接口异常"exit 1fi

与 JSON 处理结合

使用 curl 获取 JSON 并用 jq 解析(需要安装 jq):

# 安装 jqapt install jq# 获取 JSON 并解析curl -s https://api.example.com/users | jq '.data[] | {name, email}'

调试 HTTPS 问题

查看完整的 SSL 握手信息:

curl -vvv https://www.example.com 2>&1 | grep -E "(SSL|TLS|Certificate|Subject|Issuer)"

不验证 SSL 证书(仅测试用):

curl -k https://self-signed.cert.example.com

查看 SSL 证书信息:

curl -Iv https://www.example.com 2>&1 | grep -E "(SSL|TLS|subject|issuer|notBefore|notAfter)"

上传文件

# 单文件上传curl -X POST -F "file=@/path/to/file.txt" https://api.example.com/upload# 多文件上传curl -X POST -F "file1=@file1.txt" -F "file2=@file2.txt" https://api.example.com/upload

模拟 form 表单提交

# application/x-www-form-urlencodedcurl -X POST -d "username=admin&password=123456" https://api.example.com/login# multipart/form-datacurl -X POST -F "username=admin" -F "password=123456" https://api.example.com/login

避坑指南

  1. curl 默认不跟随重定向,如果测试 Web 应用需要加 -L
  2. curl 默认输出到标准输出,如果下载大文件需要用 -o 或 -O
  3. 使用 -k 参数会跳过 SSL 验证,生产环境要谨慎
  4. curl 默认使用 GET 方法,POST 数据要加 -d 参数
  5. shell 脚本中使用 curl 最好加 -s 静默进度条,避免干扰输出

实战案例

案例一:排查日志文件问题

场景描述

凌晨 2 点收到告警,/var/log 目录使用率超过 85%。需要快速定位问题并处理。

排查步骤

  1. 查看 /var/log 目录下各子目录的大小
du -sh /var/log/*
  1. 发现 /var/log/myapp 目录占用了 80G
du -sh /var/log/myapp/*
  1. 进一步定位,发现 /var/log/myapp/access.log 占了 60G
du -ah /var/log/myapp | sort -rh | head -10
  1. 查看日志文件最后几行,确认是否还在写入
tail -20 /var/log/myapp/access.log
  1. 查看日志轮转配置
cat /etc/logrotate.d/myapp

输出示例:

/var/log/myapp/*.log {    daily    rotate 7    compress    delaycompress    missingok    notifempty    create 0644 www-data www-data    postrotatekill -USR1 $(cat /var/run/myapp.pid 2>/dev/null)    endscript}
  1. 分析问题:日志轮转配置了,但可能日志量太大,超过轮转周期

  2. 手动轮转日志

# 先备份cp /var/log/myapp/access.log /var/log/myapp/access.log.bak.$(date +%Y%m%d)# 清空原文件(而不是删除,因为进程还在写入)> /var/log/myapp/access.log# 或者用 truncatetruncate -s 0 /var/log/myapp/access.log# 通知进程重新打开日志文件kill -USR1 $(pgrep myapp)
  1. 确认处理结果
ls -lh /var/log/myapp/df -h /var/log
  1. 修改轮转策略,避免再次发生

编辑 /etc/logrotate.d/myapp,增加轮转频率或保留份数:

/var/log/myapp/*.log {    hourly      # 从 daily 改为 hourly    rotate 24   # 保留 24 份,按 hourly 算就是 24 小时    ...}

总结

  • 定期检查 /var/log 目录大小,建立告警机制
  • 日志轮转要根据日志产生速度调整参数
  • 清理日志时不要用 rm,而是用 > 或 truncate 清空内容后通知进程重新打开
  • 考虑对大日志目录使用独立分区或存储

案例二:批量清理过期文件

场景描述

/data/cache 目录积累了 3 年的缓存文件,占用 500G 空间。需要清理 180 天前的文件。

操作步骤

  1. 先预览要删除的文件(不实际删除)
find /data/cache -type f -mtime +180 -print | head -100
  1. 统计文件数量
find /data/cache -type f -mtime +180 | wc -l
  1. 统计这些文件的总大小
find /data/cache -type f -mtime +180 -exec du -ch {} + | tail -1
  1. 确认无误后,分批删除(避免一次删除过多文件造成 I/O 负载)
# 分批删除,每批 1000 个文件find /data/cache -type f -mtime +180 -print0 | xargs -0 -n 1000 rm -f
  1. 删除空目录
find /data/cache -type d -empty -delete
  1. 验证结果
df -h /datadu -sh /data/cache/*

安全建议

  1. 生产环境执行删除操作前,先在测试环境验证
  2. 用 -print0 配合 xargs -0 处理文件名包含空格的情况
  3. 不要用 rm -rf 配合 find -mtime,避免误删
  4. 建议写一个带日期和数量记录的删除脚本
#!/bin/bash# 安全清理脚本DIR="/data/cache"DAYS=180BATCH_SIZE=1000LOGFILE="/var/log/cleanup_$(date +%Y%m%d).log"echo"$(date) 开始清理 $DIR 目录下 ${DAYS} 天前的文件" | tee -a "$LOGFILE"# 统计文件数量FILE_COUNT=$(find "$DIR" -type f -mtime +$DAYS | wc -l)echo"待删除文件数量: $FILE_COUNT" | tee -a "$LOGFILE"# 统计文件大小TOTAL_SIZE=$(find "$DIR" -type f -mtime +$DAYS -exec du -ch {} + | tail -1 | cut -f1)echo"待删除文件总大小: $TOTAL_SIZE" | tee -a "$LOGFILE"# 确认操作read -p "确认删除? (yes/no): " CONFIRMif [ "$CONFIRM" != "yes" ]; thenecho"取消操作"exit 0fi# 分批删除find "$DIR" -type f -mtime +$DAYS -print0 | xargs -0 -n $BATCH_SIZE rm -f# 删除空目录find "$DIR" -type d -empty -deleteecho"$(date) 清理完成" | tee -a "$LOGFILE"

案例三:分析服务器磁盘告警

场景描述

收到告警:服务器 /data 分区使用率超过 90%。需要分析原因并处理。

排查步骤

  1. 确认告警详情
df -h /data

输出:

Filesystem      Size  Used Avail Use% Mounted on/dev/sdb1      1000G  950G   50G  95% /data
  1. 查看 /data 下各目录的大小
du -h --max-depth=1 /data

输出:

700G   /data/logs200G   /data/uploads 50G   /data/db_backup
  1. 进一步分析日志目录
du -h --max-depth=1 /data/logs

输出:

500G   /data/logs/myapp200G   /data/logs/nginx
  1. 分析 myapp 日志
du -h --max-depth=1 /data/logs/myapp

发现 /data/logs/myapp/2024 目录占用了 400G。

  1. 查看日志内容
ls -lht /data/logs/myapp/2024 | head -20
  1. 分析日志增长速度
# 查看目录中文件数量ls /data/logs/myapp/2024 | wc -l# 查看每天新增多少文件ls /data/logs/myapp/2024 | tail -30 | wc -l
  1. 检查日志轮转配置
cat /etc/logrotate.d/myapp
  1. 制定清理方案

根据分析结果:

  • /data/logs/myapp/2024 是 2024 年的旧日志,已归档但未清理
  • 当前 2026 年的日志每天产生约 2G
  • 需要保留最近 30 天的日志
  1. 执行清理
# 备份重要日志mkdir -p /backup/logs_2024mv /data/logs/myapp/2024/*.gz /backup/logs_2024/ 2>/dev/nullmv /data/logs/myapp/2024/*.log /backup/logs_2024/ 2>/dev/null# 删除 2024 目录中的其他文件(保留压缩包)find /data/logs/myapp/2024 -type f ! -name "*.gz" -mtime +365 -delete# 清理 30 天前的普通日志find /data/logs/myapp -type f -name "*.log" -mtime +30 -delete# 压缩 7 天前的日志find /data/logs/myapp -type f -name "*.log" -mtime +7 ! -name "*.gz" -exec gzip {} \;
  1. 验证结果
df -h /datadu -sh /data/logs/*
  1. 设置定期清理任务

创建 /etc/cron.daily/cleanup-myapp-logs:

#!/bin/bash# 清理 30 天前的日志,压缩 7 天前的日志LOG_DIR="/data/logs/myapp"DAYS_DELETE=30DAYS_COMPRESS=7# 压缩 7 天前的日志find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_COMPRESS ! -name "*.gz" -exec gzip {} \;# 删除 30 天前的日志find "$LOG_DIR" -type f -name "*.log.gz" -mtime +$DAYS_DELETE -delete# 删除空目录find "$LOG_DIR" -type d -empty -delete
  1. 设置执行权限
chmod +x /etc/cron.daily/cleanup-myapp-logs

总结

磁盘告警排查的闭环流程:

  1. 确认告警:df -h 查看实际使用情况
  2. 定位问题:du -h 逐层定位最大的目录或文件
  3. 分析原因:查看文件时间戳、日志轮转配置、业务日志产生速度
  4. 制定方案:确定清理范围、备份策略、预防措施
  5. 执行清理:先备份、再清理、验证结果
  6. 预防措施:配置日志轮转、定期清理任务、告警阈值调整

总结:20个命令速查表

命令
用途
常用参数
ls
列出目录内容
-l, -a, -h, -t, -S
cd
切换目录
~, -, ..
cp
复制文件/目录
-r, -p, -i, -v
mv
移动/重命名
-i, -v, -f
rm
删除文件/目录
-r, -f, -i
cat
查看文件内容
-n, -b, -s
grep
文本搜索
-i, -v, -n, -r, -E
head
查看文件头部
-n, -c
tail
查看文件尾部
-n, -f, -F
wc
统计行数/字数
-l, -w, -c
chmod
修改权限
755, 644, +x
chown
修改所有者
-R, user:group
df
查看磁盘空间
-h, -T, -i
du
查看目录大小
-h, -s, -d
mount
挂载文件系统
-t, -o, -a
ps
查看进程
aux, -ef
top
实时监控进程
-d, -p, -u
kill
终止进程
-9, -15, -TERM
ping
测试连通性
-c, -i, -s
netstat/ss
查看网络连接
-tlnp, -an
curl
发送 HTTP 请求
-X, -d, -H, -v

学习建议

  1. 不要死记硬背,要在实际使用中记忆
  2. 每个命令的常用参数记住 3-5 个就够用了
  3. 学会组合使用:管道、重定向、后台执行
  4. 遇到问题先查 man 手册:man command
  5. 常用的复杂命令组合可以写成脚本保存
文末福利

今天给大家分享一份超级牛掰的Linux学习笔记,足足有1456页!是一位Linux运维大佬整理分享的,分享是获得大佬同意的,大家有需要的尽管收藏起来!

笔记介绍

这份笔记非常全面且详细,从Linux基础到shell脚本,再到防火墙、数据库、日志服务管理、Nginx、高可用集群、Redis、虚拟化、Docker等等,与其说Linux学习笔记,不如说是涵盖了运维各个核心知识。

并且图文并茂,代码清晰,每一章下面都有更具体详细的内容,十分适合Linux运维学习参考!

笔记展示

笔记下载

扫描下方二维码,回复暗号1456页Linux笔记“,即可100%免费领取成功

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 02:19:56 HTTP/2.0 GET : https://f.mffb.com.cn/a/496257.html
  2. 运行时间 : 0.096256s [ 吞吐率:10.39req/s ] 内存消耗:4,906.18kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=72dfd4da06e4f13870f73fea5cc5d8d9
  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.000446s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000765s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000303s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000295s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000475s ]
  6. SELECT * FROM `set` [ RunTime:0.000197s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000505s ]
  8. SELECT * FROM `article` WHERE `id` = 496257 LIMIT 1 [ RunTime:0.000597s ]
  9. UPDATE `article` SET `lasttime` = 1783016396 WHERE `id` = 496257 [ RunTime:0.012671s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000283s ]
  11. SELECT * FROM `article` WHERE `id` < 496257 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001397s ]
  12. SELECT * FROM `article` WHERE `id` > 496257 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003847s ]
  13. SELECT * FROM `article` WHERE `id` < 496257 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.005880s ]
  14. SELECT * FROM `article` WHERE `id` < 496257 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000677s ]
  15. SELECT * FROM `article` WHERE `id` < 496257 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001829s ]
0.097835s