2010年10月05日

tar.gz形式を解凍するUnixコマンド

OS:Mac OS X Leopard(Unix)

プログラムをソースからダウンロードすると、取得したファイル(tar.gzが多い気がする)を解凍しなきゃいけないんだけど、そのコマンドが結構忘れるので、書きます。

% tar zxvf 解凍するファイル名

です。

2010年10月03日

Mac OS X(Unix) でApacheの起動・停止・再起動

OS:Mac OS X Leopard
サーバ:Apache

メニューの「システム環境設定」から起動したりするのが面倒な場合、コマンドでApacheを起動・停止・再起動できます。

1. Apacheの起動


>sudo apachectl start


2. Apacheの停止


>sudo apachectl stop


3. Apacheの再起動


>sudo apachectl restart


2010年09月28日

UNIX(Linux)コマンドとリダイレクト [その1]

OS:UNIX(Linux)

UNIXコマンドを使っていると、> や | などでコマンドの出力先を指定することが結構あります。これが、結構忘れるので、記事にしてみます。

1. コマンドの標準出力をファイルに出力


コマンドが成功すると、その結果は標準出力として出力されます。例えば、
>ls
というコマンドを実行すると、
sample1.txt sample2.txt
のようにコンソールに結果が表示されます。
ここで、標準出力先をコンソールではなくファイルにしたい場合は、

>コマンド > ファイル名

のようにします。lsコマンドだと
>ls > stdoutput.txt
のようになります。stdoutput.txtに
sample1.txt sample2.txt
と書き込まれます。

2. コマンドの標準エラー出力をファイルに出力


コマンドが失敗すると、その旨を標準エラー出力に出力します。例えば、存在しない
>abcd
というコマンドを実行しようとするとコンソールには
-bash: abcd: command not found
と表示されます。普通は、標準エラー出力もコンソールに表示されます。
このような標準エラー出力をファイルに出力させたい場合は、

>コマンド >& ファイル名

のように>&の後にファイル名を指定します。例えば、
> abcd >& stderror.txt
のようにします。すると、コンソールには何も表示されずに、stderror.txtに
-bash: abcd: command not found
と書き込まれます。

ちなみに、標準出力に対して、>&で出力先ファイルを指定すると、標準出力の内容はファイルに書き込まれます。

2010年09月27日

PHPのexec関数でコマンドが失敗したときのエラーを取得

言語:PHP
OS:(主に)UNIX系

1. exec関数とその引数


PHPには、exec関数という外部コマンドを実行できる便利な関数があります。

exec(command, [output, [return]])

commnad
  外部コマンドの文字列。
output
  コマンドの出力が配列として格納される。
return
  コマンドの実行結果のステータスが格納される。

2. コマンドが失敗した場合の出力


exec関数は指定したコマンドの出力が標準出力だと、引数outputに内容が格納されます。ですが、コマンドが失敗して標準エラーで出力されると、引数outputには格納されません。
引数outputに標準エラーの内容を格納されたい場合は、指定するコマンドに2>&1を追加します。こうすることで、標準エラーが標準出力になります。

3. 使用例


例1
  普通にコマンドの出力を受け取る場合
<?php

    $buf = '';

    exec('ls -l', $buf);

    print_r($buf);

?>

以下のように、lsコマンドの結果が配列として格納されます。
Array
(
    [0] => total 32
    [1] => -rw-r--r-- 1 hogehoge admin 123 9 25 11:09 hoge1.php
    [2] => -rw-r--r--@ 1 hogehoge staff 66 9 27 23:13 hoge2.php
    [3] => -rw-r--r--@ 1 hogehoge staff 413 9 25 11:28 hoge3.html
    [4] => -rw-r--r-- 1 hogehoge admin 34 9 25 11:10 hoge4.php
)


例2
  間違ったコマンドを渡した場合(2>&1無し)
<?php

    $buf = '';

    exec('ll -l', $buf);

    print_r($buf);

?>

結果は以下のようになります。配列bufにはなにも格納されず、エラーがコンソールに表示されます(赤字がエラー部分)。
sh: ll: command not found
Array
(
)


例3
  間違ったコマンドを渡した場合(2>&1有り)
<?php

    $buf = '';

    exec('ll -l 2>&1', $buf);

    print_r($buf);

?>

結果は以下のようになります。エラーが変数bufに格納されているのが判ります。
Array
(
    [0] => sh: ll: command not found
)