当前位置:首页>Linux>深入理解Linux的软链接与硬链接,别再傻傻分不清

深入理解Linux的软链接与硬链接,别再傻傻分不清

  • 2026-07-01 01:33:10
深入理解Linux的软链接与硬链接,别再傻傻分不清

引言:链接不是快捷方式那么简单

很多运维工程师知道 Linux 有软链接(Symbolic Link)和硬链接(Hard Link),也知道 ln -s 是软链接,ln 是硬链接。但在实际工作中,还是会经常遇到这些问题:

  • 为什么删除了源文件,软链接还能用 / 不能用了?
  • 为什么硬链接不能跨分区?
  • 为什么硬链接不能链接目录?
  • 配置文件明明改了对,但是服务读到的还是旧内容——是不是链接有问题?
  • 给运维新人讲不清楚 inode 号是什么,链接数怎么算

这些问题的根因都指向一个核心概念:Linux 文件系统中,文件不是文件名,文件是数据,链接是引用计数。理解了这一点,软链接和硬链接的各种特性就能顺理成章地推导出来,而不是靠死记硬背。


第一章:Linux文件系统的底层结构

1.1 文件系统存储结构:从 inode 开始

Linux 文件系统的核心不是文件名,而是 inode(Index Node)。每个文件在磁盘上都有一个 inode,里面存储了文件的元数据:文件大小、创建时间、权限、属主、数据块位置等。

可以用 stat 命令查看一个文件的 inode 信息:

stat /etc/passwd

# 输出示例:
# File: /etc/passwd
# Size: 2345         Blocks: 8          IO Block: 4096   regular file
# Device: 08:02       Inode: 131082     Links: 2
# Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
# Access: 2026-05-15 10:00:00.000000000 +0800
# Modify: 2026-02-01 08:30:00.000000000 +0800
# Change: 2026-05-10 12:00:00.000000000 +0800

重点关注:

  • Inode: 131082:这是这个文件的唯一标识符
  • Links: 2:这个文件的硬链接数是 2,意味着有 2 个目录项指向这个 inode

1.2 目录项(directory entry)是什么

文件系统里,目录也是一种文件。目录文件的内容是一系列 目录项(directory entry),每个目录项包含:文件名 + 指向的 inode 编号。

# 查看目录内容(目录项)
ls -lai /etc | head -20

# 输出:
# total 48
# drwxr-xr-x  2 root root 4096 May 15 10:00 .
# drwxr-xr-x  3 root root 4096 May 15 09:00 ..
# drwxr-xr-x  2 root root 4096 Jan  1 00:00 adjtime
# -rw-r--r--  1 root root  100 Jan  1 00:00 aliases
# ...

注意第一列的 inode 号。每个目录项对应一个 inode。同一个文件的多个硬链接,会有不同的目录项(不同的文件名),但指向同一个 inode。

1.3 理解"链接数"的含义

文件系统的 链接数(Link Count) 表示有多少个目录项指向这个 inode:

  • 普通文件的链接数:至少是 1(自身文件名对应一个目录项)。如果创建了硬链接,链接数会变成 2、3……
  • 目录的链接数:至少是 2(. 自身 + 父目录里的目录名)。子目录会为父目录贡献 1 个链接数
# 普通文件初始链接数为 1
touch testfile
stat testfile | grep Links
# Links: 1

# 创建硬链接后,链接数变为 2
ln testfile testfile_hardlink
stat testfile | grep Links
# Links: 2
stat testfile_hardlink | grep Links
# Links: 2
ls -li testfile testfile_hardlink
# 131084 -rw-r--r-- 2 root root 0 May 15 10:00 testfile
# 131084 -rw-r--r-- 2 root root 0 May 15 10:00 testfile_hardlink
# 注意两个文件的 inode 号完全相同(131084),链接数都是 2

关键理解:硬链接不是文件的副本,而是同一个 inode 的多个目录项入口。删除任何一个"链接",只是删除了一个目录项,数据块只有在链接数变成 0(没有任何目录项指向这个 inode)时才会被释放。


第二章:硬链接(Hard Link)

2.1 什么是硬链接

硬链接是同一个文件系统内,多个目录项(文件名)指向同一个 inode。这些文件名对文件系统来说是完全等价的,没有"源文件"和"链接文件"之分。

# 创建硬链接
ln /data/mysql/backup.sql /backup/mysql_backup.sql

# 验证:两个文件指向同一个 inode
ls -li /data/mysql/backup.sql /backup/mysql_backup.sql
# 131085 -rw-r--r-- 2 mysql mysql 104857600 May 15 10:00 /data/mysql/backup.sql
# 131085 -rw-r--r-- 2 mysql mysql 104857600 May 15 10:00 /backup/mysql_backup.sql
# inode 相同,链接数都是 2

# 验证:两个文件内容完全相同
md5sum /data/mysql/backup.sql /backup/mysql_backup.sql
# 相同的 MD5 值

2.2 硬链接的限制

硬链接有以下硬性限制,理解这些限制有助于在工作中正确选择链接类型:

限制一:不能跨文件系统

每个文件系统有独立的 inode 表,跨文件系统的 inode 编号是独立的。A 文件系统的 inode 131082 和 B 文件系统的 inode 131082 是完全不同的数据。硬链接需要两个路径指向同一个 inode,所以不能跨文件系统。

# 假设 /data 是独立的挂载点(/dev/sdb1)
# 尝试在 /data 目录下的文件和根分区之间创建硬链接
ln /data/mysql/backup.sql /root/backup_copy.sql
# ln: failed to create hard link '/root/backup_copy.sql': Invalid cross-device link

# 验证两个路径在不同文件系统
df -h /data/mysql/backup.sql /root/backup_copy.sql 2>/dev/null
# /dev/sdb1  500G  320G  180G  64% /data
# /dev/sda1  100G   45G   55G  45% /

限制二:不能链接目录

如果允许目录硬链接,会导致目录树中出现环(A 是 B 的子目录,B 又硬链接回 A),这会让 rm 等命令陷入无限递归。Linux 文件系统禁止对目录创建硬链接。

mkdir -p /data/app
ln /data/app /data/app_link
# ln: /data/app: hard link not allowed for directory

补充知识:目录的链接数来源于子目录的 .. 入口。例如 /data 目录初始链接数为 2(. 和父目录的引用),每在 /data 下创建一个子目录,该子目录的 .. 目录项就会使 /data 的链接数加 1。

ls -lai /data
# drwxr-xr-x  3 root root 4096 May 15 10:00 .
# drwxr-xr-x  4 root root 4096 May 15 09:00 ..

# 在 /data 下创建子目录
mkdir /data/logs

# /data 的链接数从 3 变成 4(多了 logs 子目录的 .. 引用)
ls -lai /data
# drwxr-xr-x  3 root root 4096 May 15 10:00 .         ← inode
#                                      ↑ Links: 4(包含 .、.. 和 logs/..)

限制三:不能对不存在的文件创建硬链接

硬链接需要指向一个已存在的 inode,所以目标文件必须存在。

ln /nonexistent /backup/link
# ln: /nonexistent: No such file or directory

限制四:不能对特殊文件(设备、socket、管道)创建硬链接

这些文件不是普通数据文件,不应该被链接。

ln /dev/null /tmp/mynull
# ln: /dev/null: hard link not allowed for special file

2.3 硬链接的实战应用

场景一:文件热备(不改原文件名)

# 每日备份脚本:复制一份文件到备份目录,不改原文件名
ln /data/www/uploads/avatar_20260515.jpg /backup/uploads/avatar_20260515.jpg

# 优点:备份立即生效,不占用额外磁盘空间(同一份数据块)
# 缺点:原文件和备份共享数据,改一个两个都变(对备份来说不是问题,因为备份通常只读)

场景二:多版本代码共存(不改原路径引用)

# 新版本上线前,在同一目录下创建硬链接
ln /data/app/v1.2.3 /data/app/v1.2.3_old

# 然后替换 v1.2.3 的内容
# 如果新版本有问题,v1.2.3_old 仍然指向旧版本数据

场景三:日志文件轮转后的无缝衔接

# 假设日志文件 /var/log/nginx/access.log 被 logrotate 移动到 access.log.1
# 但某个服务还在写 /var/log/nginx/access.log(通过文件描述符)
# 如果用硬链接,删除旧文件后链接数减 1,数据块不会被立即释放
# 服务继续写旧的 inode,新文件(access.log.1)不受影响

2.4 硬链接的删除行为

# 删除硬链接:unlink 或 rm
unlink /backup/mysql_backup.sql
rm /backup/mysql_backup.sql

# 真正的删除发生在链接数变为 0 时
# 进程持有打开文件句柄时,即使 rm 删除了目录项,数据块也不会立即释放

一个经典问题:为什么 rm 之后 df 还显示磁盘占用不释放?

# 进程 A 打开了一个大文件 file.txt(持有文件描述符)
# 管理员 rm 了 file.txt
rm /path/to/file.txt

# 此时:
# - 目录项已被删除,ls 看不到 file.txt
# - 但进程 A 仍然持有文件描述符,inode 和数据块没有被释放
# - df -h 看到磁盘使用率没有变化

# 查看被删除但未释放的文件
lsof +L1

# 输出示例:
# COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF NLINK   NODE NAME
# python   12345 app    3r   REG   8,02   104857600     0 131085 /path/to/file.txt (deleted)

# 解决方法:
# 1. 联系应用团队,让进程正常关闭文件(最佳方案)
# 2. kill 进程(需要评估影响)
# 3. 重启进程

第三章:软链接(Symbolic Link)

3.1 什么是软链接

软链接(也叫符号链接)是一个特殊类型的文件,它存储的是另一个文件的路径(路径字符串),而不是 inode 本身。软链接就像 Windows 的快捷方式,或者程序语言里的引用。

# 创建软链接
ln -s /data/mysql/backup.sql /backup/mysql_backup.sql

# 验证:软链接的 inode 和原文件不同
ls -li /data/mysql/backup.sql /backup/mysql_backup.sql

# 输出:
# 131085 -rw-r--r-- 2 mysql mysql 104857600 May 15 10:00 /data/mysql/backup.sql
# 131086 lrwxrwxrwx 1 root root       18 May 15 10:01 /backup/mysql_backup.sql -> /data/mysql/backup.sql
#                    ↑ soft link
#                    注意软链接的权限显示为 lrwxrwxrwx,但实际权限取决于目标文件
#                    文件大小 18 = 路径字符串 "/data/mysql/backup.sql" 的长度

3.2 软链接的特性

特性一:可以跨文件系统

软链接存储的是路径字符串,不是 inode 编号,所以可以跨文件系统、跨分区、跨设备。

# 假设 /data 是独立挂载点
ln -s /data/mysql/backup.sql /root/backup_copy.sql
# 成功创建,不报错

ls -la /root/backup_copy.sql
# lrwxrwxrwx 1 root root 18 May 15 10:01 /root/backup_copy.sql -> /data/mysql/backup.sql

特性二:可以链接目录

软链接可以指向目录,这对日常运维非常有用。

# 给长路径创建一个短别名
ln -s /var/log/nginx /data/nginx_logs

# 访问 /data/nginx_logs 就等于访问 /var/log/nginx
ls /data/nginx_logs

# 用于版本切换:切换指向哪个版本
ln -sfn /data/app/v2.0.0 /data/app/current
# -s: 软链接
# -f: 如果已存在同名链接,先删除
# -n: 把链接视为普通文件而不是目录(用于替换链接指向,而不是进入目录)

特性三:软链接有独立的 inode,是独立的文件

软链接本身是一个文件,有自己的 inode 和链接数(默认是 1)。删除软链接不影响目标文件。

# 软链接本身链接数为 1(它自己)
ls -li /backup/mysql_backup.sql
# 131086 lrwxrwxrwx 1 root root 18 May 15 10:01 /backup/mysql_backup.sql -> /data/mysql/backup.sql

# 删除软链接,目标文件不受影响
rm /backup/mysql_backup.sql
ls -li /data/mysql/backup.sql
# 131085 -rw-r--r-- 2 mysql mysql 104857600 May 15 10:00 /data/mysql/backup.sql
# 链接数仍然是 2(没有变化)

特性四:软链接依赖目标路径

如果目标文件被删除、 rename 或者路径变了,软链接就会断裂(dangling link),访问时报"No such file or directory"。

# 正常情况
ls -la /backup/mysql_backup.sql
# lrwxrwxrwx 1 root root 18 May 15 10:01 /backup/mysql_backup.sql -> /data/mysql/backup.sql

# 目标文件被删除
rm /data/mysql/backup.sql

# 软链接断裂
ls -la /backup/mysql_backup.sql
# lrwxrwxrwx 1 root root 18 May 15 10:01 /backup/mysql_backup.sql -> /data/mysql/backup.sql (broken)
#                                              ↑ 显示 broken,表示目标不存在

# 访问断裂的软链接会报错
cat /backup/mysql_backup.sql
# cat: /backup/mysql_backup.sql: No such file or directory

# 查找所有断裂软链接(定期巡检用)
find /backup -xtype l
# find: File system loop detected.
# (可能因为目录软链接造成环路,需要加 -L 参数控制)
find /backup -xtype l -ls

特性五:软链接的路径解析是运行时进行的

软链接存储的是路径字符串,每次访问软链接时,内核都会解析这个路径,找到实际的文件。如果目标路径在软链接创建之后发生了变化,软链接会自动指向新的目标。

# 创建软链接指向 v1.0
ln -s /data/app/v1.0 /data/app/current

# 升级到 v2.0:替换软链接指向
ln -sfn /data/app/v2.0 /data/app/current

# 访问 /data/app/current 自动指向 v2.0
ls /data/app/current
# v2.0 的内容

3.3 软链接的权限

软链接的权限显示为 lrwxrwxrwx(所有用户可读可写可执行),但这个权限没有实际意义。软链接的访问权限由目标文件决定。

ln -s /etc/shadow /tmp/myshadow
ls -la /tmp/myshadow
# lrwxrwxrwx 1 root root 6 May 15 10:00 /tmp/myshadow -> /etc/shadow

# 尝试访问:实际权限是 /etc/shadow 的权限(root 可读写,其他用户无权限)
cat /tmp/myshadow
# cat: /tmp/myshadow: Permission denied  ← 因为 /etc/shadow 权限是 600

# 对软链接本身 chmod 无效
chmod 777 /tmp/myshadow
ls -la /tmp/myshadow
# lrwxrwxrwx 1 root root 6 ... /tmp/myshadow -> /etc/shadow
# 权限没变,chmod 被软链接忽略

3.4 相对路径 vs 绝对路径软链接

创建软链接时,目标路径可以是绝对路径相对路径。两者在行为上有差异。

# 绝对路径软链接(推荐)
ln -s /etc/nginx/nginx.conf /data/nginx.conf

# 相对路径软链接
cd /data
ln -s ../etc/nginx/nginx.conf nginx.conf

# 两种链接在创建后访问效果一样
# 但相对路径软链接如果被移动到其他位置就会断裂
mv /data /data2
ls /data2/nginx.conf
# /data2/nginx.conf: No such file or directory  ← 相对路径失效

结论:始终使用绝对路径创建软链接,避免因移动位置导致断裂。

3.5 软链接的实战应用

场景一:多版本 Node.js 共存与切换

# /usr/local 下安装了多个 Node.js 版本
/usr/local/node/v18.1.0/bin/node
/usr/local/node/v20.3.0/bin/node

# 创建 current 软链接指向活跃版本
ln -sfn /usr/local/node/v20.3.0 /usr/local/node/current

# 环境变量 PATH 指向 current
echo$PATH | tr ':''\n' | grep node
# /usr/local/node/current/bin

# 切换版本只需要替换软链接
ln -sfn /usr/local/node/v18.1.0 /usr/local/node/current
# 立即生效,不需要重新安装

场景二:Nginx 配置目录管理

# 生产环境和测试环境 Nginx 配置分离
# /etc/nginx/sites-enabled/ 是软链接到 /etc/nginx/sites-available/
ls -la /etc/nginx/sites-enabled/
# lrwxrwxrwx 1 root root 27 May 15 09:00 default -> /etc/nginx/sites-available/default
# lrwxrwxrwx 1 root root 36 May 15 10:00 api.conf -> /etc/nginx/sites-available/api.conf

# 禁用某个站点:删除软链接,而不是删除源文件
rm /etc/nginx/sites-enabled/api.conf

# 启用某个站点:添加软链接
ln -s /etc/nginx/sites-available/api.conf /etc/nginx/sites-enabled/api.conf

# 重载 Nginx
nginx -t && nginx -s reload

场景三:MySQL 数据目录迁移(不停机方案)

# 场景:需要把 MySQL 数据目录迁移到新磁盘 /data2/mysql
# 步骤:
# 1. 停止 MySQL(或者使用 LVM 快照等不停机方案)
systemctl stop mysql

# 2. 创建硬链接迁移数据(保留原文件,硬链接不占额外空间)
# 注意:仅限同一文件系统内
for f in /var/lib/mysql/*; do
    ln "$f""/data2/mysql/$(basename $f)" 2>/dev/null || true
done

# 3. 确认迁移完成后,删除原文件(此时 inode 仍然有效,因为硬链接还在 /data2/mysql)
rm -rf /var/lib/mysql/*

# 4. 创建软链接指向上述硬链接目录(使 MySQL 配置不变)
ln -s /data2/mysql /var/lib/mysql

# 5. 启动 MySQL
systemctl start mysql

第四章:硬链接与软链接的对比

特性
硬链接(Hard Link)
软链接(Symbolic Link)
本质
多个目录项指向同一个 inode
一个独立的文件,存储目标路径字符串
跨文件系统
不允许
允许
链接目录
不允许
允许
删除行为
链接数 -1,为 0 时删除数据
删除软链接不影响目标文件
目标文件删除后
原 inode 数据块保留(链接数 > 0 时)
软链接断裂(dangling)
inode 号
所有硬链接共享同一 inode
软链接有独立 inode
权限
实际权限(取决于 inode)
显示 lrwxrwxrwx,实际权限取决于目标
创建条件
需要目标 inode 存在
目标不存在也可以创建(断裂链接)
磁盘空间
不占用额外空间(同一数据块)
占用少量空间(存储路径字符串)
性能
略优(直接 inode 访问)
略差(多一次路径解析)
适用场景
备份、文件共享(同一文件系统内)
跨文件系统、目录别名、版本切换

第五章:运维中的常见问题与排查

问题一:为什么删除了文件但磁盘空间没释放

# 排查步骤:
# 1. 确认是哪个分区
df -h /var/log

# 2. 找出所有被删除但仍被进程持有的文件
lsof +L1 /var/log

# 3. 如果有文件被持有,说明是进程持有文件描述符导致空间不释放
#    解决方案:正常关闭进程(重启服务)或 kill 进程

# 4. 如果 lsof 没有输出,检查是否有硬链接存在
#    (文件被硬链接到其他地方,链接数还没到 0)
find / -inum <inode号> 2>/dev/null

问题二:软链接断裂怎么快速修复

# 定期巡检脚本(检查 /data 下的软链接)
#!/bin/bash
# find_broken_links.sh
find /data -xtype l -ls
echo"Broken links found: $(find /data -xtype l | wc -l)"
# 返回断裂软链接列表和数量

# 自动修复脚本(如果软链接指向的路径已迁移)
# 假设 /data/app/v1.0 已经迁移到 /data/app/v1.1
# 需要更新所有指向 v1.0 的软链接
for link in $(find /data -xtype l -l); do
    target=$(readlink "$link")
if [[ "$target" == *"/v1.0"* ]]; then
        new_target="${target//\/v1.0/\/v1.1}"
echo"Updating $link$target -> $new_target"
        ln -sfn "$new_target""$link"
fi
done

问题三:软链接指向的路径包含空格或特殊字符

# 错误做法:空格会导致路径被截断
ln -s /data/my app /data/app
# ln: failed to create symbolic link '/data/app': No such file or directory

# 正确做法:给路径加引号
ln -s "/data/my app" /data/app

# 或者转义空格
ln -s /data/my\ app /data/app

问题四:删除软链接时误删了原文件

# 场景:rm -rf /data/app/* 删除了软链接指向的目录下的所有文件
# 但 /data/app 本身是软链接,如果 * 扩展包含了软链接本身...

# 结论:删除目录内容时,先确认哪些是软链接
ls -la /data/app/
# 如果看到 lrwxrwxrwx,说明是软链接

# 安全的删除方式:排除软链接
find /data/app -maxdepth 1 -! -type l -exec rm -rf {} \;

问题五:cp 和 scp 默认行为会破坏软链接

# cp 默认复制软链接指向的文件内容,而不是保留软链接本身
cp /data/backup.sql /tmp/backup_copy.sql
# /tmp/backup_copy.sql 是一个全新的独立文件
# 原软链接指向的 inode 和这个新文件没有关系

# 如果要保留软链接,用 -P 参数
cp -P /data/backup.sql /tmp/backup_copy.sql

# 如果要复制软链接本身(复制链接文件),用 -a 或 -d
cp -d /data/backup.sql /tmp/backup_copy.sql
# -d 等价于 --no-dereference --preserve=links

# scp 默认也会解引用
scp -o "PreferredAuthentications=publickey" /data/backup.sql user@remote:/tmp/
# 传到远端的是一个全新的文件,不是软链接

第六章:理解 inode耗尽问题

6.1 什么是 inode 耗尽

Linux 文件系统不仅有磁盘空间限制,还有 inode 数量限制。每个文件(即使是空文件)或目录都占用一个 inode。如果 inode 耗尽,即使磁盘还有空间,也无法创建新文件。

# 查看文件系统 inode 使用情况
df -i

# 输出示例:
# Filesystem      Inodes  IUsed   IFree IUse% Mounted on
# /dev/sda1      655360  345678  309682   53% /
# /dev/sdb1     1310720  654321  656399   50% /data

6.2 为什么会 inode 耗尽

大量小文件场景:每个文件占用一个 inode,即使文件内容只有几个字节。日志目录下有几十万个日志文件时容易出现。

# 统计某个目录下有多少个文件(影响 inode 使用)
find /var/log -type f | wc -l

# 查看每个目录的 inode 占用情况
for d in /var /etc /tmp /data; do
echo -n "$d: "
    find $d -type f | wc -l
done

6.3 inode 耗尽的表现

# 创建文件时报错
touch /data/newfile.txt
# touch: cannot touch '/data/newfile.txt': No space left on device

# 但 df -h 显示还有空间
df -h /data
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sdb1       500G   400G  100G  20% /data
#                                    ↑ 空间还有,但 inode 耗尽了

6.4 inode 耗尽的处理

# 1. 找到 inode 消耗大户
for dir in /var /tmp /data; do
echo"=== $dir ==="
    find $dir -type f | awk -F/ '{print $(NF-1)}' | sort | uniq -c | sort -rn | head -5
done

# 2. 清理不需要的文件(大量小日志文件)
find /var/log -name "*.log" -mtime +30 -type f | xargs rm -f

# 3. 如果经常遇到 inode 耗尽,在新建文件系统时指定更多 inode
# ext4 文件系统创建时指定 inode 数量
mkfs.ext4 -N 2621440 /dev/sdc1
# -N 指定 inode 数量

总结:链接的本质是引用计数

理解 Linux 链接的关键,是理解 inode 和目录项分离这个设计:

  • 硬链接:多个目录项(文件名)→ 同一个 inode → 引用计数
  • 软链接:独立 inode → 存储路径字符串 → 运行时解析

日常运维中遇到的大多数链接问题,都可以归结为对这个模型的误解:

  • 删除文件后空间不释放 → 进程持有文件描述符,inode 链接数还没到 0
  • 软链接断裂 → 目标文件被删除或移动,路径字符串找不到对应文件
  • 硬链接跨分区失败 → inode 是文件系统维度的,跨区无法引用
  • 硬链接不能链接目录 → 防止目录树出现环

记住这些规则,下次遇到"链接"相关的问题,你就能从原理出发推导原因,而不是靠搜索引擎碰运气。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 00:42:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/493931.html
  2. 运行时间 : 0.128121s [ 吞吐率:7.81req/s ] 内存消耗:4,677.94kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c499bb140df816edd66c44ccd56fb8d9
  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.000661s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000732s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000326s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000286s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000476s ]
  6. SELECT * FROM `set` [ RunTime:0.000196s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000624s ]
  8. SELECT * FROM `article` WHERE `id` = 493931 LIMIT 1 [ RunTime:0.003341s ]
  9. UPDATE `article` SET `lasttime` = 1783096978 WHERE `id` = 493931 [ RunTime:0.028295s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000389s ]
  11. SELECT * FROM `article` WHERE `id` < 493931 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000621s ]
  12. SELECT * FROM `article` WHERE `id` > 493931 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000374s ]
  13. SELECT * FROM `article` WHERE `id` < 493931 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001297s ]
  14. SELECT * FROM `article` WHERE `id` < 493931 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000923s ]
  15. SELECT * FROM `article` WHERE `id` < 493931 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003322s ]
0.129741s