パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

安倍首相サイトの謎のUnixコマンドが復活」記事へのコメント

  • by Anonymous Coward
    日本国民から搾りとれる余力を確認中ですか?
    # df
    # du -h
    # free -tk

    なお、日本には下記コマンドはありません。
    # ulimit
    • 次の一手 (スコア:3, おもしろおかしい)

      by Anonymous Coward on 2007年03月03日 10時04分 (#1119956)
      >日本国民から搾りとれる余力を確認中ですか?
      となると今度は/tmpディレクトリのゴミを削除して…と

      rm -rf /tmp/.*

      #古いネタなのでAC

      親コメント
      • by midcpp (21702) on 2007年03月03日 23時39分 (#1120284)
        むしろ sysrq + l
        親コメント
      • by Anonymous Coward
        むしろ

        rm -rf /

        なんじゃね?
        • 元コメントは「rm -rf /tmp/.*」すると「/tmp/..」もマッチする、というネタですね。

          もっとも、私の環境(FreeBSD)だと、親切にも
          > rm: "." and ".." may not be removed
          といって拒否してくれます(同様に「rm -rf /」もできません)
          親コメント
          • Re:次の一手 (スコア:0, オフトピック)

            > 元コメントは「rm -rf /tmp/.*」すると「/tmp/..」もマッチする、というネタですね。

            くだらない質問で申し訳ありません。

            「rm -rf /tmp/.*」で「/tmp/..」がマッチして上位ディレクトリの内容が削除されるのは分かるんですが、
            「rm -rf /tmp/*」だと大丈夫なのは何故なのでしょうか?

            「rm -rf /tmp/*」でも単純に考えれば「/tmp/..」がマッチしますし。
            • > 「rm -rf /tmp/*」だと大丈夫なのは何故なのでしょうか?

              UNIX のシェル的には、ワイルドカード文字列「*」 は、. で始まるファイルにマッチしません。

              そのため「rm -rf /tmp/*」だと、. や .. が消されないだけでなく
              /tmp 下の、. で始まるファイルは削除されずに残ります。
              親コメント
              • Re:次の一手 (スコア:0, オフトピック)

                なるほど。

                Unix のシェルでは、ワイルドカール文字列 "*" のみ指定した場合には、 "." で始まるファイル (隠しファイル及び上位ディレクトリ) にはマッチしないんですね。

                もうちょっと詳細に考えてみると、

                (1) Unix シェル では "*" は "." で始まるデータにはマッチしない。
                これだと、".*" は "./" にはマッチするけど、"../" にはマッチしないので命題(元レス)に反する。

                (2) Unix シェル で "*" は "." を含むデータにはマッチしない。
                拡張子とかにも使われるから、ありえない。

                (3) Unix シェル で "*" を単体で指定した場合、"." で始まるファイル・ディレクトリにはマッチしない。
                これかなー。

                暇な時にでも実験してみようかと思います。
              • by Anonymous Coward
                何を悩んでいるのか知りませんが, ".*" と指定した場合は "." も ".." も ".hoge" もマッチしますが "hoge" はマッチしません. "*" と指定した場合は "hoge" にはマッチしますが "." も ".." も ".hoge" もマッチしません.UNIXマシンが無ければcygwinでも試せます. "echo /tmp/.*" とか実行してみればわかります.

                で, "/tmp/.hoge" や "/tmp/.hogehoge" など, "/tmp" の中の "." で始まるファイルやディレクトリを全部一括して消そうと思って,迂闊に "rm -fr /tmp/.*" とかやっちゃうと "/tmp/.." が含まれるので(略),というだけの単純な話です.
              • by IRCBOT (32650) on 2007年03月03日 23時51分 (#1120286)
                回答ありがとうございます。

                何を悩んでいるのか知りませんが, ".*" と指定した場合は "." も ".." も ".hoge" もマッチしますが "hoge" はマッチしません. "*" と指定した場合は "hoge" にはマッチしますが "." も ".." も ".hoge" もマッチしません.UNIXマシンが無ければcygwinでも試せます. "echo /tmp/.*" とか実行してみればわかります.
                で, "/tmp/.hoge" や "/tmp/.hogehoge" など, "/tmp" の中の "." で始まるファイルやディレクトリを全部一括して消そうと思って,迂闊に "rm -fr /tmp/.*" とかやっちゃうと "/tmp/.." が含まれるので(略),というだけの単純な話です.
                この部分は先ほどのレスで理解できたのですが、"*" が何を意味しているか (具体的にどういう正規表現となるのか) が分からず悩んでいます。
                "*" が "." から始まる文字列にマッチしないのであれば、".*" は "." にマッチし、 ".hoge" にもマッチしますが、".." にはマッチしないことになります。

                分かりにくい表現での質問で申し訳ありませんでした。
                親コメント
              • > "*" が "." から始まる文字列にマッチしないのであれば、".*" は "." にマッチし、 ".hoge" にもマッチしますが、".." にはマッチしないことになります。

                「ファイル名冒頭の.だけは、ワイルドカード指定が使えない」んです。
                そのため、*にも?にも[.]にもマッチしません。

                だから、
                「*」「?hoge」「[.]hoge」は .hoge にマッチしませんが、
                「.*」「.?hoge」「.[.]hoge」 は ..hoge にマッチします。

                これは簡単には正規表現で表せないですね。
                親コメント
              • by Anonymous Coward
                だれか、首相がかわらないうちにこれ [amazon.co.jp]の続々編にまとめてくれ。 売れるって、この本なら。
              • by IRCBOT (32650) on 2007年03月04日 1時20分 (#1120325)
                なるほど。
                完全に理解しました。
                "*" が何らかの正規表現のような役割をするわけではなく、ファイル名の冒頭だけ特別扱いになっているということですね。
                親切に回答していただき本当にありがとうございました。
                親コメント

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

処理中...