POSIXとGNU rmはいつから/を削除しませんでしたか?

POSIXとGNU rmはいつから/を削除しませんでしたか?

長年にわたり、GNUユーティリティはこのオプションを使用して呼び出さない限りrm削除されません。しかし、この秩序は長い間集団的無意識に位置して危険であると考えられており、人々はまだそれを「ひどい」秩序と呼んでいます。/--no-preserve-rootrm -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バージョンを見つけることができます。

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-rootGNUと--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プロンプトを追加します(デフォルトではありません)。zshrm*tcsh

おすすめ記事