68user's page 掲示板

Prev< No. 3601〜3640> Next  [最新発言に戻る] [過去ログ一覧]
No. 3601 # スナフキン 2004/03/05 (金) 23:05:42
ごめんなさい、どんな情報が必要かわからなかったのと、自分でも
何が問題なのかよく判らないもので・・・

>再マウントできませんか?
いろいろと指定を変えて試しています。
ただ、パーティンション情報が間違っている時に rw で書き込んで
大丈夫でしょうか?

A1 HDDはIDEが一台のみです。
A2 メッセージをかいつまんで見る感じでは、superblock が読めない
        と表示されているように思いました。
A3 シングルモードで試してみましたがROでマウントされている状態が
        変わりません。
A4 起動中に /proc へのアクセスが出来なくてエラーとなっているようです。
    /boot /var /usr /proc のマウントが失敗しているようですが、 / に
    /usr /var というファイルが存在しますが、/proc というファイルは
    存在していません。

関連サイトをあさって情報を探していますが、ファイルシステムは(も)
よく判らない状態です・・・

ログは /var へアクセスできないのでお手上げです。

No. 3602 # へにか [URL] 2004/03/06 (土) 00:08:25
"Merkle-Hellman" DESと、Googleで検索をかけたところ、
http://info.isl.ntt.co.jp/~ohta/BOJ-Seminar.pdf
を見つけました。21枚目あたりが参考になるかも知れません。

#なんだか、いらない突っ込みしてしまって、余計な苦労を
#かけてしまったとしたら、申し訳ないです。
#お忙しいでしょうし、僕の意見も間違っている可能性大い
#にあるでしょうから、その内気が向いたらで結構です。

No. 3603 # 68user 2004/03/06 (土) 00:31:48
>>3601 スナフキン
> A3 シングルモードで試してみましたがROでマウントされて
> いる状態が変わりません。
シングルユーザモードで起動すれば、Read Only でマウント
されているものだと思います。狙いは / のみがマウントされ
ている状態にすることで、その後ひとつひとつマウントして
みることで、どの部分が壊れているのか原因がわかると考えました。

あとですね、この fstab では LABEL=/home などとファイル
システムのラベルを指定しています。わたしの知る限り FreeBSD や
Solaris にはこういった機能はないので想像ですが、fstab に
ラベルを指定すると、まず全デバイスのラベル名を取得し、
ラベル名が一致したデバイスを mount しようとするのでは
ないかと思います。

で、マウントしようとしているデバイスとは異なる場合でも、
ラベル取得時に壊れたファイルシステムが原因でエラーに
なるのではないかと想像しました (違うかもしれませんが)。

よって、ラベルを使わず
      # mount -o rw,remount /dev/hdx /hoge
などとデバイス名を指定してマウントしてみてください。

> /usr /var というファイルが存在しますが
マウントポイントは最初から必ず存在します。存在するか
どうかではなく、その下にファイルがあるかどうか、つまり
マウントに成功しているかどうかを教えてください。

> パーティンション情報が間違っている時に rw で書き
> 込んで大丈夫でしょうか?
保証はできませんが、大丈夫だと思います。もしファイル
システムとして認識できなければマウントできません。また、
/usr を /var に間違えてマウントしたとろで、/var/bin
とか /var/sbin とか /var/X11R6 などができてしまう程度
です (当然 umount すれば元通りです)。

ただ、そこでプログラム類が悪さをして /var などの下の
ファイルを操作してもらっては困るので、そういう意味でも
「シングルユーザモードで起動」をお勧めします。

No. 3604 # スナフキン 2004/03/07 (日) 01:41:20
結果から書くと諦めました。

教えてもらった事と、考えられる事を幾つか試してみましたが、
何らかのエラーのオンパレード・・・

remount も試しましたが、その内 / に居るのに /etc の内容が
見えたり完全におかしくなって来ました。

ちなみに、/ の中には、
/boot 空
/home 空
/usr 壊れたファイルの断片を含んだファイル
/var 同上
といった内容でした。
(lsコマンドが正常なうちの結果)

まともだった頃の、幾つかのコマンド結果を書いてみます。
#fsck /dev/hda2
Couldn't open /proc/partitions: Input/output error
Is /proc mounted?

# mount /proc
mount: non: can't read superblock

# fdisk /dev/hda
modprobe: modprobe: Can't locate module char-major-27
modprobe: modprobe: Can't locate module char-major-27

Unable to open /dev/hda


しかし、ext3 がクラッシュに強いってのは信じられなくなり
ました、4年近く使っている古いext2のシステムは、大きなト
ラブルも無く今だ健在なのにたった一度の不正終了で・・・。
運が悪いといえばその通りなんでしょうが・・・(涙)

お付き合いありがとうございました。

No. 3605 # スナフキン 2004/03/07 (日) 03:33:57
インストーラーで、前のパーティションを残してインストールする選択
肢が有ったので、/home を残して再インストールしたところ、ラッキー
な事にデータを残せたようです。
/etc は全滅なので全て再設定を行う必要が有りますが、一番重要なデ
ータが残せた事でよしとします。

また、今回のトラブルでファイルシステムのキーワードを沢山見つけま
したが、自分はシステムを作るヒトじゃなく使うヒトなので、あまり
深入りするつもりは有りません。

しかし、バックアップの重要性は友人にあれほど言っている自分が今回
の様なトラブルにあった事でよい戒めとなりました。

ジャーナルシステムを過信するとワタシの様な目に遭いますので、皆さ
まご注意を(^^;;;;

お騒がせいたしまして申し訳有りませんでしたm(_ _)m

No. 3606 # へにか [URL] 2004/03/07 (日) 20:49:33
英語と格闘させてしまってるところ、申し訳ないのですが、
暗号技術大全§15.2をご覧ください。

#ごめんなさい。手元にあるのに気が付かなくって。

しかも、Merkle-Hellmanの論文はacmに登録しないと読めない
ようなので、僕が一人相撲をとっていたようですね。

#間抜けなことをしでかして、すみません。

No. 3607 # バンガード [URL] [E-mail] 2004/03/08 (月) 16:00:43
色々と調べたのですが、どうしても分かりません。
以下の機能のスクリプトを作成中です。

1.ユーザーに入力を促し、ユーザーID、パスワードを入力させる。
2.入力されたパスワードの整合性チェック
                文字数、英文字数、数字文字数、ユーザーIDと不一致etc.
3.正しいパスワードであった場合、passwdコマンドを実行し該当ユーザーのパスワードを変更。

問題は、上記の「3」です。
ユーザーが入力したパスワードをそのままpasswdコマンドに渡し、パスワード変更を行いたいのですが、入力されたパスワード文字列をpasswdコマンドに渡すことが出来ません。
通常時のpasswdコマンド実行時の様に旧パスワード/新パスワード/新パスワード(再入力)を促さずに、変数として持っているパスワード文字列をpasswdコマンドに渡すことは出来ないでしょうか?

環境はAIX 5.2でシェルは出来ればkshで実現したいと考えています。

No. 3608 # 68user 2004/03/08 (月) 17:55:21
>>3607 バンガード
AIX は知りませんが、一般的な UNIX では root 権限があれば
元パスワードを聞かれることはないと思います。
    http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/passwd.htm

ただしプログラムで制御するなら、pwdadm を使った方が
よいような気がします。
    http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/pwdadm.htm

passwd は人間が操作することを前提としたコマンドなので。

No. 3609 # zsh 2004/03/09 (火) 00:49:09
>>3607 バンガード
passwdコマンドは端末からの入力しか受け付けないため
シェルからpasswdコマンドへ直接値を渡すことは出来ません。
expectを使うのが一般的?かなと思います。
(Solaris以外はさっぱりなので参考程度に。)

>>3608 68user
AIXにはpwdadmというコマンドがあるのですね。
HP-UXのshの話といい、色々と参考になります。

No. 3610 # 68user 2004/03/09 (火) 01:30:50
>>3609 zsh
> passwdコマンドは端末からの入力しか受け付けないため
> シェルからpasswdコマンドへ直接値を渡すことは出来ません。
UNIX 一般の話であれば、そうでもありません。Linux では
    % ( echo oldpasswd ; sleep 3 ; \
            echo newpasswd ; sleep 3 ; \
            echo newpasswd ) | passwd
でできました。Solaris8 だと不可でしたが、本当に端末が
ない状況 (cron からとか、CGI からとか) でやるとうまく
いったりするかも、とか思ったりします。

なぜ sleep が必要かについてはよくわからないんですが、
そのうち Linux の passwd のソースを読んでみよう。

>>3593 へにか
遅くなりましたが、2key-3DES について。お待たせしたわりに
技術的な話ではないんですが…。

http://x68000.startshop.co.jp/~68user/net/crypt-1.html では、
      2key-3DES はやめといた方がいいよ。なぜなら、こんな
      攻撃方法があって、現時点では (全数探索を除くと) 最も
      現実的な攻撃と思われるからでありますよ。
ということを書きたかったのです。よって、これに対して

> 確かに2つの鍵を使う3DESは攻撃方法がある、ということも
> 書いていますが、どっちかって言いますと、既存の方法、すなわち、
> §2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、
という指摘はちょっと意図が図りかねるなぁと思っておりました。

つまり Merkle-Hellman Attack の選択平文攻撃よりも既知
平文攻撃の方が脅威であるため、
    「Merkle-Hellman Attack の方は紹介しなくていいかな。
        論文も見つからないし」
と思ったわけです。もしこの認識が誤りであればご教示願います。

No. 3611 # へにか [URL] 2004/03/09 (火) 07:23:26
>>3610 68user

> つまり Merkle-Hellman Attack の選択平文攻撃よりも既知
> 平文攻撃の方が脅威であるため、
> 「Merkle-Hellman Attack の方は紹介しなくていいかな。
> 論文も見つからないし」

当時の僕は論文の意図しか見ておらずこの、「論文も見つからない」
ということ、特に誰でも容易にハイパーリンクを辿ることによって
確認できる方法が無い、というところまで、頭が回っていませんでした。

> と思ったわけです。もしこの認識が誤りであればご教示願います。

いえ、少なくとも現在の僕の認識とは同一です。

#僕の勇み足だったと思います。お詫び申し上げます。

No. 3612 # バンガード [URL] [E-mail] 2004/03/09 (火) 10:09:31
>>3610 68user
バンガードです。

この掲示板を使うのが初めてなので、うまくコメント出来ていなかったら御免なさい。

>UNIX 一般の話であれば、そうでもありません。Linux では
> % ( echo oldpasswd ; sleep 3 ; \
> echo newpasswd ; sleep 3 ; \
> echo newpasswd ) | passwd
>でできました。Solaris8 だと不可でしたが、本当に端末が
>ない状況 (cron からとか、CGI からとか) でやるとうまく
>いったりするかも、とか思ったりします。
        at コマンドで試してみましたが、残念ながら駄目でした。

        引き続きpwdadmについて調査致します。
        また、結果を報告させていただきます。

No. 3613 # バンガード [URL] [E-mail] 2004/03/09 (火) 11:40:26
>>3608 68user
>ただしプログラムで制御するなら、pwdadm を使った方が
>よいような気がします。
    pwdadmについても確認しましたが、残念ながらpasswdと動作は変わらない様です。
    (もう少し、細かい設定が出来はしますが)

    やっぱり、旧/新パスワードを聞いてきて、それぞれの入力が必要であると言う部分では、全く変わりませんでした。

>>3609 zsh
    expectについては、昨日も調査を致しました。
    しかしながら、expectおよびTclの導入が必要ですので、採用を躊躇しています。

No. 3614 # 68user 2004/03/09 (火) 13:33:52
>>3613 バンガード
3608 でも書いたように、root 権限で実行したら
旧パスワードは聞かれないと思いますが、どうですか?

No. 3615 # バンガード [URL] [E-mail] 2004/03/09 (火) 14:19:13
>>3614 68user
はい。この件は返事が抜けていましたね。
申し訳ございません。
仰る通り、root権限であれば確かに古いパスワードは聞かれません。
ですが、結局は新パスワードに入力が必要であり、ここでユーザーの介在が必要なことに変わりはありません。

やっぱり、expectを導入するしかないのだろうかと考え始めています。

No. 3616 # 68user 2004/03/11 (木) 01:40:33
>>3615 バンガード
> やっぱり、expectを導入するしかないのだろうかと考え始めています。
もし AIX の passwd が、どうしても端末からしか読んでくれないなら、
expect などに頼るか、PAM を使ったパスワード変更プログラムを
書くことになるかと思います。

No. 3617 # ビギナー 2004/03/11 (木) 17:28:30
LinuxASからsolaris9に乗せ替えるのですが、
クーロンはどのように移行できるのでしょうか?
まだ実機が来ていなくて何も環境が見えません。
これまでの設定ファイルやスクリプトファイルが
そのまま使えるのか、シェルの変更をしないと使えないのか、
どこに配置するのか・・・少しでも事前に解っていれば助かるかな〜って思ってます。

No. 3618 # 68user 2004/03/11 (木) 18:24:25
>>3617 ビギナー
あらーそれは大変ですね。基本的に機能面 (コマンドの数とかオプションの
種類とか) で言うと Linux > Solaris なので (正確には GNU モノ > Solaris)、
Linux から Solaris への移行は結構面倒です。

まずは Sun が提供している
    「Linux から Solaris オペレーティング環境への移行」
            http://sdc.sun.co.jp/solaris/migration/linux/index.html
をどうぞ (ドキュメントを読むにはユーザ登録が必要だと思われます)。

上記ドキュメントには、当然ながら Sun に都合が悪いことはあまり書かれて
いませんので (互換性ないですよ、とはあまり書かれていない)、以下わたしの
印象を書きます。

全体的に言えることは、
      - Linux (というより GNU) 独自の機能を使っていたら移行に苦労する
      - 古来からの UNIX の機能しか使っていないならあまり苦労しないかも
ということです。GNU モノの一覧はこちらを。
      http://www.linux.or.jp/JM/INDEX/gnu.html
特に Solaris の find・date・grep・tar・make・awk・sed コマンドの機能は、
Linux のそれと比べると貧弱な印象があります。

まぁ Solaris でも GNU モノをインストールすることはできるので、
がんばってプログラムを直すか、Solaris に GNU モノを入れるかという
選択肢はありますけどね。

なお、apache や perl など、Linux にも Solaris にも属さないもの
(第三者が開発しているもの) は、基本的に同じ動きをします。


> クーロンはどのように移行できるのでしょうか?
基本機能は同じですが、例えば
      http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html
の name=value という書き方は Solaris ではできません。
0-23/2 というのもダメなはず。

上記 man には
      ATT や BSD の cron では "1-3,7-9" は拒否されるだろう --
      "1-3" または "7,8,9" のいずれかだけしか指定できない。
とありますが、Solaris ではどうだったかなぁ。

Solaris の crontab(1) はこちら。
    http://www.freebsd.org/cgi/man.cgi?query=crontab&apropos=0&sektion=0&manpath=SunOS+5.9&format=html

> 設定ファイル
OS の設定ファイル名や内容は、同じものは同じですが、違うものは
違います (としか言いようがない)。

同じもの:
      /etc/hosts, /etc/resolv.conf, /etc/nsswitch.conf

違うもの:
      その他たくさん。Linux の /etc/fstab は、Solaris では /etc/vfstab など。

> スクリプトファイル
Linux では sh は bash ですが、Solaris は古来からの sh です。例えば
Solaris の sh では
    export A=B
はダメで、
    A=B
    export A
としなくてはいけません。このような bash 依存な書き方をしていなければ
少しの修正でいけるかもしれませんが、bash の便利な機能を活用しまくって
いるなら苦労するでしょう。

No. 3619 # ビギナー 2004/03/12 (金) 11:49:16
>>3618 68user
参考にさせていただきます。
実機の搬入が来週なので、結果報告はその時にします。

No. 3620 # バンガード [URL] [E-mail] 2004/03/12 (金) 19:13:45
>>3616 68user
現在expectで対応する方向で準備中です。
ありがとうございました。

No. 3621 # バンガード [URL] [E-mail] 2004/03/12 (金) 19:17:53
度々申し訳ございません。
今度はkshで教えてください。

======= test_file ========
aix4-r1
aix4-r2
aix4-r3
aix4-r4
aix3-r1
aix3-r2
aix3-r3
aix3-r4
aix2-r1
aix2-r2
aix2-r3
aix2-r4
======= test.ksh ========
#!/usr/bin/ksh

file="test_file"

nawk '{
                if ( (substr($0,1,4) == "aix4") )\
                {\
                                printf "TRUE:%s\n",$0; \
                }\
                else {\
                                printf "FALSE:%s\n",$0; \
                }\
}' $file

上記の様に文字列の先頭数文字のみを見て一致するかの判定を行いたいのですが、ksh単体での実現方法が分からず苦労しています。
やはり、上に示したようにawkを使用して、その中でsubstr関数を使用するしかないでしょうか?

本当に基本的なことで申し訳ございませんが、よろしくお願い致します。

No. 3622 # 68user 2004/03/12 (金) 22:12:33
>>3621 バンガード
こんな感じですかね。

while read line; do
        prefix=${line%-r[0-9]}
        if [ "$prefix" = "aix4" ]; then
                echo "TRUE:$line"
        else
                echo "FALSE:$line"
        fi
done < test_file

No. 3623 # バンガード [URL] [E-mail] 2004/03/15 (月) 09:51:21
>>3622 68user
> prefix=${line%-r[0-9]}
> if [ "$prefix" = "aix4" ]; then
これだと、私が例で示させていただいたパターンにしか対応できませんよね。(そういう意味では私の示した例が悪かったですね)
これを「aix4-r23,aix-r4x3」なども「一致」と見るような方法は無いでしょうか?
たとえば、以下のようなif文は無理でしょうか?
if [ $line = "aix4"* ]; then

No. 3624 # 68user 2004/03/15 (月) 10:41:45
>>3623 バンガード
> 「aix4-r23,aix-r4x3」なども「一致」と見るような方法は無いでしょうか?
> if [ $line = "aix4"* ]; then
aix4* では aix-r4x3 はマッチしないように見えますが、
またしても不適切な例ではありませんか?

> if [ $line = "aix4"* ]; then
if ではできませんが、case ならできます。

while read line; do
    case $line in
        aix4*)
            echo aix4
        ;;
        aix5*)
            echo aix5
        ;;
        *)
            echo others
        ;;
    esac
done < test_file

No. 3625 # バンガード [URL] [E-mail] 2004/03/15 (月) 12:55:51
>>3624 68user
>aix4* では aix-r4x3 はマッチしないように見えますが、
>またしても不適切な例ではありませんか?
おっしゃるとおりです。
重ね重ね申し訳ございません。

>if ではできませんが、case ならできます。
なるほど、caseでなら「aix4*」が可能ですか。
助かりました。

No. 3626 # 裏方 [E-mail] 2004/03/15 (月) 16:35:44
初めまして、裏方と申します。
WinSockを用いたウィンドウズネットワークプログラムで、インター
ネットを介して、私のマシン名からIPアドレスを取得する方法に
ついて悩んでいます。言語はC言語を扱っております。

ローカルネットワークではマシン名からIPアドレスを取得するには
Gethostbyname関数で取得できるのですが、インターネットを介した
遠方のマシンのから私のマシンのIPアドレスを取得する事が出来ま
せん。(私のはサーバマシンでは無いので当然なのですが・・・)

私のマシンは大学で扱っているもので、ネットワークに繋ぐたびに
動的なIPアドレスが割り当てられるのですがサーバプログラム等を
私のマシン上で動かすときにいちいち相手に今のIPアドレスを教え
なければならないので非常に不便です。

どうにかして、私のマシン名からIPアドレスを取得する方法が
あるのでしょうか?どなたかアドバイスをお願いします。

No. 3627 # 68user 2004/03/15 (月) 16:58:12
>>3626 裏方
- 逆引きできないから困っているの?
    (もしそうなら「マシン名」というのは何?)
- IP アドレスがころころ変わるから困っているの?
    (もしそうなら「マシン名」は関係ないのでは?)
- そもそもマシン名って何を指しているの? FQDN?
- DHCP で振られる IP アドレスには FQDN が設定してあるが、
    外部向け DNS サーバには登録してなくて、内部からしか逆引き
    できない、という状況?

などなど疑問はつきませんが、http://www.dyndns.org/ などの
DynamicDNS と呼ばれるサービスを使うのが一つの解でしょう。

ただしこれは、大学とは全く関係ない FQDN を、大学から付与されて
いる IP アドレスに結びつけるということです。管理者が寛容である
ことを期待するか、リスクを負ってこっそりやるのがよいでしょう。

No. 3628 # Tangerine 2004/03/15 (月) 17:11:48
始めまして、UNIX使い始めです。
この度、awkコマンドを使用してファイルを分別して削除するシェルを作成しているのです。

そこでお聞きしたい事がるのです
awkコマンドのifなどの中で変数は使えないのでしょうか?

現在全ファイルに作成日付が付加されており、
指定日より前の物を削除したいいのです
シェルの前半で指定日付を変数へ代入し
lsとawkをパイプで繋いで削除しようとしています
awk内のifなどによる条件判断で変数を宣言すると$0のメンバー名全体が表示されており判別できないのです
(ifを削除しprintで変数を表示させて確認)

出来ないのであれば何か別の方法を考えなくてはいけないのですが
何方かお答えください

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3629 # zsh 2004/03/15 (月) 17:50:12
>>3628 Tangerine
具体的にどのようなスクリプトなのか見せて頂けませんか?
(そもそもawkを使う必要があるのでしょうか?)

No. 3630 # Tangerine 2004/03/16 (火) 11:02:40
返信遅れてすいません。
えっと、確かに自分もawkを使う必要があるのか微妙ですが

#! /usr/bin/sh

make_date=`date +"%Y%m%d"`
make_date=`echo $make_date"-1" | bc`
echo $make_date
ls *.*.* | awk -F. '{if($2<make_date) print $0}'

問題としているのはこのあたりです。
変数make_dateに昨日の日付けが入り、
それ以前のものを表示させたいのです。

正直なところを言えばawkを使う必要性はまったくといってないです
ただ、自分が色々調べた結果awkを使ってやれば出来るのか?
と、考えて使ってみただけですので

awkじゃなくて別の方法で行えるのであれば
御教授いただけると嬉しいです。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3631 # zsh 2004/03/16 (火) 12:48:26
>>3630 Tangerine
単純に昨日以前のファイルを表示するのであればこんな感じで。
(ファイルが無い時を考えるとls使った方がいいのかな?)
------
#!/bin/sh

make_date=`date '+%Y%m%d'`
for f in `echo *.[0-9]*.*` ; do
    d=`echo $f | cut -d. -f2`
    [ $d -lt $make_date ] && echo $f
done
------

awkを使うのであればこんな感じかな。
実装されているawkによって変数の設定の仕方が違うので注意してください。
------
#!/bin/sh

make_date=`date '+%Y%m%d'`
ls *.[0-9]*.* | awk -F. '{if($2 < d) print}' d=$make_date

No. 3632 # Tangerine 2004/03/16 (火) 13:56:36
>>3631 zsh
おおっ!!有難う御座います(T▽T)
なるほど、forですね。なんとも勉強不足でした(^^;
やはりawkでは変数をそのまま引き継げないのですね
awk内で更に変数に入れ込まなければいけないとは(^^;
有難う御座います
教えていただいた方法で作成していきます。
本当に助かりました(w

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3633 # 68user 2004/03/16 (火) 14:15:32
>>3632 Tangerine
> やはりawkでは変数をそのまま引き継げないのですね。
そういうわけではありません。

> ls *.*.* | awk -F. '{if($2<make_date) print $0}'
awk はどういう引数が欲しいか、というと
      awk -F. '{if($2<$make_date) print $0}'

      awk -F. '{if($2<make_date) print $0}'
ではなくて、
      awk -F. '{if($2<20040315) print $0}'
となってほしいわけです。

で、こうなるように書くにはどうすればよいか。

[方法1]
まず
      awk -F. '{...}'
と '' で囲ってはいけません。'' で囲った時点で中に入っている
変数が展開されなくなります。というわけで、
      awk -F. "{...}"
と "" で囲みます。これで中の変数が展開されます。しかし
      awk -F. "{if($2<$make_date) print $0}"
と書いてしまうと、$2 や $0 まで展開されてしまいます。$2 や $0 は
awk にそのまま渡したいので、
      awk -F. "{if(\$2<$make_date) print \$0}"
と \ でエスケープします。

[方法2]
方法1 のエスケープがうっとうしいなら、まず
      awk -F. '{...}'
と '' で全体を囲みます。そして狙いのところだけ '' の外に出します。例えば
      awk -F. '{if($2<'$make_date') print $0}'
こんな感じ。つまり
      'x'$y'z'
という形にするわけですが、これは 'x' + $y + 'z' というふうに結合されるので
うまく動きます。

いずれの場合であっても、
      % sh -x hoge.sh
と -x オプションを付け、変数が狙い通り展開されているかどうか
チェックする癖をつけましょう。

No. 3634 # Tangerine 2004/03/16 (火) 14:52:46
なるほど〜、ややこしい事になっていたのですね〜
おかげさまで希望の日付以前のファイルを削除することが出来ました、
有難う御座います。

追伸
>% sh -x hoge.sh
使うようにしてみます(^^;

No. 3635 # zsh 2004/03/16 (火) 18:53:22
>>3633 68user
その方法があることをすっかり忘れてました。
(というか使った試しが無い・・・反省)
いつもながら勉強になります。

No. 3636 # tomato 2004/03/19 (金) 18:06:05
初めまして、Perl初心者です。
Socketを使ってUDPのプロキシ機能を作りたいのですが、
Send関数のあて先の指定で、inet_atonを使わずに指定
する方法がわかりません。というのも、あて先IPアドレスは
分かっているのですが、/etc/resolv.confには記述されて
いないからなのですが。
やっぱりinet_aton関数を使ってホスト名からIPアドレスを
取得しないとダメなのでしょうか?
どなたか教えてください。
環境は、Solaris8 、perl5 です。
今はこんな感じなのですが、、、

socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
$ip = '192.168.253.155';
$sock_addr = pack_sockaddr_in(2426, $ip);
send(SOCKET, "test", 0, $sock_addr);

No. 3637 # 68user 2004/03/19 (金) 18:36:10
>>3636 tomato
inet_aton には IP アドレスも渡せます。なので、
    socket(SOCKET, PF_INET, SOCK_DGRAM, 0);
    $ip = '192.168.253.155';
    $iaddr = inet_aton($ip);
    $sock_addr = pack_sockaddr_in(2426, $iaddr);
    send(SOCKET, "test", 0, $sock_addr);
でよいです。

    http://x68000.startshop.co.jp/~68user/net/func.html#inet_aton
ではホスト名しか渡せないような書き方をしていますので、ちょっと
不適切でした。

そもそも、C 言語での inet_aton の機能は、
      aaa.bbb.ccc.ddd という文字列を解析し、in_addr 構造体に格納する
というもので、名前解決は行いません。一方、perl の Socket パッケージの
inet_aton は、ホスト名も受け付けるように機能拡張されているわけです。

No. 3638 # バンガード [URL] [E-mail] 2004/03/19 (金) 23:25:32
    また初歩的なことで申し訳ありません。
    以下のプログラムで、13行目以降で配列(CMD)の内容を表示させて
いるのですが、全てNULLになってしまいます。

        +1 #!/usr/bin/ksh
        +2 INDEX=0
        +3 TEST=`ls -l |
        +4 while read LINE
        +5 do
        +6 CMD[$INDEX]=$LINE
        +7 echo $INDEX":"${CMD[$INDEX]}
        +8 let "INDEX = INDEX + 1"
        +9 done`
      +10 echo "$TEST"
      +11
      +12 INDEX=0
      +13 while [ $INDEX -lt 5 ]
      +14 do
      +15 echo $INDEX":"${CMD[$INDEX]}
      +16 let "INDEX = INDEX + 1"
      +17 done

    このプログラムの3行目から10行目を以下の様に修正すれば、13行目
以降でも配列の中身が正常に表示されます。
        +3 ls -l |
        +4 while read LINE
        +5 do
        +6 CMD[$INDEX]=$LINE
        +7 echo $INDEX":"${CMD[$INDEX]}
        +8 let "INDEX = INDEX + 1"
        +9 done
      +10

    最初のプログラムの様に、最初のループの結果を変数にセットする
場合で、ループから出た以降も配列の中身を保つ方法は無いでしょう
か?

No. 3639 # zsh 2004/03/21 (日) 22:59:40
>>3638 バンガード
バッククォーテーションでくくると別プロセスになるから
変数を保持することはできないと思いますが・・・

No. 3640 # 68user 2004/03/22 (月) 14:19:23
>>3638 バンガード
> このプログラムの3行目から10行目を以下の様に修正すれば
この修正ではなぜダメなのか理由を書いていただかないと、代案が出せないです。

Prev< No. 3601〜3640> Next  [最新発言に戻る] [過去ログ一覧]