シェルと標準入出力

TECHRU テックる!は、「実機で学ぼう!」をコンセプトにしたインフラエンジニア専門スクールです。

現役エンジニアがLPIC, LinuC/AWS認定試験に必要な専門的な知識を分かりやすく教えております。また、実際にサーバーを構築するなど手を動かしながら学ぶことで、実践的な知識が身につきます。

シェルとカーネル

カーネルは、OSの中核部分で、ハードウェアとOSの間で情報をやり取りする役割を果たします。ユーザーやアプリケーションからの要求を受け取り、それらをハードウェアが解釈できる命令に変換します。

シェルは、ユーザーがカーネルと対話するためのインターフェースで、通常はCLIで操作します。ユーザーがタイプしたコマンドをカーネルが理解できる形式に解釈し、その結果をユーザーに表示します。

シェルには様々な構文があり、それぞれに特徴や独自のコマンド構文があります。一般的なシェルにはBash( Bourne again shell )、sh( Bourne Shell )、csh( C Shell )、ksh( Korn Shell )、zsh( Z Shell )などがあります。

入力補助機能

LinuxCUI( Character User Interface )環境では、正確に入力する必要があります。シェルには入力を補助する機能があるため便利です。

以下に、特によく使う入力補助機能を表にまとめました。

入力補助機能 説明
Tabキー 途中まで入力してから、Tabキーを押すことで候補を表示する。候補が一つに絞れる場合には、それが補完される。
矢印(↑↓) ユーザーが以前実行したコマンドの履歴を参照する。
Ctrl + c 処理を中断したり、途中まで書いたコマンドを破棄する。
Ctrl + l ターミナル画面をクリアする。
Ctrl + d ログアウトする。

history

historyコマンドは、入力履歴を表示します。

historyコマンドで一覧化されたコマンドを再利用するには、!30のように、!の後にそのコマンド番号を続けて書いて実行します。

alias

長いコマンドや複雑なオプションなどを正確に入力するのは大変です。こうしたコマンドやオプションの組み合わせには、短くて使いやすいエイリアス(別名)をつけて実行することができます。

エイリアスの作成や確認には、aliasコマンドを使います。

現在設定されているエイリアスを確認するには、オプションを付けずにコマンドを実行します。

$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mingw64-env='eval `rpm --eval %{mingw64_env}`'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

デフォルトで設定されているエイリアスもこれだけあります。例えば、llコマンドはls -lコマンドのエイリアスとして設定されています。

他にも、例えばrm -irmエイリアスとして設定するなどして、ファイルの削除時に必ず確認するなどの使い方ができます。

エイリアスを解除するには、unaliasコマンドを用います。

標準入出力

Linuxでは、データの流れはストリームという概念によって抽象化されています。ストリームには、次の3つがあります。

これらのストリームは、データの流れを扱うための抽象化されたインターフェースで、通常はキーボードやキーボードやコンソール(端末)を通じてデータを入力または出力します。

標準入力(stdin)

このストリームは、プログラムへの入力を提供します。通常はキーボードからの入力を指しますが、リダイレクトやパイプを使用して他のプログラムやファイルからの入力にすることも可能です。

標準出力(stdout)

このストリームは、プログラムが出力する結果を扱います。通常は端末上に結果を表示しますが、リダイレクトやパイプを使用して結果を他のプログラムに渡すか、ファイルに保存することもできます。

標準エラー出力(stderr)

このストリームは、プログラムがエラーメッセージを出力するために使用します。stdout とは独立しているため、エラーメッセージを別の場所にリダイレクトするか、そのまま端末に表示することができます。

ストリームをこのように抽象化することで、プログラム間でデータを受け渡したり、ファイルへの出力やファイルからの入力が容易になります。

たとえば、あるプログラムの stdout を別のプログラムの stdin へリダイレクトすることで、最初のプログラムの出力を次のプログラムの入力として使うことができます。これにより、小さなプログラムを組み合わせて大きなタスクを達成するというUnixの哲学を実現します。