くろねこ日記

ソフトウェアに関する技術メモが多いです.

「はじめてUNIXで仕事をする人が読む本」を読んだ

はじめに

オープンソースカンファレンス2014に参加してきました(今更ですが).

オープンデータハッカソンに参加したり(楽しかったので次回も参加できたら是非), LT(カーネル空間上に草生やす発表が特に面白かったです)を楽しませてもらったり,Sinatra札幌ブースでは僕が作った未完成ゲーム(お化けをやっつけるゲーム)が走っておりヒヤヒヤしたりと(展示していただいて感謝)充実した一日でした.

オープンソースカンファレンスの懇親会にも参加させていただきました.ジンギスカン美味しかったです.懇親会ではLTが再び開かれていたり,様々なグッズが貰えるじゃんけん大会(オライリーTシャツ頂きました)や学生・駆け出しエンジニア向けにグッズのバラマキがありました.

グッズのバラマキでは,以前から読みたかった「はじめてUNIXで仕事をする人が読む本」というのを頂きました.何方から「読んだらブログに書いてね」と言われた気もしたので大分時間が経ってしまいましたが,感想を載せておきます.遅くなってすみません.

構成

以下が本書の構成です.てんこ盛りですね.しかし,これでざっと200ページ弱.なので,UNIXはどういうものか,何が便利なのかよくわからないという読者には最適な本だと思います. 事実,僕も普段からUNIX(OSXの上)を使っておりますが,周りに使える人も居ないまま独りで学んだこともあって,UNIX使いはこのくらい使えれば良いよという指標を頂いたようで安心できました. それだけでも読む価値はあったと思います.

第1部 生活環境編
第1章 ログインログアウト
1.1 そもそもログインとは
1.2 TELNETによるリモートログイン
1.3 SSHによるリモートログイン
1.4 ログアウト
第2章 UNIXの基本操作
2.1 シェル
2.2 リダイレクションとパイプ
2.3 UNIXのファイルシステム
2.4 基本のファイル操作
2.5 パーミッション・オーナーの管理
2.6 正規表現
2.7 grep
2.8 sed
2.9 awk
2.10 アーカイバ
2.11 その他のコマンド
第3章 テキストエディタ
3.1 基本のテキストエディタ
3.2 限定された環境でのファイル編集
3.3 ViとVim
3.4 Emacs
第4章 作業の自動化(シェルスクリプト)
4.1 シェルスクリプトによる作業自動化の必要性と利点
4.2 Bourne shellについて
4.3 簡単なスクリプトの作成と実行
4.4 シェルスクリプトの実用例
第5章 オンラインマニュアル
5.1 オンラインマニュアルを必要とする場面
5.2 氾濫する情報の危険性
5.3 manコマンド
5.4 infoコマンド
5.5 ヘルプメッセージ
第6章 セキュリティ
6.1 UNIXにおけるセキュリティ
6.2 ルート権限の獲得方法
6.3 共通鍵暗号と公開鍵暗号
6.4 SSHの応用
6.5 PGPによる暗号化、電子署名
第7章 UNIXシステム管理
7.1 UNIXにおける管理作業
7.2 起動とシャットダウン
7.3 ユーザとグループの管理
7.4 パッケージ管理
7.5 TCP/IPネットワーク管理
7.6 DNS(名前サービス)
7.7 サービスの管理
7.8 トラブルシュート
第2部 プログラミング環境編
第8章 UNIXプログラミング環境
8.1 プログラミング環境概要
8.2 C言語による開発実例
8.3 Javaによる開発実例
8.4 LL言語による開発実例
第9章 バージョン管理システム
9.1 バージョン管理システムとは
9.2 バージョン管理システムの種類
9.3 バージョン管理システムの使い方
9.4 Subversionの使い方
9.5 Gitの利用方法
第10章 ソースコードからのドキュメントの作成
10.1 はじめに
10.2 ドキュメント生成ツールの種類
10.3 ドキュメント生成ツールの利用方法
第11章 ソフトウェアライセンス
11.1 ライセンスを考慮する理由
11.2 オープンソースライセンス
第3部 ネットワーク技術編
第12章 UNIXとネットワーク技術
12.1 TCP/IP実装の公開と普及
12.2 LANとWAN
12.3 ネットワーク端末としてのUNIX
第13章 OSI参照モデル
13.1 OSI参照モデル
13.2 TCP/IPとOSI参照モデル
第14章 データリンク層
14.1 データリンクとは
14.2 データリンクの基本
14.3 Ethernet
14.4 無線LAN
14.5 Point-to-Point接続
第15章 IPと関連プロトコル
15.1 IPの基本
15.2 IPv4とIPv6
15.3 IPアドレス
15.4 特殊なIPアドレス
15.5 ルーティング
15.6 関連プロトコル
第16章 TCPとUDP
16.1 ポート番号
16.2 UDP
16.3 TCP
16.4 TCPのコネクション
16.5 TCPの通信
16.6 TCP通信の制御
16.7 TCPとUDPの使い分け
第17章 アプリケーションプロトコル
17.1 Webアクセス(HTTPHTTPS)
17.2 電子メール(SMTPPOPIMAP)
17.3 リモートログイン(TELNETSSH)
17.4 ファイル転送(FTPrsync)
17.5 ファイル共有(NFSSMB)
17.6 VoIP(SIPRTP)
17.7 システム運用管理(DNSDHCPNTPSNMP)
17.8 Xプロトコル
第18章 IP関連の技術
18.1 名前解決
18.2 IPアドレスの付与
18.3 アドレス変換(NAT・NAPT・IPマスカレード)
18.4 トラブルシューティング
第19章 ネットワークセキュリティ
19.1 ネットワーク上の攻撃
19.2 認証システム
19.3 通信フィルタとファイヤウォール
19.4 通信の暗号化
19.5 VPN

良かったところ

本当にざっくりと網羅的にUNIXの便利ツールの使い方と紹介が書かれており,さきほど書いた指標を知りたい人におすすめの一冊です.ただ,UNIXのみというよりも,オープンソース界隈で必要とされるツール(VCS,ソフトウェアライセンスとか)の紹介が多く,Linux使いも読んでも良さそうな記述が多かったです(ところどころLinuxの話も記載されている).

また,低レイヤな部分についても書かれており(OSI参照モデルなど)こういう大事なところもきっちりフォロウしているのは凄いと思いました.

  • とりわけ面白かったところ

    • Javaの開発事例というのがあるのですが,JDKコマンドラインツールだけで開発する事例を載せてたりとJavaの本にしてはユニークかもしれません.

    • 「限定された環境でのファイル編集」という項目では,UNIXエンジニアは,破損したファイルシステムや組み込み環境のようにテキストエディタも使えない環境で作業することがあります.というようなことが書かれております.どんな環境なのか想像しにくいですが,echoやcat,readを駆使してファイルを編集する技を見せてたりと,シェル芸が漂っていて面白かったです.

    • ツールについてもその誕生経緯など歴史的な記述も多く非常に参考になりました.

悪かったところ

網羅的に書かれすぎており,一つ一つの話について消化不良感が否めないです. ソフトウェアライセンスについてもう少し細かい紹介が欲しかったです. なので,この一冊から普段使っているツールについて新しい知識を得るということは期待しないほうが良いです(そういう本ですし).

LL言語の紹介では本書の紹介ではpythonrubyについて書いてあるにも関わらず,perlの基本的な紹介で終ったりと,ちょっとくらい対象読者に書かれていたPythonRubyについても紹介したらどうかなとは思いました.

まとめ

日頃からUNIXに触れる人にとっては一般的にこのくらい知っておけばOKという基準が示されているようで安心できます.

UNIXを使ったことがない人にとっては,網羅的に書かれているので,読んだら一つ一つ後で調べたら良いかもしれません.