/tmp
ディレクトリには、次のファイル名を持つファイルがあります。
.<?php passthru($_GET['cmd']);echo 'm3rg3';?>
一般的な方法では、このファイルを削除できず、このファイル名を参照しようとしましたが、結果はありません。
次は何を試すべきですか?
答え1
ls -li
インデックスノードを表示し、次を使用してインデックスノードを削除するために使用します。find
[root@server tmp]# ls -li .\<*
16163346 -rw-r--r-- 1 root root 0 Jun 23 12:02 .<?php passthru($_GET[cmd]);echo
[root@server tmp]# find . -inum 16163346 -exec rm -i {} \;
rm: remove regular empty file `./.<?php passthru($_GET[cmd]);echo'? y
引用:http://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
答え2
この試み:
rm -iv -- .\<\?php\ passthru\(\$_GET\[cmd\]\)\;echo\ m3rg3\;\?\>
後で本当に奇妙なファイル名がある場合は、シェルを試してください。全体的な状況次のメカニズム:
ls .*php*
良いスタートになります。同様のファイル名を持つファイルが多い場合は、一意の一般的なサブストリングを使用してください。
ls .*php*cmd*echo*m3rg3*
最後に、Tab使用しているシェルに補完メカニズムがある場合は、[ファイル名の補完]をクリックできます。
答え3
rm
glob patterns
あなたが議論に使用できる賢い獣です。
あなたの場合は簡単でrm .\<*
十分です
rm
glob patterns
*withを使用すると、パターンに一致する複数のファイルが削除されますのでご注意ください。
答え4
find
GNUまたは非GNU
GNUバージョンでは、find
inodeを探さなくても直接書くことができます。
find . -name '.<*' -delete
もちろん、常に-delete
そのオプションを使用せずに削除したいファイル名を確認することをお勧めします。
これはGNUバージョンではなくバージョンでも直接実行できます。find . -name '.<*' -exec rm -i {} \;
これはGNUバージョンでも機能し、約3倍遅くなります。1]その後、-delete
ファイル
が多すぎない場合でも、find . -name '.<*' -exec rm -i {} +
同じようにすばやく使用できます。
perl
キーと仮定する .<*
と、削除するファイルのみが選択されます(一部のファイルを除く)。ジムロープに)
perl -e 'for(<'.'\<'*'>){((stat)[9]<(unlink))}'
そのディレクトリのすべての隠しファイルを削除すれば十分です。perl -e 'for(<'.*'>){((stat)[9]<(unlink))}'
ファイルが多いほど、速度が速くなります。私は通常Perlを使用しないので、式をチェックしてください。
解決策
通常、他のすべてのファイルを別のディレクトリに移動し、元のディレクトリを削除できます。
mv /tmp /tmp2; mkdir tmp; mv /tmp2/* /tmp; rm tmp2
一部のファイルを使用している場合は欠点がありますが...場合によっては使用することもできます。
Ps>オプションrsync
の使用も忘れないでください.../dev/null
-delete