運用環境 シェル(その1)

【連載】

にわか管理者のためのLinux運用入門

【第181回】運用環境 シェル(その1)

[2019/06/04 07:30]後藤大地 ブックマーク ブックマーク

サーバ/ストレージ

超重要な「シェル」

これまで開発環境について説明するなかで、C言語とPythonについて取り上げてきた。C言語はカーネルやシステムが提供している機能を直接的に利用するためのものとして、Pythonは学習が比較的容易で実用的に利用できる現在最も人気の高いプログラミング言語の1つとして取り上げた。これらは、比較的両極端に位置するプログラミング言語であり、この2つを網羅しておけばLinuxではかなりの範囲のことができるようになる。

今回からは、これらとは別の切り口で「シェル」について取り上げる。Linuxサーバにリモートログインして実際に作業を行う際に人間がインターフェースとして扱うことになるのがシェルだ。多くのLinuxディストリビューションではbashが使われることが多い。シェルの操作方法をどの程度知っているか、シェルの機能にどの程度精通しているかは、そのままLinux操作の効率に関わってくる。

Ubuntuのデフォルトインタラクティブシェルは「bash」

シェルは、Linuxシステムの起動や管理にも使われている。こちらはシェルで組み上げられたシェルスクリプトだ。シェルスクリプトにも「bash」が使われることが多い。ただし、より軽量に動作するという理由でbashではなく「dash」が使われていることも多い。シェルは管理用のコンソールとしても、操作用のインタラクティブインタフェースとしても使われる、Linuxにおいて中核を成すソフトウェアの1つである。

シェルの歴史と種類

シェルはかなり古くから存在しているソフトウェアだ。Linux設計のベースアイデアになっているUNIX系OSの初期から存在していたソフトウェアで、いくつかの種類が存在している。

それらをざっくり分けると、シェルにはBourne Shell系とC Shell系がある。文法がかなり違うので、まずはこの2つで分類することになる。

  • Bourne Shell (sh)
  • C Shell (csh)


発祥が古いほうがBourne Shell系ということになるだろう。C Shell系はバークレーで開発されたBourne Shellよりも後発のシェルで、当時のBourne Shell系と異なり文法がC言語っぽく、さらにインタラクティブ機能が追加されていた。その後、それぞれの系列に分類される多機能インタラクティブシェルとしてksh、bash、zsh、tcshなどが登場している。

  • Bourne Shell (sh)系 - ksh、bash、zsh
  • C Shell (csh) - tcsh


最後発のシェルとしてオリジナルのシンタクスを持ったfishなども登場している。ざっくりまとめると次のようになるだろう。

  • Bourne Shell (sh)系 - ksh、bash、zsh
  • C Shell (csh) - tcsh
  • それ以外 - fish


C Shell系は登場した当初はインタラクティブ機能が強化された便利なシェルだったのだが、今となってはほかの多機能インタラクティブシェルと比較した利点はほとんどないと言える。好みの問題もあるが、インタラクティブの便利さでいえばfishが一番だろう。最後発だけあってよくできている。

では、「管理に利用するためのシェルとしてはどれを学ぶのがよいか」ということになるのだが、ここではBourne Shellに最も近いdash、もしくはashをオススメしておきたい。Linuxではdashの実装が使われることが多く、*BSD系ではashが使われることが多い。オリジナルのBourne Shellの実装系に一番近いのがこの2つだ。dashはashをLinuxに移植したものなので、源流はほぼ同じである。システムのシェルスクリプトはこれで組まれていると考えておくとよいだろう(bashでシステムのシェルスクリプトが組まれているものもある)。

Ubuntuでは/bin/shはbashへのシンボリックリンクになっている

dashやashの使い方に精通しておくと、広い範囲で応用が効く。dashやashで学んだことはそのままpsh、bash、zshなどでも利用できる。シェルスクリプトを組む際にも、基本的にはこの機能を知っていればよい。ワンライナーなどもdashやashの使い方をマスターすれば応用できるので、ここは押さえておきたいところだ。

どうやって学べばよい?

実のところ、「シェルやシェルスクリプトを学ぶ方法」というのが最も難しい。モダンなプログラミング言語には大体代表的なチュートリアルが存在している。開発元のベンダやプロジェクトが公開しているドキュメントで、チュートリアルを頭から通して学んでいけば一通り理解できるようになっている。しかし、シェルにはこれが存在しないのだ。

シェルはUNIX系OSの発展とともに使われてきたソフトウェアだ。マニュアルまでは存在しているものの、代表的なチュートリアルというものが存在していない。また、シェルが提供している機能はカーネルのシステムコールに通じるものが多く、カーネルやシステムコールについて理解がないと、その機能や実際の動きを理解するのが難しいところがある。

シェルやシェルスクリプトを解説した書籍やスニペット的な記事は多いのだが、結構断片的であることも多く、系統立てた学習を行うのが難しいのが現状だ。シェルのソースコードを読んでいけば何をしているのかはわかるかもしれないが、それは本連載の趣旨からするとハードすぎるだろう。

どうしたものか悩むのだが、ここではashのマニュアルページ「sh(1)」をチュートリアルの代わりに読み進めることで、機能の説明を行っていこうと思う。チュートリアルほどわかりやすい構成にはなっていないのだが、シェルの機能をフルで網羅するにはこのドキュメントが理解しやすいはずだ。

C言語やPythonは、場合によっては一生使わないLinuxユーザーもいるだろう。しかし、シェルを使わないユーザーはまずいない。シェルは学べば学ぶほど、Linuxファイルを豊かでそして楽しいものにしてくれる。シェルについてはじっくり学んでいこう。

開発言語としてのシェルスクリプト

シェルは制御構文の機能も有しているため、C言語やPythonのようなプログラミング言語として扱うこともできる。スコープやプロセスの扱いについては、プログラミング言語とはかなり特性が異なるが、その辺りは慣れの問題だ。慣れさえすれば、シェルスクリプトはかなり強力なプログラミング言語であることがわかってくる。

実際にシェルスクリプトで開発されたソフトウェアは多い。プロトタイプ的な位置付けで使われることも多く、まずシェルスクリプトで開発してから、一部をC言語に置き換えていくといった使われ方もされることもあるし、最初から最後までシェルスクリプトで作られることもある。

ただ、本連載の趣旨はLinuxサーバの管理にあるので、シェルをプログラミング言語としてバリバリ使っていくようなことはしない。そういった用途で使うのであれば、Pythonのようなプログラミング言語を覚えたほうが何かとつぶしが利くからだ。ただし、プログラミングが可能であることは知っておいてもらえればと思う。

参考資料

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

ガートナー ジャパンは10月31日~11月2日、都内で「Gartner Symposium/ITxpo 2017」を開催。11月1日には同社 主席アナリストの青山浩子氏が登壇し「CIOが理解すべき統合システムの3大インパクト」と題する講演を行った。本稿では、講演の内容をダイジェストでお届けする。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る