首頁 > 軟體

Linux下利用inode刪除指定檔案

2020-06-16 17:06:54

本文主要介紹使用inode刪除異常檔名的檔案的方法,供大家參考:在Linux中,有時候會遇到檔名是亂碼或者是某些特殊中文的檔案,這時候通過檔名就很難刪除。

同時,對於linux中的任何一個檔案都必然有其唯一的inode值,這時候就可以通過inode來刪除異常檔名的檔案

操作的物件一般為類似下面的檔案:

[root@server tmp]# ll
總用量 61404
-rw-r--r--  1 root root        0 6月  16 14:58 ?
-rw-r--r--  1 root root        0 6月  19 12:29 ??
-rw-r--r--  1 root root        0 6月  21 14:53 ???3kqU
-rw-r--r--  1 root root        0 6月  21 14:53 ?6;?Xf??mA???9???T?
-rw-r--r--  1 root root        0 6月  19 12:29 9y??????sy?z?D?l???I?MO???8z????@]9??U@?XlAI]?k

產生這類檔案的原因:

1.上傳檔案時網路異常導致

2.Windows建立的某些檔名在Linux下無法正常識別

3.中文特殊字元無法識別

解決方法如下:

1.查詢這些檔案的inode值

ll -i

[root@server tmp]# ll -i
總用量 61404
15206100 -rw-r--r--  1 root root        0 6月  16 14:58 ?
15206090 -rw-r--r--  1 root root        0 6月  19 12:29 ??
15206092 -rw-r--r--  1 root root        0 6月  21 14:53 ???3kqU
15206233 -rw-r--r--  1 root root        0 6月  21 14:53 ?6;?Xf??mA???9???T?
15206235 -rw-r--r--  1 root root        0 6月  21 14:53 A??K?

以上,最左邊的數位即為對應檔案的inode值,不過無法直接使用rm命令刪除檔案,需要其他命令配合使用

2.刪除異常檔案

正常情況下這些檔案也是可遇不可求的,不過涉及到rm的命令要小心謹慎,事前做一下測試,熟練下操作怎麼也是不為過的,沒有這些亂碼的檔案,可以使用正常的檔案做測試,

有以下這幾種方法:

先建立需要的檔案

[root@linuxidc tmp]# cd /tmp
[root@linuxidc tmp]# touch aaa bbb ccc ddd eee
[root@linuxidc tmp]# ll -i
總用量 0
1442581 -rw-r--r-- 1 root root 0 9月  22 15:00 aaa
1442582 -rw-r--r-- 1 root root 0 9月  22 15:00 bbb
1442583 -rw-r--r-- 1 root root 0 9月  22 15:00 ccc
1442584 -rw-r--r-- 1 root root 0 9月  22 15:00 ddd
1442585 -rw-r--r-- 1 root root 0 9月  22 15:12 eee

(1)使用find自帶的delete引數進行刪除aaa檔案

[root@linuxidc tmp]# find ./* -inum 1442581 -delete
[root@linuxidc tmp]# ll -i
總用量 0
1442582 -rw-r--r-- 1 root root 0 9月  22 15:00 bbb
1442583 -rw-r--r-- 1 root root 0 9月  22 15:00 ccc
1442584 -rw-r--r-- 1 root root 0 9月  22 15:00 ddd
1442585 -rw-r--r-- 1 root root 0 9月  22 15:12 eee

(2)使用find自帶的-exec引數結合rm命令刪除bbb檔案(進行刪除確認)

[root@linuxidc tmp]# find ./* -inum 1442582 -exec rm -i {} ;
rm:是否刪除普通空檔案 "./bbb"?y
[root@linuxidc tmp]# ll -i
總用量 0
1442583 -rw-r--r-- 1 root root 0 9月  22 15:00 ccc
1442584 -rw-r--r-- 1 root root 0 9月  22 15:00 ddd
1442585 -rw-r--r-- 1 root root 0 9月  22 15:12 eee

(3)使用find自帶的-exec引數結合rm命令刪除ccc檔案(不進行刪除確認)

[root@linuxidc tmp]# find ./* -inum 1442583 -exec rm -f {} ;
[root@linuxidc tmp]# ll -i
總用量 0
1442584 -rw-r--r-- 1 root root 0 9月  22 15:00 ddd
1442585 -rw-r--r-- 1 root root 0 9月  22 15:12 eee

(4)使用find和xargs結合刪除ddd檔案(無法使用-i引數進行刪除確認)

[root@linuxidc tmp]# find ./* -inum 1442584 |xargs rm -f
[root@linuxidc tmp]# ll -i
總用量 0
1442585 -rw-r--r-- 1 root root 0 9月  22 15:12 eee

(5)使用rm命令刪除指定檔案(由find命令找到的檔名)

[root@linuxidc tmp]# rm `find ./* -inum 1442574`
rm:是否刪除普通空檔案 "./eee"?y
[root@linuxidc tmp]# ll
總用量 0

# 使用find命令的-inum選項確認檔名

[root@linuxidc tmp]# touch fff
[root@linuxidc tmp]# ll -i
總用量 0
1442574 -rw-r--r-- 1 root root 0 9月  22 15:38 fff
[root@linuxidc tmp]# find ./* -inum 1442574
./fff

總結一下:

以上幾種不同的刪除方式,總體來說都是通過指定檔案的inode值,使用find命令的-inum選項確認其檔名,然後傳遞給rm命令進行刪除

完畢,呵呵呵

如果這篇文章使你有所收穫,我很榮幸。另外,如果你有時間,可以選擇將它分享出去,讓更多的人獲益,謝謝你。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-09/147029.htm


IT145.com E-mail:sddin#qq.com