Linux入門書を出しました:「新しいLinuxの教科書」

えらく長いことかかってしまいましたが、Linuxの入門書を書きました。「新しいLinuxの教科書」というタイトルで、友人の三宅氏(id:mollifier)との共著です。

新しいLinuxの教科書

新しいLinuxの教科書

Linuxの入門書にも色々な切り口がありますが、本書は「CLIコマンドラインインタフェース)」と「シェル(bash)」を中心としました。というか、ほぼそれしか書いていません。後半は、ページを多く割いてシェルスクリプトについて入念に解説しています。マウスを使う場面はほとんど出てきませんから、本書を読む際にはマウスを窓から投げ捨ててしまっても問題ありません。

目次については、SBクリエイティブのページに掲載されていますので参照ください。

mollifier氏はバリバリのプログラマで、私はサーバ構築やネットワークセキュリティなどのいわゆるインフラエンジニアなため、2人で色々もみ合うことでイイ感じになったかなと思っています。

対象読者について

想定する読者は以下のような方です。

おすすめする読者
  • とりあえずLinuxを学習するためにインストールしてみたが、マウスでちょっとつっつくくらいしかできておらず、CLIの基礎知識をしっかり身につけたい
  • Linuxコマンドラインを基礎からきちんと学習したい
  • 今までなんとなく自己流でLinuxを学んでいたので、一度体系的に基礎を固めたい
  • Gitの基本操作を身につけたい

第19章で、mollifierが渾身の「Git入門」を書いてくれたので、ここだけでも一読の価値があると思います。

おすすめしない読者

本書はシェルの操作を中心したLinux入門書であるため、以下のような目的の方は読んでみても期待外れとなるかもしれません。

  • GUIを利用して、「ここをクリックして設定」などのスクリーンショットを多用した解説書が欲しい
  • ApacheTomcatなど、サーバ構築の入門のためのLinux解説書を求めている
  • Linuxの各種設定(ネットワーク、ユーザ管理、セキュリティ等)についての入門書を求めている
  • Linuxで、RubyPHPを利用したプログラミングを行いたい
  • Linuxカーネルに対する知識を得たい

シェルスクリプトbashで書く意味

本書ではシェルスクリプトに多くのページを割いていますが、そこではすべて「#!/bin/bash」として、bashスクリプトで記述しました。なぜシェルスクリプトを書く際にshではなくbashを使うのかは、本書内でも詳しく述べています。しかし炎上しやすいテーマなのでここにも少し理由を書いておきます。

私がbashスクリプトを勧めるようになったきっかけは、昔に関根達夫氏の「UNIXシェルスクリプトハンドブック」を読んだことに由来しています。

この本はすべてのシェルスクリプトbashで記載しており、冒頭でその理由として、「移植性に気を使ってshで書いても、結局はLinux/Solaris/BSD間の実装の差に苦労する。しかしbashは、GNUによる実装ひとつしか無い。だから機種間の実装による差に悩まされず移植性に優れている。シェルスクリプトはshではなく、むしろbashで書くべき」と述べられています(昔に読んだので細かい表現が若干違うかもしれません)。

当時の私は、DebianRedHatSolarisHP-UXとAlphaのDigital UNIX/bin/shの差に苦労しており、この主張に全面的に賛同しました。最近はSolarisにも普通にbashが入っていますから(それどころか最近のSolariszshすらデフォルトで入っています)、bashをわざわざ避ける理由はもうありません。このような主張をされている方は非常に少ないのですが、言われてみればその通りで、どうして今まで思いつかなかったのだろう? という感じです。(なお、bashスクリプトなのにshebangを「#!/bin/sh」にするのは死罪に値します。決してやってはいけません)。

これ以降、私はシェルスクリプトをshスクリプトではなくbashスクリプトで書くようになりました。ただし、たとえばFreeBSDではbashは/usr/local/bin/bashにインストールされるので、「本当に/bin/bashでいいのか」問題はまだ残っているのですが……。

書き足りなかったこと

まず、ネットワーク周りの設定については全くと言っていいほど書いていません。pingコマンドがほんのちょっと登場するだけです。これにはいくつか理由はあるのですが、単純に分量が多くなりすぎてムリということと、本書はシェルの使い方を基本とした本ですから、分野からしてそもそも対象外だな、と判断しました。

また、Linuxの運用管理に関わる部分もほとんど触れていません。起動・終了とパッケージのインストールについては触れましたが、cronの設定やサービスの起動など、一般的なLinuxサーバ入門的な部分はありません。またカーネルパラメータなども出てきません。これらは、この本で基礎を身につけたあと、それぞれ興味のある方向に進んでくださいというスタンスです。

細かい点で言うと、bashのhelpコマンドをそういえば紹介していなかったな……というのが心残りです。例えばbashの組み込みコマンドsetのヘルプを読むには「man bash」としてから「SHELL BUILTIN COMMANDS」のところのsetコマンドを読めばいいのですが、bashのmanは巨大なため、これはいささか不便です。この場合、次のようにhelpコマンドを使えば簡単に組み込みコマンドのヘルプを参照できます。

$ help set

参考文献

今回の本を書くために様々な書籍を参考にしましたが、私が特に意識したのは以下の2冊です。

たのしいUNIX―UNIXへの招待 (Ascii books)

たのしいUNIX―UNIXへの招待 (Ascii books)

The Linux Command Line: A Complete Introduction

The Linux Command Line: A Complete Introduction

特に坂本文さんの「たのしいUNIX」は、私がUNIXを学び始めた15年ほど前に読み、当時とても面白く読んだことを覚えています。今読み返してみても楽しめますし、2015年現在でも役に立つ素晴らしい良書とは思うのですが、やはりどうしても時代の流れは感じてしまいます(Linuxは全く登場しませんし、端末エミュレータは使わず物理端末を使う前提で書かれていますしね……)。非常におこがましいとは思いますが、「たのしいUNIX」の現代版とでもいうようなコマンドライン中心の本が書きたいな……と長いこともやもやしていたので、その野望はちょっぴり達成できたかな、と思います。

また、「The Linux Command Line」については、以下のURLでPDF版が無料で公開されています。("Download it here."からダウンロードできます)

非常に優れたテキストですから、英語に抵抗のない方はぜひ読まれることをおすすめします。この本は「ほとんど」どころか「一切」マウスを使う操作が出てこない、今どき硬派なLinux入門書ですが、その内容は非常に丁寧で読みやすいものになっています。

おわりに

mollifier氏による書籍紹介も合わせてお読みください:

「あの、ふだんはzshのことしか語らないmollifier氏がbashを語る」という点でも、本書は貴重です。