はじめに
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つの処理を行う。