gnu.orgのドキュメントに記載されているようにファイルを一覧表示するためにlsを使用するのは危険ですか?

gnu.orgのドキュメントに記載されているようにファイルを一覧表示するためにlsを使用するのは危険ですか?

lsでファイルを一覧表示するのは危険ですか?

不明なファイルを含むディレクトリでlsコマンドを実行すると問題が発生しますか?

gnu.orgのドキュメントの次の文に記載されているようにlsコマンドを実行するのがどれほど危険なのかを示す例はありますか?

あまりにも多くの無邪気なユーザーが信頼できないソースのディレクトリで "ls"を実行します。

https://www.gnu.org/software/coreutils/quotes.html

答え1

危険は走るだけではありませんls。リスクは出力を入力または貼り付けることです。たとえば、信頼できないソースから名前を取得できます。既存(またはGNU)&date;を実行すると、次のようになります。lsls -N

&date;

シェルで何をするのか、何をするのか&わからない場合は、;次のいずれかを簡単に実行できます。

nano &date;
file &date;
rm &date;
cp &date; whatever

これらのコマンドはすべてすぐに実行されますdatedate有害なコマンドではなく、わざと安全な例を選択しました。しかし、ファイル名が文字通り指定された場合はどうなりますかfunny story about `rm …`.txt?ああ、どこに行こう!スペースのある名前を引用符で囲むか、エスケープする必要があることに気づき、二重引用符を選択することもできます。

less "funny story about `rm …`.txt"

実際には、この正確なコマンドはほとんど常に安全ですが(保持したい名前のファイルがなければ安全です)-rf ~バックティック内の内容が実行されます。引用符や二重引用符はありません。ファイルを安全にスキャンするには、名前を一重引用符で囲む必要があります。

less 'funny story about `rm …`.txt'

上記のコマンドは実行されませんrm

lsあなたがリンクした文書は、これらの事故から無実のユーザーを保護するように設計されたGNU機能に関するものです。デフォルトの出力を変更する理由の1つが次のように明示的に指定されています。

端末からファイル名を切り取り、貼り付けるより簡単で安全な方法

サンプルファイル名では、GNUはlsor'&date;'のようなコマンドの直後にこれを入力または貼り付けると、意図せ'funny story about `rm …`.txt'ず正しく引用されます。しかし、そうです。解釈するか、バックティックを使用します。fileless&

この機能は、「すべての項目に一重引用符」よりも複雑です。ファイル名自体に一重引用符を含めることができるため、盲目的に一重引用符を使用することは常に機能するわけではありません。通常、GNUはlsバックスラッシュ、一重引用符、二重引用符を使用できます。ANSI-Cの引用ファイル名を安全な形式で表示するには、*を貼り付けます。


*すべてのシェルがANSI-Cの引用を理解しているわけではありません。ただし、GNUを使用している場合は、lsこれを理解する最新のシェル(GNUなどbash)を使用しています。また、これはすべての状況に貼り付けたときに期待どおりに機能するコードスニペットを作成するわけではありません。これは、期待どおりに動作しない(または「不良作成者の意図どおりに動作」)スニペットを防ぐためです。

関連情報