GNU/Linux >> Linux の 問題 >  >> Linux

rmdir(1) と rm(1) が共存する理由は何ですか?

主な理由はおそらく歴史的なものです。昔は rmdir(2) なんてなかった と mkdir(2) システム コール (ここでは第 7 版 UNIX™ について説明します)、および rmdir(1) (必然的に) unlink(2) を使用する SUID ルート プログラムでした。 ディレクトリを削除するためのシステム コール。

第 7 版の UNIX マニュアルは、http://cm.bell-labs.com/7thEdMan でオンラインで入手できます (最終チェック日は 2017-04-23)。それらは http://plan9.bell-labs.com/7thEdMan でも入手できます (最終チェックは 2017-04-23)。また、第 2 巻の記事については、少なくとも 1 つの代替ソース (http://wolfram.schneider.org/bsd/7thEdManVol2/) がオンラインにあるようです。第 1 巻のコマンドとシステム コールについては、FreeBSD サイトへのリンクがあります。 .

rm コマンド (通常の非 SUID プログラム) が rmdir(1) を呼び出しました 空のディレクトリを削除するコマンド。それ自体はできませんでした。 root 権限が必要でした。つまり、rmdir(1) 空のディレクトリを削除するコマンド (Unix V7 のソース コードについてはこちらを参照) が存在し、rm コマンドは空のディレクトリ自体を削除しませんでした.

rm を使用するには ディレクトリを削除するには、-r を指定する必要があります オプション。

対称性引数もあります。コマンド mkdir(1) が必要です ディレクトリを作成します。コマンド rmdir(1) を持つのが合理的と思われます mkdir(1) を元に戻すには やりました。さらに、彼らは (最近では) rmdir(2) の単純な実行者です。 そして mkdir(2) システム コール — はい、第 7 版 UNIX、mkdir(1) に戻ります mknod(2) を使用する SUID ルート プログラムでもありました。 ディレクトリ ノードと link(2) を作成する呼び出し . を作成するための呼び出し そして .. ディレクトリ内のエントリ。


「rm」はディレクトリでは機能しません。再帰的に削除するには、rmdir を使用するか、-r スイッチを指定する必要があります。理由は歴史的なものです:unlinkrmdir は独立したシステム コールであり、Unix の初期から存在しています。


また、rmdir は empty のみを削除します ディレクトリ。ディレクトリ内の追加ファイルを削除しないようにしたい場合は、rmdir rm -r よりも安全です (削除するものを常に確認する必要があるように rm にエイリアスを設定した場合を除く、つまり alias rm='rm -i' ~/.bashrc またはあなたが使用しているもの)。


Linux
  1. Uniq -uのポイントとそれは何をしますか?

  2. ARM システム コールのインターフェイスは何ですか? また、Linux カーネルのどこで定義されていますか?

  3. MySQL 5.7 のデフォルトの root パスワードは何ですか?

  1. fsck と e2fsck の違いは何ですか?

  2. UDF のパーティション ID / ファイルシステム タイプは何ですか?

  3. $(CC) と $CC の違いは何ですか?

  1. Ubuntu Live CD のデフォルトのユーザー名とパスワードは何ですか?

  2. unlink と rm の違いは何ですか?

  3. ルートとIPルートの違いは何ですか?