2010年8月9日月曜日

シェル変数

httpdスクリプトを眺めていて以下の文が分からなかった

HTTPD_LANG=${HTTPD_LANG-"C"}

HTTPD_LANGとゆう変数に値をセットしているってことは何となく分かるけどハイフン('-')と"C"は何を意味するん??
でもって、調べたところ
${変数名}は変数名の区切りを分かりやすくするために{}でくくっているものと理解!

例えば、変数名がVALUEという名前だった場合、${VALUE}とする。
なぜそのようにするかといえば、

$ echo $VALUEA

とした場合、VALUEAまでが変数名なのか、VALUEに続いてアルファベットAを表示させたいのかが分からなくなってしまうからである。
(ちなみに上の例ではVALUEAが変数名となる)

そして肝心の{}でくくられたハイフンの意味はHTTPD_LANGが定義されていなければ??(それともHTTPD_LANGに何もセットされていなければ??)、"C"をセットするとゆう意味らしい。

後でもうちょい調べよう

追跡取材でハイフンの意味が分かりました
${変数名-値}


${変数名:-値}

のコロン(:)を省略した形で変数が存在した場合、変数名の値を返し
存在しない場合、値を(ハイフンの右側の値)返すという意味らしく
「変数展開」と呼ぶものみたいだ
なので、上記の例
HTTPD_LANG=${HTTPD_LANG-"C"}

は、HTTPD_LANGが定義されている場合、
HTTPD_LANGの値をそのままセットし
定義されていない場合
"C"をHTTPD_LANGにセットするという意味になる

2010年8月5日木曜日

【 sudo 】 root権限でコマンドを実行する

ここまで書いておいてsudoを使っていないオイラって・・・[emoji:i-229]

sudoコマンドを使えば、わざわざスーパーユーザーに変身しなくてもよいとのことで早速試してみた[emoji:i-190]

対象は一般ユーザーで参照できない/var/log/secureファイル
パスワードを聞かれたので入力してみたもののみごと拒否[emoji:i-242]
(ちなみにここで入力するパスワードは、rootのパスワードでも、SSHキーのパスワードでもなく一般ユーザーのパスワードねっ)

$ sudo cat /var/log/secure
パスワード:
"ユーザー名" is not in the sudoers file. This incident will be reported.
audit_log_user_command(): 接続を拒否されました


どうやらsudoコマンドを使用するためには設定ファイル(/etc/sudoers)を修正しなければならないらしいが、修正はviなどではなくvisudoとゆう専用のコマンドで行わなければならないようだ

# %"sudoを使えるようにする一般ユーザー名" ALL=(ALL) ALL


上の1行を追記して保存(編集コマンドはviと同じ)
で、再度ログイン後

$ sudo cat /var/log/secure
パスワード:


を実行すればログがみれるようになりますた

2010年7月29日木曜日

ドットコマンド「.」

ドットコマンド「.」を使うと、指定したスクリプトファイルに記述されている変数や関数がカレントシェルで使えるようになるってことらしい。
うーん、いまいち意味が・・・

てことで早速実践
まずは下のようなスクリプトを作成する

dottest.sh:
#!/bin/sh
DOTTEST="Dot Test だよーん"


して、まずはスクリプトを実行しない状態でDOTTESTを確認してみる
$ echo $DOTTEST


何も表示されない

してして次に~ドットコマンドを使ってスクリプトを読み込んでみる
$ . ./dottest.sh


先ほどと同じようにDOTTESTを確認してみると・・・
$ echo $DOTTEST
Dot Test だよーん


あらまっ、表示されました
関数も同じようにスクリプトに記述しておけばいいらしい

dottest.sh:
#!/bin/sh
DOTTEST="Dot Test だよーん"

function dottest_disp()
{
    echo $DOTTEST
}

と、さっきのファイルを修正して同じようにスクリプトを実行しない状態だと
$ dottest_disp
-bash: dottest_disp: command not found


そんなのないよだけど
$ . ./dottest.sh


を実行した後だと

$ dottest_disp
Dot Test だよーん


のような結果になりました

2010年4月7日水曜日

pacoなるもの

Apacheをソースからコンパイルしてインスコしたんだけどアンインスコができない。
(削除すべきファイルがわからない)

なのでちょちょいとググってみたら『paco』なるものがあるらしいので早速インスコしてみた。

■ まずはコンパイル準備のお約束
# ./configure

してみたものの

checking for GTKMM... configure: error: Package requirements (gtkmm-2.4 >= 2.12) were not met:

No package 'gtkmm-2.4' found

パッケージが足りないと怒られた。
再度ググってみる。

『gtkmm-2.4』はGUIで必要なものらしく以下のようなオプションを指定すればよいらしい。

# ./configure --disable-gpaco


■ そしてコンパイル&インストール
# make
# make install


■ して『paco』自信も管理下に置く
# make logme


■ 『paco』の管理下でインスコ(インスコするソースがあるディレクトリにて)
# paco -D make install

でよいらしい

■ 『paco』でインスコしたパッケージの確認
# paco -a


■ 『paco』でインスコしたパッケージに含まれるファイルの確認
# paco -f "パッケージ名"


■ 『paco』でインスコしたパッケージをアンインスコ
# paco -r "パッケージ名"


2010年4月3日土曜日

Apacheのコンパイル&インスコ (作成中)

■ Apacheをコンパイルしてインスコする(タイトルのまんまですが)

1.) まずは下準備

RPMパッケージでインスコしたApacheがどんな感じなのかを確認してみる。

# httpd -V
Server version: Apache/2.2.3
Server built: Nov 12 2009 18:43:41
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

よーわからんがんな感じ
ついでにどんなモジュールが有効になっているかも確認する。

# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

非常にお粗末さまで・・・

■ makefileの作成

# ./configure --enable-layout=RedHat --enable-module=so


◇ インストール時のレイアウト設定(RedHatと同じ)は、
--enable-layout=RedHat
でよい。


オプション意味
--prefix=PREFIXインストールするディレクトリを指定する (デフォで/usr/local/apache2)
---
---
---
---
---
---

2010年3月29日月曜日

MySQLサーバに接続

インストールネタも書いてないのにMySQLに接続するってのもねぇー

# mysql -u root -p

ここでパスワードを入力する。

いろんなもののバージョン確認

CentOS:
# cat /etc/redhat-release

CentOS: パッケージでの確認
# rpm -qa | grep centos-release
centos-release-5-4.el5.centos.1
centos-release-notes-5.4-4

CentOS: カーネルの確認
# uname --kernel-release
2.6.9-023stab046.2-smp

Apache:
# httpd -V <-- data-blogger-escaped--v="" data-blogger-escaped-br="">

PHP:
# php -v

MySQL:
# mysql --version