アカウント名:
パスワード:
> スクリプトはある時点でデータの保存場所を「$STEAMROOT」にセットし、後で「rm -rf "$STEAMROOT/"*」を実行する。しかし、データの保存場所が移動されると「$STEAMROOT」が空の文字列を返すため、「rm -rf "/"*」が実行され、予期しない削除が実行されるというものだ。
こう聞くと自分もうっかり書いてしまいそうなミスに見えますが、同じようなケースで事故を回避するベストプラクティスはどんな感じですかね。
私が20数年前に先輩から聞いていまでも注意していることとして以下があります。・シェルスクリプト、Cなどいかなる状況でもパス文字列の先頭を/にしないこと(絶対パスではなく相対パスにするべし) これは最悪ルートからファイルを削除することになるため。・あるディレクトリ以下のファイル、ディレクトリをすべて削除したい場合、対象ディレクトリにcdで移動してからファイルを削除、上位ディレクトリに移動してからrmdirでディレクトリを削除すること・ファイル数が不定の場合、パイプするときにはかならずxargsを用いるべし
これだけでは防げないかもしれませんがいまのところ重要ファイルを削除した経験はないです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
対策 (スコア:1)
> スクリプトはある時点でデータの保存場所を「$STEAMROOT」にセットし、後で「rm -rf "$STEAMROOT/"*」を実行する。しかし、データの保存場所が移動されると「$STEAMROOT」が空の文字列を返すため、「rm -rf "/"*」が実行され、予期しない削除が実行されるというものだ。
こう聞くと自分もうっかり書いてしまいそうなミスに見えますが、
同じようなケースで事故を回避するベストプラクティスはどんな感じですかね。
Re:対策 (スコア:2, 参考になる)
私が20数年前に先輩から聞いていまでも注意していることとして以下があります。
・シェルスクリプト、Cなどいかなる状況でもパス文字列の先頭を/にしないこと(絶対パスではなく相対パスにするべし)
これは最悪ルートからファイルを削除することになるため。
・あるディレクトリ以下のファイル、ディレクトリをすべて削除したい場合、対象ディレクトリにcdで移動してからファイルを削除、上位ディレクトリに移動してからrmdirでディレクトリを削除すること
・ファイル数が不定の場合、パイプするときにはかならずxargsを用いるべし
これだけでは防げないかもしれませんがいまのところ重要ファイルを削除した経験はないです。