Linux命令五分钟

《其实你不懂wget的心-04》

本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为rocrocket。

为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。

===

[正文开始]

系列文章
《其实你不懂wget的心-01》
《其实你不懂wget的心-02》
《其实你不懂wget的心-03》

使用wget时,会遇到各种突发事件。今天来讲一个。

一个800MB的大文件,在远程用wget下载,到一半时,文件被更名、被删除、被移动了,wget会发现么? 它会如何抱怨?还是傻傻地顺序读下去,直到读完800MB为止?(你可以随便猜,但真相只有一个…呵呵)

第一步:创建大文件

$ dd if=/dev/zero of=roc-big-file  bs=8192 count=100000

其中if是数据输入源,of是数据输出目标,bs表示每次读写的缓冲区字节数,count是要读取多少次bs。

这条命令就是用来生成一个大小接近800MB的文件,命名为roc-big-file。

第二步:从另一台机器使用wget进行下载,限速在20k吧,要是不限速,刷刷几下就下完了,都来不及测试了该。呵呵

$ wget –limit-rate=20k ftp://yourdomain:/home/wupengchong/test/wgettest/roc-big-file

第三步:这步就是要搞点恶作剧了。我们先更名!

$ mv roc-big-file roc-big-file1

结果没问题,wget继续稳定运行。

第四步:继续恶作剧。我们移动它。

$ mkdir tmpdir

$ mv roc-big-file1 tmpdir/

没问题,稳定运行。

第五步:我们删除它!(拼了,真不信wget能这么鲁棒)

$ cd tmpdir/

$ rm -f roc-big-file1

继续稳定运行…. 只是你看不到这个文件了,从文件所在文件夹的大小也看不到变化了。

结论:

只要不是网络故障、远程文件系统故障或硬件故障,wget的鲁棒性是值得相信的。

其实,真正理解Linux文件系统的同学会知道,这并不是wget的鲁棒性,而是Linux文件系统的鲁棒性保证的。

over~

8条评论

  1. 这种现象windows 下其实我也碰到过。
    好像是删除什么文件的时候,提示被占用还是什么的。
    但等于占用它的程序退出了。。
    文件也还是删除了。。

  2. 瞎扯,误导人。这跟他没关系。web server 以经打开那个文件描述符了,这个主要取决于服务器。

  3. 因为这个被打开的文件句柄一直被持有。你怎么移动或删除都没事(没有被真正删除)。

  4. 是因为web server打开了文件之后引用的只是inode,不管文件移动到哪里,inode都不会改变的吧。哪怕是unlink,打开的引用计数不为0文件都还是存在的,只是从目录索引里删除了而已。
    另一方面,如果在中途把文件truncate了又会怎样?append了又会怎样?
    再猜测,如果是windows下的web server,估计移动删除之类的操作都无法进行,提示“文件已被其他程序打开”云云……

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *