【Linux/LPIC 101】備忘録

# 概要
- 備忘録として気になった内容をメモ
    - 全ての内容を網羅して記述しているわけではありませんので、注意してください

# 超

## パッケージ管理コマンド差まとめ

|---|---|---|
|---|---|---|
|rpm|-e(--erase)|パッケージのアンインストール|
||-l (--list)|指定したパッケージに含まれるファイルの表示|
||-a (--all)|インストール済みの全パッケージの表示|
|その他|remove|パッケージのアンインストール|
||list|インストール済パッケージを検索して表示|
|dpkg|-s(--status)|パッケージの詳細情報|
|apt-cache|show|パッケージの詳細情報|
|その他|info|パッケージの詳細情報|
|dpkg|-S (--search)|指定したファイルがどのパッケージからインストールされたかを表示|
|その他（aptはapt-cacheになる）|search|指定したキーワードでパッケージの検索|


|---|---|---|
|---|---|---|
|yum|chack-update|アップデート可能なパッケージの表示|
|zypper|list-updates(lu)|アップデート可能なパッケージの表示|

|---|---|---|
|---|---|---|
|yum|オプションを省略しない|-を用いない|
|apt|オプションを省略しない|-を用いない|
|zypper|オプションを2文字に省略する|-を用いない|


##デバイスのマウント手順
- パーティションの作成
    - fdisk
    - parted
- ファイルシステム実装
    - ext2~4
        - `ext2はジャーナル非対応`
        - コマンド：mkfs, mke2fs
        - パラメーター設定コマンド：tune2fs
    - XFS
        - コマンド；mkfs.xfs
- マウント
    - fstabへの記述等

## GRUBの設定ファイルと更新
- GRUB2
    - /etc/default/grub
    - /etc/grub.d 内のファイル 
    - 更新コマンド；grub-mkconfig

## dmesgとsystemd-journald

|システム|概要|コマンド|
|---|---|---|
|dmesg|Linuxカーネルが起動時に出力したメッセージを表示するコマンド| dmesg|
|systemd-journald|標準のログ収集・格納サービス|journalctl|


## ファイルシステムの作成
- デフォルトはext2が選択される(以下はいずれもtypeにext2を使用している)

|---|---|
|---|---|
|mkfs /dev/hda1|mkfs -t ext2 /dev/hda1|
|mke2fs /dev/hda1|mke2fs -t ext2 /dev/hda1|


## systemd動作上でのランレベルターゲット

|---|---|
|---|---|
|rescue.target|runlevel1.target|


## ln のデフォルト
- -b t(空行を除いた行に番号を付与する)がデフォルトとなる


##デバイスのUUIDを表示できるコマンド
- blkid
- lsblk


## 設定されている全ての環境変数を一覧表示できるコマンド
- env
- printenv
- set

## init(telinit)の例外用法
- 通常、数字を用いてランレベルを変更する
    - telinit 5
    - init 5
- 例外として、システムを再起動せずに「/etc/inittab」を再読み込みさせる場合には以下をとる
    - telinit q　または telinit Q
    - init q または init Q

# 高
## パッケージ管理ツール
|ディストリビューション|パッケージ管理|依存関係管理|
|---|---|---|
|Red Hat|rpm|yum (yumの後継としてdnfもある)|
|Fedora|rpm|dnf (yumの後継でもある)(Fedora 22からデフォルトの管理ツールとなった)|
|Debian|dpkg|apt|
|openSUSE|rpm|zypper|


### rpmコマンド
--fのみファイル名を引数にとる。
--pのみパッケージファイル名を引数にとる。

|オプション|概要|
|---|---|---|
|-q(--query) パッケージ名|指定したパッケージがインストールされているか確認|
|-V(--verify) パッケージ名|パッケージの検査|
|以下併用オプション|概要|
|-a (--all)|インストール済みの全パッケージの表示|
|-l (--list)|指定したパッケージに含まれるファイルの表示|
|-i (--info)|指定したパッケージの詳細情報|
|-f (--file) ファイル名|指定したファイルがどのパッケージからインストールされたかを表示|
|-p (--package) パッケージファイル名|紹介対象をパッケージファイルとする|
| --changelog|指定したパッケージの変更履歴の表示|
|-c (--configfiles)|設定ファイルの表示|
| --nomd5|MD5によるファイルの改竄を検査しない|
| -R (--require)|指定したパッケージが依存するファイルの表示|

|オプション|概要|
|---|---|---|
|-i(--install) パッケージファイル名|パッケージのインストール|
|-U(--upgrade) パッケージファイル名|パッケージのアップグレード（なければインストール）|
|-F(--freshen) パッケージファイル名|パッケージのアップグレード（なくてもインストールしない）|
|-e(--erase) パッケージ名|パッケージのアンインストール|
|以下併用オプション|概要|
|-v|詳細情報の表示|
|-h (--hash)|進行状況を「＃」で表示|
|--test|実行はせず、テストを実施|
|-nodeps|依存関係を無視|


### dpkgコマンド

|オプション|概要|
|---|---|---|
|dpkg-reconfigure|インストール済みのパッケージをインストールした時と同じように再設定|
|-E|同バージョンが既にインストールされていればインストールを行わない|
|-G|新バージョンが既にインストールされていればインストールを行わない|
|-R|ディレクトリ名を指定し、指定したディレクトリに格納されているパッケージファイルを再帰的に検索し、パッケージをまとめてインストールする|
|以下アクション|概要|
|-i (--install)|パッケージのインストール|
|-r (--remove)|設定ファルを残してパッケージをアンインストール|
|-P (--purge)|設定ファルを含めてアンインストール|
|-l (--list)|インストール済パッケージを検索して表示|
|-L (--listfiles)|指定したパッケージからインストールされたファイルを一覧表示|
|-s (--status)|インストール済みパッケージの詳細情報の表示|
|-S (--search)|指定したファイルがどのパッケージからインストールされたかを表示|
|-C (--audit)|インストールが完了していない（不完全）パッケージの表示|



### yumサブコマンド・zypperサブコマンド
- yum設定ファイル
    - /etc/yum.conf
    - /etc/yum.repos.d = パッケージの取得元（リポジトリ）は当該ディレクトリ内のファイルで設定
- zypper設定ファイル = 

|yumサブコマンド|概要|zypperサブコマンド|
|---|---|---|
|install パッケージ名|インストール|install (in)|
|update パッケージ名（パッケージを指定せずに実行した場合は、アップデート可能な全てのパッケージをアップデート）|アップデート|update(up)
|remove パッケージ名|アンインストール|remove(rm)
|info パッケージ名|詳細情報の表示|info
|list パッケージ名|一覧表示・バージョンとインストール済か否か|なし
|search キーワード|指定したキーワードでパッケージの検索|search(se)
|check-update パッケージ名|アップデート可能なパッケージの表示|list-updates(lu)
|grouplist|パッケージグループの一覧表示|なし
|groupinstall グループ|パッケージのグループインストール|なし
|なし|リポジトリの一覧表示|repos(lr)
|なし|リポジトリの更新|refresh


### apt-getサブコマンド（yumやzypperと大幅に異なる）

|サブコマンド|概要|
|---|---|
|install パッケージ名|インストール|
|update|パケージのデータベースを最新版に更新
|upgrade|インストール済の全パッケージのアップグレード|
|info パッケージ名|詳細情報の表示|
|dist-upgrade|ディストリビューションを最新版にアップグレード|
|clean|過去に取得したパッケージファイルを削除|

### apt-cacheサブコマンド
![Screen Shot 2020-12-20 at 15.37.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/c56e44dd-3138-733b-a47b-f7881fc8dcdf.png)


## ldd
- ライブラリを検索するコマンド
    - ldd /etc/ls　のようにつかって、コマンドが使っているライブラリを検索できる
- 共有ライブラリのキャッシュファイル「/etc/ld.so.cache」を更新するコマンド
    - ldconfig

## ブートローダー
### 機能
- BIOS起動後に呼び出され、OSとカーネルの起動を行う

### インストールコマンド
- grub-install
- バージョン
    - GRUB Legacy
    - GRUB2

- GRUB
    - 設定ファイル
        - /boot/grub/grub.conf
        - /boot/grub/menu.list


- GRUB2
    - 設定ファイル
        - /boot/grub/grub.cfg(直接編集することはありません)
            - /etc/default/grub
            - /etc/grub.d


### MBR（マスターブートレコード）
- 記憶領域の446バイトに保存される
- 残りはルートテーブル16バイト*4と2バイトのブートシグニチャ


## initプログラム
|名称|特徴|
|---|---|---|
|SysVinit|ランレベルによってシステムの状態を管理|
|Upstart|ランレベルによってシステムの状態を管理|
|systemd|ターゲットによってシステムの状態を管理|

- systemdサブコマンド集
    - systemdのコマンドはsystemctl
    - systemctl サブコマンド [ Unit名 ]

<img width="70%" alt="Screen Shot 2020-12-16 at 10.39.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/c493c012-26f7-3808-f237-b845927f5b83.png">

### 起動関連のターゲットディレクトリ
- /etc/systemd/system/default.target
    - 上記にはシンボリックリンクが設定されている
    - リンクは上書きできないので、変更の際には事前削除が必要となる
        - ln ファイル名 リンク名でハードリンクを作成
        - ln -s ファイル名 リンク名でシンボリックリンクを作成
- ランレベルとターゲットの互換表

<img width="50%" alt="Screen Shot 2020-12-16 at 11.08.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/d774acf3-dc64-b381-b56d-f74f522c7a2f.png">


## シェル変数・環境変数
|名称|特徴|
|---|---|---|
|シェル変数|シェル上でのみ有効|
|環境変数|シェルで実行されるアプリケーション・コマンド全てのアクションで呼び出せる|

- 大前提
    - exportコマンドでは環境変数の値を永続的に保持できないため、設定ファイルに記述する必要がある。(zshなら.zshrc、bashなら.bash_profile）
- 環境変数（パス）
    - 環境変数PATHに設定されているディレクトリの中から検索して実行する（俗にいうパスが通っている）
    - export PATH=$PATH:ディレクトリ
    - パスが通っているディレクトリにあるコマンドであれば、コマンドの格納されているパスをいちいち指定せずに、コマンド名のみで実行できる
    - ユーザそれぞれに環境変数が用意されています。例えば、user1とuser2で使っている環境変数をそれぞれ異なる値にする事ができる
- 環境変数（パス以外）
    - デフォルトで設定されているものがある（USER,HOMEなどなど）
    - export 環境変数名="値"で設定する

- シェル変数を環境変数に変更
    - export シェル変数名で設定する（結局はexport 環境変数名="値"と一緒）


## tar(アーカイブ機能)
- tar [オプション][ディレクトリ名][ファイル名]
    - aa,bb,ccをアーカイブしたhoge.tarを作成する場合には以下の記述となる（`アーカイブ名を先に記述するということ`）

```
% tar cf hoge.tar aa bb cc
```
- -c(新しいアーカイブ作成)
- -x(アーカイブから展開)
- -t(アーカイブの情報を表示)
- 圧縮はしないし、まとめる前の情報を保持すれば、元のファイル要領より大きくなることもある


## cpio(アーカイブ機能)
- cpio [オプション]
- -o(新しいアーカイブを作成)
- -i(アーカイブから展開)
- `標準入力からのみ受け付ける`

```
% cpio -i < ファイル名.cpio
```


## grep系コマンド(検索機能)
- プロセスからファイルの中身まで色々な物を対象に検索する
- デフォルトでは、検索対象に該当する`行`を表示する

|名称|特徴|例|
|---|---|---|
|grep|正規表現を用いて検索|grep 検索正規表現 ファイル名|
|grep `-E`|拡張正規表現と正規表現両方を用いて検索|grep -E 拡張正規表現 ファイル名|
|egrep|拡張正規表現と正規表現両方を用いて検索|egrep 検索正規表現または拡張正規表現 ファイル名|
|fgrep|入力された文字列そのままの検索|egrep "文字列" ファイル名|
|grep `-F`|入力された文字列そのままの検索|grep -F "文字列" ファイル名|
|pgrep|`実行中のプロセスの中`から、プロセス名やユーザー、グループ、端末名などを表すパターンを使ってプロセスIDを探す|pgrep [オプション] [プロセス名などのパターン]|




## tee(標準入力の出力先を2又にする)
```
% dmesg | tee -a log.txt
```
- dmesgの標準出力をパイプで標準入力として受け取り、標準出力（1）とlog.txtへの追記双方を行う。なお、`オプション-a(多分addの略)を指定しない場合は上書き`となる(>)と一緒。


## ln(リンクの作成)
- ln [オプション] リンク元 リンク先
    - オプション無しでハードリンク作成
        - ハードリンク
            - ファイルの実体を直接参照するリンク
            - ディレクトリのハードリンクは作成できない(循環ディレクトリの生成を防ぐため)
            - 異なるパーティションには作成できない(inodeが別々に管理されているため重複したりするから)
    - オプション -s でシンボリックリンク作成
        - シンボリックリンク
            - 元ファイルの場所を指し示すリンク(Windowsでのショートカットのようなもの)

###Linuxでのファイル管理
- ファイル(ディレクトリも含む)を「ファイルの実体（データ本体）」と「inode」を使用して管理している
    - inodeはラベルのようなもの
    - inode(ハードリンク)が0になった時、ファイルが削除される


## mv(ファイルの移動および名前変更)
- 「test1.txt」ファイルをカレントディレクトリにある「dir1」ディレクトリに移動し、ファイル名を「test2.txt」に変更

```
% mv test1.txt dir1/test2.txt
```

## killシグナル系

|コマンド|特徴|
|---|---|---|
|kill|PIDを指定する||
|killall|対象をプロセス名で指定|
|pkill|対象とするプロセス名を正規表現で指定|

- kill [-シグナル名または-シグナル番号][プロセスID]
- killall [-シグナル名または-シグナル番号]
- killall -s [-シグナル名または-シグナル番号]
- pkill [-シグナル名または-シグナル番号] プロセス名(コマンド名)
- pkill --signal [-シグナル名または-シグナル番号] プロセス名(コマンド名)
    - ※killallおよびpkillでシグナルを指定しない場合は15(TERM)が選択される

<img width="70%" alt="Screen Shot 2020-12-16 at 11.59.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/a2d9f790-194a-61fd-1cde-801df1400d89.png">


## プロセス監視

|オプション|概要|
|---|---|---|
|top|プロセスの稼動状況を一定時間ごとに更新して表示するコマンドはtopです|
|ps|現在実行中のプロセスを表示するコマンドだが、表示内容を一定時間ごとに更新しない|
|uptime|現在のシステムの負荷平均を表示|
|free|メモリやスワップ領域の使用状況を表示|

- ps [オプション]
    - 「-」を付けないBSDオプションと、「-」で始まるUNIXオプションがある



<img width="70%" alt="Screen Shot 2020-12-16 at 12.42.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/48d71f5f-41d5-2928-76e7-8f5d2617846f.png">


## Docker
### 主なコマンド

<img width="70%" alt="Screen Shot 2020-12-16 at 12.20.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/e0765ea3-f1a8-1ed7-8e62-e092095c7cb0.png">


## ファイル表示系基本コマンド
|コマンド|概要|
|---|---|---|
|cat|ファイルの内容を全て表示|
|tail|ファイルの末尾部分を指定して表示|
|nl|ファイルを行番号をつけて表示|
|head|ファイルの先頭を表示|
|sort|行単位でファイルの内容をソート|
|paste|複数のファイルを行単位で結合|
|fmt|1行あたりの最大文字数を指定してテキストを整形|
|wc|ファイル内の文字数や行数を調べる|
|uniq|ソートされているファイルにある連続して重複した行を1行にまとめて表示|
|cut|テキストファイルの各行から指定したフィールドを取り出して表示|
|split|指定した行数でファイルを分割|


# 低
## 仮想端末制御プログラム
多数の端末プログラムを使用するのではなく、仮想端末を制御するプログラムを動作させることで、一つの端末上で複数の端末を利用する手段
- screen
- tmux

## VM
###virsh
- libvirt(オープンソースの仮想化管理用のライブラリ)を操作するためのシェル
- 仮想マシンのリソース管理や仮想ネットワークの管理など、様々な操作が可能
- コマンド集

<img width="70%" alt="Screen Shot 2020-12-16 at 11.46.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/2e0e8fcd-f0b4-6d91-d2e7-564408293d06.png">

## chown, chgrp(所属グループ)
- 所有グループを変更することができる
    - chown [-R] :グループ名 ファイルまたはディレクトリ
    - chgrp [-R] グループ名 ファイルまたはディレクトリ
        - 「-R」オプションを使用すると、指定したディレクトリおよびその配下にあるファイルの所有ユーザやグループを再帰的に変更します
        - 「-R」オプションがない場合、ディレクトリのみ所有グループを変更します




## chmod(パーミッション)
- 3桁がユーザー（U)、グループ（G)、その他（O）の状況を表す
- 状況は以下の数字の合計値
    - 753であれば[全権限(4+2＋1)][読み・実行(4＋1)][書き・実行(2＋1)]

|権限|記号|数値
|---|---|---|
|読み|r|4|
|書き|w|2|
|実行|x|1|


## find(検索)
- 指定したディレクトリ以下からファイルやディレクトリを検索するコマンド
    - find [検索起点ディレクトリ] [検索式] [アクション]

## スナップショットとバックアップの違い

||特徴|違い|
|---|---|---|
|スナップショット|更新されたデータ|更新されたデータのみ更新|
|バックアップ|ストレージ内容すべて|記憶領域の全てを保存する|


## 正規表現

<img width="70%" alt="Screen Shot 2020-12-22 at 14.14.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/edf1d85b-dbba-cfa8-967c-f7334040f927.png">


## Viエディタ

<img width="70%" alt="Screen Shot 2020-12-22 at 14.58.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/f1b5bc7b-75bf-42da-22a1-84218b03232b.png">

<img width="40%" alt="Screen Shot 2020-12-22 at 15.06.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/c2719e0c-7e51-905b-5f4e-52f9cd3be4ab.png">

- viエディタを終了することなくLinuxコマンドを実行させるには、コマンドモードで以下のようなviコマンドを実行します。
    - :![コマンド]
        - 例:!ls  左記によってカレントディレクトリでlsコマンドを実行したことになる

## tailコマンド
|名称|特徴|
|---|---|---|
|-n行数または-行数|指定した行数をファイルの末尾から表示|
|-c バイト数|指定したバイト数をファイルの末尾から表示|
|-f|ファイルの末尾に追加された行を表示し続ける|


## trとsed
- sedはtrの上位互換としてとらえてよさそう

|コマンド|特徴|重要|
|---|---|---|
|tr|置換と削除ができる|`標準入力と標準出力`が使われるので、ファイルを処理したい場合は「cat」コマンドなどを使用|
|sed|trの機能に加え、追記ができる|`指定したファイル`をコマンドに従って処理し、標準出力へ出力|


## niceとrenice
- nice値(優先度)はともに -20 ~ 19 (-20がもっとも優先度が高く、19がもっとも優先度が低い）
- `何も指定しない場合のデフォルトnice値は10`
- `何も指定しない場合のデフォルトrenice値は0`
- nice値の記述方法それぞれで異なる
    - nice では　`-（ハイフン）を伴う`ため、-10は--10となる
    - reniceでは　`-（ハイフン）を伴わない`ため、-10は10となる

|コマンド|特徴|例|
|---|---|---|
|nice|実行時の優先度を指定してコマンドを実行|nice -10 コマンド名、または nice -n 10 コマンド名|
|renice|実行中のプロセスの優先度を変更|renice 10 `(-p) プロセスID`、または renice -n 10 `(-p) プロセスID`|
※ -pはなくてもOK


## エディターの種類

<img width="70%" alt="Screen Shot 2020-12-23 at 12.35.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/21c86a37-800b-e294-90b9-130f90fd001b.png">


## duとdf
|コマンド|特徴|
|---|---|---|
|du（disk usageの略）|ディレクトリの使用状況|
|df（disk freeの略）|ディレクトリの空き状況|


## シンボリックリンクとハードリンク
|コマンド|特徴|例|
|---|---|---|
|シンボリックリンク|パスを記録|
|ハードリンク|inode番号を元に実態にリンクする|


## fdiskとpartedとmkfs
|コマンド|特徴|例|
|---|---|---|
|fdisk|MBR形式のパーティション操作コマンド|
|parted|MBRおよびgpt形式のパーティション操作コマンド|
|mkfs|ファイルシステムを作成する|


## fstabとmtab
- mountはディスク装置をLinuxのディレクトリ内に埋め込み、使えるようにするマウント作業

|コマンド|特徴|例|
|---|---|---|
|fstab（filesystem table）|起動時にデフォルトでマウントされるデバイスが記述されている|
|mtab（mounted filesystem table）|現在マントされているデバイスが記述されている,起動時に自動マウント設定されておらず、起動後にマウントされたものがファイル内に記述される|


## tune2fs
- 既にあるファイルシステムのマネジメント操作を行う
    - mkfsとはファイルシステムを作成するという点で違う

|コマンド|特徴|例|
|---|---|---|
|tune2fs|ext2、ext3、ext4ファイルシステムのパラメータを変更|

## ファイルシステムの種類

<img width="40%" alt="Screen Shot 2020-12-24 at 15.45.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/736153/2385e41d-1043-62df-c78b-5ab13c7f2b21.png">


## telinit
- ランレベルの変更にしようする。

## UUID
- UUID（Universally Unique Identifier）とは、ソフトウェア上でオブジェクトを一意に識別するための識別子

## ブロックデバイス
- デバイスファイルのうち、アクセス時に文字単位ではなく、ブロック単位でデータを転送するもの
- デバイスのUUIDを表示できるコマンド


|コマンド|
|---|
|lsblk|
|blkid|