【最新】Linuxを学ぶおすすめ本 – 入門から応用までリストアップ!

コンテンツ 表示

Linuxを学ぼう!

オペレーティングシステム(OS)であるLinuxはユーザーとコンピュータプログラムがマシンと対話する(たとえば、特定のタスクを実行するために必要なデバイスにアクセスする)ことを可能にするソフトウェアの一種です。Linuxは、WindowsやMac OSなどの他のオペレーティングシステムと同様ですが、Linuxはオープンソースのオペレーティングシステムですのですべてのユーザーがソフトウェアのコードを確認して改善することができます。今回はLinuxの基礎を固めたい、応用してスキルとしていかしたい、また辞書代わりとしても使える書籍をご紹介します。

ランキングも確認する
出典:出版社HP

 

入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス)

Linuxに必要な考え方を体得できる

Linuxの基礎から応用まで、実際に手を動かしながら学ぶことができます。わかりやすさ重視で、初心者にやさしい構成になっています。コマンド入力の利便性を理解でき、体系的な知識を身につけることができます。Linuxの学習を始めようとしている方におすすめの1冊です。

奈佐原顕郎 (著)
出版社: 講談社 (2016/10/18)、出典:出版社HP

必ずお読みください

本書は、パソコン(Windows・Mac)の基本操作や、インターネットの一般的な操作(検索やダウンロードなど)を独力でおこなえる方を対象にしています。
本書に掲載しているコマンドは、以下のディストリビューションで動作することを確認しています。

  • Ubuntu16.04LTS
  • Raspbian(NOOBSv1.9.2とv1.9.3)

シェルはbashを前提とします。できるだけ多くのLinux(Unix)で動作するコマンドを掲載する方針で選定していますが、上記以外の環境をお使いの場合、設定やコマンドのバージョンによっては、動作結果が異なる(動作しない)可能性があります(掲載されているコマンドの実行結果画面は、Ubuntu16.04LTSのものです)。また、本書に掲載されている情報は、2016年9月時点のものです。実際にご利用になる際には変更されている場合があります。あらかじめご了承ください。
コンピュータという機器の性質上、本書はコンピュータ環境の安全性を保証するものではありません。著者ならびに講談社は、本書で紹介する内容の運用結果に関していっさいの責任を負いません。本書の内容をご利用になる際は、すべて自己責任の原則でおこなってください。
著者ならびに講談社は、本書に掲載されていない内容についてのご質問にはお答えできません。また、電話によるご質問にはいっさいお答えできません。あらかじめご了承ください。追加情報や正誤表などは、以下の本書特設ページに掲載いたします。
http://bluebacks.kodansha.co.jp/special/linux.html

本書で紹介される団体名、会社名、製品名などは、一般に各団体、各社の商標または登録商標です。本書では™️、Rマークは明記していません。

  • 目次・本文デザイン/島浩二

はじめに

あなたはLinuxを使ったことがありますか?多分あります。意識していないかもしれませんが。Linuxは、世界で最もたくさん使われている基本ソフトです。基本ソフト(OSとも呼ばれます)とは、WindowsやMac OS Xのように、コンピュータを動かすための「縁の下の力持ち」的なソフトウェアです。スマートフォンやタブレット端末のAndroidという基本ソフトは、実はLinuxをベースに作られています。Googleなどのインターネット検索エンジンで使われる基本ソフトの多くはLinuxです。テレビやDVDレコーダーの基本ソフトにもLinuxが使われており、選局や録画、編集、ハードディスクの管理などを助けてくれています。

たくさんのLinuxのお世話になっているからでしょうか、Linuxのことをもっと知りたい、使いこなせるようになりたい、という人が、少しずつ増えているようです。本書を手に取ったあなたもその1人でしょうか?

世の中には、Linuxの入門書がたくさんあります。それは、Linuxを習得したいのにうまくできない、という人が大勢いることの証拠でもあります(もし簡単に習得できるのなら、1冊の薄い定番の入門書があれば十分でしょう!)。なぜLinuxは難しいのでしょうか?

Linuxに関する細かいハウツー情報はネットでたくさん見つかります。たとえば「Linuxダウンロードインストール」のようなキーワードで検索すれば、Linuxをダウンロードしてあなたのパソコンにインストールすることは、簡単にできます(本当です!WindowsやMacでブラウザやUSBメモリを使うことができる人ならば)。Linuxを使っているうちに何かエラーが出たら、そのエラーメッセージを検索すれば、多くの場合、原因や対処法が見つかります。

でも、初心者がLinuxを学ぶときの障害は、そういうハウツー情報の不足ではなく、やっているうちに随所で感じる戸惑いや違和感であり、それは、「Linuxってなんでこうなんだ?」という、イライラした気持ちを伴った疑問なのです。ある意味、カルチャーギャップというか。

そういう疑問は、その場その場で無理に解消しようとせず、適当に「スルー」して、とにかくLinuxを学び続け、使い続けていれば、そのうちに自然に解消するものです。要するに、「習うより慣れろ」なのです。ところが、そう言われても、どうしてもいろんなことが気になってしまうのが人間です(特に、歳をとってくると!)。人間は、コンピュータと違って、正しい情報と指示を与えれば正しく働くというものではないのです!

本書は、そういう「人間らしい」あなたに、「とりあえず」納得して呑み込んでいただけることを目指します。あなたが、「ん?なんでそんなことするの?」「あれ、それだとなんかもやもやする」となりそうなところで、できるだけLinuxを支える文化や考え方をざっくり解説します。それは、ときには合理的な思想だったり、ときには単なる慣習だったりします。それを読んで、「とりあえずはそういう理解でいいのか、ま、それならそれでいいか」という気分になっていただけたら成功です!そして本書で「Linuxってこんなものか」「専門的だと思ってたけど、意外にできそう」「次は厚めの入門書を読もう」などの印象を持っていただけたらもっと成功です!
本書はWindowsやMacはそこそこ使えて(メール、ブラウザ、Officeソフトなど)、なんだかLinuxも面白そうだからいじってみたい、という人を対象とします。これから少しずつお話ししますが、Linuxには、素晴らしい機能がたくさんある一方、できないこと・やりにくいこと・とっつきにくいこともあります。ですから、本書はWindowsやMacを今すぐ捨ててLinuxに乗り換えよう!とすすめたりはしません。

Linuxの魅力は、「みんなが自由に使い、みんなで育てる」というポリシーや、社会の隅々まで浸透し続ける汎用性、時代を超えても揺るがない堅牢な設計思想など、多くの面にあります。私はLinuxやコンピュータの専門家ではありませんが、そのような魅力を味わった結果、Linuxが仕事や勉強に直接役立つようになりましたし、生き方やものの考え方にも良い影響を受けたと思います。あなたにも、そのような良い体験が訪れることを願っています。

本書の読み方

  • 本書はLinuxの考え方を体験的に、おおまかに理解していただく本であり、Linux全体を解説するという観点では偏りがあります。本書を読了されたら、より包括的なLinux入門書を読まれることをおすすめします。
  • 本書は、知識や考え方を次第に積み重ねるスタイルで作っていますので、本文はなるべく読み飛ばさずに順に読むことをおすすめします。ただし、「スルーで」とか「読み飛ばしても構いません」と書いてある箇所や、後述する演習問題は読み飛ばしてもOKです。
  • 理解を定着させるために、掲載されているコマンドを実際に打ち込んで試し、確認しながら読み進めてください。
  • 各章の最後に「チャレンジ!」として演習問題を載せています。これらは解かなくても後ろの章の理解には支障ありません。多くは、すでに学んだ知識を使ってちょっとした「イタズラ」をするような内容です。これらを通して、「なるほどLinuxはこういうふうに遊びながら学べばよいのか」と思っていただけたら嬉しいです。
  • できるだけLinuxの歴史・文化を尊重するように努めましたが、初心者がスムーズに読めるようにするため、あえて思い切って単純化して書いた箇所もあります。それらは歴史的な経緯や用語法と整合しないこともあります(たとえば、viのモードの説明等)。厳密さを求める人(特にLinuxのエキスパート)には、「それちょっと違うよ」と思われることがあるかもしれませんが、このような趣旨を理解してくださるよう、お願いいたします。

2016年9月著者

奈佐原顕郎 (著)
出版社: 講談社 (2016/10/18)、出典:出版社HP

CONTENTS

必ずお読みください
はじめに

第1章 Linuxとは?
Linuxはオープンソース
直感的な操作(GUI)と論理的な操作(CUI)
なぜLinuxを学ぶのか?
LinuxだけでOK?
Linuxのキーワード
まとめ そのうち慣れるから大丈夫!
チャレンジ!

第2章 Linuxを使ってみよう!でもどこで……?
WindowsやMacでなんとかしてLinuxができないか?
ハードディスクを付け替える
デュアルブート
仮想環境
Linux専用のパソコンを用意するのが、結局は楽
どのディストリビューションを使う?
Ubuntu Linux
脱線Raspberry Piという手もある
Ubuntu Linuxをインストールしよう
まとめ 意外に簡単だったインストール

第3章 シェル初体験!
ターミナルを立ち上げよう
コマンドを打ってみよう
コマンドに引数やオプションをつける
うまくいかないときはどうする?
打ち込んだコマンドを再利用しよう
コピー・ペーストを活用しよう
ストップしたいときは[CTRL]+[C]
まとめ あなたとUnixをつないでくれるシェル
チャレンジ!

第4章 ディレクトリディレクトリをめぐる旅はcdコマンドで
ディレクトリは入れ子の構造(ディレクトリ・ツリー)
ディレクトリの中身を見せてくれるIsコマンド
ディレクトリの作成(mkdir)・名前変更(mv)・削除(rmdir)
パス(path)は住所みたいなもの
まとめ ディレクトリの理解は、データを確実・効率的に管理する第一歩
チャレンジ!

第5章 ファイル
ファイルの中身を見るcatコマンド
テキストファイルは文字情報
バイナリファイルはテキストファイル以外のファイル
長い名前は補完機能で楽に入力
ファイルを作ってみよう
ファイルの名前変更・移動・削除
ファイル名に使ってはダメな文字
まとめ ファイルを制するもの、Linuxを制す
チャレンジ!

第6章 標準入出力
出力リダイレクトで画面以外に出力してみよう
上書き?追記?出力リダイレクトはどちらもできる
入力リダイレクトでキーボード以外から入力してみよう
パイプで出力と入力をつなげてしまう!
標準入出力
すべてのディレクトリとファイルを数えてみよう!
まとめ 標準入出力は働き者たちを束ねるベルトコンベア
チャレンジ!

奈佐原顕郎 (著)
出版社: 講談社 (2016/10/18)、出典:出版社HP

第1章

Linuxとは?

世の中は、さまざまなコンピュータであふれていますね。パソコンやタブレット、スマホだけでなく、自動車や家電の中にもコンピュータは入っていますし、その一方で、最先端の金融取引や科学計算の世界では巨大なコンピュータが活躍しています。それらは当然、性能も規模も仕様もさまざまですが、1つ共通していることがあります。それは、「基本ソフト」を載せないと動かない、ということです。「はじめに」でも述べましたが、基本ソフトとは、コンピュータを動かすための「縁の下の力持ち」的なソフトウェアです。

Linuxは、コンピュータの基本ソフトの一種です。そして、ありがたいことに、Linuxは、世の中のほとんどのコンピュータに載るのです。ということは、Linuxを知れば、あなたは多種多様なコンピュータを駆使する能力(の基礎)を獲得できるのです。素敵ですね!
では「Linuxを知る」にはどうすればよいのでしょう?何よりも、Linuxを使ってみるのがいちばんの早道ですし、本書もそのような方針で進めます。でも、やってみればわかりますが、Linuxに慣れるまでは、いろいろなところに落とし穴やちょっとした壁もあります。そういうときに投げ出さないで、もう少しLinuxとつきあってみようか、と思えるように、最初にLinuxの生い立ちや背景を知っておくのも悪くないと思います。というわけで、本当は長い「Linuxのドラマ」を、以下に短くまとめてみます。

昔々(Linuxが生まれるはるか前、1970年頃)、米国で、Unix(ユニックス)という素晴らしい基本ソフトが誕生しました。Unixはその後、いくつかの種類に分化し世界中に普及し、以来ずっと第一線で活躍しています。特に、スーパーコンピュータやグリッドコンピュータといった大型コンピュータや、インターネットを支えるサーバーコンピュータの中で使われています。

【質問】UnixやLinuxってどう発音するのですか?
【答】Unixは「ユニックス」です。Linuxは「リナックス」と発音する人と「ライナックス」と発音する人がいますが、どちらでもいいと言われます。ちなみに私は前者です。

基本ソフトは、コンピュータを使うための基盤ですから、よい基本ソフトができると、コンピュータの操作やソフトゥェアの開発がとても楽になるのです。Unixの中心的な開発者には、その功績によって2011年に日本国際賞(いわば日本版のノーベル賞)が贈られました。

【質問】日本国際賞を贈られたってことは、Unixは日本人が作ったのですか?
【答】いえ、違います。ケン・トンプソンとデニス・リッチーという米国人です。日本国際賞は、日本人に限らず、科学技術で世界的な業績を挙げた人を顕彰します。ちなみにLinuxを作ったのはリーナス・トーバルズというフィンランド人です。このすぐあとに出てくるフリーソフトウェア(オープンソースソフトウェア)を主導したのはリチャード・ストールマンという米国人です。ITの偉人といえばビル・ゲイツやスティーブ・ジョブズが有名ですが、上述の人達は、彼らに劣らない偉人達です。

一方、同じ頃、フリーソフトウェアとかオープンソースソフトウェア(あるいは略してオープンソース)という思想がソフトウェア開発者の間で生まれ、発展していきました。これは、「皆がよく使うソフトウェアは、そのソースコード(プログラムの設計図、というか実体そのもの)を秘密にせず完全にオープンにし、なおかつ、誰もがそれを無料(ただし一定のルールのもと)で利用したり改良できるようにしよう」という考え方です(あとでもう少し詳しく説明します)。これによって、多くの便利なソフトウェアが生まれ、育ち、普及していきました。

ところが、最も基本的で最も広く普及したソフトウェアであるUnixは、厳密な意味でのオープンソースではなかったのです。そこで、オープンソース版のUnixを開発するいくつかの試みが、1990年頃から始まりました。その中で、最終的に最も普及したのがLinuxだったのです。それまでは、大きなコンピュータにしか載らなかった有料のUnixが、Linuxという形で、パソコンの上に、しかも無料で載るようになったのです!

【質問】LinuxはUnixの一種、ということですか?
【答】ざっくり言えばそうです。たとえば日本語にもいろいろな方言があるように、Unixにもいろいろな種類のものがあります。ただ、Linuxは厳密にはUnixではない、という考え方もあります。この詳細は、インターネットで「UnixとLinux」をキーワードにして検索すると、いろいろわかります。

【質問】無料のUnixとしてLinuxができたら、商用のUnixは誰も使わなくなったのですか?
【答】いえ、そんなことはありません。商用Unixは、技術力の高いコンピュータメーカーが、自社製品の性能を最大限に発揮するために独自に作り込むので、用途によっては、今も立派に使われています。ただ、Linuxが広まってきたので、Linuxとの親和性を高めた商用Unixや、Linux同様にオープンソースとして無料で公開された商用Unixもあります。

【質問】基本ソフトって、Windowsとか、MacのOSXとかのことですよね。私のまわりではコンピュータといえばWindowsとMacです。本当にUnixやLinuxって使われているのですか?
【答】確かに、パソコンではマイクロソフト社のWindowsとApple社のMac OS Xが強いですね。でも、実は、OSXは、UnixをベースとしたOSなのです(Linuxではありませんが)!パソコン以外、たとえばスマートフォンやタブレットでは、AndroidというOSが最もよく使われていますが、AndroidはLinuxをベースとしたOSです。また、たとえば、世界最速のスーパーコンピュータのランキング(TOP500SupercomputerSites)では、2016年6月時点での上位500機のうちLinuxを採用したのはなんと497機、そして残りの3機はLinux以外のUnixでした。

Linuxはオープンソース

Linuxが世界中で支持され、普及しているのは、世界標準であるUnixを受け継いでいるだけでなく、前述のように「オープンソース」だからです。オープンソースをめぐる歴史とドラマにはさまざまなものがあり、本書ではとても書ききれませんので、「オープンソース」で検索してみてください。

ここでは簡単にオープンソースの利点を述べます。まず、どんなソフトも、開発者が、コンピュータのプログラミング言語を用いて組み立てていきます。その工程を「プログラミング」と呼び、その成果物を「プログラム」とか「ソースコード」と呼びます。これをもとに、機械的な処理がなされて、実行可能なソフトができるのですが、開発工程で最も重要で本質的なのは、プログラミングであり、その成果物であるソースコードなのです。ソースコードには、そのソフトに関するほぼすべての技術的情報が、詳細に、直接、記載されています。たとえて言えば、「宝島の地図」みたいなものでしょうか(ちょっと違う?)。

オープンソースは、この、開発者の血と汗と涙でできた大切なソースコードを、惜しげもなく他人に公開してしまおう、という考え方です。ソースコードがあれば、そのソフトは原理的に完全に再現できるので、これは、そのソフトを無料で配ってしまうことにもなります。ソフト開発を生業にする人にとっては、自虐的・致命的な行為のようでもあります。

ところが、オープンソースを推進する人はこう考えるのです。「コンピュータが世の中に欠かせないものになった今、皆がよく使うソフトは、自由に無料で開放するほうが、結果的にそのソフトが広く普及し、それを土台にして業界は発展する。それに、インターネットを通じて見ず知らずの人がソースコードの中に不具合を見つけて直してくれたり、もっと良いものを作ってくれるかもしれない」……いかがですか?まるで若者の青臭い理想主義のようですね。しかしこの考え方は、実際にうまくいっており、多くの優れたオープンソースソフトが誕生・普及するようになったのです。

オープンソースソフトは無料で自由に使える代わりに、整ったマニュアルや手厚いサポートセンターのようなユーザーサービスがあるとは限りません。だから、オープンソースを使うには「自助努力」が必要です。わからないことはユーザーが自分で調べ、考え、工夫するのです。そうやって問題を解決したら、インターネットを通じて、同じように困っている人に教えてあげるのです。つまり、「互いに助け合う」ことも大切です。オープンソースに惚れ込んだ人達は、そうやって、自分のできることをやりながら、オープンソースを一緒に作り、育ててきたのです。

【質問】無料のソフトって、信用できないイメージがありますが。
【答】そう考える人もたくさんいます。しかし、オープンソースは「質が悪いから無料」なのではなく、ポリシーがあって無料なのです。すべての技術情報を公開し、世界中の人に検証や改良をしてもらうのです。そうやって品質と安全性を確保するのです。

【質問】「世界中の人」と言ったところで、所詮、趣味やボランティアですよね。品質保証もないし、開発者が飽きたらおしまいなのでは?
【答】そうやって消えていったオープンソースソフトもたくさんあります。しかしLinuxくらいメジャーになると、その開発やサポートをビジネスにする会社も現れ、多くのプロの技術者達が本気で関わります。一方、商業的なソフトが長生きするとは限りません。企業が開発から撤退したらおしまい、という可能性もありますよね。

【質問】無料のソフトが普及すると、お金を出してソフトウェアを買う人がいなくなり、良い商用ソフトウェアが衰退してしまうのでは?
【答】そう考える人もいます。しかし、オープンソースは「公共財としてのソフト」なのです。公共財を無料で開放することで、社会の生産性が上がるのです。それは商業主義の否定ではありません。商業も公共財の上に成り立つのです。たとえば道路や橋という公共財が無料で使えるから自動車や自転車が商品として売れ、宅配便のようなサービスも成り立つように、基本的なソフトウェアが無料だからこそできるビジネスモデルもあるのです。商用ソフトやオンラインサービスも、オープンソースをうまく組み込めば、高品質のものを低コストで作れます。実際、GoogleやFacebookは、多数のオープンソースソフトを利用し、また、自らもオープンソースソフトの開発に貢献しています。そのように、オープンソースと商業は、必ずしも対立するのではなく、一緒に発展していくのです。

ところで、オープンソースは科学研究と相性がよいのです。科学では、重要な学説は、多くの人が再現したり確認しないと認められません。実験や理論の細部まですべて公開され、チェックできるようになっていること、すなわち「検証可能性」が科学の原則です。「凄いのができたけど、詳しいことは秘密」というようなものは相手にされないのです。ところが、研究の中で使われたソフトウェアのソースコードが公開されていなければ、その内部でどういう処理や計算をやっているのかわかりません。つまり、検証可能性が崩れてしまいます。だから、科学研究では基本的にオープンソースを使うべきだと私は考えています。

また、オープンソースは、学校、特に公立学校での教育とも相性がよいのです。特定の商用ソフトを使って教育すると、生徒達はその使い慣れた商用ソフトを将来的にも使いたがるでしょう。これは、公教育が特定の商品の普及を促すということであり、公正とは言えません。それに、商用ソフトを買う経済力の有無によって、教育格差が生じかねません。また、教育現場では人の出入りが激しいため、購入したソフトをライセンスどおり運用するのは難しいのです。たとえば、生徒が黙ってソフトのコピーを持ち出してしまうかもしれません。学校は、悪意がなくても、管理のミスによって、契約ライセンス数よりも多くのコンピュータに商用ソフトをインストールしてしまうかもしれません。もしソフトにコピー防止機能があればそういうトラブルはなくなりますが、コンピュータが壊れたりコンピュータを更新するときに、そういう機能が障害になって、ソフトを別のコンピュータにうまく移し替えることができないかもしれません。
オープンソースにはそのようなことが起きない(起きても問題にならない)のです。

直感的な操作(GUI)と論理的な操作(CUI)

さて、人がコンピュータを操作するには、人の意思を何らかの手段でコンピュータに伝えねばなりません。スマホやタブレットPCではタッチパネルを指でなぞりますね。パソコンではマウスを使ってウィンドウやアイコンをクリックしたりドラッグしたりします。これらは視覚的・直感的であり、多くの人にとって敷居の低いやり方です。
ところが、複雑で繊細な操作をしようとすると、これではうまくいかないのです。たとえば、
「フォルダ内のすべての画像ファイルを選び、各ファイルの作成日をファイル名の先頭に付け、backupという名前のフォルダにコピーする」
というような操作は、タッチパネルやマウスでは簡単にはできません。何かのアプリを使うにしても、どこにどのようなメニューがあり、どこのボタンを押し、どの数値を変えればよいのか、ということを、次々にドアを開けるように探っていく必要があります。
このような複雑で繊細な操作は、タッチパネルやマウスのように「直感的に操る」やり方ではなく、「言語的・論理的に操る」やり方が必要なのです。そこで、Unixでは、アルファベットの単語の羅列のようなコマンド(命令)をキーボードから打ち込むことで基本的な操作を実現します。たとえば、上述の操作はUnixでは以下のようなコマンドでやるのです。

どう見ても、面倒くさい、とっつきにくいやり方ですね。ところが、これこそが、多様で複雑・繊細な要求をシンプルで柔軟にコンピュータに伝えるという意味では、ベストなやり方なのです。
【質問】その例のコマンドは、シンプルどころかむしろ複雑に見えますが……。
【答】フォルダ内のすべての画像ファイルを選び、各ファイルの作成日をファイル名の先頭に付け、backupという名前のフォルダにコピーする」という文章と上のコマンドを比べてみましょう。語数や文字数は少なくなっています。つまり、やりたいことをまわりくどく言い換えたり視覚化したりせずに素直にコンピュータに伝えることができているのです。「シンプル」とはこういうことなのです。

【質問】でも、こんなの、どうやって思いつくのですか?
【答】この長いコマンドは、いくつかの短い基本的なコマンドからできています。それらを覚え、組み合わせ方を理解すれば、誰でも思いつくようになります。語学の勉強に似ていますね。でも、語学だと、数千の単語と分厚い文法書をマスターしないと使えませんが、Unixのコマンドなら、数十個の基本的なコマンドとシンプルな文法だけで大丈夫です。

【質問】ウィンドウやアイコンをマウスやタッチパネルでいじるほうが楽なような気がしますが?
【答】お寿司屋さんでたとえてみましょう。アイコンやマウスの操作は、流れてくるお寿司を選んで取る回転寿司みたいなものです。寿司の名前や種類をよく知らない外国人や子どもにはとても親切ですね。一方、あなたが寿司通なら、「今日のおすすめは?」「いいコハダが入ってますよ」「それもらおうかな、連れの子にはさび抜きで。それとシメ鯖を」「ごめんなさい、シメ鯖は今日はもう終わっちゃって」というようなやりとりを職人さんと交わしたいですよね。言葉というのは、このように繊細で柔軟で論理的なやりとりに向いているのです。コマンドの操作は、あなたと職人さん(コンピュータ)の間で「言葉でのやりとり」を実現するのです。
ウィンドウやアイコンをマウスやタッチパネルで操作するやり方を、GUI(graphical user interface)と呼びます。それに対して、コマンドをキーボードで打ち込んで操作するやり方をCUI(character user interface)と呼びます(CLI=command line interfaceとも呼びます)。

おおざっぱに言って、WindowsやMacはGUIがメインです。それに対して、UnixやLinuxでは昔からCUIがメインです。CUIのとっつきにくさから、世間では「UnixやLinuxは難しい」と思われている面があります。しかし現在では、UnixやLinuxにも、優れたGUIがありますので、「CUIを覚えないとUnixやLinuxを使えない」というものではありません。ただ、UnixやLinuxの「本来の」使い方は、CUIを基本にしたものなのです。
【質問】確か、Mac OS XはUnixだし、AndroidはLinuxだとさっき書いてましたよね?でもMacやAndroidでコマンドを打ち込んだりしませんよ……。
【答】それらの中では確かにUnixやLinuxが動いているのですが、それぞれ独自の優れたGUIを搭載しているので、ユーザーは普通、それだけを幸せに使っています。でも、MacをUnixとして使おうとするユーザーもたくさんいて、その人たちはMacにコマンドを打ち込んで使っています。

【質問】えっ?UnixやLinuxはCUIがメインなのでしょう?なら、「CUIを使わないUnixやLinux」って、何なのですか?
【答】CUIは、UnixやLinuxの強みの1つにすぎません。他にも、安定性(信頼性)や、オープンソースであること(Linux)、そして幅広い技術者層を持っていることも強みなのです。
CUIにも、短所があります。それは、長所の裏返しでもあるのですが、視覚的・直感的ではない、ということです。たとえばプレゼンテーションのスライドを作るときは、スライドの上の素材の配置、大きさ、色などを試行錯誤しながら決めていきますよね。そういう作業は画面上のものをマウスでぐりぐり操作できるGUIが便利です。画像や動画の編集もそうです。ホームページを閲覧するときも、画面上のリンクを手軽にクリックできるGUIのほうが便利です。「いや、それもCUIでできる!」という人もいますが、できる/できないの話でなく、多くのユーザーにとってどちらが快適かという観点では、そういう操作についてはGUIのほうが適しているのです。
要するに、GUIとCUIのどちらがいいかは、用途や目的によるのです。Linuxのよさは、もともと優れたCUIを持っていたところに、最近はGUIもよくなってきた、という点にもあるように思います。

【質問】CUIって、コマンドを覚えるのが大変そうです……。
【答】確かに、ある程度の数のコマンドを覚えないと使い物になりませんからね。でも、覚えてしまうととても楽ですよ。それには大きな利点もあります。それは、「覚えたことがほとんど陳腐化しない」ということです。Unixのコマンドの多くは、過去何十年も使われ続けており、今も現役です。将来も使われ続けるでしょう。一方で、どのOSも、GUIはまだ変化や発展が激しいです。WindowsのGUIがバージョンアップに伴って大きく変更されるたびに、「せっかく古いのに慣れたのに、新しくなって使いにくい!」という悲鳴をよく耳にしますが、Unixのコマンドにはそのようなことはありません。ちなみに私は本書を書くために、20年以上前のUnixの入門書を何冊も調べてみましたが、その中のCUIに関する記述は、今でもほとんどそのまま使えるものでした。

なぜLinuxを学ぶのか?

家庭用や業務用のアプリケーションソフトや周辺機器の多くはWindows向けです。なのに、なぜ我々はUnixやLinuxを学ぶのでしょうか?その答えは、いずれあなたにも明らかになるでしょう……と言っても満足していただけないでしょうから、私の体験を語らせてください。私は最初はUnixが嫌いだったのです。
1991年、私が大学4年生のとき、私のいた学科のコンピュータはすべてUnixでした。ある教官は「Unixは将来もずっと役に立つ」と言っていました。しかしMacが好きだった私には、UnixのCUIは面倒で仕方ありませんでした。「UnixなんてMacに負けて滅びてしまえ!」と悪態をつきながら(笑)、私は仕方なくUnixを勉強しました。
大学卒業後、私は地球物理学や森林科学、生態学などに首を突っ込んだ末、あの教官が正しかったことを知りました。人工衛星を使った研究で米国に滞在したとき、そこのメインコンピュータはUnixでした。シミュレーションソフトや大規模なデータ処理システムのほとんどがUnixで作られていたからです(今もそうです)。帰国後、研究費不足に悩む私を、今度は無料のLinuxが救ってくれました。おかげで私が大学で嫌々学んだUnixスキルの多くは今も現役です。一方で、MacがUnix(OSX)をベースにしたOSに生まれ変わってしまったことには驚きました。
UnixはWindowsもMacもなかった頃に生まれました。その後、Unixには多くの新技術が加わっていますが、大枠はほとんど変わっていません。それなのにUnixは時代遅れになっていません。それは、Unixがもともとよくできていたからであり、長い時間をかけて多くのユーザーに検証され、信頼を勝ち得た結果、もはや大きく変更する必要がないからでもあります。そのような状況を、よい意味で「枯れている」と表現します。Unixは、数十年前からすでに枯れており、今も輝く老舗なのです。
インターネットの普及とLinuxの出現で、Unixはますます隆盛です。UnixやLinuxを学ぶことで、何年たっても色褪せない、それどころか年を経るごとにますます輝くような知識や技能を得ることができるのです。

【質問】あなたの研究室の学生さんはみんなLinuxを使っているのですか?
【答】はい。全員、Linuxを中心とするオープンソースソフトを勉強し、使っています。だから、ソフトのライセンス維持の手間やコストはほぼゼロです。卒業するときは、彼らのデータと一緒に、ソフトもまるごと、コピーを持って行かせます。

LinuxだけでOK?

Linuxは素晴らしい!とはいうものの、あなたには、LinuxはWindowsやMacより優れているとか、何でもできる、と思っていただきたくはありません。実はWindowsやMacにも、Unix的な機能がありますし、LinuxではできないけれどWindowsやMacでは簡単にできることもたくさんあります。そこを誤解してWindowsやMacをすっぱり捨ててLinuxに移行すると、苦労しかねません。私自身は、ポリシーとして、可能な限りLinuxを使っていますが、それでも、Windowsでしか動かないソフトを使わざるを得ないようなとき(特に、計測機器を制御するとき)にWindowsも使っています。

【質問】WindowsやMacのソフトはLinuxでも動くのですか?
【答】ソフトによっては、Windows版やMac版と共にLinux版が出ているものもあり、それらは当然、Linuxで動きます。しかし、WindowsやMacだけに作られたソフトは、原則としてLinuxでは動きません。ただし、Linuxの上でWindowsのソフトを動くようにしよう!という夢のようなプロジェクトがあり、そこで作られている「Wine」というソフトの力を借りれば、Windows用のソフトがLinuxの上で動くこともあります。ただ、それにはトラブルがつきものですので、根気と技術力が必要です。
【質問】Linuxでは難しいことって、具体的には?
【答】最も困るのはOfficeソフト(表計算やワープロ、プレゼンソフト)です。LinuxではMS-Officeは走りません。代わりにLibreOfficeやApache OpenOfficeというオープンソースのオフィスソフトがLinuxで走りますが、あいにく、MS-Officeのファイルの再現性が今ひとつです。だから、MS-Officeユーザーとファイルのやりとりをするときに苦労します。また、LINEやiTunes、GoogleEarthプラグインはLinuxではほぼ使えません(GoogleEarth自体は使えます)。インターネットサービスプロバイダは、Linuxユーザーの存在をほとんど認識していませんので、自宅でネットにつなぐときにサポートセンターが頼りにならないということもあります。USBメモリや外付けハードディスクがWindowsやMacで暗号化されていると、Linuxでは読み書きできないことがあります。ネット上の一部の動画の再生もできません。プリンタやスキャナ、ネットワークカード(特に無線LAN)などの、いわゆる周辺機器も問題が起きやすいです。特に、新しい製品は、Linuxで使えないものがあります。少し時間がたてば使えるようになることも多いのですが、メーカーがLinuxでの利用をサポートすることは多くはありませんので、トラブル時にサポートセンターに相談してもらちがあきません。

【質問】えっ?新しいものは使えないのですか?感覚的には、むしろ「古いものは使えない」のが普通かなと思うのですが……。
【答】周辺機器メーカーは、周辺機器を制御するためのソフト(ドライバといいます)を、WindowsとMacのためにしか開発してくれないことが多いのです。そういうとき、Linux用のドライバは、例によって、Linuxのコミュニティの中で技術力と公共心を持った人がオープンソースとして開

奈佐原顕郎 (著)
出版社: 講談社 (2016/10/18)、出典:出版社HP

新しいLinuxの教科書

Linuxとその周辺も学べる!

自分の手を動かして実践しながらLinuxの学習を進めることができます。本書では、OSはUbuntuが推奨されています。基礎の基礎から解説されているため、Linuxを学びたいけどどこから手を付けていいか分からない、またその都度コマンドを調べながらLinuxを使っている方にお勧めの1冊です。

三宅 英明 (著), 大角 祐介 (著)
出版社: SBクリエイティブ (2015/6/5)、出典:出版社HP

 

はじめに

本書は、これからLinuxを学ぼうとしている初心者に向けたLinuxの入門書です。

Linuxについては、皆さんも一度は聞いたことがあるでしょう。Windowsなどと同じOS(オペレーティングシステム)の一種で、Webサービスやメールサービスなどを提供するためのサーバ用途から、家電製品や情報機器の組み込み用途など、多くの環境でLinuxが利用されています。また、Linuxはオープンソースソフトウェアとして無償で配布されていることから、プログラミングやコンピュータの動作を知るための学習環境としても優れています。

本書では、Linuxを学び始めた初心者を対象として、Linuxの基本操作について解説しています。また、合わせて「Linuxらしい考え方」についても紹介しています。Linuxをインストールしてみたものの、どのように使えば良いかわからないと困っている人でも、本書を読めばLinuxをLinuxらしく使えるようになることでしょう。

既に多くのLinux入門書が出版されていますが、本書では対象としてCLI(コマンドラインインタフェース)という、キーボードを利用した操作に絞って解説しています。そのため、GUI(グラフィカルユーザインタフェース)による、マウスを利用した操作はほとんど解説していません。これは一見、物足りなく感じるかもしれませんが、CLIを利用したシェルの活用こそがLinuxを使う上での重要な基礎となっています。そのため本書で得た知識は、これから先もずっと役立つものとなるはずです。実際、著者の我々がはじめてLinuxを学んだのは15年以上も前のことですが、当時学んだCLI操作の知識がLinuxを利用するさまざまな仕事に今もそのまま活用できています。

本書では主にCentOSを利用して実行例を示し、Ubuntuでは差異があるケースのみ適宜解説を追加するという形式で記述しています。ただし、本書で扱う範囲の内容はどのLinuxであっても基本的に共通ですから、あまり利用するLinuxの種類にこだわる必要はありません。CentOSやUbuntuなどのLinuxディストリビューション問の違いではなく、もっとLinuxの本質的な部分を学んで欲しい、というのが我々著者の思いです。

また本書はLinux入門書という位置付け上、Linuxをサーバとして利用するための運用管理の手法や、PHPやRubyなどを利用したLinuxでのアプリケーション開発については扱っていません。本書で学んだ知識を元に、読者の興味に合わせてそれらの分野に進んでもらえればと思います。読者が今後Linuxを利用してどのような分野に進むにしても、本書で解説していることは間違いなく必要となります。そのため本書の内容をきちんと理解しておけば、今後の学習もスムーズに進むことでしょう。

なお、最後に1つ言っておきたいことがあります。ここまで「学習」など堅苦しい言葉が続きましたが、Linuxは使っていてとても楽しく、面白いものです。本書の著者らも、Linuxを毎日とても楽しく使っています。ですから「Linuxを勉強する」というよりも、「Linuxを楽しく使う方法を知る」と考え、リラックスして気軽に本書を読んでいただければと思います。そして本書の内容が、読者のLinux理解への助力となれば幸いです。

最後に、本書を執筆するにあたっては伊能隆之氏にレビューを行っていただき、数多くのご指摘をいただきました。この場を借りてお礼を申し上げます。

2015年5月
三宅英明
大角祐介

サンプルファイルのダウンロード

本書のCHAPTER12、13、14では、Linuxでテキストファイルを扱うさまざまな方法を紹介しています。この際、本文中で利用しているサンプルファイル群については、以下のURLからダウンロードすることができます。

URL http://ozuma.sakura.ne.jp/linux/sample.tar.gz

自分でサンプルファイルを作るのが大変だと感じる方は、上記URLよりファイルをダウンロードして利用してください。

なお、Linuxでインターネット上のファイルをダウンロードするには、curlコマンドを使います。これは「curl -o<ファイル名>」の形式で利用します。次のように入力することで、sample.tar.gzというファイル名でダウンロードすることができます。

また、サンプルファイル群はtar.gzというファイル形式で配布しているため、ここからサン
プルファイルを取り出すために、次のようにtarコマンドを実行してください。

このtarコマンドについて、詳しい使い方はCHAPTER08で解説しています。この操作により、解凍されるファイルは以下のとおりです。

・file1
・file2
・file3
・drink.txt
・drink2.txt
・number.txt
・example.txt
・score.csv

三宅 英明 (著), 大角 祐介 (著)
出版社: SBクリエイティブ (2015/6/5)、出典:出版社HP

Contents

はじめに
サンプルファイルのダウンロード

Chapter 01
Linuxを使ってみよう

01 Linuxとは
Linuxの特長
Linuxの欠点

02 Linux環境を用意する
ディストリビューションとは
仮想化ソフトウェアでのLinux環境
Oracle VM Virtual Boxのインストール
CentOSのイメージファイルのダウンロード
VirtualBoxで仮想マシンを作成
CentOS 7のインストール

03 ログイン、ログアウト、シャットダウン
ログイン
GUIとCLI
ログアウト
シャットダウン

Chapter 02
シェルって何だろう?
01 シェルとコマンド
エラーについて
シェルの役割とLinuxカーネル
なぜカーネルとシェルが分かれているのか

02 プロンプト
プロンプト記号
ログインシェル
対話型操作とシェルスクリプト

03 シェルの種類
sh
csh
bash
tcsh
zsh

04 どのシェルを選ぶか
シェルを一時的に切り替える

05 ターミナルとは
ターミナルとシェル

Chapter 03
シェルの便利な機能

01 コマンドラインの編集
カーソルの移動
コントロールキーの使い方
行頭・行末へのカーソル移動
単語単位でのカーソル移動
文字の削除
カットとヤンク

02 トラブル時には
キーボードからの操作を一切受け付けない
コマンドが終了せず、プロンプトが返ってこない
プロンプトが文字化けしている

03 補完機能

04 コマンド履歴
コマンド履歴の検索

Chapter 04
ファイルとディレクトリ

01 Linuxはファイルからできている
ディレクトリとは

02 Linuxのディレクトリ構造
バス
Windowsとの違い
各ディレクトリの役割
カレントディレクトリとpwd

03 絶対パスと相対パス
絶対パス
相対パス

04 ディレクトリの移動
カレントディレクトリとcdコマンド
Tabキーによるバスの補完
ホームディレクトリとチルダ展開

05 Isコマンド
*と?
Isコマンドのオプション

06 コマンドのオプションについて
オプション指定の基本
引数を取るオプション
ロングオプション

Chapter 05
ファイル操作の基本

01 mkdirコマンド――ディレクトリを作成する
深いディレクトリを一気に作成する

02 touchコマンドーファイルを作成する
03 rmとrmdirコマンド――ファイル・ディレクトリを削除する
複数ファイルの削除
ディレクトリの削除
削除前の確認
空のディレクトリを削除する

04 catコマンド――ファイルを表示する
ファイルを連結して表示する
行番号を表示する
ファイルを指定しない場合

05 lessコマンド――スクロール表示する
ファイル内の検索

06 cpコマンドーファイル/ディレクトリをコピーする
コピーの際に、上書き確認をする
ディレクトリのコピー

07 mvコマンド――ファイルを移動する

08 Inコマンドリンクを張る
リンクとは
ハードリンク
シンボリックリンク
リンクの利用方法

Chapter06
探す、調べる

01 ファイルを探す
findコマンド-ディレクトリツリーからファイルを探す
locateコマンド-ファイル名データベースからファイルを探す

02 コマンドの使い方を調べる
-helpオプション
manコマンド-マニュアルを表示する

03 コマンドを探す
whichコマンド-コマンドのフルパスを表示する

04 日本語ドキュメントと英語ドキュメント

Chapter07
テキストエディタ

01 テキストファイルとバイナリファイル

02 Vim――デフォルトのエディタ
Vimのインストール
起動と終了

03 ファイルを開く/保存する
キー入力の注意
ファイルを開く
ファイルの保存

04 Vimの編集操作
カーソルの移動
文字の削除
文字の入力

05 便利なカーソル移動
単語単位でのカーソル移動
行頭/行末への移動
行番号での移動

06 カット、コピー、ペースト
デリート
プット
ヤンク
コマンドの組み合わせ

07 その他の操作
下の行と連結する
アンドゥ(元に戻す)とリドゥ(やり直し)

08 検索と置換
検索
置換

09ヘルプとドキュメント

Chapter 08
bashの設定

01 エイリアス
エイリアスの確認と削除
エイリアスを一時的に無効にする

02 bashのオプション
setコマンド
shoptコマンド

03 シェル変数
変数の設定
PS1-プロンプト設定
PATH-コマンド検索パス
LANG-ロケール
その他のシェル変数

04 環境変数
printenvコマンド-環境変数の表示
exportコマンド-環境変数の設定

05 bashの設定ファイル
/etc/profile、”/.bash_profile、”/.bashrc
設定ファイルの変更時の注意
設定ファイルの読み込み
コメント
bashのカスタマイズ例

Chapter 09
ファイルパーミッション、スーパーユーザ

01 ファイルのオーナーとグループ
グループ

02 ファイルのパーミッション
ディレクトリのパーミッション
chmodコマンド・ファイルモードを変更する

03 スーパーユーザ
suコマンドユーザを変更する
sudoコマンド-コマンドを別のユーザとして実行する
suとsudoのどちらを使うか

Chapter 10
プロセスとジョブ

01 プロセスとは
psコマンド-プロセスの表示

02 ジョブとは
コマンドを一時停止する
fgコマンド-ジョブをフォアグラウンドにする
bgコマンド・ジョブをバックグラウンドにする
ジョブの状態遷移

03 ジョブ・プロセスの終了
ジョブの終了
プロセスの終了
killコマンド-シグナルを送信する

Chapter 11
標準入出力とパイプライン

01 標準入力、標準出力、標準エラー出力

02 リダイレクト
標準入力のリダイレクト
標準出力のリダイレクト
標準エラー出力
標準出力と標準エラー出力をまとめる
リダイレクトによる上書き
/dev/null

03 バイプライン

04 フィルタ
フィルタの例-headコマンド
代表的なフィルタコマンド
コマンド組み合わせの例

Chapter 12
テキスト処理

01 wcコマンド――バイト数・単語数・行数を数える

02 sortコマンド――行を並べ替える
数値順にソート(-n)
逆順にソート(-r)

03 uniqコマンド――重複行を取り除く
重複行を数える

04 cutコマンド――入力の一部を切り出す

05 trコマンド――文字を変換・削除する
ファイル指定の注意
文字の削除

06 tallコマンド――末尾部分を表示する
ファイルへの追記を監視する

07 diffコマンド――差分を表示する
ユニファイド出力形式
差分の使い方とバッチ

Chapter 13
正規表現

01 grepコマンドと正規表現
正規表現って何?

02 文字にマッチするメタ文字
特定の文字を指定する

03 位置にマッチするメタ文字

04 繰り返しを指定するメタ文字
拡張正規表現とは
拡張正規表現による繰り返し回数の指定
繰り返し回数の指定をするメタ文字

05 その他のメタ文字

06 正規表現の利用

三宅 英明 (著), 大角 祐介 (著)
出版社: SBクリエイティブ (2015/6/5)、出典:出版社HP

Chapter 14
高度なテキスト処理

01 sedコマンド――ストリームエディタ
非対話型エディタとは
sedコマンドの形式
行を削除する
行を表示する
行を置換する

02 awkコマンド――パターン検索・処理言語
awkコマンドの形式
printとフィールド変数
パターンの指定
アクションの省略
実践例-CSVファイルからスコア集計

Chapter 15
シェルスクリプトを書こう

01 シェルスクリプトとは

02 シェルの選択
どのシェルのシェルスクリプトを書くべきか

03 シェルスクリプトを作成する

04 シェルスクリプトの実行形式
シバン
sourceコマンド-ファイルからコマンドを読み込んで実行する
実行方法による違い

05 シェルスクリプトを配置する
自分のシェルスクリプト置き場を作る
sourceコマンドとパス

Chapter 16
シェルスクリプトの基礎知識

01 シェルスクリプトの基本
シェルスクリプトの行
コメント

02 変数
変数の書き方の注意

03 クォーティング
クォート中の変数展開

04 コマンド置換

05 位置バラメータ
引数の個数
引数全体の参照

06制御構造
if文
testコマンドと演算子
for文
case文
while文

07 シェル関数
シェル関数内での位置パラメータ
シェル関数の終了ステータス

Chapter 17 シェルスクリプトを活用しよう
01 シェルスクリプトの活用
シェルスクリプトの欠点

02 演習1——日記を書くためのシェルスクリプト

03 演習2——指定したパス配下のファイル一覧表示
はじめの一歩
local-変数の有効範囲
再帰-自分自身を呼び出す
絶対パス表記からファイル名を取り出す
インデント
IFS-内部フィールド区切り文字

04 演習3——検索コマンド
xargsコマンド・標準入力からコマンドラインを組み立てて実行する
指定できる項目を増やして実用的に
ヘルプの表示
エラーメッセージの表示

Chapter 18
アーカイブと圧縮

01 アーカイプファイルと圧縮ファイル

02 tarコマンド——ファイルをアーカイブする
練習用ファイルの準備
アーカイブファイルの作成
アーカイブファイルの内容確認
アーカイブの展開
ファイルリストを表示するvオプション
ファイル属性の保持

03 gzipコマンド——ファイルを圧縮する
標準出力に9zipファイルを出力
tarとgzipを組み合わせる

04 bzip2コマンド——ファイルを圧縮する
tarとbzip2を組み合わせる
その他の圧縮形式

05 zipコマンドファイルをアーカイブ・圧縮する
zipファイルの作成
パスワード付きzipファイル

Chapter 19
バージョン管理システム

01 バージョン管理システムとは

02 Gitのインストールと初期設定
Gitの初期設定

03 基本的な使い方
リポジトリの作成
リポジトリにファイルを追加する
差分の表示と再コミット
変更の履歴を確認する

04 ワークツリーとインデックス

05 コミットの単位とインデックス

06 祭りから復旧する
ワークツリーに対する誤りからの復旧
誤ったコミットの復旧

07 ブランチを使う

08 リポジトリのバックアップを作成する

09 2人以上で作業する
共有のリポジトリを作成する

10 競合を解決する

11 Gitのマニュアル

Chapter20
ソフトウェアパッケージ

01 パッケージとリポジトリ

02 yumコマンド——パッケージ管理(CentOS)
基本的な使い方
パッケージのインストール
パッケージ間の依存性
パッケージの削除
パッケージを探す
パッケージの情報表示

03 aptによるパッケージ管理(Ubuntu)
基本的な使い方
パッケージのインストール
パッケージ間の依存性
パッケージの削除
パッケージを探す
パッケージの情報表示

Appendlx

01 リモートログインとSSH
SSH
VirtualBoxとssh接続

02 Infoドキュメントを読む
infoドキュメント形式
ノードの移動
スクロール
リンク(参照)

03 Linuxでの日本語入力について

04 參考文献

三宅 英明 (著), 大角 祐介 (著)
出版社: SBクリエイティブ (2015/6/5)、出典:出版社HP

Linuxコマンドブック ビギナーズ 第5版

Linux初級者から管理者レベルへ

Linuxを触ったことのない方でも理解できるように、基本的なところから丁寧に説明されています。基礎知識が学べるのはもちろん、コマンドの使い方やシェルスクリプトについても知識を身につけることができます。また、Ubuntu、CentOS、Fedora、Debianにも対応しています。

川口 拓之 (著), 田谷 文彦 (著), 三澤 明 (著)
出版社: SBクリエイティブ (2020/3/19)、出典:出版社HP

はじめに

以前は、コマンドを覚えることはLinuxを扱う上で避けて通ることのできない必須事項でした。現在では、GUI環境が充実し、コマンドを知らなくてもWindowsやmacOSといったOSと同じような扱いやすさでさまざまな作業を行うことが可能となっています。
しかしながら、GUIによる操作は,わかりやすい反面,画面上に見えるものしか扱うことができないという制約があります。対して、コマンドでの操作は、単純な機能を組み合わせることで、高度な機能を実現することができます。一度,コマンドの扱いを覚えると、GUIでは煩雑に感じられた操作がちょっとした工夫で簡単に実現できる楽しさを味わうことができます。また、クラウドコンピューティングが普及してきたことで、サーバー側の操作の際に,コマンドを利用する機会が増えてきたのではないでしょうか。
とはいえ、実際に初級者の方が最初に学ぶにあたって、敷居が高く感じられるのも事実です。本書は、Linuxのコマンドを学ぶ上で感じるとっつきにくさや難しさを少しでも緩和し、自然に身につけることができるように工夫をしています。
そのために、本書では膨大な数のコマンドを機械的に網羅するのではなく、日常的に使っていく上で有用であろうコマンドを選り抜き、使用目的ごとに掲載しています。また、各コマンドの解説を、具体的に試しながら学べる入門ページといつでも引けるリファレンスページに分けていますので,これからLinuxの使い方を覚えたい初級者の方から、リファレンスとして活用したい中級者の方まで、幅広い読者の方に長くご利用いただけるのではないかと考えています。初級者が中級以降へとステップアップし、さらにはシステム管理者になる手がかりとして利用していただけたら幸いです。
最後に、本書を執筆する機会を与えてくださった国立情報学研究所の佐藤一郎教授ならびに、共著者として共に労苦を味わってきた。前田雄一郎氏,伊藤真人氏、小巻賢二郎氏、小野斉大氏,下忠健一氏に感謝いたします。特に、本書の実現にあたって、編集・出版の労をとっていただいたSBクリエイティブの杉山聡氏に厚く御礼申し上げます。
2020年初春
著者一同

川口 拓之 (著), 田谷 文彦 (著), 三澤 明 (著)
出版社: SBクリエイティブ (2020/3/19)、出典:出版社HP

≪本書の読みかた≫

●動作環境について
本書のコマンドは、Ubuntu18.04 LTS,Ubuntu19.10.Fedora31,CentOS 8,Debian10で動作確認を行っています。Ubuntuについては,Ubuntu20.04の開発版でも確認しています。またシェルの内部コマンドはbashを採用しています。実行例や画面は,Ubuntu18.04LTSの表示を優先的に掲載しています。
リファレンスページのパス表記は,Ubuntu19.10,Fedora31,CentOS 8,Debian10のものです。Ubuntuは19.10から多くのコマンドのパスが変わりました。このバスがUbuntu20.04以降にも引き継がれると考えられるため,Ubuntu19.10のパスを表記しています。Ubuntu18.04 LTSでは多くのコマンドが、/usr/bin,/usr/sbinディレクトリではなく/bin,/sbinディレクトリにあります。
一部,標準ではインストールされないコマンドも紹介しています。パッケージなどでインストールが必要です。また,環境設定,コマンドのバージョンによって動作が変わる場合もあります。ご了承ください。

CONTENTS

第1章 Linuxの基本操作
ログイン
デスクトップの基本操作
コマンドの入力
ログアウト
シャットダウン
コマンドとオプション,引数
オンラインマニュアル
ファイルとディレクトリの概念
ファイル、ディレクトリの位置
絶対パス
相対パス
バス表記
ユーザ, グループ、パーミッション
本書を読み進めるにあたって

第2章 ファイルの操作
ロファイル名を表示する (is)
ロディレクトリを作成する (mkdir)
ロファイルの内容を表示する (cat)
ロファイルをコピーする (cp)
ロファイルを移動する (mv)
ロファイル名を変更する (mv,cp)
ロファイルを削除する (rm)
ロファイルの日付を変更する (touch)
ロカレントディレクトリを表示・変更する (pwd,cd)
ロディレクトリを削除する (rmdir,rm)
ロプログラムの存在するパスを表示する (which,whereis)
ロ端末の表示内容を消去する (clear)

第3章 プログラムの管理
ロバックグラウンドで実行する (&)
ロ実行中のプログラムを中断・終了する (Ctrl+ Z, curl+0)
ロ実行中のプログラムを表示する (jobs)
ロフォアグラウンドで実行する (fg)
ロ中断中のプログラムをバックグラウンドで再開する (bg)
ロプロセスの状態を表示する (ps)
ロプログラムを終了させる (kill,killall)
プロセスとは何か
OSによるプロセス管理
プロセスの親子関係
スレッドとプロセスの関係
ユーザによるプロセスの制御
ロ優先度を変更してプログラムを実行する (nice)
ロ特定の時間だけスリープする (sleep)
ロ指定した時刻に定期的にコマンドを実行する (crontab)

第4章 ユーザ・システム情報の表示・変更
ロ現在時刻を表示・変更する (date)
ロカレンダーを表示する(cal)
ロ自分のユーザ情報を表示する(whoami, groups, id)
ロログインしているユーザの情報を表示する (w)
ロパスワードを変更する (passwd)
ロディスク容量・使用量を表示する (df, du)
ロユーザのログイン履歴を表示する (last)
ロシステムの稼働時間を表示する (uptime)
ロシステム情報を表示する (uname)

第5章 高度なファイル操作
ロ長いファイルの内容を表示する (more, less)
ロファイルの先頭部分を表示する (head)
ロファイルの末尾部分を表示する (tail)
ロファイルの行を並べ替える (sort)
ロファイルのユニークな行を表示する (uniq)
ロファイル内の文字列を検索する (grep)
ロテキストファイルの大きさを調べる (WC)
ロ2つのファイルの内容の違いを調べる (diff)
ロファイルの所有者や所属グループを変更する (chown, chgrp)
ロファイルのパーミッションを変更する (chmod)
ロファイルを圧縮・解凍する (gzip, gunzip, bzip2, bunzip2,xz, unxz)
ロ圧縮ファイルを解凍して出力する (zcat, bzcat, xzcat)
ロファイルを格納・展開する (tar)
ロファイルに別名をつける (In)
ロファイルを検索する (find)
ロ日本語ファイルの文字コードを変更する (Nkf)

第6章 コマンドの便利な使い方
・標準入力と標準出力、標準エラー出力
ロコマンドの入出力をファイルに切り替える (<,>,>>,>&)
ロ2つのコマンドを組み合わせる (I,I&)
ロファイルと画面の両方に出力する (tee)
ロ引数を標準入力から与えて実行する (xargs)
ロコマンドを続けて実行する (;)

第7章 シェルとシェルスクリプトを使いこなす
・シェルとは何か?
・コマンドラインを編集する
基本的な操作
単語間のカーソルの操作
・コマンドラインの補完
「Tab]による補完
そのほかの補完機能
・複数のファイルやディレクトリを同時に操作する
“*”による0文字以上の任意の文字列の置換
そのほかのワイルドカード
・過去に実行したコマンドを再利用する
過去のコマンドを再実行する
ロコマンドヒストリを一覧表示する (history)
ロコマンドにエイリアス(別名)をつける (alias, unalias)
ロコマンドのタイプを調べる (type)
・シェル変数と環境変数
シェルの動作のカスタマイズ
ロ変数の値を表示する (echo)
ロシェル変数を表示する (declare)
ロ環境変数を表示する (printen)
ロシェル変数に値を設定する (=, unset)
ロ環境変数として変数を設定する (export, env.)
ロシェルの設定ファイルを読み込む (source)
・シェルスクリプト
シェルスクリプトの作成と実行
ロシェルスクリプトで変数を使う
ロシェルで条件判定する (if, case, [, test)
ロシェルで繰り返し処理をする,繰り返しのための数字の列を作成する (for,seq)
ロシェルでループ処理をする、さまざまな演算をする (while, expr)
ロシェルスクリプトでオプション指定を処理する (getopts)
ロシェルで関数を使う
ロ小数演算を行う (bc)
ロテキストデータを処理する (sed)
ロテキストデータからデータを抜き出す (awk)

第8章 ユーザとシステムの管理
ロスーパーユーザに変身する (su)
ロ別のユーザ権限でコマンドを実行する (sudo)
ロユーザを作成・削除する (useradd, userdel)
ログループを作成・削除する (groupadd, groupdel)
ロユーザやグループの一覧を表示する (getent)
ロシステムメッセージを表示する (dmesg)
ロサービスの設定や状態表示を行う (service, systemctl)
ロシステムを停止・再起動する (shutdown, reboot, poweroff)

第9章 ネットワークを使いこなす
・Linuxでのネットワーク接続
ロあるホストとの接続性を確認する (ping)
ロリモートホストへのパケットの経路を表示する (tracepath, traceroute)
ロホストのIPアドレスやドメイン名を調べる (host)
ロDNS情報を検索する (dig)
ロドメイン情報を取得する (whois)
ロより安全にリモートホストへログインする (ssh)
ロ指定したURLをダウンロードする (wget, curl)
ロファイルを転送する (ftp, Iftp)
ロより安全にファイルを転送する (scp, sftp)
ロネットワークインターフェイスを確認・設定する (ip addr, ifconfig, nmcli)
ロインターネットへの経路を設定する (ip route, route)
ロネットワークのソケット情報や接続状況を表示する (ss, ip link, netstat)
ロネットワークインタフェース上のトラフィックデータを表示する (tcpdump)
ロネットワークサービスを確認する (telnet)

第10章 ファイルシステムを使いこなす
・ファイルシステムとストレージデバイス
・パーティション
ファイルシステムをデバイス上に置く。
ロファイルシステムをマウントする (mount, umount)
ロパーティションを作成する (parted)
ロファイルシステムを初期化する (mkfs)
ロファイルシステムを検査する (fsck)
ロUSBデバイスの情報を調べる (Isusb)

第11章 パッケージのインストール
ロアプリケーションを追加・確認する [Ubuntu, Debian] (apt-get, apt-cache, dpkg)
ロアプリケーションを追加・確認する [Centos, Fedora] (dnf,rpm)

付録
ロテキストファイルを編集する (emacs)
emacsの主なコマンド一覧 (vi, vim)
ロテキストファイルを編集する
viの主なコマンド一覧
ブートローダ
GRUB2の起動画面
シングルユーザモード(読み込み専用)での起動方法
シングルユーザモード(読み書き可)での起動方法

索引

コラム目次
●LinuxのGUI環境
●端末画面のスクロール
●プロセスとジョブについて
●特別なプロセス:デーモン
●パスワードについて
●ハードウェアの情報を確認するコマンド
●正規表現
●ディレクトリのハードリンク数
●デバイスファイル/dev/null
●エスケープシーケンス
●プロンプトを変えるには
●コマンドサーチパスを設定する
●シングルクォーテーションとダブルクォーテーション
●端末上でのクリップボードの利用
●シェルスクリプトに使うシェル
●プログラミング言語としてのsed, awk
●sudoコマンドを使うための設定
●スーパーユーザのパスワードを忘れた場合
●ディレクトリサービスによるユーザ管理
●sshの公開鍵認証について
●論理ボリュームマネージャ(Logical Volume Manager)
●ファイルシステムのスナップショット
●パッケージ化されていないソフトウェアのインストール
●バッファの活用
●仮想化とクラウド

川口 拓之 (著), 田谷 文彦 (著), 三澤 明 (著)
出版社: SBクリエイティブ (2020/3/19)、出典:出版社HP

Linuxの絵本 サーバーOSが楽しくわかる9つの扉

楽しくてわかりやすいLinuxの入門書

いざLinuxを勉強しようと思っても、難しそう、理解できないかもしれないと考えてなかなか手を出せない方が多いのではないでしょうか。本書を読むことで、そのような不安は払拭されます。イラストが豊富でとても読みやすく、Linuxについての知識を簡単に身につけることができます。

株式会社アンク (著)
出版社: 翔泳社; 1版 (2020/1/20)、出典:出版社HP

はじめに

パソコンの購入を検討する場合、たいていの人はOSとしてWindowsかMacOSを選ぶのではないかと思います。しかし、大学や会社、Webサーバーなどの分野などでは以前からUNIX系のOSがよく使われています。そのUNIX系OSの中でも特に普及しているのがLinuxです。近年はデスクトップ環境やインストーラが整備されたため、個人のパソコンにインストールして利用する人も増えてきました。また、Linuxをベースに作られたAndroidはスマートフォンやタブレットのOSとしてよく知られているところです。
Linuxの特徴の一つとして、ユーザー自身がきちんとOSを管理する必要がある点が挙げられます。元々コマンド入力による管理や操作(CUI環境)が中心だったため、デスクトップ環境であってもコマンドの知識が必要になることもしばしばあります。慣れないうちはコマンド入力に対する抵抗感は拭いきれないことでしょう。そのような場合にLinuxの基礎固めとして本書がお役に立てるのではないかと思います。
本書は2005年に刊行した『UNIXの絵本」を、対象をLinuxに絞り込む形で改訂したものです。コマンドラインによる基本操作から、システム管理、日本語の話など、さまざまなテーマについて、イラストや図を使ってわかりやすく解説しています。Linuxにはいろいろな種類(ディストリビューション)がありますが、本書では特に人気のあるCentOS 8とUbuntu 1904の利用を想定しています。
本書がLinuxの理解の一助となれば幸いです。
2019年11月
著者記す

株式会社アンク (著)
出版社: 翔泳社; 1版 (2020/1/20)、出典:出版社HP

≫この本の特徴
■この本は見開き2ページで1つの話題を完結させ、イメージがバラバラにならないように配慮しています。
また、後で必要な部分を探すのにも有効にお使いいただけます。
■もちろん、解説だけで終わらないように、具体的なコマンドの入力例や実行例についてもなるべく多く載せるようにしています。ただし、環境によってはこの本で紹介しているツールが使えない場合や、コマンド入力の結果が同じにならない場合もありますので、あらかじめご了承ください。なお、この本に登場するCUI環境は、本書でも紹介している仮想環境であるVirtual Box上で構築したものです。Windowsなどに比べると周辺機器のサポートがあまり進んでいないため、お使いのパソコンなどの環境によっては使えない場合があるかもしれません。周辺機器の具体的なサポート状況は各メーカーに問い合わせてください。
■付録では、Virtual BoxやCentOS、Ubuntuのインストール手順や、本文で登場したコマンドの主なオプションなどを資料として掲載していますので、本書を読み終わった後で実際に作業する際などにご利用ください。

≫対象読者
この本は、Linuxの知識を持っていない方を対象にしています。名前だけは聞いたことがあるという人や、勤務先などに環境はあるけど触ったことがない、という人はぜひこの本を読んでみてください。また、勤務先の環境に触ろうとした、あるいはLinuxを自分のパソコンに導入しようとして挫折してしまった、という方にも役立つはずです。

≫表記について
この本は、以下のような約束で書かれています。
【例と実行結果】

【書体】
ゴシック体:重要な単語List Font:コマンド入力に実際に用いられる文や単語List Bold
Font:コマンド入力の例や実行結果の中でも重要なポイント
【その他】
この本では、CUI環境でのコマンド入力を基本にして話を進めていきます。ディストリビューションによって、インストールした直後からGUI環境になっている場合がありますが、その場合には、CUI環境にしたうえでこの本をご利用ください。

Contents

Linuxの勉強をはじめる前に
●OSの役割
●CUIとGUI
●UNIXとUNIX系OS
●Linuxについて
●BSD系UNIXについて
●コンソールという考え方・
●意外に身近なLinuxの世界
●仮想環境
●VirtualBoxの使い方
●CentOSの使い方
●Ubuntuの使い方

第1章  Linuxを使ってみよう
●第1章はここがKey!
●コマンドによる操作
●ログインとログアウト
●カーネルとシェル
●いろいろなシェル
●ファイル
●ディレクトリ
●パスと拡張子
●ファイルシステム
(コラム)~ファイルの圧縮と解凍~

第2章 基本的な制御
●第2章はここがKey!
●コマンドの基本
●パスの書き方
●基本的なコマンド(1)
●基本的なコマンド(2)
●基本的なコマンド(3)
●基本的なコマンド(4)
(コラム)~ワイルドカード~

第3章 エディタを使いこなす
●第3章はここがKey!
●テキストエディタ
●viの起動と終了
●viのモード変更
●viの基本操作(1)
●viの基本操作(2)
●検索と置換
●保存と終了
(コラム]~vi以外のエディター~

第4章 一歩踏み込んだLinuxの使い方
●第4章はここがKey!
●標準入力と標準出力
●リダイレクト
●パイプ
●ファイル関連のコマンド(1)
●ファイル関連のコマンド(2)
●ファイル関連のコマンド(3)
●メモリとディスクのコマンド
●ユーザー関連のコマンド(1)
●ユーザー関連のコマンド(2)
●パーミッション(1)
●パーミッション(2)
●シェルスクリプト(1)
●シェルスクリプト(2)
●マルチタスクとプロセス制御
(コラム)~オンラインマニュアルの参照~

第5章 システムとユーザーを管理する
●第5章はここがKey!
●システム管理者
●システム管理について
●ネットワークコマンド
●ネットワークの設定
●日時の設定
●ユーザーの作成と削除
●グループ管理(1)
●グループ管理(2)
●シャットダウントとリブート
●ユーザー環境の設定
●パスの設定
(コラム)~cron~

第6章 GUIを使ってみよう
●第6章はここがKey!
●Waylandとは
●統合デスクトップ環境
●基本操作(1)
●基本操作(2)
(コラム)~X Window System~

第7章 日本語環境
●第7章はここがKey!
●文字コードと言語環境
●ロケール
●日本語の表示と入力
(コラム)~マルチバイト文字~

第8章 高度な操作
●第8章はここがKey!
●SSHによる遠隔操作
●SFTPによるファイル転送
●アプリケーションの導入
●パッケージ管理システム
●dnfによるアップデート
●ログの管理
(コラム)~VNC~

付録
●仮想環境のインストール
●CentOS8のインストール
●CentOSで日本語入力できるようにする
●Ubuntuのインストール
●ドライブのマウント
●主なファイル形式
●主要ディストリビューション
●正規表現
●その他のトピック
●Linuxの主なコマンド

さくいん

奥付

はじめる前に

《OSの役割》
普段の生活の中でパソコンに関して、「Windows」や「Mac」といった言葉を耳にすることがあると思います。「Windows」や「Mac」というのは、OS(Operating System)と呼ばれるものの種類を表しています。
OSとは、コンピュータ(個人向けに限らずサーバーなども含めたコンピュータ全般)を動かすのに必要なソフトウェアのことです。WindowsやMacもバージョンアップによって新しいものと入れ替えられるため、簡単に交換できるもののように感じたり、あるいは存在するのが当たり前すぎて特に意識していなかったりする人もいるかもしれません。しかし、OSとアプリケーションはまったく違うものです。
ワープロソフトや表計算ソフトなどは、OSを通してコンピュータとつながっています。アプリケーションは、私たちが目的に応じた作業を行うための道具であり、これらは、OSがなければ利用できません。たとえば銀行のATMにもOSは必要ですし、スマートフォンやタブレットにも専用のOSが入っています。このように、OSは私たちがコンピュータを使ううえでなくてはならない、とても大切なものです。本書で学習していくLinuxもそのOSの一種です。
《CUIとGUI》
OSの見た目の違いとして、キーボードを使ったコマンド(コンピュータと直接やり取りを行うための命令文)の入力によって操作するCUI(Character User Interface)環境と、マウスを使ってファイルやフォルダを操作するGUI(Graphical User Interface)環境の大きく2つに分類できます。
初期のOSはみんなCUIでしたが、やがてMacやWindowを代表とするGUIを備えたOSが主流になってきました。GUIは状態や設定方法がわかりやすいのが特徴ですが、CUIにも、必要とするリソース(メモリやディスク領域)が少なくて済む、セキュリティが比較的強固で、処理を自動化しやすいといったメリットがあります。そのため、あえてGUIを採用しなかったり、GUI環境の中でCUIを動かしたりする場合もあります(WindowsのServer Core/コマンドプロンプト/Windows Power Shellなど)。
◆CUI
文字ベースの実行環境をCUI(キャラクターユーザーインターフェイス)といいます。
◆GUI
グラフィックを使用し、ユーザーが直感的に操作できる実行環境をGUI(グラフィカルユーザーインターフェイス)といいます。

《UNIXとUNIX系OS》

まずは、UNIXというOSの話から始めましょう。

UNIXは元々、アメリカAT&T社のベル研究所で開発され、大きく分けて2つの路線で発展してきました。ひとつは、ベル研究所の作ったUNIXを受け継ぐSystem V系と呼ばれるもので、もうひとつは、カリフォルニア大学バークレー校で開発されたものを受け継ぐBSD系です。

UNIXは、専用のワークステーションなどで動作するものでしたが、これらを個人向けのパソコンで動作するように移植したものをPC-UNIXと呼びます。LinuxはPC-UNIXの代表ですが、UNIXのソースコードを流用していないため、UNIX系OSと呼ばれることもあります。

UNIXの他の分類方法としては、研究機関向けに公開された情報をもとに、大手コンピュータメーカーが自社コンピュータ製品向けに商品として開発・販売してきたもの(商用UNIX)と、有志ユーザーが協力し合って開発を続け、基本的には無償で提供することを前提としているものがあります。

UNIXの系譜

《Linuxについて》
現在、一般ユーザーが触れる機会が最も多いUNIXといえば、やはりLinuxでしょう。
Linuxは、開発当時フィンランドの大学院生だったLinus Torvalds氏によって開発されたPC-UNIXの一種です。彼が作ったのはOSの核となる「カーネル」(8ページ参照)の部分です。オープンソースとしてソースコードが無料公開され、現在も、世界中のユーザーによって改良が続けられています。
≫オープンソース
ソースコード(プログラムの元になるもの)を一般に公開し、誰でも自由に使える状態にすることをオープンソースといいます。企業が開発したソフトウェアの場合、その利益を確保するためにソースコードを非公開にするのが一般的です。そのため、その企業の利益にそぐわないような開発は行われなくなる反面、企業の責任の範囲内においては手厚いサポートを受けられます。これに対して、オープンソースのソフトウェアは、ユーザーによって支持される限り、迅速かつ効果的な改良や新機能の開発が継続されるというメリットがあります。その一方でサポートやサービス面で行き届かないこともあります。
◆オープンソース
・ユーザーの立場から見て純粋に便利と思えるものを迅速に実現できる
・ユーザーの声が届きやすい
・企業のようなサポートは期待できない
◆企業開発
・企業の利益優先
・場合によってはユーザーの声が届きにくい
・サポートが充実している
≫ディストリビューション
Linux自体はオープンソースですが、実際は、企業や団体が独自のツールやサポートなどのサービスを付け加えて、パッケージを作っています。これをディストリビューション(配布形態)と呼びます。
ディストリビューションには実にたくさんの種類があるのですが、大きく分けて、Debian系、RedHat系、slackware系に分かれます。同じ系統のディストリビューションではパッケージ管理(144ページ参照)の方法が共通しています。有名なディストリビューションには、Debian系のUbuntu、RedHat系のCentOSなどがあります。そのうち、本書ではCentOS8をベースにして解説を行います。
多くのディストリビューションは無償でインターネットからダウンロードできますが、主に企業向けに販売してサポートを手厚くしているものもあります。たとえば、RedHatは元々無償のディストリビューションでしたが、路線変更して有償のRed Hat Enterprise Linux(RHEL)となりました。
◆有名なLinuxのディストリビューション

株式会社アンク (著)
出版社: 翔泳社; 1版 (2020/1/20)、出典:出版社HP

[改訂第3版]Linuxコマンドポケットリファレンス

ひと目で確認!

Linuxコマンドが体系的にまとまっているので、その都度ネットで調べるよりも効率が良いです。辞書的な感覚で、豊富な情報を扱うことができます。Linuxを使う方は、ぜひ手元に置いていただきたい1冊です。

沓名亮典 (著)
技術評論社 (2015/6/5)、出典:出版社HP

はじめに

UNIXの基本思想の1つに「keep simple」があります。この「keep simple」は OSに用意されているコマンドそれぞれの機能がシンプルであることを意味します。しかし、実際はオプションなどの使用方法が複雑である場合が多く、ユー ザにとっては本当にシンプルとは言えません。

コマンドのオプションなどを駆使するためには、使うコマンドがどのような動きをするのか理解しておく必要があります。しかし、コマンドに与えるオプションや 引数などは使用頻度が高いものでないとなかなか覚えられません。また、コマン ドにはそれぞれマニュアルが用意されており、近年マニュアルの日本語化も進み ましたが、まだまだわかりにくいものも存在します。

本書もおかげさまで改訂第3版までこれました。初版では「著者が欲しいコマンドリファレンス」をコンセプトに、できるだけわかりやすく書くことを目標にしました。今回は「使えるコマンドリファレンス」を目標に、わかりやすさは変わらずに、さらに実用的なサンプルを厳選/充実させました。また、利用しているLinuxディストリビューションになるべくとらわれずに多くの方の手にとっていただけるよう、複数のLinuxディストリビューションでのコマンドの実行テストを行っています。Linux経験者でも未経験者でも、この本を手にとり、めくったページの サンプルが業務や趣味の助けになり、新たな発見があれば幸いです。

この執筆の機会を与えていただき、遅れる脱稿を辛抱強く待ってくれた技術 評論社編集者の春原さんに感謝します。本書のレビューを引き受けてくれた飲み仲間の助台良之さん、同僚の安藤葉子さんと高田芳和さんに感謝します。お かげで最高の1冊ができました。また、本業から帰ってきたあとや、休日にPCに 向かって執筆する私を温かく見守って支援してくれた妻と無邪気な笑顔で邪魔 しにきてくれた娘に感謝します。あなた達のおかげで最後までがんばれました。

著者 沓名亮典

沓名亮典 (著)
技術評論社 (2015/6/5)、出典:出版社HP

本書を使用する前に

キーフォントについて
本文や表内に以下のようなキーフォントが登場します。

セクション番号
本書では、コマンドやオプション関数などを「man(1)」のように表記しています。 「man(1)」の「(1)」はセクション番号を示します。この番号には以下に示す意味があります。
●セクション番号

本書の見方
本書は大きく分けて、タイトル/書式/本文/使用例で構成されています。以下に各パ ートの見方を示します。

タイトル

①コマンドの用途を示す
②コマンド名を示す
③用途が似ているコマンドなどを記載
④対象コマンドがどのパッケージに対応しているか、ディストリビューションごとにそのパッケ ージを記載
(注)DはDebian/GNU Linux、UはUbuntu、FはFedora、CはCentOSを表す。なお「シェル組込み」はbashシェルでの組み込みを示す

書式

①コマンドの構文。省略可能な場合は[ ]を付加
②オプションを示す。同じ用法のオプションが複数ある場合は、ショートオプションを上段、ロングオプションを下段に記載

使用例

①太字はユーザが入力する部分を示す
②細字は表示結果などを示す
③色文字は該当部分についての説明を示す
④使用例が複数ページにわたることを示す
⑤はさみマークは以下省略の場合を示す
(注)コマンド行が複数行にわたる場合は、行の最後に (バックスラッシュ)を入れている

目次

はじめに 本書を使用する前に
本書の見方
目次
アルファベット順索引

Linux を使いこなすための基礎知識

■ Linux とは
■コマンド実行前の注意事項.
ユーザの権限
コマンドの入力方法
システムの終了方法
■コマンドの実行方法 .
オプション
引数
PATH
アクセス権
■コマンドの探し方
コマンドの使い方を調べる
■標準入力/標準出力/標準エラー出力
■エディタの使い方 (vi)
vi のモード
vi の基本操作
■エディタの使い方 (nano)
nano の基本操作。

コマンド編

エディタ/ページャ
テキストファイルの内容を表示するless
さまざまな言語や文字コードのテキストファイルを表示する lv
行単位でテキストファイルを編集するed

ファイル/ディレクトリ管理
ディレクトリの内容を表示する Is
ファイルやディレクトリのリストを木構造で表示するtree
作業ディレクトリを移動する cd
作業ディレクトリのパスを表示する pwd
ファイルやディレクトリを移動/名前を変更する mv
ファイルやディレクトリをコピーする cp
ファイルをコピーしてアクセス権限を設定する install
ファイルを変換してコピーする dd
ディレクトリを作成する mkdir
空のディレクトリを削除する rmdir
ファイルやディレクトリを削除する rm
ファイルを安全かつ完全に削除する shred
空ファイルを作成する/アクセス時刻を変更する touch
ファイルの種類を判定する file
ファイルやファイルシステムの状態を出力する stat
ファイルへのリンクを作成する In
シンボリックリンク先を表示する readlink
ファイルやディレクトリのアクセス権限を変更する chmod
ファイル所有権やグループ所有権を変更する chown
ファイルのグループ所有権を変更する chgrp
ext2/ext3/ext4 ファイルシステム上のファイル属性を表示する Isattr
ext2/ext3/ext4 ファイルシステム上のファイル属性を変更する chattr
ファイル作成時に所有権のマスク値を変更する umask
条件を絞ってファイルを検索する find
入力を引数にしてコマンドを実行する xargs
コマンドのフルパスを表示する which
ファイル名データベースからパターンに合ったパスを出力する locate
ファイルパスからファイル名のみを表示する basename
ファイルパスからファイル名を除去して表示する dirname
1つのファイルを複数のファイルに分割する split
ファイルを指定したサイズに切り詰める/拡張する truncate
MD5/SHA1 メッセージダイジェストを出力する md5sum/sha1sum
バイナリファイルをテキストファイルに変換/復元する uuencode/uudecode
入力を Base64 エンコード/デコードして出力する base64
形式アーカイブを作成/展開する tar
gzip形式アーカイブに圧縮/展開する gzip/gunzip
bzip2 形式アーカイブに圧縮/展開する bzip2/bunzip2
複数のファイルをまとめてZIP 形式アーカイブに圧縮する zip
ZIP 形式アーカイブを展開する unzip
LHA 形式アーカイブを展開する lhasa
RAR 形式アーカイブを展開する unrar
アーカイブへコピーする/アーカイブからコピーする cpio
ディレクトリをスタックに追加/削除/表示する pushd/popd/dirs
一時ファイル/ディレクトリを作成する mktemp
ファイル名の文字コードを変換する convmv

パッケージ管理
RPMパッケージを管理する rpm
RPM パッケージ形式から cpio ファイル形式に変換する
rpm2cpio
a
依存関係を含めて RPM パッケージを管理する deb パッケージを管理する apt パッケージのメタデータを処理して情報を出力する apt ライブラリを使用してパッケージを管理する (aptitude) apt ライブラリを使用してパッケージを管理する (apt-get) バイナリパッケージを他のフォーマットに変換する
yum
dpkg pt-cache aptitude
apt-get a lien
■ ユーザ管理
ユーザアカウントを作成する (パスワード設定無し)
useradd
adduser
ユーザアカウントを対話的に作成する ユーザアカウントを削除する
userdel
ユーザアカウントを削除、グループの所属から削除する
deluser
ユーザアカウント情報を変更する
usermod
グループを作成する
groupadd
グループを削除する
groupdel
グループの設定を変更する
groupmod
ログインシェルを変更する
chsh
ユーザ情報を変更する
chfn
ユーザのパスワードを変更する
passwd

沓名亮典 (著)
技術評論社 (2015/6/5)、出典:出版社HP

イラストてでそこそこわかるLinux コマンド入力からネットワークのきほんのきまで

知識ゼロでも分かる!

Linux初心者向けに、基礎の基礎から解説されています。図解も豊富で、かなり分かりやすいです。VisualBox上でCentOSを動かしながら読み進めることができます。Linuxの入門書として最適の1冊です。

はじめに

UNIXが作られてから、そろそろ50年が経とうとしています。

動作環境やカーネルが変化しつつも、基本的には同じ(系統の)OSが使われ続けているというのは、まさに驚異といえるでしょう。

本書でも触れているようにUNIX自体の変遷はいろいろありましたが、そのなかでも大きな出来事といえば、「Linux」の登場と普及でしょう。

Linuxはさまざまな形(ディストリビューション)で配布されており、特にDebian系のUbuntuとRedHat系のCentOSがよく使われています。サーバーやインフラの世界ではRedHatやCentOSがよく使われているため、本書もCentOSを前提に説明しています。

筆者が最初にLinuxに触れたのは、Slackwareというディストリビューションでした。このSlackware、インストーラーはありましたが、現在のもののように使いやすいものではなく、周辺機器ひとつひとつについても質問に答えてインストールしていく形式のものでした。インストールするだけでもかなり大変だった記憶があります。

その後、自宅に光回線を導入したところ固定的IPアドレスがついていたので、「サーバーを建てる」、いわゆる「自宅サーバー」で遊ぶことをはじめました。このときはRedHatでサーバーを構築したのですが、思い返すと、このときの経験がとてもいい勉強になりました。

本書では、Oracle社が提供しているVirtualBoxという仮想化アプリケーションを使い、そのなかで本書用に用意したCentOSを動かしていきます。この学習環境を通じて、Linuxの操作を実体験できるように構成しています。

Linuxを学ぶには、とにかく「手を動かす」ことが最善の手段です。仮想環境なので、何度でも再インストールできます。失敗を恐れず、どんどん手を動かして、基本的な知識を身につけていってください。

河野 寿

本書は2016年1月に刊行した下記タイトルを、よりLinuxの基本を学びやすいように加筆・修正したものです。
「イラストでそこそこわかるLPIC1年生」(翔泳社)

本書の使い方

本書は、「見るだけでLinuxの操作がある程度わかる」というコンセプトのもとにつくられています。マンガや図解イラスト、Pointをチラッと見れば、何が行われているのか、どういう動作をするのかを把握できます。

VirtualBoxの仮想環境上でLinuxを動かしてコマンドを入力すれば、さらに理解が深まります(VirtualBoxや本書付属のCentOSのダウンロード・インストール方法については、第1章の「06」をご覧ください)。

●マンガ
Linuxの抽象的な概念を、まずはマンガでなんとなく理解しましょう。
●注意
本文やPointで解説しきれない、注意すべき点等について述べています。
●マメ知識
覚えておくと役に立つキーワードなどを解説しています。

●本書の主な読者対象
・いままでLinuxを使ったことがない人
・Linuxを使ったことはあるけれど、コマンドでの操作経験はない人

●本書の執筆環境
<マシンスペック>
・OS:Windows 10 Pro 64bit
・メモリー:32GB
・ハードディスク:20TB
・CPU:Intel CPU Core i5-7600K

・VirtualBoxのバージョン:VirtualBox6.0.14
<学習に使用しているLinux>
・本書付属のCentOS 7.7

●Point
わかりにくいコマンド等を、引出線や図でやさしく解説しています。
●コマンド例
コマンドの実践例を濃い色アミで示しています。
●実行結果の例
コマンドの実行結果の例を薄い色アミで示しています。実行するタイミングや環境によっては、この通りに表示されないこともあります。

もくじ

はじめに
本書の使い方
付属データのご案内
会員特典データのご案内

第1章 学習をはじめる前に
01 縁の下の力もち、それがOS、それがLinux(リナックス)だ
01-1 ソフトウェア=応用ソフトウェア+基本ソフトウェア
01-2 LinuxはOSです。サーバー関係のアプリケーションで実績あり
02 Linuxに歴史あり
02-1 LinuxはUNIXをベースにつくられた
02-2 オープンソースのLinuxは急速に発展した
03 LinuxはサーバーOSとしてその力を発揮する
03-1 サーバーとクライアント
03-2 サーバーOSとして定評のあるLinux
03-3 サーバーの代表的なアプリケーション
04 Linuxはゴージャスとシンプルの2つの操作方法をもつ
04-1 WindowsやスマートフォンのようなゴージャスなLinux
04-2 文字しか扱えないシンプルなLinux
04-3 実はシンプルLinuxが主流なのです!
05 ディストリビューションから最適なLinuxを選択する
05-1 Linuxのインストールはディストリビューション選びから
05-2 ディストリビューションはネットや雑誌、量販店でゲット
05-3 ディストリビューションの種類
05-4 コストとサポートが選択のポイント
05-5 コストは有料か無料か
05-6 業務の規模によってはサポート期間が最優先
06 ディストリビューションをインストールしよう
06-1 まず、インストールに必要なハードウェア要件を確認
06-2 定石はネットからダウンロードあるいはDVD-ROMで
06-3 USBメモリを使う
06-4 DVDで起動する
06-5 使わなくなったパソコンを復活させる
06-6 マシンいらずの仮想化アプリケーションを使う
06-7 VirtualBoxにLinuxをインストールする
06-8 VirtualBoxを終了する
06-9 インストールの際の注意点
第1章 練習問題

第2章 Linuxにさわってみよう
07 スタートはログインから
07-1 起動とログイン
07-2 インストールしたVirtualBoxを使ってログインする
08 プロンプトは準備OKの合図
08-1 プロンプトは「いつでも準備OKですよ」の合図
08-2 本書のプロンプトの書き方
09 コマンドを使ってみよう
09-1 コマンド名を入力したらEnterキーを押す
09-2 失敗してもあわてない
09-3 引数を使えば細かい指定ができる
09-4 アレンジしたいならオプションをつける
09-5 オプションと引数を両方使う
09-6 困ったらmanコマンドを使う
09-7 ゴールはログアウト
第2章 練習問題
第3章 ファイルとディレクトリ操作のきほん
10 Linuxではフォルダのことをディレクトリと呼ぶ
10-1 LinuxのディレクトリはWindowsのフォルダに同じ
10-2 膨大なファイルを機能別にディレクトリに収納
10-3 すべてのはじまりはルートディレクトリ
10-4 絶対パスでルートディレクトリを指定する
10-5 サブディレクトリと親ディレクトリ
11 ディレクトリからディレクトリへ移動する
11-1 ディレクトリを移動し、確認する
11-2 相対パスを使って移動する
11-3 便利な省略記号を使う
12 ファイルを表示する
12-1 カレントディレクトリ内のファイルを確認する
12-2 ファイルの種類をわかりやすくする
12-3 カレントディレクトリ内をくわしく見る
12-4 指定したディレクトリのなかみを確認する
12-5 更新時刻順に表示する
12-6 サブディレクトリを表示する
12-7 隠しファイルを表示する
12-8 オプションは重ねて使える
13 ファイルのしくみをマスターする
13-1 テキストファイルは人間用。バイナリファイルはLinux用
13-2 Linuxのスタンダードはテキストファイル
13-3 ファイル名のきほん
13-4 ファイル名の鉄則
14 ファイルのなかみを見る
14-1 catコマンドを使ってファイルのなかみを表示する
14-2 lessコマンドを使ってファイルのなかみを表示する
15 ファイルやディレクトリをコピーする
15-1 カレントディレクトリ内でコピーする
15-2 絶対パスを使ってコピーする
15-3 コピー元のファイル名をコピー先で変える
15-4 オプションの-iを使って上書き防止
15-5 オプションの-vで結果報告
15-6 ディレクトリをコピーする
15-7 複数のファイルをコピーする
15-8 初期状態に戻すには
16 ファイルを移動する
16-1 mvコマンドの操作方法はcpコマンドとだいたい同じ
16-2 ファイル名を変更する
17 ディレクトリを作成する・削除する.
17-1 ディレクトリを作成する
17-2 ディレクトリ、ファイルを削除する
第3章 練習問題

第4章 はじめてのエディター
18 WindowsのWordがLinuxではviだ
18-1 Linuxのエディター
18-2 操作に慣れないと地歌、慣れたら天国
18-3 viはLinuxの標準エディター
19 viエディターを使ってみよう
19-1 viエディターを起動する
19-2 文字を入力する
19-3 編集する
19-4 カーソルを動かす
19-5 ファイルを保存する
19-6 viエディターを終了する
20 viエディターで編集してみよう
20-1 ファイルを開く
20-2 文字・行を削除する
20-3 文字・行をコピー、貼りつける
20-4 繰り返しの作業
20-5 文字列を削除する
20-6 動作を取り消す
20-7 検索する
20-8 ディスプレイをキーボードだけで自在に操る
21 ほかのエディターを使う
21-1 Ubuntuで標準のnanoを使う
21-2 Emacsを使う
第4章 練習問題

第5章 ユーザーの役割とグループのきほん
22 ユーザーは3つに分けられる
22-1 「ユーザーのなかのユーザー」が管理者ユーザー
22-2 「ロボット」がシステムユーザー
22-3 「ふつうのユーザー」が一般ユーザー
23 管理者ユーザーの仕事
23-1 地味だけど、必要不可欠。管理者ユーザーの仕事
23-2 ユーザー名rootでシステム管理の仕事をする
23-3 システムの管理者はいつもrootでいるわけではない
24 管理者ユーザーの心がまえ
24-1管理者ユーザーとしてのチカラ
24-2 モラルを守る
24-3 外部からの侵入を防ぐ
25 rootになる方法。
25-1 rootでログインする
25-2 suコマンドを使う
26 ユーザーとグループ、パーミッション
26-1 ユーザーがまとまってグループをつくる
26-2 社内の文書は個人用・部署内用・部署外用に分けられる
26-3 ファイルごとに読み取り、書き込み、実行を設定できる
26-4 chmodコマンドでアクセス権を変更する
26-5 所属するグループを確認する
26-6 ユーザーは必ずどれかのグループに所属する決まりがある
26-7 グループのきほんはプライマリグループ
26-8 グループとユーザーを操作できるのは管理者ユーザーだけ
27 ユーザー関係のコマンド
27-1 ユーザーを追加する
27-2 パスワードを設定する
27-3 一般ユーザーによるパスワードの変更方法
27-4 ユーザー情報はどこにあるのか
27-5 ユーザーを削除する
28 グループ関係のコマンド
28-1 グループを追加する
28-2 グループにユーザーを追加する
28-3 グループを削除する
28-4 ファイルの所有者・所有グループを変更する
29 システム管理コマンド
29-1 CentOS 7の終了・再起動
29-2 システムの電源を切るシステムを再起動する
29-3 電源を切る・再起動する古いコマンドも使える
第5章 練習問題

第6章 シェルの便利な機能を使おう
30 シェルのしくみを知ろう.
30-1 シェルは専用の秘書
30-2 bashがLinuxの標準シェル
31 おおまかな指示で必要なファイルを選び出す(ワイルドカード)
31-1 ラクするための魔法の文字・ワイルドカード
31-2 ?は1文字、”は1文字以上の文字の代わり
31-3 カッコを使ってファイル名をまとめて書く
32 コマンド入力中、代わりに入力してもらう(補完機能)
32-1 ブラウザの補完機能
32-2 シェルの補完機能を使ってみよう
32-3 補完機能はコマンド名でも使える
33 過去のコマンド履歴を再利用する(ヒストリー機能)
33-1 ↑、↓キーで過去を行き来する
33-2 コマンド履歴を一覧表示する
33-3 ヒストリー機能とキーボードショートカットを併用する
34 コマンドを別名登録する(エイリアス機能)
34-1 別名をつけてエイリアスを使う
34-2 コマンド名が同じ場合、解除する場合
35 プロンプトを変更する(シェル変数について)
35-1 シェル変数PS1を設定するとプロンプトを変更できる
35-2 シェル変数とは何か?
35-3 シェル変数PATHの役割
35-4 使用する言語の設定は変数LANGで
36 シェル変数のしくみと動作
36-1 組み込みコマンドと外部コマンド
36-2 シェル変数と環境変数
36-3 bashのオプション
36 いつでも好きな設定を使えるようにする(環境設定ファイル)
37-1 bashの設定ファイルをつくる
37-2 .bashrcを編集する前に必ずすること
第6章 練習問題

第7章 使いこなすと便利なワザ
38 便利なコマンドを使う①
(echo,wc,sort,head,tail,grep)
38-1 文字を表示する
38-2 文字数や行数を数える
38-3 ファイルのなかみを並べ替える
38-4 ファイルの先頭・末尾の10行を表示する
38-5 ファイルからキーワードのある行を抜き出す
39 便利なコマンドを使う②(find)
39-1 ディレクトリの下にあるファイルを検索する
39-2 ワイルドカードを使って検索する
39-3 ディレクトリだけを検索する
39-4 作成時刻から検索する
40 標準入力と標準出力を変更する(リダイレクト)
40-1 標準出力をファイルに変更する
40-2 標準出力をファイルに追加保存する
40-3 標準入力をファイルに変更する
40-4 標準エラー出力
41 パイプ機能を使ってさらに効率化する
41-1 パイプ機能を使う
42 正規表現の第一歩
42-1 grep + 正規表現 = egrepを使う
42-2 正規表現を使うにはメタ文字(メタキャラクタ)が必要
42-3 あるかないかをあらわす?(クエスチョンマーク)
42-4 半角1文字を肩代わりする,(ドット)
42-5 何文字でもOKの*(アスタリスク)
42-6 1文字の候補をまとめて指定する[](大カッコ)
42-7 1文字候補を省略して書く
42-8 単語候補をまとめて書く
43 シンボリックリンク
43-1 ハードリンクとシンボリックリンク
43-2 シンボリックリンクをつくる
43-3 シンボリックリンクのコピー・削除
43-4 iノードと残数の確認方法
44 アーカイブ・圧縮(gzip.tar)
44-1 アーカイブと圧縮は違う
44-2 tarコマンドを使ってアーカイブする
44-3 tarコマンドで展開する
44-4 gzipコマンドで圧縮する
44-5 tarコマンドとgzipコマンドを組み合わせる
第7章 練習問題

第8章 ソフトウェアとパッケージのきほん
45 RPMパッケージとrpmコマンド
45-1 本格的なインストールは敷居の高い作業
45-2 RPMパッケージを利用したインストール
45-3 すべてのパッケージを一覧表示する
45-4 パッケージのくわしい情報を表示する
46 パッケージをyumコマンドで管理する(CentOS)
46-1 yumコマンドでパッケージをインストールする
46-2 パッケージの一覧を表示する
46-3 パッケージのアップデートを確認する
46-4 パッケージをまとめてアップデートする
46-5 パッケージの情報を確認する
46-6 インストールしたいパッケージを検索する
46-7 パッケージをインストールする
46-8 パッケージを削除する
46-9 パッケージの全文検索
第8章 練習問題

第9章 ファイルシステムのきほん
47 ファイルシステムは何をしている?
47-1 ファイルシステムの仕事
47-2 ファイルを管理する方法
47-3 デバイスファイル
48 Linuxのファイルシステム
48-1 Linuxではext形式のファイルシステムが標準
48-2 ディレクトリ構造とマウント
49 ファイルシステムの使い方.
49-1 パーティションを作成する
49-2 ファイルシステムを作成する
49-3 マウント、アンマウントする
49-4 tstabと自動マウント
第9章 練習問題

第10章 プロセスとユニット、ジョブのきほん
50 プロセス、ユニットとは何か。
50-1 プロセスの定義
50-2 psコマンドを使ってプロセスを見る
50-3 プロセスの終了
50-4 ユニットとサービス(デーモン)の管理
51 ジョブを操作する
51-1 ジョブとは何か
51-2 ジョブを停止する
51-3 ジョブをフォアグラウンドで再開(実行)する
51-4 ジョブをバックグラウンドで再開(実行)する
第10章 練習問題

第11章 ネットワークのきほん
52 そもそもネットワークってLinuxと関係あるの?
52-1 ネットワークとLinuxには深い関係がある
52-2 マシンが2台あればネットワークになる
53 プロトコルとTCP/IP
53-1 プロトコルは階層構造
54 IPアドレスとサブネット
54-1 IPアドレス
54-2 IPアドレスとサブネット
54-3 クラスとCIDR
54-4 ネットマスクとプレフィックス表記
54-5 サブネットとIPアドレスの制限
54-6 プライベートIPアドレス
54-7 固定的IPアドレスとDHCP
55 パケットとルーティング
55-1 データ通信のきほんはパケット
55-2 パケットを送信してネットワークを診断する
56 名前解決
56-1 ドメイン名とIPアドレス
56-2 DNSサーバーは何をするのか
57 ポート番号
57-1 サーバーとポート番号
57-2 ルーターでも使われるポート番号
58 ネットワーク設定のきほん
58-1 ネットワークとマシンのきほん的な構成
58-2 ipコマンドでネットワークインターフェースを確認する
58-3 ネットワークインターフェースを有効化する
58-4 nmtuiで固定的IPアドレスを設定する
58-5 nmclコマンドでIPアドレスを設定する
58-6 nmclコマンドでデバイスを表示する
59 ネットワークコマンドの簡単なまとめ
59-1 ipコマンドで情報を得る
59-2 pingコマンドで応答があるかどうかを確認する
59-3 tracepathコマンドで経路を確認する
59-4 nmcliコマンドはいろいろ確認できる
第11章 練習問題

第12章 レンタルサーバー、仮想サーバー、クラウドのきほん
60 レンタルサーバーから仮想サーバー、クラウドへ
60-1 レンタルサーバーとは
60-2 仮想サーバーとは
60-3 VPSからクラウドへ
第12章 練習問題

さくいん

付属データのご案内

本書で使用している学習環境のLinux(CentOS7)は、本書の「付属データ」として以下のWebサイトからダウンロードできます。
https://www.shoeisha.co.jp/book/download/9784798161785

※容量が大きいので、ダウンロードが完了するまでに時間がかかる場合があります。※付属データは.zipで圧縮しています。ご利用の際は、必ずご利用のマシンの任意の場所に解凍してください。

会員特典データのご案内

本書では、紙面の都合上、書籍本体で掲載できなかった演習問題を追加コンテンツとしてPDF形式で提供しています。会員特典データを入手するには、以下の内容を参考にしてください。

①以下のWebサイトにアクセスしてください。
②画面に従って、必要事項を入力してください。無料の会員登録が必要です。
③表示されるリンクをクリックし、ダウンロードしてください。

◆注意
※会員特典データのダウンロードには、SHOEISHA ID(翔泳社が運営する無料の会員制度)への会員登録が必要です。詳しくは、Webサイトをご覧ください。
※会員特典データに関する権利は著者および株式会社翔泳社が所有しています。許可なく
配布したり、Webサイトに転載したりすることはできません。
※付属データおよび会員特典データの提供は、予告なく終了することがあります。あらかじめご了承ください。
※付属データおよび会員特典データの内容は、本書執筆時点の内容に基づいています。
※付属データおよび会員特典データの提供にあたっては正確な記述につとめましたが、著者や出版社などのいずれも、その内容に対してなんらかの保証をするものではなく、内容やサンプルに基づくいかなる運用結果に関してもいっさいの責任を負いません。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

動作実験+ビジュアルで学ぶ

Linuxの基本動作を図解でわかりやすく解説しています。難しいテーマであるにも関わらず、頭に入りやすい構成になっています。Linuxの仕組みをしっかりと理解することができるため、ある程度コンピュータやコマンドラインに関する知識がある方にとってはいい切り口となるでしょう。

武内 覚 (著)
出版社: 技術評論社 (2018/2/23)、出典:出版社HP

 

本書に寄せて

筆者の武内さんとは古い知り合いで、かれこれ10年ぐらい同じ職場にいたと思います。

彼は昔から人に教えるのがうまく、大企業でソフトウェア系の新人全員にOSの動作原理を教育するという仕事を、毎年本業と並行して器用にこなしていました。その教育は新人の理解度・満足度が他の講義とくらべて驚異的に高かったため、社内で評判になっていました。また、IPAのセキュリティキャンプなどにおいて、学生に対してもOSについての教育によって高い評価を得ています。

わたしも経験があるのですが、OSを教えるのは難しいです。そもそもハードウェアの動作から教えないといけないため、1つ1つの説明がどうしても長くなりがちです。さらに、きちんと理解するには最小限のプログラミングの知識も必要なので、初学者にとっては途中で挫折する要素が満載なのです。

武内さんの教育はたいへんユニークで、常に豊富な図表、および説明を裏付ける実験データを示すことによって具体的、かつ、簡潔にものごとを説明します。たとえば、性能を意識したプログラムを書く際に必須なキャッシュメモリについて説明する際は、動作原理を図示するとともに、メモリとキャッシュメモリの具体的な速度差を示すグラフを用いる、などです。これによって、新人が作り込むプログラムの品質改善に大いに貢献していたものです。

その武内さんが、上記のような豊富な教育経験をもとに、OSの動作原理についての知見を一冊の本にまとめてくれるということで、私はいま、とてもわくわくしています。タイトル通りLinuxのしくみについて知りたい人はもちろん、OSを自作してみたい人にも、自分のプログラムの性能チューニングをしたい人にも、本書はきっと役に立つでしょう。

2018年1月30日
Linuxカーネルハッカー、Rubyコミッター
小崎資広

武内 覚 (著)
出版社: 技術評論社 (2018/2/23)、出典:出版社HP

はじめに

本書の目的は、コンピュータシステムを構成するオペレーティングシステム(以下OSと表記)やハードウェアについて、実際に手を動かし、挙動を確認しながら学ぶことです。説明の対象となるOSはLinuxです。対象読者は、アプリケーション開発者、システム設計者、運用管理者、およびサポート技術者などを想定しています。Linuxの基本的なコマンドさえ知っていれば読める内容です。

現代のコンピュータシステムは階層化、細分化されており、OSやハードウェアを直接意識することは少なくなってきています。この階層化は、しばしば図00-01のような「きれいなモデル」で描かれ、任意の階層を扱う人は、自分より1つ下の階層だけ知っていれば問題ないと説明されることがあります。たとえば、運用管理者はアプリケーションの外部仕様だけ知っていればいい、アプリケーション開発者はライブラリだけわかっていればいい、などです。

しかし現実のシステムは、図00-02のように、あらゆる階層が他の階層と複雑に繋がっていて、一部を知っているだけでは太刀打ちできない問題も少なくありません。しかも、こうした広い階層にまたがる知識は、実務を通して長い時間をかけて自力で学ばないといけない場合が多いのが実情です。

本書を執筆した理由は、まさにそこにあります。
本書によってOSやハードウェアの理解を深めれば、次のような効果が期待できます。

・ハードウェアの特性を考慮した、良いソフトウェアを開発できるようになる
・どのような指標に基づいてシステムを設計すれば良いか分かるようになる
・OSやハードウェアに関するトラブルが起きたときに、冷静に対処できるようになる

なお、ネットワーク関連の情報は、それだけで分量が膨大になってしまい、本書の焦点がぼやけてしまうため、割愛しました。

本書では、「試して理解」と書名にもあるとおり、さまざまな実験プログラムを用意して、実際に自分で手を動かして動作確認できるようになっています。これらの実験プログラムは、ぜひ実際に動作させて確認されることをおすすめします。なぜなら「単に本を見る」のと「見た上で実際に試してみる」のを比較すると、後者のほうが学習効果ははるかに高いからです。実験プログラムのソースコードはすべて掲載し、GitHubでも公開しています。また、関数の意味などについても適宜説明します。ライセンスはGPLv2なので、自由に改変して使っていただいて構いません。どうしてもプログラムを実行することに抵抗がある方は、筆者の環境で動かした結果を掲載していますので、それで内容を理解していただくだけでも構いません。

実験プログラムに用いたプログラミング言語は、C言語とPythonおよびbashスクリプトです。このうちC言語をあえて使う理由について補足しておきます。C言語は現在主流のGoやPythonなどの言語に比べると原始的な機能しか持たないため、生産性はあまり高くありません。しかし、原始的であるがゆえに、本書のようにOSやハードウェアの生の姿を見るような目的には適しているため、使いました。

実験プログラムを実行する環境はUbuntu16.04/x86_64環境を想定しています。しかし、Linuxディストリビューション依存のことはしていないので、Ubuntuのバージョンが違っていても、あるいはディストリビューションが異なっていても動くはずです。また、実行環境はなるべく仮想マシンではなく実機上にシステムを構築してください。その理由は、仮想マシンを使用すると、一部の例については本書に記載したものと比べて挙動が変わることがあるからです。

実験プログラムやその他統計情報の採取などに必要なパッケージは次の通りです。

・binutils
・build-essential
・sysstat

これらは次のコマンドによってインストールできます。

本書に出てくるデータは次のマシンで採取しました。

・CPU: Ryzen 1800X (ハイパースレッドoff)
・RAM: Kingston KVR24N17S8/8×4 (合計32Gバイト)
・SSD: Crucial CT275X200 (256Gバイト)
・HDD: SEAGATE ST3000DM001 (3Tバイト)
・Ubuntu 16.04/x86_64
・Linuxカーネル: 4.10.0-40-generic

*1 とはいえ、OSやハードウェアの専門家を目指すためのものではありません。あくまでも、最低限必要であろうと筆者が判断した知識について抜粋して学んでいただくためのものです。
(本文に戻る)

*2 https://github.com/satoru-takeuchi/linux-in-practice/
(本文に戻る)

目次

本書に寄せて
はじめに

第1章 コンピュータシステムの概要

第2章 ユーザモードで実現する機能
■システムコール
■システムコールのラッパー関数
■標準Cライブラリ
■OSが提供するプログラム

第3章 プロセス管理
■2段階のプロセス生成
■fork()関数
■execve()関数
■終了処理

第4章 プロセススケジューラ
■実験プログラムの仕様
■実験プログラムの実装
■実験
■考察
■コンテキストスイッチ
■プロセスの状態
■状態遷移
■アイドル状態
■さまざまな状態遷移
■スループットとレイテンシ
■実際のシステム
■論理CPUが複数の場合のスケジューリング
■実験方法
■実験結果
■スループットとレイテンシ
■考察
■経過時間と使用時間
■スリープするプロセス
■現実のプロセス
■優先度の変更

第5章 メモリ管理
■メモリに関する統計情報
■Out Of Memory
■単純なメモリ割り当て
■仮想記憶
■ページテーブル
■実験
■プロセスへのメモリ割り当て
■実験
■上位レイヤによるメモリ割り当て
■問題の解決
■仮想記憶の応用
■ファイルマップ
■デマンドページング
■コピーオンライト
■スワップ
■階層型ページテーブル
■ヒュージページ

第6章 記憶階層
■キャッシュメモリ
■キャッシュメモリがいっぱいになったら
■階層型キャッシュメモリ
■キャッシュの実験
■参照の局所性
■まとめ
■Translation Lookaside Buffer
■ページキャッシュ
■同期書き込み
■バッファキャッシュ
■ファイル読み出しの実験
■ファイル書き込みの実験
■チューニングパラメータ
■まとめ
■ハイパースレッド
■ハイパースレッド機能が有効な場合

第7章 ファイルシステム
■Linuxのファイルシステム
■データとメタデータ
■容量制限
■ファイルシステムの不整合
■ジャーナリング
■コピーオンライトそれでも防げない場合
■ファイルシステム不整合への対策
■ファイルの種類
■キャラクタデバイス
■ブロックデバイス
■さまざまなファイルシステム
■メモリベースのファイルシステム
■ネットワークファイルシステム
■仮想ファイルシステム
■Btrfs

第8章 ストレージデバイス
■HDDのデータ読み書きのしくみ
■HDDの性能特性
■HDDの実験
■実験プログラム
■シーケンシャルアクセス
■ランダムアクセス
■ブロックデバイス
■I/Oスケジューラ
■先読み
■実験
■SSDのしくみ
■まとめ

あとがき

武内 覚 (著)
出版社: 技術評論社 (2018/2/23)、出典:出版社HP

本気で学ぶLinux実践入門 サーバ運用のための業務レベル管理術

最短でLinuxを学ぶ!

様々なコマンドを実践的に解説され、基礎から実践まで網羅されているLinuxサーバ運用の入門書です。手順に沿って丁寧な解説がされています。CentOSとUbuntuに対応しています。独学でLinux上級者を目指す方にお勧めの1冊です。

大竹 龍史 (著), 山本 道子 (著)
出版社: SBクリエイティブ (2019/5/29)、出典:出版社HP

 

はじめに

Linuxは1991年に誕生し、現在ではサーバ、デスクトップ、モバイル端末、組み込みシステム、クラウドのインフラやクラウドのインスタンスなど、広範な分野で使われているオープンソースのオペレーティングシステムです。

Linuxはオープンソースのゆえに、現在数百種類のディストリビューションと呼ばれるLinuxの配布ソフトウェアがありますが、本書ではその中からCentOSとUbuntuという、サーバや開発プラットフォームでシェアの高い2つのディストリビューションを取り上げています。

本書は、企画段階から掲載する内容に熟考を重ねました。「基本的な操作を習得できる書籍としたい」だけでなく、「一般的な入門書を一読した方でも、手にとる書籍にしたい」のが私たち執筆者と編集担当者の意見でした。

したがって、本書の前半はLinuxのインストールから基本操作まで、可能な限り実行例を掲載し、図などを交えて解説しています。また、後半では、トラブルシューティングを掲載したり、セキュリティも基本から一歩踏み込んだ内容を解説しています。

入門書としては多めなボリュームになっていますが、業務としてLinuxを運用、管理することを目指す方々が必要とするノウハウを載せた1冊となっています。

本書の特徴として、CentOSとUbuntuを並行して解説しているので、既にどちらか片方を使っている方が、もう片方を知りたいときにも便利だと思います。例えば、個人的にUbuntuを使っていて、これから業務でCentOSやRed Hat Enterprise Linux(RHEL)を使うことになった場合など、同等のパッケージ管理コマンドを見つけたり、同等のネットワーク設定を手早く見つけられると思います。

また本書のもう1つの特徴として、付録に仮想環境としてMicrosoft Windows用にVirtualBox、Linux用にKVMのインストール方法を解説し、さらにこの仮想環境で1台のルータ、2台のホストが接続されたネットワークを2個を構築する手順を解説しています。

ご自身のPC1台でこの仮想環境を構築することで、本書に書かれた内容を検証することができます。このような、複数のネットワークに分けて複数のホストを配置する仮想環境の作成でつまずいてしまった方にも、ぜひ、参考にしていただきたいです。

本書を書くにあたり、作図や校正などでたくさんのヘルプをしてくれた電気通信大学4年生中川真歩さんに感謝します。最後に、本書の執筆の機会を与えて頂いたSBクリエイティブ株式会社の皆様に、この場をお借りして御礼申し上げます。

2019年5月
大竹龍史 山本道子

大竹 龍史 (著), 山本 道子 (著)
出版社: SBクリエイティブ (2019/5/29)、出典:出版社HP

Contents

Chapter1 Linuxの概要と導入

1-1 Linuxのディストリビューションを理解する
オペレーティングシステムとは
Linuxオペレーティングシステムの構成
ディストリビューションとは
ディストリビューションのシェア
ディストリビューションの人気度
ディストリビューションの種類
主なデスクトップ環境
GUIによる操作とCUIによる操作
1-2 CentOSをインストールする
インストールメディアの入手
インストール手順
ログイン
1-3 Ubuntuをインストールする
インストールメディアの入手
インストール手順
ログイン
1-4 システムの初期設定を行う
CentOSでの初期設定
Ubuntuでの初期設定
1-5 sshによるリモートログイン
リモートログインとは
sshdの起動確認
sshによるリモートログイン
Column ディスプレイマネージャとデスクトップ環境の軽量化

Chapter2 Linuxの起動・停止を行う
2-1 ブートシーケンスを理解する
ブートシーケンスの概要
BIOS/UEFI
ブートローダ
カーネル
system
ログイン
シェルでの操作
2-2 シェルの使い方を理解する
シェルとは組み込みコマンドと外部コマンド・
シェル変数と環境変数
2-3 systemctlコマンドでサービスを管理する
サービスの管理の仕組み
systemctlコマンドによるサービスの管理
サービス設定ファイルとオプション
systemctlコマンドでは設定を変更できない重要なサービス
2-4 システムの再起動と停止を行う
設定とサービスをグループ化したターゲット
マシンの電源オフ
マシンの停止と再起動
ランレベルの表示と移行
Column 起動時エラーの原因と対策

Chapter3 ファイルを操作する
3-1 Linuxのディレクトリ構造を理解する
ツリー構造と各ディレクトリの役割
コマンドプロンプト
オンラインマニュアル
3-2 ファイルとディレクトリを管理する
ファイルとディレクトリをコマンドラインで操作する
標準入出力の制御
フィルタによる処理
文字列の検索
3-3 パーミッションを活用する
ファイルの所有者の管理
リンクの作成
コマンドとファイルの検索
3-4 viエディタでファイルを編集する
viエディタとは
viエディタ内での文字列検索
viエディタの設定
Column sudoを利用する

Chapter4 ユーザを管理する
4-1 ユーザの登録/変更/削除を行う
ユーザとは
ユーザの登録
パスワードの設定
ユーザアカウントの削除
ユーザ情報の変更
4-2 グループの登録/変更/削除を行う
グループとは
グループの作成
グループの削除
所属グループの変更
4-3 アカウントのロックと失効日の管理
失効日の設定
ログインの禁止
4-4 ログイン履歴の調査
ログイン履歴の表示
ログインユーザの表示

Chapter5 スクリプトやタスクを実行する
5-1 シェルスクリプトの実行方法を理解する
シェルスクリプトとは
シェルスクリプトの実行
実行時のオプションと引数(特殊変数)
5-2 ジョブスケジューリング
ジョブスケジューリングとは
crontabファイル
crontabファイルの設定
atサービス
5-3 管理作業の自動化(サンプル).
作業内容と手順
スクリプトの内容。
cronへの登録
Column ディストリビューションで提供されるPythonツール

Chapter6 システムとアプリケーションを管理する
6-1 CentOSのパッケージ管理を行う
パッケージ管理とは
rpmコマンドの利用
yumコマンドの利用
6-2 Ubuntuのパッケージ管理を行う
パッケージ管理とは
dpkgコマンドの利用
aptコマンドの利用
6-3 プロセスを管理する
プロセスの監視
プロセスの優先度
ジョブ管理
シグナルによるプロセスの制御
6-4 バックアップと復元を行う
アーカイブファイルの管理
バックアップ(データ復旧)
バックアップファイルの転送
6-5 ログの収集と調査を行う
ログファイル
rsyslogによるログの収集と管理
ログファイルのローテーション
systemd-journaldによるログの収集と管理
6-6 システム時刻を調整する
システムクロック
ハードウェアクロック
NTP
システムクロックの時刻を設定する
Column ミラーサイトとリポジトリを選択する

Chapter7 ディスクを追加して利用する
7-1 新規ディスクを追加する
パーティション
デバイスファイル
7-2 ディスクを分割する
MBRとGPT
バーティション管理ツール
7-3 ファイルシステムを作成する
主なファイルシステム
xfs
ext2、ext3、ext4
マウント
スワップ領域の管理
ファイルシステムのユーティリティコマンド
ファイルシステムの不整合チェック
7-4 iSCSIを利用する
iSCSIとは
iSCSIターゲットの設定手順
iSCSIイニシエータの設定手順
iSCSIターゲットの管理
iSCSIイニシエータの管理
Column LVMを使ってみよう

Chapter8 ネットワークを管理する
8-1 ネットワークに関する設定ファイルを理解する
パッケージと設定ファイル
ネットワークに関する設定ファイル
NIC(Network Interface Card)の命名
8-2 NetworkManagerの利用
NetworkManagerによるネットワーク管理
Wifiインターフェイスの管理
8-3 ネットワークの状態把握と調査を行うコマンド
ネットワークの管理と監視の基本コマンド(ip)
ネットワークの管理と監視の基本コマンド(その他)
8-4 ルーティング(経路制御)を行う
ルーティングの管理
フォワーディング
経路の表示
8-5 Linuxブリッジによるイーサネットブリッジを行う
ブリッジとは
Network Managerとsystemd-networkd
NetworkManagerの設定
systemd-networkdおよび「systemd-networkd-netplan」の設定
Column IPv6のネットワークを設定する

Chapter9 システムのメンテナンス
9-1 システムの状態把握と調査を行うコマンド
システムの状態把握と調査
9-2 ログインできなくなった場合の対処方法
インストーラを立ち上げて修復作業を行う
9-3 ネットワークに繋がらなくなった場合の対処方法
ネットワークのチェック手順
ネットワークインターフェイスの設定をチェック
ルーティングをチェック
名前解決をチェック
サービス(ポート)へのアクセスをチェック
9-4 アプリケーションの応答が遅くなった場合の対処方法
プロセスのリソース使用状況をチェックする
計算主体のアプリの処理速度を短縮する
メモリを多く使用するアプリの処理速度を短縮する
ストレージの処理速度を測定する
9-5 ファイル/ファイルシステムにアクセスできない場合の対処方法
ファイル/ファイルシステムに生じることのある不具合
空き領域がなくなる
ファイルシステムが損傷
シンボリックリンク/ハードリンクのエラー
ハードウェアの障害
ファイルシステムのマウント
ファイル共有での注意点

Chapter10 セキュリティ対策
10-1 攻撃と防御について理解する
セキュリティの概要
情報漏洩・盗聴に対する対策
侵入に対する防御
侵入の検知
侵入された後の対処
10-2 データの暗号化とユーザ/ホストの認証について理解する
Linuxにおける認証方式
暗号の概要
10-3 SSHによる安全な通信を行う
SSHとは
sshサーバの設定ファイル
sshクライアントの設定ファイル
秘密鍵/公開鍵の生成と公開鍵認証の設定
10-4 Firewallで外部からのアクセスを制限する
firewalld、ufw、iptables(Netfilter)
10-5 知っておきたいセキュリティ関連のソフトウェア
改ざん、侵入の検知やマルウェア対策
aideによる改ざんの検知
Snortによる侵入の防御
Column SSH通信路暗号化のシーケンス

Appendix 仮想環境を構築する
A-1 仮想化の概要
仮想化とは
ハイパーバイザー
コンテナ型仮想化
仮想化ソフトウェアが提供する機能
A-2 KVMによる仮想環境の構築
KVMとは
KVMを利用する
ネットワークの作成
仮想マシンによるルータの構築
A-3 VirtualBoxによる仮想環境の構築
VirtualBoxとは
VirtualBoxによる仮想マシンの作成
仮想マシンによるルータの構築
Column Dockerを使ってみよう

本書の表記について

□コマンドの構文
本書では、以下の形式でコマンドの構文を掲載しております。

ディレクトリの作成
mkdir[オプション]ディレクトリ名…

構文内で[]で囲まれた要素は任意入力を意味します。「…」は複数指定ができることを意味します。「ユーザ名|ユーザID」のように「|」を挟んで引数が記述されている箇所は、「ユーザ名またはユーザID」のように、いずれかを指定できることを意味します。{コマンド}は、実行対象のコマンドのサブコマンドを指定することを意味します。
コマンドに指定するオプション、オブジェクト、サブコマンドなどは、主なものを抽出して掲載しております。使用頻度の低いものに関しては、掲載を省略させていただいております。

□CentOSとUbuntuの使用バージョンについて
本書の実行例は、執筆時点(2019年3月)の以下環境にて動作確認を行っています。

□CentOSとUbuntuでの操作手順
本書では、CentOSとUbuntuの操作手を以下に則って併記しています。

・CentosとUbuntuで操作手順が同様の場合は、CentOSの実行結果を掲載しています。しかし、Ubuntuでも実行可能です。
・CentosとUbuntuで操作手順が異なる場合は、都度、いずれの実行結果であるかを示して掲載しています。
・Centosでrootで作業している(プロンプトが#)場合は、Ubuntuでもrootで作業をしてください。なお、rootへの切り替えは以下に記載した「rootへの切り替え」を参照してください。
・root権限を必要としない処理は、可能なかぎり一般ユーザ(ブロンプトが$)で実行するようにしています。

□rootへの切り替え
rootへの切り替えは、以下のように行ってください。

・CentOSでの一般ユーザからrootの切り替えは、「su -」を実行してください。その際、rootのパスワードが必要です。rootでの作業が終了したら「exit」を実行してください。
・Ubuntuでの一般ユーザからrootの切り替えは、「sudo su -」を実行してください。その際、現在のシェルユーザのパスワードが必要です。rootでの作業が終了したら「exit」を実行してください。
・Ubuntuで、rootへ切り替えることなく、root権限でコマンドを実行する場合は、「sudo実行したいコマンド」を実行してください。その際、現在のシェルユーザのパスワードが必要です。
・sudo の詳細は、第3章のコラム(156ページ)を参照してください。

□シェルプロンプト
以下は、本書で使用している実行例です。

❶の行は、コマンドの入力を行っています。「%」はシェルプロンプト、「tail」は実行するコマンド、「-1」はオプション、「/etc/passwd」は引数です。❷の行は、コマンドの実行結果です。
プロンプトに「#」が表示されている例は、rootユーザでの操作を表します。プロンプトに「S」が表示されている例は、一般ユーザでの操作を表します。また、状況に応じて、以下の表記を使用しています。
実行例①は、一般ユーザであるyukoが、sudo コマンドを使用して、/etc/shadowファイルをheadコマンドで表示します。
実行例①

実行例②は、一般ユーザであるsamが、sudoコマンドを使用して、/etc/shadowファイルをheadコマンドで表示します。
実行例②

本書内では、実行するユーザによって処理に影響がある場合は、ユーザ名を記載しています。また、作業場所(ディレクトリパス)が重要な場合は、ディレクトリバスも記載しています。適宜、本書内の解説および実行例を確認してください。

□コマンドラインと実行結果
実行時のコマンドラインが長い場合は、端末内で自動折り返しとなり、そのまま掲載しています(実行例①)。なお、2次ブロンプトを使用する場合もあります(実行例②)。
また、実行結果は、場合によって一部(あるいは全部)を省略あるいは整形して掲載しています。

実行例①

実行例②

□参考
本文内で以下の書式で記載されている箇所は、参考知識や補足事項を意味します。

ローリングリリースではディストリビューションとしてのバージョン番号はなく、個々のパッケージごとにバージョンを管理し、パッケージは随時更新が行われます。ディストリビューションによっては、インストール用ISOイメージが定期的に更新され、サイトからダウンロードできるようになっています。

□環境依存の情報
本書内で使用している「サーバ名」「IPアドレス」は、ご自身の環境に合わせて置き換えてください。
また、バージョン番号が含まれたファイル名やパッケージ名等は、バージョンアップにより変更される可能性があります。ご自身の環境に合わせて置き換えてください。

大竹 龍史 (著), 山本 道子 (著)
出版社: SBクリエイティブ (2019/5/29)、出典:出版社HP

AWSではじめるLinux入門ガイド

AWSと一緒に学ぼう!

EC2+AmazonLinux2を使ってAWSとLinuxの基礎を同時に学ぶことができます。LinuxやAWSを学びたいという初学者の方におすすめの1冊です。実際に手を動かしていくので、楽しく学習することができます。内容は易しめなので、より知識を掘り下げたいという方は他の参考書も利用するといいでしょう。

山下 光洋 (著)
出版社: マイナビ出版 (2020/4/29)、出典:出版社HP

 

Contents – コンテンツ –

0章. はじめに
1章. 環境の概要
2章. セキュアな環境を構築する
3章. AWSでのLinuxサーバーを起動しよう
4章. 管理者としてコマンドを実行しよう
5章. インストールを実行してみよう
6章. ターミナルでコマンド操作してみよう
7章. ファイルを操作してみよう
8章. エディタを操作してみよう
9章. パーミッションで権限を設定しよう
10章. スクリプトを実行してみよう
11章. Linuxサーバーをモニタリングしてみよう
12章. Linuxのセキュリティを設定しよう
13章. ネットワークについて学ぼう
14章. バージョン管理もAWSで
15章. コンテナ環境を作ってみよう
16章. データーベースを操作してみよう
17章. WordPressサーバーを構築してみよう
18章. Redmineサーバーを構築してみよう
19章. EC2インスタンス もっと知りたいこと
20章. 学習の終わりに AWSリソースを削除しよう

本書のサポートサイト 本書の追加・訂正情報があれば掲載しています。 https://book.mynavi.jp/supportsite/detail/9784839970963.html

山下 光洋 (著)
出版社: マイナビ出版 (2020/4/29)、出典:出版社HP

Chapter O

はじめに

トレノケート株式会社 山下 光洋
本書を手にとっていただきましてありがとうございます。本書は、AWSクラウド上で Linuxによるサーバー構築をゼロから学んでいただく書籍です。ゼロ(やったことがないこと)をイチ(やったことがある)にすることを目的にしています。次に挙げるような、これからクラウドやLinuxを学ばれる方々を想定して執筆しています。
・ITエンジニア職を目指す学生
・ITエンジニア職への転職を予定している社会人
・内製化にシフトしようとしている情報システム部門
・情報システム部に異動になった非IT部門
なぜ、AWSクラウド上でのLinuxサーバー構築を題材にしているか、まずクラウドについて説明します。近年、システム を構築する手段としてクラウドは欠かせない技術であるからです。
次にLinuxサーバーですが、最近はマイクロサービス、サーバーレスアーキテクチャといった、サーバーを開発者や運用者が管理しないクラウド最適化された構成も増えてきています。
しかし、これらはあくまでも最適な設計をするための一手段でしかありません。依然としてサーバーも有効な設計手段です。2018年のAmazon PrimeDayでは、最大426,000もの仮想サーバーが起動していたとの情報もあります。
また、既存システムをクラウドへ移行していく際には、いきなりすべての設計や運用を最適化するケースよりも、まずはそのままの設計、運用でクラウドへ移行するケースも多くあります。
クラウドへ移行することにより、システム運用を担当される方々はハードウェアの管理や更新作業から解放され、世の中にサービスを提供することに注力できます。より早くユーザーの課題を解決したサービスを作り続け、それを提供し続けるために、企業によるシステムサービスの運用、開発の内製化も進んでいます。
本書では、そのような移行案件や新規案件、クラウド上でのサーバー運用、構築をこれから担当される方々に、まずは実際に手を動かしながら、クラウドで Linuxサーバーを構築することの、スピード、俊敏性、機動性に触れていただき、IT技術の素晴らしさを知っていただくことを目的としています。ゼロをイチにすることで無限の可能性が広がり始めます。これから皆さまが様々な課題を解決しながら、エンジニア人生を歩まれるための一助となりましたら幸いです。
本書が皆さまのお手元に届く頃には、本書掲載の手順画面が異なっている場合もあります。 AWSでは昨日まで見ている画面が、今日は違うということはよくあります。これは日々成長しているサービスの特徴ともいえます。画面が異なっていても機能に違いがあるわけではありません。新しい画面は操作性が向上されていますので、より使いやすくなっているはずです。本書でも手順のご参考として画面を掲載しておりますが、画面や手順を細かく覚えていただく必要はありません。それよりも触って動かして確認、を繰り返して、どんな機能があるのか、何をすれば何ができるのか、を知っていただくことを推奨いたします。
※本書内の情報は2020年4月現在の情報です。

Chapter 1
第1章 環境の概要
1.1 Linuxってどんなもの?
1.2 AWSってどんなもの?….

Chapter 2
第2章 セキュアな環境を構築する
2.1 まずはAWSアカウントを作成しましょう
2.2 AWSアカウントを保護しよう…..

Chapter 3
第3章 AWSでのLinuxサーバーを起動しよう
3.1 EC2ってどんなもの?……
3.2 EC2インスタンスを作成しよう
3.3 EC2インスタンスへのSSHアクセスを設定しよう ……
3.4 セッションマネージャを使用したEC2インスタンスへのアクセス
3.5 EC2インスタンスを終了、停止するには…

Chapter 4
第4章 管理者としてコマンドを実行しよう
4.1 ユーザーとは…
4.2 sudoコマンドってどんなもの?….
4.3 ユーザーを管理してみよう・

Chapter 5
第5章 インストールを実行してみよう
5.1 yumの書式
5.2 yumの主なコマンド……
5.3 amazon-linux-extras
5.4 RPMコマンドでパッケージを個々に管理しよう
5.5 apt-get

Chapter 6
第6章 ターミナルでコマンド操作してみよう
6.1 便利な機能を使ってみよう …..
6.2 標準入出力と複数のコマンドを実行してみよう …….
6.3 変数を使ってみよう…………
6.4 シェルのオプションを使ってみよう
6.5 よく使うコマンドを定義しておこう

Chapter 7
第7章 ファイルを操作してみよう
7.1 ディレクトリを操作してみよう ……
7.2 ファイルを操作してみよう……
7.3 S3(Simple Storage Service) を使ってみよう ……
7.4 EBS(Elastic Block Store) とEFS(Elastic File System) を操作してみよう …
7.5 Linuxファイルのその他の操作を知ろう

Chapter 8
第8章 エディタを操作してみよう
8.1 Vimを使ってみよう …..
8.2 ファイルの内容を参照しよう…
8.3 ファイルの内容を操作しよう …….
8.4 ファイルの内容のその他の操作を知ろう…

Chapter 9
第9章 パーミッションで権限を設定しよう
9.1 オーナーとグループ…….
9.2 パーミッションの読み方
9.3 オーナーとグループを変更してみよう ……
9.4 パーミションを変更してみよう……

Chapter 10
第10章 スクリプトを実行してみよう
10.1 シェルスクリプトを作って実行してみよう ….
10.2 分岐(if, case) と繰り返し (for, while) を実行してみよう ….
10.3 プロセスとジョブを管理してみよう
10.4 メタデータ、ユーザーデータ、cloud-init.
10.5 サービス、ジョブを制御してみよう ….

Chapter 11
第11章 Linuxサーバーをモニタリングしてみよう
11.1 CPU、メモリ、プロセスの状況を確認してみよう….
11.2 CloudWatchメトリクスとLogsの機能を知ろう
11.3 CloudWatchでアラームとダッシュボードを設定してみよう
11.4 CloudWatchログとアラームを使ったモニタリング
11.5 rsyslog

Chapter 12
第12章 Linuxのセキュリティを設定しよう
12.1 AWSアカウントとルートユーザー…
12.2 IAMユーザー、IAMポリシー、IAMロールを知ろう…
12.3 CloudTrail, GuardDuty, VPC…
12.4 Linuxサーバーのセキュリティを評価するには……
12.5 Linuxサーバーのセキュリティ機能を知ろう……

Chapter 13
第13章 ネットワークについて学ぼう
13.1 VPCでネットワーク環境を設定しよう ….
13.2 ポートってどんなもの?.
13.3 ネットワーク設定ファイルについて知ろう
13.4 ネットワーク関連コマンドを知ろう
13.5 VPC フローログ

Chapter 14
第14章 バージョン管理もAWSで
14.1 Gitをインストールしよう …
14.2 CodeCommitを操作するための権限を設定しよう…..
14.3 リポジトリを作成しよう
14.4 Gitコマンドを使ってみよう ……
14.5 プルリクエストを使ってみよう ……

Chapter 15
第15章 コンテナ環境を作ってみよう
15.1 Dockerをインストールしてみよう
15.2 Dockerイメージを作成してみよう
15.3 Dockerコンテナを実行してみよう ……..
15.4 Dockerコンテナを操作するコマンド

Chapter 16
第16章 データーベースを操作してみよう
16.1 Amazon RDS for MySQLを起動してみよう… …
16.2 Amazon RDSインスタンスのセキュリティグループの作成
16.3 EC2からRDSへ接続してみよう…….

Chapter 17
第17章 WordPressサーバーを構築してみよう
17.1 WordPressのアーキテクチャ……
17.2 WordPressをインストールしよう
17.3 データベースを準備しよう …
17.4 WordPressをセットアップしよう…
17.5 WordPressをテストしてみよう……

Chapter 18
第18章 Redmineサーバーを構築してみよう
18.1 Redmineサーバーのアーキテクチャ…..
18.2 Redmine用データベースを作成してみよう
18.3 Redmineをインストールしてみよう…….
18.4 Redmine動作確認

Chapter 19
第19章 EC2インスタンス もっと知りたいこと
19.1 購入オプションについて知ろう
19.2 インスタンスタイプについて知ろう・・
19.3 起動テンプレートの設定項目を知ろう
19.4 様々な制限…………
19.5 自動的なリタイアについて知ろう…….
19.6 Amazon Time Sync Service/TimeZone
19.7 トラブルシューティング……………
19.8 Amazon Linux2にGUIをインストールしてみよう
19.9 ローカライゼーション………….
19.10 メールを管理してみよう…….
19.11 プリンタを管理してみよう

Chapter 20
第20章 学習の終わりにAWSリソースを削除しよう
20.1 AMIの登録解除とEBSスナップショットを削除しよう
20.2 EC2インスタンスの終了(削除) …
20.3 RDSインスタンスの削除
20.4 S3バケットの削除…..
20.5 EFSファイルシステムの削除

Chapter 1 環境の概要

まず最初に本書で使用する環境と技術を説明します。 本書では、LinuxとAWSを使用します。 この章は、興味のある方は読んでいただいてもいいですが、「まずは触りたい」という方は、飛ばして次の章から実際に触って進めながら、少し進めた後に読んでみてもいいかもしれません。

1.1 Linuxってどんなもの?
Linuxは、WindowsやMacと同じOS(オペレーティングシステム)の大きな種類の1つです。読み方はこだわりがなければ「リナックス」が一般的でいいでしょう。
一般的に使用されているスマートフォンやルーター、Web、業務アプリケーションや、様々なデバイスなど、非常に多くのシステムで広く使用されているOSです。
Linuxを説明するにあたって、まずはオープンソースについて説明します。
●1.1.1 OSS(オープンソースソフトウェア)
オープンソースとは、ソースコードを公開して利用、修正、再利用を可能としたソフトウェアです。企業ではなく主にコミュニティが開発し、企業はこのサポートで対価を得ているビジネス形態もあります。
コミュニティが開発し、利用や修正を自由にしていることで、ニーズをよりよく反映していくことができたり、分岐された新たなソフトウェアが生まれ、より世の中の多くの課題をスピーディーに解決することができていることも特徴的です。
Linuxは全世界のエンジニア達が自分たちの課題を解決するために利用して、フィードバックを共有し、開発にも協力しているオペレーティングシステムといえます。
コミュニティが開発することで、課題をスピーディーに解決しているよ!
●1.1.2 Linuxの種類
前述のとおりオープンソースとして進化を続けているので、一概にLinuxといっても1種類ではなく、いくつかの種類があります。このLinuxの種類のことをディストリビューションといいます。 Debian系、Redhat系、SUSE系などです。本書では、Redhat 系の派生であるAmazon Linux2を主に扱います。
●1.1.3 Linuxのメリット
・必要最低限の機能だけを選択でき、ミニマムな構築が可能。
・コマンドで操作することができ、自動化が容易。
・ソフトウェアライセンス費用が発生しないものがある。
・対応しているソフトウェアが多い。

1.2 AWSってどんなもの?
AWS(Amazon Web Service) は Amazon 社内の課題を解決するために生まれ、その仕組みを世の中にも提供するために2006年にITインフラストラクチャのサービスとして提供が開始されました。
AWSを使えばいろんなチャレンジを素早くできそうですね!
●1.2.1 AWSが解決した課題
その解決するべき課題とは、従来のオンプレミスの制約事項であった以下のようなものです。
・ハードウェアを必要でないときも所有しなければならない。
・ハードウェアの調達に時間がかかる。
・綿密な計画を立ててもニーズの変化に対応できない。
・ディスク障害などに対する物理的なメンテナンスに人を配置しなければならない。
・急激なアクセスの増加に対応できない。
このような様々な課題を解決するために生まれ、時代の進化やニーズの変化において、新たに発生するさらなる課題を解決し続けているサービスが、Amazon Web Service(AWS)です。
●1.2.2 AWSのメリット
AWSには特徴として、以下のようなメリットがあります。
・インフラストラクチャを所有するのではなく必要なときに必要な量を使用できる。
・使った分にだけコストが発生するので使い捨てができる。
・新しいサーバーの調達が数分。
・ニーズが変化したときにも柔軟に作り変えができる。
・ディスク管理などハードウェアのヘルスチェックよりもサービスの提供に注力できる。
・アクセス数など需要の変化にダイレクトに対応できる。
●1.2.3 AWSでLinuxを使用するメリット
AWSには様々なサービスがありますが、本書で扱うLinuxサーバーをAWSで使用する場合は次のようなメリットがあります。
・必要なときに必要な性能のLinuxサーバーを必要な数だけ起動できる。
・要らなくなったLinuxサーバーは秒単位で使い捨てができる。
・新しいLinuxサーバーを数分で調達できる。
・要件が変更すれば稼働しているLinuxサーバーを捨てて、
テンプレートを再利用して作り直せる。
・ハードウェアの管理を気にすることなくLinuxサーバーが使用できる。
・アクセス数が増えれば自動的にLinuxサーバーを増加させられる。
これから LPIC を目指す方にもおススメの学習環境です!

山下 光洋 (著)
出版社: マイナビ出版 (2020/4/29)、出典:出版社HP

6日間で楽しく学ぶLinuxコマンドライン入門 コマンドの基本操作を身につけよう

6日間でマスター!

Linuxを触ったことのない方が、本格的にLinuxの理解を深めるための準備段階として利用するのにおすすめです。また、普段なんとなくLinuxを使っている方も、漠然とした理解をクリアにすることができるので、ぜひ手に取っていただきたい1冊です。

 

はじめに

Linuxを代表とするフリーのUNIX系のOSは、1990年代後半以降、その堅牢性から特にサーバ用途として広く使用されてきました。最近ではGUI環境であるウィンドウシステムも洗練され、Windowsを置き換えるデスクトップOSとしても注目を集めています。ただし、より詳細なシステム設定を行ないたいといった場合には、ターミナルエミュレータを立ち上げて伝統的なシェルのCUIコマンドを実行するという操作が欠かせません。本書では、コマンドラインによる操作はまったく未経験といった方を対象に、標準シェルであるbashを基本にしたコマンドライン、およびシェルの使用方法を基礎から解説していきます。

本書は、実際の講義などに使用できるように、1日目~6日目の6つの章から構成されています。各章は、1時間目~4時間目の4つのセクションからなり、各セクションは約1時間を目安に完了するようにしています。

1日目では、Linuxの概要、およびファイルシステムの仕組みとコマンドラインの基本操作を解説します。
2日目では、ワイルドカードや標準入出力の操作、コピーや移動などのファイル操作について説明します。
3日目では、lessやgrepなどの代表的なテキスト処理コマンド、およびviエディタについて説明します。
4日目では、多少高度なコマンドとして、検索コマンドやアーカイブの操作、および複数のコマンドを組み合わせて使用するテクニックについて説明します。
5日目では、システム管理の基礎知識として、スーパーユーザの権限でコマンドを実行する方法とファイルの安全管理を中心に解説します。
6日目では、シェルスクリプトなどシェルの活用テクニック、およびシェルの環境設定について解説します。

コマンドラインでの操作にある程度慣れたら、あとは実践あるのみです。本書が、LinuxなどのUNIXシステムのエキスパートをめざすみなさまのための、UNIXコマンドという深遠なる世界を探求するための道しるべとなったとしたら、こんなに嬉しいことはありません。

2015年春 著者記す

目次

はじめに
電子書籍閲覧に関するご注意

1日目 ようこそコマンドラインの世界へ
[1時間目] LinuxなどUNIX系OSってどんなOS?
[2時間目] ターミナル・エミュレータを使ってみよう
[3時間目] ファイルシステムを探検する
[4時間目] コマンドラインの操作テクニック

2日目 ファイルの基本操作を身につけよう
[1時間目] これだけは押さえておきたいシェルの基本機能
[2時間目] ディレクトリを操作する
[3時間目] ファイルの移動とコピーについて
[4時間目] ファイルを別名でアクセスするリンク

3日目 テキストファイルを扱うためのノウハウ
[1時間目] テキストファイルの中身を表示する
[2時間目] テキストファイルから必要な行を取り出す
[3時間目] viエディタの操作(1)
[4時間目] viエディタの操作(2)

4日目 より高度なコマンドにチャレンジ
[1時間目] やはりマニュアルは大事
[2時間目] ファイルの場所もコマンドラインで一発検索
[3時間目] ファイルの圧縮と解凍
[4時間目] 複数のコマンドを組み合わせればさらに便利に

5日目 システム管理の基礎を学ぼう
[1時間目] Linuxのユーザ管理
[2時間目] ファイルの安全管理について(1)
[3時間目] ファイルの安全管理について(2)
[4時間目] ファイルやシステムの情報を調べる

6日目 シェルを活用するテクニック
[1時間目] シェルを賢く使う(1)
[2時間目] シェルを賢く使う(2)
[3時間目] シェルスクリプトに挑戦
[4時間目] シェルの環境を整備する

練習問題の解答
1日目の練習問題の解答
2日目の練習問題の解答
3日目の練習問題の解答
4日目の練習問題の解答
5日目の練習問題の解答
6日目の練習問題の部答

著者紹介

私はどのようにしてLinuxカーネルを学んだかゆたかさんの技術書

OSを俯瞰的に学ぼう

OSの全体像がわかる教科書のような1冊です。本書だけでカーネルが読めるようになるわけではありませんが、今後の勉強の方向性を示してくれます。他の書籍と比べて対象バージョンが新しく、解説もわかりやすいです。

平田豊 (著), MBビジネス研究班 (著, 編集)
出版社: まんがびと (2019/7/26)、出典:出版社HP

 

はじめに

普段 Linux を使っているなかで、「Linux カーネルのしくみを知りたいけれど、どうやって学習していけばいいか分からない」と悩んでいる人は多いのではないでしょうか?本書を読むこ とで、その学び方を知ることができます。
筆者が Linux と出会ったのは18年前(2001年)です。ただ使うだけではなく、オペレーティングシステム(OS)のしくみを理解したくてLinux カーネルを学ぼうとしましたが、長い間ちん ぷんかんぷんでした。
Linuxカーネルの学び方は誰も教えてくれない、どこかに書いてあるわけでもないので、とにかく試行錯誤の連続でした。長い年月がかかりましたが、今ならやっと「Linuxカーネルが分 かる」と自信をもって言えます。時間をかけて少しずつ学習していっても、ゼロベースの理解度が続きましたが、必要な基礎知識がそろった時、一気に視界が開けました。本書には、そんな筆者の苦労話と習得したノウハウを書き下ろしています。
Linuxカーネルをどうやって学んでいけばよいのか、そのためにどんな知識が必要かについてお話しします。単なる体験談だけではなく、Linuxカーネルの基礎についても丁寧に解説しています。本書を読了してもいきなり Linux カーネルを理解できるわけではありませんが、Linuxカーネルという題材に対してどう学んでいけばいいか、その道筋を知ることができます。 読者の皆様は筆者よりも効率的に学習を進めていけることでしょう。
リナックスチョットデキルようになるまでの道のりは決して易しくはありません。しかし、本書を読むことで、読者の皆様が Linux カーネルの世界への記念すべき第一歩を踏み出せれば幸 いです。
なお、本書に登場する Linux カーネルのソースコードはバージョン 5.0 をベースとしています。Linux ディストリビューションは Ubuntu 19.04(2019/4/18 リリース版)を使用しています。
2019年5月 平田豊

平田豊 (著), MBビジネス研究班 (著, 編集)
出版社: まんがびと (2019/7/26)、出典:出版社HP

目次

第1章 Linux カーネルを学ぼうとしたきっかけ
1.1 HP-UX 開発でのモヤモヤ
1.2 Linux との出会い
1.3 プロプライエタリとオープンソースのどちらが幸せか
1.4 生涯かけて Linuxカーネルを習得したい

第2章 学びの失敗と試行錯誤
2.1 圧倒的なスキル不足
2.2 学習資料の活用に失敗
2.3 ハードウェアの理解不足
2.4 ソースコードの理解不足

第3章 効率のよい学習方法
3.1 コンピュータアーキテクチャを知る
3.2 システムプログラミングを知る
3.3 C言語の拡張機能を知る
3.4 ユーザ空間とカーネル空間の違いを知る
3.5 とにかく動かして見る

第4章 C言語の学び方
4.1 Linux カーネルは C 言語でできている
4.2 C言語の何を習得すればよいのか
4.2.1 C 言語の基本文法
4.2.2 C 言語の歴史と規格
4.2.3 C 言語を使う上でのルール
4.2.4 コメント文
4.2.5 long long
4.3 gcc の拡張機能を知る
4.3.1 マクロの丸括弧
4.3.2 条件演算子
4.3.3 128 ビット整数
4.3.4 空の構造体
4.4 マクロの嵐に立ち向かうには
4.4.1 条件コンパイル文
4.4.2 マクロの読み方

第5章 Linux の動作フロー
5.1 Linux カーネルは Linux のコア
5.2 パワーオンリセット
5.3 BIOS の起動
5.4 Linux カーネルの起動
5.4.1 ブートローダーの役割
5.4.2 ブートメッセージ
5.5 initデーモンの起動

第6章 Linux カーネルの役割
6.1 すべてはユーザプロセスのために
6.2 自発的に動くことはない
6.3 タスク管理
6.4 仮想メモリ
6.4.1 ページングとスワップ
6.4.2 ページテーブルのサイズ計算
6.4.3 ページテーブル作成の問題点
6.4.4 32bitの仮想アドレス変換
6.4.5 64bit の仮想アドレス変換
6.4.6 メモリマップ

第7章 Linuxカーネルの作りとライセンス
7.1 モノリシックカーネルとは
7.2 ライセンスの話

第8章 ソースコードを読む
8.1 タグジャンプを覚えよう
8.2 キーワード検索
8.3 動かしながら読む
8.4 読み進めるコツ
エルクアーノ

第1章 Linux カーネルを
学ぼうとしたきっかけ
本章では、筆者が Linuxカーネルを学ぼうとしたきっかけについてお話しします。
1.1 HP-UX 開発でのモヤモヤ
筆者が新人として IT 企業に入ったのは1998年(平成 10年)なので、今から 20年以上前のことです。平成が2019年4月末で終わり、令和という新しい元号が始まった今では、遠い昔の思 い出になりつつあります。
当時は Windows95ブームにより一般家庭にPC が普及し、Windows98のリリースと自作PCブームによって活気が溢れていました。インターネットはまだそれほど流行っておらず、まだダイヤルアップ接続の時代です。電話と同じで、インターネット通信をすればするほどお金がかかる従量課金です。使っていた PC の性能は、CPU が PentiumIII 533MHz、メモリが 256MB とい ったスペックでした。現在使っているPCは CPU が Core i5 3.4GHz、メモリが16GBなので、スペックも桁違いです。
今はたくさんのプログラミング言語が現場で使われていますが、当時はC言語が主流で、Java とPerl がブームでした。C言語に関しては学生時代に学んでいて、新人の時点で基本文法は 習得できていました。しかし、後から振り返って分かったことですが、プロとしての開発経験がないためプログラミングは我流に近く、業務として品質の高い設計とコーディングができて いたわけではありませんでした。それでも、MS-DOS や UNIX 向けのちょっとしたアプリケーションが作れるくらいのスキルはありました。
新人としての最初の仕事は、HP-UX※1という商用 OS でのデバイスドライバ開発でした。学生時代にワークステーション (SGI の Indy) や SunOS(後の Solaris)を使ったことはありましたが、HPUXを使うのは初めてのことでした。また、デバイスドライバ開発も当然ながら初めての経験だったのです。開発言語はC言語なのですが、アプリケーションとはまったくの別物で、慣れるまでに3年はかかりました。なかなか芽が出ず、一生懸命頑張っているのに仕事で成果が出せないので、上司から「今の仕事は向いていないのではないか。他の仕事にアサインを変えるか?」と打診されたこともあり、当時はとてもショックでした。
結果としてデバイスドライバ開発の業務は5年間やったのですが、入社3年目が一番つらい時期でした。プログラミングが好きで、将来プログラマになりたくて努力をしてきたはずなの に、自分には今の仕事が向いていないのか、そもそもスキルが足りないのか、とにかく分からないことが分からないという状態でした。C言語は分かるのに、デバイスドライバのソースコード※2が理解できないのです。
プログラミング言語は話し言葉とは違い、言語を知っているだけでプログラムのソースコードが読めるようになるわけではありません。むしろ、読めないプログラムの方が多いくらいで す。そのプログラムを理解するための前提知識が必要となるからです。例えば、フーリエ変換を行うプログラムがC言語で書かれていたとして、数学の知識がゼロだとプログラムの意味が 理解できないのと同じことです。また、プログラムの規模が大きくなってくると、一人で見きれるボリュームの範疇を超えます。特に、プログラマとしての経験が浅いうちは巨大なソース コードを読み解くスキルが低いので、プログラムの全体像が見えてこず、理解が進みません。
最初の仕事がいきなりデバイスドライバ開発というのもすごいことですが、デバイスドライバというのはカーネルと一心同体となって動作するソフトウェアです。カーネル(Kernel)というのは中心部・核心という意味の単語で、OS(オペレーティングシステム)のコア部分という意味合いで使われます。

※1: 旧 HP 社(現 HPE 社)が開発した UNIX OSHewlett-Packard UNIX の略。
HP社は2015年にHP Inc.とHPE(HP Enterprise)に会社分割した。
※2:ソース(Source)は源泉や元という意味で、ソフトウェアの設計図のようなもの。
ソースコードやソースプログラム、略してコードやプログラムと呼ばれることもある。
ソースコードを作ることをプログラミング、コーディング、実装などと呼ぶ。

【デバイスドライバとカーネルの関係】
図 1-1 デバイスドライバとカーネルの関係

図 1-1 は HP-UX のデバイスドライバとカーネルの関係を示したものですが、Linux や Windowsもしくみとしては同じです。デバイスドライバをカーネルに組み込む方式として、静的リンクと動的リンクの2種類が存在します。カーネルとデバイスドライバはカーネル空間という特別な領域で動作するのが特徴です。
デバイスドライバはカーネルに不足している機能を追加することができるしくみであり、機能を追加することがデバイスドライバを作る目的でもあります。デバイスドライバを作るには、 カーネルとどのようにして連携させるかということを知る必要があるため、OSベンダー(OS の開発元)が開発者向けに情報を提供しています。HP-UX の場合は、DDG(Driver Development Guide)やDDR(Driver Development Reference)というドキュメントで、HPE 社のWebサイトで配布されています。Windowsの場合は、WDK(Windows Driver Kit)というデバイスドライバ開発キットにドキュメントが含まれています。以前はWDKのことを DDK(Driver Development Kit)と呼んでいました。
HP-UX デバイスドライバを開発する上で、まず困ったのが、情報が少ないということでした。前述したドキュメントがお世辞にも充実しているといえる内容ではなかったのです。Microsoft のドキュメントは分かりにくいと言う人もいますが、筆者は Microsoftの提供するドキュメントは一番充実していると思っています。Windowsはオープンソースではなくプロプライエタリ※3なので、ビジネス戦略上ソースコードを出さない分、ドキュメントを充実させるというのはあるべき姿といえます。
当たり前のことですが、世の中で使用人口が多いプラットフォームほど情報量も多くなります。何か分からないことにぶっかった時に解決する確率が高くなります。言い換えると、技術 者としてのスキル不足を情報量(先人の知恵)でカバーすることができるということです。裏を返せば、豊富な情報量がないと問題解決ができないということは、自分自身にスキルがないと いうこと。若かった頃の筆者はまさにITエンジニアとして駆け出しだったので、自分のスキルのなさを情報不足のせいにしていたのです。
いずれにしても、HP-UX でのデバイスドライバ開発は情報量 が少なく、カーネルがプロプライエタリであることから、まさにブラックボックスとの闘いでした。デバイスドライバはカーネルの動作や仕様に合わせて実装する必要があり、その通りに作ってあるはずなのですが、実際にテストしてみると期待通りに動作せず、障害対応※4が大変でした。カーネルのソースコードを見ることができないので、カーネルの動きがよく分からなかったからです。
過去を振り返ると、当時は貴重な業務経験をさせてもらっていたと改めて思います。HP-UX デバイスドライバ開発という仕事を悪戦苦闘しながらも5年も続けられたことで、その後の Linuxの低レイヤを理解する足がかりとなりました。何事も経験であり、独学では到達することができなかったでしょう。しかし、若い頃はそのような悟りの境地に至ることはできません でした。

※3:プロプライエタリ (Proprietary)は所有者・独占所有物という意味で、 略して
プロプラとも呼ばれる。ソースコードが一般に開示されていないという意味合いで
使われ、オープンソースの対語。
※4:ソフトウェアのバグの原因を調べること。トラブルシュートや問題調査、
デバッグと呼ぶこともある。

【1.2 Linux との出会い】
2000年から2001年にかけて、日本に Linuxブームが到来します。この時に初めて LinuxというOSの存在を知りました。当時は Windows2005※5が登場し、PCで使うOSといえば Windows 一択でした。また、2001 年にADSLが登場し、インターネット常時接続時代に移行していきます。コンピュータのプラットフォームが Microsoft※6一色であることに難色を示す人たちがいて、「Windows だけを使っていていいのか」という風潮もありました。そんななか、Linux が「第2のOS」としてメディアに取り上げられたのです。
図 1-2 リーナス氏の自伝
2001年にLinuxの第一人者であるリーナス・トーバルズ氏が来日し、自伝書籍『それがぼくには楽しかったから全世界を巻き込んだリナックス革命の真実』(図 1-2)が出版されたこともあり、Linuxブームが加速しました。
新聞にもニュースとして掲載され、国内におけるLinuxの読み方もこの時に「リナックス」に決まりました。それまではリヌックスやライナックスなど発音が国内で統一されていなかった のです。なお、リーナス氏本人も発音はなんでもよいと公言しており、氏の録音を聞くとリラックスに近い発音になっています。
当時はインターネットがまだそれほど普及していなかったこともあり、コンピュータ雑誌が多数発行されていた時代でした。当然のことながらLinuxに関する特集が組まれ、Linux専門誌 も刊行されました。書籍も多数出版されました。今も昔もIT 業界では何らかのブームが起こると、それに関連する本が雨後の筍のように発売されるという現象があります。
ITエンジニアとしてブームになっている技術にはひとまず飛びついておく、というのは基本中の基本です。ブームの最中は情報量が格段に増えるからです。つまり、自己学習に最適な状態になるということです。ブームになれば周りにもやっている人が増えるので、分からないことがあれば聞くこともできます。ご多分に漏れず、筆者もLinuxに注目することにしました。
そして、この時に初めてオープンソース※7という言葉を知りました。オープンソースはソフトウェアのソースコードが一般公開されており、ライセンス※8に準拠すれば誰でも自由にソースコードを利用できます。当時の日本には存在しなかった文化です。
商用ソフトウェアやシェアウェア※9はソースコードが非公開であるのが一般的ですが、フリーソフトでもソースコードが開示されているものは多くありませんでした。また、フリーソフ トは個人で開発するものであり、ソースコードをインターネット上に置き、不特定多数の人たちで開発を行うという形態ではありませんでした。
筆者はこの時、「Linux というOSはオープンソースであり、すべてのソースコードが公開されている」ということに大変驚き、雷に打たれたような衝撃を受けました。巷にある雑誌や書籍でもLinuxのソースコードの解説が載るようになり、「カーネルを学ぶ」という絶好の機会が来たのだと確信しました。
一介のプログラマとしてアプリケーションしか分からない技術者で終わりたくはない。カーネルも分かるようになれば技術者として一段と上に行くことができるかもしれない。HP-UXデバイスドライバ開発でモヤモヤしていたことが解消されるかもしれない。そう強く感じました。
こうして、筆者はLinuxの世界へ足を踏み入れることになったのです。なお、この時点ではあくまで趣味の範囲内です。当時はLinuxブームとはいえ、業務の製品に使えるレベルではない とされていたので、現場の人からは「Linux なんておもちゃ」「クラッシュダンプも採取できないOS」と揶揄されていました。しかしながら、Linuxを仕事でやるのか、やらないのかということはどうでもよいことでした。OSのしくみを理解することで、自分自身の技術力を引き上げることが筆者の目的だったからです。

【1.3 プロプライエタリとオープンソースのどちらが幸せか】
筆者はプロのプログラマとして20年以上、開発の仕事をしてきました。そのなかで、プロプライエタリ(HP-UXとWindows)とオープンソース(Linux)の両方の環境を経験しました。どちらも 一長一短ですが、個人的な見解としてはLinuxの仕事が一番やりやすかったです。どのプラットフォームの仕事も楽しくて、あれが好き、これは嫌いというつもりはまったくありません。 プロなのですから、どんなプラットフォームでも仕事が楽しめることが大切です。

※5:WindowsNT5.0 として開発されていたOSがWindows2000(略してW2K)となり、
Windows98 の後継として一般向けに普及した。NTカーネルベースなので安定性は抜群。Windows10はNT10 とも言われる。
※6:当時はオープンソースを目の敵にする人もいた。
※7:オープンソースソフトウェア(Open Source Software)は略してOSSとも呼ばれる。
※8:オープンソースのソースコードには著作権が含まれるため、ソースコードの取り扱いに
ついて規定されている。著作権を放棄したソフトウェアをPDS(Public Domain Software)と呼ぶ。
※9:試用期間は無償で使用してよいが、継続使用は対価を支払う必要がある。
秀丸エディタが定番。

平田豊 (著), MBビジネス研究班 (著, 編集)
出版社: まんがびと (2019/7/26)、出典:出版社HP