LPIC学習　第二章　Linuxのインストールとパッケージ管理

##2.1 ハードディスクのレイアウト設計

パーテーションとはハードディスクやSSDの役割分担をすること。
なぜパーテーションが大事なのか
1.一個死んでも一個生き残る
2.分割しなかったら、全てを再インストールしなければならない。その分の設定もしなきゃいけない。
3.キャッシュの逃し場所を使うと、早くなる。
　ぜんぶぐっちゃってなっている戸棚よりもみつけるのが楽なはず。

そもそも速攻使う容量は、メモリーを使うが、メモリーはちょっとしかないので
捌け口として、ハードディスクがいる。
＊最低限必要なのは
①ルートファイルシステム
　PCに絶対必要なファイル
######②スワップ領域（物理メモリの１から２倍）
　メモリーが足りなくなった時の仮置き場
＊独立して作っといた方がいい
/home それぞれの一般ユーザーが使うファイルが入ってる。私物が混じらんように独立させよう
/var　ログとかメールとか更新頻度が高いものを入れておこう
/usr(eないよ！！)プログラムとかライブラリとか
#####/boot　起動するときに使う（１００MB）

これは分けといた方がいいよ。（詳しく）
1./home ユーザーが実際使うところ。こんなところにルートファイルとかおいて消されたら最悪
2.varログとかメールとか更新頻度が高いもの。varだから、変数みたいに、変わるという意味なのかな？
ログとかたまりきっちゃって、ルートファイルシステムに放置してると、容量くっちゃうよ。
→使うところは身軽にしなきゃね。
3.user
プログラム、ライブラリ、ドキュメントが入っている。
ということは、、/userをまるまる読み取り専用にして、セキュリティをたかめる。
g.bootやefiなどの起動時に使うシステム
言わずもがな
5.スワップ領域　大体メモリの1から2倍くらいかな
　一部をメモリーが足りない時に仮置き場として使う。


##2.1 パーティションのレイアウト設計
例）20GBのHDと512MBのメモリー
スワップ　512MB＊メモリーと同じくらいの容量
/boot 100MB
/usr 10GB
/var 10GB
/home 180GB
/ 15GB

＊そもそもわかりずらい物理的、論理的、仮想敵の意味
　ざっくり、、物理的→見える　論理的→見えないけど計算上　仮想的に＝目に見えない（実態のない）

　１つのハードディスクがあるとする。ハードディスクを2分割したい。
　アナログ人間の人はCDをペキって２つに割ろうとします。。。。。。
　いやいや、そんなことしなくても、パーテーションを設定すればハードディスクを２分割出来ます。
　人間様からみたら、ハードディスクは１個だけど、コンピューター的には２個あるよって認識してくれ
　たの。コンピューターが認識している、デバイスの数の単位を2VGって呼ぶことができますなの。
　コンピューター的に２個、人間様から見たら一個。これが、物理的（ナイフでぶったぎっる）ではなく論理的（計算上）に分割されたってこと。
　例）100GBのハードディスクが50GB❌２のハードディスクに分身しました！
→こんな論理的な管理の仕方はLVMとよばれる

##2.2ブートローダーとインストール

ブートローダーは、OSを起こして、PCを起動する準備をする役割！

スイッチオン→電気が回る→まずBIOS（UEFI）が起こされる/BIOSはROMチップ常にある→bootが起こされる→bootがOSを叩き起こしてログインまでの起動の準備を行う

ブートローダーも色々ある
①GRUB （GRand Unified Bootloader）
インストール方法：grub-install /dev/sdaコマンド

設定ファイル:ここに設定について書いてある。起動したときどんな画像使うの。。？とか
glub legasy＊boot/grub/menu.lst（古い）
grub2(新しい)＊/boot/grub/grub.cfg


🌟GRUBの一種　でも上流のメンテナンスがあるから、残念ながらサポート打ち切られてる
だから最近はgrub2が使われてるよ

grub2の設定場所
boot起動時のオプション指定（OSを起動する前に設定することができる）

ブートオプション一覧
＊起動＋E
＊root=デバイス ルートパーテーションとしてマウントするデバイス
＊nousb USBデバイスを使用しない
＊single シングルユーザーモードで起動
＊1~5好きなランレベルで


##2.3共有ライブラリ管理
ライブラリって何？
　よく使う機能をまとめて置いてある機能
　実物は、ファイルがあって、そこに関数が色々まとまって置いてある。
　本をイメージすると良い。覚えるのが難しーいマニュアルが書かれているから、必要なときに取り出す。
　
　静的ライブラリはコンパイル（機械の言葉に変えて、新しいファイルを作る）
　ライブラリの関数を呼び出して、機械語で関数の実行するところでコンパイルしたファイルに書く。
　ライブラリを図書館で例える。英訳で発表する資料を作ってくれ。
そしたら、発表する前に、暗記してしまおう。
　動的ファイルは、逆に実行する度に、関数を呼び出そう。
　だから、実行ファイルには関数の中身は書いてない。呼び出してねー。って書いてあるだけ。
　発表の時わざわざ暗記するのは嫌だから、本を持ってきて、本の内容をまる読みするイメージ。

よく使う言葉として
リンク
　ライブラリの関数を呼び出して使用すること
静的リンク
　コンパイル時埋め込む
動的リンク
　実行時に呼び出す
共有ライブラリ
　ダイナミックリンクにて呼び出されるライブラリ
　置き場　lib/または/usr/lib
  ファイル名　libreadline.so.5



ライブラリを呼び出すときの流れ

ライブラリを呼び出す流れ
実行ファイルが欲しているライブラリファイルを調べるには
ldd　/bin/catで調べられる
登場人物
　1.lb.so　＝　リンカ実行の舵取り
  2./etc/ld.so.cache　＝　共有ライブラリを探す係
　　＊バイナリデータです。つまり機械語書かれてるのでで俺らは何書いてるかわからん。
　　＊ldconfig -pコマンドで、人間がキャッシュを読むことができる。
  3./usr/lib /lib ライブラリ置き場
　4.LD_LIBRARY_PATH　他に調べてほしいディレクトリパスを格納しておく変数
　5./etc/ld.so.conf　他に調べてほしいディレクトリパスが記入されたファイル
　＊４と５は閲覧する優先順位が４の方が早い
流れ
①実行ファイル実行
②lb.soが/etc/ld.so.cacheに共有ライブラリを探させる
③LD_LIBRARY_PATH、/etc/ld.so.conf,そのあと/usr/lib /libに書いてあるライブラリを順番に呼び出す

####2.4　Debianパッケージの管理
実行プログラム
設定ファイル
ドキュメント（写真や図、文章をまとめた資料）
この３つを一つにまとめたものをパッケージと言います

管理する形式はディストリビューションごとに異なり
＊Debian形式
＊RPM形式がある
この形式があるのだが

パッケージ管理システムがあると何のメリットがあるの？
＊インストールするときに手伝いをしてくれるお節介である。
例）AパッケージがないとBパッケージが使えないよ（依存関係）
　　AパッケージがあるとBパッケージが使えないよ（競合関係）っていうの教えてくれる

ちなみにダウンロードとインストールの違いは？
ダウンロードは宅配便で、パッケージを注文する
インストールはそのパッケージを組み立て実際に使えるようにしてくれること
＊ウィルスソフトとか

あとインストールするのに大事なこと
動作環境に依存する
＊ディストリビューション
＊バージョン
＊CPU
に対応したパッケージをダウンロードすること！

Debian形式

dpkgコマンド
dpkg　-E 同バージョンがあればインストールしない
dpkg  -G 新バージョンがあればインストールしない
dpkg  -R 再帰的にインストール
dpkg -i パッケージをインストールする
dpkg -r（remove） パッケージを設定ファイル残してアンインストール 
dpkg -P　（purge　一掃するっていうやばい意味）設定ファイルを含めアンインストール
dpkg -i インストール済のパッケージを一覧表示

APT形式
Debianとだいぶやり方違うわ

apt-getコマンド(インストール)
①etc/apt/sources.listにパッケージの取得先のURLを記入する。
②apt-get installでインストール
③apt-get updateでアップデート
④apt-get remove でアンインストール

apt-catchコマンド（管理）
apt-catch searchで、今あるパッケージを調べられる 

apt(両方)
apt update
apt -y upgrade
apt install 

RPM形式
rpm -i　インストール
rpm -U アップグレード
rpm -F アップグレード

rpm -e パッケージのアンインストール

＊RPM方式でインストールする。rpm -ivhだと経過まで表美してくれる

rpm -q パッケージ情報の照会
rpm -qR パッケージの依存関係

rpm2cpioコマンド
パッケージをインストールしないで中身を見る

YUM パッケージ管理システムの一つ
yum check-updateコマンドで、インストール対象のパッケージリストの表示
主なコマンド
yum install
yum update
yum remove
yum info パッケージ情報を表示
yum list リポジトリにある全てのパッケージ情報
/etc/yum.conf
/etc/yum.repos.d

rmp形式のaptみたいなやつ

etc/yum.confと/etc/yum.repos.dディレクトリ

dnfコマンド

opensuse
cent OSみたいなもので、カーネルさんだけでは役目がたりないので、追加で入れソフト


zypperコマンド
opensuseで使うインストールとかのコマンド
例）zipper in とか
ざー
####2.6　仮想化のゲストOSとしてのlinux
クラウドサービスはざっくりいうと、もう一個パソコンを作ってしまうこと
クラウドサービスの提供者が物理サーバーを所持しているので
ネットワーク上で借りるようなイメージ

IaaS＜PaaS＜SaaSの順番で有能になっていく

クラウド上と今使っているPCの
＊ホスト名
＊SSH
＊一般ユーザー
＊インストールのパッケージ
この辺は異なった値にしなければならないが、初回時被ってしまう。

cloud-initにより、初期設定する
インスタンス作成後の初回起動時に1回だけ実行する