ターミナル(端末)、シェルとは【Linux/IT】

ターミナル(端末)ターミナル とは、キーボードから文字を読み取り、ディスプレイに表示するものです。
Windows ターミナルのタブで Power Shell を動かす様子
シェルシェルとは、キーボードやマウスなどの入力を解釈して OS(のカーネル) に渡すものです。
コマンドラインシェル。文字ベースでコマンドを入力して操作
グラフィカルシェル。画像ベースでアイコンをクリックして操作
関連記事:Linux の基本機能
スポンサーリンク

ターミナル

ターミナル(端末)ターミナル とは、キーボードから文字を読み取り、ディスプレイに表示するものです。
Windows ターミナルのタブで Power Shell を動かす様子

昔のターミナル (端末) は物理端末でしたが、今はアプリで端末の動作をエミュレートしています。
(そのため、現在はターミナルアプリ/ターミナルソフト/ターミナルエミュレータとも呼ばれます)

昔のターミナル (端末)
入力はキーボード。出力が紙でありディスプレイではない。

なお、Linux では、CTRL+ALT+T でターミナルアプリを起動できます。

ターミナルの主な機能

ターミナルは主に見た目や操作性に関する機能があります。

  • タブの切り離し
  • ショートカット (Ctrl+Shift+C でコピーなど)
  • 背景画像の変更
  • フォントの変更

ターミナルの種類

ターミナルOS
xtermUnix ベース/Linux 系
GNOME TerminalUnix ベース/Linux 系
ターミナルmacOS
iTerm2macOS
Windows ターミナルWindows
Windows コンソールホストWindows
一覧はこちら

ターミナルの管理 tty, pts

Linux では、デバイスをデバイスファイルとして管理します。

ターミナルアプリも、デバイスをエミュレートしたアプリなので、デバイスファイル (/dev/tty0) で管理します。

SSH で接続した場合は /dev/pts0(擬似端末) で管理されます。
tty
/dev/tty0
スポンサーリンク

シェル

シェルシェルとは、キーボードやマウスなどの入力を解釈して OS(のカーネル) に渡すものです。

シェルには、次の2種類が存在します。

  • コマンドラインシェル:文字ベース (CLI) のシェル
  • グラフィカルシェル:画像ベース (GUI) のシェル
コマンドラインシェル。文字ベースでコマンドを入力して操作
グラフィカルシェル。画像ベースでクリックして操作
  • コマンドラインシェル:入力した文字を解釈 (どれがコマンドでどれがオプションか)
  • グラフィカルシェル:クリックしたアイコンを解釈 (アイコンのアプリを起動など)

一般的にシェルは、コマンドラインシェルを指すことが多いです。

シェルの主な機能

外部コマンドの例。内部コマンドならシェルから直接実行する (4 が不要)

シェルの代表的な機能は以下です。

  • コマンドの解釈
  • コマンドの実行
    • 内部コマンド
      • シェル内部に組み込まれたコマンド
      • シェル自身で実行
      • 文字の出力、シェルの終了 (echo, exit) など
    • 外部コマンド
  • コマンドの履歴を表示
  • 入力、出力の変更 (結果をディスプレイに出力したり、ファイルに出力したり)

シェルの種類

シェル主に利用する OS
bashLinux/macOS
zshLinux/macOS
Power ShellWindows
コマンドプロンプトWindows

シェルとターミナルの違い

ターミナルは入力/出力を表示するもので、シェルは入力したコマンドを解釈/実行するものです。

シェルは以下のようにターミナル内で動作するため、混同されがちですが異なるものです。

Windows ターミナルで、複数のシェルを起動している様子
シェルがコマンドを解釈し、結果をターミナルに出力

シェルにおける変数とは

変数変数とは、値を入れておく箱のことです。

変数は、値が変わるもの (ログインユーザー名) や、ハードコードしたくないもの (パスワードなど) を入れておくために使います。

変数には次の 2 種類が存在します。

  • シェル変数
  • 環境変数

シェル変数

シェル変数とは、現在の実行中のシェルでのみ有効な変数です。
シェル変数の使い方
VAR=test

echo <$変数名> で変数の値を確認できます。

echo $VAR
test
シェル変数の一覧

シェル変数の一覧は set コマンドで確認できます。

set
'#'=0
0=-zsh
VAR=test
(中略)

bash シェルの場合、デフォルトでは主に以下のようなシェル変数があります。

シェル変数説明
HOSTNAME現在のホスト
0現在のプロセス (起動しているプログラム。つまりシェル) の名前
$現在のプロセス (起動しているプログラム) の PID (識別番号)
?直前に実行したコマンドの終了ステータス (成功/失敗など)
シェル変数の有効範囲

シェル変数は現在実行中のシェルのみで有効なので、新しくシェルを起動すると継承されません。

bash
echo $VAR

新しいシェルでは、シェル変数を確認できないことを確認しました。

exit

環境変数

環境変数とは、シェル全体で共有する変数です。
環境変数の使い方
export ENV=test2
echo $ENV
test2
環境変数の一覧

環境変数の一覧は env コマンドで確認できます。

env
ENV=test2
SHELL=/bin/zsh
USER=hoge
(中略)

デフォルトでは、主に以下のような環境変数があります。

シェル変数説明
HOME現在のユーザのホームディレクトリのパス
SHELL現在使用しているシェル
TERM現在使用しているターミナル
PWD現在使用中のディレクトリ (フォルダ) のパス
USER現在のユーザー名
環境変数の有効範囲

環境変数はシェル全体で有効なので、新しくシェルを起動しても継承します。

bash
echo $ENV
test2

新しいシェルでも、環境変数を確認できることを確認しました。

スポンサーリンク

関連情報

関連記事:Linux の基本機能

参考記事

仕組みと一緒に作りながら学ぶシェル - Qiita
はじめにみなさん、シェルについてご存じでしょうか?bashやzshなどエンジニアであれば誰もが触ったことのあるであろうターミナルから使用することのできるあれです。もちろん知ってるよという人もいると…
初学者のための正しいシェルとカーネルの概念 ~ 大学も技術者認定機関も間違いだらけ - Qiita
なんだろう、嘘つくのやめてもらっていいですか?大学も技術者認定機関も、いつまで古いまたは間違ったシェルとカーネルの概念を説明し続けるのでしょうか? シェルはカーネルの言葉をユーザーの言葉に翻訳した…