ファイル/デバイス完全消去には(g)shred
あるファイルを完全に消去するにはshredコマンドを使う。
ファイルの他にデバイスに対しても実行可能。
特にオプションが指定されなければ、shredは指定されたファイル、デバイスファイルに対して、ランダムなパターンで三回、上書きをする。
普通のLinuxにはデフォルトでついてくる。
FreeBSDでは、sysutils/coreutilsからインストールする。
これはつまりGNU coreutilsなので(だからLinuxには最初からある)、shredだけではなく、山のようにコマンドが付いてくる。
しかもそのほとんどがFreeBSDのベースシステムにもある超基本コマンドである。
両者を区別するために、coreutilsでインストールされたコマンドにはすべて頭にgが付く。
shredはgshred。
同様に、gdate, gexpr, gtest, gcat, gchgrpなどなど。
使い方は簡単で、ファイルを指定するだけ。
デフォルトでは上書きをするだけでファイルを消さない。
なぜかと言えば、デバイスファイルに対しても使われることを想定しているから。
(デバイスファイル消したらエライことになる)
オプションで--remove あるいは -u を与えてあげれば、上書きした後に消してくれる。
実行例
(試しにログを持ってきて、それに対してshredを実行してみる) $ tail ./messages Jan 17 06:35:40 sylph sudo: harukiya : TTY=pts/0 ; PWD=/usr/ports/sysutils/coreutils ; USER=root ; COMMAND=/usr/bin/make Jan 17 06:39:37 sylph sudo: harukiya : TTY=pts/0 ; PWD=/usr/ports/sysutils/coreutils ; USER=root ; COMMAND=/usr/bin/make install Jan 17 06:40:40 sylph sudo: harukiya : TTY=pts/0 ; PWD=/usr/ports/sysutils/coreutils ; USER=root ; COMMAND=/usr/bin/make clean (-vがないとあっさりしすぎなので付けておくといいでしょう) $ gshred -v ./messages gshred: ./messages: 経過 1/3 (random)... gshred: ./messages: 経過 2/3 (random)... gshred: ./messages: 経過 3/3 (random)... $ !tail tail ./messages (無意味な文字列が表示される) (-uを付けると消してくれる。名前を変更しまくる念の入れよう) $ gshred -uv ./messages gshred: ./messages: 経過 1/3 (random)... gshred: ./messages: 経過 2/3 (random)... gshred: ./messages: 経過 3/3 (random)... gshred: ./messages: 削除しています gshred: ./messages: ./00000000 に名前が変更されました gshred: ./00000000: ./0000000 に名前が変更されました gshred: ./0000000: ./000000 に名前が変更されました gshred: ./000000: ./00000 に名前が変更されました gshred: ./00000: ./0000 に名前が変更されました gshred: ./0000: ./000 に名前が変更されました gshred: ./000: ./00 に名前が変更されました gshred: ./00: ./0 に名前が変更されました gshred: ./messages: 削除しました
注意! 以下のケースではホントに消えたか保証はせんよ、とのこと。
journalが有効の場合
snapshotを取っている場合
キャッシュを持っている場合(NFS)
圧縮ファイルシステム上にある場合