web-dev-qa-db-ja.com

Linuxでiノード番号を使用してファイルを削除する

UNIX/Linuxでtouch \"la*などの特殊文字を使用してファイルを作成した場合、rm "la*を使用してそのファイルを削除することはできません。 iノード番号を使用する必要があります(名前の前に\を追加するとできますが、ファイルの作成に使用されたことがユーザーとして推測する必要があります)。

Rmのマンページを確認しましたが、iノード番号についての言及はありません。 rm inodenumberを実行しても機能しません。

このためのコマンドは何ですか?

15
KdgDev

他のいくつかの方法は次のとおりです:

特殊文字をエスケープする:

[〜] $ rm\"la\*

findコマンドを使用して、現在のディレクトリのみを検索します。 findコマンドはiノード番号を検索でき、便利な-deleteスイッチ:

[〜] $ ls -i 
 7404301 "la * 
 
 [〜] $ find。-maxdepth 1 -type f -inum 7404301 
 ./" la * 
 
 [〜] $ find -maxdepth 1 -type f -inum 7404301 -delete 
 [〜] $ ls -i 
 [〜] $
24
John T

あなたが本当にこれをしたい場合-そしてあなたのユースケースが本当にあなたが必要とするように本当に見えないなら、あなたはファイルシステムデバッグツールを試すかもしれません。あなたがすべてを失うことをいとわないなら、それはそうです。

たとえば、ext2/3/4の場合、debugfsコマンドには、iノードを取得するように見える「kill_file」オプションがあります。他の応答で述べたように、存在しないファイルを指すディレクトリエントリが存在するため、これはファイルシステムを損傷します。後でfsckを実行すると、これを修復できる場合があります。マウントされたファイルシステムでこれを行うことはできません。

しかし、私は強くお勧めします適切なエスケープ/引用符を使用し、以前の応答で述べたように、通常のrmコマンドでそのようなファイルを削除し、さらにrm -iを使用して追加します*のようなグロビング文字を含むファイル名を扱うときの安全性

5
user235

私が抱えていた課題は、ダッシュで始まるファイル名を削除することでした-rmは常にそれをホスト名として解釈したいと考えています。私はこれを使ってこれを解決しました:

rm ./-g4xxx
2

「特殊文字をエスケープする」アプローチを強くお勧めしますが、修正可能なファイルシステムの破損が本当に必要な場合は常にclriコマンドが存在します。

1
mpez0

rm -- filenameを呼び出すと、ダッシュで始まるファイルを削除できます。

1
uli42