rm (Unix)


Rm_(Unix)

rm( removeの略) は、ファイル システムからコンピュータ ファイル、ディレクトリ、シンボリック リンクなどのオブジェクトや、デバイスノード、パイプ、ソケットなどの特殊ファイルを削除するために使用される、 UnixおよびUnix 系オペレーティングシステム上の基本的なコマンドです。 MS -DOS、OS/2、およびMicrosoft Windows。このコマンドはEFI シェルでも使用できます。 del rm コマンドrm_
オリジナルの著者
ケン・トンプソン、デニス・リッチー( AT&T ベル研究所)
開発者
さまざまなオープンソースおよび商用開発者
初回リリース
1971 年 11 月 3 日。51年前 ( 1971-11-03 )
で書かれている C オペレーティング·システム
Unix、Unix 風の、V、Plan 9、Inferno、KolibriOS、IBM i
プラットホーム
クロスプラットフォーム
タイプ
指示
ライセンス
coreutils : GPLv3+プラン 9: MIT ライセンス

コンテンツ
1 概要2 歴史 3 構文 4 権限
5 ファイルシステムのルートの保護
6 ユーザープルーフ
7 コマンドライン引数の最大制限
8 こちらも参照
9 参考文献
10 参考文献
11 外部リンク

概要
このコマンドは、 unlinkrmシステム コールを使用してファイル システムからオブジェクトへの参照を削除します。これらのオブジェクトには複数の参照 (たとえば、2 つの異なる名前を持つファイル) が含まれている可能性があり、オブジェクト自体は、すべての参照が削除され、何も存在しない場合にのみ破棄されます。プログラムにはまだオブジェクトへのハンドルが開いています。
これにより、プログラムがクラッシュして終了した場合でも、プログラムの終了後にファイルのスペースが再利用されることがわかっていて、プログラムがファイルを開いてすぐにファイルシステムから削除し、それを一時スペースとして使用できるシナリオが可能になります。
このコマンドの目的は単に参照のリンクを解除することだけであり、解放されたファイルシステムのスペースには、削除されたファイルの残りのデータがまだ含まれている可能性があるため、通常、このコマンドはファイル データを破壊しません。これは場合によってはセキュリティ上の問題となる可能性があり、強化されたバージョンでは最後のリンクが切断されるときにデータを消去する機能が用意されている場合があり、特にデータ消去機能を提供する Shred や SRM などのプログラムが利用可能です。
rmこれは通常、UNIX由来のオペレーティング システムでのみ見られます。通常、このオペレーティング システムでは、ごみ箱などのメカニズムを介して削除されたファイルを回復する機能が提供されていないため、そのため、ユーザーはrm誤ってファイルを削除することを制限するために、ある種のラッパーで囲む傾向が
インデックスの再構築を試み、部分が再利用されなかった場合にファイルを元に戻すことができる削除取り消しユーティリティが

歴史
一部の古いバージョンの Unix では、rmディレクトリが空の場合、コマンドはディレクトリを削除します。この動作は、 4.4BSD-Lite2 から派生したBSD ( FreeBSD、 NetBSD、 OpenBSD 、macOSなど)などのフラグrm付きの一部のバージョンで引き続き取得できます。-d
GNU coreutilsrmにバンドルされているバージョンは、Paul Rubin、David MacKenzie、Richard Stallman、Jim Meyering によって作成されました。このバージョンには、互換性を高めるためのオプションも提供されています。同じ機能が標準コマンドによって提供されます。 -drmdir
バージョン 7-iのオプションは、バージョン 1で登場した「スイッチからの削除」に置き換わりました。Doug McIlroy 氏は、「これは、発話できない名前のファイルをクリーンアップするために設計された絶望的なツールだった」と書いています。dswdsw
このコマンドは、一般的な GNU Unix 類似ユーティリティのネイティブWin32ポートのUnxUtilsコレクションの一部として、Microsoft Windows 用の別個のパッケージとして利用できます。 KolibriiOS にはコマンドの実装が含まれています。 rmコマンドもIBM iオペレーティング システムに移植されています。 rm

構文
rmオプションを追加した後に指定されたファイルを削除します。ユーザーは完全パスまたは相対ファイル パスを使用して、削除するファイルを指定できます。rmデフォルトではディレクトリは削除されません。ユーザーが現在いるディレクトリ内のrm fooファイル「foo 」を削除します。
rmは、他のコマンドと同様に、オプションを使用して動作方法を指定します。-r, 「recursive」は、ディレクトリを削除し、内容を事前に再帰的に削除します(ディレクトリが存在しないファイルが残らないようにするため)。-i、すべての削除の確認を求める「対話型」。-f、「force」は、存在しないファイルを無視し、確認プロンプトをオーバーライドします (事実上、キャンセルします-i)。ただし、ディレクトリが書き込み保護されている場合、ディレクトリからファイルは削除されません。-v、「verbose」、rm端末上で何を行っているかを出力します。-d, 「directory」は空のディレクトリを削除し、指定されたディレクトリが空の場合にのみ機能します。–one-file-system、引数と同じファイル システム上のファイルのみを削除し、マウントされたファイル システムは無視します。
rmファイルの誤った削除を避けるために、シェルエイリアス ( C シェル エイリアス、Bourne シェル、または Bash) 関数 ” “でオーバーレイできます。rm -iユーザーが確認せずに多数のファイルを削除したい場合は、オプション-iを追加して手動で引数を取り消すことができます-f(展開されたコマンド ライン ” ” で後で指定されたオプションがrm -i -f優先されるため)。残念ながら、このアプローチはワイルドカードの使用に対する危険な習慣を生み出し、独自のバージョンの誤った削除につながります。
rm -rf(さまざまにrm -rf /、、、rm -rf *など) は、ピクサーでの映画トイ・ストーリー 2の制作中に多くのファイルが失われたなど、 Unix の災害に関するジョークや逸話で頻繁に使用されます。このコマンドの変種をスーパーユーザーが実行すると、現在のファイル システムからアクセスできるすべてのファイルがマシンから削除されます。rm -rf /
rm多くの場合、削除するファイルのリストを提供するためにxargsと組み合わせて使用​​されます。
xargs rm < ファイルリスト
または、現在のディレクトリの下にあるすべてのディレクトリ内のすべてのPNG 画像を削除するには、次のようにします。
見つけてください 。 -name ‘*.png’ -exec rm {} +

権限
通常、ほとんどのファイルシステムでは、ファイルを削除するには親ディレクトリに対する書き込み権限 (および最初にディレクトリに入るためには実行権限) が必要です。(初心者にとって紛らわしいことに、ファイル自体のパーミッションは無関係であることに注意してただし、rm-f オプションが使用されない限り、GNU は書き込み保護されたファイルを削除するかどうかの確認を求めます。)
ディレクトリを ( を使用してrm -r) 削除するには、その内容をすべて再帰的に削除する必要がこれには、そのディレクトリ (空でない場合) および空でないすべてのサブディレクトリ (存在する場合) に対する再帰的な読み取り、書き込み、および実行のアクセス許可が必要です。ディレクトリの内容を一覧表示して削除するには、読み取り権限が必要です。これにより、空ではないディレクトリへの書き込み権限がないため、その内容を削除できないという奇妙な状況が発生することがただし、同じディレクトリが空の場合は、それを削除できます。
スティッキー ビットが設定されたディレクトリにファイルが存在する場合、ファイルを削除するには、そのファイルの所有者である必要が

ファイルシステムのルートの保護
Sun Microsystems は、 2005 年に最初にリリースされたSolaris 10 に” rm -rf /” 保護を導入しました。コマンドを実行すると、システムは / の削除が許可されていないことを報告するようになりました。その後すぐに、同じ機能がFreeBSDバージョンのユーティリティに導入されました。オプションが指定された場合、 GNU は実行を拒否します。 これは、 GNU Core Utilitiesのバージョン 6.4が 2006 年にリリースされて以来、デフォルトになっています。新しいシステムでは、オプションがなくても、このフェイルセーフは常にアクティブです。コマンドを実行するには、スーパーユーザーであっても、オプションを追加してフェールセーフをバイパスする必要がrm rmrm -rf /–preserve-root–no-preserve-root

ユーザープルーフ
システム管理者、設計者、さらにはユーザーさえも、次のようなエイリアスや関数を作成することで、ファイルを誤って削除しないように防御しようとすることがよく
エイリアスrm = “rm -i” rm () { /bin/rm -i ” $@ ” ; }
これにより、rmY キーまたは N キーを押して、ファイルを削除するかどうかをファイルごとに確認するようユーザーに求められます。残念なことに、これはユーザーに、コマンドに渡すワイルドカードに不注意になるよう訓練する傾向がありrm、y保持する必要がある 1 つのファイルを過ぎるまで、ポンドとリターン キーで削除を肯定する傾向を奨励するだけではありません。各ファイルに自動的に「y」を挿入する「 」まで行っているユーザーも見られています。yes | rm files
ユーザーが 1 回だけ確認できるようにし、適切なワイルドカードを奨励し、リストの検証を容易にする妥協策は、次のような方法で実現できます。
if ; then rm () { ls -FCsd ” $@ ” echo ‘remove? ‘ | tr -d ‘12’ ; 読み取りif [ “_ $REPLY ” = “_y” ] ; then /bin/rm -rf ” $@ ” else echo ‘(キャンセル)’ fi } fi
この関数はシェル スクリプトに含めるべきではないことに注意することが重要です。シェル スクリプトにすると、検索パスでシステムより先に見つかる危険性があり、rmまた、バッチを中断する可能性がある非対話型シェルでは許可すべきではありません。仕事。定義をif  ; then ….  ; fi構造内で囲むと、後者から保護されます。
「safe-rm」や「trash」など、重要なファイルの誤った削除を防ぐサードパーティの代替手段が存在します。

コマンドライン引数の最大制限
複数のLinux ディストリビューションで使用されるGNU コア ユーティリティの実装では、コマンド ライン引数のバイト数が制限されます。2007 年 10 月 9 日にリリースされたカーネル 2.6.23 が定義される前に、コマンド ライン引数用にカーネル内で割り当てられるページ数が制限されます。カーネルのコンパイル時間はファイルMAX_ARG_PAGES内の変数ですinclude/linux/binfmts.hが、新しいカーネルでは引数の最大長が最大スタック制限 (ulimit -s) の 25% に制限されます。エラー:/bin/rm: Argument list too long.コマンドライン引数の制限を超えるとプロンプトが表示されます

こちらも参照
srm (Unix) : Unix でのファイルの安全な削除
unlink() :主要な機能のためにこのユーザー空間プログラムによって呼び出される基礎となるシステムコール
del (コマンド)
デルツリー
dsw (コマンド) – 困難なファイルを削除するための廃止された Unix コマンド

参考文献
^ “EFI シェルとスクリプト” . インテル。2013 年 9 月 25 日に取得。
^ “Unix – よくある質問 (3/7) セクション – ファイルの「削除を取り消す」方法を教えて” 。www.faqs.org。
^ “UNIX 8th マニュアルのセクション 1 の rm ページ” . man.cat-v.org。
^ “RM(1)”、FreeBSD-5.4-RELEASE 、2015 年2 月 5 日取得
^ “RM(1)”、NetBSD- 2.0、2015年2 月 5 日取得
^ “RM(1)”、OpenBSD-3.6、2015年2 月 5 日取得
^ “rm(1): ファイル/ディレクトリを削除する – Linux マニュアル ページ” . linux.die.net。
^ クシシュトフ・ゴジ (2012 年 1 月 22 日)。「rm: 空のディレクトリを削除するための新しいオプション –dir (-d)」。coreutils.git。
^ マキロイ医師(1987)。Research Unix 読者: プログラマーズ マニュアル、1971 ~ 1986 年(PDF) (技術レポート) からの注釈付きの抜粋。CSTR。ベル研究所。139.
^ “一部の GNU ユーティリティのネイティブ Win32 ポート” . unxutils.sourceforge.net。
^ “シェル – KolibriiOS wiki” . wiki.kolibrios.org。
^ IBM。「IBM System i バージョン 7.2 プログラミング Qshell」(PDF)。IBM。2020-09-05に取得。
^ “rm(1) – Linux マニュアル ページ” . man7.org。
^ ギテ、ヴィヴェク。「Linux/UNIX: ファイルを削除する」。ニクスクラフト。2011 年11 月 24 日に取得。
^ マシュー、パンザリーノ (2012 年 5 月 21 日)。「トイ・ストーリー2が2回削除された経緯、1回目は事故、2回目は意図的」。テネシー州 | メディア。2022 年9 月 27 日に取得。
^ “Linux rm コマンドのヘルプと例” . コンピューターホープ。2018年1月24日。2016年4月16日のオリジナルからアーカイブ。2019 年1 月 24 日に取得。 CS1 メイン: URL が不適切です (リンク) ^ カーク、マケルハーン (2014 年 1 月 2 日)。「コマンドラインをマスターする: ファイルとフォルダーの削除」マックワールド。2019 年1 月 24 日に取得。
^ “魔法使いの問題への干渉” . 2016年11月3日のオリジナルからアーカイブ。
^ “前のコミットでは、freebsd/freebsd@d6b7bd9 について警告し削除するコードが rm(1) に追加されました。” . GitHub。
^ “rm 呼び出し (GNU Coreutils)” . www.gnu.org。
^ “Launchpad の Safe-rm” . ランチパッド。
^ “andreafrancia/trash-cli” . 2020 年 9 月 12 日 – GitHub 経由。
^ “Linux_2_6_23 – Linux カーネルの初心者” . kernelnewbies.org。
^ “kernel/git/torvalds/linux.git – Linux カーネル ソース ツリー” . git.kernel.org。
^ ” 「引数リストが長すぎます」: 引数と制限を超えて | Linux ジャーナル」。www.linuxjournal.com 。

参考文献
カーク・マケルハーン (2006)。Mac OS X コマンドライン: Unix の内部。ジョン・ワイリー&サンズ。ISBN 978-0470113851。

外部リンク
image"
Wikibook Guide to Unix には次のトピックに関するページがrm
rm: ディレクトリ エントリを削除します – シェルとユーティリティのリファレンス、The Single UNIX 仕様、 The Open Groupのバージョン 4
rm(1) –  Plan 9プログラマーズマニュアル、第 1 巻
rm(1) – インフェルノ一般コマンドマニュアル · “