Linux 実践入門
LINUXシステム実践入門
シェルはユーザーから入力された指示に従い、コマンドを実行し、結果を出力するプログラム。
$ コマンド 引数
コマンドはシステムに処理させる命令で、プログラムやシェルスクリプト、シェルのビルトイン(組み込み)コマンドの名前を利用
manファイルの検索
$ man ls | whatis chmod
chmod(1) - change file modes or Access Control Lists
chmod(2), fchmod(2), fchmodat(2) - change mode of file
$ man ls | apropos chmod
chmod(1) - change file modes or Access Control Lists
chmod(2), fchmod(2), fchmodat(2) - change mode of file
lchmod(3) - change mode of file
manファイルにはNAME/名前のセクションにコマンド名と短い要約文が入っている whatis: 検索文字列として指定したコマンド名にマッチするmanファイルの要約文を表示 apropos:検索文字列をコマンド名と要約文から検索して表示する
$ info ls
パーミッション
xが付いてないと、そのディレクトリにアクセスできない→. のつくファイル . →今いるディレクトリを明示 ..→一つ上のディレクトリを明示
total 48
drwxr-xr-x 4 vagrant vagrant 4096 Sep 14 2012 .
drwxr-xr-x 3 root root 4096 Sep 14 2012 ..
-rw------- 1 vagrant vagrant 22 Sep 14 2012 .bash_history
-rw-r--r-- 1 vagrant vagrant 220 Sep 14 2012 .bash_logout
-rw-r--r-- 1 vagrant vagrant 3486 Sep 14 2012 .bashrc
drwx------ 2 vagrant vagrant 4096 Sep 14 2012 .cache
-rwxr-xr-x 1 vagrant vagrant 6487 Sep 14 2012 postinstall.sh
-rw-r--r-- 1 vagrant vagrant 675 Sep 14 2012 .profile
drwx------ 2 vagrant vagrant 4096 Mar 13 09:13 .ssh
-rw-r--r-- 1 vagrant vagrant 0 Sep 14 2012 .sudo_as_admin_successful
-rw------- 1 vagrant vagrant 6 Sep 14 2012 .vbox_version
-rw------- 1 vagrant vagrant 12 Sep 14 2012 .veewee_version
一桁目はファイルタイプを表している。dはディレクトリ。
suid(set user id): ファイルの所有者権限でコマンドを実行できることを意味する sgid(set group id): ファイル→所有者権限 ディレクトリ→その親ディレクトリと同じ権限 で実行できる スティッキービット: 複数ユーザーでディレクトリを共有する際にsgidとは逆に作成したユーザーのみがファイルを削除できるようにするビット
デフォだとコマンドは実行されたユーザーの権限で実行される
実行ビット:x
suid はコマンドに設定されている所有ユーザー権限で実行される、マルチユーザーシステムであるUNIXでは運用側には便利な仕組み suidをむやみにコマンドに設定すると一般ユーザーが他人の権限でコマンドを実行できてしまうため、システムを某弱にしてしまう。
ファイル
データの最小単位はbit, 0と1 8つの bitを一つにまとめたものをbyteと呼ぶ byte=2の八乗=256 ASCIIの文字コードの一部を表現できる
$ man ascii
ディレクトリ(unix, linux)⇆ フォルダ(windows) 複数のファイルやディレクトリを一くくりにする入れ物のこと 一つ上のディレクトリ 親ディレクトリ 一つ下のディレクトリ 子ディレクトリ、サブディレクトリ
linux のディレクトリ構成
FHS(filesystem hierarchy standard):linuxのディレクトリ階層標準化システム http://www.pathname.com/fhs/
マウント:HDDなどのブロックデバイス上にあるファイルシステムをシステムのディレクトリツリーの一部に配置す
パーティション あるHDDを複数の領域に分割してできた一つの領域のことを言う。
メリット ・システム領域とデータ領域を分けられる ・システム領域とデータ領域の他にlog領域を分けておくことで、万が一両方の残量が0になってもログ領域が残っていればなんとかシステムは起動できる
LVM
複数のパーティションをまとめて一つの論理ボリューム、パーティションとして見せることができる。残り領域が少なくなった際に拡張できる。
ホームディレクトリ
- ファイル名はアルファベット
- .から始まる設定ファイル以外はホーム直下に置かない
- ダウンロードしたソースアーカイブを配置する srcディレクトリがある
- リポジトリは個別にディレクトリを作る(git, svn, cvs)
- 一時ファイルディレクトリ(tmp)を用意する
- ダウンロード、ビデオ、ピクチャー、ミュージックなどは、download, video, picture, musicからの新ボックリンク
- 作業用ディレクトリ worksがありその下に案件ごとのサブディレクトリが存在する。
ディレクトリ構成
/ ルート
各ディレクトリを格納するトップディレクトリ。vmlinuzというlinuxカーネル本体、linuxカーネルソースパッケージを配置することが推奨。
total 85
drwxr-xr-x 2 root root 4096 Sep 14 2012 bin/
drwxr-xr-x 4 root root 1024 Sep 14 2012 boot/
drwxr-xr-x 14 root root 4160 Mar 13 09:13 dev/
drwxr-xr-x 79 root root 4096 Mar 13 09:13 etc/
drwxr-xr-x 3 root root 4096 Sep 14 2012 home/
lrwxrwxrwx 1 root root 33 Sep 14 2012 initrd.img -> /boot/initrd.img-3.2.0-23-generic
drwxr-xr-x 19 root root 4096 Sep 14 2012 lib/
drwxr-xr-x 2 root root 4096 Sep 14 2012 lib64/
drwx------ 2 root root 16384 Sep 14 2012 lost+found/
drwxr-xr-x 4 root root 4096 Sep 14 2012 media/
drwxr-xr-x 2 root root 4096 Apr 19 2012 mnt/
drwxr-xr-x 4 root root 4096 Sep 14 2012 opt/
dr-xr-xr-x 90 root root 0 Mar 13 09:13 proc/
drwx------ 2 root root 4096 Mar 13 23:33 root/
drwxr-xr-x 16 root root 680 Mar 18 07:11 run/
drwxr-xr-x 2 root root 4096 Sep 14 2012 sbin/
drwxr-xr-x 2 root root 4096 Mar 5 2012 selinux/
drwxr-xr-x 2 root root 4096 Sep 14 2012 srv/
drwxr-xr-x 13 root root 0 Mar 13 09:13 sys/
drwxrwxrwt 2 root root 4096 Mar 18 08:17 tmp/
drwxr-xr-x 10 root root 4096 Sep 14 2012 usr/
drwxr-xr-x 1 vagrant vagrant 136 Mar 13 09:13 vagrant/
drwxr-xr-x 11 root root 4096 Sep 14 2012 var/
lrwxrwxrwx 1 root root 29 Sep 14 2012 vmlinuz -> boot/vmlinuz-3.2.0-23-generic
/boot
linuxカーネル・init ram fsファイル・ブートローダGRUBの設定ファイルを含むディレクトリ。
total 23431
-rw-r--r-- 1 root root 791023 Apr 11 2012 abi-3.2.0-23-generic
-rw-r--r-- 1 root root 140279 Apr 11 2012 config-3.2.0-23-generic
drwxr-xr-x 3 root root 5120 Sep 14 2012 grub/
-rw-r--r-- 1 root root 14731890 Sep 14 2012 initrd.img-3.2.0-23-generic
drwxr-xr-x 2 root root 12288 Sep 14 2012 lost+found/
-rw-r--r-- 1 root root 176764 Nov 27 2011 memtest86+.bin
-rw-r--r-- 1 root root 178944 Nov 27 2011 memtest86+_multiboot.bin
-rw------- 1 root root 2884358 Apr 11 2012 System.map-3.2.0-23-generic
-rw------- 1 root root 4965840 Apr 11 2012 vmlinuz-3.2.0-23-generic
/etc
設定ファイル(OSの設定に必要となるファイルやプログラムの設定ファイル)を格納するディレクトリ
/bin
システム管理者とユーザーによって利用されるコマンドが配置される(lsとか)。他のパーティションをマウントしなくても実行できるコマンドを集めている。
/sbin
システム管理者が利用するコマンド(システムのブートの一部、データバックアップ・リカバリ、パーティション調整・ネットワーク設定などのシステムメンテナンス、ユーザーの追加・削除、プロセスの監視などに必要なツール)が配置。
/usr
システムを利用するユーザで共有するデータを保持するディレクトリ。 /usr/local そのpc用のソフトウェアを配置するためのトップディレクトリ。
/home
ユーザーのhomeディレクトリとして扱い、システム利用者が利用するシェルの設定ファイルやメール、データファイルなどを配置。
/var
変わりやすいデータ(スプール(一時的に配置するファイルやディレクトリ)やログ)を配置するディレクトリ /tmp 別の一時ファイル置き場 /{log,spool} システムのいくつかのログが書き込まれるディレクトリ 各アプリケーションが一時ファイルを溜め込むスプールディレクトリ /mail MTA(SMTPサーバー、Mail Transfer Agent)で利用するディレクトリ /run デーモンなどのプログラムを実行する際に割り振られるプロセスID(PID)をテキストファイルとして保存、ソケットファイルなど一時データを保存する際に利用される。 /lock デーモンなどのプログラムの多重起動を防ぐための一時ファイルの保存 /{opt,cache,lib/{misc,locate},local} デーモンやログ以外で一時ファイル以外に利用するディレクトリが割り当てられる。
/proc(procfs)
linuxのプロセスを操作したりシステム情報を処理するための手段を提供する擬似ファイルシステム。 プロセスとカーネル情報を提供する仮想ファイルシステム。
/sys(sysfs)
メモリ内ファイルシステムを通してユーザープロセスにカーネル情報を提供するための機能。 デバイス情報を提供する仮想ファイルシステム
/dev
/tmp
システムで作業ファイルなどの配置に利用するディレクトリ。
シェル
linuxカーネル⇄Linuxディストリビューション(OSを構成する他のソフトウェアや、アプリケーションソフト、インストーラー等を含んでいる)
カーネル(kernel)とは、オペレーティングシステム(OS)の基本機能の役割を担うソフトウエアのこと カーネルは、OSの中でも特に中核的なプログラム このカーネルが、ハードディスクやメモリーなど、コンピューターの資源管理を行なっている
- アプリケーションの起動
- プログラム実行順序の変更
- 変数の保持
- 実行コマンド履歴の出力
シェルスクリプト:あらかじめコマンドを記述したテキストファイル
linuxのシェル四種類 - bash - csh/tch - dash - zsh
確認コマンド
$ ls -l /bin/sh
一般ユーザー $
⇅ $ sudo su # su 一般ユーザー名
管理者ユーザー #
ジョブ制御機能
複数のプログラムの実行・停止を管理するジョブ制御機能
ユーザーが見える画面 フォアグラウンドジョブ 背後で実行する バックグランドジョブ 停止中 サスペンドジョブ
$ jobs ジョブの一覧を表示。+はカレントジョブ ーその次のjob
^ + z → サスペンドジョブに bg → 指定したjob番号のプロセスをバックグラウンドで実行 fg → そのプロセスをフォアグラウンドに持ってきて稼働状態にする
リダイレクト プログラムの出力をファイルに書き込むこと 0<, 1>, >> をフィルディスクリプタを指定して、プログラムの入出力先を変更する。プログラムの処理結果をファイルに記録、ファイルに記述されている内容をプログラムに渡すのに利用。0は標準入力、1は標準出力、2は標準エラー出力。
パイプ プログラムの出力を別のプログラムの入力に利用。
ビルドインコマンド
シェル自身が機能として持っているコマンド =シェルのビルドインコマンド(内部コマンド) 別に用意されたプログラムを外部コマンド
: 何もせずに終了コード0を返す
source もしくは .
現行シェル環境で他のシェルスクリプトを読み込んで実行する。
cd
指定したディレクトリに移動する 環境変数CDPATHを設定すると、cdのあとに移動するディレクトリ名を指定するだけで、そのCDPATHに含まれるディレクトリから移動先を検索する
$ export CDPATH=/var/lib
$ env | grep CDPATH
CDPATH=/var/lib
$ cd dpkg
/var/lib/dpkg
eval
パラメータの間接干渉をする(入れ子になった変数から値を取り出す)
exec
forkシステムコールを使わずに指定されたコマンドを自身で実行する。 通常シェルで外部コマンドを実行するとforkシステムコールを利用してシェルとは別にプロセスが生成され、コマンドを実行する。exec内部コマンドを利用するとforkシステムコールを使わないために別プロセスが生成されずシェル自身が指定されたコマンドに置き換わり実行される。execを使用しない場合、コマンドの実行後はシェルに実行が戻るが、execを使うと戻らない。
read
シェル宣言
$ コマンド
デフォだと下記の順で以下の環境変数PATHの中から探していく。
でも自分で作ったシェルスクリプトの場合パスを指定しないといけない。 例)./hello.sh
シェル変数
ユーザーが一時的に値を格納、参照し、起動しているシェル、シェルスクリプト内で利用できる変数 使用中のシェルで有効なシェル変数はsetコマンドで一覧表示できる。unsetを使うと削除できる。
環境変数
定義したシェルから起動したコマンドにも引き継がれる変数。 複数のコマンドで共有できる変数。 定義されている環境変数はenvコマンドで参照。
位置パラメータ
関数などで利用する引数参照に利用する変数 シェルスクリプトを実行する際に引数として値を渡したい場合がある。その値を取得するために使う。 $ cat -n count.sh 1 #!/bin/bash 2 echo $1 3 echo $2 4 echo $3 $ bash ./count.sh a b c d a b c
特殊パラメータ
引数すべてや引数の個数などを表す変数。特殊パラメータはスクリプト名や引数、プロセスIDなどを参照するための変数として利用できる。
if/while/for/case がある。
シェル関数
shift 位置パラメータを一つずつ移動 $ ./script.sh --version --help
"" $1 を特殊記号として扱う '' テキストをシェルに展開されないようにして特殊記号をそのまま表示、利用できる シングルの方が外(例、'a"bb"')
` もしくは $() : 囲まれるとコマンドとして実行される
ログインシェル
0番目の引数の先頭文字が- --loginが指定されている場合に起動するシェル。 GUIで起動しなかったら、ログイン後に起動するシェルがログインシェル。
/etc/profile ~/.bash_profile ~/.bash_login ~/.bash_profile
対話シェル
ログインシェルでない状態のシェル ホームディレクトリの.bashrcが読まれる
bashの設定を有効化していく
ユーザとグループ
システムユーザ デーモンを実行するために利用するユーザ
- ユーザ作成コマンドの設定ファイル/etc/adduser.confなどでシステムユーザIDの範囲が決まっている
- /etc/shadowを確認すると、システムユーザのパスワードは設定されていない。
一般ユーザ
管理者rootとシステムユーザが利用していないIDを適用されたシステムを利用するだけのユーザ パッケージのインストールなどを実施せず、システムにログインし、インストールされたコマンドを利用するユーザ
各ユーザはグループという所属を設定でき、最低一つはグループに入ることになっている。
unixアカウントを作成、変更する以外は、標準では同じ名前のグループが作成され、そこに所属する。
グループを利用するメリットは、システムリソースの利用制限を実施したり、権限の利用制限を設定できること。
/etc/password(unixアカウント情報が記録されている。)
unixユーザ名 パスワード ユーザID グループID コメント ホームディレクトリ シェル
/etc/shadow(暗号化したパスワードを格納する)
/etc/shadowは暗号化されたパスワードファイルを管理者権限でのみアクセスできるようにする仕組み。
パスワード欄
$id$salt$encrypted id: 利用するハッシュアルゴリズム salt: ユーザのパスワードと合わせて暗号化するためのフレーズ encrypted: IDで指定したハッシュアルゴリズムでハッシュ化したパスワード文字列 ! パスワードが設定されていない * アカウントロック !! パスワードの有効期限切れ
adduser/useradd ユーザの追加 deluser/userdel ユーザの削除 groupadd/groupdel グループの追加、削除 usermod ユーザアカウントの修正 groupmod グループアカウントの修正 passwd パスワード変更 change パスワード有効期限を変更 chsh シェルの変更 chfn 氏名情報変更
/etc/group
システムでのグループ定義を行うファイル
$ cat /etc/group
root:x:0:
グループ名:パスワード:グループID:ユーザ名…
/etc/gshadow グループ名:暗号化パスワード:管理者:メンバー
SSH
SSHポートフォワード
sshプロコトルはリモートシェルやファイル転送だけでなく、そのセッションに別のアプリケーションをカプセル化できる。これによって平文で通信する平文で通信するアプリケーションでも暗号化通信にできる。
sshサーバーを起動するには、sshdというデーモンプロセスを稼働させる。 sshdを起動するとデフォルトで、22/tcpを利用して、sshクライアントからの接続を待ち、クライアントから接続が来ると利用するSSHプロトコルのバージョンの交換から通信を始める。 Diffie-Hellman鍵交換によってセッション鍵を得る、そしてサーバーのホスト鍵とクライアントのユーザ鍵をお互いに交換する
クライアントにsshサーバーのホスト鍵が登録されている場合 問題なし
クライアントにsshサーバーのホスト鍵が登録されていない場合 sshサーバホスト鍵のフィンガープリントを表示して登録することの確認を表示
- クライアントに登録されているsshサーバーのホスト鍵と異なる場合 man-in-the-middle攻撃の可能性があることを警告表示する
セッション鍵を得て暗号化通信を開始した後はサーバとクライアントの認証に入る、パスワード認証・公開鍵認証を利用してアカウントを利用するか判断。
$ ssh [user@]hostname
認証が通ると、シェルの起動、コマンドの実行、xクライアントの転送などを実行してセッションを開始する
http://qiita.com/tag1216/items/5d06bad7468f731f590e
$ ls -l /etc/ssh/
total 160
-rw-r--r-- 1 root root 125749 Apr 2 2012 moduli
-rw-r--r-- 1 root root 1669 Apr 2 2012 ssh_config
-rw-r--r-- 1 root root 2499 Sep 14 2012 sshd_config
-rw------- 1 root root 672 Sep 14 2012 ssh_host_dsa_key
-rw-r--r-- 1 root root 604 Sep 14 2012 ssh_host_dsa_key.pub
-rw------- 1 root root 227 Sep 14 2012 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 176 Sep 14 2012 ssh_host_ecdsa_key.pub
-rw------- 1 root root 1675 Sep 14 2012 ssh_host_rsa_key
-rw-r--r-- 1 root root 396 Sep 14 2012 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 302 Jan 10 2011 ssh_import_id
moduli DH鍵交換に利用するデータ sshd_config sshデーモンが参照する設定ファイル ssh_host_key{,.pub} sshサーバーで保持するSSHホスト鍵 ssh_config SSHクライアントが参照するデフォルト設定ファイル
authorized_keysファイルは一行に1つの公開鍵を記述する
X11Forwarding
sshは必ずしもリモートホストにログインし、コマンドで操作するものではない。 sshログイン先のXクライアントアプリケーションをログイン元のXサーバに転送することができる。
http://qiita.com/kou_bacchus/items/47c40beb147a3040fe5e
SSHクライアント
管理者だけではなく開発者も開発サーバやデプロイ先サーバへのログインなどで多用するツールの一つ
以下の順序で読み込まれる ssh のコマンドラインオプション ユーザごとのオプション(~/.ssh/config)←ここに長いコマンドをまとめることができる システムのオプション(/etc/ssh/ssh_config) sshコマンドのデフォルトパラメータ
公開鍵暗号は秘密鍵と公開鍵を作成し、公開鍵を配布して秘密鍵はユーザが厳重に保持して運用する暗号。 公開鍵と秘密鍵は同時に作られ、秘密鍵から公開鍵の生成、公開鍵から秘密鍵の生成はできない。鍵はアルゴリズムを利用して生成。
公開鍵
一般に公開 持ち主以外の送信者が暗号化に利用 持ち主以外の受信者が署名検証に利用 sshでログインする先のホストに登録して利用
秘密鍵
持ち主が保持 公開鍵で暗号化されたメッセージを秘密鍵で復号化するのに利用 作成したメッセージへの署名に利用 sshコマンド実行時に秘密鍵を指定することで公開鍵を登録したホストへのログインに利用
保持しているサーバの公開鍵と、サーバから送られてきた公開鍵が異なる場合 →SSHサーバの再インストールやリプレースなどでホスト鍵が変更された。(SSHサーバの再インストールやリプレースなどでホスト鍵が変更された。) →SSHサーバとSSHクライアントの間に第三者が入っている。(man in the middle攻撃)
SSHサーバは自身のホスト用公開鍵と秘密鍵を保持している。SSHクライアントはサーバの公開鍵を登録しておくことで、そのサーバが本当に接続対象のサーバかを判断できる。
SSHサーバ管理者に現在利用されている正しい公開鍵情報を提供してもらう SSHでログインするユーザが接続した際に表示される公開鍵のフィンガープリントを確認する
公開鍵認証
ユーザーはログインしたいホストに自身の公開鍵を保存する $ ssh-copy-id -i ~/.ssh/id_rsa sample@192.168.1.24
ssh-copy-idはリモートホストにログインできる状態でないと登録できない。 →リモートホストがパスワード認証を許可しているか既に公開鍵を一つ以上登録しており、SSHログインできることが条件。
リモートホストの管理者に公開鍵を渡して登録してもらう必要がある
sshサーバにおける公開鍵の設定
sshログインを受け付ける側の設定はSSHデーモンの設定変更で公開鍵認証を有効にして(/sshd_config)sshdを再起動する。
sshクライアントでのデバッグ→詳細を見ることでログインできない場合にデバッグできる $ ssh -vvv -l sample 111.111.1.11
cronは決められた時間にコマンドを実行するデーモン。
$ service cron status
$ ps ax | grep cron
- /etc/crontab cronデーモンへの指示書
- /etc/cron.d
- /var/spool/cron/crontab ユーザー用cronファイル
$ cat /etc/crontab (Ubuntu) # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
分 時 日 月 曜日 実行ユーザ名 コマンドとそのオプション
$ crontab -l ユーザのcron設定ファイルのリストを表示 $ crontab -e ユーザのcron設定ファイルを作成
ここで生成されたファイルは/var/spool/cron/crontabs以下に配置される。
crontabには負荷が高くなる処理の実行を記述した場合のために、ユーザ単位でのアクセス制御が設定できる。
デフォルトでは存在しない/etc/cron.allow /etc/cron.denyというファイルを作成し、一行ごとに1アカウントだけ記述すればリストされたユーザのcrontabの実行を制御できる。
これらの設定によってcrontabの実行を拒否された場合は/var/log/cronにログとして記録される。
cron設定後の動作確認 実行するコマンドにechoやloggerを与え、そのコマンドが指定時刻に実行されるかをデバッグできる。
$ sudo cat /etc/cron.d/du 0 1 * * * root logger "du -hs $HOME"
以下のログを確認することで、変数が正常に展開されているか、指定した時刻に実行されているかなどが確認できる。 echoを使うと実行後にメールが飛んでくる
出力例 $ tail /var/log/messages Sep 25 01:00:01 ogasaka logger: du -hs /root
cronはすべての出力をMAILTO環境変数に指定した宛先、MAILTOがなければrootを宛先として実行後にメールを送信する。 適切に送信先を指定するのも重要だが、不必要な出力をしないことでメール送信しない様にし、エラー出力だけメールするという調整が重要
標準出力も標準エラー出力もメールしない
「du -hs \$HOME > /dev/null 2>&1」
標準出力をdev/nullにリダイレクトするので標準エラー出力だけメールを送信する
「du -hs \$HOME 1> /dev/null」
ログローテーション
カーネルや各デーモンからのメッセージを記録し続けると、ログファイルのサイズは拡大し、ファイルシステムのファイルサイズ制限に達してしまう。それを予防する仕組みがlogrotate。 logrotateはcron経由で起動し、指定されたログファイルを移動、圧縮して新しいログファイルを作成。必要があればデーモンの再起動。
cronが/etc/cron.daily/logrotateを読み込む logrotateが/etc/logrotate.confを設定ファイルとして起動し、logrotate.confに指定されたログファイルを処理する /etc/logrotate.d/以下のファイルを読み込み指定されたログファイルを処理する
Apache HTTP Server
RHEL/CentOS httpd Debian/Ubuntu apache2
http://www.vogella.com/tutorials/ApacheHTTP/article.html
$ sudo apt-get install apache2
$ /etc/init.d/apache2 -l * Usage: /etc/init.d/apache2 {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}
←apache2の後に続けて書くことで、実行できるコマンドの一覧
ディレクティブとは、ディレクティブと値をそれぞれ設定して、記述していくもので、範囲を指定できるものもある。
$ cat /etc/apache2.conf
コメントは省略
55 LockFile ${APACHE_LOCK_DIR}/accept.lock
62 PidFile ${APACHE_PID_FILE}
プロセスIDを記録するファイル
67 Timeout 300
getリクエストの受け取りを待ち、post/putメソッド利用で次のtcpパケットが届くのを待ち、サーバがクライアントにレスポンスを返すのに、TCPでクライアントからのackが返ってくるまでの待ち時間に関する制限を秒数で指定する。
73 KeepAlive On ←環境によってチューニング
HTTPの持続的な接続を有効にする。例えばブラウザからあるページを要求された場合、そのページにリンクされていた画像についてもWebサーバにリクエストを送信する。HTML以外にも複数画像ファイルに対してGETメソッドを送信するのに、TCPコネクションを貼り直すが、 tcpコネクションを接続したままでHTTPメソッドを送信できれば、送受信パケットを抑えることができる。このコネクションをKeepAliveTimeoutディレクティブで指定された秒数だけ待つ。帯域の狭い環境ではKeepAliveをonにするのは効率的だが、広帯域の場合はKeepAliveをoffにしないとすでに使っていないプロセスが無駄に残ってシステム負荷になる可能性がある。
80 MaxKeepAliveRequests 100 86 KeepAliveTimeout 5
MPMとはクライアントからのリクエストの処理方法をモジュールに分けたもの。event mpm_netware prefork worker
利用するMPMの選択、チューニングはその上で利用するサーバサイド言語やwebフレームワーク、アクセス数、稼働するサーバのメモリ容量によって調整。
98
preforkはクライアントからの1リクエストに1プロセスで対応するためにforkシステムコールを使って子プロセスを生成。forkでの子プロセス生成はメモリを独立して利用。アクセス数に応じて子プロセスを増やしていく。
116
133
eventMPMはworkerMPMをベースにしているが、処理している接続だけをマルチスレッドで行うことで効率的に処理するマルチプロセッシングモジュール。
144 User ${APACHE_RUN_USER} 145 Group ${APACHE_RUN_GROUP}
httpdを実行するユーザを指定する。
153 AccessFileName .htaccess
159
デフォルトでは.htaccessが分散設定ファイル名に設定されている。
181 DefaultType None
192 HostnameLookups Off
ipアドレスでログに書き込むという指定
200 ErrorLog ${APACHE_LOG_DIR}/error.log
エラーログを記録するファイル名
207 LogLevel warn
記録するログの粒度を占める記述。デフォはworn
「 210 Include mods-enabled/.load 211 Include mods-enabled/.conf 214 Include httpd.conf 217 Include ports.conf 」他のファイルのの読み込み
224 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined 225 LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined 226 LogFormat "%h %l %u %t \"%r\" %>s %O" common 227 LogFormat "%{Referer}i -> %U" referer 228 LogFormat "%{User-agent}i" agent
ログへの記録フォーマットを定義
234 Include conf.d/ 237 Include sites-enabled/