cp
ワイルドカードを何度も使用しましたが、ターゲットmv
ディレクトリを指定することを忘れていました。以下は、ログ収集時に発生したエラーの例です。
~# mkdir problem_logs
~# cd problem_logs
~/problem_logs# cp -pv /var/log/messages*
'/var/log/messages' -> '/var/log/messages.1'
.
ターゲットディレクトリに書き込むのを忘れていて、2つのファイル/var/log/messages*
名に完全に拡張されたため、最初のファイル名が2番目のファイル名を上書きしたことがわかります。
~# echo cp -pv /var/log/messages*
cp -pv /var/log/messages /var/log/messages.1
そのような災害を防ぐためにはどんな良い対策がありますか?
- 確かに
root
このアカウントを使用しないでください良い対策です(ただし、いくつかのエラーだけを防ぐだけです)。残念ながら、多くの基本操作root
に権限が必要で、ユーザーのUIDがデフォルトでゼロの複数の(商用)Linuxベースのプラットフォームがあります。これらのプラットフォームは、非rootユーザーと連携するために非標準の変更が必要なことがよくありますsudo
。 - このオプションの使い方を学ぶ
-i
(--interactive
) 再定義するたびに確認が必要です。 - GNUの使い方を学ぶ
-n
(--no-clobber
)オプションはすべての上書きを防ぎます。 - GNU構文を使用し、オプションを使用してターゲットディレクトリを指定する方法を学びます。
-t
(--target-directory
)。例:cp -pvt. /var/log/messages*
私はまだ書くのを忘れていました。.
最後の2つのオプションは、POSIXでは標準化されていないという欠点があります。それらはGNU拡張です。
- 考慮すべき他の可能性は何ですか?(例:代替シェルを含む)
- 彼らの長所と短所は何ですか?(既に記載されている可能性を含む)
この質問は確かに個人的な意見を求めるものではありません。それが要求するのは可能性とそれに関連する客観的な属性です。
ベストアンサー1
唯一の単純な[1]答え(IMHO)はシェル関数を作成することです。
それは次のとおりです。
cy() { cp -i "$@"; }
新しい名前を使う(cy
[2])ソリューションが一部のシステムにまだインストールされていない場合は、何もしないでください。さらに、このソリューションは任意のシステムで実行できます。使用する前に、特定のバージョンのユーティリティがシステムに存在するかどうかをテストしたり、単にエラー/警告を発生させることもできます。
これにより、リストされているすべてのソリューションを使用できます。
[1]可能な解決策またはソース(GNU)についての偏見(または単なるコメント)は提示されていません。
[2]名前を選択してくださいcy
。co
(FWIW、co
RCS確認命令です)またはユーザーとして理解され、使用されるシステムで競合する可能性が最も少ない他のものです。