一般ユーザー

一般ユーザー

これはGNUに関するものですrm。情報ページには次のように表示されます。

それ以外のファイルを書き込めない場合は、標準入力が端末であるか、オプションが-f提供されていないか、またはオプションが提供され、ユーザーにファイルを削除するかどうかを尋ねられます。応答が肯定的でない場合は、ファイルをスキップします。--force-i--interactive=alwaysrm

  • これはGNUだけですか?

  • rootとして使用すると、rm私のシステムではこれは起こりません。これは普通ですか?どこでも文書化されたものが見つかりません。

  • この行動の根拠は何ですか?これは、ファイルを削除するには、ファイルへの書き込み権限が必要であると考える傾向があるユーザーに混乱を強くするだけです。これは彼らがrmファイルをchmodsだと思うようにします。ただしrm、所有者でない場合はファイルを削除できます。

答え1

3つの質問をいただきましたので、別に回答いたします。

最初の質問:

これはGNUだけですか?

GNUかどうかはわかりません。ただ。これはGNU Coreutilsの機能であるように見え、rm少なくともいくつかの他のドキュメントrmで見つけることができます。例えば、一部によるとopengroup.orgの古い文書POSIX の場合rm:

  1. ファイルがディレクトリ・タイプでない場合、-f オプションが指定されていない、またはファイルの許可が書き込みを許可しない場合、標準入力が端末である場合、-i オプションが指定されている場合、rm は標準エラーにプロンプ​​トを作成して読み取ります。標準入力の1行。応答が肯定的でない場合、rm は現在のファイルに対してこれ以上の操作を実行せず、残りのファイルを処理し続けます。

おなじみだと思いますか?このフレーズは、rmあなたの質問で言及されたGNU文書と非常によく似ています。


2番目の質問:

rmをrootとして使用すると、私のシステムではこれは起こりません。これは正常な行動ですか?どこにもこれに関する履歴が見つかりません。

rmフラグなしでrootとして実行すると、「書き込み不可能なファイル」を削除しようとするとメッセージが表示されないことを意味します。これはGNU Coreutils 8.23(そしておそらくほぼすべてのGNU Coreutilsバージョン)の正常な動作です。特に文書はないようだが、探してみると由来rm(ファイルを1つにまとめるには、複数のファイル間を行ったり来たりする必要があります。)rm somefileターミナルでrootとして実行すると、somefileプロンプトなしで削除されることがわかります。書き込み禁止になっていても


3番目の質問:

この行動の根拠は何ですか?これは、ファイルを削除するには、ファイルへの書き込みアクセス権が必要であると考える傾向があるユーザーに混乱を強くするだけです。これにより、rm chmodがファイルを考えるようになります。ただし、rm は所有者でない場合はファイルを削除することもできます。

ユーザーが自分に属していない書き込み禁止ファイルを削除できる理由を意味する場合、その動作はrmファイルシステム権限よりも関連性が高くなります。バラよりlinuxdevcenter.comネットワーク情報ネットワークウィキペディア、一緒に説明すると次のようになります。

通常、ほとんどのファイルシステムでファイルを削除するには、親ディレクトリへの書き込み権限(および最初にそのディレクトリに入るための実行権限)が必要ですが、ファイル自体に対する権限は必要ありません。 初心者にとっては、混乱するほどファイル自体に対する権限は関係ありません。ただし、GNU rmでは、-fオプションを使用しない限り、書き込み禁止ファイルが削除されることを確認する必要があります。

大胆な強調は私のものです。これは、Linuxや他のUnixファミリーのオペレーティングシステムがファイルの権限に基づいてファイルの削除を処理する方法です。

答え2

一般ユーザー

ファイルを直接削除/修正できないように保護したい場合があります。簡単な方法はchmod 000 foo(またはchmod -w foo)です。しかし、あなた間違って削除を選択します。

したがって、rmこのような場合、コマンドは root ではなくユーザーに通知するため、確認要求が発生します。

特にバッチ/自動プロセスでrootとして実行する場合

  1. あなたは何をしているのかを知る必要があります。
  2. 確認が必要な場合、多くのシェルがハングすることがあります。

その結果、ファイルは「即時」削除されます。

確認する

確認を要求(-i)または終了(-f)できます。

  • -i一般ユーザーの場合はデフォルトです。
  • -fデフォルトはルートです。

答え3

これはGNUだけですか?

習慣。これらのrm行動は約40年前にさかのぼり、現在まで続いています。標準化

この行動の根拠は何ですか?

~からrm 初版マニュアルページ:

ファイルを削除するには、そのディレクトリへの書き込みアクセス権が必要ですが、ファイル自体への読み取りまたは書き込みアクセス権は必要ありません。

BUGS
rmは、読み取り専用ファイルを実際に削除したいかどうか尋ねる必要があります。

これは、ユーザーがファイルモードを読み取り専用に変更してファイルを誤って書き込めないように保護したい場合は、誤って削除されないように保護することが価値があるということです。

TUHSアーカイブには、第2版のマニュアルページとrmソースコードはありませんが、rm 第3版 マニュアルページこの問題が解決されたことを示します。

削除するように指定されたファイルに書き込み権限がない場合、rmはファイル名とそのモードを印刷し、標準入力から1行を読み取ります。行が「y」で始まるとファイルは削除され、それ以外の場合は削除されません。オプションのパラメーター-fは上記の相互作用を防ぎます。

Unixとそのコマンドのほとんどは最終的に標準化、今日rmがこうして公演した理由がまさにこれです。

rmをrootとして使用すると、私のシステムではこれは起こりません。これは正常な行動ですか?

最初ではなかったが、今は正常な行動である。

私が見つけることができる最も初期のソースコードは次のとおりです。V5:

    if(getuid() == buf->uid)
        b = 0200; else
        b = 2;
    if((buf->mode & b) == 0)    {
        printf("%s: %o mode ", arg, buf->mode);
        i = b = getchar();
        i = b;
        while(b != '\n' && b != '\0')
            b = getchar();
        if(i != 'y')
            return;
    }

書き込み可能性の確認ビューの表示所有者の書き込みアクセスrm を実行しているユーザーがファイルを所有しているかどうかを表示します。そうでなければ他人のための書き込み権限バナー。

存在するV7、rmは新しく追加されました使用する権利システムコール:

    if (access(arg, 02)<0) {
        printf("rm: %s %o mode ", arg, buf.st_mode&0777);
        if(!yes())
            return;
    }

ルートはすべてのファイルへの書き込みアクセス権を持つと見なされるためaccess(読み取り専用ファイルシステムにない場合)、通常はrmrootとして実行するときに確認を要求しません。

関連情報