燈明日記 このページをアンテナに追加 RSSフィード

ごあいさつ

燈明日記へようこそ!!

燈明日記の主なテーマは、以下の通りです。

そして、燈明日記へ来られたのも『私』と『あなた』の何かのご縁です。なので、どうぞごゆっくりご覧下さい!


2010/4/21(水)

[] LinuxバージョンとApacheバージョン

とりあえず、レッドハットとフェドラのLinuxバージョンが知りたい時は、コマンドでなくて、/etc/issueファイルの内容を直接見るとわかります。

$ cat /etc/issue
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
とか
Fedora release 9 (sulphur)

一方、Apacheのバージョンは、httpデーモンを-vオプションで起動するとわかります。

$ /usr/sbin/httpd -v
Server version: Apache / 2.2.3
Server build: Nov 12 2008 08:10:28

2010/3/23(火)

[] Linuxでのftpの設定

UNIXなら始めから使えるファイル転送コマンドftpですが、Linuxでは始めからは使えませんね。

しかし、redhat系では、デフォルトでvsftpdがインストールは、されているようです。

なので、セキュリティはとりあえず考えなければ、以下のようにvsftpdをスタートさせるだけでftpが使えます。

/etc/init.d/vsftpd start

また、PASVモードでftpしたい場合は、/etc/vsftpd/vsftpd.confの以下をYESとします。

pasv_enable=YES

上記の様に変更した後は、リスタートします。

/etc/init.d/vsftpd restart

ちなみに、パッシブ(PASV)モードとは、サーバーから通知されたポートに対してクライアントからコネクトします。通常のアクティブモードでは、サーバーからクライアントにコネクトするので、ファイアーウォールやNATIPマスカレード)が中間にあるとブロックされたり、ポート番号が変更されたり、上手くコネクトができない場合があります。


できれば、本ブログの応援クリック も、よろしくお願い致します。

2010/3/21(日)

[] Apacheのリスタートメモ

Windowsでは、Apacheをインストールすると、スタートメニューにApacheのリスタートがありますが、Linuxでは、それがありません。

Linuxでは、コマンドプロンプトから以下を入力します。


[root@xxx bin]# ./apachectl restart


追記

以下でもリスタートできますね。

/etc/init.d/httpd restart

できれば、本ブログの応援クリック も、よろしくお願い致します。

2010/3/19(金)

[] 分かってみれば、当たり前のこと

普段はWindows上が主戦場なのですが、今回少しだけで、linuxでのApacheのCGI設定をしました。

そして、CGI実行で、はまったのでメモしときます。

分かってみれば、当たり前のことなのですが、それが分かるまでに半日を潰してしまいました(T_T)。


ApacheのCGI設定自体は、結構順調に行きました。

ただ、Apache2系は、本来 httpd.conf に記述していた内容を /etc/httpd/conf.d/ というディレクトリに、『任意名前.conf』というファイルで置くことができますね。

つまり、httpd.confはさわらず、『任意名前.conf』ファイルを追加するだけでいいのです。


そして、単純なテスト用のPerlでのCGIは、すぐに動きました。

しかし、本番用のCGIが動かないのです。system関数でunzipコマンドを呼んでいるところでエラーするのです。

system関数実行後の$?は-1が帰りました。

また、Webからでなく、ログインしてコマンドプロンプトからこのCGIを起動すると問題なく動きます。


で、はじめは、unzipコマンドのパスが通っていないのかな…と思いフルパスにしましたがダメでした。

ちなみに、パスを以下で確認したら /usr/bin があり、パスは通っていました(/usr/bin/unzip)。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print join('<br>',%ENV);

またちなみに、デフォルトのPathは、すべてのユーザプロセスの祖先であるinitが自分自身のPATH環境変数を設定するらしいです。


でいろいろ試行錯誤していると、Apacheのエラーログ(/etc/httpd/logs/error_log)は見たか!…という天の声が聞こえてきました。

すると、ディレクトリのパーミッションでエラーしていることが分かる!


そう、unzipコマンドで展開する先のディレクトリのパーミッションにアザーの書き込み権がなかったのです!

いや〜、分かってみれば当たり前のことなのですが、はまると気がつかないものです。


私は、Apacheにコマンドの実行制御の設定があるのかなと思い、この系の調査のラビリンスに迷い込みました。

ということで、今回の教訓です。

  • Apacheでのエラーの時は、まずは、Apacheエラーログを見るべし!
  • CGIの中で起動するlinuxコマンドは、コマンド自体のパーミッションはもちろん、処理する先のパーミッションも考慮するべし!

という事でした!


できれば、本ブログの応援クリック も、よろしくお願い致します。

2009/8/1(土)

[] cron設定メモ

Linuxのcronとは、指定した時間に任意のコマンドを実行してくれる、そうWindowsで云うタスクスケジューラのような機能です。

指定した時間に任意のコマンドを実行するように設定するには、シェルプロンプトから『crontab -e』と入力し、以下のように記述します。

* * * * * /usr/bin/hoge.sh

コマンドまでに5のフィールドがあり、左からそれぞれ、分、時、日、月、週になっています。

設定する値は、以下の表の通りです。

尚、各々のフィールドに『*』を指定すると、すべてを意味するワイルドカードとなり、5のフィールドに『*』を指定すると結果的に1分間隔のコマンド起動になります。

これは、cron設定の最少単位が分単位ということでもあります。

したがって、上記は、一分毎にhoge.shを起動します。

field allowed values
----- --------------
分(minute) 0-59
時(hour) 0-23
日(day) 1-31
月(month) 1-12 (or names, see below)
週(week) 0-7 (0 or 7 is Sun, or use names)

実は、一分毎にhoge.shを起動する記述は、他にも以下の2通りがあります。

0-59 * * * * /usr/bin/hoge.sh
*/1 * * * * /usr/bin/hoge.sh

補足:『*/1』と言う記述の『/1』は、範囲の「間隔値」で、たとえば、『1-9/2』とした時は『1,3,5,7,9』と同じになります。

補足の補足:各フィールドは、カンマで区切ってリスト値(『1,3,5,7,9』等)も指定ができます。


尚、cron設定の最少単位は分単位なのですが、sleepコマンドを組み合わせることにより、秒単位の指定が可能です。

以下は、30秒毎の起動される。

* * * * * /usr/bin/hoge.sh & sleep 30; /usr/bin/hoge.sh

また尚、実行結果はメールで自分自身に送られます。

メールを送ってほしくない場合は、標準出力を/dev/nullに捨てます。

* * * * * /usr/bin/hoge.sh 1> /dev/null

この場合はエラーが起こった時だけ (標準エラー出力に出力があった時だけ)メールが送られてきます。

エラーが起ころうと絶対にメールを送ってほしくない場合は以下のように指定します。

* * * * * /usr/bin/hoge.sh >/dev/null 2>&1

2009/7/29(水)

[] ZIPファイルの中身を見るには

ZIPファイルを解凍でなく中身だけを見たい場合がありますね。

Windowsでは、ZIPファイルは単にダブルクリックするだけで見れます。

しかし、Linuxではどうするのでしょうか・・・。

tar.gzならtarコマンドのtvzfオプションで見れますが・・・。


◆ 答え:

unzipコマンドのZオプションを使います。


・サンプル表示
$ unzip -Z file.zip
Archive:  file.zip   242 bytes   2 files
-rw-rw-rw-  2.0 unx       66 t- defN 16-Jan-09 19:40 file.txt
-rw-rw-rw-  2.0 unx       66 t- defN 16-Jan-09 19:41 file2.txt
2 files, 132 bytes uncompressed, 34 bytes compressed:  74.2%

もちろん、解凍は、オプションなしに『unzip file.zip』です。

2009/5/17(日)

[] シェル変数と環境変数の違い

LinuxなどのUNIX系をやり始めると、必ず疑問に思う、シェル変数と環境変数の違いです。


まぁ違いは、誤解を恐れず超簡単に言ってしまうと・・・シェルスクリプトから見て以下の通りです。

  • シェル変数は、ローカル変数
  • 環境変数は、グローバル変数

シェル変数は、そのシェルスクリプトか、または現プロンプト上でしかアクセスが有効ではありません。

これに対して、環境変数はシェルスクリプトの入れ子はもちろん、すべてのプログラム(プロセス)からアクセスが有効なのです。


また、シェルには大きく2通り(sh系とcsh系)があり、微妙に表現が異なります。

sh系では、シェル変数をエクスポートして環境変数にしますが、csh系では、各々個々に変数を作成します。

尚、環境変数とシェル変数で同名が存在する場合は、シェル変数の値が優先されます。


sh系(シェル変数と環境変数)

$ # シェル変数セット
$ var=aaa
$ # シェル変数内容表示
$ echo $var
$ # すべてのシェル変数を表示
$ set
$ # シェル変数を環境変数にする
$ export var
$ # すべての環境変数の表示
$ printenv
$ #シェル変数と環境変数両方消去
$ unset var

シェル変数と環境変数の違い

$ # シェル変数セット
$ var=aaa
$ VAR=bbb
$ # シェル変数内容表示
$ echo $var
$ echo $VAR
$ # シェル変数を環境変数にする
$ export VAR
$ # ここでもう一つshを起動する
$ sh
$ # $varはシェル変数なので表示されない
$ echo $var
$ # $VARは環境変数なので表示される
$ echo $VAR

csh系(シェル変数)

% # シェル変数セット
% set var=aaa
% # シェル変数内容表示
% echo $var
% # すべてのシェル変数を表示
% set
% #シェル変数消去
% unset var

csh系(環境変数)

% # 環境変数セット
% setenv VAR aaa
% # 環境変数内容表示
% echo $VAR
% # すべての環境変数を表示
% printenv
% # 環境変数消去
% unsetenv VAR

シェル変数の方が環境変数より優先

%set VAR=aaa
%setenv VAR bbb
%echo $VAR
aaa
%csh
%echo $VAR
bbb