Angular, Blockchain, Science とか

Angular, Blockchain, Science全般 の情報を主に書いていきます。

Unix/Linux おすすめ本

Unix/Linuxのおすすめ本を紹介していきたいと思います。

まあ、LinuxカーネルぐらいITエンジニアなら理解しときたいですよね???

初心者

1週間でLPICの基礎が学べる本 第2版

1週間でLPICの基礎が学べる本 第2版

新しいLinuxの教科書

新しいLinuxの教科書

Linuxに触ったことがないよって人は、この二冊がおすすめです。初心者でも挫折することなく学べると思います。この後に

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界

  • 作者: ブルース・ブリン,Bruce Blinn,山下哲典
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2003/02
  • メディア: 単行本
  • 購入: 18人 クリック: 331回
  • この商品を含むブログ (64件) を見る

で、シェルはOKでしょう。

初級者

ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道

ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道

Unix/Linuxプログラミング理論と実践

Unix/Linuxプログラミング理論と実践

The Art of UNIX Programming

The Art of UNIX Programming

システムプログラミングも学んでいきましょう。システムコールは別に難しくないので、分厚い本も気負わずに読んでいきましょう。

特に、Unix/Linux理論と実践はすごいおすすめです。

中級者

詳解UNIXプログラミング 第3版

詳解UNIXプログラミング 第3版

Linuxプログラミングインタフェース

Linuxプログラミングインタフェース

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI

  • 作者: W.リチャードスティーヴンス,W.Richard Stevens,篠田陽一
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 1999/07
  • メディア: 単行本
  • 購入: 8人 クリック: 151回
  • この商品を含むブログ (37件) を見る

いわゆるシステムプログラミングの名著たちですね。ここら辺は読んでいて当然の本なので、読みこみましょう。

システム管理

Linuxシステム管理

Linuxシステム管理

UNIXシステム管理 第3版〈VOLUME 1〉

UNIXシステム管理 第3版〈VOLUME 1〉

  • 作者: アイリーンフリッシュ,AEleen Frisch,飯塚正樹,下田みどり
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/07
  • メディア: 単行本
  • 購入: 1人 クリック: 18回
  • この商品を含むブログ (14件) を見る
UNIXシステム管理 第3版〈VOLUME2〉

UNIXシステム管理 第3版〈VOLUME2〉

  • 作者: アイリーンフリッシュ,AEleen Frisch,飯塚正樹,下田みどり
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/08
  • メディア: 単行本
  • 購入: 1人 クリック: 15回
  • この商品を含むブログ (9件) を見る
Linuxネットワーク管理 第3版

Linuxネットワーク管理 第3版

  • 作者: Tony Bautts,Terry Dawson,Gregor N. Purdy,高橋浩和(監訳),伊藤真浩(監訳),三好和人
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2005/11/17
  • メディア: 大型本
  • 購入: 1人 クリック: 13回
  • この商品を含むブログ (7件) を見る

とりあえずこの4冊でOKでしょう。ほかには

TCP/IPネットワーク管理

TCP/IPネットワーク管理

  • 作者: クレイグハント,Craig Hunt,村井純,林秀幸,土本康生
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2003/06
  • メディア: 単行本
  • 購入: 1人 クリック: 1回
  • この商品を含むブログ (5件) を見る
DNS & BIND 第5版

DNS & BIND 第5版

萌えるシリーズ 萌え萌えうにっくす! UNIXネットワーク管理ガイド ? PC UNIXネットワーク管理日々の疑問に萌えの一手

萌えるシリーズ 萌え萌えうにっくす! UNIXネットワーク管理ガイド ? PC UNIXネットワーク管理日々の疑問に萌えの一手

あたりも読んでおきましょう。

カーネル

32ビットコンピュータをやさしく語る はじめて読む486 (アスキー書籍)

32ビットコンピュータをやさしく語る はじめて読む486 (アスキー書籍)

カーネルの勉強を始める前にこの486は必ず読みましょう。すげえ役に立ちます。
熱血! アセンブラ入門

熱血! アセンブラ入門

アセンブラもわかっておいた方が良いですね。

カーネルは

UNIXカーネルの設計

UNIXカーネルの設計

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

  • 作者: Daniel P. Bovet,Marco Cesati,高橋浩和,杉田由美子,清水正明,高杉昌督,平松雅巳,安井隆宏
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2007/02/26
  • メディア: 大型本
  • 購入: 9人 クリック: 269回
  • この商品を含むブログ (71件) を見る
Linuxカーネル2.6解読室

Linuxカーネル2.6解読室

BSDカーネルの設計と実装―FreeBSD詳解

BSDカーネルの設計と実装―FreeBSD詳解

  • 作者: マーシャル・カークマキュージック,ジョージ・V.ネヴィル‐ニール,砂原秀樹,Marshall Kirk McKusick,George V. Neville‐Neil,歌代和正
  • 出版社/メーカー: アスキー
  • 発売日: 2005/10/18
  • メディア: 単行本
  • クリック: 122回
  • この商品を含むブログ (57件) を見る

このあたりを読んでおけばだいたいソースコードを読めるようになります。

まあ半年もあればこのぐらいできるでしょう。

このぐらいやれば、Unix/Linuxできるよって自称しても許されると思います。

Linuxカーネル、glibc、FreeBSDあたりのソースコードはある程度読んでおきましょう。

あとXenやKVMなどの仮想化も忘れずに。

6月のまとめと7月にやること

6月は関数型言語をやるとか言いましたが、Haskellをちょっとやっただけでした。

代わりに、オペレーティングシステムや言語処理をまじめに勉強し始めました。

とりあえず図書館から有名どころの本は全部借りてきたので、7月中に全部読みたいと思います。

プログラミングも少しづつできることが増えてきたのでこの調子で勉強し続けたいと思います。

ということで、

7月は、 Linux/Unixカーネル、言語処理(コンパイラ・インタープリタ)、アルゴリズム

をやっていきます。

フィボナッチ数列 C++

ただのフィボナッチ数列。いわゆる再帰ってやつですね。

#include <iostream>
using namespace std;

int fib(int a)
{
    if(a <= 1) return 1;
    return fib(a-1) + fib(a-2);
}

int main()
{
    for(int i=0; i<20; i++)
    {
        cout << fib(i) << endl;
    }
}

結果は

1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765

最小公倍数と最大公約数

よく使いますね。

#include <iostream>
using namespace std;

// 最大公約数
int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b, a % b);
}

// 最小公倍数
int lcm(int a, int b)
{
    int c = a * b / gcd(a,b);
    return c;
}

int main()
{
    int a = gcd(256, 828);
    int b = lcm(256, 828);
    cout << a << endl;
    cout << b << endl;

    return 0;
}