今回はコマンドラインの操作。まずは簡単なシェルの説明から。
シェルとはLinux上でユーザーからのコマンドを受け付け、カーネルに受け渡し、その実行結果をユーザーに返してくれるプログラムでいくつかの種類があります。
主な物として
- Bourneシェル(sh)
- Cシェル(csh)
- Kornシェル(ksh)
Unixの標準的なシェルでこれを改良した物がbash(Bourne Again Shell)としてLinuxディストリビューションの標準シェルとして利用されている
C言語に似たスクリプトが利用できるシェル。cshを拡張したtcshもあり、LinuxでCシェルとして扱われている
Bourneシェルを拡張したので、kshにbashやtcshの機能を取り入れたzshというシェルもある
があげられる。
利用可能なシェルは/etc/shellsファイルで確認できるようなので見てみると、
[root@paz-para ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
こんな感じです。
ログインしたときに起動されるシェルのことをログインシェルといい、これは/etc/passwdファイルに記述されている。
[root@paz-para ~]# less /etc/passwd
paz:x:500:500::/home/paz:/bin/bash
ユーザー「paz」のログインシェルは「bash」のようでした。
■シェル変数と環境変数
シェルがLinuxカーネルとユーザーの橋渡しをするには、シェルはユーザーに関する情報を保持していなければいけない。この情報は変数として保存されるのだが、その有効範囲(スコープ)によって、シェル変数と環境変数にわけられる。
それぞれ、
- シェル変数の有効範囲は、その変数を定義したシェルのみとなり、シェルを終了するとその内容は失われる。
- 環境変数はその変数を定義したシェル上、及びそのシェルで実行されるプログラムからも参照することができる。環境変数はシェル変数を「export」コマンドでエクスポートすることで設定する。
こんな感じの説明ですがよくわからないので試してみると、
[root@paz-para ~]# HOGE=hoge 【1】
[root@paz-para ~]# FUGA=fuga 【2】
[root@paz-para ~]# export HOGE 【3】
[root@paz-para ~]# bash 【4】
[root@paz-para ~]# echo $HOGE 【5】
hoge
[root@paz-para ~]# echo $FUGA 【6】
[root@paz-para ~]# HOGE=hogehoge 【7】
[root@paz-para ~]# echo $HOGE 【8】
hogehoge
[root@paz-para ~]# exit 【9】
exit
[root@paz-para ~]# echo $HOGE 【10】
hoge
こーなります。
上から順番に、
- シェル変数「HOGE」にhogeを保存
- シェル変数「FUGA」にfugaを保存
- シェル変数「HOGE」を「export」コマンドを使用して環境変数に設定
- 「bash」コマンドで新しいシェルを起動
- 変数「HOGE」を標準出力
- 変数「FUGA」を標準出力
- 変数「HOGE」にhogehogeを代入
- 変数「HOGE」を標準出力
- 新しく起動したシェルを終了
- 環境変数「HOGE」を標準出力
こんな手順を行っています。ポイントは
- 最初のシェルで環境変数に設定した「HOGE」は新しいシェルでも有効
- 新しいシェルで「HOGE」に新しい値を代入できる
- 新しいシェルで「HOGE」の新しい値を環境変数として設定していないのでシェルを終了すると最初のシェルで指定した値が出力される
ってところかな。
コマンドが実行できないときによく耳にする「パスが通っていない」ってのも、環境変数$PATHの指定先にコマンドプログラムがないってことなんですね。
ちなみに環境変数$PATHも
[root@paz-para ~]# cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
こんな感じでユーザーのホームディレクトリにある「.bash_profile」で定義されていました。
シェルに関してはここまで。
変数まわりは結構あやふやだったので勉強になりました。
次回はコマンドの使い方。オプションについてしっかり勉強します。