Linux如何彻底删除文件与文件夹?实例教程

发布时间:2019-08-26编辑:脚本学堂
本文介绍了linux下彻底删除文件与文件夹的方法,在linux中删除文件与文件夹可以直接使用rm就可以删除了,彻底删除文件或文件夹要使用shred命令,需要的朋友参考下。

linux删除目录可以用rmdir命令,如果目录非空,使用rm -rf命令就可以。
直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字
删除目录、文件 rm(remove)
功能说明:删除文件或目录。
语法:rm [-dfirv][--help][--version][文件或目录...]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。

参数:
 

-d或–directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或–force  强制删除文件或目录。
-i或–interactive  删除既有文件或目录之前先询问用户。
-r或-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose  显示指令执行过程。

有关 rm命令 的用法参考:

1,linux删除文件夹
de>rm -rf fileNamede>
-删除文件夹实例:
 

复制代码 代码示例:
rm -rf /var/log/httpd/access

将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
注意:使用这个rm -rf的时候一定要格外小心,linux没有回收站的。

2,linux删除文件
de>rm -f fileNamede>
注意,使用 rm -rf时一定要格外小心,linux没有回收站的。


第二部分,linux中如何删除指定文件之外的其他文件?

一、Linux下删除文件和文件夹常用命令:

删除文件: rm file
删除文件夹: rm -rf dir
注意, rmdir 只能够删除 空文件夹。

二、删除制定文件(夹)之外的所有文件呢?

1、方法1,比较麻烦的做法是:
复制需要保留的文件到其他文件夹,然后将该目录删除, 然后将需要保留的移动 回来。
 

mv keep ../ #保留文件(夹) keep
rm -rf * #删除当前文件夹里的所有文件
mv ../keep ./ #将原来的东西移动回来
 

2、方法2,需要在当前文件夹中进行:
 

rm -rf !(keep) #删除keep文件之外的所有文件
rm -rf !(keep1 | keep2) #删除keep1和keep2文件之外的所有文件

第三部分,Linux中彻底删除文件

shred彻底删除文件的方法:
 

复制代码 代码示例:
$ shred -u file
 

shred会用一些随机内容覆盖文件所在的节点和数据块,并删除文件(-u参数)。
如果想清除的更彻底一点可以加-z 参数,意思是先用随机数据填充,最后再用0填充。
 

复制代码 代码示例:
$ shred -u -z file
 

另外shred还可以清除整个分区或磁盘,比如想彻底清除/dev/sdb1分区的内容可以这样:
 

复制代码 代码示例:
$ shred /dev/sdb1 (注意不要加-u参数)
 

shred的详细参数:
 

-f, --force 更改权限允许写入(如有必要)
-n, --iterations=N 重写N次,默认为3次
--random-source=FILE 从指定文件读取数据
-s, --size=N 将文件粉碎为固定大小 (可使用后缀如K、M、C等)
-u, --remove 重写后截短并移除文件
-v, --verbose 显示进度
-z, --zero - add 用0覆盖数据
–help 显示帮助
–version 显示版本信息

第四部分,如何解决Linux下删除文件恢复?
 
Linux下删除文件并不是真实的删除磁盘分区中的文件,而是将文件的inode节点中的扇区指针清除,同时释放这些数据对应的数据块,当释放的数据块被系统重新分配时,那些被删除的数据就会被覆盖,所以误删除数据后,应马上卸载文件所在的分区。

每个文件有inode和block组成,inode是文件系统组成的最基本单元,它保存着文件的基本属性(大小、权限、属主组等)和存放的位置信息。而 block用来存储数据。类似key-value,inode就是key,block对应value,通过key查找key对应的value。类似 python的字典。

查看根目录的inode值
 

复制代码 代码示例:
# ls -id /
2 /
 

一般”根”目录的inode值为2,一个分区挂载到一个目录下时,这个”根”目录的inode值为2
 

复制代码 代码示例:
# mount /dev/sdb2 /mnt
# ls -id /mnt
2 /mnt

一,安装extundelete
下载extundelete
 

复制代码 代码示例:
# wget http://ncu.dl.sourceforge.net/project/extundelete/extundelete/0.2.0/extundelete-0.2.0.tar.bz2
 

所需依赖包
 

复制代码 代码示例:
# yum -y install e2fsprogs e2fsprogs-libs e2fsprogs-devel
 

编译安装extundelte
 

复制代码 代码示例:
# tar jxvf extundelete-0.2.0.tar.bz2
# cd extundelte-0.2.0
# ./configure
# make; make install

二,用extundelete恢复文件
模拟数据误删除环境
 

复制代码 代码示例:
# mkdir /data
# mkfs.ext4 /dev/sdb2
# mount /dev/sdb2 /data
# cp /etc/hosts /data/
# mkdir /data/test
# echo "extundelete test" > /data/test/geek.txt
# md5sum hosts                           #获取文件校验码
54fb6627dbaa37721048e4549db3224d  hosts
# md5sum test/geek.txt
eb42e4b3f953ce00e78e11bf50652a80  test/geek.txt
# rm -fr /data/*

卸载磁盘分区
 

复制代码 代码示例:
# umount /dev/sdb2

查询恢复数据信息
 

复制代码 代码示例:

# extundelete /dev/sdb2 --inode 2
.....

File name           | Inode number |
Deleted status
Directory block 8657:
.                     2
..                    2
lost+found            11             Deleted
hosts                 12             Deleted
test                  130817         Deleted
 

上面标记为Deleted是已经删除的文件或目录

四,开始恢复单个文件
默认恢复到当前目录下的RECOVERED_FILES目录中去
 

复制代码 代码示例:
# extundelete /dev/sdb2 --restore-file hosts
 

恢复一个目录
 

复制代码 代码示例:
# extundelete /dev/sdb2 --restore-directory test/

全部恢复
 

复制代码 代码示例:
# extundelete /dev/sdb2 --restore-all
 

检测是否恢复成功
 

复制代码 代码示例:
#md5sum RECOVERED_FILES/hosts   #获取文件校验码
54fb6627dbaa37721048e4549db3224d  RECOVERED_FILES/hosts
#md5sum RECOVERED_FILES/test/geek.txt
eb42e4b3f953ce00e78e11bf50652a80  RECOVERED_FILES/test/geek.txt
 

校验码与之前的完全一致。