68user's page 掲示板

Prev< No. 4901〜5600> Next  [最新発言に戻る] [過去ログ一覧]
No. 4901 # 68user 2008/04/18 (金) 13:53:44
2年半ぶりの人材募集です。
http://x68000.q-e-d.net/~68user/tmp/job2.html

No. 4902 # TKC 2008/05/02 (金) 14:09:57
こんにちわ。
findコマンドについて教えてください。

■要件
カレントディレクトリに存在する31日以前のファイル&ディレクトリの削除を実施したい

■コマンド
find ./ -mtime +31 -exec ls {} \; -exec rm -r {} \; >> test.log

■結果
./20070101.trc
find: ./aaa: No such file or directory

■質問1
カレントディレクトリに削除対象となる日付のファイル20070101.trcとディレクトリaaaを配置しています。
削除ファイルの一覧を取得したいため-exec ls {} \;を使用したのですが、
ログには./20070101.trcしか記載がありません。
ディレクトリも表示させるには何かオプションが必要なのでしょうか?

■質問2
実行結果としては削除は行われているのですが戻り値がエラーとなっています。
find: ./aaa: No such file or directoryの部分を指していると思うのですが、
削除後にfindしているように見受けられますがこのエラーの出力原因はなんでしょうか?

1と2の解決方法がありましたら教えてください。
宜しくお願いします。

No. 4903 # 68user 2008/05/02 (金) 16:00:22
>>4902 TKC
まず、-exec の代わりに -ok を使って何が実行されているか確認しましょう。

> ディレクトリも表示させるには何かオプションが必要なのでしょうか?
./aaa/ の中身が空ではないですか? 空であれば ls ./aaa しても何も
表示されないと思います。

> 削除後にfindしているように見受けられますがこのエラーの出力原因は
> なんでしょうか?
find はディレクトリを下降してファイルを探しますが、おそらく
ディレクトリを削除した後にそのディレクトリに下りようとしている
のではないでしょうか。-prune を組み合わせれば下りないように
できるかもしれません (試していません)。

No. 4904 # TKC 2008/05/02 (金) 16:38:38
>>4903 68userさん
-okを使用して確認しました。
ご察しの通り./aaa配下が空のため< ls ... ./aaa >となり
結果的にログに./aaaが出力されていないことがわかりました。

findのエラー原因はやはり削除後に配下に移動しているものと思われます。
rmにデータが渡る前に-pruneを使い解消されました。

最終的には下記で行いたい処理ができました。
find ./ -mtime +31 -prune -exec ls -d {} \; -exec rm -r {} \;

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

No. 4906 # hoge 2008/05/19 (月) 00:21:11
いつもこちらにはお世話になってます。

flexについての指摘です。
http://x68000.q-e-d.net/~68user/unix/pickup?flex

GNUでは作成・配布してないようです。
http://ftp.gnu.org/gnu/flex/flex.README

No. 4907 # 68user 2008/05/19 (月) 23:44:38
>>4906 hoge
> GNUでは作成・配布してないようです。
そうなんですか。知りませんでした。

ftp://ftp.gnu.org/non-gnu/flex/flex.README
      Flex is a free implementation of the well-known Lex program for lexical
      analysis. Since it is not (and never was) a GNU package, we don't
      distribute it here. Please see http://flex.sourceforge.net for the
      latest release and information.

や
flex-2.5.4 (1997年リリース) の README
      Note that flex is distributed under a copyright very similar to that of
      BSD Unix, and not under the GNU General Public License (GPL), except for
      the "configure" script, which is covered by the GPL.

などを見るに、確かに flex が GNU ではないようですね。

しかしこの書籍
    http://www.ascii.co.jp/books/books/detail/4-7561-3097-6.shtml
        Flex入門
        シリーズ:GNUシリーズ
        GNUのツールの1つとして広く使用されているGNUのLexical Scanner Generatorで
        あるFlexの解説書。豊富な例とともに機能を詳細解説
はどうなんですかね。

wikipedia(en) には
    http://en.wikipedia.org/wiki/Flex_lexical_analyser
        Flex is a non-GNU project, but the GNU project developed the manual for Flex.
とありますが、「GNU が作った flex のマニュアル」の翻訳が上記の「Flex 入門」
だったりするんでしょうか。

No. 4908 # 68user 2008/05/19 (月) 23:57:23
>>4907 68user
うーん、やはり 2.5.3 以前は GNU だったのだろうか。

http://cocoa.2ch.net/unix/kako/970/970914036.html より
----- ここから -----
Flex はそもそも non-gnuに移動になって、
下の Flex 2.5.4の COPYING みたいなことになっている。
-=-=-=-=-
Flex carries the copyright used for BSD software, slightly modified
because it originated at the Lawrence Berkeley (not Livermore!) Laboratory,
which operates under a contract with the Department of Energy:

Copyright (c) 1990 The Regents of the University of California.
All rights reserved.

This code is derived from software contributed to Berkeley by
Vern Paxson.

The United States Government has rights in this work pursuant
to contract no. DE-AC03-76SF00098 between the United States
Department of Energy and the University of California.

Redistribution and use in source and binary forms with or without
modification are permitted provided that: (1) source distributions
retain this entire copyright notice and comment, and (2)
distributions including binaries display the following
acknowledgement: ``This product includes software developed by the
University of California, Berkeley and its contributors'' in the
documentation or other materials provided with the distribution and
in all advertising materials mentioning features or use of this
software. Neither the name of the University nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.

This basically says "do whatever you please with this software except
remove this notice or take advantage of the University's (or the flex
authors') name".

Note that the "flex.skl" scanner skeleton carries no copyright notice.
You are free to do whatever you please with scanners generated using flex;
for them, you are not even bound by the above copyright.
----- ここまで -----

「non-gnu に移動」という記述はいろんなところにあるが、それを根拠に
「以前は GNU だった」と言いきれない。古い tarball も見つからないし…。

No. 4909 # 68user 2008/05/24 (土) 14:05:02
>>4908 68user
> うーん、やはり 2.5.3 以前は GNU だったのだろうか。
flex-2.5.2/COPYING を確認しましたが、
>> 下の Flex 2.5.4の COPYING みたいなことになっている。
とほぼ同じでした。よって、以前は flex は GNU であったが、
ある時点から GNU でなくなった、などという事実はないようです。

No. 4910 # 68user 2008/05/24 (土) 14:40:56
>>4907 68user
> http://www.ascii.co.jp/books/books/detail/4-7561-3097-6.shtml
> Flex入門
> シリーズ:GNUシリーズ
後はこれだけが気になってしょうがないので、アスキーに「なぜ GNU シリーズなのか」という
問い合わせを投げました。返事来るといいなぁ。

# その前に訳者と思われる方にメールを投げたものの、user unknown で返ってきました。

No. 4912 # hoge 2008/05/30 (金) 00:10:44
問題を投げっぱなしにしてすいません。
PHPのコンパイルに必要だったので探していただけで、
flexについては全く知らないんです^^;

> 「GNU が作った flex のマニュアル」の翻訳が上記の「Flex 入門」
> だったりするんでしょうか。

http://www.gnupress.org/book11.html
GNU Press「Flex: The Lexical Scanner Generator」

http://www.asahi-net.or.jp/~wg5k-ickw/html/online/flex-2.5.4/flex_1.html
訳者の方による、「Flex入門」と同内容のページだと思われます。

ISBNの記述から、ご推察のとおり
「GNU が作った flex のマニュアル」の翻訳が「Flex 入門」
だと考えますが、いかがでしょうか。

No. 4913 # BK 2008/06/04 (水) 14:02:24
http://x68000.q-e-d.net/~68user/net/net-1.html
の[ホスト名とは?]を読んでいましたら、http//133.8.2.24/でhttp//www.cs.gunma-u.ac.jp と同じページが表示されるはずですと
なっていますがが、http//133.8.3.11/でないと表示されないように思います。参考にさせて頂いています。

No. 4914 # 68user 2008/06/13 (金) 10:00:15
>>4912 hoge
flex については更新しております。ご指摘ありがとうございます。
http://x68000.q-e-d.net/~68user/unix/pickup?flex

「GNU シリーズ」についてはアスキーより回答をいただいたのですが、
残念ながら Web での公開は不可とのことなので、墓場まで持っていき
たいと思います。

>>4913 BK
ありがとうございます。取り急ぎ IP アドレスのみ更新しました。

No. 4915 # べた 2008/07/04 (金) 21:17:12
shで、文字列から文字列を取り出そうとしています。

”aaa.bbb@test.cojp”
から「@」より前と後を、

”aaa.bbb"
と
”@test.co.jp”
を取り出したいのです。
どのようにすれば良いか教えてください。

No. 4916 # 68user 2008/07/08 (火) 20:45:49
>>4915 べた
変数 $email にメールアドレスが入っているなら、こんな感じでしょうか。

$ echo $email | sed 's/\(.*\)@.*/\1/'
aaa
$ echo $email | sed 's/.*\(@.*\)/\1/'
@bbb.com

No. 4917 # findusi [URL] [E-mail] 2008/07/08 (火) 21:13:16
耶� 闔逅珥蓚�� 鰲鉗 闔頏琺, 褌辣�邇 聽 � 繝� 硴繿� � 驟痳 � 艢裨珞褂 � 鱚閻顫 袱聹�� 鞐� 癈糂 繝� 闔驟�瑩�. 吭鉗 闔頏琺 粮髓鉗迯�� 硴蓐琿�� � 辣 鴈譛褌 � �瑜鱶 褌迺纃鰰, 邇 � 關鉐鴈 � 矼驟謗竡 銓鉋跌纃��. �鞳粳珮珱 闔驟鱶鴾 <a href=http://www.find-business.ru>跪�</a> 闔頏琺

No. 4918 # べた 2008/07/08 (火) 22:44:17
iconvについて教えてください。

Solaris8で、iconvコマンドを使用しています。
今、使用している環境に、iconvコマンドが2つ入っています。

1./usr/local/bin/iconv
2./usr/bin/iconv

1と2は日付、サイズが異なり、1の方が、日付が新しく、サイズも大きいです。
環境変数のパスも両方設定されていて「usr/local/bin」のパスが
先あるので、whichコマンドで調べると、1の方を表示します。

シェルから、iconvを実施したいのですが、どちらの方を使えば
よいのですか。
iconvとしてどうちがうのでしょうか。機能的にも違うのでしょうか。

1./usr/local/bin/iconv の場合
    コマンドがエラーとなった場合、statusに、”0”か”1”が返る。

    # /usr/local/bin/iconv -f SJIS -t UTF8 sjis_file.txt > utf_file.txt
    iconv: conversion to UTF8 unsupported
    # echo $?
    1
    #

2./usr/bin/iconv の場合
    コマンドがエラーとなった場合、statusが、”0”となる。
    エラーも表示されない。

    # /usr/bin/iconv -f SJIS -t UTF8 contact_SJIS.txt > uft_file.txt
    # echo $?
    0
    #

シェルから、iconvを実施したいのですが、どちらの方を使えば
よいのですか。
iconvとしてどうちがうのでしょうか。機能的にも違うのでしょうか。

環境は
    Solaris8
    sh(Bシェル)

No. 4919 # べた 2008/07/08 (火) 22:55:38
>4916
ありがとうございます。

expr index "${email}" @
や
echo ${email} | awk '{ print substr($0,1,index($0,"@")-1)}'
や
ANS=`echo ${email} | awk '{printf "%s",index($0,"@")}'`
「@」が最初に現れた位置を取得して、cut で取り出し
echo ${email} | cut -c1-`expr ${ANS} - 1`
echo ${email} | cut -c`expr ${ANS} + 1`

awkや、1回で取り出したかったので、expr でやったのですが、
expr index の形式使えないので、awkでやったのですが、

sed で置換する方法は気が付きませんでした。
ためして見ます。

No. 4920 # 68user 2008/07/09 (水) 01:38:42
>>4918 べた
/usr/local/bin/iconv は GNU の libconv 同梱の iconv コマンド、
/usr/bin/iconv は Solaris 標準の iconv コマンドではないかと
思います。

GNU 版であれば、--version オプションを使うことで
    % iconv --version
    iconv (GNU libc) 2.3.4
    Copyright (C) 2005 Free Software Foundation, Inc.
    (略)
といった表示が得られるかと思います。

以下は Solaris 版と GNU 版の違いであったとして、という前提ですが、

機能差で選ぶなら↓を比較 (昔の Solaris 版 iconv は、不正なバイト列が
あった場合即終了だった気がするのですが、現在はスキップという選択肢も
選べるんですかね? であればそれほど機能差はないかも)
    http://docs.sun.com/app/docs/doc/819-1210/6n3j74jpk?a=view
    http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html

エンコーディングの多さで選ぶなら、/usr/local/bin/iconv -l と
/usr/lib/iconv/iconv_data を比較。特に CP932 や UTF-8 などが絡む
場合は、手持ちの全ファイルを変換して結果を調べるくらいはやった
方がよいかと思います。

後は GNU が好きか、Solaris の世界で固めるのが好きか、でしょうか。

No. 4921 # zsh 2008/07/09 (水) 10:09:43
>>4919 べた
expr や cut でもできますよ。
(cut の場合は @ が付きませんが。)

$ expr $email : '\(.*\)@.*'
$ expr $email : '.*\(@.*\)$'
$ echo $email | cut -d '@' -f 1
$ echo $email | cut -d '@' -f 2

>>4918 べた
Solaris には標準で /usr/local というディレクトリがないので、
68user さんの仰るとおりだと思います。

No. 4923 # べた 2008/07/10 (木) 22:27:06
>>4921 zsh
ありがとうございます。

exprやcutでの使い方ありがとうございます。
勉強になります。

No. 4924 # べた 2008/07/10 (木) 22:28:12
WindowsXP IE6.0 SP2 の別の端末から書き込みを
おこなったら以下のエラー画面が表示されました。

何かインストールされていないものがあるのでしょうか。


エラー : 内部エラーが起こりました。
http://x68000.q-e-d.net/%7E68user/cgi-bin/wwwboard.cgi の実行ができませんで
した。
おそらくCGIプログラムの不具合が原因です。

もし、こちらのファイル設定ミス・リンクミス・CGI の不具合などが原因であった場
合は早急に修正します。

の画面が表示されます。

No. 4925 # べた 2008/07/10 (木) 22:36:19
>>4918 べた
>>4921 zsh

説明ありがとうございます。

それでなのですが、ステータスが返ってくるということで、
「/usr/local/bin/iconv」を使っています。
Bシェルで実行しています。
iconvコマンドをパイプでつないで、連続で実行しています。

/usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt

1回目のiconv(パイプの左側のiconv)がエラーとなったとき、
ステータスがエラーで返ってきません。
エラーを判断したいのですが、どのようにしたらエラーと判断
できるでしょうか。

/usr/local/bin/iconv -f SJIS -t UTF8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt
echo $?

iconv: conversion to UTF8 unsupported
0

”0”が返却。

/usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF16 > file_utf.txt
echo $?

iconv: conversion to UTF16 unsupported
1

”1”が返却。

No. 4926 # べた 2008/07/12 (土) 01:29:32
>>4923 べた

ありがとうございます。

$ expr $email : '\(.*\)@.*'
$ expr $email : '.*\(@.*\)$'
$ echo $email | cut -d '@' -f 1
$ echo $email | cut -d '@' -f 2

どれでも、取り出せました。

No. 4927 # 68user 2008/07/20 (日) 03:21:17
>>4925 べた
> 1回目のiconv(パイプの左側のiconv)がエラーとなったとき、
> ステータスがエラーで返ってきません。
> エラーを判断したいのですが、どのようにしたらエラーと判断
> できるでしょうか。
bash なら PIPESTATUS を使えばよいですが、sh であれば
終了ステータスは取得できないと思います。しょぼいですが、
パイプを使うのをやめるのがよいかと思います。

>>4924 べた
> WindowsXP IE6.0 SP2 の別の端末から書き込みを
> おこなったら以下のエラー画面が表示されました。
IP アドレスや発言内容などから SPAM と判定されたのかもしれません。
特に判定精度の高いものではないので、頻発するようならご連絡ください。

No. 4928 # べた 2008/07/22 (火) 21:53:41
>>4927 68user

ありがとうございます。
sh できないんですね。
出力結果がなければ、出力結果をパイプで渡さなければ
「&&」でいけるのでないかと覆いますが。

パイプを使わず個々に行います。

No. 4929 # べた 2008/07/30 (水) 00:39:04
Solaris8 なのですが、「/var/log/syslog」に、
TCPコネクションのログを出力させたいのです。
telnet、ftpなど、接続したログを出力したいの
です。
どのようにすればよいのでしょうか。

「/etc/syslog.conf」には、以下の様な記述をしています。

user.notice /var/log/syslog

syslogのデーモンも再起動したのですが、出力されません。

No. 4931 # バンガード [E-mail] 2008/08/05 (火) 10:01:38
>>4829 68user
ftpのログを取得するAIXの場合の例です。

#vi /etc/inetd.conf
(ftpのエントリーで最後に「-l」または「-d」オプションを追加)

ftp .... /usr/sbin/ftpd ftpd -l
または ftpd -d
(転送ファイル名を確認するだけであれば -l オプションの方がログが少なくて済みます)

#refresh -s inetd
(inetdデーモンをリフレッシュ)

#vi /etc/syslog.conf
(syslog設定ファイルにftpのログを取得するためのエントリを追加)

daemon.info /tmp/ftpd.log
(daemon.debugであればもう少し詳しい詳細が確認できます)

#touch /tmp/ftpd.log
(ログファイルを作成)

#refresh -s syslogd
(syslogデーモンを再起動)

No. 4932 # バンガード [E-mail] 2008/08/05 (火) 10:02:46
>>4931 バンガード
ごめんなさい。
4929へのコメントでした。

No. 4933 # べた 2008/08/19 (火) 21:25:01
>>4932 バンガード
お礼が遅れ申し訳ありません。
ご説明ありがとうございます。

どちらにしてもデーモンの再起動(リフレッシュ)が
必要なんですね。

No. 4934 # べた 2008/08/19 (火) 21:28:29
Solaris8 なのですが、シェルを実行する際、
./シェル名としないと起動できません。

「./」で起動するにはどうしたらよいのでしょうか。

「./」で起動できるアカウントがあるので、違いを比べてみると
PATHの変数が異なっていました。

PATH=./:/usr/bin・・・・・
とか
PATH=・・・・/usr/bin:

PATH変数の中に、「./」の設定がある。
PATH変数が「:」で終わっている。

「./」を指定しないと動かないアカウントは、両方がない状況と
なっています。
どのように環境変数を設定すればよいのですか。

No. 4935 # zsh 2008/08/20 (水) 12:07:16
>>4934 べた
> 「./」で起動するにはどうしたらよいのでしょうか。
「./」なしで起動したいということでしょうか?
PATH 環境変数に ./ を含めれば可能ですが、お勧めはしません。
特定のディレクトリにスクリプトを集めて、そのディレクトリを
PATH 環境変数に含める方がよいと思います。

なお、同じ名前のコマンド(スクリプト)が複数のディレクトリに
存在する場合は、PATH 環境変数で先に見つかったコマンド
(左側のパスから順番に探しに行きます)が実行されます。

No. 4936 # 68user 2008/08/21 (木) 02:14:31
>>4934 べた
PATH に . を含めない理由は以下のとおり。

・セキュリティホールとなる。PATH=.:/bin:/usr/bin:/usr/local/bin となっていて、
    cd ~foo; ls としたときに /home/foo/ls が存在したら、そのプログラムを実行
    してしまう。cd /tmp; ls も同様。そのプログラムがどんな悪さをするかはわからない。

・PATH に . を加えると、カレントディレクトリによって実行されるコマンドが異なる
    可能性があるため、説明がめんどくさいし、はまりやすくなる。例えば /bin と
    /usr/bin に同名のコマンドがあるとして、コマンド foo をタイプしたときに、
        - カレントディレクトリが /usr/bin の場合は /usr/bin/foo が実行される
        - カレントディレクトリが /usr/bin 以外の場合は /bin/foo が実行される
    というのはわかりづらい。

・csh・tcsh・bash・zsh など、今どきなシェルを使っている場合は、
        ./
    からタイプした方がファイル名補完を使えるため、入力が速い。

No. 4941 # べた 2008/08/26 (火) 22:00:32
>> 4935
>> 4936

返事が遅くなってすみません。

分かり易く説明ありがとうございます。
勉強になります。

No. 4942 # べた 2008/10/08 (水) 20:36:52
Cシェルでのリダイレクションについてなのですが

コマンドの実行結果で、標準エラー出力を捨てて、標準出力
だけを見たいのですがどうすればよいのですか。

cat file.txt >& /dev/null
では、標準出力、標準エラー共に捨てられますが、
標準エラーを捨てて、標準出力を表示したい。

cat file.txt 2 >& /dev/null
cat file.txt >2& /dev/null
cat file.txt >& 2 /dev/null
cat file.txt > /dev/tty >2 /dev/null
cat file.txt > /dev/tty >& /dev/null

とやってみたのですが、どれも上手くいきません。

どうすればよいのでしょうか。

環境は、
Solaris8 Cシェル
です。

No. 4943 # 68user 2008/10/08 (水) 22:16:55
>>4942 べた
tty 宛でよいなら、サブシェルを使って
    ( cat file.txt > /dev/tty ) >& /dev/null
です。

No. 4944 # べた 2008/10/09 (木) 20:49:11
>> 4944

ありがとうございます。

> tty 宛でよいなら、サブシェルを使って
> ( cat file.txt > /dev/tty ) >& /dev/null
> です。
出来ました。

tty 宛でよいなら、サブシェルを使って
tty を使わない方法もあるのですか。あるのでした教えてください。
サブシェルとは。
「( command )」とはどのよな使い方でしょうか。

良い案が思い浮かばなかったので、「cat file.txt > /dev/tty」で
表示ができたので、 /dev/tty を使えば上手くできるのではないかと。

No. 4945 # 68user 2008/10/10 (金) 10:06:19
>>4944 べた
tty を使わないなら、
    ( cat file.txt > out.txt ) >& /dev/null
などとファイルに保存する。

あるいは mknod や mkfifo で名前付きパイプを作ってそこに
流すなど (さすがに標準エラー出力を捨てるためにここまで
やるのはバカバカしいですが)。
    mkfifo out
    cat out &
    ( cat file.txt > out ) >& /dev/null

あるいは
    sh -c "ls cat file.txt 2>/dev/null"
などと sh で逃げる手もあります。

csh でやるなら、これ以外の方法はおそらくないです。

> サブシェルとは。
> 「( command )」とはどのよな使い方でしょうか。
こちらをどうぞ。
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B5%A5%D6%A5%B7%A5%A7%A5%EB

No. 4946 # べた 2008/10/10 (金) 20:24:28
>> 4945

ご説明ありがとうございます。

Windows XPの別端末で書き込みをしたら
「エラー : 内部エラーが起こりました。」
の画面が表示されました。
何かあるのでしょうか。

No. 4947 # 素人 2008/12/11 (木) 14:52:56
こんにちは.linuxを使い始めたものです.
パイプに関する質問です.環境はVine Linux のbashです.

あるファイル名(ここではtestfile)のものを検索して,
さらにその中身に"test"という文字列を含むかどうかを
知りたいと思っています.
対象のファイルがひとつとは限りません.例えば,
...........
../Data1/testfile ⇒(中身)This is test file.
...........
../Data2/testfile ⇒ (中身) This is hoge hoge.
といった感じで同じ名前のファイルが別のディレクトリにあります.

cat,find, grepを組み合わせれば出来そうな気はしているのですが,
findしてリスト表示されたファイル名を引数としてcatコマンドに
渡すことができません.

自分なりにいろいろ検索しましたが,よくわかりませんでした..
よろしくご教授ください.

No. 4948 # 68user 2008/12/11 (木) 17:17:18
>>4947 素人
親ディレクトリ以下の testfile というファイル名のファイル中に
test という文字列があるものをリストアップ、であれば
    % find ../ -name testfile | xargs grep -l test
でしょうか。それを cat するなら
    % find ../ -name testfile | xargs grep -l test | xargs cat
ですかね。

No. 4949 # 素人 2008/12/11 (木) 18:35:48
>>4948 68user
できました!答えはxargsでしたか.
勉強不足で恐縮です.ありがとうございました.

No. 4950 # 佐藤丈師 [E-mail] 2008/12/12 (金) 17:03:36
RSA1のプログラムを実行するにあったってエラーが多くでます。これのヘッダファイルはどこにあるのでしょうか。

No. 4951 # 68user 2008/12/23 (火) 17:49:12
>>4950 佐藤丈師
OpenSSL に同梱されていますので、OpenSSL をインストール済みであれば
/usr/include/openssl や /usr/local/openssl/include などにあるはずです。
コンパイル時に -I /usr/include/openssl などのオプションを付加してください。

No. 4952 # kawasaki 2009/01/13 (火) 18:11:06
初めて投稿します。
全くの初心者ですが、次のことをお尋ねします。
Debian4.0ですが、デスクトップにアイコンを作成し、クリックすると
プログラムを起動するようにしたいのですがどのようにすればいいの
でしょうか。

#su - abc ’abcでログインし、「sh /usr/lib/scripts/claim/ORC_CLAIM_SERVER.sh 5001 /var/tmp」

ktermに記述などお尋ねします。

No. 4953 # 68user 2009/01/14 (水) 02:02:57
>>4952 kawasaki
やり方はインストールしたデスクトップ環境 (GNOME とか KDE とか) によると思います。

が、お使いのデスクトップ環境をお教えいただいたとしても、ここ数年は UNIX 系
デスクトップ環境をいじっていないので、わたしはさっぱりわかりません。

No. 4954 # uccこーひー 2009/01/18 (日) 15:47:46
初めまして。
ちょっと気になったので言わせて下さい。

UNIXの部屋 コマンド検索: Machでの説明で、

発音は、普通なら [まっは] が正しいと思うが、アメリカ人は "ch" の発音ができないらしくて
  [まーく] [まっく] といっている (発音できないような名前を付けるなと言いたい)。

とありますが、発音できないんじゃなくて、そういうスペルだと、
英語的には、マークって呼ぶだけです。hの2つ前は、aつまりエイって発音し、
cは、基本的には、ックって発音になり、
何も考えずにつなげて読むと、マークって読みます。

で、でもなんで、マッハが正しいかと言うと、
これは、ヨーロッパ系の言語の多くが、
machって書いてまっはって読むからです。
発音できないわけじゃないですよ^^;

No. 4955 # 68user 2009/01/28 (水) 02:30:07
>>4954 uccこーひー
ご指摘ありがとうございます。が、正直なところを申しますと、学がないので
真偽のほどが判断できません。よって、該当コンテンツより、
>>4954 uccこーひー
の発言にリンクを張らせていただきますので、あとはお読みいただいた方に
ご判断いただくことでご了承ください。

No. 4957 # たけ 2009/02/10 (火) 13:43:32
いつも便利に参照しています。
lsコマンドの紹介ページ(http://x68000.q-e-d.net/~68user/unix/pickup?ls)で
「man Solaris10 ls(1)」のリンク先が間違えているのに気がついたのでご連絡です。
正しくは、
「http://docs.sun.com/app/docs/doc/819-1210/ls-1?l=ja&a=view&q=ls」かな?

No. 4958 # 68user 2009/02/13 (金) 00:15:02
>>4957 たけ
> 「man Solaris10 ls(1)」のリンク先が間違えているのに気がついたのでご連絡です。
ありがとうございます。Sun のページはたまに URL が変わるんですよね…。
最新情報で更新しておきました。

NetBSD の manpage へのリンクも表示されなくなっていますが、そのうち直します。

No. 4960 # 谷口 功 [E-mail] 2009/02/27 (金) 18:25:50
SE募集の件で書き込みさせていただきました。
大変興味がありますので、一度詳細を教えていただけないでしょうか。
ご連絡をお待ちしています。

No. 4961 # 68user 2009/02/28 (土) 00:14:30
ありがとうございます。メールを送ります。

No. 4974 # べた 2009/03/19 (木) 19:53:35
Perlで、前日のAM9時以降に作成されたファイルを
取得したいのですが、どのようにPerlを書けばよい
のでしょうか。

Perlのシェルスクリプトを起動する前日のAM9以降
から、実行日までの間に作成されたファイルを取得
したいのです。

実行日の前日の9時というのは以下の方法で取得できる
のですが、取得した日付とファイル作成日付を比較し、
対象か否かを判断して、必要なものだけを取得する
方法が分かりません。
どのよに書けばよいのでしょうか。


「実行日の前日の9時」は、
--------------------------------
#!/usr/local/bin/perl

$tm = time - (24 * 60 * 60 * 1);
($sec, $min, $hour, $day, $mon, $year) = (localtime($tm))[0..5];
$now = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$day,$hour,$min,$sec);
print $now, "\n";

--------------------------------
#!/usr/local/bin/perl

use POSIX 'strftime';

$tm = time - (24 * 60 * 60 * 1);
my $now = strftime "%Y/%m/%d %H:%M:%S", localtime($tm);
print $now, "\n";

No. 4975 # べた 2009/03/19 (木) 19:57:17
>> 4974

環境を書き忘れました。

環境は、
    Solaris8
    Perl v5.8.5

No. 4976 # 68user 2009/03/21 (土) 00:36:01
>>4974 べた
>>4975 べた
Solaris なら適当なファイルを作って、touch コマンドでタイムスタンプを
前日 08:59:59 にしておいて、find . -newer foo とするのが一番簡単かと
思います。

FreeBSD なら find -mtime -99h とか、Linux なら find -mmin -9999 とか
できますが (99 や 9999 は計算して求める)、結局は -newer の方が簡単な
気がします。

モジュール使うなら
    File::Find
        http://perldoc.perl.org/File/Find.html
    File::Find::Rule
        http://search.cpan.org/~rclamp/File-Find-Rule-0.28/lib/File/Find/Rule.pm
あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと
いけないように見えますので、イマイチですね。

No. 4977 # べた 2009/03/22 (日) 23:25:34
>>4976 68user

ありがとうございます。
また、返事が遅くなって申し訳ありません。

> find . -newer foo
ですか。
シェルで、findの結果を取得することも考えました。

> あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと
> いけないように見えますので、イマイチですね。
Perlを使おうとしていたので、手で書かなくてはいけないと思っていました
この部分の良い方法が実現できなくて。

環境上、教えて頂いたモジュールも入れることができません。

No. 4978 # 68user 2009/03/23 (月) 22:00:19
>>4977 べた
find . -newer foo の方法を書いておきます。find を使わないなら、
昨日9時の日時 (20090323090000) を Time::Local で epoch time に
直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。

------
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()-60*60*24);
my $timestamp = sprintf("%04d%02d%02d%02d%02d.%02d", $year+1900, $mon+1, $mday, 9, 0, 0);
my $yeasterday_9am_file = "foo.txt";
system("touch -t $timestamp $yeasterday_9am_file");
open(IN, "find . -type f -newer $yeasterday_9am_file |");
while (<IN>){
        chomp;
        print "$_\n";
}

No. 4979 # べた 2009/03/24 (火) 21:19:39
>> 4978

ありがとうございます。

教えていただいた方法ですと、前日9時のタイムスタンプの
取得をPerlでやればあとは、シェルスクリプトでもできます
ね。

実のところ、findを使わない、Perlでの記述、遣り方を教えて
ほしいのですが。

No. 4980 # べた 2009/03/25 (水) 09:16:00
>>4978 68user

> find を使わないなら、
> 昨日9時の日時 (20090323090000) を Time::Local で epoch time に
> 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。

Time::Local で epoch time に直しての「epoch time」とは
なんでしょうか。

No. 4982 # ちびヴァル [URL] [E-mail] 2009/04/05 (日) 23:19:53
linuxのCでグラフィックの勉強がしたくてX-Windowまで辿り着いたのはよかったんですが、
ここ↓のソースを実行させようとしても何故かエラーが出てしまいます。
http://x68000.q-e-d.net/~68user/xprogram/xlib-4.html

一応類似の記事がないかどうか調べて見ましたが、
No.8552が近いと思いましたが全然分かりませんでした。
ちゃんとusr/include/X11ファイルに
Xlib.hとXutil.hはありますし、
コンパイルオプションも活用してみました……
Xlib.hとXutil.hの意味も分からなくて困窮中です……

コマンドラインは、gcc -o xlib-4-1 xlib-4-1.c -I /usr/include/X11 -L /usr/include/X11
エラーは以下の文です
/tmp/cc2pF4g1.o: In function `main':
xlib-4-1.c:(.text+0x9f): undefined reference to `XOpenDisplay'
xlib-4-1.c:(.text+0x149): undefined reference to `XCreateSimpleWindow'
xlib-4-1.c:(.text+0x198): undefined reference to `XSetStandardProperties'
xlib-4-1.c:(.text+0x1c0): undefined reference to `XCreateGC'
xlib-4-1.c:(.text+0x1e8): undefined reference to `XSetBackground'
xlib-4-1.c:(.text+0x20a): undefined reference to `XSetForeground'
xlib-4-1.c:(.text+0x232): undefined reference to `XCreateGC'
xlib-4-1.c:(.text+0x25a): undefined reference to `XSetBackground'
xlib-4-1.c:(.text+0x27c): undefined reference to `XSetForeground'
xlib-4-1.c:(.text+0x294): undefined reference to `XMapRaised'
xlib-4-1.c:(.text+0x2ec): undefined reference to `XFillArc'
xlib-4-1.c:(.text+0x344): undefined reference to `XFillArc'
xlib-4-1.c:(.text+0x352): undefined reference to `XFlush'
collect2: ld はステータス 1 で終了しました

No. 4983 # 68user 2009/04/06 (月) 11:36:31
>>4982 ちびヴァル
オプション -lX11 が足りていません。まずは
    http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html
からどうぞ。

No. 4984 # 68user 2009/04/06 (月) 11:37:59
>>4980 べた
> 「epoch time」とはなんでしょうか。
http://oku.edu.mie-u.ac.jp/~okumura/php/date.php
    UNIX で Epoch とは,協定世界時(UTC,いわゆるグリニッジ標準時 GMT)
    1970 年元旦 0 時 0 分のことです。 UNIX の内部ではこの瞬間からの秒数で
    時刻を表しています。
のことです。

No. 4985 # ちびヴァル [URL] [E-mail] 2009/04/06 (月) 14:46:01
>>4983 68user

一通り実行して終了させると次の文章が出るんですが……
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
            after 16 requests (14 known processed) with 0 events remaining.

自分で調べて、etc/X11/xorg.confというファイルにが重要であると
わかったので、xorg.confに
Section "ServerFlags" Option "AllowEmptyInput" "off" EndSectionを
追加しようとしていますが、普通のテキストエディタでは
「そのファイルを保存するために必要な権限がありません。入力した場所が正しいか確認して、もう一度実行してみて下さい。」
と出て保存出来ないのですが、どうすればいいでしょうか?
また、コマンドプロンプトでも試して見ましたが、
E325: ATTENTION
Found a swap file by the name "/etc/X11/.xorg.conf.swp"
                    owned by: root dated: Mon Apr 6 14:37:03 2009
                  file name: /etc/X11/xorg.conf
                    modified: YES
                  user name: root host name: mikan
                process ID: 8021
While opening file "/etc/X11/xorg.conf"
                          dated: Thu Mar 5 23:15:04 2009

(1) Another program may be editing the same file.
        If this is the case, be careful not to end up with two
        different instances of the same file when making changes.
        Quit, or continue with caution.

(2) An edit session for this file crashed.
        If this is the case, use ":recover" or "vim -r /etc/X11/xorg.conf"
        to recover the changes (see ":help recovery").
        If you did this already, delete the swap file "/etc/X11/.xorg.conf.swp"
        to avoid this message.
"/etc/X11/xorg.conf" 33 lines, 1037 characters
と出てどうすればいいか迷っています

No. 4986 # 68user 2009/04/07 (火) 23:39:02
>>4985 ちびヴァル
> Found a swap file by the name "/etc/X11/.xorg.conf.swp"
vim が作成したスワップファイルでしょうから、.xorg.conf.swp を
削除して、root 権限で xorg.conf を更新すればよいと思います。

No. 4988 # べた 2009/04/11 (土) 14:29:40
>> 4978

> find . -newer foo の方法を書いておきます。find を使わないなら、
> 昨日9時の日時 (20090323090000) を Time::Local で epoch time に
> 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう

の方法を教えて欲しいのですが。

No. 4989 # べた 2009/04/21 (火) 20:16:51
Bシェルで、sedを使って、フルパスからディレクトリとファイル名を
分割したいのですが良い方法を教えてください。

ファイル名を取り出すことは出来たのですが、パス名を取り出すこと
ができません。
また、ルート直下「/txt.csv」のような場合だと、ファイル名が取り出せ
ません。結果が、「/txt.csv」となってしまいます。「txt.csv」と
したいのです。


------------------------------------
FILE=/aaa/bbb/txt.csv
echo ${FILE} | sed 's/\/.*\///g'

FILE=/txt.csv
echo ${FILE} | sed 's/\/.*\///g'

FILE=txt.csv
echo ${FILE} | sed 's/\/.*\///g'


環境は、
    Solaris8
    Bシェル

No. 4990 # 68user 2009/04/22 (水) 03:06:48
>>4989 べた
basename・dirname コマンドを使うのはダメですかね。

No. 4991 # べた 2009/04/22 (水) 08:52:24
>>4990 68user

>basename・dirname コマンドを使うのはダメですかね。
も考えましたが、
出来れば、使わない方法でと

No. 4992 # zsh 2009/04/22 (水) 11:56:48
>>4991 べた
普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。

sed でやりたいならこんな感じかなぁ?
- ファイル名
echo ${FILE} | sed 's/.*\///g'
- パス名
echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'

No. 4993 # べた 2009/04/22 (水) 12:12:04
>>4992 zsh

> 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。
すみません。

> - パス名
> echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'
が、上手くいきませんでした。
パス名がとれません。フルパスが返ってきます。

/aaa/bbb/txt.csv → /aaa/bbb/txt.csv
/txt.csv → /txt.csv

No. 4994 # べた 2009/04/22 (水) 12:15:00
>>4992 zsh

> 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。
すみません。

> - パス名
> echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g'
が、上手くいきませんでした。
パス名がとれません。フルパスが返ってきます。
それと、ファイル名のみ場合は、値がなしとしたいのですが。

/aaa/bbb/txt.csv → /aaa/bbb/txt.csv
/txt.csv → /txt.csv

No. 4996 # zsh 2009/04/22 (水) 17:14:30
>>4994 べた
失礼しました。↓でどうでしょうか?

echo ${FILE} | sed -n -e 's#\(.*\)/[^/]*#\1#p'

No. 4997 # べた 2009/04/22 (水) 19:10:04
>>4996 zsh
ありがとうございます。
パス名を取り出すことができました。
ただ、以下の様に場合、上手くいきません。

「FILE=/txt.csv」の場合
    「/」となりません。
    ブランクというか、改行します。
    「/」だけ取り出すというのは無理なのでしょうか。

「FILE=txt.csv」の場合
    ブランクとなります。
    正しい動きなのでしょうか。

No. 4998 # ふくし 2009/04/22 (水) 22:39:27
nawkのユーザ定義関数について教えて下さい。

nawkで、ユーザ定義関数を呼び出して編集を行っているのですが、
ユーザ定義関数内で編集した値を、パラメータで渡した変数に設定
して返却したいのでが値が返却されません。
ユーザ定義関数内では、渡した変数に値が設定されているのですが、
関数を抜けると値が設定されていません。
どうしてなのでしょうか。
それとも、無理なのでしょうか。
パラメータで渡した変数に設定して返すことができるのでしょうか。

環境
    OS:Solairs8
    シェル:Bシェル(sh)

--------------------------------------------------------------
nawk -v OUT=${OutFile} -F"," '
        BEGIN {
                count = 0+0;
        }
        function chk2(arg1,arg2,val) {
                sub(/^"*/,"",arg1); sub(/"*$/,"",arg1);
                sub(/^"*/,"",arg2); sub(/"*$/,"",arg2);
                val=sprintf("%s %s",arg1,arg2);
        }
        function chk1(arg1,val) {
                sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); val=arg1;
        }
        {
                chk1($1,UserID);
                chk2($8,$9,Name);

                printf("%s,%s\n",UserID,Name);
                #printf("%s,%s\n",UserID,Name) >> OUT;
                count++;
        }
        END {
                printf("Output number : %d\n",count);
}' ${FILE}

No. 4999 # zsh 2009/04/23 (木) 11:23:01
>>4997 べた
> 「FILE=/txt.csv」の場合
パス名末尾の / を出力しないようにしていたためですね。

echo ${FILE} | sed -n -e 's#\(.*/\)[^/]*#\1#p'

こうすれば出力されると思いますが、
逆に /hoge/fuga.txt のような場合でも /hoge/ となります。

> 「FILE=txt.csv」の場合
パスが指定されていないので、ブランクで正しいと思っていますが。
(そういった条件もありませんでしたし。)

>>4998 ふくし
nawk は参照渡しできないはずなので、そういう書き方ではできません。
ただ nawk では、ユーザ関数の引数として定義された変数を除き、
すべてグローバル変数だと思うので、やろうとしていることはできます。

No. 5000 # べた 2009/04/23 (木) 13:10:32
>>4997 べた

ありがとうございました。
出力されました。

No. 5001 # べた 2009/04/23 (木) 13:19:29
>>4999 zsh

お礼先誤りですみません。
ありがとうございます。


>> 「FILE=txt.csv」の場合
> パスが指定されていないので、ブランクで正しいと思っていますが。
> (そういった条件もありませんでしたし。)

No. 4994で、自分でファイル名のみの場合、値なしとしたいと
書いておきながら正しい動きなんですかと質問すみませんで
した。

No. 5002 # sfish 2009/04/23 (木) 14:46:19
>>4998 ふくし

えっ、Solairs8 の nawk って return を使えないんでしょうか?

No. 5003 # zsh 2009/04/23 (木) 15:58:34
>>5002 sfish
man には
return [expr]
と記載があったので、リターンコードを返すものだと思っていましたが、
確かに値を返すことも出来ました。こっちの方がいいですね。

No. 5004 # ふくし 2009/04/23 (木) 21:06:27
>>4999 zsh

> ただ nawk では、ユーザ関数の引数として定義された変数を除き、
> すべてグローバル変数だと思うので、やろうとしていることはできます。
どういうことでしょか。
nakwで関数を作るのが不慣れなもので、

nawk内で定義した変数はグローバル変数なので、nawk内であれば、
ユーザ定義関数でも参照や書き換えができるということでしょうか。
また、
ユーザ定義関数ないで定義した変数は、関数内でしか有効とならない
ということでしょうか。
例などを載せてくれるとありがたいのですが。

No. 5005 # zsh 2009/04/27 (月) 17:13:54
>>5004 ふくし
> nawk内で定義した変数はグローバル変数なので、nawk内であれば、
> ユーザ定義関数でも参照や書き換えができるということでしょうか。

その通りです。

ただ、
>>5002 sfish
で return で値が戻せることを教えて頂いたので
関数側は、
---------------------------------
function chk1(arg1) {
        sub(/^"*/,"",arg1); sub(/"*$/,"",arg1);
        return arg1;
}
---------------------------------
のようにして、呼び出し側は
---------------------------------
UserID = chk1($1);
---------------------------------
とすれば、やろうとしていることができると思います。

No. 5006 # まえ [E-mail] 2009/04/28 (火) 09:07:23
初歩的な質問ですが

内蔵HDDを増設し「label:Backup」として、クリックしますと「sdb」と表示されています。
プロパティで、場所は/mntとなっています。

このHDDに mv /home/ormaster/123.txt sdb/123.txt とファイルの移動をしたいのですが方法を教えてください。

No. 5007 # ふくし 2009/04/28 (火) 12:01:40
>>5005 zsh

ありがとうございます。

No. 5008 # 山田洋子 [E-mail] 2009/04/28 (火) 21:29:44
エラーメッセージ「cannot execute binary 」についての質問。

以前にservice sendmail start 2<&1 | /bin/mail -s "件名" wenbi@akw.com.cn
というコマンドを実行して、正常です。

しかし、下記のコマンドを実行して、「cannot execute binary 」というエラーメッセージを出ました。
この後、上記のコマンドを実行しても、エラーを出ます。
service sendmail start infile.txt
iconv -f EUC-JP -t Shift_JIS infile.txt < infile2.txt
cat infile2.txt | /bin/mail -s "件名" wenbi@akw.com.cn

No. 5009 # 68user 2009/05/07 (木) 13:40:49
>>5006 まえ
mount 済みであれば、mv /home/ormaster/123.txt /mnt/123.txt で
いけるのではないかと思います。

>>5008 山田洋子
よくわかりませんが、cannot execute binary のエラーメッセージを
出力しているのが service コマンドなのか、iconv コマンドなのか、
cat や mail なのかを調べてみてはどうでしょうか。

No. 5010 # ふくし 2009/05/23 (土) 00:01:56
nawkでsystem関数で、コマンドを実行しています。
今、system関数で実行したコマンドの結果を変数
に格納したいのですが、結果のステータスが格納
されて、コマンドの実行結果が格納できません。
どうしてなのでしょうか。そもそも不可能なのでしょうか。

system関数で、dateコマンドを実行し、結果を変数に
格納して、nawk内で使用したいのです。

nawk '{system("date +%Y%m%d")}'

環境は、
Solaris8
bsh
です。

No. 5011 # 68user 2009/05/23 (土) 01:06:30
>>5010 ふくし
system は単なるコマンドの実行であり、コマンドの標準出力を受け取るような
仕組みになっていません。この場合は getline を使うべきかと思います。

No. 5013 # ふくし 2009/05/23 (土) 10:59:31
>>5011 68user

ありがとうございます。
上手くいきました。

No. 5017 # keiji [E-mail] 2009/05/27 (水) 15:07:21
完全ガイドwindowsxp基本+Q&A 2008,3,20
p275,Q057 
1・アイコンの数を増やすは、あるが、減らす方法が、無い。

2・初心者に解かるように、教えて。やり方がわからへん。

No. 5018 # keiji 2009/05/27 (水) 15:14:43
特定のアイコンを消す方法です。

No. 5020 # たろう 2009/06/21 (日) 03:05:55
はじめまして

ネットワークプログラミングのページは
とってもためになりました。

・読みやすい
・わかりやすい
・内容がある

すばらしいです。

少なくとも私の嗜好とあうはず。
なので、
おすすめ書籍を紹介してください!

・実践的にアプリケーションを作る
・複数ファイルのビルドを説明
・winコンポーネント
・プロセス間通信
・管理人さんのように読みやすく、わかる、内容がある
・ネットワークアプリ(サーバー、メーラーetc)
・c言語、perl、php(windows

いま、プロキシサーバと、メールサーバに興味があるので、
それが作れるような本。(あくまでわかりやすく言ってます)
ぜひ、よろしくお願いします。

No. 5021 # 68user 2009/07/04 (土) 15:59:26
>>5020 たろう
すべての要求を満たす本はニッチすぎて存在しないと思います。
特にサーバはニーズがあまりなく、深く掘り下げるほど単なる
RFC の解説になってしまうため、書籍としては成立しづらいのかも
しれません。

とはいえ、いくつか提示してみます。

○UNIXネットワークプログラミング入門
        http://www.amazon.co.jp/-/dp/4774117544

    この本は持っていませんが、前身である
        UNIXネットワーク・ベストプログラミング入門
            http://www.amazon.co.jp/-/dp/4874085032
    は持っています。書評は
        http://x68000.q-e-d.net/~68user/net/link-book.html
    に書いてあります。

○Perlネットワークプログラミング―ソケットの使い方から
    クライアント/サーバーシステムの開発まで
        http://www.amazon.co.jp/-/dp/4894714655

    買っていませんが、目次を見ると結構範囲は広いようです
    (700ページもあるから当然か…)。深く突っ込んでいるかは
    わかりません。

○基礎からわかるTCP/IP ネットワーク実験プログラミング
        http://www.amazon.co.jp/-/dp/4274065847

    アプリレイヤではなく TCP/IP 寄りですが、結構おもしろいことを
    やっていて勉強になります。読みやすいかというと、個人的には
    ちょっとつらいです (一枚の複雑な図があって、それを長い文章で
    解説するのは無理がある。まぁ書籍だから仕方ないかもしれませんが)


あとは、いずれも持っていませんが、
    オンラインゲームプログラミング
        http://www.amazon.co.jp/-/dp/4797328479

    MMORPGゲームサーバープログラミング
        http://www.amazon.co.jp/-/dp/4797328460
といったアプローチもアリかもしれません。

No. 5022 # たろう 2009/07/11 (土) 12:20:20
>>5021 68user

68userさん。
お返事ありがとうございます。


なんだがいろいろ調べていただいたようで、ありがとうございます。
(68userさんは上級者なんでしょうね)

linuxシステムプログラミング
http://www.amazon.co.jp/Linux%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%9E%B0%E4%BA%95-%E6%AD%A3%E9%9B%84/dp/4274079724/ref=sr_1_2?ie=UTF8&s=books&qid=1247282246&sr=1-2

(私の知りたいことは「プロセス間通信」で、「システムプログラミング」って範疇に入るんだなぁ)

これでも読んでみようかと思ってます。

プロセス間通信がわかれば、
数あるソフトウェアを自在に連携して使いこなすことができるる!」

こう思っているが、合ってますでしょうか。(^−^;)

No. 5023 # 68user 2009/07/27 (月) 16:21:59
>>5022 たろう
共有メモリなどのプロセス間通信は、同一サーバ内のプロセスで
データをやりとりする仕組みで、他サーバとはやりとりができません
(とはいえ MySQL や PostgreSQL なども使っている重要な機能ですが)。

複数クライアントからの情報をサーバ内で効率よく共有するためには
役立つのは確かでしょうが、多くのマシンで連携するクラウドばやりの
昨今では、学習の方向性としてはちょっとずれているかもしれません。

No. 5024 # 鈴木 [E-mail] 2009/08/26 (水) 01:28:17
68userさん はじめまして、鈴木と申します。

SSLクライアント接続のプログラムを作成していた友人から
「SSL_connect() を実行すると -1 が返る。」という相談を受けて、調べている中で、
68userさんの下記ページの、RAND_seed() の説明で解決することができました。

http://x68000.q-e-d.net/~68user/net/ssl-1.html

本当にありがとうございました。

今回、書き込みさせていただいたのは、その続きなのですが
もし、ご存知でしたら教えていただけないでしょうか。


【質問の内容】
  (1)XPでは、RAND_seed()を実行しなくても、乱数の種が不足することはないのでしょうか?
  
  (2)ユーザプログラムでRAND_seed()実行しない場合、OpenSSLは、OS(Windows)からどのようにして
        乱数の種を取得するのでしょうか?

  以下に、質問に至った経緯を記します。

【友人との話の経緯】

当初、前述の友人が作成したRAND_seed()していないSSLクライアントプログラムを
私の環境(WindowsXP Pro(SP2))で実行しても、SSL_connect()ではエラー(-1)は
発生しませんでした。

友人の環境を確認するとWindowsNT4.0ワークステーション(SP3)でした。
どうしても、この古い環境でSSLクライアント接続のプログラムを動かしたいとのこと。

結局、友人の環境(WindowsNT4.0ワークステーション(SP3))では発生しますが、
私の環境(WindowsXP Pro(SP2))では100回ほどテストしましたが発生しませんでした。

  
【試した内容】

  前述の内容を下記にまとめます。

    (友人の環境) WindowsNT4.0ワークステーション(SP3):× SSL_connect() ⇒ (-1)が返る
    (私の環境) WindowsXP Professional(SP2) :○ SSL_connect() ⇒ 正常

    どちらも、PCの電源オン後に自動ログインして、SSLクライアントプログラムを
    自動起動するようにしています。
    使っているOpenSSLのバージョンは私も友人も0.9.8Gです。


    という経緯があって、以下の点についてご存じであれば教えていただけないでしょうか。

    ・XPでは、RAND_seed()を実行しなくても、乱数の種が不足することはないのでしょうか?
    ・ユーザプログラムでRAND_seed()実行しない場合、OpenSSLは、OS(Windows)からどのようにして
        乱数の種を取得するのでしょうか?

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

No. 5025 # 68user 2009/08/26 (水) 11:01:56
>>5024 鈴木
Windows に詳しくないので直接の回答はできませんが、
    - 前提として、RAND_poll(3) は呼んでいますか?
    - プログラムの各部分に RAND_status(3) を実行し、
        seed の状況を確認することで、何を行うと十分な
        seed がたまるか確認できるのではないでしょうか。
    - Windows 用の RAND_poll(3) や RAND_add(3) のソースは
            http://cvs.openssl.org/fileview?f=openssl/crypto/rand/rand_win.c&v=1.46
        にありますので、眺めてみてはどうでしょうか。
    - RAND_seed(3) は最終的には RAND_add(3) を呼ぶ…と思うのですが、
        ソースを見てもそのつながりがよくわかりませんでした。
と思いました。

No. 5027 # sep 2009/09/20 (日) 20:34:31
UNIXの初歩的なことですみません。

UNIXで、viを使用するときシェルの環境変数の設定などは
必要なのでしょうか。

cronを編集しようとして、「crontab -e」を実行したの
ですが、正しく表示されませんでした。
「crontab -l」では、正しく見れます。
環境変数のEDITORに、”vi”を設定し、「crontab -e」を
行うと、正しく表示されます。

ここでなのですが、unixにログインし、コマンドラインから、
viを起動すると問題なく使用できるのですが、ログインの場合
環境変数のEDITORは関係ないのでしょうか。
それとも、そういうものなのでしょうか。

環境は、
solaris8
bシェル

No. 5028 # zsh 2009/09/22 (火) 12:08:17
>>5027 sep
環境変数 EDITOR は、単に vi(vi コマンド)を使用する場合には
必要ありません。
crontab コマンドのように、エディタを選択できるプログラムが
参照します。
http://x68000.q-e-d.net/~68user/unix/environment.html#EDITOR

なお、crontab コマンドでは、EDITOR が設定されていない場合は
ed コマンドで編集画面が開きます。

No. 5029 # y-hira 2009/11/03 (火) 01:44:42
はじめまして

POP3 クライアントを作ってみよう(3) のページにて

> APOP はその原理上、必ずサーバ側に生パスワードを保存しておく必要があります。...
> CRAM-MD5 や CRAM-SHA などの認証方法がありますが、サーバ側に生パスワードを保存しておく必要はありません。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

とありますが、CRAM-MD5 (や DIGEST-MD5) は生パスワードを
サーバ側が保持していなければならないと理解しておりましたが如何でしょうか?

サーバーは,認証の際に 「クライアントから受信した文字列(暗号化済み)」と,
「送信したChallengeコードと(サーバー側の)『ユーザのパスワード』をMD5で暗号化したもの」を
比較する必要がありますので...。

No. 5030 # 68user 2009/11/04 (水) 13:56:53
ご指摘ありがとうございます。勘違いしていたようです。
以下のように修正いたしました。

http://x68000.q-e-d.net/~68user/net/pop3-3.html
- 一方 IMAP というプロトコルには APOP と似た認証の仕組みとして、
- CRAM-MD5 や CRAM-SHA などの認証方法がありますが、サーバ側に
- 生パスワードを保存しておく必要はありません。

+ SMTP や IMAP には APOP と似た認証の仕組みとして、CRAM-MD5 や、
+ それを改善した DIGEST-MD5 などの認証方法がありますが、こちらも
+ 同様にサーバ側に生パスワードを保存する必要があります。

No. 5031 # スパムと戦う掲示板 [URL] [E-mail] 2009/11/09 (月) 23:36:27
管理人様、失礼いたします。

この度、私の運営する掲示板への度重なるスパム書き込みに対する対策を行っております。

つきましては、せっかくなら私のサイトだけに囚われず
一般の皆様にも使用していただけた方が良いかと思い
絶対に荒らされない掲示板サービスを立ち上げようと考えております。

スパムに悩まされない掲示板に興味が御座いますでしょうか?
また、使っていただける皆様と共同して随時機能を追加して参ります。

掲示板サービスに対するご要望があれば、
下記のメールアドレスにご連絡いただければ
追って準備が整い次第、お知らせをさせていただきます。
掲示板サービス以外のメールは、一切送信いたしません。

antispambbs@gmail.com

それでは、貴重なスペースをありがとう御座いました。
書き込み内容がサイト内容とそぐわない場合は、
大変お手数ですが削除いただきますようお願いいたします。

失礼いたします。

No. 5040 # あきもと 2010/01/18 (月) 23:55:19
Bシェルで、whileとreadを使ったファイルからの読み込み
について教えてください。

while文の中の変数をwhile文の外で使いたいのですが、
以下の様に、whileとreadを使ってファイルから読み込み
doをdoneの間で処理を行い、ループを抜けた後、doneの
後ろで、結果を表示させたのですが、正しく表示されません。

どうしたら正しく表示されますか。

環境
    Solaris8
    Bシェル

---------------------------------------------------------
#!/bin/sh
#

num=0

while read line ; do
        echo $line
        num=`expr $line + $num`
done < a.txt

echo "-----"
echo $num


cat a.txt
1
2
3
4
5
6
7
8
9
10

No. 5041 # おう 2010/01/19 (火) 01:28:56
Bシェルで、sedを使って、2行を1行にしているのですが上手く行きません。

改行している次の行で、半角スペースから始まっている行を、sedを使って
1行にしたいのです。

sed -e ':loop' -e '$b' -e 'N;/\n /{s/\n *//;b loop' -e '};P;D;b loop' file.txt

としたのですが、最初に引っかかったのは、1行になるのですが、
それ以降のものは、1行になりません。

環境
    Solaris8
    Bシェル

内容
---------
[Fri Jan 1 00:00:00] 開始
[Fri Jan 1 00:00:00] INFO:あいうえお
  abcdefg
[Fri Jan 1 00:00:00] INFO:あいうえお
    1234567890
[Fri Jan 1 00:00:00] INFO:あいうえお
                    aaaaaaa bbbbbb cccccc
[Fri Jan 1 00:00:00] INFO:あいうえお
        ABC 1234
[Fri Jan 1 00:00:00] INFO:12345
[Fri Jan 1 00:00:00] INFO:ABCDE
[Fri Jan 1 00:00:00] INFO:あいうえお
[Fri Jan 1 00:00:00] 終了

期待する結果
----------
[Fri Jan 1 00:00:00] 開始
[Fri Jan 1 00:00:00] INFO:あいうえお abcdefg
[Fri Jan 1 00:00:00] INFO:あいうえお 1234567890
[Fri Jan 1 00:00:00] INFO:あいうえお aaaaaaa bbbbbb cccccc
[Fri Jan 1 00:00:00] INFO:あいうえお ABC 1234
[Fri Jan 1 00:00:00] INFO:12345
[Fri Jan 1 00:00:00] INFO:ABCDE
[Fri Jan 1 00:00:00] INFO:あいうえお
[Fri Jan 1 00:00:00] 終了

実際の結果
---------
[Fri Jan 1 00:00:00] 開始
[Fri Jan 1 00:00:00] INFO:あいうえお abcdefg
[Fri Jan 1 00:00:00] INFO:あいうえお
    1234567890
[Fri Jan 1 00:00:00] INFO:あいうえお
                    aaaaaaa bbbbbb cccccc
[Fri Jan 1 00:00:00] INFO:あいうえお
        ABC 1234
[Fri Jan 1 00:00:00] INFO:12345
[Fri Jan 1 00:00:00] INFO:ABCDE
[Fri Jan 1 00:00:00] INFO:あいうえお
[Fri Jan 1 00:00:00] 終了

となります。
期待する結果を得たいのですが、どうすればよいですか。

No. 5042 # zsh 2010/01/21 (木) 17:14:43
>>5040 あきもと
>>4776 zsh
を参照してください。

>>5041 おう
sed -e '$!N; s/\n \{1,\}//; P; D' file.txt
でどうでしょうか?

No. 5045 # h.maruwa 2010/01/23 (土) 03:47:25
管理人さんへ
『User-Agent 統計』のページ
(http://x68000.q-e-d.net/~68user/cgi-bin/view-browser.cgi)
が『エラー : 内部エラーが起こりました。』となっているので
お知らせします。

No. 5047 # あきもと 2010/01/23 (土) 17:10:34
>>5042 zsh

ありがとうございます。
教えて頂いたところに書いてある方法で
上手くいきました。

No. 5048 # おう 2010/01/23 (土) 20:18:10
>>5042 zsh

ありがとうございます。
上手くいきました。

No. 5049 # ボンジー 2010/01/26 (火) 20:30:18
はじめまして。ボンジーと申します。ハッキングのやり方を教えてください。しーローとなもので

No. 5056 # Misaki [URL] [E-mail] 2010/02/14 (日) 21:05:38
いつもUNIXコマンドでお世話になっています。

画像変換のconvertコマンドについてお伺いしたいことがあります。

私は今、趣味でサイトを作っています。
画像アップロードした際にGIFからjpgに変換させる処理にconvertを使っているのですが、
ファイル名の拡張子は.jpgになっているのですが、バイナリエディタで開いて確認するとGIFファイルのままです。

convertはImageMagickダウンロードしてきて新規インストールしたものです。

このページではGIFからJPGへの画像変換を紹介されていたのですが、
私のところと同じような現象がおこっていませんでしょうか。
http://x68000.q-e-d.net/~68user/unix/pickup?keyword=convert&target=command

No. 5057 # 68user 2010/02/15 (月) 16:38:19
>>5056 Misaki
そういう事象は聞いたことがないですが、ありうることとしては
libjpeg のリンクがうまくいっていない、でしょうか (それにしても
エラーが出るのではないかと思うのですが)。

変換前後のファイルを file コマンドで調べても、やはり gif でしょうか?

No. 5059 # Misaki [E-mail] 2010/02/16 (火) 16:13:19
>> 5057
早速、回答ありがとうございます。
fileコマンドでgifかどうか判別できるんですね!
やってみたところGIFでした。

簡単に調べてみましたがlibjpegが上手く入っていなかったようです。
帰ったらもうちょっと詳しく調べてみます。

ldd結果
$/usr/bin/ldd /usr/local/bin/convert
                linux-gate.so.1 => (0x00110000)
                libMagickCore.so.3 => /usr/local/lib/libMagickCore.so.3 (0x00111000)
                libMagickWand.so.3 => /usr/local/lib/libMagickWand.so.3 (0x00427000)
                libz.so.1 => /usr/lib/libz.so.1 (0x0059a000)
                libpthread.so.0 => /lib/libpthread.so.0 (0x005af000)
                libdl.so.2 => /lib/libdl.so.2 (0x0056b000)
                libgomp.so.1 => /usr/lib/libgomp.so.1 (0x00523000)
                libm.so.6 => /lib/libm.so.6 (0x00571000)
                libc.so.6 => /lib/libc.so.6 (0x005c6000)
                /lib/ld-linux.so.2 (0x0040c000)
                librt.so.1 => /lib/librt.so.1 (0x0081e000)

No. 5060 # かばら 2010/02/16 (火) 22:18:08
初めまして。かばらと申します。
現在、マシン間のソケット通信に関して勉強中なのですが、connectシステム
コールについて質問させていただきいても宜しいでしょうか。

質問1
クライアント側から発行されるconnect()はサーバー側で発行されるaccept()の
ように処理をロックすることがあるのでしょうか。もしあるとすればどの
タイミングでコールした場合でしょうか。

質問2
サーバー側がlisten()をコールする以前にクライアント側でconnect()をコール
するとエラー(返却値-1)が起きますが、クライアントがサーバーの状態を監視し、
connect()をコールするタイミングを得ることは可能でしょうか。
(試しにselect()を使用してみましたが上手くいきませんでした。)

突然の不躾な質問で申し訳ございませんが、何卒ご教授くださいますよう
よろしくお願いいたします。

No. 5061 # 68user 2010/02/17 (水) 19:51:13
>>5059 Misaki
> 簡単に調べてみましたがlibjpegが上手く入っていなかったようです。
これはまたシンプルな convert ですね。ウチでは以下のとおりです。

/usr/local/bin/convert:
                libMagick.so.10 => /usr/local/lib/libMagick.so.10 (0x28073000)
                libWand.so.10 => /usr/local/lib/libWand.so.10 (0x283c7000)
                libjbig.so.1 => /usr/local/lib/libjbig.so.1 (0x28479000)
                liblcms.so.1 => /usr/local/lib/liblcms.so.1 (0x28484000)
                libtiff.so.4 => /usr/local/lib/libtiff.so.4 (0x284b1000)
                libjasper.so.4 => /usr/local/lib/libjasper.so.4 (0x284fe000)
                libjpeg.so.9 => /usr/local/lib/libjpeg.so.9 (0x28548000)
                libpng.so.5 => /usr/local/lib/libpng.so.5 (0x28566000)
                libfpx.so.1 => /usr/local/lib/libfpx.so.1 (0x2858b000)
                libdpstk.so.1 => /usr/X11R6/lib/libdpstk.so.1 (0x2862b000)
                libdps.so.1 => /usr/X11R6/lib/libdps.so.1 (0x28633000)
                libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x2867a000)
                libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x28689000)
                libbz2.so.1 => /usr/lib/libbz2.so.1 (0x286da000)
                libxml2.so.5 => /usr/local/lib/libxml2.so.5 (0x286e9000)
                libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x28818000)
                libfreetype.so.9 => /usr/local/lib/libfreetype.so.9 (0x28907000)
                libz.so.2 => /lib/libz.so.2 (0x28971000)
                libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x2897f000)
                libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x28988000)
                libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x2899f000)
                libm.so.2 => /lib/libm.so.2 (0x28a67000)
                libc.so.5 => /lib/libc.so.5 (0x28a80000)
                libstdc++.so.4 => /usr/lib/libstdc++.so.4 (0x28b5a000)

>>5060 かばら
> 質問1
> クライアント側から発行されるconnect()はサーバー側で発行されるaccept()の
> ように処理をロックすることがあるのでしょうか。もしあるとすればどの
> タイミングでコールした場合でしょうか。
「connect はブロックするか」(connect を発行した後、待たされることはあるか)
という趣旨でよいですかね。ざっと考えつくところは、
    1. 3way handshake が完了するまでブロックする
    2. サーバもしくはサーバ側ルータにて一切のレスポンスを返さない
          構成の場合、いつまでたっても返事がないので SYN を送り続け、ブロックする
    3. サーバ側で処理しているソケット数が SOMAXCONN を超えていた場合、
          滞留しているクライアントの処理が終わるか、タイムアウトになるまで
          ブロックする
    4. サーバ側が listen しているが accept していない場合、ブロックする
などなど。3・4 は記憶に頼って書いてますので、本当かどうかは自信がないです。

一方、ノンブロッキングソケットで connet すれば、ブロックしません。

> 質問2
> サーバー側がlisten()をコールする以前にクライアント側でconnect()をコール
> るとエラー(返却値-1)が起きますが、クライアントがサーバーの状態を監視し、
> connect()をコールするタイミングを得ることは可能でしょうか。
> (試しにselect()を使用してみましたが上手くいきませんでした。)
サーバ側で準備が整ったら通知がくるといった仕組みはないので、リトライ
し続けるしかないですね。

No. 5062 # Misaki 2010/02/18 (木) 12:41:07
お礼遅くなりました。

libjpegを入れて再インストールしたらちゃんと変換されました。
私ははgifの取り扱いに失敗しているものだと勘違いしていました。

迅速かつ的確な回答ありがとうございました。

No. 5063 # かばら 2010/02/18 (木) 22:32:12
ご回答ありがとうございます。
質問1、2共に納得です。

大変お世話になりました!

No. 5071 # Mods [E-mail] 2010/05/13 (木) 10:22:57
はじめまして、Mod's(マスター・オブ・ドヘン○イ)と申します。
困った時に参考にさせて頂いております。

Bシェルスクリプトを独学中です。と言いつつBashの環境設定ファイルとサブシェル
(詰まる所はプロセスの理解不足)について質問させてください。

利用環境:MacOSX 10.6
ログインシェル:Bash
    bash-3.2$ bash --version
    GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)


元々はログインシェルがBashの利用環境にてログイン過程のシェル起動や以降のシェル起動による
環境設定ファイルの読み込み順序などを調べる為に/etc/profile、/etc/bashrc、~/.bash_profile、
~/.bashrcの4つにそれぞれechoコマンドを仕込んで実際にそれらログインスクリプトが起動した
時に任意のファイルへ「読み込みました」的な内容の出力をするようにしました。

結果、ログイン時にはそれら全ての環境設定から出力されその後のBashの起動では~/.bashrcから
のみ出力があり、ここまでは予想通りでした。
グローバル環境設定ファイル、およびローカル環境設定ファイルのいずれもprofile側からrc側を
sourceしています。

ここまでは良いのですが、カレントシェルからシェルスクリプトを実行した際、私の予想では
~/.bashrcから出力を得られるつもりでいました。シェルスクリプトを実行する際にサブシェルを
起動すると「されている(←私の中で未確定)」わけですから。

従いまして下記のように2つ推測を立ててみました(どちらも外れているかもしれませんが:笑)。
<推測>
    推測&#9312; :新たにシェルは起動している、しかし。
    スクリプト実行によるサブシェルはあくまでスクリプトを実行するシェルであって対話シェル
    として起動しているわけではないのでローカル環境設定ファイルを読み込む必要がない。
    言い換えると環境設定ファイルはあくまでログインスクリプトだから。

    推測&#9313; :新たにシェルは起動していない。
    あくまでスクリプトを解釈するのはカレントシェルであって解釈後の実際の処理はシェルの
    起動を伴わない子プロセスが実行するから。

推測&#9313;を書いていてふと思ったのですが、1つのプロセスというのは同時に一つの事しか出来ない
「はず」で、カーネル視点から考えるとシェルとしてプロセスを起動した以上は入力されたコマンド
を自身が理解出来る命令へ翻訳して受け取るための1プロセス。
そして翻訳された命令を受け取ったカーネルは実際のデータ処理実行でまた次の1プロセスを育成。
つまり、こちらはカーネル上のデータ処理のプロセスであってシェルの起動ではない。

よってカレントシェルからのスクリプト実行の処理というのはカレントシェルがスクリプト内の
コマンドを翻訳してカーネルが翻訳された命令を受け取って子プロセスが育生されるので~/.bashrcは
読み込まれない。

つまり、「サブシェルが起動する」というのはカレントシェルのプロセス上でデータ処理が行われる
訳ではないということを便宜的に説明するための「考え方」でしかないのか?

と、以上までのような推測を立ててみました。
個人的にはこのように考えるとcronからのスクリプト実行でも環境変数を~/.bashrcから読み込ま
ない事にも合点がいくのですが。。。
もっともcronプロセスはログインプロセスとは全くべつのプロセスなので環境変数で引き継ぐも
なにもないのですがシェルが起動するということを中心に考えると、むぅ〜ん、という感じです。

どちらにせよ、~/.bashrcをシェルスクリプト実行時に起動させたければsourceすれば良いだけの
ことですが、一般的な説明としてスクリプト実行には新たにシェルが起動しているという説明と
~/.bashrcが起動しない結果が自分の中で噛み合ないので質問させて頂きました。

psコマンドを使いこなせていれば良いのだろうなぁと思いつつ。いきなりの長文で失礼しました。

http://x68000.q-e-d.net/~68user/unix/pickup?keyword=%A5%B5%A5%D6%A5%B7%A5%A7%A5%EB&target=command

No. 5072 # 68user 2010/05/14 (金) 13:19:29
>>5071 Mods
bash(1) 曰く、
    ~/.bash_profile
            個人用の初期化ファイル。ログインシェルが実行します。
    ~/.bashrc
            対話シェルごとに実行される、個人用の起動ファイル。
です。

対話的シェルの定義は、同じく bash(1) 曰く
      対話的なシェルとは、オプションでない引数がなく、標準入力と
      標準出力がいずれも端末に接続されていて (これは isatty(3)
      で調べられます)、 -c オプションが指定されていない状態で起動
      されたシェル、または -i オプション付きで起動されたシェル
      のことです。
です。

シェルスクリプトは
    http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B7%A5%A7%A5%D0%A5%F3%A5%B0
にあるように、結果的には
    /bin/bash ./foo.sh
などと起動されるので、
    「オプションでない引数がなく」
に該当しないため、対話的シェルではありません。よって、
    ~/.bashrc
            対話シェルごとに実行される、個人用の起動ファイル。
は読み込まれません。

また、シェルスクリプト起動の場合はログインシェルでもないので、
    ~/.bash_profile
            個人用の初期化ファイル。ログインシェルが実行します。
も読み込まれません。

以上が仕様上の話です。

で、なぜそういう仕様かと言うと、シェルスクリプトが個人用の
設定を参照してしまうと都合が悪いからです。例えばこちらの手元の
CentOS 5.3 において /usr/bin/* のうちシェルスクリプトである
ものは、以下のようにかなりあります。

/usr/bin/apr-config
/usr/bin/apropos
/usr/bin/apu-config
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/bashbug-32
/usr/bin/build-classpath
/usr/bin/build-classpath-directory
/usr/bin/build-jar-repository
/usr/bin/bzcmp
/usr/bin/bzdiff
/usr/bin/bzgrep
/usr/bin/bzless
/usr/bin/bzmore
/usr/bin/c89
/usr/bin/c99
(略)

これらが実行されるたびに ~/.bash_profile などを呼んでしまうと、
alias・シェル変数・関数などがプログラム作成者の意図に反したもの
であった場合、おかしな挙動をしてしまうでしょう。それを避けるために
こういう仕様になっているものと思います。

上記のプログラムの挙動をカスタマイズしたい場合は、アプリ個別の
設定ファイル (~/.*rc) や、環境変数で指示すべき、ということですね。

> 個人的にはこのように考えるとcronからのスクリプト実行でも
> 環境変数を~/.bashrcから読み込まない事にも合点がいくのですが。。。
cron 経由だと端末を持たないので対話的シェルではないから、
~/.bashrc を読まない、です。この結果、
      ログインシェル・対話的シェルと、cron 経由のシェルで
      共通の環境変数を設定する方法がない
となってしまい、仕様としてはイマイチだと個人的には思っていますが、
世の人達は cron で
      HOGE=fuga
      * * * * * $HOME/bin/foo.sh
としたり、
      * * * * * . $HOME/.bash_profile && $HOME/bin/foo.sh
としたり、
      $HOME/bin/foo.sh 内で必要な環境変数を設定する
などの方法で乗り切っています。

環境変数であれば FreeBSD だと /etc/login.conf で設定する方法
もありますが、Mac OS X だとどうなのかはわかりません。

> 一般的な説明としてスクリプト実行には新たにシェルが起動しているという説明と
> ~/.bashrcが起動しない結果が自分の中で噛み合ないので質問させて頂きました。
シェルは起動していますが、~/.bashrc などを読むべき条件が
揃っていない、ということですね。

No. 5073 # Mods [E-mail] 2010/05/14 (金) 17:19:22
>>5072 管理人様

早速のご回答を頂きましてありがとうございます!
cronの説明も含め非常にスッキリいたしました。

スクリプト実行によるシェル起動プロセスが~/.bashrcを読み込まない件に関しては最初の
推測が近かったものの「ローカル環境設定ファイルを読み込む必要がない。」のではなく
むしろ「読み込んではまずい。」ということだったのですね。
その理由も言われてみれば非常に納得です。

この度は詳細な解説をして頂き、まことにお世話になりました(感謝感激です)。

No. 5078 # BAVO 2010/05/26 (水) 21:59:38
はじめまして
以前『User-Agent 統計』を参考にさせていただいていたのですが
最近トップページから『User-Agent 統計』に進んでもエラーになり
うまく動いてないようですが、他の方からは正常に動いているのでしょうか?
できれば動作確認していただければと思います。
よろしくお願いします。

No. 5079 # 68user 2010/05/26 (水) 23:00:37
>>5078 BAVO
以前サーバの負荷が上昇した際、User-Agent 統計が負荷上昇の
一因であるように見えたので、実行不可としておりました。
その後別アプローチから負荷軽減を図ったので、とりあえず
さきほど実行可能にしてみました。
    http://x68000.q-e-d.net/~68user/cgi-bin/view-browser.cgi

>>5045 h.maruwa
同じご指摘をいただいていたにも関わらず、スルーしており
申し訳ありませんでした。

No. 5080 # abb 2010/06/03 (木) 18:58:08
>FollowSymLinks
>シンボリックリンクを許可するかどうか。
>シンボリックリンクをたどるかどうかを設定します。
>なお、シンボリックリンク自体は OS の機能ですから、いつでも使えます。
>ここでは web 経由でシンボリックリンクを辿るかどうかを決めるわけなので、
>CGI プログラムの中ではいつでもシンボリックリンクを使うことができます。

なんだか日本語が変ですよ。設定がどう働くのかこれじゃわからないです。。。

No. 5084 # h.maruwa 2010/08/13 (金) 07:56:50
>>5079 68user
User-Agent統計のページが閲覧可能となっているのを確認しました。
対応有難うございました。

日本国内でのUser-Agentを多数・長期間分網羅したサイトは稀少なので
アクセスが集中しやすいのかもしれませんね。

No. 5091 # jagio 2010/09/26 (日) 11:03:36
UNIX情報Web公開、ありがとうございました。
下記の部分がとても、役に立ちました。

http://x68000.q-e-d.net/~68user/unix/pickup?tee
UNIXの部屋 コマンド検索:tee (*BSD/Linux)
...(snip)...
make >make-log 2>&1 (sh・bash の場合)
...(snip)...


C言語バッチ処理のlog出力先を下記のように(×)から(○)へ変えたら、
標準入力を要求する、フィルタ系pgmテストがやりやすくなりました。
(×)./"$PGM1" >>"$LOG1" 2>&1
(○)./"$PGM1" 2>&1 | tee -a "$LOG1"

pgmには、
標準エラー出力に下記のようなメッセージを表示させ、
    fprintf(stderr, "*** %s needs stdin ! ***\n", pgm_id);
    fprintf(stderr, "*** if end of input ,then press ctrl+d. ***\n");
標準出力と標準エラー出力をログ出力させると、
画面表示で何をすれば良いか分かり、
データ入力時の操作がしやすいです。


以上です。////////

No. 5112 # よ4あき 2010/10/18 (月) 16:38:28
odの説明で、「x1 と c の順序を逆にしたので、"a" と "61" の行が逆になった
」と書かれていますが・・・イメージが逆になってません♪

No. 5113 # 68user 2010/10/18 (月) 20:04:15
>>5112 よ4あき
ご指摘ありがとうございます。手元のデータは更新しました。
現在修正中の箇所があるのでまだアップできませんが、近日中に
更新いたします。

No. 5116 # 暗号の説明 2010/12/28 (火) 03:37:30
大変わかりやすかったです。
本当に一般の雑誌よりも理解しやすかったです。
感謝

No. 5117 # 68user 2011/08/05 (金) 14:19:25
UNIXの部屋を更新しました。
    http://x68000.q-e-d.net/~68user/unix/

>>5112 よ4あき
od の記述を直しました。更新に10ヶ月もかかりまして、
誠に誠に申し訳ございません。

No. 5118 # 68user 2011/12/16 (金) 17:57:59
さきほど問い合わせフォームにてご指摘いただきました xargs のサンプルの
typo について、修正いたしました。ご指摘いただきありがとうございました。
    http://x68000.q-e-d.net/~68user/unix/pickup?xargs

No. 5120 # ななし 2011/12/24 (土) 22:49:55
公開鍵方式での暗号化の解説、大変わかりやすくて参考になりました。
誤記について報告いたします。
>「a」は ASCII コードでは 0x61、10進数で 141 です。
10進数では97ではないでしょうか?
それと小さいところで、
>e = 5, 7, 13, 17, ...
のところで3が抜けていると思います。
では、後のコンテンツもゆっくり拝見させていただきます。

No. 5121 # 68user 2011/12/27 (火) 14:39:36
>>5120 ななし
ありがとうございます。141 は 8進数でした。97 に直し、
後続の式も修正いたしました。e = 3 も追記しました。

http://x68000.q-e-d.net/~68user/net/crypt-2.html

No. 5137 # べた 2012/08/16 (木) 17:46:11
awk内でファイルをオープンしたいのですが
どうすればよいか教えてください。
環境:solaris8、Bシェル

awk '{ }' test.txt

awkの処理内、つまり「'{ }'」の中で別ファイルを
読込みたい

No. 5138 # tenagamonkiii 2013/01/20 (日) 00:14:39
ソースの方拝借させていただいたところうまく行かず、知恵袋にて質問したところご回答者様から回答をいただき、連絡して欲しいとのことでしたのでお知らせさせて頂きます。出すぎたまねとは思いますがご容赦の方おねがいします。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14100547184

No. 5139 # 68user 2013/01/23 (水) 16:16:57
>>5138 tenagamonkiii
> http://x68000.q-e-d.net/~68user/net/c-http-1.html
確認が甘く、失礼しました。下記修正で対応させていただきました。
    - unsigned short port = 0;
    + unsigned short port = 80;

ソース全体からするとイマイチな修正なのですが、行番号が
変わると解説部分とズレが生じてしまうのでご容赦ください。


ご指摘ありがとうございました。

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