2021-05-12 14:32:11
Linux下利用inode刪除指定檔案
本文主要介紹使用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
相關文章