shell(シェル)とは?
shell(シェル)とは、OS(オペレーティングシステム)の操作を行うためのインターフェースプログラムを指します。システムコマンドのインターフェースとしてOS操作を行います。
OSの中核となるコードをカーネル(核)と言います。その外側のユーザ側のインターフェース部分をシェル(殻)と呼んでいます。貝殻の中と外のイメージです。シェルは対話的(インタラクティブ)にユーザー操作要求を解釈し、必要な処理を実行します。
シェルの特徴
シェルの特徴の1つは、カーネルリクエストを簡単に行えることです。従来のプログラミングではシステムアクセス用のプログラムコードを作成する必要がありました。シェルでは、追加のアプリ開発をせずに、コマンドラインで必要な操作をすることができます。
続く特徴は、シェルスクリプトというスクリプト言語に対応していることが挙げられます。シェルは、作業の操作をコマンドラインに記述し実行します。シェルスクリプトでは、同じ処理手順をコードとして作成することで、バッチ処理や一括実行を簡単に行うことができます。
シェルの特徴とメリット
シェルの利用メリットは、前述のシェルの有する特徴を最大限活用できることです。具体的には、複数の作業手順を一括実行することで、シェルスクリプト実行による作業品質の均一化が可能です。スクリプト実行では、運用管理の自動化も期待できます。
作業手順としては、CLIで基本操作が正しいことを確認し、シェルスクリプトのコードを作成します。これにより運用管理における作業手順の標準プロセス化も可能です。
コマンドラインインターフェイスとは
コマンドラインインターフェイスとは、コマンドを入力し所定の操作を行うインターフェースを指します。略称として、CLI(Command Line Interface)と呼びます。
シェルのコマンドインターフェースは、CLI形式がほとんどです。シェルはシェル自体が解釈できる組み込みコマンドと、外部のコマンドやアプリケーションを起動する外部コマンド呼び出しが実装されています。
シェルスクリプトとは
シェルスクリプトとは、シェルで解釈可能な一連の操作コマンドを記述したコードを指します。スクリプト言語の一種です。シェル組み込みコマンドや外部コマンドを適宜実行させることで、複雑な処理に対応します。
シェルにはコマンドインターフェースとしてインタプリタ機能があります。入力されたコマンドの解釈を対話型で逐次実行します。シェルの実行方法は、CLIからのコマンド入力の対話型実行と、シェルスクリプトを用いた一括実行の両モードに対応します。
カーネルとは
カーネルとは、システム資源をプロセッサの特権を使って効率的に割当・実行・制御する機能を指します。具体的には、メモリーやCPU・I/O等を管理するOSの中核機能です。ユーザーはプログラムを実行することで、システムコールを通じてカーネルへ処理要求を発行します。カーネルは、システムコールの要求を手順に従い処理していきます。
カーネルはユーザーのプログラムやデーモン(常駐プロセス)をプロセスとして管理し、システム資源を割り当て、ファイルやI/Oのアクセスを管理します。
シェルの種類
シェルは、UNIX系システムで実装されており、Linuxにも利用されています。macOSやWindowsにもシェルが搭載されています。ここでは代表的なシェルの種類について見ていきます。
Bourne Shell
Bourne Shellはshプログラムで、1977年に登場したシェルです。UNIXに標準搭載されていたため、古くから使われています。対話的に操作する場合にコマンド編集等の機能が実装されておらず、後に標準化されたPOSIX Shellに置き換わっていきました。
C Shell
C Shellはcshプログラムで、BSD UNIXで配布されたシェルです。Bourne Shellに不足していたヒストリ機能やエイリアス機能を実装したことで、対話的な操作性が大幅に向上しました。C言語に近い言語体系を取っており、シェルスクリプトの開発が容易です。
ジョブコントロール機能によりフォアグランドジョブとバックグラウンドジョブの管理を可能としたために、バッチ処理等の運用性も向上しました。
KornShell
KornShellはkshプログラムで、Bourne ShellとC Shellの機能を取り込んでいます。Bourne Shellの上位互換として動作し、かつC Shellで実装された対話的操作時のコマンド編集機能を実装したものです。
Bash
BashはLinuxやUNIX系システムで用いられているシェルで、GNUプロジェクトにより開発されたBourne Shellのフリーソフトウェア版です。bashとは、Bourne-again shellの頭文字をとった名称です。フリーソフトウェア版開発にあたり、C ShellやKornShellの機能を取り入れています。
Bashは登場以降、Linuxのデフォルトシェルとして利用が進んでいます。macOSおよびMicrosoft Windowsにも対応しています。
Windows Powershell
Powershellは、.NET Frameworkで用いるオブジェクト指向のシェルです。CLIとシェルスクリプトに対応します。古くはWindows Scripting Host(WSH)が主流でしたが、Windows 7以降はPowershellが標準搭載され、Windowsシステムで利用されています。
その他
MS-DOSでは、コマンドプロンプトでバッチファイルが実行できました。現在はWindowsではWindows Subsystem for Linux(WSL)が実装されており、Bashを利用することが増えています。
GUI系Shellというと、マンマシンインターフェースとしては、macOSやWindows、UNIX系システムのX Windowsがあります。スクリプト実行という意味合いでは、先に挙げたCLIとシェルスクリプトを併用することになります。
シェルの利用方法
ここでは代表的なシェルであるBashの利用方法を見ていきます。BashはLinuxに標準搭載されています。macOSにも導入済みですので、お持ちの環境で利用できます。Windowsの場合は、WSLをインストールすることで、UbuntuとBashが利用可能になります。
Bashはデフォルトシェルとして広く利用されています。bashのリファレンスマニュアルはGNUで配布されています。 【参考】:Bash Reference Manual
シェルの操作方法
シェルは対話型によるコマンド実行や、スクリプトファイルを読み込んで実行します。リダイレクト機能を用いて入出力先を変更することもできます。コメント行には行頭に#を入れておきます。
システムのログインシェルとしてBashが設定されている場合は、そのままBashのコマンド入力が可能です。外部コマンドとしてBashを起動することもできますし、シェルスクリプトの1行目のコメント行に実行プログラム名としてbashを “#!/bin/bash” のように明示的に指定することもできます。
ログインシェルのプロンプトが ”$” の場合は一般ユーザ、”#” の場合はスーパーユーザ(root)の権限でシェルを実行することができます。
シェルのコマンド
シェルのコマンドは組み込みコマンドと、外部コマンド呼び出しが可能です。
内部コマンドには、操作コマンドとしてechoやprintf、ジョブ制御のfg・bg・jobs等があります。ディレクトリ管理用のdirs・popd・pushd、履歴管理のfcやhistory、環境設定のsetやalias等が用意されています。スクリプト言語の構文では、evalやbreak・continue・return・break・exit等が用意されていますのでコマンドを併用し、プログラミングに利用することができます。
外部コマンドの例ですが、LinuxやUNIX環境ではファイルやディレクトリ表示のls、カレントディレクトリ変更のcd・chdir、ファイルやディレクトリ移動のmv、削除のrm、コピーのcp等を利用し、業務プログラムと連携してスクリプト処理を作成します。上記以外にも、ご利用の環境で提供されているコマンドは外部コマンドとしてシェルから実行できます。
シェルスクリプトの作成方法
スクリプトファイルはテキスト形式ですので、emacsやvi等のテキストエディタを用いて作成します。
シェルスクリプトでは環境変数に応じた処理の追加や、コマンド解釈で必要とされる引用ルールに応じた文字列を引数として渡すことができます。シェル組み込みコマンドや外部コマンドを組み合わせて、より大規模な処理を登録することが可能です。
WindowsでBashを利用するには
WindowsのシェルはPowershellですが、LinuxやUNIXで使用しているBashを共通利用する場合はWSLを利用するのが良いでしょう。
WSL(Windows Subsystem for Linux)とは、Windows上でLinuxのコマンド・ツール・アプリケーションを直接実行するサブシステムを指します。WSL2では最新の仮想化テクノロジーを使用し、Linux環境がそのまま動作します。インストールも簡単に行うことができます。 【参考】:Windows Subsystem for Linuxに関するドキュメント 【参考】:Microsoft WSL のインストール
シェルの活用は、運用効率化の鍵
シェルはインタラクティブに操作するインターフェースとして、LinuxやUNIX系システムで標準的に利用されています。WindowsでもWSLの活用が進んでいます。シェルスクリプトをシステム間で統一することで統合運用を図ることができます。運用自動化や作業プロセスの標準化が可能となります。
特にBashはクロスプロットフォームでも動作するため、活用実践や知識吸収は運用スキルアップとしてもおすすめです。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから