メインコンテンツまでスキップ

「Command」タグの記事が8件件あります

全てのタグを見る

Apacheでよく使うコマンドと設定項目

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

設置環境はFedoraを想定。 注:ソースからインストールした場合や他の環境だと一部ファイルのパスが違うところがある。 機会があれば今後も少しずつ書き足し・修正していく。

コマンド

起動

# /etc/rc.d/init.d/httpd start または、 # service httpd start

終了

# /etc/rc.d/init.d/httpd stop または、 # service httpd stop

再起動

# /etc/rc.d/init.d/httpd restart または、 # service httpd restart

自動起動に設定

# chkconfig httpd on

自動起動の確認(Run level 3:on)

# chkconfig --list httpd

設定の反映

# /etc/rc.d/init.d/httpd reload

ディレクトリの所有者の変更

# chown <ユーザ名>. /var/www/html/

ディレクトリをApache実行ユーザに変更

# chown -R apache:apache /var/www/html/cgi-bin/

httpd.confの設定

設定ファイルhttpd.confのパス

/etc/httpd/conf/httpd.conf

外部設定ファイル*.confを置くパス

/etc/httpd/conf.d/*.conf ・起動時に読み込まれる ・AliasとDirectoryを合わせて用いる場合が多い

DocumentRoot

ルートディレクトリの設定 e.g. DocumentRoot "/var/www/html" で www.example.com/へのアクセスは/var/www/htmlのインデックスページとなる。

Alias

Alias <ドメイン以下のURLパス> <サーバ内のディレクトリパス> e.g. Alias /blog /var/www/blog の場合は、http://www.example.com/blog/にアクセスした際、サーバの/var/www/blog/内の既定のインデックスファイルが読み込まれる。

Directoryタグ

e.g.

<directory "/var/www/html">〜<directory>

属性にディレクトリパスを指定している。

.htaccessを許可する場合

AllowOverride All

IPアドレスによるアクセス制限

Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1.0/24

↑はlocalhost、イントラネット以外からのアクセスを拒否

.htaccessによるパスワード認証

.htaccessファイル内の設定例

SSLRequireSSL # SSL経由のアクセス
AuthUserFile <認証するユーザリストのパス>
AuthGroupFile <パス>
AuthName "<ページ名>"
AuthType Basic # 認証タイプ
require valid-user

認証するユーザの登録

初回は # htpasswd -b -c <保存先> <ユーザ名> <パスワード> 二件目以降は既にファイルが作成されているので-cを抜く # htpasswd -b <保存先> <ユーザ名> <パスワード> ここで作成したファイルのパスを上のAuthUserFile項目に書く。

Python: ファイル読み込み時の例外の扱い例 - try、except、else、finallyブロック

· 約4分
Yu Sasaki
Enterprise Security Manager / Advisor

ファイルのパスや名前のミス、パーミッションの権限が無い等が原因でファイルを読み込めない場合がある。そのような場合、すなわち例外が発生した際にそこで処理を中断して、発生した例外に合わせた処理ブロックにジャンプする構文が、try:~except Error:~構文。 今回は、コマンドライン引数で英文テキストファイル名を指定し、スクリプト内でファイル内容を読み込み、単語数をカウントし出力するスクリプトを以って、オプションのelse、finallyブロックを含めた例外ブロックの扱いを確認する。 ただし、ここでの「単語」とは、簡単に考える為、1つの空白文字で区切られた文字列とする。

ソースコード

# -*- coding: UTF-8 -*-
import sys
script_name = sys.argv[0]
try:
arg = sys.argv[1]
f = open(arg, 'r')
except IndexError:
print 'Usage: %s TEXTFILE' % script_name
except IOError:
print '"%s" cannot be opened.' % arg
else:
print arg, 'contains', len(f.read().split(' ')), 'words.'
f.close()
finally:
print 'n"%s" process end.' % script_name
quit()
print 'Not reach this line.'

コードの説明

tryブロック

まず、例外を発生させる恐れのある行は、tryブロック内に書く。 ここで発生する可能性がある例外はコマンドライン引数が格納されているリストへのアクセス部分であるsys.argv[1]。[]演算子で存在しない要素を参照する例外。また、ファイルを開くopen(arg, 'r')も冒頭の理由で例外発生の可能性もある。

exceptブロック

exceptブロックは、tryブロックで例外が発生した場合にのみ実行されるブロックです。その為、例外が発生しない場合は実行されない。 発生する可能性のある例外のタイプ毎にexceptブロックを書けば、そのタイプ毎の例外への対処処理を書くことが出来る。

except TYPE_AError:
TYPE_AErrorが発生した際のとある処理...
except TYPE_BError:
TYPE_BErrorが発生した際のとある処理...

elseブロック (オプション)

elseブロックは全てのexceptブロックの後に書く(任意なので書かなくても構わない)。 elseブロックはtryブロックで例外が発生しなかった場合にのみ実行されるブロック。今回は、ファイルの読み込みとクローズに使用している。

finallyブロック (オプション)

finallyブロックはtryブロックで例外が発生するしないに関わらず実行されるブロック(任意なので書かなくても構わない)。

実行結果

読み込むテキストファイルを以下の_aLine.txt_とする。 aLine.txt

Unless I set the standard where I am in any level, I'll be puzzled about what I should do from now on.

コマンドラインで適切な引数を与えた場合

$ python excp01.py aLine.txt
aLine.txt contains 22 words.
"excp01.py" process end.

存在しないファイル名を引数を与えた場合

$ python excp01.py texfile.tex
"texfile.tex" cannot be opened.
"excp01.py" process end.

コマンドライン引数を与えなかった場合

$ python excp01.py
Usage: excp01.py TEXTFILE
"excp01.py" process end.

例外オブジェクト名をpython処理系に聞いてみる

どんなメソッドや関数、演算子が、どのような例外を投げるのか予測が付かない場合もある。そんな場合、一旦はスクリプトを実行してエラーを確認する。 SyntaxError: invalid syntax以外のエラーがある場合、例えば、

$ python excp01.py
Traceback (most recent call last):
File "excp01.py", line 5, in
arg = sys.argv[1]
IndexError: list index out of range

のような場合は、最終行の行頭のIndexErrorが例外名となる。

何でも例外任せにしていいの?

計算量が増える為、良くない。今プログラムのコマンドライン引数の確認を、 if len(sys.argv) != 2: ホニャララ とすると整数の比較ですむが、例外のキャッチに任せると、例外インスタンスを生成し送出という計算量の大きい処理が掛かる。ネットワーク接続やファイル読み書きなどのIOでは例外はイベント駆動で発生する為、例外制御が必須ですが、それ以外では使用しない。

ドキュメント

FedoraにGUI環境GNOMEをyumでインストール

· 約3分
Yu Sasaki
Enterprise Security Manager / Advisor

Fedoraのセットアップ時にGUI環境(GNOME, KDE)をインストールしていないが、セットアップ後にyumコマンドでGNOMEをインストールする手順を以下に示します。

XとGNOMEのインストール

以下のコマンドを打ち込みます。

# yum groupinstall "X Window System" "GNOME Desktop Environment"

もしKDEをインストールする場合は、

yum groupinstall "X Window System" "KDE (K Desktop Environment)"

何事も無ければ、大体230MBぐらいD&Iしますので、他のことでもしながら待ちます。 しかし、以下のようなエラーが出た場合、

Error: Missing Dependency: policycoreutils = 2.0.31-7.fc8 is needed by package policycoreutils-gui

Error: Missing Dependencyは依存関係の問題です。上の例では、policycoreutils-guiをインストールするのに必要なpolicycoreutils(2.0.31-7.fc8)が無いですよーと言っています。 念のため、以下のコマンドで必要なものがインストールされているか調べます。

# yum info policycoreutils

仮にインストールされている場合、そのバージョン番号も表示されますので、その番号が必要とされているものと一致しているかどうか確認します。ここでは2.0.31-7.fc8ですね。 一致していない場合は、yumでupdateか再インストール(removeとinstall)しましょう。もし、一致しているのに上記のエラーが出た場合でも、yum updateで一回システム全体をアップデートしてみてください。その後再度、

# yum groupinstall "X Window System" "GNOME Desktop Environment"

を行えば、インストールが始まります。

Fedora起動時にXを立ち上げる

毎回コマンドでstartxと打ってX Window SystemとGNOMEを立ち上げるのも手間ですので以下のファイルを修正して、起動時にGNOMEセッションが使えるようにします。 ファイル/etc/inittabの18行目付近にある id:3:initdefault: を id:5:initdefault: に書き換えます。 その後、再起動すればOKです。

日本語入力環境(scim)などのインストール

以下のyumコマンドをroot権限で実行しインストールてください。

# yum groupinstall 'Japanese Support'
<中略>
Installing:
scim-anthy i386 1.2.4-2.fc8 fedora 365 k
scim-lang-japanese i386 1.4.7-7.fc8 fedora 23 k
Installing for dependencies:
im-chooser i386 0.5.3-1.fc8 fedora 82 k
scim i386 1.4.7-7.fc8 fedora 475 k
scim-bridge i386 0.4.14-1.fc8 updates-newkey 99 k
scim-bridge-gtk i386 0.4.14-1.fc8 updates-newkey 39 k
<後略>

再起動すれば、「半角/全角」キーで日本語入力が可能になります。 ………大学ではLinuxメインですが、自宅ではWindowsでCygwin、MinGWや仮想OS、クロスプラットフォームなboostライブラリとかを用いながら騙し々々開発していました。が、もうそんなことやってられる段階でなくなったので(socket, threadまわりの評価の為)今回デプロイ用のサーバに一応の開発環境を整えました。 あんまり大学での作業を持ち込みたくないんだけれどなぁ。スケジュール見直そうかな。

Python: テキストファイルの行頭に行番号を追加

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

コマンドラインで指定されたテキストファイルの行頭に行番号を追加し、そのデータを新たなファイルに書き出すスクリプトです。

ソースコード

#!/usr/bin/python
# coding: UTF-8
import sys
argvs = sys.argv
argc = len(argvs)
if (argc != 3):
print 'Usage: $ python %s target_file making_file' % argvs[0]
quit()
f = open(argvs[1])
lines2 = f.readlines()
f.close()
nf = open(argvs[2], 'w')
i = 1
for line in lines2:
nf.write('%3d: %s' % (i, line))
i = i + 1
nf.close()

仮にこのソースコードをfile05a.pyというファイルで保存した場合、使用する際はプロンプトに以下のように打ち込みます。

実行結果

プロンプト

> python file05a.py file05a.py file05a-l.txt

この結果、生成されたファイルが下記になります。

file05a-l.txt

1: #!/usr/bin/python
2: # coding: UTF-8
3:
4: import sys
5:
6: argvs = sys.argv
7: argc = len(argvs)
8: if (argc != 3):
9: print 'Usage: $ python %s target_file making_file' % argvs[0]
10: quit()
11: f = open(argvs[1])
12: lines2 = f.readlines()
13: f.close()
14: nf = open(argvs[2], 'w')
15: i = 1
16: for line in lines2:
17: nf.write('%3d: %s' % (i, line))
18: i = i + 1
19: nf.close()

Python: コマンドライン引数の取得 - sys.argv変数

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

コマンドラインで与える引数によってプログラムの挙動を変えたいという場面はよくあります。Python ではコマンドライン引数は sys モジュールの argv 属性に文字列を要素とするリストとして格納されています。そして、リストの先頭要素(sys.argv[0])はスクリプトファイル名となっています。

ソースコード

# coding: Shift_JIS
import sys # モジュール属性 argv を取得するため
argvs = sys.argv # コマンドライン引数を格納したリストの取得
argc = len(argvs) # 引数の個数
# デバッグプリント
print argvs
print argc
print
if (argc != 2): # 引数が足りない場合は、その旨を表示
print 'Usage: # python %s filename' % argvs[0]
quit() # プログラムの終了
print 'The content of %s ...n' % argvs[1]
f = open(argvs[1])
line = f.readline() # 1行読み込む(改行文字も含まれる)
while line:
print line
line = f.readline()
f.close

text.txt

It is meaningless only to think my long further aims idly.
It is important to set my aims but at the same time I should confirm my present condition.
Unless I set the standard where I am in any level, I'll be puzzled about what I should do from now on.

実行結果

引数を指定しない場合

$ python argv01.py
['argv01.py']
1
Usage: # python SCRIPTNAME.py filename

引数を指定した場合

$ python argv01.py text.txt
['argv01.py', 'text.txt']
2
The content of text.txt ...
It is meaningless only to think my long further aims idly.
It is important to set my aims but at the same time I should confirm my present condition.
Unless I set the standard where I am in any level, I'll be puzzled about what I should do from now on.

リファレンス

ユーザー管理に関するLinuxコマンド

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

最近ファイルやディレクトリのパーミッション設定と合わせてよく使っているコマンドなので、備忘録を兼ねて使用例を書き出してみます。 ./app ディレクトリを someuser ユーザー、 apache グループに変更する。

# chown -R someuser:apache ./app

ユーザーのファイルやディレクトリ所有者がひょんなことから root に変わってしまったとき、例えば、スーパーユーザで一般ユーザのファイルやディレクトリを操作した場合等、に設定しなおす際は以下のように。

# chown -R hoge:hoge ./hoge

apache ユーザを nagios グループに所属させる。

# usermod -G nagios apache

sshdのログファイルの確認方法

· 約1分
Yu Sasaki
Enterprise Security Manager / Advisor

サーバーでsshdサービスを使っていると、招かれざる人(大抵bot)も相応の頻度でアクセスしてくる。何時何処からどのようなアクセスがあるのかを把握する為にログファイルを確認することは大事。

sshd のログファイルのパスはCentOS / Fedora系ではデフォルトでは /var/log/secure となる。。

# cat /var/log/secure

尚、ssh のログインに失敗/成功したユーザ数は以下の様なコマンド等でカウントできる。

# grep -c invalid /var/log/secure
# grep -c Failed /var/log/secure
# grep -c Accepted /var/log/secure

Linuxコマンドで複数ファイルの文字コードを一括変換

· 約2分
Yu Sasaki
Enterprise Security Manager / Advisor

Linux系OSのfedora6のデフォルト文字コードはUTF8なので、先日久々に参照したEUCのC++ソースコード中のコメントや出力が文字化けしていました。

そこで、ファイルの文字コードをEUCからUTF8に変換するコマンドを調べたところ、PHPプロ!TIPS+のページの中程にそれに関するコマンドがあったので参考にしました。

$find -name '*.cc' | xargs nkf --overwrite -w

↑は拡張子がccの全てのテキストファイルの文字コードをutf8に変換します。

$find . -type f -print0 | xargs -0 nkf --overwrite -w -Lu

↑このコマンドの意味を簡単に示しますと、まずファイルを検索するfindコマンドで、カレントディレクトリ「.」から通常ファイル「-type f」を探索し出力します「-print0」(常に真)。

% find [検索開始ディレクトリ] (option) 参考:UNIXコマンド [find]

ここで、findコマンドの結果をパイプ「|」をもって渡し、そこでxargsでコマンドを実行します。ここでxargsは以下の機能を持ちます。

xargs[えっくす・あーぐす] 標準入力から引数を読み込み、指定のコマンドを実行するコマンド 参考:UNIXの部屋 検索:xargs (*BSD/Linux/Solaris)

文字コード変換コマンドである nkf のオプション--overwriteは変換した文字コードのデータを元のファイルに上書きするもので、-wが文字コードをUTF8に指定するものです。ちなみに、EUCに変換したい場合は-e、Windowsで使われているSJISにする場合は-sを代わりに指定します。

最後の-Luオプションは改行コードをLFに指定するものです。