長年にわたり、GNUユーティリティはこのオプションを使用して呼び出さない限りrm
削除されません。しかし、この秩序は長い間集団的無意識に位置して危険であると考えられており、人々はまだそれを「ひどい」秩序と呼んでいます。/
--no-preserve-root
rm -rf /
rm
削除できないルールがいつ初めて登場したのか気になります/
。 POSIXの仕様を確認してみるPOSIX:2008このセキュリティ機能が含まれています。POSIX:2001確かに。 POSIX仕様のオンラインバージョンは随時更新されるため、新しいSubversionがリリースされるたびにウェイバックマシンも確認して発見しました。2010年POSIX:2008関連ページその時点で削除できないルールがリストされていることが確認できましたrm
。/
だから私の質問は次のとおりです。
rm
/
いつPOSIX仕様に削除できないルールが追加されましたか?単一のUNIX仕様バージョン4の元の2008バージョンにありましたか、それともリビジョンに追加されましたか?- GNUはいつこの制限を追加しましたか
rm
? POSIXに追加される前のことだと確信しています。しかし、いつそのようなことが起こったのですか?
答え1
オンラインで、すべてのPOSIX 2008バージョンのHTMLバージョンを見つけることができます。
- オリジナル:http://pubs.opengroup.org/onlinepubs/9699919799.2008edition/utilities/rm.html
- TC1(2013年版)http://pubs.opengroup.org/onlinepubs/9699919799.2013edition/utilities/rm.html
- TC2(2016年版)http://pubs.opengroup.org/onlinepubs/9699919799.2016edition/utilities/rm.html
2008年版にはこの内容が追加されました。
技術的な正誤表は通常、新機能を追加しません。
以前のバージョンを見ることができます(http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html)(POSIX 2004)にはそのようなテキストはありません.
新しいテキストが承認されました。2003-05-09 オースティングループ会議その後、標準改訂に含めるようにします。
それ同年3月、Sun MicrosystemsのJohn Beckが要請しました。(リンクには公開グループ登録が必要です。改善要請5番はこちら)。
John Beckは2003年3月11日火曜日に次のように書きました。
@ page 820 line 31681-31683 section rm comment {JTB-1} Problem: Defect code : 3. Clarification required An occasional user mistake, with devastating consequences, is to write a shell script with a line such as: rm -rf $VARIABLE1/$VARIABLE2 or rm -rf /$VARIABLE1 without verifying that either variable is set, which can lead to rm -rf / being the resulting command. Since there is no plausible circumstance under which this is the desired behavior, it seems reasonable to disallow this. Such a safeguard would, however, violate the current specification. Action: Either extend the exceptions for . and .. on the noted lines to list / as well, or specify that the behavior of rm if an operand resolves to / is undefined.
rm
--preserve-root
GNUと--no-preserve-root
オプションの追加これは2003-11-09に提出されました。ただし、--preserve-root
デフォルト値のみです。2006-09-03 提出したがって、coreutils 6.2では
FreeBSDはすでにスラッシュを維持する~から2004-10-04提出(あります「私の下着が実際にどれほど火に強いかを調べてください」コミットログ)、しかし最初は次のようなケースではありません。POSIXLY_CORRECT
、10年後まで、彼らはPOSIXがこれを義務付けていることを確認することを覚えています。この時点では、POSIXモードでも実行されます。。
FreeBSDの初期コミットでは、当時Solarisはすでにこれを行っていたと述べました。
@JdePB(以下のコメントで)が見つけました。Sun 内部ケースリンクソラリスの起源の詳細を確認し、提供し、ソラリスがオースティングループに依頼する前に適切な保護措置を講じたことを示唆した。
この除外を追加する理由を説明します。人々はこれを自分で責任を負う必要がありますが、スクリプトが/提供されているかどうかを確認せずにこれを行うことができる状況がありますrm -rf /
。リンクによると)。 。rm -rf -- "$1/$2"
$1
$2
削除禁止.
は..
それより長く前に追加されましたそしてもう一度潜在的な思考に備えてください。rm
それでも危険な命令です。それはしなければならないことをします:あなたが言ったことを削除します。
rm -rf /*
cd /tmp && rm -rf .*/ # on some systems where rm -rf ../ still removes
# the content of ../ and shells that still
# may include . and .. in glob expansions.
rm -rf -- "$diretcory"/* # note the misspelled variable name
dir='foo '; rm -rf $dir/*
すべてのコンテンツも削除されます。シェルファイル名の完成により、これらの問題が発生することが知られています。
rm -rf someth<Tab>/*
拡張:
rm -rf something /*
something
これはディレクトリではないからです。
シェルはワイルドカードを使用して呼び出しを試みると、追加のtcsh
プロンプトを追加します(デフォルトではありません)。zsh
rm
*
tcsh