Linuxのシェル(Bash)に関する世界観1(シェル)です。
シェルは、ユーザーのライン入力を受け取って、任意のコマンドプログラムを実行するプログラム。ユーザーが思い通りにさまざまなコマンドのプログラムを実行できるようにした、人間であるユーザーと機械とのインターフェース。
GNU/Linuxで一般的なBashには、コマンドやパスの補完、ヒストリ機能(一度実行したコマンドを履歴から探索できる)、マルチタスクの機能(&を使ったプログラムの非同期の実行やjobsコマンドなど)、コマンドの別名を作れるエイリアス、(厳密にはシェルではなくOSの機能だが)コマンドとコマンドを繋げるパイプの実行、シェルスクリプトの実行などの便利な機能が備わっている。ライバルはFreeBSDなどで一般的なcsh/tcsh(Cシェル系のシェル。シェルスクリプトなどの記法がC言語に近い)。
Bashなどのコマンドラインシェルは、基本的にユーザーの入力を受け取ってコマンドを実行するが、このコマンドは環境変数であるPATHのディレクトリの中から検索される。
PATHに含まれていないコマンドや実行ファイルでも、/sbin/serviceのようにフルパスで指定するか、./configureのように相対パスで指定すれば実行できる。
また、ユーザーのホームディレクトリを得るHOMEという環境変数もある。Bashでは、ホームディレクトリを~(チルダ)で表現し、ホームディレクトリの中にある.bashrcは~/.bashrcと記述してシェルからアクセスできる。
以下はパス(PATH)の確認と設定方法は? - Pocketstudio.jp Linux Wikiを参考に執筆・引用しました。
PATHの確認方法。
$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
PATHの設定方法。
$ PATH=$PATH:/home/assy/bin $ export PATH
PATHの設定ファイル。
.bash_profileに以下の設定を記述することで、ログインした時に自動でPATHを設定してくれます。
PATH=$PATH:/home/assy/bin export PATH
システム全体(すべてのユーザーのシェル)で設定する場合は、/etc/profileに記述します。
シェルには、一般ユーザーのシェルとrootユーザーのシェルという二種類のシェルがある。慣習的に、コマンドの入力例などを記述する際に、一般ユーザーのシェルは$、rootユーザーのシェルは#を行頭につけて表現する。この$や#を入力する必要はない。
UNIXでは、誤った操作によるシステムの破壊を防ぐために、通常はシステムの変更・破壊権限を持たない一般ユーザーとしてログインし、一般ユーザーのシェルを起動させて操作する。データはホームディレクトリのような場所に保存し、多くの操作は一般ユーザーで行う。
だが、ソフトウェアパッケージのインストール・アンインストールや、システムの定期的な更新など、一部の操作はrootユーザーになった上で行う必要がある。
この時は、su -コマンドを使うことで、rootユーザーのシェルを起動できる。
Linuxコマンド(基本)を参照のこと。
rootユーザーになってシェルを実行する。
$ su - Password: (root のパスワードを入力) # (rootのシェルになった)
終了する時はexitを実行する。
# exit $ (ユーザーに戻る)
特に、PATHの永続的な設定をしたい場合など、ログイン時に特定のコマンドを実行したい場合、起動スクリプトに記述することができる。
たとえば、上のPATHの設定の例では、そのコマンドを実行した時にしかPATHが設定されず、シェルを終了してしまうと次回のシェルでまた手動で実行しないといけない。このような時に初期化スクリプトを使う。
初期化スクリプトはホームディレクトリにある.bash_profile(ログイン時)と.bashrc(シェルの毎回起動時)などがある。
だが、これはコマンドシェルとしてログインした場合であり、Xサーバーでグラフィカルなディスプレイマネージャ(GNOMEならGDMなど)でログインした時には実行されない。
Xサーバーを実行した時にコマンドを実行したい場合は、.xsession(Xログイン時)や.xinitrc(startxコマンドでXサーバーを手動で起動する時)などにコマンドを記述する。.xinitrcは、たとえばtwmではなく独自のウィンドウマネージャを起動したい場合などにその起動コマンドを記述すると、startxを実行した時に自動でウィンドウマネージャを起動できて便利である。日本語入力のためのインプットエンジンの設定も.xinitrcに記述することが多い。(最近のiBusなどの新しい世代のインプットエンジンでは、.xinitrcを編集する必要はなく、GUIで設定できる。)
UNIXシステム管理(システム情報と設定)や日本語入力を参照のこと。
コマンドを実行している時に、途中で実行を中止し、強制終了したい時はCtrl+Cを実行する。
また、プログラムを実行して、何も出力せずにプログラムが終了し、元のシェルの入力に戻った時は、コマンドは正常に処理を完了している。何かエラーを出した時(途中で不正終了した時)はエラーが表示される。
別のユーザーとしてログインしたい場合など、シェルそのものを終了させたい時はexitコマンドを実行する。また、システムを終了させたい時はshutdownコマンドを実行する。システムの終了は-h、再起動は-r。
# shutdown -h now
BashとReadlineのコードは以下から読める。
ファイルのパスを入力している時に、途中まで入力してTabキーを押すと、それ以降の入力(決まっているところまで)を自動補完してくれます。
候補がたくさんある時はリスト表示されます。
↑キーと↓キーを押すことで、一度入力したことのあるコマンド行を再度表示し、再実行することが出来ます。
ヒストリは.bash_historyに記録されます。
ヒストリは、Ctrl+r(後方)とCtrl+s(前方)でインクリメンタルサーチをすることが出来ます。
コマンドに常にオプションを付けたい時は、エイリアスが使えます。
$ alias rm='rm -i'
引数を付けずにaliasコマンドを実行することで、定義されたエイリアスの一覧を見ることが出来ます。
$ alias
Bash2(シェルスクリプト)を参照のこと。
Bashのさまざまな機能を参照のこと。
GNOME端末やKonsoleを使うことで、GUIから端末エミュレータとしてシェルを実行出来ます。
GNOMEアプリケーションやKDEアプリケーションやLinux端末を参照のこと。
パス名の中からファイル名を取り出す。findなどから解析できる。
文字列(テキスト)や変数の値を表示する。シェルスクリプトなどでprintf()の代わりに使える。
lessとmoreは、ファイルやテキストの内容をスクロール可能な1画面に表示する便利なコマンド。
moreは逆戻りが出来ないためlessを使うことが多い。
aliasはコマンドの別名を登録する。rmについて確認表示をデフォルトに登録したりできる。
また、unaliasで別名を解除できる。
コマンド | 説明 |
---|---|
clear | 画面をクリアする。 |
exit | ログアウトする。 |
history | コマンドの履歴を表示する。 |
which | コマンドのパスを表示する。 |
nohup | ログアウト後もプログラムを実行する。 |
sleep | 一定時間スリープする(一時停止)。 |
詳しくは以下が参考になります。
Linuxの標準的なシェル。