首頁 >運維 >linux運維 >Linux下如何使用inode刪除指定檔案的方法範例

Linux下如何使用inode刪除指定檔案的方法範例

黄舟
黄舟原創
2017-10-14 11:03:062006瀏覽

檔案的inode定義了檔案的大小、所有人等檔案的特徵。每個檔案和目錄都有自己唯一的inode數字。所以下面這篇文章主要跟大家介紹了Linux下使用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 
 
总用量 6140415206100 -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 ???3kqU15206233 -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@zstest1 tmp]# cd /tmp 
 
[root@zstest1 tmp]# touch aaa bbb ccc ddd eee 
 
[root@zstest1 tmp]# ll -i 
 
总用量 01442581 -rw-r--r-- 1 root root 0 9月 22 15:00 aaa1442582 -rw-r--r-- 1 root root 0 9月 22 15:00 bbb1442583 -rw-r--r-- 1 root root 0 9月 22 15:00 ccc1442584 -rw-r--r-- 1 root root 0 9月 22 15:00 ddd1442585 -rw-r--r-- 1 root root 0 9月 22 15:12 eee

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


#
[root@zstest1 tmp]# find ./* -inum 1442581 -delete 
 
[root@zstest1 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@zstest1 tmp]# find ./* -inum 1442582 -exec rm -i {} \; 
 
rm:是否删除普通空文件 "./bbb"?y 
 
[root@zstest1 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@zstest1 tmp]# find ./* -inum 1442583 -exec rm -f {} \; 
 
[root@zstest1 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@zstest1 tmp]# find ./* -inum 1442584 |xargs rm -f 
 
[root@zstest1 tmp]# ll -i 
 
总用量 0 
 
1442585 -rw-r--r-- 1 root root 0 9月 22 15:12 eee

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


[root@zstest1 tmp]# rm `find ./* -inum 1442574` 
 
rm:是否删除普通空文件 "./eee"?y 
 
[root@zstest1 tmp]# ll 
 
总用量 0 
 
# 使用find命令的-inum选项确认文件名 
 
[root@zstest1 tmp]# touch fff 
 
[root@zstest1 tmp]# ll -i 
 
总用量 01442574 -rw-r--r-- 1 root root 0 9月 22 15:38 fff 
 
[root@zstest1 tmp]# find ./* -inum 1442574 
 
./fff

總結一下:

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

完畢,呵呵呵

總結

#

以上是Linux下如何使用inode刪除指定檔案的方法範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn