zoukankan      html  css  js  c++  java
  • Linux基础命令:rm

    linux下rm命令使用详解---linux删除文件或目录命令

    用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是断开了链接,原文件保持不变。

    rm命令的一般形式为:rm [选项]... 目录... 删除指定的<文件>(即解除链接)。
    
    -d      --directory    删除可能仍有数据的目录 (只限超级用户)
    
    -f      --force          略过不存在的文件,不显示任何信息,强制删除
    
    -i      --interactive 进行任何删除操作前必须先确认
    
    -r/R --recursive    同时删除该目录下的所有目录层
    
    -v      --verbose     详细显示进行的步骤
    
              --help            显示此帮助信息并离开
    
             --version      显示版本信息并离开

    rm删除文件原理

    文件删除原理: Linux通过文件link的数量控制文件的删除,只有当一个文件不存在任何link的时候且没有程序调用的时候,文件才会被真正删除。

    就rm命令而言,就是减少磁盘引用计数i_link(文件到inode的链接数量);inode节点指向存储数据的block,删除文件并不是清除inode和block,而是将文件的硬链接为0,引用计数为0 才能删除文件

    注:如果有新的数据存储或者系统通过类似fsck命令做磁盘检查的时候,被删除的数据块和目录会被释放,数据无法找回

    文件删除的条件

    i_nlink  文件的硬链接数量,磁盘的引用计数器
    
    i_count 内存引用计数(一个文件被几个程序调用,有一个程序使用i_count + 1 )
    
    i_link = 0 && i_count =0
    
    删除一个文件,也是删除上一级目录的block里面的文件名

    rm相关的问题答疑

    问题1:当执行了删除操作后,ls 无法查找到这个文件,但是调用这个删除文件的进程却正常执行,依然能够读取和写入文件内容?
    
    答案: 因为rm只是减少了i_nlink,如果没有其他的链接了[即i_link=0】,但由于文件依然被进程使用,所以即时执行了rm命令,系统并未真正的删除。
    
    只有当i_link和i_count==0时候,系统才会整正删除这个文件,也就是删除文件还需要解除进程对该文件的调用才行。
    问题2:当文件没有被调用,但是执行了rm命令,删除后的文件还能找回来么?
    
    答案:rm只是减少了i_link的数量,实际就是将文件的inode的链接删除了,但是并没有删除文件实体(block数据块),如果停止机器工作,还是可以找回数据的。如果此时继续有数据写入,当新数据就可能会被分配到被删除的数据的block数据块,此时文件就会被真正的回收。
    问题3:被进程占用的文件能否被删除?
    
    答案: 能
    问题4:如何找回没有链接指向但被进程占用的文件?
    
    答案:lsof -c 'vim'   根据后台占用文件的命令查找

    删除范例

    删除前逐一询问确认 :
    rm -i text.txt
    
    将 Finished 子目录及子目录中所有档案删除 :
    rm -r Finished
    
    将 Finished 子目录及子目录中所有档案删除,并且不用--确认 :
    
    rm -rf Finished
  • 相关阅读:
    UVALive 3938 一道被我WA了的线段树
    批量删除Zen Cart 无图片商品
    zencart加大数据表字段长度
    CSS字体中英文名称对照表
    zencart产品批量表上传后SEO三要素状态以及特价时间修改
    Linux 文件系统
    VMware Tools 安装步骤
    IDEA安装阿里规约插件
    IDEA 中无法使用 EL 表达式
    Redis主从复制
  • 原文地址:https://www.cnblogs.com/wzy23/p/11376343.html
Copyright © 2011-2022 走看看