■ Linuxの基礎
偉そうに書いておりますが、正直な所は私はLinuxについての十分な知識がありません。(笑)
開き直っているつもりは無く、私の場合は判らない事があるとその度に調べて理解するようにしています。
年のせいか、最近は覚えてもすぐに忘れますが。(笑)
サーバーを構築した場合は、解説に従って組み込みを行って、問題なく動いてもそれでお終いと言う訳には行きません。
自分のサーバーを常に管理する必要がありますし、管理をするにはそれ相応の知識も必要になります。
完璧とはいかないまでも、最低限のLinuxの知識を持つ必要があります。
ここでは、良く使用するコマンドのみを記載いたします。
詳しい解説は他のサイトでご確認ください。
パイプを利用するには,「|」という記号を用いる。
例えば、ls -l | more と記入すると,左のコマンドの結果を右のコマンドに入力として引き渡すことができ、この例ではファイル一覧をmoreで閲覧できる。
できる限りディレクトリ構造を保持したままコピーする場合には、cp -a target_dir copy_dir のように行います。
この場合、元の圧縮ファイルは削除され,展開したファイルだけが残る。
もし、圧縮ファイルも残したい場合は,gunzip -c gzip_file.gz > gzip_file または gzip -dc gzip_file.gz > gzip_file とする。
tar.gzファイルの展開は,tar xzvf package.tar.gz とする。
この場合,展開後も元のパッケージ・ファイルは残る。
逆にパッケージを作成したい場合は,tar czvf package.tar.gz package-dir とする。
MACアドレスを調べるには、/sbin/arp -a とする。
ホスト名を設定するには、では/etc/sysconfig/network ファイルに設定する。
設定例
NETWORKING=yes ←ネットワークを利用する場合
HOSTNAME=meckk.com ←ドメイン名
GATEWAY=192.168.1.1
固定IPアドレスを設定するには、,/etc/sysconfig/network-scripts/ifcfg-eth0 ファイルに設定する。
設定例
DEVICE=eth0 ← ネットワーク・インタフェース名
BOOTPROTO=static ← 固定IPアドレスの場合の指定
BROADCAST=192.168.1.255 ← ブロードキャスト・アドレス
IPADDR=192.168.1.152 ← IPアドレス
NETMASK=255.255.255.0 ← ネット・マスク
NETWORK=192.168.1.0 ← ネットワーク・アドレス
ONBOOT=yes ← マシン起動時にネットワークを有効にする場合はyes
使用例
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 15 0 2584 156 select Ss ? 0:01 init [3]
1 0 2 1 34 19 0 0 ksofti SN ? 0:00 [ksoftirqd/0]
1 0 3 1 10 -5 0 0 worker S< ? 0:00 [events/0]
又、現在のシステムの状況を調べるには、top コマンドを使用する。
使用例
top - 17:20:29 up 4 days, 9:32, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 72 total, 1 running, 71 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 127160k total, 125176k used, 1984k free, 16852k buffers
Swap: 265064k total, 202440k used, 62624k free, 81836k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10746 root 15 0 2684 1212 988 R 1.0 1.0 0:00.33 top
1 root 15 0 2584 156 128 S 0.0 0.1 0:01.18 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
サーバーの管理者は、bash を使って自由にプログラムを組める事が理想ですが、そこまで出来なくても他人の作成したプログラムの意味は理解できるまでの知識は必要でしょう。
bash を理解できているか、いないかでは初心者と中級者ぐらいのレベル差があると思っています。
bashのオプション
普通,コマンドはshから実行しますが、そのsh自身もプログラムです。
.shの一つであるbashにはいくつかのオプションがあります。
それらのオプションはman等に書いてありますので、ここでは,スクリプトのデバッグに役立ちそうなものを紹介します。
-n
構文チェックだけを行い,コマンドは実行しません。
-v
実行前にコマンドを表示します。
-x
コマンドラインで処理した後にコマンドを表示します。
-vは変数などを展開せずに表示するのに対し,-xは展開してから表示します。
これらのオプションをスクリプトで使用するには,以下のスクリプトの先頭の行を以下のようにします。
#!/bin/bash option
例として、sysbackup.sh と言う名前のファイルを作成して以下のように書き込みます。
tar cf /dev/nst0 /bin
tar cf /dev/nst0 /boot
tar cf /dev/nst0 /etc
tar cf /dev/nst0 /home
実行は、sh sysbackup.sh で行えます。
プログラムらしく作成するには、先頭に次の行を追加します。
#!/bin/sh
これはお約束で、「#!」以後に書かれたプログラムでこのスクリプトを実行するという意味です。
次に、ファイルに実行属性を付ける必要があります。
chmodコマンドを使って、 chmod u+x sysbackup.sh とします。
これで、 ./sysbackup.sh で実行できるようになります。
a=hoge
export b=fuga
echo $a $b
bash
echo $a $b
一回目のechoではhoge fugaと出力されますが,二回目のechoではexportされた変数bの値であるfugaしか出力されません。
開き直っているつもりは無く、私の場合は判らない事があるとその度に調べて理解するようにしています。
年のせいか、最近は覚えてもすぐに忘れますが。(笑)
サーバーを構築した場合は、解説に従って組み込みを行って、問題なく動いてもそれでお終いと言う訳には行きません。
自分のサーバーを常に管理する必要がありますし、管理をするにはそれ相応の知識も必要になります。
完璧とはいかないまでも、最低限のLinuxの知識を持つ必要があります。
ここでは、良く使用するコマンドのみを記載いたします。
詳しい解説は他のサイトでご確認ください。
■ コマンド一覧
alias コマンドの別名 (エイリアス) を設定する。 削除は、unalias エイリアス名 cat [ -benstuvAET ] [ filename ] テキストファイルの内容を閲覧やファイルの連結に使用します。 応用として、コンソールからの入力をファイル化するには、cat > sample.txt 等とします。 ファイルを連結するには、cat foo.txt bar.txt > hoge.txt のようにします。 cd [ ディレクトリ名 ] 現在のディレクトリから他のディレクトリに移動するときに使用します。何も指定しないとホーム・ディレクトリに移動します。 ホーム・ディレクトリとは、環境変数 HOME で指定されたディレクトリを言います。 chage [ options ] ユーザ名 パスワードの有効期限の参照、変更を行います。 chgrp [ -cfvR ] [ group ] file ファイルやディレクトリのグループを変更します。 chmod [ -cfvR ] ディレクトリ・ファイル名(複数指定可)ファイルのアクセス権(パーミッション)の設定の変更に使用します。 +r/-r リード許可属性を付加/削除 +w/-w ライト許可属性を付加/削除 +x/-x 実行許可属性を付加/削除 a 全てのユーザ u ファイル/ディレクトリの所有者 g ファイル/ディレクトリの所属するグループ全員 o それ以外のユーザー 使用例 chmod a+rx 全ての対象にリードと実行許可を付加します。(chmod ugo+rx でも同じ) chown ユーザ名 ファイル名 ファイルの所有者の変更に使用します。 cp [ options ] コピー元ファイル名 コピー先ディレクトリ・ファイル名 指定されたファイルやディレクトリをコピーします。 date [ options ] [ 日時 ] 現在の日時の表示や設定が行えます。 df [ options ] [ ファイルシステム ] 各ファイルシステムのサイズや使用状況の表示に使用します。 du [ options ] [ ディレクトリ名 ] 指定したファイルやディレクトリの使用容量を表示し、省略するとカレント・ディレクトリの容量を表示します。 echo [ options ] [ 文字列 ・・・ ] 指定した文字列を標準出力へ出力します。 fdisk [ options ] [ デバイス ] パーティションテーブルを表示させたり、パーティションの作成や変更、削除等を行うことができる。 find 検索の開始パス オプション アクション ファイルがどこにあるか探したい場合に使用します。 find .-name "*.jpg" finger [ options ] [username] ユーザの情報を表示します。 fsck [ options ] デバイス名 ディスクをチェックし、修復します。 grep 指定のパターンにマッチする行を表示する。 gpasswd [ options ] グループ名 グループを管理します。オプションを付けずにグループを指定した場合はそのグループにパスワードを設定します。 groupadd [ -g gid ] group_name 新しいグループを作成します。 groupdel グループ名 既存のグループを削除します。 groupmod [ options ] グループ名 グループ情報を変更します。 less [ filename ] テキストファイルの内容をページ単位で表示します。 ln [ options ] リンク元 リンク先 ファイルのハードリンクまたはシンボリックリンクの作成に使用します。 ls [ options ] [ ディレクトリ・ファイル名 ] 作業しているディレクトリ内のファイルを一覧表示、または指定ファイルの属性情報を表示します。 オブション -l ファイル情報の詳細を表示します。 -a "."で始まるファイル(隠しファイル)も表示します。 -R サブディレクトリ以下を再帰的に表示します。 -L シンボリックリンクの実体を表示します。 -i i-node番号を表示します。 -1 1行に1エントリーで表示します。 mkdir [ options ] ディレクトリ名 ディレクトリの作成に使用します。 mkfs [ options ] [ パーティション ] パーティションをフォーマットします。 more [ options ] [filename] テキストファイルの内容をページ単位で表示します。 mount [ options ] デバイス名 マウントポイント ファイルシステムをマウントするときに使用します。 mv [ options ] 移動するファイル名 移動先ファイル名 ファイルを他のディレクトリに移動したり、ファイル名の変更に使用します。 nkf [ options ] [file] 入力ファイルの漢字コードを自動判定し、漢字コード(JIS、シフトJIS、EUC)に変換する。 passwd ユーザ名 ユーザのパスワードを変更します。 pwd [ --help, --version ] 作業しているディレクトリ(カレントディレクトリ)の絶対パス名を表示します。 reboot システムを再起動します。 rm [ options ] ファイル名 ファイルを削除するときに使用します。 -r サブディレクトリ以下の全てのファイルを消去します。 rmdir 空のディレクトリ名 空のディレクトリの削除に使用します。空でない場合、削除できません。 shutdown [ options ] システムのシャットダウン、再起動をします。 su [ username ] ユーザの切り替えを行います。ユーザ名を指定しない場合はスーパーユーザに切り替えます。 tail [ options ] [ filename ] 指定されたファイルの最後の数行を表示します。 tar [ options ] [ filename ] 本来はテープのバックアップ用のコマンドで、複数のファイルを1つのファイルにまとめます。 アーカイブファイルの作成 tar cf アーカイブ名 ファイルのリスト(cvfのようにvオプションを指定すると作成中の内容を表示する) アーカイブファイルの展開 tar xf アーカイブ名 ファイルのリスト(xvfのようにvオプションを指定すると展開中の内容を表示する) アーカイブファイルの内容を表示 tar tf アーカイブ名 ファイルのリスト 拡張子が.tar.bz2 の場合は、bzip2 で圧縮したファイル。 jオプションを使用して tar xjf archive.tar.bz2 のように使用します。 同様に .tar.Z はZ、.tar.gx は z を使用します。 touch ファイルパス タイムスタンプを変更/空のファイルを作成します。 touch test.txtとすると空のファイル(0バイトのファイル)が作成されます。 タイムスタンプを変更するにはtouch -t MMDDhhmm ファイル名とします。(MM:月、DD:日、hh:時、mm:分) オプション 内容 -a アクセス時刻を設定 -c -f アクセス権がなくても設定 -m 修正時刻を設定 -r -t アクセス時刻/修正時刻を設定 umount [ options ] [デバイス名 or マウントポイント] ファイルシステムをアンマウントするときに使用します。 uname [ options ] システム(OS)の情報を表示します。 オプション 内容 -a 全ての情報を表示する -m ハードウェアプラットホーム名を表示する -n ノード名を表示する -p CPU名を表示する -s OS(カーネル)名を表示する -r OS(カーネル)名のリリースバージョンを表示する -v バージョンを表示する useradd [ options ] ユーザ名 新規にユーザアカウントを作成します。 userdel [ options ] ユーザ名 既存のユーザアカウントを削除します。 usermod [ options ] ユーザ名 ユーザアカウント情報を変更します。 vmstat [ options ] CPUなどの使用状況をチェックします。 who [ -imquwHT ] ユーザーの使用端末/ログイン時刻を表示します。 オプション 内容 am i 自分自身の情報のみ表示 -m 現在のターミナルのみ表示 -T ターミナルの状態を表示 -u アイドル時間を表示 -H 見出しを付加して表示
■ パイプの使い方
パイプとはコマンドの実行結果を,次のコマンドの入力として扱えるようにするシェルの機能。パイプを利用するには,「|」という記号を用いる。
例えば、ls -l | more と記入すると,左のコマンドの結果を右のコマンドに入力として引き渡すことができ、この例ではファイル一覧をmoreで閲覧できる。
■ ディレクトリごとコピーする
ディレクトリごとコピーする場合には、cp -r from-dir to-dir のように行います。できる限りディレクトリ構造を保持したままコピーする場合には、cp -a target_dir copy_dir のように行います。
■ ファイルを圧縮・展開する(拡張子.gz,.tar.gz)
gunzip gzip_file.gz または gzip -d gzip_file.gz を使用する。この場合、元の圧縮ファイルは削除され,展開したファイルだけが残る。
もし、圧縮ファイルも残したい場合は,gunzip -c gzip_file.gz > gzip_file または gzip -dc gzip_file.gz > gzip_file とする。
tar.gzファイルの展開は,tar xzvf package.tar.gz とする。
この場合,展開後も元のパッケージ・ファイルは残る。
逆にパッケージを作成したい場合は,tar czvf package.tar.gz package-dir とする。
■ ネットワーク関連の設定
ネットワーク・カードの動作状態を確認するには、/sbin/ifconfig とする。MACアドレスを調べるには、/sbin/arp -a とする。
ホスト名を設定するには、では/etc/sysconfig/network ファイルに設定する。
設定例
NETWORKING=yes ←ネットワークを利用する場合
HOSTNAME=meckk.com ←ドメイン名
GATEWAY=192.168.1.1
固定IPアドレスを設定するには、,/etc/sysconfig/network-scripts/ifcfg-eth0 ファイルに設定する。
設定例
DEVICE=eth0 ← ネットワーク・インタフェース名
BOOTPROTO=static ← 固定IPアドレスの場合の指定
BROADCAST=192.168.1.255 ← ブロードキャスト・アドレス
IPADDR=192.168.1.152 ← IPアドレス
NETMASK=255.255.255.0 ← ネット・マスク
NETWORK=192.168.1.0 ← ネットワーク・アドレス
ONBOOT=yes ← マシン起動時にネットワークを有効にする場合はyes
■ 現在実行しているすべてのプログラムを表示する
ps alx と入力する。使用例
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 15 0 2584 156 select Ss ? 0:01 init [3]
1 0 2 1 34 19 0 0 ksofti SN ? 0:00 [ksoftirqd/0]
1 0 3 1 10 -5 0 0 worker S< ? 0:00 [events/0]
又、現在のシステムの状況を調べるには、top コマンドを使用する。
使用例
top - 17:20:29 up 4 days, 9:32, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 72 total, 1 running, 71 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 127160k total, 125176k used, 1984k free, 16852k buffers
Swap: 265064k total, 202440k used, 62624k free, 81836k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10746 root 15 0 2684 1212 988 R 1.0 1.0 0:00.33 top
1 root 15 0 2584 156 128 S 0.0 0.1 0:01.18 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
■ bashについて
Bash (Bourne-Again Shell)はUnixで使用するシェル (ユーザとOSを仲介するための基本ソフトウェア) の一つで、GNUプロジェクトのために書かれました。サーバーの管理者は、bash を使って自由にプログラムを組める事が理想ですが、そこまで出来なくても他人の作成したプログラムの意味は理解できるまでの知識は必要でしょう。
bash を理解できているか、いないかでは初心者と中級者ぐらいのレベル差があると思っています。
bashのオプション
普通,コマンドはshから実行しますが、そのsh自身もプログラムです。
.shの一つであるbashにはいくつかのオプションがあります。
それらのオプションはman等に書いてありますので、ここでは,スクリプトのデバッグに役立ちそうなものを紹介します。
-n
構文チェックだけを行い,コマンドは実行しません。
-v
実行前にコマンドを表示します。
-x
コマンドラインで処理した後にコマンドを表示します。
-vは変数などを展開せずに表示するのに対し,-xは展開してから表示します。
これらのオプションをスクリプトで使用するには,以下のスクリプトの先頭の行を以下のようにします。
#!/bin/bash option
予備知識 -r file fileが存在し、読込み可 -w file fileが存在し、書込み可 -x file fileが存在し、実行可 -f file fileが存在する -O file file の所有者である. -G file file のグループ ID が自分のものと一致する(複数のグループに属している場合はそのうちのどれかと一致する) file1 -nt file2 file1 が file2 よりも新しい file1 -ot file2 file1 が file2 よりも古い -d dir ディレクトリdirが存在する -s file fileが存在しサイズがゼロでない -z string 文字列stringの長さが0 -n string 文字列stringの長さが1以上 str1=str2 str1とstr2が等しい str1!=str2 str1とstr2が等しくない ・数値比較 = 等しい != 等しくない > より大きい >= 以上 < より小さい <= 以下 ・論理演算 ! 否定 && 論理積 || 論理和 整数を比較する演算子 -lt より小さい -le 以下 -eq 等しい -ge 以上 -gt より大きい -ne 等しくない [abc] a, b, c のいずれか [.,;] ピリオド,コンマ,セミコロンのいずれか [-_] ダッシュあるいはアンダースコア [a-c] a, b, c のいずれか [a-z] 小文字のアルファベットすべて [!0-9] 0 から 9 以外の文字 [0-9!] 0 から 9 までの数字とエクスクラメーション [a-zA-Z] 小文字と大文字のアルファベットすべて [a-zA-Z0-9_-] すべてのアルファベット,数字,アンダースコア,ダッシュ データをフィルタリングする一般的な UNIX ユーティリティ ユーティリティ 目的 cat 入力を出力にコピーする grep 入力に対し文字列を検索する sort 入力に対し行を並べ替える cut 入力から列を取り出す sed 入力に対し編集操作を実行する tr 入力に対し文字を他の文字に置換する最も簡単なシェルスクリプトは、コマンドをそのまま並べることです。
例として、sysbackup.sh と言う名前のファイルを作成して以下のように書き込みます。
tar cf /dev/nst0 /bin
tar cf /dev/nst0 /boot
tar cf /dev/nst0 /etc
tar cf /dev/nst0 /home
実行は、sh sysbackup.sh で行えます。
プログラムらしく作成するには、先頭に次の行を追加します。
#!/bin/sh
これはお約束で、「#!」以後に書かれたプログラムでこのスクリプトを実行するという意味です。
次に、ファイルに実行属性を付ける必要があります。
chmodコマンドを使って、 chmod u+x sysbackup.sh とします。
これで、 ./sysbackup.sh で実行できるようになります。
for文別shプロセスへの環境の引き渡し(exportコマンド)
for 識別子 in リスト do $識別子を使う文 done if-then-else文 書式 if [ 条件式 ] then 処理1 else 処理2 fi 例 #!/bin/sh if [ -r $1 ] then echo "$1 file is much." else echo "No such file $1." fi while と until 文 if 文では条件が真か偽かで場合分けを行い, それぞれ用意された処理を実行するが,これを繰り返すようにしたのが while や until である。 while の構文は while 条件 do 処理 done で 条件 が真である限り 処理 を繰り返す. 逆に,条件が偽である限り繰り返すのが until で until 条件 do 処理 done という構文になっている。 これは 「コマンドが正しく実行されるまで処理を実行し続ける」 といったシチュエーションに有効である。 (条件 にそのコマンドを書けば異常終了したときに 処理 が実行され,再び条件に戻る) (例)コピースクリプト until cp $1 $2 do echo "waiting..." sleep 5 done これでは $1 を $2 にコピーすることを試み, 失敗した場合は 5 秒待って再度試みる。 現在のディレクトリ内のJPEGファイルを表示する #!/bin/bash for i in *.jpg do echo $i done 現在のディレクトリ内の拡張子JPGを小文字のjpgにする #!/bin/bash for i in *.JPG do mv $i ${i%.JPG}.jpg done ファイル内容の一行に
を付加する #!/bin/bash for i in `cat $1` do echo "$i
" done 本日の年月日の名前のディレクトリを作成する(西暦4桁) #!/bin/bash mkdir `date "+%Y%m%d"` 3日前の日付のディレクトリを削除する #!/bin/bash serialtime=`date "+%s"` serialtime=$(($serialtime-(86400*3))) now=`date -r $serialtime "+%Y%m%d"` rm -fr "/Users/apple/$now" 特定のページをダウンロードし指定ファイル名で保存する #!/bin/bash curl -o $1 http://www.openspc2.org/
a=hoge
export b=fuga
echo $a $b
bash
echo $a $b
一回目のechoではhoge fugaと出力されますが,二回目のechoではexportされた変数bの値であるfugaしか出力されません。
timeコマンド timeコマンドを使うと実行時間を簡単に取得できます。これにより全体でどのぐらい掛かるのかが測定できます。 #!/bin/sh echo "time command test." -bash-3.00$ time sh test.sh time command test. real 0m0.260s user 0m0.120s sys 0m0.020s -bash-3.00$ cat test.sh