cp
GNU財団のcoreutilsチームが管理する非常に人気のあるLinuxツールです。
デフォルトでは、同じ名前のファイルは上書きされます。ユーザーがこの動作を変更したい場合は、--no-clobber
コピーコマンドに追加できます。
-n, --no-clobber do not overwrite an existing file (overrides a previous -i option)
なぜ似たものがないのですか--no-overwrite
?
答え1
」クローパーデータ操作の文脈において、「」はデータを上書きして破壊することを意味する。 Unix環境でのファイルの文脈におけるこの用語の使用は、少なくとも1980年代初頭、おそらくそれ以前にさかのぼります。石を切る既存のファイルの上書きを拒否するようにset noclobber
構成する必要があります (後で ksh93 およびその他の sh スタイルのシェルで)。いつ>
set -o noclobber
GNU coreutilsを追加 --no-clobber
(2009)、彼はシェルと同じ語彙を使用しました。
答え2
これは実際には標準用語であるからです。説明したようにウィキペディア:
ソフトウェアエンジニアリングでファイルやコンピュータのメモリを破損するのは、その内容を上書きすることです。専門用語ファイルは、破壊を次のように定義します。
上書き(通常は意図しない):「私は配列の終わりから歩いてスタックを破壊しました」緑の芝生、落書き、ゴミ、壊れたスタックを比較します。
同じページで述べたように、bashや他のシェルでもこの用語またはset -o noclobber
同等の用語を使用します。この種のことを指す標準用語だけですcp
。
答え3
「clobber」という用語は、コンピューティングコミュニティでよく知られています。
--no-clobber
/オプションは2009-01-14にKamil Dudkaによってのみ追加され-n
ました。 <cp
[Eメール保護]>(githubに送信)。
特に、GNUプロジェクトではGCCでも使用されます。CPU命令またはインラインasmステートメントがレジスタの内容を破壊する場合について説明します。したがって、これはランダムに選択された英語の単語ではなく、Cで書かれたGNUプロジェクトに参加している人は、少なくともGCC文書またはこの用語を使用している他のGNUプロジェクト開発者の用語の使用に精通しています。
(clobber x)
存在するGCC - 内部マシン記述ファイルISA の各命令が実行する操作を GCC に通知します。 (インラインアセンブリと同様の制約)- GNU C拡張アセンブリinline
asm()
ステートメントには、インラインasmテンプレートステップを登録したコンパイラを示す「clobber」部分があります。これは無用で無意味なx86の例のように:
asm("xor %eax,%eax; mfence" ::: "eax", "memory", "cc");
。例えばだからQ&Aこの用語の関数呼び出し規則についてお問い合わせください。 - GCCドキュメント~のため
-fcall-used-
reg
指定されたレジスタが関数呼び出し(つまり呼び出し規則の調整)によって「破壊される」ことをコンパイラに通知することを説明してください。相対的な-fcall-saved-
reg
または-ffixed-
reg
。 - 湾岸協力協議会
-Wclobbered
warning - "longjmpまたはvforkによって変更された可能性がある変数について警告します。" .)別のプログラム名で)。
追加されたcoreutilsコミットの作成者であるKamil Dudkaは、間違いなく--no-clobber
GCCの内部についてよく知っています。彼は(後で?)GCCプラグインを作成しました。Cプログラムの公式検証のため。
GCCの内部が彼の名前の選択に影響を与えたのか、それともそれが既存のシェルオプション(例えば)から来たのか、それとも両方から来たのかはわかりませんset noclobber
。
興味深い事実:GNUの原作者の中には、cp
主著者であるTorjorn Granlundがあります。gmplibプロジェクト(GNUマルチ精度)、コンパイル時定数で割るためのGCCの乗算逆最適化を発明/実装するのに役立ちました(1994年の論文、スタックオーバーフローQ&A)。