Linuxについて

#前提
Linuxについて学んだことを書いていきます。

#Linuxのブートプロセスとsystemd
１、電源投入
２、ファームウェア（BIOS/UEFI）動作
 - ブートローダを呼び出す
３、ブートローダ
 - kernelとRAMディスク
４、カーネルを起動
 - メモリ初期化やハードウェア認識
５、systemd（init）でサービス起動
６、ログインプロンプト表示

##initとsystemd
・サービスを起動する仕組み
 - init: SysVinit（System File Init）従来
 - systemd:　現在のLinuxで採用

##systemdのデーモン
・デーモン（バックグランドで常時起動しているプロセス）
 - systemd（メイン）
 - systemd-jouranl（ジャーナル管理プロセス、ログ管理）
 - systemd-logind（ログイン処理）
 - systemd-udevd（デバイス動的検知）

##systemdとUnit
・Unit（処理単位）
 - systemctlコマンドで制御
 - タイプ
　　・service（各種サービス起動）httpd, sshdなど
　　・device（デバイス）
　　・mount（ファイルシステム）/etc/fstab
　　・swap（スワップ領域の有効化。ディスクをメモリに）
　　・target（複数Unitをグループ化）

##systemctlコマンド
・start、stop、restart
・status
・is-active
・enable、disable（自動起動）
・list-units
・list-unit-files（unit-fileの一覧・ステータスなど）
・list-dependancies

##サービスの有効化・無効化
【systemdの起動順序】
・default.targetが最初に呼ばれる。以下と関連づける
・ランベル（init）とターゲット（systemd）
　０、poweroff.target
　１、rescure.target（レスキューモード、シングルユーザモード）
　２〜４、multi-user.target（マルチユーザモード）
　５、graphical.target（GUIモード）以下のUnitも呼ばれる
　　・multi-user.target
　　　　basic.target
　６、reboot.target（再起動）

##isolateモード変更

```
$ systemctl isolate rescue.target
```

##OSのシャットダウン・再起動

```
shutdown -h +10 "this host will shutdown in 10 minutes"

-オプション
・h(halt)　停止
-r(reboot)　再起動
-k(test)　停止せずにテストを行う
・-c(cancel)　カウントダウン待ちのシャットダウンを実施
-f(no fsck)　再起動時にファイルのチェックを行わない
-F(fsck)　再起動時にファイルのチェック
```

・１５分後にシャットダウンするコマンドを実行し、キャンセル
-h (halt・停止)+ 分 "メッセージ"

```
$ su -
# shutdown in 15 "this host will shutdown in 15 minutes!!"
# shutdown -c
```

##シャットダウンコマンドとwallコマンド
・類似コマンド
　停止
　　・halt, poweroff, init 0
　　・systemctl poweroff target
　再起動
　　・reboot, shutdown reboot, init6
　　・systemctl reboot.target
　通知
　　・wall（停止はせず一斉通知）

```
# wall "this host will stop 20:00 p.m."
```

##psコマンドでプロセス一覧を表示
・プロセスの生成と消滅まで
　- コマンドを実行する
　- ファイルをメモリに読み込む（プロセスの生成）
　- CPUが処理を実行する
　- メモリ上から消滅（プロセスの終了）

・プロセスを確認するpsコマンド
　- PID：プロセスID

psコマンドのオプション
・BSDフォーマット
　- a(all), f(親子関係), l(詳細), x(端末無)
　- pstreeでfは代用可能

・Unixフォーマット
　- -e(すべて), -f(詳細), -l（詳細）
※BSDフォーマットが使われることが多い

プロセス管理関連コマンド
・pgrep(検索)
・top(３秒ごとの状況)
・uptime(稼働時間)
・free(free memory)

##プロセスの停止
・kill オプション PID/ %job num.
　- 1 (HUP)hang up
　- 2 (INT)interrupt
　- 9 (KILL)kill/強制終了
　- 15 (TERM)terminate/終了
　- 20 (TSTP)suspend(Ctrl+D)

・killall プロセス名
・pkill プロセス名

##デスクトップ環境の利用

##統合デスクトップ環境

##ファイル・ディレクトリの所有者
r = 4
w = 2
x = 1

rwxr-xr-x
(4+2+1)(4+0+1)(4+0+1)
= 755

所有者・グループ・権限の変更
・chown
　- change owner
・chgrp
　- change group
・chmod
　- change mode

##chmodコマンドで読み書き権限

```
# chmod u-r hello.txt
# chmod u+r hello.txt
```

##ファイルのアーカイブと圧縮・展開
・tarコマンd（tape archive）
　- オプション
　　・c（create）
　　・x（展開）
　　・t（情報表示）
　　・v（verbose）
　　・f（filename）
　　・z（gunzipで圧縮）
　- cvzf（作成）、xvzf/xzfをよく利用

・cpio、ddコマンド


##シェルの機能
・シェルの役割
　- ユーザ入力を受付、カーネルに命令

・シェルの種類の確認

```
echo $SHELL
env | grep SHELL
```

##シェル変数・環境変数
・LANGを確認

```
echo $LANG
```

・PATH変数

```
PATH=$PATH:追加したいPATH
PATH=$PATH:/home/h/temp
```

・シェル変数を環境変数に反映
　シェル変数は子プロセスから参照できない
　環境変数は別の子プロセスから参照できる

・say_hello
 - #!/bin/bash
 - echo Message
 - echo $MSG
・MSG=”Hello Linux!”
・export MSG


##manコマンド
・man[option][section]keyword
　- -a(all)
　- -f(完全一致)fully matched
　- -k(部分一致)keyword match

##ファイルの参照
・cat: concatenate
　- -n:行番号表示
　　・nlコマンドで代用可
　- ファイルの内容を連結して出力
・head/tail
　- 行数、 -n 行数
　- -f(継続的表示)

##リダイレクトとパイプ
・リダイレクト
　- 書き込みモード
　　・コマンド > ファイル（上書き）
　　・コマンド　>> ファイル（append）
　- オプション
　　・コマンド２ > ファイル
　　・コマンド > ファイル２ > &1
　　・コマンド $ ファイル
　　・コマンド　<< EOF > ファイル

##pipeとteeコマンド
・標準出力にもファイルにも出力する

・コマンド | tee ファイル名
　- パイプ（|）で最初のコマンドの実行結果をteeコマンドに投入
　- 標準出力にもファイルにも出力

##xargsコマンド
・コマンド実行結果を次のコマンドの引数に

#viエディター
・Linux/Unixに標準搭載
　- システム管理業務やサーバー設定に必須

・２種類のモード
　- コマンドモード　<=> 入力モード
　- コマンドモードは検索、削除、コピー、ペースト
　- 入力モード（i,a,oで切替）テキスト入力

##カーソルの移動
・h,j,k,l
 - 左、下、上、右

・移動
 - w（wordの先頭), b（前の単語）
 - e（wordの末尾、end）
 - 0（行の先頭）、＄（行末）

・検索
 - /kw, n（後方検索）
 - ？kw, N（前方検索）

##テキスト操作
・cw（単語置換）、c$（行末まで）
・y（copy）、yy（行コピー）
・cw（１文字削除）
・d（削除）、dd（行）、dw（単語）、d$（行末）
・p（paste）
・u（undo）
・r ファイル名（ファイル内容を挿入）

#セキュリティ
##SUIDとSGID
・特殊な３つのパーミッション

#ネットワーク基礎
##TCP/IPの仕組み
・通信プロトコル（規約の１つ）
 - 通信手順、データフォーマットなどの技術標準
　・IEEE、IETFなどで提案・標準化
 - パケット（データ分割、ヘッダ付加）単位で送受信

##ヘッダの各層（Layer）
・ヘッダの中にさらに４つの情報を格納
 - ネットワークインターフェース層
　　・Ethernet, PPP,,,
 - インターネット層
　　・IP, ICMP(＊ping), ARP(MACアドレス)
 - トランスポート層
　　・TCP, UDP(*streaming)
 - アプリケーション層
　　・FTP, SSH, Telnet, DNS, HTTP, IMAP4, POP3,,,

##TCPとUDP
・TCPはデータの到着を確認
 - 不足すればパケット再送

・UDPは確認ぜず、一方的にパケット送信
 - ビデオ配信などリアルタイム性が高い用途

##ポード番号
・ホストはIPアドレスで識別
・通信ポートを使い分けて通信（/etc/services）
 - well-known port
 - 20/21(FTP)
 - 22(SSH)
 - 25(SMTP)
 - 53(DNS)
 - 80/443(HTTP/HTTPS)
 - 123(NTP)
 - 143(IMAP)
 - 389(LDAP)