linux不支持直接限制单个目录下文件大小,需通过磁盘配额、tmpfs挂载、inotify监控或selinux/apparmor等方案实现,核心是控制用户、位置与大小三维度。

Linux 本身不支持直接对“某个目录”限制单个文件大小,也不提供 per-directory 的文件尺寸上限机制。所谓“限制用户在特定目录下创建的文件大小”,实际需结合文件系统特性、内核级控制或应用层拦截来实现,核心思路是:把限制落在“谁写”(用户/组)、“写在哪”(挂载点)、“能写多大”(配额或策略)三个维度上。
用磁盘配额(quota)按用户/组限制总空间,间接控单文件生成量
这是最成熟、内核原生支持的方式,适用于用户在某一分区(如 /home 或 /srv/data)下所有写入行为的总量控制——虽然不能禁止单个超大文件,但可防止其耗尽空间。
- 确认目标分区已启用 quota:检查
/etc/fstab中对应行是否含usrquota或grpquota;若无,添加后执行sudo mount -o remount /mount/point - 初始化配额数据库:
sudo quotacheck -cug /mount/point(生成aquota.user和aquota.group) - 为用户设硬限(例如 500MB):
sudo edquota -u username,在编辑器中填入bhard = 512000(单位是 KB) - 启用配额:
sudo quotaon /mount/point
当用户写入导致超出硬限时,cp、dd 等操作会报 Disk quota exceeded 并失败——这自然阻止了超限文件的完成写入。
用 overlayfs 或 bind mount + tmpfs 实现“伪隔离”目录并设内存上限
若目标是临时性、轻量级场景(如 CI 构建缓存、上传临时区),可将目录挂为 tmpfs,利用内存文件系统的 size 限制模拟“单目录容量封顶”:
- 确保目标路径为空:
sudo mkdir -p /tmp/upload-limited && sudo chown user:group /tmp/upload-limited - 挂载带大小限制的 tmpfs:
sudo mount -t tmpfs -o size=2G,uid=1001,gid=1001,mode=755 none /tmp/upload-limited - 用户在此目录下创建任意文件,总和不可超过 2GB;超出时写操作返回
No space left on device
⚠️ 注意:tmpfs 数据在重启或卸载后丢失,且不支持硬链接、设备文件等,仅适合非持久化场景。
用 inotify + 脚本实时监控并拦截超大文件写入
若必须精确控制“单个文件大小”,且无法改动挂载方式,可用事件监听+主动干预:
- 安装
inotify-tools:sudo apt install inotify-tools(Debian/Ubuntu)或yum install inotify-tools(RHEL/CentOS) - 运行后台脚本监听新建/写入事件:
inotifywait -m -e create,attrib /path/to/dir --format '%w%f' | while read file; do<br> [ -f "$file" ] && [ $(stat -c "%s" "$file" 2>/dev/null || echo 0) -gt 104857600 ] && { rm -f "$file"; logger "Blocked oversized file: $file"; }<br>done
(示例中拦截大于 100MB 的文件) - 该方法依赖用户无 root 权限,且需确保脚本常驻运行;适合低频、高敏感度场景,不推荐用于高 I/O 目录。
用 SELinux 或 AppArmor 做策略级限制(高级方案)
在强制访问控制系统启用前提下,可编写策略禁止某用户域调用 write 超过阈值的系统调用——但这属于深度定制,需日志分析、策略编译与严格测试,一般仅用于合规性要求极高的环境,不作为通用推荐。











