Path: katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 12 Apr 1994 10:57:17 GMT Organization: Software Research Associates, Inc.,Japan In-reply-to: yuuji@ae.keio.ac.jp's message of 24 Dec 93 14:49:32 GMT Newsgroups: fj.questions.unix Subject: xargs vulnerability (Re: panic) Distribution: fj References: <1993Dec24.061614.4234@sync.cs.keio.ac.jp> あまりの follow の遅さが議論の妨げになっていたらごめんなさい。 記事 で yuuji@ae.keio.ac.jp (HIROSE Yuuji) さんいはく > >>>>> メッセージID の, > >>>>> y3551@utsfd.cs.fujitsu.co.jp (Yukihito Yamaguchi) さんの記事より: > > Yukihito> メッセージ <1993Dec24.061614.4234@sync.cs.keio.ac.jp> で, > Yukihito> 細川( hosokawa@mt.cs.keio.ac.jp (HOSOKAWA Tatsumi) )さん: > > 細川> 私はコマンドラインから手で find と rm を動かす時には -exec rm -i {} に > 細川> しています。 > > Yukihito> 私は > Yukihito> find ..... -exec echo rm {} ¥; > Yukihito> しておいて(数が多そうなら後ろに |more) > Yukihito> OKなら > Yukihito> find ..... -exec echo rm {} ¥; | sh > Yukihito> ^^^^^ここを追加 > > Yukihito> これ以外の場合でも, シェルスクリプトを吐くプログラムを作って, 確認後 > Yukihito> |sh > Yukihito> を付けるのは, 良くやってます. > Yukihito> 結構便利だと思うんですが... > > こういうばあいには xargs だと思うのですが、なんかいまいち人気ありませ > んよね:-)。 > > # grep -l hoge * | xargs less > # とか News spool を見る時に便利です。  spool を見る例に限れば、less `(e)grep -l hoge *` ではいかがでしょう。 xargs は引数リストが長くなりすぎないよう調整をしてくれますが、これのお かげで、マッチするファイルが沢山ある場合、less が何度にもわけて起動さ れるのではないでしょうか。つまり、:q でなどで終了したつもりでも、また 次の less と対話するはめにならないでしょうか。  こうした理由で、一般に、xargs から対話的なコマンドを実行させると混乱 する場合があると私は考えています。  少し前にはニュースでも議論されていたと思いますが、xargs に人気がない のには、危険性の問題も影響していると思います。一例をあげると、 csh% touch 'aaa¥ -r ..' なんてしてあって、ls などの出力を xargs -i rm {} のような処理に付すと 怖いですね。find ... -exec rm {} ¥; が安全、かつ完全に削除されるのと比 較してください。  もちろん個々の例に限れば、rm {} ではなく rm - {} にして破滅だけは避 けるとか、GNU の xargs で -0 を使うよう工夫して危険性を減らすとか、い ろいろな回避策があるかと思います。しかし、標準入力を読んで自分で引数の 区切りを決めることから、こうした潜在的な事故の可能性は xargs ではどう しても本質的に避けられないのだと考えています。(パイプで sh に渡すこと にも同様の問題があります。)  この記事での私の主張は、パイプで xargs や sh にデータを渡すのは悪い という批判ではなく、適当な注意を払って便利に使おうということです。 -- 渡邊克宏@SRA