68user's page 掲示板

Prev< No. 1321〜1360> Next  [最新発言に戻る] [過去ログ一覧]
No. 1321 # 68user 2000/11/06 (月) 21:22:52
@みーたんさん
盗聴できるかということならば、無理です。なぜなら SSL は
公開鍵と秘密鍵を使うから。盗聴によって公開鍵を盗めても、
秘密鍵はクライアント・サーバそれぞれが保持していますので、
データは守られます。
# という説明でわかってもらえるかしら。

@M.K さん
sh スクリプトで書きたいとか、perl を使いたいくらいは
書きましょうよ。こちらがサンプルを書いても、「いえ、
そうじゃなくて…」という返事はもらいたくないので。

まぁ 一言でいうと、date コマンドで現在日時を取得し、それを
キーとして grep です。date と grep のマニュアルを読みましょう。

No. 1322 # HAMA 2000/11/07 (火) 01:08:55
はじめまして。

当方cshシェル環境にてUNIXを利用しております。
その環境設定で「カレントディレクトリをプロンプトに追加」というのがありますが、
ディレクトリの移動によって「今現在どこに居るか」というのを表示させたいのです。

set prompt = "`whoami`@`hostname -s`[\!][`pwd`]%"

のように `pwd` をつけてもsourceコマンドによって.cshrcを再有効に
した時点でのカレントディレクトリが格納されたまま変化してくれません。

ディレクトリの移動に応じてプロンプト上に表示されるカレントディレクトリを
逐次変化させるためにはどの様に.cshrcを書き換えれば良いのでしょうか?
`pwd`の部分を$cwdとかに変えてもダメだったし...ほとほと困っております。

参考までに、現在の.cshrcの内容を書いておきます。

alias dir 'ls -alF'
alias less 'jless'

setenv LANG japanese
setenv EDITOR vi
setenv PAGER less
setenv BLOCKSIZE K
setenv EXINIT 'set showmode'
setenv LESSCHARSET japanese

set prompt = "`whoami`@`hostname -s`[\!]%"

なお、FreeBSD3.4R上での環境です。
どうかよろしくお願いします。

No. 1323 # つかさ 2000/11/07 (火) 05:27:26
C言語を覚えたいのですが
どなたかC言語を教えに来ていただけませんでしょうか。
兵庫県姫路市
ho-muzu@mui.biglobe.ne.jp
メールください。

No. 1324 # rosegarden 2000/11/07 (火) 07:43:30
> ディレクトリの移動によって「今現在どこに居るか」というのを表示させたいのです。

とりあえず、こんなんでどうでしょうか? テストは tcsh でやったので、
断定的なことは言えませんが、古い csh と互換性のある構文を使っています。

alias sp 'set prompt=`whoami`@`hostname -s`\[`pwd`\] '
alias cd "cd \!* ; dirs -l ; sp"
alias pushd "pushd \!* ; sp"
alias popd "popd ; sp"

ポイントは set prompt の alias をシングルクォートで囲むところですかね。
あと、cd, pushd, popd のごとに prompt の set をするということですね。
4.1-RELEASE 以降だと /bin/csh は tcsh なので、もっと簡単に出来ます。
たしか %/ とかいうのを使えば、良いだけだったと思います。

No. 1325 # HAMA 2000/11/07 (火) 09:18:00
rosegardenさんへ>

>ポイントは set prompt の alias をシングルクォートで囲むところですかね。
>あと、cd, pushd, popd のごとに prompt の set をするということですね。

なるほど。cdコマンドを使うたびにset promptするんですね。
ためしてみたところ、確かに出来ました。

>たしか %/ とかいうのを使えば、良いだけだったと思います。

これは知りませんでした。tcshの利用が可能なマシンがあるので
試してみましたが、ホントですね。うーん、こっちの方が簡単だなぁ。

でもメインのマシンはシェルの変更を許可してくれないので、
alias方式で行きます。どうもありがとうございました。

No. 1326 # 68user 2000/11/07 (火) 10:15:40
> でもメインのマシンはシェルの変更を許可してくれないので
僕は sh・csh のような非人間的なシェルを使うのは耐えられない
ので、そういうときは勝手に tcsh を入れて、~/.cshrc に
    if ( ${?tcsh} == 0 ) then
        exec /usr/local/bin/tcsh
    endif
などと書いてます。

前にちょっとはまったことを書いておきますと、これをするなら
~/.cshrc に setenv TERM vt100 などと書いてはいけません。
普通にログインするときはいいのですが、もし端末がない場合
(rsh を使う場合など) は、tcsh が端末があると勘違いして
入力待ちになってしまい、rsh が効かなくなるからです。

Solaris などで、デフォルトだと TERM=kterm になってしまい、
さらに /etc/termcap に kterm のエントリがないため、vi や
emacs を実行すると文句を言われるので仕方なく setenv TERM vt100
と書いている人もいると思いますが、それをするなら
    if ( ${?TERM} ) then
        setenv TERM vt100
    endif
と書けばいいです。これなら rsh のときは TERM が設定されません。

No. 1327 # FTPについて調べている者 2000/11/07 (火) 13:01:58
はじめまして。今UNIXにおいてのプロセス間通信として、
FTPをモデルとして調べていて、ここのHPにたどりつきました。
ものすごく参考になってます。で、聞きたいことがあります。
聞きたいことは、FTPクライアントのプログラムでのことですが、
C言語版での、GET及びPUTなのですが、GETの場合は、Perl同様に
soketより手に入れたデータをfopen関数を用いてのそのデータをGetしたファイルと同じ名前で保存することでGETされるのですか?PUTも同様ですか?
また、FTPサーバーでは、LESTやGETやPUT
のプログラム上では、どのような動きをしてるのでしょうか?
自分なりには、イメージがあるのですが自信がないので教えてもらい
たいです。
こちらの勝手なお願いですが、今週中までに返事を掲示板のほうでいただけると大変助かります。

No. 1328 # たん 2000/11/07 (火) 14:41:10
初歩的な質問ですが,
AIXを触り始めたのですが,
telnetでrootのログオンを許容しているのを
やめたいのですが,
設定ファイルがわかりません。
どのファイルにその設定が書いてあるのでしょうか?

あと,tcshをmakeするとEUCコードで作成されてしまいますが
AIX用(SJIS)での作成方法もご存知の方,お教え願います。

よろしくお願い致します。

No. 1329 # 68user 2000/11/07 (火) 15:55:40
> telnetでrootのログオンを許容しているのをやめたいのですが,
AIX は管理したことも使ったこともありませんのでわかりません。
init, pam, login, tty, ttys などのマニュアルを探してみてください。
    FreeBSD なら /etc/ttys
    Solaris なら /etc/default/login
    Linux なら /etc/security
あたりなので、/etc の下に片っ端から grep かけてみる
のもいいでしょう。
    cd /etc; egrep -i 'secur|root|login' * */* */*/*


> soketより手に入れたデータをfopen関数を用いてのその
> データをGetしたファイルと同じ名前で保存する
そうです。C でも perl でもやることは同じです。

> FTPサーバーでは、LESTやGETやPUT
> のプログラム上では、どのような動きをしてるのでしょうか?
コマンド用コネクションから RETR hoge が送られてきたら、
データコネクションを確立し、hoge のファイルを fopen して
データコネクションに hoge の内容を流します。

コマンド用コネクションから LIST/NLST が送られてきたら、
データコネクションを確立し、/bin/ls の結果 (別に ls を
使わなくてもいいけど) をデータコネクションに流します。

> 自分なりには、イメージがあるのですが自信がないので
> 教えてもらいたいです。
自分なりのイメージを書いた上で、それが合ってるか間違ってるか
たずねるのがスジというものでしょう。

No. 1330 # かりり 2000/11/08 (水) 04:44:11
質問というか、ご意見頂きたいです。
掲示板が荒らされたなら、制限したり削除できますが
メールが大量に届いたり本文が最悪なタグの羅列だった場合
どうすればいいんでしょうか?明日も変なメールきそうで
カナリ、不安です。これって警察に言えたりするものなのでしょうか?
迷惑防止条例とか。

http://www.alles.or.jp/~tll/toc/hino.html

No. 1331 # ppa 2000/11/08 (水) 11:56:14
Perlの質問です。

2000/10/01の三日まえを表示したいのですが
どのようにやれば良いでしょうか?

宜しくお願いします。

No. 1332 # 68user 2000/11/08 (水) 13:28:05
> 2000/10/01の三日まえを表示したいのですが
Time::Local で time_t 形式に変換し、3日分の秒数を引いてから、
再度 localtime で年月日の形式に戻します。
    use Time::Local;
    $time = timelocal(0,0,12,1,10-1,2000-1900);
    $time -= 60*60*24*3;
    ($sec,$min,$hour,$day,$mon,$year) = localtime($time);
    printf "%4d/%02d/%02d",$year+1900,$mon+1;


> メールが大量に届いたり
メールが何通届いていて、それぞれサイズはどれだけか、という
ことは、メール本文を取得する前に調べることができます。
また、これはメールサーバにもよりますが、あるメールの先頭
何行のみを取得、ということもできます。そういう機能を持つ
メーラーを探してみてはどうでしょうか。
    % telnet メールサーバ名 110
    USER your_user_name
    PASS your_password
    LIST (メール一覧とサイズ表示)
    TOP 1 3 (1通目のヘッダと本文3行のみを表示)
    QUIT (終了)

> 本文が最悪なタグの羅列だった場合
Windows はよく知らないんですが、HTML メールが送られて
きたら、HTML として開くか plain text として開くかを
確認してきませんか? 聞いてこないなら、まともなメーラーに
かえましょう。

No. 1333 # M.K 2000/11/08 (水) 14:13:23
68userさん > こないだは説明が足りずに済みません。助かりました。
またしても質問なんですが、
sh スクリプトで2つのファイルの内容が完全に一致した場合に
aというファイルに 日付,"一致"(文字列)を出力して、
一致しなかった場合には 日付,"不一致"(文字列)を出力したいんですが
全然わかりません。よろしかったら教えてください。

No. 1334 # 68user 2000/11/08 (水) 15:21:31
ファイルの比較には cmp か diff を使います。一致
したかどうかはコマンドの戻り値を見ればよいですが、
sh なら $? で参照できます。あとはマニュアルを
よく読んでみてください。

No. 1335 # as 2000/11/08 (水) 16:35:03
No.1269で、超初心者さんがやってたのと同じように、CGIからexpectスクリプト
を呼び出して、他のマシンにtelnetしてパスワードを変更するシステムを作って
いるんですが、telnetで戻ってきた文字が一部うまくexpectに渡されないようで
途中で止まってしまい、上手くいきません。

そこで$|=1にして出力を見たら、以下のところで止まっている事が分かりました。

spawn telnet server
Trying xxx.xxx.xxx.xxx ...
Connected to server.xxx.xxx.
Escape character is '^]'.

”Escape character is '^]'.”の後に、CRLFが来るんですが、それから先が上手
くexpectに渡されていない(?)ようです。

HTTPdがCRLFだから止めてしまっているんでしょうか?
それってHTTPdの仕様なんでしょうか?
exec 'expect';の後のprint文はexpectのtimeout後に出力されます。

どこで止めてしまってしまっているかを調べる方法や解決方法など、アイディア
がありましたら教えてください。

No. 1336 # 68user 2000/11/08 (水) 22:25:40
僕は expect 使ったことありませんのでわかりませんが、せっかく
perl を使っているんですから、Net::Telnet モジュールでやって
みてはいかがでしょう。
    use Net::Telnet;
    $t = Net::Telnet->(Timeout=>10, Prompt => '/\w+?@\w+?: /');
    $t->open('hostname');
    $t->login('yourname', 'password');
    @lines = $t->cmd("/bin/ls -l");
    print @lines;
    $t->close();
言うまでもないかもしれませんが、Prompt のところは適切に
変更しないと動きません。詳しくは perldoc Net::Telnet をどうぞ。

No. 1337 # 68user 2000/11/08 (水) 23:17:49
うーん、むずかしい…。全然理解してないことがよくわかった。
すごく汚くて変な書き方ですがこんな感じ。

    use Net::Telnet;
    $username='yourname';
    $oldpasswd='secret1';
    $newpasswd='secret2';
    $t = new Net::Telnet (Timeout => 5, Prompt => '/\w*? /', Dump_Log => 'telnet-log');
    $t->open("localhost");
    $t->login($username, $oldpasswd);
    $t->prompt('/Old password:/');

    $t->cmd("/usr/bin/passwd");

    $t->print("$oldpasswd\n");
    ($prematch,$match) = $t->waitfor('/[a-zA-Z ]+:/');
    print "[$prematch] [$match]\n";

    $t->print("$newpasswd\n");
    ($prematch,$match) = $t->waitfor('/[a-zA-Z ]+:/');
    print "[$prematch] [$match]\n";

    $t->print("$newpasswd\n");
    ($prematch,$match) = $t->waitfor('/[a-zA-Z ]+:/');
    print "[$prematch] [$match]\n";
    $t->close();

適当に $match の結果に応じて、パスワードが違うやら、
新しいパスワードが短いやら出力すればいいのかな。
expect の方がすっきり書けるような気も。

No. 1338 # 68user 2000/11/08 (水) 23:42:20
やっぱ僕がやるとしたら pw コマンドの wrapper 作って、
それを root に suid するなぁ。passwd の挙動を
全て把握するのは厳しい。

No. 1339 # as 2000/11/09 (木) 16:08:59
結局、68userさんのおっしゃる通りpasswdの挙動を全て把握するのは
厳しいので、telnetされる側のServerにID,Passwordを変数として受け
取って、passwdファイルを直接編集するperlを置き、それをCGI(Perl)
からtelnetして、rootで実行させるようにしました。

結局何故expectで動作しないのかは不明なままですが、要求を満たす
物は出来ました。

アドバイスありがとうございました。

No. 1340 # rosegarden 2000/11/10 (金) 02:48:35
私の場合、次のような感じのスクリプトで動きます。
一応、ログインしてコマンド実行程度なら、大丈夫のようです。
環境は perl 5.00503 + Expect-1.08 + FreeBSD 4.2-BETA です。

#!/usr/bin/perl

use Expect;

my $user = 'rose';
my $password = 'password';
my $prompt = 'host\{rose\}\d+\s';

my @cmdlist = (
        'ls -alF',
        'ps -auxw',
        'exit',
        );

my $telnet = Expect->spawn("telnet localhost");

$telnet->expect(30,"login: ") || die "NO login prompt";
print $telnet "$user\r";

$telnet->expect(30,"assword:") || die "NO password prompt";
print $telnet "$password\r";

my $match = $telnet->expect( 30,
        "closed by foreign host",
        "-re", $prompt
        );

die "refused by server\n" if $match == 1;
die "NO shell prompt, ".$telnet->exp_error()."\n" unless $match;

foreach $cmd ( @cmdlist ) {
        print $telnet "$cmd\r";

        my $match = $telnet->expect(
                30,
                "closed by foreign host",
                "-re", $prompt
                );
        last if $match == 1;
        die "NO prompt after command\n" if $telnet->exp_error();
}

$telnet->hard_close();
exit;

No. 1341 # 素人 2000/11/10 (金) 11:29:00
最近Unixを始めたのですが、サブルーチンの作り方がわかりません。
(呼び方、書き方)
簡単な例を教えていただけると幸いです。

No. 1342 # ミング [E-mail] 2000/11/10 (金) 14:03:27
awk scriptを使って下の様なことがしたいのですが、方法を教えて下さい。

Input File1:
10 abcde
9 bcdef
12 cdefg

Input File2;

3 abcde
5 cdefg
12 defgh

ファイル1と2を比較し、$2の内容が同じ場合、file1 と file2 の $1 $2 を output file の $1 $2 $3 $4に出力する。 比較して見つからない
場合はスペースを出力する。

Output file

10 abcde 3 abcde
12 cdefg 5 cdefg
3 abcde
                  12 defgh

よろしくお願いします。

No. 1343 # 68user 2000/11/10 (金) 16:48:24
> サブルーチンの作り方がわかりません。
言語がわからないと何とも言えません。

> awk scriptを使って下の様なことがしたいのですが
    #!/usr/bin/awk -f
    BEGIN{
        while (getline< ARGV[2] >0 ){ hash[$2]=$1 }
        while (getline< ARGV[1] >0 ){
            if ( hash[$2] ){ print $1,$2,hash[$2],$2 }
            else { printf "%s %s \n",$1,$2 }
            delete hash[$2]
        }
        close(ARGV[2]);
        while (getline< ARGV[2] >0 ){ if ( hash[$2] ){ print $1,$2 } }
    }
FreeBSD の awk と Solaris の nawk では動きましたが、
Solaris の awk では動かず。

うーん、awk らしくない…(笑) まぁ awk スクリプトを
書いたのは4年ぶりくらいなので、これで勘弁して下さい。
# 見本求む。

No. 1344 # 素人 2000/11/10 (金) 17:17:12
すみません。
Perlです。

No. 1345 # rosegarden 2000/11/10 (金) 18:26:57
> # 見本求む。

見本かどうか分かりませんが、私は次のように書きました。

#!/usr/bin/awk -f

{
        array[$2] = sprintf("%s %s", array[$2], $1);
}
END {
        for( key in array ){
                split(array[key], tmp);
                if( 2 in tmp )
                        printf("%s %s %s %s\n", key, tmp[1], key, tmp[2]);
                else
                        printf("%s %s\n", key, tmp[1]);
        }
}

起動は
% awk -f script file1 file2
としてください。連想配列に記録して、最後に出力という感じです。
ただし、次のような $2 が同じだが $1 が違う値を含む形式のデータは
仮定していません。

10 abcde
11 abcde

どちらかを捨てるようになっているかと思います。実際にはデータの形式の
チェックが要るかと思います。あと出力の順が不定になります。出力の
順番に依存する処理には向きません。動作チェックはしていません。
多分、本家の awk じゃ無理かな。動作チェックは gawk でやっています。

No. 1346 # mm 2000/11/11 (土) 02:57:30
># 見本求む。

単なるバリエーションということで…

    #!/usr/bin/awk -f
    NR == 1 { f = FILENAME }
    f == FILENAME { hash[$2]=$1 }
    f != FILENAME {
        if ( $2 in hash ) {
            print hash[$2], $2, $1, $2
            delete hash[$2]
        }
        else
            print $1, $2
    }
    END {
        for (r in hash)
            print hash[r], r
    }

No. 1347 # 68user 2000/11/11 (土) 15:18:07
もう他人の書いた awk スクリプトを見ても意味がわからん (笑)

> Perlです。
で、どういう処理をするサブルーチンの例を見たいのですか?
あと、素人とか初心者とかいうハンドルはやめてください。

それから、誰に向けて言うわけでもないですが、回答をもらっても
返事をする気がないなら、最初から質問しないでね。

No. 1348 # ミング [E-mail] 2000/11/12 (日) 00:33:45
沢山の回答、どうもありがとうございます。
あとお礼が遅くなってどうもすいません。
試してみてから出そうと思っていたのですが、家にUNixがないので
月曜になってしまいます。

このページを発見して間もないのですが、これから色々質問することもある思うので、その時はまたよろしくお願いします!

No. 1349 # 68user 2000/11/12 (日) 03:16:38
行頭のスペース、全角スペースを &nbsp; に置換するように
してみました。
        if ( m/^(<BR>)?(\&gt;|>)/ ){
                $_ = qq(<FONT COLOR="$color{QUOTE}">$_ </font>);
        }
の後に
        s|^( +)|'&nbsp;&nbsp;' x length($1)|e;
        s|^( +)|'&nbsp;' x length($1)|e;
を追加しただけです。

現状でこれをしちゃうとまずい UA ってありますっけ?

No. 1350 # KL 2000/11/12 (日) 03:16:47
こんにちは、はじめての書込ですが...
http://tsu.virtualave.net/TSU/whimsy.html
今週上のようなのをやることになったので
お時間のある方はどうぞ。(ちなみに日本語コードが
前のようなSJIS固定から、普通の日本語チャンネルと
同様のJISになってます)
GUIクライアントは、FreeBSDだとportsにGTK+使うXchat
の日本語化版があるそうです。
Linuxだとhttp://dns.manabi.gr.jp/~blend/の辺りが
よいかと(FreeBSDでこれrpmから出して使う場合は
GNU makeが要ります)。
いずれにせよJISになったので一般に配布されている
日本語化パッチの類が簡単に使用できるようになりま
した。

No. 1351 # 福井在住の中学一年生の女の子 [E-mail] 2000/11/12 (日) 11:25:52
えっと、早い話が「エポ」の場所教えて下さい!!
sachiyo@viola.ocn.ne.jp までメールで教えて下さいっす!

No. 1352 # へにか [URL] 2000/11/12 (日) 12:23:29
どうも、おひさしぶりです。

> 現状でこれをしちゃうとまずい UA ってありますっけ?
現状の解釈が、わからなかったので、手元のブラウザで
調査しました。

OK
  win98 IE2 IE4 w3m(cygwin)
  FreeBSD Nestcape3 chimera w3m
NG
  win98 Netscape3

とりあえず、こんな感じです。

※ ディスク容量が足りなくなって、だいぶuninstall
        したので、この程度位までしか調査できませんでした。

No. 1353 # rosegarden 2000/11/12 (日) 19:00:10
> 68user さん

> 行頭のスペース、全角スペースを &nbsp; に置換するように
> してみました。

おかげで助かります。今まで、unexpand して投稿していましたが、
インデントが崩れるのが悩みの種でした。

どうもありがとうございます。

No. 1354 # AKIKO34 2000/11/12 (日) 19:29:36
DATを初期化するコマンドって、UNIXでありますか??

No. 1355 # mm 2000/11/13 (月) 01:37:07
> 行頭のスペース、全角スペースを &nbsp; に置換するように
> してみました。
やっぱ、これが一番現実的みたいですね。

ウチでやらなかったのは、当時、使ってたWin95 NN4.1 が
カット&ペーストで全角スペースに変換してたからだけど、
今のNN4.73では、ちゃんと半角になります。

ところで、
        タブ
も変換して貰えると助かるんですが…

No. 1356 # 68user 2000/11/13 (月) 02:27:45
> NG win98 Netscape3
なるほど。よく知らないんですが、&nbsp; が中黒になる
んでしたっけ? UNIX 系の NN3 も表示できないと思って
いたんですが、OK なんですね。では、Win+NN3 環境は
残念ながら泣いていただく、ということにします。

> ところで、タブも変換して貰えると助かるんですが…
tab stop はいくつがお好みですか? (僕は4です)
でもこれをやるなら、書き込み時に置換しないと
いけないので、
    TAB が発見されました。tab stop=4 だと以下のように表示されます。
    [OK TAB=2にする TAB=8にする]
てな感じ? (笑)

ところで行頭以外のスペースを &nbsp; に置換するのって
意味ありますかね?

> DATを初期化するコマンドって、UNIXでありますか??
テープ関係はよく知りませんが、mt erase あたりではダメでしょうか。

> http://tsu.virtualave.net/TSU/whimsy.html
僕も何度かおじゃまさせていただきました。お暇な方はどうぞ。

No. 1357 # へにか [URL] 2000/11/13 (月) 08:13:58
>&nbsp; が中黒になる
そうです。目も当てられないです。

>UNIX 系の NN3 も表示できないと思って
少なくとも、Version 3.04 [ja_euc]はそうでした。

No. 1358 # へにか [URL] 2000/11/13 (月) 08:32:10
すいません、追加です。
winで確かめたNetscapeは、Version 3.01です。
.01と.04の差か(不明)? ←信じられん

※ win+NN3は、サポート外でいいと、思います。
        ほとんどNN4/IE4以上だろうし・・・

No. 1359 # デサント [URL] 2000/11/13 (月) 14:47:54
どなたかP内部のCPUやメモリーやモデムなどに詳しい方
色々教えて下さい。
仕事上、自らバージョンアップをしたいと考えていますのでよろしくお願いします。
またこのURLは現在の仕事上のものです。
興味がある方はアクセスしてください。

No. 1360 # ミング [E-mail] 2000/11/13 (月) 16:09:40
No.1343,1345、1346の例を参考にやってみたのですが、SolarisのAwkでは動きませんでした、、、、

そこで、InputFile1の$2だけをInputFile3にcopyして、InputFile2の$2を、InputFile4にCopyし、単純にINputFile3、と4を比較し、同じ内容はOutputFile1へ、違う内容はOutputFile2へ出すようにするのであれば、Awkでもできるでしょうか?

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