Linux系统支持对文件大小进行限制,可通过用户级配置、文件系统级配置等不同维度实现管控,适配不同的使用场景需求。

用户级文件大小限制
Linux的ulimit命令可以限制当前shell会话下用户能创建的文件大小,默认单位是块,通常1块等于512字节。这种限制仅对当前shell及其启动的子进程生效,退出shell后配置会失效。
查看当前文件大小限制
执行以下命令可以查看当前用户允许创建的最大文件大小:
# 查看软限制,单位为块 ulimit -f # 查看硬限制,单位为块 ulimit -Hf
临时修改文件大小限制
如果需要临时调整当前会话的文件大小限制,可以使用以下命令,其中数字为允许的最大块数:
# 设置软限制为10240块,即10240*512=5242880字节,约5MB ulimit -f 10240 # 设置硬限制为20480块,约10MB ulimit -Hf 20480
注意普通用户只能将软限制调整为不超过硬限制的值,只有root用户可以修改硬限制。
永久生效配置
如果需要让限制永久生效,可以将配置写入用户的shell配置文件,比如~/.bashrc或者/etc/security/limits.conf:
# 编辑limits.conf文件,添加以下内容,限制test用户的最大文件大小为10MB # 格式:用户名 限制类型 限制项 限制值 # 限制值单位为KB test hard fsize 10240 test soft fsize 5120
文件系统级磁盘配额限制
如果用户级限制无法满足多用户场景下的文件大小管控需求,可以使用文件系统的磁盘配额功能,该功能可以限制用户或用户组在指定分区上的总磁盘使用量,包括文件大小的总和。
启用磁盘配额
首先需要确保文件系统支持配额,以ext4文件系统为例,修改/etc/fstab中对应分区的挂载选项,添加usrquota,grpquota:
# 原挂载配置 /dev/sda1 /home ext4 defaults 0 0 # 修改后配置 /dev/sda1 /home ext4 defaults,usrquota,grpquota 0 0
重新挂载分区后,执行以下命令生成配额数据库文件:
# 重新挂载/home分区 mount -o remount /home # 生成用户配额数据库 quotacheck -cug /home # 启用配额 quotaon /home
配置用户配额
使用edquota命令为用户配置配额,执行后会打开编辑界面:
# 为test用户配置配额 edquota -u test
编辑界面内容如下,其中blocks表示已使用的块数,soft是软限制,hard是硬限制,单位为KB:
Disk quotas for user test (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sda1 1024 5120 10240 100 0 0
设置完成后,test用户在/home分区下所有文件的总大小不能超过10MB,超过软限制会有警告,超过硬限制会无法写入新数据。
两种限制方式的对比
以下是两种限制方式的核心差异对比:
| 限制方式 | 限制范围 | 生效周期 | 适用场景 |
|---|---|---|---|
| ulimit用户级限制 | 单个shell会话下创建的单文件大小 | 临时或永久(需配置文件) | 临时测试、单会话下的单文件管控 |
| 磁盘配额限制 | 用户/组在指定分区的所有文件总大小 | 永久生效 | 多用户服务器、需要管控总存储量的场景 |
注意事项
- ulimit的限制仅对当前shell生效,如果是通过服务启动的进程,需要在服务启动脚本中配置ulimit参数才能生效。
- 磁盘配额仅对配置了配额的分区生效,不同分区的配额配置相互独立。
- 修改配额配置后,需要执行
quotaoff再执行quotaon才能生效。 - root用户默认不受ulimit和磁盘配额的限制,需要单独配置才能对root用户生效。
通过上述两种方式,Linux系统可以灵活实现对文件大小的不同维度限制,用户可以根据实际使用场景选择合适的配置方案。