cpとmvはワイルドカードを使用し、ターゲットディレクトリを指定することを忘れました。

cpとmvはワイルドカードを使用し、ターゲットディレクトリを指定することを忘れました。

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]名前を選択してくださいcyco(FWIW、coRCS確認命令です)またはユーザーとして理解され、使用されるシステムで競合する可能性が最も少ない他のものです。

おすすめ記事