红联Linux门户
Linux帮助

Linux文件删除

发布时间:2016-01-13 10:01:07来源:linux网站作者:卡通人物nnn

在工作中我们经常会遇见磁盘达到警戒线,提示报警之类的信息。然后我们进入系统对不必要的文件进行删除。但是我们发现有些时候我们删除了文件但是磁盘空间资源却没有被释放,这是什么原因呢?


提前准备

(本机环境CeontOS 6.5 64 bit,IP:10.1.38.20)


1、linux httpd 安装

[root@zhang~]# yum installhttpd -y

………………        #省略安装详情

[root@mode-6conf]# ll/etc/init.d/httpd    # 如果安装成功,那么会正常显示

-rwxr-xr-x1 root root 3371 Aug 25 01:53 /etc/init.d/httpd


2、启动httpd web 服务

[root@mode-6conf]# /etc/init.d/httpd start

Startinghttpd: httpd: Could not reliably determine the server's fully qualified domainname, using mode-6.5 for ServerName  [  OK  ]

浏览器正常访问:

Linux文件删除


3、创建一个小的文件系统用于存放日志

[root@mode-6~]# dd if=/dev/zero of=/dev/sdc bs=8k count=10     #80k 大小

10+0records in

10+0records out

81920bytes (82 kB) copied, 0.00104354 s, 78.5 MB/s

[root@mode-6~]# ls -l/dev/sdc      # 查看是否创建成功

-rw-r--r--1 root root 81920 Nov 25 09:23 /dev/sdc

[root@mode-6~]# mkfs -t ext3/dev/sdc     # 文件系统格式化

mke2fs1.41.12 (17-May-2010)

/dev/sdcis not a block special device.

Proceedanyway? (y,n) y   # 选择是

Filesystemlabel=

OStype: Linux

Blocksize=1024 (log=0)

Fragmentsize=1024 (log=0)

Stride=0blocks, Stripe width=0 blocks

16inodes, 80 blocks

4blocks (5.00%) reserved for the super user

Firstdata block=1

1block group

8192blocks per group, 8192 fragments per group

16inodes per group

Writinginode tables: done                          

Filesystemtoo small for a journal

Writingsuperblocks and filesystem accounting information: done

Thisfilesystem will be automatically checked every 37 mounts or

180days, whichever comes first.  Use tune2fs-c or -i to override.

[root@mode-6~]# mkdir/app/log -p      # 创建新的目录用于存放httpd日志

[root@mode-6~]# mount/dev/sdc /app/log# 设备挂载

mount:/dev/sdc is not a block device (maybe try `-o loop'?)

[root@mode-6~]# mount-o loop  /dev/sdc /app/log/ #失败,再次挂载

[root@mode-6~]# df -h    # 查看磁盘使用率信息

Filesystem      Size Used Avail Use% Mounted on

/dev/sda3       7.2G 2.9G  4.0G  42% /

tmpfs           242M     0 242M   0% /dev/shm

/dev/sda1       194M  34M  151M  19% /boot

/dev/sdc         73K  14K   55K  21% /app/log


4、修改httpd 的日志路径

注意:修改前备份(必须的),以免造成文件损坏

[root@mode-6conf]# cd/etc/httpd/conf

[root@mode-6conf]# ll

total88

-rw-r--r--1 root root 34467 Nov 25 09:34 httpd.conf

-rw-r--r--1 root root 13139 Aug 25 01:53 magic

[root@mode-6conf]# cp  httpd.conf  httpd.conf.ori

[root@mode-6conf]# vimhttpd.conf

修改前

Linux文件删除

修改后

Linux文件删除


5、重启httpd 服务

[root@mode-6log]# pwd     # 已经在 /app/log 目录

/app/log

[root@mode-6log]# ll      # 日志路径已修改,但服务未重启

total12

drwx------2 root root 12288 Nov 25 09:25 lost+found

[root@mode-6~]# /etc/init.d/httpd restart     # 重启服务

Stoppinghttpd:  [  OK  ]

Startinghttpd: httpd: Could not reliably determine the server's fully qualified domainname, using mode-6.5 for ServerName  [  OK  ]

[root@mode-6log]# ll                      # 重启后查看,存在日志信息

total12

-rw-r--r--1 root root     0 Nov 25 10:23 access_log

drwx------2 root root 12288 Nov 25 09:25 lost+found


6、写满日志信息

可以通过前台不断的访问,或者使用程序脚本访问

1、前台访问,后台的日志信息

[oldboy@mode-6log]$ tail -Faccess_log

Linux文件删除

2、写脚本自己访问【可以快速占满磁盘空间】

[oldboy@mode-6~]$ for n in`seq 100000`; do curl -s 10.1.38.20 > /dev/null ; done

3、查看磁盘信息

[root@mode-6log]# df -h

Filesystem      Size Used Avail Use% Mounted on

/dev/sda3       7.2G 2.9G  4.0G  42% /

tmpfs           242M     0 242M   0% /dev/shm

/dev/sda1       194M  34M  151M  19% /boot

/dev/sdc         73K  73K     0 100% /app/log


文件删除原理

Linux文件删除

上图就是文件删除原理。总的来说需要满足以下条件。

1、文件硬链接数为0。就是删除文件源文件和硬链接文件

2、没有进程占用该文件。引用计数为0

这样就可说你已经删除了文件,但是可以恢复。如果是彻底删除的话那么要满足:

3、删除的文件被覆盖或者文件系统回收。这是就彻底删除了,怎么也找不回来了。


文件删除1

第一种文件删除是大家都知道的,就是直接删除。

[root@mode-6log]# ll

total71

-rw-r--r--1 root root 59316 Nov 25 11:09 access_log

drwx------2 root root 12288 Nov 25 09:25 lost+found

[root@mode-6log]# rm -f  access_log

[root@mode-6log]# ll

total12

drwx------2 root root 12288 Nov 25 09:25 lost+found

[root@mode-6log]# df -h

Filesystem      Size Used Avail Use% Mounted on

/dev/sda3       7.2G 2.9G  4.0G  42% /

tmpfs           242M     0 242M   0% /dev/shm

/dev/sda1       194M  34M  151M  19% /boot

/dev/sdc         73K  73K     0 100% /app/log

很明显,虽然文件删了但是磁盘空间却没有被释放。

根据上述原因得出:有进程正在读取该文件。

这时你只需要重启服务即可,如果重启服务还没有释放磁盘空间资源,那么就可能是你有进程正在读取这文件。如使用了如下命令。

[oldboy@mode-6log]$ tail -f  access_log


文件删除2

第一种方法虽然简单,但是如果是在生产环境,并且当时还是白天。这时你不可能顺便重启服务,因为后果可能会很严重。

那么这时我们应该如果清除这些日志信息呢。不停止服务,并且清除这些文件信息,释放磁盘空间资源。操作如下:

[root@mode-6log]# ll

total12

-rw-r--r--1 root root 59316 Nov 25 11:19 access_log

drwx------2 root root 12288 Nov 25 09:25 lost+found

[root@mode-6log]# df -h

Filesystem      Size Used Avail Use% Mounted on

/dev/sda3       7.2G 2.9G  4.0G  42% /

tmpfs           242M     0 242M   0% /dev/shm

/dev/sda1       194M  34M  151M  19% /boot

/dev/sdc         73K  73K     0 100% /app/log

其实也简单,只需要一个命令即可

[root@mode-6log]# > access_log  或者 echo '' >access_log    ★★★★★

[root@mode-6log]# df -h

Filesystem      Size Used Avail Use% Mounted on

/dev/sda3       7.2G 2.9G  4.0G  42% /

tmpfs           242M     0 242M   0% /dev/shm

/dev/sda1       194M  34M  151M  19% /boot

/dev/sdc         73K  15K   54K  22% /app/log

这样就行了。简单吧!这样也不用重启服务。

所以遇见这种问题,不要先想着直接删除,先看看有没有服务会使用这个文件。

删除原则,如果文件修改日期是在今天之前的可以直接删除;如果修改日期是今天,那么最好使用第二种删除方法。防止出现删除后没有释放空间资源,到时候就只有重启服务了。


没想到写了用了两个半小时才搞定。超出预计时间啊!


Linux文件删除注意事项:http://www.linuxdiyf.com/linux/17285.html

Linux下数据文件删除文件系统空间不释放的问题:http://www.linuxdiyf.com/linux/17192.html

Linux知识:/var/spool/clientmqueue下垃圾文件删除:http://www.linuxdiyf.com/linux/11656.html