当我删除通过输入重定向使用的文件时会发生什么?

时间:2012-04-05 15:45:39

标签: linux postgresql

在linux上,我使用psql和输入重定向操作符将文件加载到数据库中。我想删除该文件,以释放一些磁盘空间。这会干扰负载吗?

psql mydatabase < myfile.sql &
rm myfile.sql

2 个答案:

答案 0 :(得分:3)

psql完成之前,文件实际上不会从磁盘中删除。它将从目录中删除,因此不会出现,但文件将保留在磁盘上(使用空间),直到操作完成。

答案 1 :(得分:1)

在linux(以及大多数unix变体)中删除进程当前保持打开的文件将导致操作系统删除目录条目,但将文件本身保留在磁盘上,直到保持文件打开的最后一个进程关闭它为止,因此进程使用该文件可以愉快地工作,好像什么也没发生。

所以(1)你的脚本运行幸运巧合(shell在设置重定向之前也不会删除文件),以及(2)在psql完成使用之前尝试删除文件实现的很少,因为文件仍会占用磁盘空间,直到psql完成。

你可能想做的是:

(psql mydatabase < myfile.sql && rm myfile.sql) &

这就像在后台生成一个子shell,运行psql命令,返回后删除myfile.sql

&&表示“运行左侧,只有成功(读取:返回退出状态0)才运行右侧”。这是一个常见的shell习语。