檔案的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中文網其他相關文章!