【LinuC 101】 学習まとめ

__一通り書籍を読みながらまとめました。__
__自己アウトプット用です。__


#基本知識
###root

スーパーユーザー、管理者のこと
基本的にスーパーユーザは「どうしても」の際使用すること
だいたいは一般ユーザで作業をする

> 
__# root__
__$ 一般__

###プロンプト
__user名＠host名　現在のディレクトリ$__ | (この部分にコマンドを入力して操作する)

###ログアウト、EXIT、SSH切断
ctrl + D

###右Ctrl
離脱

###ログイン時
ホスト認証 + ユーザ認証

###ホスト認証
なりすましを防ぐ
サーバ側から認証鍵を受取それを識別
ホスト == サーバのこととイメージする

![-lsC5Ox7LLHkHg4GSRnk9nvZvIIEjdUTrHWkTG-X9MwGbCdq0HDNfGIXU5N1r8Pia__X9Jsyy18bFrt8l5cLy0AIgfYCE89xEIDO3QVsze9neeB9B8aTS7OctTTaWRiDI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/087955bc-e5e9-a5ac-0976-dc39d42b9b08.png)


###ユーザ方式
パスワード方式、公開鍵方式がある
パスワード：ユーザID / パスワード
公開鍵方式：公開鍵 / 秘密鍵の2種にて認証

![OiDyvuvN8en6V3zNwFlaLB42NkFtNOLgkWHVVNlVk94HEtzWbWvkNwKVVmStvxgfdy1SHsBeU1Hi9dLoz-Ivbc1xT52lusaeldpcusjOHB_rQbYEMf3v4O1qAue8r6vmi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/71dec62f-2716-6c41-4808-b9edf98de27a.png)


###SSH設定
1. sshdサービス起動：SSHサーバ上でSSHサーバ プログラムのsshdを起動
2. 鍵ペア作成：$ ssh-keygen にて公開鍵秘密鍵を作成
3. 鍵を配置：id_rsa.pub サーバ上に id_rsa をクライアント上に
4. サーバ設定の変更：パスワード認証、rootユーザでのログインを無効にする
→再読み込みするため systemctl reload sshd リロードする

---

####/bin
コマンドが入っている
bin(バイナリ)→進数のデータのこと
####/boot
起動するためのファイル
boot(ブート)→起動
####/dev
deviceの略、周辺機器ファイル
####/etc
システム環境設定ファイル

---

### LinuxとUNIXの関係
Unix系はOS.MACなどに使用されている
基本的に根本は一緒

#####メモリ
RAMのこと

#####SSH
暗号化のためTelnetより安全な通信が可能

###ディストリビューション 
これを使用してLinuxは使用する / Linux種類
各種機能のアプリケーション*ソフトウェア群を一つにしたもの

###ディストリビューション種類
* 「Red Hat系」
仕事系、CentOS サーバで使用されている

* 「Debian系」
Ubuntu、Linux mint elementarOS

* 「Slackware系」
ハイスペック系、安定でセキュアなもの

###ユーティリティ群：基幹システム
ユーティリティとはシステムの運用を支援するためのプログラム 

###CentOS
長期 “セキュリティ更新”がサポート、信頼ある
大元に__RHEL__
![_k5rgtV-RkFzDL8aq_Dp5QmckhtJIIXVdvnIVhc6yNXL8BRrSKXTu7XJMKHTCQ7V11J27y_jbX-xp0NXzaAZBOYbkS4jcBuq5x0MhHvvCerMlIahZPhBsiw0ASFlenXhC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/2baa96dd-8691-9a67-78a5-53fb5899ad4a.png)
###インストール方法
DVD / USBドライブ ：ISOイメージを書込インストールメディア作成
*インストール時
<日付>、<ソフトウェア選択>、<インストール先(パーティション構成)>
<NWやホスト名を設定>

###Ubuntu
DVDに
>
* LiveDVDイメージファイルを焼" 
or 
* LiveUSBをboot

---

###ユーザの公開鍵
~/.ssh/authorized_keys(サーバ側)

###サーバの公開鍵
~/.ssh/known_hosts(クライアント側)
→初めてサーバにアクセスする場合の格納場所
→鍵が格納されてなく、$ ssh user@server にて作成するとここに格納される

###仮想化
機器の数、管理コスト減
迅速な環境構築

###仮想化方法
仮想マシン or コンテナ
*仮想マシン(ネイティブ or ホスト)

###仮想マシンを動かすまでの流れ
ハイパーバイザー：コンピュータを仮想化するためのソフトウェア
ハイパーバイザーで仮想ハードウェアを起動
(仮想化ソフトウェア上で仮想マシンを起動)
→仮想マシンにインストールしたOS( ゲストOS )を動作させる方式
→ハイパーバイザーがサポートしているOSであれば、ホストOSと異なる種類のゲストOSを使用できる

###ネイティブ型、ホスト型
#####ネイティブ型
物理マシンにインストールした通常のOS(ホストOS)を介さないため、ホスト型に比べパフォーマンスが良い
Xen、MicrosoftのHyper-V、VMwareのvSphere Hypervisorなど
#####ホスト型
Oracle VM VirtualBox、VMware Workstation、Parallels Desktopなど￼

![GiyvLpDXgXYGXEQnf9zJMQTy5APf1OOQGSLtgOqKLAJN0eTnRy0TYjSeGtP8Cf3Aa170oYtEErXDs7ERKMXqA3F95xnXAt7c4nXxCQ9eZsmigXDRIBCnw3lBtI52AzVGC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/981df969-2eec-9804-037a-b2aaf040fef3.png)

###コンテナ
ホストOSのカーネルを共有することで、仮想マシンやゲストOSを起動せずにアプリケーション構築できる
ホストOSと異なるOSをコンテナで使用できない
軽量で速い

###cgroups（Control Groups）
Linux カーネルの機能 
グループごとにCPU、メモリなどのリソースを割当て、制限管理する
コンテナ型ソフトウェアLXC、Dockerなど

![GRajR_KbXtwGsmVSs1Zf7_-VMEPaFgP88HNaLh1CeTsDHcuyb5VqiVCcQtq8huirkR3BT7lYswpHZeBmG6K056BCfyNYcriXMNSnNSbWIYoHZo4Q43x9yCI1yv97WKI0M.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581998/abfe4624-8e78-e469-e320-9f88c2d44fa4.png)

###KVM（Kernel-based Virtual Machine）
Linuxに標準搭載されている仮想化ソリューション
Linux カーネルを ハイパーバイザーに変換できる
→こうすることによってハードウェア一つ一つで仮想化ができる 

###使用するためには仮想化支援機能を搭載したCPUが必要
(Intel VT（Intel Virtualization Technology）やAMD-V（AMD Virtualization）

###CPUの調べ方
「/proc/cpuinfo」のflagsにおいて"vmx"(Intel VT)または"svm"(AMD-V)という値があるかどうか、あれば仮想支援機能がある

###Docker
LXC（Linux Containers）をベースに開発されたコンテナ型仮想化ソフトウェア
OS、ライブラリ、アプリケーションをテンプレート化したDockerイメージを用いることにより、ホスト環境に依存せずにコンテナを作成*起動することができる

###libvirt
機械制御を目的としたライブラリ
プログラムとしては、GUIの仮想マシン管理ソリューションであるvirt-managerや、CLIのvirshコマンドなど
対応機種、Xen、KVM、QEMU、OpenVZ、LXC、Oracle VM VirtualBox、VMware ESX/GSXi/Workstation、 Microsoft Hyper-V など

###Linuxシステム
BIOS→ブートローダ→カーネル→init

###BIOS basic I/O System
ハードウェアに近い部分のシステム
マザボに書き込まれている
PC起動時にF2 DEL 
日付、電源管理、起動デバイスの優先順位、組み込みデバイス有効/ 無効

###ブートローダ boot loader
Linuxシステムでは「GRUB」
MBRに格納されている第一段階部分
記憶装置内の別の場所に格納されている第二段階部分がある
記憶装置内のカーネルをロードし、カーネルに制御を移す役割
第一段階のブートローダはMBRの先頭446バイトの領域にインストールされる

###カーネル
OSの中核
起動時、高度にハードウェアを認識*制御し、様々な初期化処理を行う
カーネルイメージと、カーネルのバージョンに対応する初期RAMディスクは「/boot」ディレクトリに格納される
ブートローダはカーネルと初期RAMディスク（initramfs）の内容をメモリ上に展開、カーネルはメモリ上に展開された初期RAMディスク内の、ファイルシステムへアクセスするために必要なドライバやスクリプトを使用してルートファイルシステムをマウントする

###スクリプト
即座に実行できる処理のこと(コンパイルがないようなもの)

---

####init
最初に起動されるプロセス
PID（プロセス ID）は必ず1
アプリケーションレベルの初期化を行う
initプロセスは設定ファイル「/etc/inittab」の記述に基づいて、自動起動するべきプロセスを立ちあげる

####SysVinit
スクリプトで管理、PIDによってプロセスを管理
従来のinitプログラムを採用しているシステム、「/sbin/init」が起動

####Upstart、systemd
初期化処理、起動や停止を高速化した最近のシステムプログラム

####systemd
SysVinitを置き換える新しいinitの仕組み
Unitという単位で構成(その中にさらにターゲットなど細分化されている)
cgroupsにてプロセスのリソースを管理
並行起動できて高速なシステム起動や停止が可能
管理するコマンド：systemctl

systemdでは以下のデーモンプロセスが連携して動作している
起動時に最初に実行されるUnit「/etc/systemd/system/default.target」
「default.target」をシンボリックリンクとして作成することで、期待するサービス群を起動できるようになる

####Unit
設定ファイル
Unitの設定に従ってsystemd自体が処理を実行
Unitには各機能ごとに拡張子が割り当てられている

####シェル
インターフェイスのようなもの
sh bash などがある
CLIコマンド→シェル→カーネルといったように橋渡しをしているイメージ

#####Linux はグループという概念があり、ユーザはどこかのグループに属している

---

###ユーザ情報の場所
/etc/passwd
いくつかの項目で : とコロンで分けられている
パスワードやユーザID グループIDなどが一覧で確認できる

###グループアカウントの場所
/etc/group
グループパスワードやグループID メンバーなど一覧できる

###ユーザ、グループの作成
useradd groupadd コマンドで作成
作成する際のコメントやユーザIDなどを指定できる

###作成したユーザアカウントでシステムにログインできない
したい場合は認証用のパスワードを設定する必要がある
*GUI →CUI：Ctrl + alt + F5 ←→ alt + F1

###シャドウパスワード
etc/shadow にてrootユーザか確認できるパスワードファイル
がある、/etc/passwd
はユーザ情報の管理ファイルで
/etc/shadow がパスワード情報の管理ファイル

###chown
ファイルの所有者変更
所有グループや、所有ユーザも変更可能
rootユーザのみ変更可能
chown「コロン」、chgrp「コロンなし」


### グループの変更
```php
$ chown -R A:A　
```
ユーザをA、グループをAに変更する書式
「-R」オプション
指定したディレクトリ、およびその配下にあるファイルの所有ユーザやグループを再帰的に変更

#####chgrp
ファイルの所有グループ変更

### 権限の確認
```php
-rw-r--r-- 1 test staff 24 Jul 21 13:38 index.html
```
testといううユーザとstaffというグループということ

###デフォルト値
ファイルやディレクトリを作成するとデフォのアクセス権が付与される
umask値でアクセス権を判断する
3,4桁で8進数
rootユーザのumask値デフォ 0022
一般ユーザのumask値デフォ 0002

###進数覚え方
8進数 = 3区切
8進数333 = 2進数11011011
16進数 = 4区切
16進数333 = 2進数1100110011
{2進.10101010 = 8進.252 = 16進.AA}

###デフォルト値を変更したい場合
ファイルは 666
ディレクトリは 777
ディレクトリを755に変更したい場合は
777 - 755 = 022

```php
$ umask 022
```

###yum
ソフトウェアパッケージ型のコマンド
利用することにより、パッケージ管理にかかる負担を大幅に軽減
RedHat系で使用可能

###パーティション
Linux インストール時に使用する際二つ必要

* ルートファイルシステムに割り当てる「ルートパーティション」
* 仮想メモリとして割り当てる「スワップ領域」

→スワップ領域：一時的に保存するハードディスク上の領域です。

###パーティション管理方法

>
* 「 MBRパーティションテーブル」
* 「GPT方式」2つある

####MBRパーティションテーブル
ハードウェアの戦闘領域であるMBRにて行う
階層がMBR、基本、拡張、 論理と分かれている

####GPT方式
MBRは2TB までしか使用できない
それより大きいものはGPTにて 保存を行う

###デーモンプロセス
システム終了後も存在するプロセス

###フォアグラウンド、バックグラウンド
ジョブにはフォアとバックと場所が異なる所で
処理をすることができる

###変数
== 箱
環境変数名とシェル変数名がある
環境変数は「大文字」
シェル変数は「小文字」

###環境変数PATH
環境変数のうちのひとつ
デフォルトのディレクトリが格納されてる感じ
本来、ls → bin/ls など場所指定するのだが、 PATH変数により
場所指定しなくても ls だけのコマンドで中身が表示される
変数を設定したシェル上と、そこから起動されるシェルやアプリケーション(別のシステム上でも)有効
コマンドで有効な設定変数が子に引き継がれる
export 環境変数=値　

###シェル変数
変数を設定したシェル上でのみ有効な変数
シェル変数名=値

###RPMパッケージ
RedHat系で使用されるディストリビューションで採用されているパッケージ
RPMを採用しているディストリビューションは「CentOS」「Fedra」など

###whereis
環境PATHを使用しない
###which
環境PATHを使用する
指定したコマンドが格納されている場所を検索し、絶対パスで表示

###シンボリックリンクは<リンク元><リンク先>だが
tarは tar <新しくアーカイブしたいファイル名><既存のファイル>

###メタキャラ
#####‘’シングルで囲んだものは文字列として扱われる

#####“”ダブルはメタキャラクタとして扱われる
echo ”$◯◯” は◯◯の中の変数が出力される

#####``バックシングルはコマンドとして扱われる
echo `date`だと日付が出力される

###テキストの改行
* キャリッジリターン（Carriage Return: CR、\r（16進数で0D））
* ラインフィード（Line feed: LF、\n（16進数で0A））

>
* CRLF（\r\n）：Windows
* LF（\n）：Unix OS（Linux, Mac OS Xなど）
* CR（\r）：古いMacOS（バージョン9まで）

---
#コマンド関連

####setコマンド
シェルのオプション機能を設定するコマンド
オプションの追加は + - が逆：+o 無効にする、-o 有効にする
*unsetコマンド
すでに設定されている環境変数やシェル変数を削除するコマンド

####manコマンド
マニュアルのman
-k 一部一致する条件で探すコマンド、aproposと同じ
-f 完全一致する条件で探すコマンド、whatisと同じ

####envコマンド
環境変数を一時的に変更したり、削除したりしてコマンドを実行できる

####fmtコマンド
1行あたりの最大文字数を指定

####nlコマンド
行番号をつけて表示する

####sortコマンド
ソート(順番で並べ替える)

####expandコマンド
タブをスペースに変換するコマンド

#####圧縮ファイルの展開コマンドオプション

####psコマンド
* aux：一つ一つオプションがある

a：全ユーザのプロセス状況
u：ユーザ名と開始時刻
x：制御端末のないプロセス情報も表示

## vimtutor
vimチュート
*grep
抽出したいワードを引数に入れて検索をする

```php
grep ‘<検索したい文字>’ <ファイル名>
```
grep == find

-d 

#再復習ポイント

#####/authrized_keysやknown_host
公開鍵があるディレクトリ 

#####/rsa rsa_pub
秘密鍵があるディレクトリ 

###xauth
Xサーバへの接続に使用される資格情報を表示したり、クライアント認証ファイルを編集するコマンド

####スナップショット：状態を保存
以前の状態に戻したい場合は「復元ボタン」

####パイプは標準出力と標準出力を合わせることができる
引き渡す役、コマンドとコマンドを連結している感じ
*echo：呼び出し
echo $ <ファイル名>

####chmodによる権限変更
chmod u+x file100
これで所有者部分にx実行の権限が付与される
g+xだとグループにx実行が付与される
*パーミッション
アクセスの権限が付与されている、左から 3 文字ずつ
1. 所有者
2. 所有グループに属するユーザー
3. その他のユーザー
xの実行の箇所が変わる
rwx = rws
rwsr-xr-xの場合、s = 4.rws =7 r-x =5
→4755がumask値

####SUID(Set User ID)
chmodコマンドにて通常のパーミッションの値に4000を加えた値を設定するか、所有ユーザに「s」という権限を追加(u+s)

####SGID(Set Group ID)
通常のパーミッションの値に2000を加えた値を設定するか、所有グループに「s」という権限を追加(g+s)
その他は(o)、全て(u+g*o)は(a)

####Sticky(t)
所有者とrootユーザのみがファイル、ディレクトリの削除を行えるようになる
通常のパーミッションの値に1000を加えた値を設定するか、その他ユーザに「t」という権限を追加(o+t)
rwx-rwx-rwt

####BIOS
設定は起動時「F2」

####Lv3
サーバとして動作させるモードレベル

#### システム起動時に最初に実行されるUnit
```php
/etc/systemd/system/default.target
```

####Ctrl + z 、Ctrl + c
Zは一時停止、cは終了

####プロセス
PCが実行するプログラムの単位
システム上で動作しているプログラム単位
####ジョブ
人間がPCに指示する単位
コマンドやプログラムをグループ化して管理するための単位

####TERM << KILL
TERMはクリーンアップして終了だがKILLは強制終了
ただしkillコマンドでシグナルを指定しない場合、デフォルトでTERM(SIGTERM)が起動

####X window system
UNIXやLINUXでGUIを実現するために使用
LINUXではX.Org
サーバとクライアントがありサーバ側でクライアントを許可することにより設定可
* X Window System主なプログラム3つ
ディスプレイマネージャ
ウィンドウマネージャ
統合デスクトップ環境

####ディスプレイマネージャ
ランレベルが5の時
SysVinitの場合は、initが起動する「prefdm（Preferred Display Manager）」
systemdの場合は「display-manager.service」として起動
ディレクトリは「/etc/X11/◯〇〇」の◯部分

#####XDM
（Xディスプレイマネージャ）XDMCPプロトコル使用
#####GDM
（GNOMEディスプレイマネージャ）
#####KDM
（KDEディスプレイマネージャ）

####ウィンドウマネージャ
ウィンドウ、アイコンカーソルなど提供、Xクライアントのアプリケーション
最小限の機能を備えた「twm」、KDE標準の「kWin」

####統合デスクトップ環境
ディスプレイマネージャやウィンドウマネージャのGUI環境とアプリケーションをまとめる

####startx
統合デスクトップ環境のGUI画面(X window system)が表示
ただしランレベル3(CUI環境)であること

####-100というファイルを作成したい場合
オプションは -- とハイフン2つ使用して可能

####アーカイブ名が先
$ コマンド <アーカイブ名> <指定したいファイル名>

####lnコマンド
ディレクトリはファイルのリンク先を作成するコマンド
$ コマンド <リンク元> <リンク先>
ファイルの変更をした場合元あったファイルも変更が反映される
削除した場合は実体がなくらならない限りハードリンクからなくならない

```php
ln file1 file2
rm file1
```

この場合でもfile2は存在する

####シンボリックリンク
元ファイルの場所を指し示すリンク
異なったファイルシステムでも作成できる
「l」がパーミッションの先頭に表示される

*バックグラウンドで実行
コマンドラインの末尾に「&」

#### systemctlコマンド
>
* 次回起動時を表示：get
* 次回起動時を設定：set

### 再起動コマンド
>
* システム再起動：reboot
* サービス再起動：restart
* 一時停止中を再開する：resume

### サービスの自動起動
>
* 有効 enable  
* 無効 disable

### 情報確認
>
* is-active httpd：起動してるか簡易的な情報
* status：詳細を表示

### touch
空ファイルやタイムスタンプ(アクセス時刻)などをへんこうする
>
* -t：アクセスと修正の両方を「指定した時刻」に変更
* -a -m は現在の時刻に変更される

### xz
またはunxzコマンドで展開も可能
bzip2よりも圧縮率が高い
xzはLZMA2圧縮アルゴリズムを採用したもの

### kill
ジョブ番号 or プロセス番号 or シグナル番号
番号ごとに役割がある、1は再起動、9が強制終了

```php
$ kill <-sオプション> <シグナル番号> <シグナル名>
```

sオプション、シグナル番号、シグナル名を使い分ける

### find
ファイル、ディレクトリを検索
>
* ファイルの種類、種別を表示するコマンド file
* コマンドのタイプを表示するコマンド type

### less
ファイル内文字列を検索
: 時に / を入力後 検索文字を入力

### locate
findよりも早く検索かけれる
事前に作成したデータベースから参照する流れ
updatedbでデータベース関連のコマンド

### xarge
標準出力を引数にしてコマンドを入力する
grepと合わせて検索できなかったファイル名を検索で出している

### paste join
ファイルを分割、連結する

### getent
データベースからユーザやグループなどを出力できる

### mv
ファイル移動、か名前変更
ファイル無しだと「名前変更」
-f 強制的に移動
-i 移動時問合せる

### rm
全体削除のオプションは　-r
rm -rで削除が可能
### rm rmdir
dir は空のディレクトリであれば削除できる
touch の空のファイルは rm にて削除可能
### rmdir debian：：を削除できません: ディレクトリは空ではありません
指定したディレクトリ内に、ファイルやサブディレクトリが存在する場合はエラーになる

```php
rmdir -p debian/<ファイル名>
```

-p 中間ディレクトリも含めて削除をするオプション

### suコマンド
ユーザ切り替え
su - root に切り替え

### top
3秒ごとにプロセス更新表示

### top uptime
>
* top：一定時間ごとに更新
* uptime：負荷平均を表示

#### passwd
パスワード設定コマンド
#### usermod
ユーザ情報の変更コマンド
→usermod usredel は rootユーザのみがコマンド可能

#### ファイル名の変更
<変数名>=../../../

---