linux下cat /dev/null > nohup.out命令把nohup.out文件清空,但是查硬盘容量是却毫无变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下cat /dev/null > nohup.out命令把nohup.out文件清空,但是查硬盘容量是却毫无变化相关的知识,希望对你有一定的参考价值。

如题,一个nohup.out两个多G,清空后确认了此文件大小为0,但是使用df -h查容量Used Avail Use%这三项依然没有任何变化,是怎么回事呢???

未释放磁盘空间原因:

在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被
打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是oracle的告警log文件
删除的时候文件应该正在被使用

解决方法

首先获得一个已经被删除但是仍然被应用程序占用的文件列表,如下所示:

[root@ticketb ~]# lsof |grep deleted
oracle 12639 oracle 5w REG 253,0 648 215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)
oracle 12639 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
oracle 12639 oracle 7u REG 253,0 0 36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
oracle 12639 oracle 8w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
oracle 12641 oracle 5w REG 253,0 648 215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)
oracle 12641 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)



oracle 23492 oracle 6w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
oracle 23492 oracle 7u REG 253,0 0 36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
oracle 23492 oracle 8w REG 253,0 16749822091 215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
oracle 23494 oracle 10u REG 253,0 0 36307 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstrmandb (deleted)

从输出结果可以看到/home/oracle/admin/dbticb/bdump/alert_dbticb.log还被使用,未被释放空间

如何让进程释放呢?

一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自动回收磁盘空间
我这个环境有很多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险很大

当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid
为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。
kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。
这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。应用程序对这种方
式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题
参考技术A 你可以在启动nohup命令时,用追加模式来指定。
比如一般的命令是:
nohup /opt/aa.sh > aa.log 2>&1 &
追加模式是:
nohup /opt/aa.sh >> aa.log 2>&1 &
也就是多了一个右尖括号。
最后 cat /dev/null > aa.log 就可以清除aa.log的内容,包括aa.log文件大小也重置了。
这种方法用于动态清除日志,优点是不需要停服务

linux下制作镜像文件

第一:制作iso镜像的方法:
把/dev/cdrom目录制作为镜像,名字为/root/rh1.iso
方法1:dd if=/dev/cdrom of=/root/rh1.iso
方法2:#cat /dev/cdrom >;/root/1.iso
方法3:mkisofs -r -o myiso.iso /dev/cdrom
方法4:cp -r /home/user name.iso
生成iso镜像以后,就可以用linux下的DVD进行刻录,刻录为DVD光盘了。

第二:刻录VCD和DVD的方法

现在dvd刻录机已经成为个人电脑的标配,所以大家一定对刻录软件都不陌生。Windows下面最有名的要数Nero了,最新的Nero 9在Amazon上要卖47.95欧元,而且这玩意的安装文件超过1G,运行速度当然也是很慢,简直是脑有恙。Nero也有Linux版,不过同样也不是 免费的。所以不用也罢。
Linux下面其实有很多好用并且免费的刻录软件,比如KDE下的专业级的k3b,Gnome下的gnomebaker以及nautilus集成的刻录功 能等等。不过今天要讲的是基于命令行的刻录软件,cdrecord以及growisofs。前者用来刻录cd,后者可以刻录dvd。这些软件的优点当然就 是体积超小,速度超快;缺点当然就是没有漂亮的界面,还需要手动输入一些命令。就看你怎么选择了。下面就来说说他们的基本用法。
首先安装它们:
Debian:
# apt-get install cdrtools dvd+rw-tools
Gentoo:
# emerge cdrtools dvd+rw-tools
如果你要制作一个ISO镜像的话,可以用mkisofs:
$ mkisofs -V LabelName -J -jcharset=utf8 -r -o /home/YourImage.iso /home/your-data-dir
加上参数J,是为了与Windows更好的兼容;如果要制作启动盘的话,可以加上参数G;参数o后面是输入文件;参数r和文件的权限有关。这样就把"/home/your-data-dir"目录做成了YourImage.iso。
刻录CD,需要用到的是cdrecord,首先找到你的刻录设备:
# cdrecord -scanbus
然后你会看到类似于下面的信息
scsibus1000:
1000,0,0 100000) ‘TSSTcorp‘ ‘CD/DVDW TS-H552U‘ ‘US04‘ Removable CD-ROM
1000,1,0 100001) *
1000,2,0 100002) *
1000,3,0 100003) *
1000,4,0 100004) *
1000,5,0 100005) *
1000,6,0 100006) *
1000,7,0 100007) *
其中1000,0,0就是我的刻录机,然后:
# cdrecord -v -dev=1000,0,0 /home/YourImage.iso
加上参数v可以显示刻录进程。参数dev后面加上刚才找到的刻录设备,最后面则是要刻录的文件,这样就搞定了。
如果要擦除光盘的话,可以用blank参数:
# cdrecord blank=type
其中blank的type可以为all或者fast。选all则擦出整个光盘,耗时较长。fast为快速擦除光盘,仅擦出PMA,TOC和pregap(不懂这些代表什么)
刻录DVD,需要用到的是growisofs,它其实是mkisofs的一个前端,使用是会自动调用mkisofs,所以刻录前不需要先做好iso文件:
# growisofs -dvd-compat -Z /dev/dvdrw -V LabelName -r -J -jcharset=utf8 /home/your-data-dir
有没有发现,它的参数其实和mkisofs基本一致。参数-dvd-compat会结束光盘,使光盘变的不能附加(对dvd-rw无效),这个选项会提供 更多的和dvd-rom驱动器的介质兼容性。参数-Z用来初始刻录会话;该参数可以用-M取代,作用是:追加一些数据到一个已有的dvd-rw上。再次注 意:在 DVD+RW 这种情况下,参数-dvd-compat将不能预防您添加数据。该参数后面接的就是刻录设备,通常是/dev/dvdrw。

以上是关于linux下cat /dev/null > nohup.out命令把nohup.out文件清空,但是查硬盘容量是却毫无变化的主要内容,如果未能解决你的问题,请参考以下文章

linux下/etc/fstab文件详解

为啥小弟我的linux分区下没有/dev/sda3

linux下vi命令和cat命令 用两个命令打开一个文件(/etc/services)看到的内容为啥不同?

在linux centos下怎么进入 /dev/sda1

linux 多路径软件在/dev/mapper/下生成的硬盘 可以通过修改/etc/fstab 挂载么 ?

Linux /dev下各种文件是何时挂载,怎么挂载的?