システムアーキテクチャ　①ハードウェア設定の決定と構成②システムのブート③ランレベルの変更とシステムのシャットダウンランレベルの変更とシステムのシャットダウン(Linucの勉強します）自分の忘備録

##lspciコマンド
＝cat /proc/bus/pci/devices
PCIデバイスの情報を表示するコマンド
-vオプションで詳細表示となる

(1)PCI識別番号　00:03.3
・(2)PCIデバイスの種類　Serial controller
・(3)ベンダー名（ベンダーID）　Intel Corporation
・(4)デバイス名　Mobile 4 Series Chipset AMT SOL Redirection (rev 07)
・(5)バスの速度(詳細表示のみ)　66MHz
・(6)IRQ番号(詳細表示のみ)　17　格納されているファイルは、/proc/ioports
・(7)I/Oポートアドレス(詳細表示のみ)　1830

##Isusb
接続されたUSBデバイスの情報を表示するコマンド。
/proc/bus/usb/devices」には接続されたUSBデバイスの情報が格納されている。
ファイルの中身はcatコマンドでも確認OK

なのでIsusb=cat/proc/bus/usb/devicesですね！

##udev
ホットプラグデバイスを接続した際にデバイスファイルを自動的に作成するのはudevです。
カーネルはデバイスを検知すると「/sys」以下（sysfsと呼ばれます）の情報を更新しますが、その更新をudevは検知し、/dev以下にデバイスファイルを動的に作成します。
デバイスファイル作成時の動作は、「/etc/udev/rules.d」ディレクトリに配置された設定ファイル（拡張子「.rules」）に記述された情報に基づいて行われます。


##systemctl
サービスの稼働状況や起動設定を管理するコマンド
①is-active サービスが稼働しているか確認する
②start　サービスを起動する
③stop サービスを止める
④status サービスの状態を表示する
⑤list-unit-files 全てのUnit定義ファイルを一覧表示させる。

![名称未設定.png１「.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/560dae7f-f8f5-b868-06ec-a055a1f58821.png)


##D-Busについて
D-Bus（Desktop Bus）は、プログラム同士が情報を伝達するプロセス間通信機構のひとつです。Linuxではdbus-daemonなどがプロセス間通信の中継を行います。この機能により、例えば新しいデバイスの認識情報を他のアプリケーションに伝達し、そのアプリケーションが新しいデバイスをすぐに使えるようになるなどのシステム管理上の利便性も向上します。
つまり、Linuxのプロセス間の通信手段的な。

##USBについて
互換性のないUHCIとOHCIを統合するために開発されました。

![名称未設定.pngp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/e3dae589-cbb3-cf64-8a55-0baa83a5e6d0.png)

![名称未設定.png、l.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/630280e1-c676-e522-4aed-7f836ef33c30.png)

##接続されたUSBデバイスの情報を確認する場所
lsusb
cat/proc/bus/usb/device

##USBデバイスクラス
![名称未設定.png１１１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/8ee24bc7-3e8a-390b-4aa9-724af61542bf.png)

##IOポートアドレス
I/Oポートアドレスとは周辺機器(デバイス)とCPUがデータをやり取りする際に使用する16ビットのアドレスのことです。「/proc/ioports」ファイルでは、どのデバイスにどのI/Oポートアドレスが割り当てられているのかが確認できます。
なお、I/Oポートアドレスが重複しているとハードウェアが正常に動作しないことがあります。

「/proc/ioports」ファイルの内容はcatコマンドなどで確認できます。

##/proc
起動中のプロセスやカーネルが認識しているハードウェアの情報が格納されているディレクトリは「/proc」です。

「/proc」ディレクトリはプロセス、ハードウェアおよびシステムリソースなどの情報を扱うための擬似的なファイルシステムです。そのため、ハードディスク上にファイルは存在せず、システムが起動する際にメモリ上に作成されます。

![名称未設定.pnghhh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/6336df4d-dcda-98bc-9168-81cdd3093caa.png)

##modprobe
依存関係を考慮してカーネルモジュールをロードまたはアンロードするコマンド




##IRQ
IRQ(Interrupt ReQuest)とは、マウスやキーボードなどの周辺機器(デバイス)からCPUへの割り込み要求のことです。IRQには0から15までの16個の番号がついており、そのうちのいくつかは特定のデバイスに割り当てられています。例えば0はシステムタイマー、1はキーボードに割り当てられています。
なお、IRQ番号が重複しているとハードウェアが正常に動作しないことがあります。

/proc/interrupts


#SCSI
HDDや周辺機器との接続をするための規格の１つ。
８bitのSCSIでは、8台のデバイスをつなぐことができるが、1台はコントローラとなるらしい。

##IRQ
RQとは、コンピュータ内部の装置や周辺機器などが中央処理装置（CPU）に信号を送り、現在の処理を中断して強制的に指定した処理を実行するよう要求すること。 「割り込み要求」とも訳される。
/proc/interruptsにこれに関する情報が入ってる。

##DMAチャネル
DMAチャネル CPUを介することなく、メインメモリと周辺機器の間で情報転送ができるようにするインターフェース。
/proc/dma
メモリの使用状況は「/proc/meminfo」ファイルで確認できます。
CPUに関する情報は「/proc/cpuinfo」で確認できます。

##procディレクトリ
起動中のプロセスやカーネルが認識しているハードウェアの情報が格納されているディレクトリ。

##/etc/inittab
ctrl+alt+del」キーを押下した際の動作を設定するファイルは「/etc/inittab」です。
「/etc/inittab」を設定ファイルとして使用しないinitプログラムは「Upstart」と「systemd」です。
最近のシステムではinitプログラムとして、Upstartやsystemdが採用されることが多くなっています。


##カーネル
カーネルのログが記録されるなど、Linuxでメインで使用されるログファイルは「/var/log/messages」です。
システム起動時には様々なメッセージが出力されます。起動時に出力されたメッセージは後からdmesgコマンドで確認できます。

カーネルは起動されると、高度にハードウェアを認識・制御し、ルートパーティションのマウントなど様々な初期化処理を行います。
その後、initという特別な最初のプロセスを起動します。
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、initプロセスとして「/sbin/init」が起動されます。なお、カーネルはブートローダの次に起動されます。


##systemdで扱う処理はUnit
![名称未設定.pngああ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/79300842-40db-1fb1-b4c7-c1a7c9db4357.png)

systemdはSysVinitを置き換える新しいinitの仕組みのこと。
これで扱う処理はUnit という単位で管理をする。Unitは設定ファイルであり、Unitの設定に従ってsystemdが処理を実行する。SysVinitのようにスクリプトを実行するわけではありません。
systemdはUpstartと同様、各サービスを並列起動することができます。そのため、順次起動していくSysVinitに比べて高速なシステム起動や停止が行えます。



systemdが稼働するシステムにおいて、システム起動時に最初に実行されるUnitは「/etc/systemd/system/default.target」です。
default.targetをSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動できるようになります。SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。

![名称未設定.png333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/5d77f448-9118-306c-ed8e-7293b1b4c748.png)
これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。

##systemdの再起動をする
systemctl rescue」コマンドを使うと、現在のランレベルをシングルユーザーモード（systemdの rescue.target 起動に相当）に変更することができます。モード変更時には以下の画面表示になり、rootユーザーのパスワードを入力するまで操作ができません。

systemctl default」コマンドの実行、または「^D（Ctrl-D 押下）」によって通常モードに戻すことができます。

##SysVinit
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムで、デフォルトのランレベルの設定を行うことができるファイルは「/etc/inittab」です。

SysVinitではシステムの起動時、initが「/etc/inittab」を参照し、ランレベルに応じた起動スクリプトを実行して各種サービスを順に起動していきます。


##ランレベル
　Linuxの動作モードのこと
![名称未設定.png111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/49823b21-f6c1-8f44-3182-10f265d9ce44.png)
2,3はテキストベースのCUI
5はGUI
１は管理者レベル、rootのみ

「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムで、デフォルトのランレベルの設定を行うことができるファイルは「/etc/inittab」です。

サーバとして動作させる際は、ランレベル3（multi-user.target）を指定します。ランレベル5でも必要なサービスを起動させることは可能ですが、グラフィカルログインやデスクトップを制御するプロセスも起動させるため、サーバとして稼働するには無駄なリソースを使用してしまいます。

デフォルトにランレベルを０、６指定してはだめ。なぜならシステム起動時に再起動かシステム停止がはじめってしまうから。

##1つ前、今のランレベルを知りたい
runlebeです！

##shutdown コマンド
![名称未設定.png 666.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620109/60bd5043-cbe3-8aae-c94d-ce7777fbe81e.png)

「時間」は以下のように指定します。
・HH:MM　HH時MM分に実行
・+M　M分後に実行　　
・now　今すぐに実行


##再起動
init 6」または「telinit 6」コマンドを実行する
shutdown -r
reboot

##BIOS
PCの電源を入れると、BIOSが起動する。そんでHDDなどに関して最低限の認識を行う。
BIOSが古い場合、大容量の記憶装置(HDD)を正常に認識できない(実際より少ない容量を認識するなど)場合があります。BIOSをアップデートすることで、この問題を解消できることがあります。

コンピュータの電源を入れると、まずこのBIOSが起動し、記憶装置（HDD）等に関して最低限の認識をして起動デバイスの優先順位を決定します。その後、起動する順にデバイスの先頭セクタにあるMBR（ブート用の特殊領域。ブートローダが格納されている）を読み込み、得られたブートローダに制御を移します。ブートローダが得られない場合は次のデバイスのMBRを読み込みます。

ブートローダー→ブートローダは記憶装置内のカーネルをロードし、カーネルに制御を移す役割を果たします。

##SysVinit
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、カーネルから起動されるinitプロセスとして「/sbin/init」を起動します。initは起動されると、設定ファイル「/etc/inittab」の記述に基づいて、自動起動するべきプロセスを立ちあげるなど、アプリケーションレベルの初期化を行います。

##initプログラムのUstart
UpstartはSysVinitを改善した新しい仕組みです。Red Hat Enterprise Linux(RHEL)やUbuntuに採用されていましたが、現在はsystemdへの置き換えが進められています。
Upstartではバックグラウンドで動作するデーモンプロセス（サービス）や、一度だけ実行させたい処理（タスク）を「ジョブ」と呼び、ジョブ単位で起動処理の管理を行います。
Upstartは各ジョブの実行に必要な前提条件を「イベント」で管理し、前提条件がすべて成立した時点でジョブを実行します。SysVinitのように順次起動していくのと異なり、サービスの起動に必要な条件が成立した時点で起動処理が行われるため不要な待機時間がなくなります。また、各ジョブの実行がパラレル（並列）に行われるため、関連のない独立したサービスは同時に起動させることができます。
イベントはシステム上の変化を検知するだけではなく、initctlコマンドで発行することもできます。

##/proc/cmdline
ブートローダーから、カーネルに渡されたパラメータを確認するファイルのなまえ