>>3160 saki > チェックサム の意味がわかりません。 ファイル転送などで化けてしまったバイナリを実行しようと すると、「チェックサムが一致しません」とか言ってくれる、 ような感じですか? もしそうなら、そういう機能は聞いたこと ありません。 もしかして、そういうのが可能なコンパイラがあるのでしょうか。 |
>>3161 68user 68userさん ご返答ありがとうございます。 そのチェックサムです。 ファイルをバイナリで開いて、そのファイルの全バイナリ値の合計のこと だそうです。(すいません私もあまり詳しくないのです。) あるファイルをコピー(ダウンロード)する時に、 コピー前のファイルとコピー後のファイルのチェックサムを 比較して、あっていればコピーが正常、あっていなければ異常と するプログラムを作りたいと思っていまして、 > gcc(全般)でコンパイルした実行ファイルには > チェックサムは付加されているのでしょうか? とお聞きしたのは、ファイルそのものにチェックサムが付加されていれば ファイルをオープンしてチェックサムの値を比べるだけで済むのかなぁと 思いまして・・・。 そういう機能がないのであれば、チェックサム自体をプログラムで 作ろうと思い、 ネットで調べたのですが簡単すぎるからなのか情報があまりありません。 参考になるサイトや本などあれば、勉強したいのですが、 ご存知のかたはいますでしょうか? |
>>3162 saki チェックしたいのがバイナリだけでいいのか、データファイルも 含むファイル一般なのかわかりませんが、前者であれば gzexe http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=gzexe&dir=jpman-5.0.0%2Fman を使うのが簡単でしょう。gzexe は実行ファイルを圧縮しておく ためのコマンドですが、実行時に gzip で展開するので、結果的に gzip の誤り検出機能をそのまま利用できます。gzexe も 圧縮した 実行ファイルも、いずれも sh スクリプトですので、改造も簡単 でしょう。 後者であれば、単に gzip を使う手もありますし、あるいは cksum や md5 などのコマンドを利用するのもいいでしょう。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=md5&dir=jpman-5.0.0%2Fman http://www3.cds.ne.jp/~marimo/data/rfc/rfc1321-jp.txt なお、誤り検出のアルゴリズムとしては、 > ファイルをバイナリで開いて、そのファイルの全バイナリ値の > 合計のことだそうです。 は単純すぎます。言っちゃ悪いですが、この程度の認識しか持っていない のであれば、cksum や md5 などのコマンドを利用した方がよいです。 |
>>3153 68user なんかわざわざ書いてもらったようで恐縮です。 なんでもそうですが、自分が必要と思う部分を理解するには その周りの事情全てを勉強しておけ、というのが世間の常識なので、 俺みたくよこしまな考えでDNS関連の本やらWEBやらRFCやらを 眺めている輩にはなかなかハードルが高かったのですが、 おかげでDNS関連の資料に目を通すのにも少し抵抗が和らぎました。 ところで例の話の続きなんですが、うちのlinux(kernel-2.4.18+ glibc-2.2.4)では、bind-8.3.4-RELのdig8.3で名前解決できません。 straceしてみると、どうもpoll()で受信を検出できていないようです。 glibcの名前解決も同様のコーディングだったので、poll()を試しに select(),pselect()に変えてみましたがダメでした。 一方でbind9.1.3付属のdigでは名前解決ができました。 というわけで、そのコードをglibcに移植してしまえ、と思ったのですが、 iscライブラリというのが理解できず、結局移植はできていません。 一時はgethostbyname()内部を、正常に動作するdig9.1.3をsystem()で 呼び出し、その結果を拾ってくるように書き換えようと思いましたが、 どうやらgethostbyname()の利用頻度が低いようだったのでやめました。 今後についてはどうするか未定ですが、また調査しつつ改修しつつで 行きたいと思います。 |
かなりお久しぶりです。 >>3163 68user 実は私も、チェックサム=合計と思っていました。cksumのように CRC演算するものもチェックサムと呼ばれるようになった経緯を何 かご存知でしたら、教えていただけませんか? #少なくとも、CRC演算は合計(=サム)ではないです・・・ |
>>3165 へにか > 実は私も、チェックサム=合計と思っていました。 広義のチェックサムと狭義のチェックサムがあって、狭義の チェックサムは http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2 で言うところのアルゴリズム 1 なのだろうとわたしは思って います。このマニュアルではアルゴリズム 2・3 も「チェックサム」 と呼んでますね (それが一般的なのかどうかはわかりませんが)。 >>3163 68user を書いたときは、わたしの中では「チェックサム=広義のチェックサム」 だったので、あのような書き方をしましたが、 > ファイルをバイナリで開いて、そのファイルの全バイナリ値の > 合計のことだそうです。 は正しいですね。失礼しました。 |
>>3166 68user > チェックサムは > http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&man=cksum&dir=jpman-5.0.0%2Fman#sect2 > で言うところのアルゴリズム 1 なのだろう あ、加算のたびに右ローテートって書いてあるので、アルゴリズム 1 も 「狭義のチェックサム」とは異なるんですね。 |
68userさん、へにかさん ご返答ありがとうございます。 大変、勉強になりました。 チェックサムといっても、いろいろなやり方があるのですね。 >cksum や md5 などのコマンドを利用した方がよいです。 組込のLinuxだったので上記のようなコマンドがなく、 自作しました。 全バイナリ値を合計して、16bit桁あふれしたら、 あふれた分を削除するという簡単なものです。 こんなのでもいいのかなと不安になりますが、 貴重な情報をありがとうございました。 |
すいません、また質問です。 Windows で ActivePerl を使うと、 \r\n を読み込むと \n を読み込んだと思い込み、 \n を書き出すと \r\n を書き出そうとする習性があります。 これを停止するために binmode STDIN; binmode STDOUT; とするのですが、こうすると while (<>) { ... } で読み込もうとするときに、 C:\> perl スクリプト名 < ファイル だとうまくいくのですが、 C:\> perl スクリプト名 ファイル だとうまくいきません。 つまり、<> は引数でファイル名を渡されると、 STDIN 以外のファイルハンドルからファイルを読んでいるようなのですが、 このファイルハンドル名は分かるでしょうか? ActivePerl を Windows 2000 以降で使うと、 スクリプト名に .pl という拡張子を付けると C:\> スクリプト名 でいきなり実行できて便利なのですが、 このスクリプトの中で <> を使うと、 C:\> スクリプト名 ファイル名 だとうまくいくのですが、 C:\> スクリプト名 < ファイル名 だと '<' を第1の引数と思い込んでうまくありません。 動かそうとしてるのはしょうもないファイルダンプツールです。 # fdump.pl #$file = shift; #open IN, $file; #binmode IN; binmode STDIN; binmode STDOUT; #$/ = "\r\n"; while (<>) { # 1行ずつ読み込み $line1 = $line2 = $line3 = ""; # 作業域を初期化 @char = split //; # 1文字ずつ分解 foreach $char (@char) { # 1文字ずつ処理 $line1 .= $char; # 文字をそのまま $line1 にくっつける $hex = unpack "H2", $char; # $charを16進数値に変換して$hexに格納 ($hex1, $hex2) = split //, $hex; # $hexを1文字ずつ分解して$hex1、$hex2に格納 $line2 .= $hex1; # 16進数の前半を$line2にくっつける $line3 .= $hex2; # 16進数の後半を$line3にくっつける } print $line1; # $line1を出力する(改行はもともとついている) print "$line2\r\n"; # $line2+改行を出力する print "$line3\r\n"; # $line2+改行を出力する } |
>>3164 has > straceしてみると、どうもpoll()で受信を検出できていないようです。 ほほう、glibc の問題かカーネルの問題かはわかりませんが、今どきの Linux でそんな問題にぶちあたるとは運がいいですね。 ここは一気に UDP・IP スタックを解析して、Linus にパッチを送付する まで頑張ってください。しかし粘りますねぇ (笑) # NIC を変えたらすんなり直ったりして。 >>3169 ふくし % grep '<>' /usr/src/contrib/perl5/* /usr/src/contrib/perl5/toke.c: /* turn <> into <ARGV> */ となったので、それを手がかりに調べてみると、perl(1) に 以下のように書いてありました。 次のループは、 while (<>) { ... # 各行に対するコード } 以下の疑似コードと同等になります。 unshift(@ARGV, '-') if $#ARGV < $[; while ($ARGV = shift) { open(ARGV, $ARGV); while (<ARGV>) { ... # 各行に対するコード } } 本当に binmode ARGV でうまくいくのかどうかは試していません。 他の調べ方としては print %main::; でシンボルテーブルを表示し、 片っ端から試してみる、とかですかね。 |
<<3170 さん、 ありがとうございます。 結果として、 while (<ARGV>) { ... } でも while (<>) { ... } 同様に動くので、<>のファイルハンドルがARGVであることに 間違いはないようですが、 binmode ARGV; は効かないようです!? へんだなぁ、、。 |
>>3166 68user なるほど、狭義と広義の差が有るんですね。僕にとっては、 新たな知識です。どうも教えていただいて、ありがとうござ います。 20年程前のパソコン雑誌に載っていた機械語プログラムには、 横一列の合計が書いてあったのを懐かしんで、こんな質問を してしまいました。確か最初は何も無く、次に横一列、次に 縦一列と横一列、その次にそれ+CRC演算が出てきたという 記憶があります。確か一列はどちらも1octet x 16個で、CRC は256octet毎に1octetでした。 僕も、その後GoogleでCRCもチェックサムと呼ぶようになっ た経緯を調べたのですが、経緯自体は、なかなか見つからな いですね。 もし、どなたか見つけたら、教えていただければ嬉しいです。 蛇足ですが、単純に足すだけだと間違いが見つかりにくいので、 > 加算のたびに右ローテート のような工夫がされているんでしょうね(推測です)。 |
>>3172 へにか > なるほど、狭義と広義の差が有るんですね。僕にとっては、 > 新たな知識です。 わたしが世の中の「チェックサム」という用語の使われ方を見る限り、 広義のチェックサムと狭義のチェックサムがあるのでは、と思った だけですので、誤解のなきよう。 例えば IP・UDP・TCP のチェックサムは「1の補数和の 1の補数」で 狭義のチェックサムだと思いますが、一方 java.utik.zip.CRC32 http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/zip/CRC32.html は Checksum インタフェースを implements していますが、この「Checksum」 は広義のチェックサムかなぁと。…ってなんか苦しい例だなぁ。 http://www.onelook.com/?w=checksum&ls=a#all_com を見ても、わたしの思う「狭義のチェックサム」しか載ってないよう ですし、やっぱりわたしの認識が変なのですかねぇ。 ちなみに http://www.jisc.go.jp/index.html で JIS を調べてみましたが、「チェックサム」の定義は見付けられませんでした。 >>has あの後、寝てしまいました…。 |
時間のあるときに、遊びつつ飲みつつちょっとずつですが、 linux kernel-2.4.18-24.7.xにてpoll()を追っかけてます。 相当飛ばし読みでやっとこ__pollwait()。 けど先が見えません…。 @68user あいかわらずですな。またの機会に。 |
>>3173 68user > 誤解のなきよう。 了解しました。 色々調べていただいて、ありがとうございます。 http://www.onelook.com/?w=checksum&ls=a#all_com のリンク先、これから追いかけてみます。 そこで、早速二箇所追いかけたところ、面白い記述を見つけました。 http://www.wikipedia.org/wiki/Checksum > Note: The term 'checksum' is also often used incorrectly to mean a CRC. http://www.wikipedia.org/wiki/CRC >CRC's are often referred to as "checksums," but such > designations are not accurate since, technically, > a checksum is calculated through addition, not division. incorrectlyを始め、思わずbabylonで単語の意味を調べてしまいました。;) とにかく歴史上などの何らかの事由で捻じ曲がったのではないかと推測 していますが、なんとかその確証が得られるよう、調べてみます。 運良く見つけたら、連絡します。見つけられなかったら、次回の(他の ネタを含む)書き込み時に、その旨お伝えいたします。 #教えて頂いたリンク先、情報の宝庫ですね。ありがとうございます。 |
#連続ですみません。 >>3173 68user >やっぱりわたしの認識が変なのですかねぇ。 少なくとも、cksumが存在する以上、(繰り返しになりますが)何らかの 事由があったのでしょうから、変と思わなくても良いのではないかと思 います。といいますか、その事由に依存すると思いますので、変かどう かという問題ではないかもしれません。 #尊敬する68userさんでも困難な問題なので、わたくしごときが調べ #きれるかどうか自信ないですが、挑戦してみます。 |
ども。以前erro.cgiの件でお世話になった者ですが、 どうしても解決できない事が有り、質問させてください。 Web上にてユーザーがアカウントを自動登録できるようにしたのですが 登録したユーザーのquotaをcronで設定したく下記のようにしてみました。 つか見つけてきました。 */5 * * * * edquota -p foo `awk -F":" '$3 > 1000 {print $1}' /etc/passwd` idが1000以上のユーザーに予め設けたユーザーfooのquotaを例えばsoft 20000 と同じに設定すると言うものですが、これをcronで走らせても なぜか登録ユーザーのquotaには反映されません。 しかし、直接#rootで上記コマンドを打つと反映されます。 で、コマンドが長すぎるのかとも思い、 下記のように二つに分けてcronで走らせてもだめでした。 勿論、直接コマンドではOKです。 */5 * * * * awk -F":" '$3 > 1000 {print $1}' /etc/passwd > member_id.txt */6 * * * * edquota -p foo `cat /root/member_id.txt` 二つに分けた場合ではmember_id.txtは作成されているから edquota -p info `cat /root/member_id.txt`がcronで作動してない ということになりますが、理由がわかりません。 長文で申し訳ありませんがご教授お願いします。 |
あ! edquota -p info `cat /root/member_id.txt`がcronで作動してないは edquota -p foo `cat /root/member_id.txt`がcronで作動してないです。 |
すみません。自己解決しました。 cronからメールが来てました。 /bin/sh: edquota: command not found /usr/sbin/edquotanにしたら解決しました。 板汚してすみませんでした。 で、ついでと言っては何ですが、、、 suEXECを使ったCGIはその所有者の権限で動くわけですが、 その所有者には/bin/falseとしてシェルは利用出来ないようにしています。 でも、コマンドが使える(例えばtelnet.cgi)CGIではcat /etc/passwd 等と出来てしまいます。 これは誰の権限で動いているのでしょうか。 OSはLinuxで鯖はApacheです。 |
>>3179 ある厨 > その所有者には/bin/falseとしてシェルは利用出来ないようにしています。 /etc/passwd に書くログインシェルはあくまで 「ログインするときに起動するシェル」 です。 ログインとは telnet や rlogin や ssh 経由でログインすることを指します。 よって、cron から起動したり、setuid(2) して exec(3) する場合は関係 ありません。 web サーバは nobody や www 権限で動かされることが多いでしょうが、 /etc/passwd で nobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin などと /sbin/nologin となっているのは、単にその権限でログインさせない という設定になっているだけで、その権限でのプロセスの実行を制限している わけではありません。 >>3176 へにか (狭義の) checksum や parity や CRC や hash はデータ誤りを検出するための 一方式だと思うのですが、「データ誤りを検出するためのもの」一般は英語で 何て言うんでしょうね? http://www.wikipedia.org/wiki/Checksum にあるように「integrity-protection measure」としか言いようがないなら、 「データ誤りを検出するためのもの」という意味で「checksum」という用語を 使ってもいいんじゃないかなぁ、となんとなく思っております。 |
>>3180 68user なるほど、ただ単にログインできないと言うことであって 実行制限ではないと言うことですか。 勉強になりました。 #やぱり独学では限度があるにゃぁ。 |
>>3180 68user >「データ誤りを検出するためのもの」一般は英語で何て言うんでしょうね? Error Detecting Code (誤り検出符合)です。 因みに、CRCは、なんと、1bit-errorまでは訂正できてしまいます。 即ち、Error Correcting Code (誤り訂正符合)でもあるところが、parityやchecksumとは違うところで、面白いです。 #訂正方法は遠い昔に忘れました・・・ #hashは方式を知らないので、訂正できるのかどうか分からないです。 #今日本屋で調べても、歴史的なことは見つかりませんでした。A^^; #http://www.wikipedia.org/ は現在crashしているみたいです。 |
始めまして。 なんとなくXULの練習でUnixの部屋のMozilla用検索ツールバーを作ってみました 迷惑になるかもしれないので(それと家のサーバーが落ちてるからというのもある) 許可があるまで配布はしてないのですが配布してもよろしいでしょうか? # 家の鯖と外の鯖両方落ちてる・・・ # なぜ家に居ないときに落ちる・・・ |
>>3183 NPK > 配布してもよろしいでしょうか? はい、構いません。ぜひお願いします。 |
ASCIIでプログラミングして ISO-2022-JPを出力するプログラムを書いていますが (なんのために #! /usr/local/bin/perl -w print "\e\$B\$3\$s\$K\$A\$O\n"; だとうまくいくけど、 #! /usr/local/bin/perl -w print "\e\Q$B$3$s$K$A$O\E\n"; だとダメですね。 \Q〜\Eより先に変数展開が行われるみたいです。 ヘンな感じ、、。 |
>>3184 68user まだDNSが無いのがちょっとどうかと思いますが(^^; とりあえず置いてみました。 # 古いdyndnsのパスワード忘れたものでそのうちとろうと思ってとりあえずしばらく放置です(笑) |
はじめまして。unix初心者です。 定期的にhtmlをftpでファイルをアップロードしたいと思いました。それで、cronで実現しようと考えcrontabで編集したのですが上手く動いてくれません。コマンドが間違っているかと思い、console上で実際にやってみたところ普通に動きました。どうしてcronでは上手く動いてくれないのでしょうか? 以下の様にやっています。 10 0 * * * ftp -n < /home/hogehoge/ftp.sh ftp.shの中身 open ftp-server user hogehoge passwd ascii prompt cd data/ put index.html quit |
もじら組のゆきちといいます。いつも、こちらの記事は参考にさせていただいています。 >NPKさん 下記で紹介されているツールバーですが、「新もじら瓦版」というニュースサイト(?)があるのですが、そこでツールバーの報道を行なっても良いでしょうか。 ぜひとも、紹介させていただきたいのですが。 |
追記 今、InfoseekとX68Kの両方を利用してみたのですが、「新しいタブで開く」(Infoseek)「新しいWindow」(X68K)で開くを利用すると、最大化(全画面表示)になって、かつ、右にスクロールバーが出ない状態です。最大化を解くと、小さくなりますが、スクロールバーが出ませんね。1.4αです。 こんなところですいませんが、とりあえず、利用報告です。 |
ここで会話することじゃないと思いますが(^^; (68userさんすいません >>3188 ゆきち(もじら組) 紹介に関しては問題ないです。 鯖が貧弱なので落ちたらごめんなさい(笑) 開発には1.4α使ってるんですが家ではそんなバグは確認されてませんね・・・。 もしかしたらほかのXULアプリと衝突を起こしてるのかもしれません。 そのうち調べてみます。 |
ありがとうございます。今、時間がとれないですが、紹介してみようと思います。ありがとうございました。 #管理人さん、すいませんでした。 |
>>3185 ふくし > \Q〜\Eより先に変数展開が行われるみたいです。 プログラミング Perl 第 3版では、その辺の評価順序は明示 されていないみたいですね。 >>3187 Phantom 普通、/var/mail/$USER などに実行結果がメールで届くはずです。 そこに何か情報があるかもしれません。 >>3189 ゆきち(もじら組) FreeBSD 4.7-RELEASE + mozilla-1.4b (2003041308) ですが、再現 しませんでした。ただ、「新しいタブで開く」としても、(タブでなく) 新しいウィンドウが開いてしまいます。 infoseek の方ですが、アプリとしての感想を述べさせていただくと、 - うちの常用のサイズではウィンドウの幅が足らず、「新しいタブで開く」が 切れる (ウィンドウサイズを広げれば表示される) 「Search by Dictionary」と単語入力フォームが広すぎるのかも。 -「Search」で検索じゃなくて、「国語」「和英」「英和」それぞれを押せば 検索するといいかも (そしたら「Search」は不要) - 「和英」と「英和」はひとつにまとめて、フォームの内容が ASCII なら 英和、日本語なら和英、だといいかも。 - てなところを設定で変更できたりするとうれしいかも。 - 「英→日」はとても便利ですねぇ。 - 入力した単語の履歴が残って、さらに補完してくれたりすると素晴らしい。 てな感じです。 勉強用にとりあえず作ってみただけなのか、あるいは継続的に 開発されるのかわかりませんが、もし後者であればご検討ください。 >>3190 NPK > ここで会話することじゃないと思いますが(^^; 全く問題ないです。 >>has しばし待たれよ。 |
ずっと前に、 while (<>) { ... } のファイルハンドル ARGV に binmode が適用されないので、 while (<>) { ... } における ActivePerl の \r\n => \n 置換を抑制できない、 という話をしましたが、5.6 以降では binmode のかわりに use open IN=>"raw:"; だと動作するようです。PerlIOってやつですね。 |
>>3193 ふくし 自己レスれす。 use open IN=>":raw"; の間違いでした。 |
>>3185 ふくし perldoc perlre > You cannot include a literal "$" or "@" within a "\Q" sequence. An > unescaped "$" or "@" interpolates the corresponding variable, while > escaping will cause the literal string "\$" to be matched. You'll need > to write something like "m/\Quser\E\@\Qhost/". >>3192 68user > その辺の評価順序 「詳説 正規表現」のP245とか… |
改行コードについて質問いたします。 UNIX(HP-UX)の改行コードはLFだと思うのですが、 このコードを削除して複数行のテキストファイルを 一行にすることは可能でしょうか? |
>>3195 /tk > 「詳説 正規表現」のP245とか… 書いてありました。正規表現エンジンを作ってみる本だと思って 買ってみたらそうじゃなかったので、ほとんど読んでなかったり。 >>3196 天 tr -d '\n' < file perl -pe 's/\n//' < file などなど。 |
>>3192 68user > 普通、/var/mail/$USER などに実行結果がメールで届くはずです。 という事でしたが、何故か何も届いていませんでした。 それで、もう1度すべて見直して、ftp.shの中身を以下のようにしたら 出来ました。 ftp.sh open ftp-server user hoge passwd prompt cd data/ ascii del index.html put /home/hoge/public_html/index.html ./index.html quit なんか、putがうまく行ってなかったみたいです。それで、フルパスで 書いたら上手く行くようになりました。ここまで、書かなければならない とは、、、 ご迷惑おかけしました。 |
>>3192 68user 実験的な要素は強いですけど基本的に自分が使うから作ってるのでよさげなら取り込みます(笑) ってな訳で微妙に弄ってみました。 セレクトボックス以外は大体取り込んだと思います。 |
エンベロープを変えてメールを送る方法を超初心者向けにわかりやすく説明していただけませんか? |