はじめに
CentOSにログインした時、ls
で/home
ディレクトリにゴミがあることに気づいた。
名前が??x?・4a???
とよくわからないことになっている。
おそらくWindows OSで作成したデータファイルをteraterm や winscpでアップロードしてしまったのだろうと思われる。
rm -f ??x?・4a???で消せない
そんなファイルはないと警告されてしまう。
rm -rf * で消せない
rmで削除したいが/home
には様々なファイルが置いてあるので rm -rf *
が使えない。
さて困った
qiitaなどで調べてみたが、意外とこのようなケースへの対処方法がない。
解決策
基本的なデータの管理について思い出してみる
Linuxはデータファイルが実際に保管される領域とinode(index node)領域というものにデータファイルの情報を保存/管理する。
inodeとは
ファイルやディレクトリの所有者、更新日時、ファイルサイズなどを管理しているデータをinodeという。
inodeにはinode番号と呼ばれる管理番号が割り当てられており、これを指定することでデータそのものを操作することが可能になる。
解決手順
1.ファイルのinode番号を調べる
ls -li
合計 xxx
1234567890 test?_.txt
-----------------------------
inode number file name
2.inode番号でファイルを検索し、削除
find . -inum 1234567890 -exec rm -rf {} \;
補足
-execオプションを使うと、findで検索されたファイルに対して他の処理を行わせることができる。
-exec {} \;
はfindで検索されたファイルを個別に、ファイルの数だけ処理を行う。
-exec {} +
はfindで検索されたファイルをまとめて 1つの処理を行う。