我对Unix很陌生。使用Solaris 10,我面临以下问题。
有一个大小为9.5G的大型日志文件。我尝试使用下面的命令来清空文件。
# cat /dev/null file_log.txt
通过这样做,我重新获得了文件系统上的空间,但是文件的大小仍然显示相同,而且还在增加。我认为一个进程仍在进入日志文件中。
有办法纠正文件大小吗?这会影响我的文件系统吗?
发布于 2014-07-28 23:50:31
cat /dev/null
是一个no,因为它完全没有输出。cp /dev/null file
同样毫无意义。
空白文件内容的一种更简单的方法是通过这种方式将null命令重定向到它:
: > file
甚至,对于大多数shell,只使用重定向而不指定任何命令:
> file
事实上,ls
报告的大小仍然很大,这只是由于编写过程中所寻求的预期的概念,即在编写之前文件的结尾应该是什么。因为在寻找点之前没有“什么”,这不应该伤人。唯一的风险是,您希望使用非稀疏文件感知工具来备份或复制受影响的文件。
请注意,重新启动写入过程不会“恢复”空间,因为文件将保持“空洞”。
如果您确实希望报告的文件大小为零,则需要在消除该文件之前停止(终止)写入过程。
发布于 2014-07-28 18:51:58
cat /dev/null file_log.txt
这只会使cat读取/dev/null
,并立即读取file_log.txt
,并将结果输出到屏幕stdout
。这根本不会删除任何东西。
如果您想要测试,请使用cat /dev/null non_existent_file
,您将看到它出错了。
截断文件的正确方法是使用shell重定向器或任何类型的编辑器来删除行。你想做的是:
cat /dev/null > file_log.txt
这说明了第一种方法。
https://unix.stackexchange.com/questions/147044
复制相似问题