GUI の世界から端末エミュレータやコンソールの CUI の世界へようこそ。よくいらっしゃいました。
このページでは GNU/Linux システムにほぼ標準採用されているシェル Bash (Bourne Again Shell) の操作についてとりとめなく書いています。
X Window System を使っている場合は 端末エミュレータ のウィンドウを開くことでシェルを利用することができます。
シェル(「殻」という意味)はコマンドラインからCUIプログラムを実行するソフト。
ライン入力を読み取って、適切なプログラムを適切な呼び出しで実行する。
コンソール端末でも、ターミナルエミュレータでも、CUIプログラムを起動するときにはまずこいつが起動して、そこに入力を打ち込むことで間接的にCUIプログラムが起動する、という形になる。
入力したい内容をファイルにまとめて書けば一気に実行もできる。
BashはUNIX標準シェルのshと互換のフリーなシェル。Linuxで標準的に使われている。
よく CUI の話題に出てくる環境変数 PATH については以下の文献を参照のこと。
特定のディレクトリ(下記の例では /usr/local/hoge と /usr/local/fuga)を PATH に加えたい場合は
export PATH=$PATH:/usr/local/hoge:/usr/local/fuga
みたいな感じでユーザの ~/.bashrc や ~/.bash_profile などのシェルの環境設定ファイルに追加しておく。
PATH にディレクトリを新たに追加する事を俗に「PATH を通す」と言ったりします。
export コマンドを使わなくても、以下のように一時的に環境変数を設定することができます。
$ LANG=C man cp
これで環境変数 LANG が一時的に C に設定されます。 (結果、cp に関する英語の man ページが表示されます)
今自分が使っているシェルの種類を確認するには、環境変数 SHELL を表示することで確認できます。
echo $SHELL
全部 bash で読み込まれる初期化設定ファイル。けど、読み込まれるタイミングがちょっと違う。
ホームディレクトリにある .bashrc と .bash_profile はユーザーの個人用の設定で、/etc にある2つはシステムの標準設定。/etc/profile と ~/.bash_profile はログイン時のシェル(ログインシェル)で1回だけ読み込まれる設定で、/etc/bashrc と ~/.bashrc はシェルの起動時に毎回読み込まれる設定。
普通は .bashrc か .bash_profile のどちらかに書いておけば大丈夫。PATH HOWTO とかで起動時の流れがちょっとだけ解説してあるよ。
コマンド入力欄で↑↓キーを押した時に出る、入力したコマンド履歴の数を変更したいという時は、ユーザの ~/.bashrc や ~/.bash_profile ファイルに
export HISTFILESIZE=100 export HISTSIZE=100
と追加しましょう。
また
export HISTCONTROL=ignoreboth
を加えると同じコマンドを重複して記録しないようになります。
コマンドを入力する時 Linux などの Bash、Tcsh、Zsh などのシェルにあって、Windows の cmd.exe にはない(*1)(*2)ものにコマンド補完というのがある。
これはディレクトリ名やファイル名を途中まで打ち込んだところで Tab キー を押すと、シェルが途中まで入力した文字と合致するものを自動的に補完することができる便利な機能です。
候補が多数ある場合は合致した候補の一覧を表示することができるので、今度は自分が1、2文字程度補完してやってまた Tab キーを押すと残り全部を補完してくれます。
つまり、自分でコマンド全部を入力しなくても良いと言う事。 タイプ数と入力間違いを大幅に減らすことができます 。
vi /usr/src/linux/Documentation/sound/README.OSS
こんなのいちいち入力して作業をしていたら日が暮れます。補完を使いましょう。
以下はコマンド補完を使って /usr/src/linux にディレクトリ移動する場合の例です。
$ cd /u
ここまで入力したて Tab キーを押すと・・
$ cd /usr/
sr/ が補完されます。
$ cd /usr/s
ここでまた Tab キーを押すと・・
sbin share src
このように 名前が s から始まる候補が sbin, share, src の三つあるとシェルが教えてくれます。
$ cd /usr/sr
目的の名前は src なので r を入力してまた Tab キーを押すと・・
$ cd /usr/src/
rc/ が補完されます。
$ cd /usr/src/l
l を押して Tab キーを押すと・・
$ cd /usr/src/linux/
/usr/src/linux/ と目的のディレクトリが表示されたので Enter キーを押せばコマンド実行できます。
Windows のヘビーユーザや MS-DOS 時代からパソコンを使っていた人には CUI の画面はお馴染みだと思います。
MS-DOS などでは一つのコマンドを実行するとそのコマンドが終了するまでは他の作業ができないシングルタスクでしたが、UNIX 互換 OS (Linux 含む) は CUI の時代からマルチタスクを実現していたので CUI 環境でもマルチタスクを利用できます。
単にコマンドを入力します。
cp /dokokano/dekai/file /home/hoge
cp コマンドはファイルをコピーするコマンドです。
上記のように普通にコマンドを実行することを フォアグラウンド で実行するといいます。
フォアグラウンドでコマンドを実行した場合は Windows のコマンドプロンプトや MS-DOS プロンプトと同じように、そのコマンドが終了するまでは他の作業をする事はできません。
複数の作業を同時に行いたい場合は、バックグラウンドでコマンドを実行します。
コマンド実行時、 & を付けると バックグラウンド で実行されます。
cp /dokokano/dekai/file /home/hoge &
こうすることで、例えば巨大なファイルをコピーしている間、別の作業が可能になります。
& を付けずに フォアグラウンド でコマンドを実行してしまった場合、 Ctrl + z を押すと一時停止状態にできます。
$ cp /dokokano/dekai/file /home/hoge [1]+ Stopped cp /dokokano/dekai/file /home/hoge
一時停止されて待ち状態になります。
bg コマンドを使います。jobs コマンドで表示される番号で制御するコマンドを指定できます。
$ jobs [1]+ Stopped cp /dokokano/dekai/file /home/hoge $ bg 1 [1]+ cp /dokokano/dekai/file /home/hoge
fg コマンドを使います。使い方は bg コマンドとほぼ同じです。
$ fg 1 cp /dokokano/dekai/file /home/hoge
バックグラウンドで実行したコマンドや一時停止したコマンドは jobs コマンドを使うと見ることができます。
$ jobs [1]+ Stopped cp /dokokano/dekai/file /home/hoge
ps コマンドを使います。
$ ps PID TTY TIME CMD 404 pts/1 00:00:00 bash 460 pts/1 00:00:00 ps
単純に ps コマンドを実行すると今使っているシェルで起動したプログラムが表示されます。上記の例ではシェル自身(bash)とpsコマンド自身(ps)が表示されています。
PID という数字はプロセス IDといい、重要な役目があるので覚えておきましょう。
& をつけずにフォアグラウンドで実行しているコマンドを停止する場合は Ctrl + c を押すことで強制終了できます。
$ cp /dokokano/dekai/file /home/hoge (ここで Ctrl + c を押すと強制終了されてシェルに戻ります) $
& をつけてバックグラウンドで実行しているコマンドの場合、Ctrl + c を受けつけてくれないので kill コマンドを使って強制終了します。
$ cp /dokokano/dekai/file /home/hoge & $ ps PID TTY TIME CMD 404 pts/1 00:00:00 bash 460 pts/1 00:00:00 ps 480 pts/1 00:00:00 cp $ kill 480
バックグラウンドで実行したコマンドの プロセス ID を kill コマンドを使う際に指定することで動いているコマンドを強制終了(殺す)ことができます。例のようにコピーするコマンドなどの場合に強制終了した場合、当然ながらコピーは完全に行われないので注意。
nohupやdisownの組み込みコマンドを使うことでログアウトに影響されないようにできます。
du -a / | sort -rn | head -n 20
最初の du コマンドでルートからの全ファイル、ディレクトリのディスク使用量を表示しています。ただ、それだけだと順番に表示されないのでソートさせたい。
せっかく sort というソート用のコマンドがあるんだからこれでなんとかしたい。
そこで使うのがパイプ。du と sort のあいだにある「 | 」です。これは名前の通り、パイプのようにコマンドの出力結果を次のコマンドにわたす記号です。というわけで、コマンドとコマンドのあいだに「|」を置いて、結果を渡しているわけです。
du で 表示されたファイル使用量の結果を sort でソートできたら、あとはソートの結果から上位20を表示させるだけ。head は ファイルの最初の部分を表示させるコマンドなので、大きいもの順に並んだ出力結果を最初から20行表示させると、それがトップ20になるわけです。