「入門者のLinux」第十一章
第十一章「シェルをもっと知ろう」
<コマンドの実体>
シェル上で走るコマンドは多くの場合それぞれが独立したプログラム(ソフトウェア)。
1つのコマンドに対してディレクトリツリーのどこかにプログラムを格納した実行可能ファイルが1つ存在する。
コマンドの実体を調べるには、
[whici ls]...「ls」コマンドの実体はどこにあるのか
⇒[/bin/ls]
「/bin」というディレクトリの中に「ls」ファイルがあるとわかる。
「/bin/ls」ファイルのパーミッションを見てみると、
[-rwxr-xr-x]
こんな感じで出てくる。
所有者、グループ、その他ユーザーすべてに「x」パーミッションが与えられている。つまり、実行許可がでている。
パーミッションに実行許可が与えられているファイルを実行可能ファイルという。
つまり、「ls」コマンドを打つたびに「/bin/ls」という実行可能ファイルが実行されていたということ。
ほとんどのコマンドの実体は、「/bin」「/usr/bin」「/sbin」「/usr/sbin」のどれかの中にある。
「/bin」と「/sbin」は基本的なコマンドが入っている。
「/usr/bin」と「/usr/sbin」はシステム管理に関わるコマンドが入っている。
<シェルの実体>
シェルはLinux上の仕組みである。
それを動かしているプログラム(ソフトウェア、コマンド)があるはず。
それを探すには、
[echo &SHELL]...「SHELL」という名前のシェル変数の内容を表示
⇒[/bin/bash]
この実行可能ファイルが実際に使っているシェルの実体なのです。
「/bin/bash」は「bash(バッシュ)」という有名なシェルの一種。
その他のシェルだと、「zsh」や「tcsh」などがある。
シェルが違うとコマンドや機能がちょっと違うことがある。
そのため、ネットで調べたコマンドがうまく走らないとか、古めのUnixのテキストに書いてあることがうまく動かないみたいな問題の原因はシェルの違いであることが多いんだとか。
シェルで走るコマンドには2種類ある!
1つは前述したような、独立したコマンド。
もう1つはシェルの「組み込みコマンド」。
コマンドを走らせるためのコマンドが存在しない。
代わりに「bash」とかが自分の中にコマンドを持っている。
いわゆる、シェルの付属品。
「bash」の組み込みコマンドを見るには、
[help]
特殊なタイプのシェル変数がある。
例えば、シェルは様々な言語で提供できるようになっている。
それを担うのが環境変数といわれるもの。
環境変数にはシェル設定などに関する情報を格納している。
どのようなシェル変数があるかは、「set」コマンドで見れる。
[set | less]
「less」コマンドを終わらせるには「q」キー。
いくつかシェル変数紹介。
・COLUMNS...今開いてる端末の横幅
・HOME...ホームディレクトリの絶対パス
・LANG...どの言語を選択しているか
・PWD...カレントディレクトリの絶対パス
・SHELL...シェル実行のファイル
・USER...ユーザー名
このようなシェル変数や環境変数な内容を表示させるには「echo」コマンドを使用する。
中身を見るときは「$」を頭に付けて指定すること。
シェルはコマンドの実体が入っている可能性の高いディレクトリに関する情報をあらかじめ把握している。
実行可能ファイルをすぐ見つけ出せる裏にはそんな事情があったんですね。
そのような情報のことをコマンドサーチパスという。
コマンドサーチパスは「PATH」という環境変数に格納されている。
例えば、もし「PATH」が破壊(空白に)されても、実行可能ファイルの場所(パス)を明示的にシェルい教えるとコマンドは動く。
シェルの付属品組み込みコマンドはコマンドサーチパスとは無関係に動くので心配なし。
複数のコマンドをテキストファイルにまとめて実行することができる。
⇒複数のコマンドを順に組み合わせ、一連のまとまりのある処理として1つのプログラムのように仕立て上げることができる。
それをシェルスクリプトという。