Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在do”之后设置虚拟文件大小;cat/dev/null>;logfile.log";_Linux_Bash_Shell_Unix_Suse - Fatal编程技术网

Linux 在do”之后设置虚拟文件大小;cat/dev/null>;logfile.log";

Linux 在do”之后设置虚拟文件大小;cat/dev/null>;logfile.log";,linux,bash,shell,unix,suse,Linux,Bash,Shell,Unix,Suse,我需要清除日志文件的内容。然后我尝试使用“cat/dev/null>logfile”。 事实上,它是有效的! 但是有一种奇怪的行为我不理解。清除文件后,文件大小立即显示为0字节,但经过一次修改后,大小恢复到以前的值。用“du”可以看出这个值是错误的。 我做得对吗?我怎样才能纠正它 我的猫命令: jorplov@sg0080b:/applications/fsc/base/logs> ls -lah -rw-r--r-- 1 jorplov svcusr 10G 2013-11-15 05

我需要清除日志文件的内容。然后我尝试使用“cat/dev/null>logfile”。 事实上,它是有效的! 但是有一种奇怪的行为我不理解。清除文件后,文件大小立即显示为0字节,但经过一次修改后,大小恢复到以前的值。用“du”可以看出这个值是错误的。 我做得对吗?我怎样才能纠正它

我的猫命令:

jorplov@sg0080b:/applications/fsc/base/logs> ls -lah
-rw-r--r-- 1 jorplov svcusr  10G 2013-11-15 05:18 sg0080b_jorplov_startup.log


jorplov@sg0080b:/applications/fsc/base/logs> df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg00-fsc  2.0G  1.8G   90M  96% /applications/fsc


jorplov@sg0080b:/applications/fsc/base/logs> cat /dev/null > sg0080b_jorplov_startup.log


jorplov@sg0080b:/applications/fsc/base/logs> df -h .
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg00-fsc  2.0G  365M  1.6G  20% /applications/fsc


jorplov@sg0080b:/applications/fsc/base/logs> ls -lah
total 20K
-rw-r--r-- 1 jorplov svcusr    0 2013-11-15 05:25 sg0080b_jorplov_startup.log
几秒钟后:

jorplov@sg0080b:/applications/fsc/base/logs> ls -lah
-rw-r--r-- 1 jorplov svcusr  10G 2013-11-15 05:26 sg0080b_jorplov_startup.log


jorplov@sg0080b:/applications/fsc/base/logs> stat sg0080b_jorplov_startup.log
  File: `sg0080b_jorplov_startup.log'
  Size: 10718153084     Blocks: 32         IO Block: 4096   regular file
Device: fd03h/64771d    Inode: 82380       Links: 1
Access: (0644/-rw-r--r--)  Uid: (30013/ jorplov)   Gid: (21459/  svcusr)
Access: 2013-11-15 05:34:00.000000000 +0100
Modify: 2013-11-15 05:34:12.000000000 +0100
Change: 2013-11-15 05:34:12.000000000 +0100
第二次尝试:

jorplov@sg0080b:/applications/fsc/base/logs> > sg0080b_jorplov_startup.log


jorplov@sg0080b:/applications/fsc/base/logs> stat sg0080b_jorplov_startup.log
  File: `sg0080b_jorplov_startup.log'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: fd03h/64771d    Inode: 82380       Links: 1
Access: (0644/-rw-r--r--)  Uid: (30013/ jorplov)   Gid: (21459/  svcusr)
Access: 2013-11-15 05:34:00.000000000 +0100
Modify: 2013-11-15 05:46:55.000000000 +0100
Change: 2013-11-15 05:46:55.000000000 +0100


jorplov@sg0080b:/applications/fsc/base/logs> ls -lah
-rw-r--r-- 1 jorplov svcusr    0 2013-11-15 05:46 sg0080b_jorplov_startup.log
再过几秒钟:

jorplov@sg0080b:/applications/fsc/base/logs> stat sg0080b_jorplov_startup.log
  File: `sg0080b_jorplov_startup.log'
  Size: 10718153546     Blocks: 32         IO Block: 4096   regular file
Device: fd03h/64771d    Inode: 82380       Links: 1
Access: (0644/-rw-r--r--)  Uid: (30013/ jorplov)   Gid: (21459/  svcusr)
Access: 2013-11-15 05:34:00.000000000 +0100
Modify: 2013-11-15 05:53:12.000000000 +0100
Change: 2013-11-15 05:53:12.000000000 +0100


jorplov@sg0080b:/applications/fsc/base/logs> ls -lah
-rw-r--r-- 1 jorplov svcusr  10G 2013-11-15 05:53 sagm061_jorplov_startup.log


jorplov@sg0080b:/applications/fsc/base/logs> du -h sagm061_jorplov_startup.log
16K     sagm061_jorplov_startup.log

这是由于进程正在将文本写入此日志文件

如果进程正在这样写入日志:

command > log.txt
从外部截断日志,然后,只要通过
命令将下一行添加到日志中,它将在上一个文件指针位置后写入日志,并使用空字节填充文件
\0
,从开始到该文件指针位置。因此,日志文件的大小将变为截断日志文件之前的大小

解决方案:

但是,如果日志被写为:

command >> log.txt

该日志将以“附加模式”写入在此模式下,在写入下一行之前,它将始终将文件指针移动到文件末尾,这将避免这种情况。您可以随时截断日志文件。

我刚刚发现我有一个Java进程正在编写此文件:
jorplov@sg0080b:/applications/fsc/base/logs>fuser sg0080b_jorplov_startup.log jorplov1999年9月10日?04:17:10/usr/java/latest/bin/javajorplov@sg0080b:/applications/fsc/base/logs>lsof | grep sg0080b_jorplov_startup.log java 19979 jorplov 1w REG 253,3 10718154932 82380/applications/fsc/base/logs/sg0080b_jorplov_startup.log
如果您通过java命令行中的
>
更改
,它将表现良好。将
cat/dev/null
放在
cat/dev/null>某物中,简单地使用
>某物
我也试过了,但得到了相同的结果(请参见上面代码的“secound try”)。似乎编写文件的过程就是这样做的。当然,我的评论并不是作为一个答案,而是改进脚本的一般提示@阿努巴瓦的回答是正确的,这只是一个旁注。