Linux基礎

## はじめに
会社の課題図書を毎週1冊のペースで読んで、何かしらアウトプットするという活動を個人的に勝手にやっています。
今回は、[Linuxイージス](http://www.infraeye.com/study/studyz4.html) を読んで、知らなかったこと、忘れそうなのでメモしておこうと思ったことについて抜粋して整理してみました。

## Linuxハードウェア
#### Linuxデバイス情報
 + Linuxカーネルが認識しているデバイスに関する情報は /proc以下のファイルで確認

  - /proc/cpuinfo | CPUの情報
  - /proc/meminfo | メモリの情報
  - /proc/ioports | I/Oポートの情報
  - /proc/interrupts | IRQの情報
  - /proc/bus/pci/devices | PCIデバイスの情報 ( /proc/pci は廃止 )
  - /proc/scsi/scsi | SCSIデバイスの情報
  - /proc/bus/usb/devices | USBデバイスの情報

#### デバイスファイル
+ Linuxでは全てのハードウェアはデバイスファイルとして表される
+ dev ディレクトリ以下のデバイスファイルの読み書きを通してハードウェアにアクセスしているので、デバイスファイルがない場合、そのデバイスを利用することができない

#### デバイスドライバ
 + デバイスドライバはカーネルモジュールとして提供
 + デバイスドライバをカーネルに取り込むことをロードするという
 + 現在のロードされているモジュールは、lsmodコマンドで確認できる
 + 必要なデバイスドライバは通常は自動的にロードされる
 + 手動でロードする場合、modprobeコマンドで可能

#### lsusb/lspciコマンド
 + USBデバイスの情報を表示するためには lsusb コマンドを使う
 + PCIデバイスの情報を表示するためには lspci コマンドを使う

## システムブート
#### システムブートの流れ
 1. 電源ON
 2. BIOSが起動してハードウェアチェック → MBR(Master Root Record)からブートローダを起動
 3. ブートローダでは、ハードディスク上からカーネルをメモリ上へ読み込む
 4. カーネルは、メモリの初期化、システムクロックの設定などを行う
 5. initは、システムの初期化スクリプトを実行し、ランレベルに応じたデーモンを起動
 6. ブートが完了すると、Linuxへのログインプロンプトが表示され、起動処理が完了

#### initプロセス起動
 + システム起動時の initプロセス(/sbin/init)では、/etc/inittabファイルに従いシステムサービスを起動
 + サービス起動の流れは下記。
   1. initが、/etc/inittab を読み込む。
   2. initが、/etc/rc.sysinitスクリプトを実行する。
   3. initが、/etc/rcスクリプトを実行する。
   4. /etc/rcスクリプトが、/etc/rc（ランレベル).d ディレクトリ配下の起動スクリプトを実行する。
 + SysVinit:サービスがあらかじめ決められた順番で機動する仕組み<p>
   Upstart:サービスを並列で起動することで短時間でシステムを起動する仕組み
 + SysVinitでは/etc/init.d/配下のファイルを実行して、サービス起動させる。
 + /etc/rc*.d ディレクトリの起動スクリプトの実体は、すべて /etc/init.d に格納されている。
 + /etc/rc<数字>.d の<数字>がランレベルを表している。

#### 起動時のログ
 + /var/log/dmesg ==>> システム起動時のメッセージが出力される
 + $ dmesg でコマンド実行し確認できる


## ランレベル
 + ランレベルは、Linuxの動作モードを表している
 + ランレベル種類は下記
      - 0：システムの停止
      - 1：シングルユーザーモード、ネットワーク無し
      - 2：マルチユーザーモード（NFSマウントなし）
      - 3：マルチユーザーモード（コンソール）、ネットワーク有り
      - 4：未使用
      - 5：マルチユーザーモード（X Windows）、ネットワーク有り
      - 6：システム再起動
 + 各ランレベルの説明
   - ランレベル0 : システムが停止した状態。ランレベルを0にするということは、システムのシャットダウンをするということ同じ意味です。
   - ランレベル1 : シングルユーザーモード、いわゆるセーフモードです。ネットワークとデーモンは起動せず、rootでしかログインできません。サーバーにトラブルが起きた場合、コンソールでのトラブル対応時に利用する動作モードです。
   - ランレベル2 : NFSマウントなしのマルチユーザーモードです。
   - ランレベル3 : X Windows以外のデーモンのほとんどを起動する動作モードです。Webサーバーなどはランレベル3で動作しています。
   - ランレベル5	: X Windowsのデーモンも起動するので、Linuxをデスクトップマシンとして利用する場合やX Windowsを利用するサーバーはランレベル5で動作しています
   - ランレベル6 : システム再起動です。reboot時にはランレベルが6になります。
 + シャットダウンコマンド
   - shutdown -h now : いますぐシャットダウン
   - shutdown -r now : いますぐ再起動

## ライブラリ
#### ライブラリ
 + 実行ファイルが必要とする共有ライブラリは、ldd <実行ファイル名> で確認できる
 + /lib や /usr/lib ディレクトリ以外の場所に共有ライブラリを配置する場合、その共有ライブラリの検索パスを設定する必要あり
 + 設定方法は下記の２つ。
  1. /etc/ld.so.confファイルに追記
  2. 環境変数LD_LIBRARY_PATH へパス追加

#### RPMファイル
 + 表記ルール
   - (パッケージ名)-(バージョン)-(リリース番号).(アーキテクチャ).rpm
 + rpmファイルの表記名の存在するアーキテクチャについて
   - noarc ==>> 機種(CPU)に依存しないパッケージ
   - ppc ==>> PowerPC(power Macintosh)
   - i386 ==>>	i386およびその互換CPU。インテル系PC
   - i486 ==>>	i486およびその互換CPU。
   - i586 ==>>	Pentium、MMX Pentiumおよびその互換CPU。
   - i686 ==>>	Pentium Pro、Pentium II、Pentium III、Pentium4、Celeronなど。
   - k6 ==>>	K6、K6-2、K6-III。
   - athlon ==>>	Athlon、Athlon MP、Athlon XP。
   - x86_64 ==>>	Opteron、Athlon64、Xeon（EM64T）。
   - src ==>>	ソースパッケージ。自分で rpm パッケージを作ったりする際(rebuild)に必要。
   - alpha ==>>	alphaチップ搭載コンピュータ。
   - sparc ==>>	SUN SPARC。

#### yum
 + YUMの設定は、下記。
   - /etc/yum.conf ファイルに記述する必要がある
   - パッケージのリポジトリ情報を設定するためには、
      - /etc/yum.conf ファイルに設定を行うか <p>or<p>
      - /etc/yum.repos.dディレクトリにダウンロードサイトのURLを記載したファイルを格納する
   - /etc/yum.confファイルは基本的に変更の必要はない

## ファイルシステム
#### ハードディスク利用
 + Linuxでのハードディスク利用ステップ
   1. 電源OFFの状態で、ハードディスクをシステムに物理的に接続
   2. 追加したハードディスクのデバイスファイルが作成されていることを確認
   3. fdiskコマンド でハードディスクにパーティションを作成
   4. mke2fsコマンド で各パーティションにおいてext3ファイルシステムを作成
   5. mountコマンド でファイルシステムのマウント
 + ide/scsi/sata/sas
   - 違いはhttp://nw.seeeko.com/archives/50539781.html
   - 参考URL：http://www.ctc-g.co.jp/report/column/storage_se/vol07.html

#### 各ファイルシステム
 + Windows : NTFS
 + Linux : ext2、ext3、ext4

#### スワップ
 + パーティション上にスワップ領域を作成するためにはmkswapコマンドで作成する

#### マウント
 + マウント方法
   1. /etc/fstabファイルの編集
   2. mountコマンドの実行、または再起動（init 6）の実行<p>
    ※/etc/fstabファイルの編集を行わずにmountコマンドだけを実行した場合、再起動後に無効になる

#### ディスククォータ
 + ディスククォータとは、ユーザまたはグループごとに使用可能なディスク容量を制限。この制限はディスク容量のサイズだけでなく、inode数でも指定可能。
 + ハードリミット：設定値を超えるとディスク書き込み不可
 + ソフトリミット：設定値を超えるとディスク書き込みは可能だが、猶予をすぎると書き込み不可

#### ディレクトリ構成
 + ルートファイルシステムに含める必要のあるディレクトリ
   - /bin
       - 一般ユーザーでも実行可能な基本的なコマンドが配置
       - 例 ： cat、chmod、cp、echo、kill、ls、more、pwd、rm、su、umount

   - /sbin
       - rootユーザーのみが実行可能なシステム管理コマンドが配置。
       - 例 ： shutdown、fdisk、halt、ifconfig、init、mkfs、reboot、route

   - /etc
       - システムやコマンドの各種設定ファイル、スクリプトファイルが配置。

   - /dev
       - ハードディスク、CD-ROM、DVD-ROMなどのデバイスファイルが配置。

   - /lib
       - 共有ライブラリやカーネルモジュールが配置。
       - /bin、/sbinにあるコマンドが必要とするライブラリがここに配置される。

 + ルートファイルシステム以下の主なディレクトリ
   - /mnt
       - CD-ROMなどのファイルシステムの一時的なマウントポイント。最近は /media が使われる。
   - /opt
       - 追加パッケージや追加プログラムがインストールされるディレクトリ。
   - /proc
       - カーネル内部の情報にアクセスするための仮想ファイルシステム。
   - /root
       - rootユーザー専用のディレクトリ。FHSではオプション扱い。
   - /boot
       - システム起動に必要なカーネルイメージや設定ファイルが配置される。起動時に影響を
       - 受けないようにルートファイルシステムとは別にして、ディスクの先頭付近に配置される場合もある

   - /media
       - CD-ROMやUSBなどのリムーバルデバイスがマウントされるディレクトリ。
   - /home
       - 一般ユーザーごとのホームディレクトリ。FHSではオプション扱い。
   - /srv
       - システムで提供されるサイト特有のデータ ( WWWなど ) が配置。
   - /tmp
       - 一時的に使用する作業用ファイルが配置。全てのユーザーが読み書き可能。
   - /var
       - ログファイル、メールやプリンタのスプールなど頻繁に更新されるファイルが配置。
   - /usr
       - 一般ユーザーが共用するコマンド、ライブラリ、ドキュメントなどが配置される。

 + /var以下の主なディレクトリ
   - /var/cache
       - manコマンドで使用される一時的なキャッシュファイルが配置
   - /var/lock
       - アプリケーションの排他制御で使用されるロックファイルが配置
   - /var/log
       - システムのログファイル（messages）、メールログ（maillog）などが配置
   - /var/run
       - システム状態を示すファイルが配置
   - /var/spool
       - 送信待ちメール（/var/spool/mqueue）、印刷待ちのデータ（/var/spool/lpd）などが配置

 + /usr以下の主なディレクトリ
   - /usr/bin
       - 一般ユーザー、rootユーザーが使用する基本コマンドが配置。
   - /usr/sbin
       - システム管理コマンドが配置。
   - /usr/lib
       - プログラムに必要な共有ライブラリが配置。
   - /usr/local
       - 個人作成のコマンドなど、ローカルシステム管理で必要なプログラム、ドキュメントが配置。
   - /usr/share
       - x86などのアーキテクチャに依存しないファイル、manコマンドで使用するマニュアルなどが配置。
   - /usr/src
       - Linuxのカーネルソースなどのソースコードが配置。