加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – bash中超出文件大小限制

发布时间:2020-12-15 18:36:04 所属栏目:安全 来源:网络整理
导读:我在SUSE 10服务器,内核2.6.16.60,ext3文件系统上尝试过这个 shell脚本 脚本有这样的问题: cat file | awk '{print $1" "$2" "$3}' | sort -n result 文件的大小约为3.2G,我得到这样的错误信息: 超出文件大小限制 在这个shell中,ulimit -f是无限的 在我将
我在SUSE 10服务器,内核2.6.16.60,ext3文件系统上尝试过这个 shell脚本

脚本有这样的问题:

cat file | awk '{print $1" "$2" "$3}' | sort -n > result

文件的大小约为3.2G,我得到这样的错误信息:
超出文件大小限制

在这个shell中,ulimit -f是无限的

在我将脚本更改为此之后

cat file | awk '{print $1" "$2" "$3}' >tmp
sort -n tmp > result

问题消失了.

我不知道为什么,有人可以帮我解释一下吗?

管道版本需要更多临时文件.
您可以使用strace实用程序快速检查.

管道版本使用快速爆炸的临时文件数量:

for i in {1..200000} ; do echo $i ; done |strace sort -n |& grep -e 'open.*/tmp/'
open("/tmp/sortb9Mhqd",O_RDWR|O_CREAT|O_EXCL,0600) = 3
open("/tmp/sortqKOVvG",0600) = 3
open("/tmp/sortb9Mhqd",O_RDONLY)       = 3
open("/tmp/sortqKOVvG",O_RDONLY)       = 4

文件版本不使用同一数据集的临时文件.
对于更大的数据集,它使用极少的临时文件.

for i in {1..200000} ; do echo $i ; done >/tmp/TESTDATA ; strace sort -n /TMP/TESTDATA |& grep -e 'open.*/tmp/'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读