rm: 能够备份,尽可能不要删除,比删除更好的是重命名 -->只删除文件连接,重启、从新写入后回收html
删除文件时,使用绝对路径或者进入到目标路径下后使用删除命令 –> 禁止使用rm –rf ./XXX文件【少个点就是根目录了】node
-r : 删除文件夹shell
-f : 强制删除文件vim
文件删除原理: Linux经过文件link的数量控制文件的删除,只有当一个文件不存在任何link的时候且没有程序调用的时候,文件才会被真正删除。函数
就rm命令而言,就是减小磁盘引用计数i_link(文件到inode的连接数量);inode节点指向存储数据的block,删除文件并非清除inode和block,而是将文件的硬连接为0,引用计数为0 才能删除文件spa
注:若是有新的数据存储或者系统经过相似fsck命令作磁盘检查的时候,被删除的数据块和目录会被释放,数据没法找回htm
文件删除的条件:blog
i_nlink 文件的硬连接数量,磁盘的引用计数器进程
i_count 内存引用计数(一个文件被几个程序调用,有一个程序使用i_count + 1 )ip
i_link = 0 && i_count =0
删除一个文件,也是删除上一级目录的block里面的文件名
问题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' 根据后台占用文件的命令查找
[root@localhost omc]# touch hhh.txt [root@localhost omc]# vim hhh.txt & [root@localhost omc]# rm hhh.txt [root@localhost omc]# lsof -c 'vim' | grep hhh.txt vim 3385 root 4u REG 8,2 4096 271298 /home/omc/.hhh.txt.swp
删除某个文件夹: -r
rm -rf /home/omc/last.txt
自定义回收站功能: 定义一个函数,将文件移动到指定目录;同时别命名rm命令便可
myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; } alias rm='myrm' # $@: 这个程序的全部参数,做为一个i总体传递、