🗑️

[AWS EC2] shredで完全にファイル削除してみた(Red Hat 9 + HDD編)

2025/04/06に公開

結論

以下のコマンドを使うことで、指定したディレクトリ以下のファイルを完全削除できます。
また、日本語・空白・改行などを含む特殊なファイル名にも対応できます。

コマンド
find 削除対象のディレクトリ名(中身のファイル名を検索) -type f -print0 | xargs -0 shred -u -v -z -n 3
ファイル指定の例
find ~/shred-test/ -type f -print0 | xargs -0 shred -u -v -z -n 3
  1. find検索
    • -type fファイル名を検索
    • -print0NULL文字区切りで出力(空白・日本語・改行を含むファイル名に対応)
  2. xargs スペース・改行で区切る
    • -0区切り文字をNULL文字に設定
  3. shred
    • -u上書き後にファイルを削除
    • -v詳細表示(処理中のファイル名など表示)
    • -z最後に0で上書き(ファイルの中身をゼロに)
    • -n 3ランダムなデータで3回上書き(合計4回上書き:最後に-zで0を上書きするため)

shredの動作確認

環境

EC2で動作を確認しています。
EC2 の立ち上げ方法がわからない方は、私が書いたこちらの記事も参考にしてみてください👇
EC2インスタンス作成からVSCodeリモート接続まで(Amazon Linux 2 編)

  • OSイメージ:Red Hat Enterprise Linux 9
  • ストレージ設定:マグネティック(標準に変更)
    HDDを使用するためにEBS(マグネティックボリューム)を選択します。

https://aws.amazon.com/jp/ebs/previous-generation/

削除のテスト

ファイル作成と中身を確認します。

  1. echo "秘密のメッセージ123" > secret.txt
    secret.txtを作成して、"秘密のメッセージ123"を追記して保存します。
  2. cat secret.txt
    正しく作成できたか確認します。
  3. xxd -b secret.txt
    フィルの中身のバイナリを確認します。
    xxdとはバイナリファイルを人間が読める形式(主に16進数や2進数)に変換して表示してくれるツール
    -bバイナリ(2進数)形式で表示するオプション
ターミナル
[ec2-user@ <IPアドレス> ~]$ echo "秘密のメッセージ123" > secret.txt
[ec2-user@ <IPアドレス> ~]$ cat secret.txt
秘密のメッセージ123
[ec2-user@ <IPアドレス> ~]$ xxd -b secret.txt

以下に実行結果の画像を示します。



shredで削除して再度中身を確認
以下のコマンド削除を行います。

コマンド
shred -v -n 3 -z ファイル名
ターミナル
[ec2-user@ <IPアドレス> ~]$ shred -v -n 3 -z secret.txt
shred: secret.txt: pass 1/4 (random)...
shred: secret.txt: pass 2/4 (random)...
shred: secret.txt: pass 3/4 (random)...
shred: secret.txt: pass 4/4 (000000)...
[ec2-user@ <IPアドレス> ~]$ xxd -b secret.txt

以下に実行結果の画像を示します。

参考リンク:ファイル・ディスクの中身を完全消去(京都大学)

結果

shred コマンドを実行したことで、ファイルの中身が完全に破壊されていることがわかりました。
以下のポイントが確認できました:

  • 文字列 "秘密のメッセージ123" は削除後、バイナリ上に一切残っていない
  • 上書きは -n 3(ランダム3回)+ -z(ゼロ上書き1回)の合計4回実行されている
  • xxd -b の結果から、意味のある2進数列がノイズやゼロに置き換わっている

特にHDD(マグネティックボリューム)を使うことで、shred の上書き効果が物理的にも有効であることが確認できました。

Discussion