LPIC 勉強記録 3月7日

#第1章 基本コマンドとファイルの操作

`シェル`
LinuxとOSとユーザの仲立ちをするユーザインタフェース
Linuxの標準シェルはbash

bashではシェル変数PS1はコマンドプロンプト、シェル変数PS2は2次プロンプトとして定義されている

`シェル変数`
設定されたシェルだけが使用する変数
子プロセスには引き継がれない

`環境変数`
設定されたシェルとそのシェルで起動したプログラムが使用する変数
子プロセスに引き継がれる
exportコマンドにより定義する

`setコマンド`
現在のシェルで定義されているシェル変数の一覧を表示する
シェル変数の値を定義するには、「シェル変数名 = 値」とする
値の参照には、「$ シェル変数名」とする

`pwdコマンド`
現在の作業ディレクトリを絶対パスで表示する
PWD変数にはカレントディレクトリの絶対パスが格納されている

echoコマンドに「$ シェル変数名」とすることで、現在の作業ディレクトリを絶対パスで表示できる

`setコマンド`
オプションを指定せずに実行すると、シェル変数、シェル関数を一覧表示する
オプションを指定すると、シェルのパラメータなどを設定できる

`exportコマンド`
環境変数を設定できる
環境変数は子プロセスとして起動したアプリケーションに引き継がれるので、アプロケーションから利用できる

`cdコマンド`
ファイルシステム内を移動する
「cd ~ユーザ名」は現在のログインユーザにかかわらず、~以降に指定されたユーザのホームディレクトリへ移動するという意味になる

`manコマンド`
引数で指定したコマンドのオンラインマニュアルを表示する
/usr/share/man
/usr/local/share/man

`コマンド実行履歴の保存先`
デフォルトで`~/.bash_history`が使用される

`suコマンド`
一時的にアカウントを別のユーザの権限に切り替える
`su - root`を実行することでrootユーザに切り替える

`sudoコマンド`
事前に管理者から許可されている管理用コマンドを実行する

`mkdirコマンド`
ディレクトリを作成する
コマンドの引数に複数のディレクトリ名を指定すると、一度に複数のディレクトリを作成することができる
コマンドの引数に`-p`を指定すると、パス途中のディレクトリも作成できる

`mvコマンド`
ファイルやディレクトリの移動に使用
最後の引数に指定されたディレクトリに移動元のファイル(またはディレクトリ)が同じ名前で移動する
最後の引数に存在しない名前を指定した場合は、その名前に変更する

`メタキャラクタ`
コマンドラインの制御や単語の区切りに使用される特殊文字

`cpコマンド`
ファイルやディレクトリを複製する場合に使用
同じディレクトリ内や他のディレクトリに複製でき、他のディレクトリに複製する場合は同じ名前にすることもできる
ディレクトリのコピーを行う場合は、`-R(もしくは-r)`オプションが必要

`lsコマンド`
ファイルやディレクトリの情報を一覧表示する

`rmコマンド`
ファイルを削除する
`-R(もしくは-r)`オプションで、指定されたディレクトリ内にファイル、ディレクトリが存在していてもすべて削除する

`アーカイブファイル`
複数のファイルを1つにまとめたデータのこと

`tarコマンド`
オプションによって指定したファイルをアーカイブしたり、アーカイブファイルからファイルの情報を表示したり、ファイルを取り出したりする

`moreコマンド`
１画面に収まらないファイルを制御することができる

`lessコマンド`
１画面に収まらないファイルを表示する

`catコマンド`
表示したいファイルのファイル名を引数に指定すると、ディスプレイに表示する
`-nオプション`を使用すると出力結果に行番号が振られる

`nlコマンド`
ファイルの内容に行番号を付けて表示する

`fileコマンド`
ファイルの種類を調べる

`$ コマンド１ < file1`
file1の内容を標準入力からコマンド1に取り込む
`$ コマンド１ < file1 | コマンド２`
file1の内容を標準入力からコマンド1に取り込み、コマンド１の標準出力をコマンド２の標準入力に渡す

`ヒアドキュメント`
コマンドの後ろに`<< 文字列`を指定すると、指定した文字列が現れるまでの内容を、コマンドの標準入力として扱う

`/dev/nullファイル`
このファイルに書かれたものはすべて消去され、このファイルを読み込むと常に`EOF(End Of File)`が返る

`teeコマンド`
標準入力から読み込んだデータを標準出力とファイルの両方に出力する

`コマンドの連続実行`
`$ コマンド1 ; コマンド2`
コマンド１、コマンド２を順々に実行する
`$ コマンド1 && コマンド2`
コマンド１が実行できれば、次のコマンド２を実行する
`$ コマンド1 || コマンド2`
コマンド１が実行できなければ、次のコマンド２を実行する

`grepコマンド`
テキストデータ内の文字列検索を行う
`-iオプション`大文字と小文字を区別しないで検索を行う
`-vオプション`条件に一致しない行を検索する

`headコマンド`
テキストファイルの先頭部分を表示する
行数をオプションで指定しなければ、デフォルトで１０行目まで表示する

`tailコマンド`
テキストファイルの末尾部分を表示する
行数をオプションで指定しなければ、デフォルトで１０行目まで表示する

`trコマンド`
tr [オプション][文字群1 [文字群2]]
標準入力であるキーボードから入力した文字を指定した文字に変換して、標準出力であるディスプレイに表示できる
`-dオプション`文字群１で合致した文字を削除する

`sedコマンド`
単語単位の変換や削除
`s/パターン/置換文字列/g`ファイル内全体を対象に、パターンに合致する文字列を置換文字列に変換

`cutコマンド`
ファイル内の行中の特定部分のみ取り出す
`-d`フィールドの区切り文字を指定。デフォルトはタブ
`-f`指定された各フィールドだけを表示する

`wcコマンド`
ファイル内のバイト数、単語数、行数を表示する
`-lオプション`行数だけを出力する

`odコマンド`
ファイルの内容を８進数やその他の形式で表示する

`splitコマンド`
ファイルを決まった大きさに分割する
デフォルトでは、入力元ファイルを1,000行ずつ分割し出力ファイルに書き込む

#第2章　正規表現とviエディタ
`正規表現`
記号や文字列を組み合わせて、目的のキーワードを見つけるためのパターンを作り、検出する手段
. 任意の文字に一致
^ 行の先頭
$ 行の末尾
* 直前の文字が0回以上の繰り返しに一致
? 直前の文字が0回もしくは1回の繰り返しに一致
+ 直前の文字が1回以上の繰り返しに一致
[] []内の文字グループと一致

`pgrepコマンド`
現在実行中のプロセスを調べて、ユーザ名、UID、GIDなどを基にプロセスIDを検索する
`-u euid`指定された実効ユーザIDに該当するプロセスIDを検索
`-U uid`指定された実ユーザIDに該当するプロセスIDを検索

`fgrepコマンド`
引数で指定された検索文字列を基に検索する
正規表現は使用しない　→　単に文字列として扱われる

`viエディタのコマンド`
[Ctrl]+[b] ファイルの先頭に向かって１画面ずつスクロール
[Ctrl]+[f] ファイルの末尾に向かって１画面ずつスクロール
ZZ(:wq) 保存と終了を同時に行う
:q! ファイルの内容の変更があっても、保存せずに強制的に終了
:wq ファイル名 ファイル名を変更して保存(もしくは新規保存)し、終了する
:! ls -l viから抜けずにコマンドを実行する
ndd カーソル行からn行削除
p カーソル行の下の行に貼り付け

`入力モード(挿入モード)にするviコマンド`
A カーソル行の末尾に文字を挿入

`検索時に使用するviコマンド`
/文字列　現在のカーソル位置からファイルの末尾に向かって検索

`viモードに設定する場合`
set -o vi

#第3章　プロセス管理

`プロセス`
実行中のプログラムのこと
ユーザがコマンドを実行することによって、プロセスは生成され、プログラムの終了とともに消滅する
システムが起動すると、最初に`initプロセス`が生成される
`initプロセス`のPIDは１

`psコマンド`
プロセスの情報を表示する基本的なコマンド

`pstreeコマンド`
プロセスの親子関係をツリー構造で表示する

`topコマンド`
前回の更新から現在までの間で、CPU使用率(%CPU項目)の高い順に、周期的にプロセスの情報を表示する

`freeコマンド`
システムの空きメモリと利用メモリの量を表示する

`動的優先度`
静的優先度とCPU使用時間を基に計算され、CPUを使うほど優先度は低くなる
カーネル内部で100〜139の範囲の値を持つ
`静的優先度`
nice値により一定範囲でユーザが設定可能
カーネル内部で100〜139の範囲の値を持つ

`niceコマンド`
プロセスの優先度を変更する
オプションで数値を指定しないと、デフォルト(0) +10の優先度を付与する
優先度にマイナス値を指定可能なのは、root権限を持つユーザのみ
nice値は-20〜19の値で変更可能

`reniceコマンド`
動作中のプロセスの優先度の変更
優先度にマイナス値を指定可能なのは、root権限を持つユーザのみ

`ジョブ`
コマンドライン１行で実行された処理単位のこと
シェルごとに管理され、「ジョブID」が振られる

`フォアグラウンドジョブ`
キーボードと端末画面を占有して、対話的な操作をするジョブ
そのジョブが終了するまで、端末画面上には次のプロンプトが表示されない
シェルごとに1つのみ

`バックグラウンドジョブ`
キーボード入力を受け取ることができないジョブ
画面への出力は設定によっては抑制される
複数のジョブを同時に実行することが可能

`fg % ジョブID`
指定したジョブをフォアグラウンドに移行

`bg % ジョブID`
指定したジョブをバックグラウンドに移行

`jobsコマンド`
実行中のジョブを表示する
ジョブIDやジョブの状態(実行中、停止、終了)を確認できる

`nohupコマンド`
ログアウトしてもプログラムを実行し続ける

`uptimeコマンド`
システムが稼働し続けている期間を調べる

`シグナル`
割り込みによって、プロセスに特定の動作をするように通知するための仕組み
プロセスに対してシグナルを送信することで、外部からプロセスを終了させることができる

`killコマンド`
実行中のプロセスにシグナルを送信する
明示的にシグナルを指定しない場合は、SIGTERM(15)が送信される
→　プログラムを終了する前に、アプリケーションごとに必要なクリーンアップ(終了処理)の処理を行ってから、自分自身でプロセスを終了する

[Ctrl]+[c]は、キーボード操作の割り込みによるプロセスの終了
シグナルとしては、SIGINT(2)が送信される

`killallコマンド`
プロセス名を指定してシグナルを送信する
同じ名前のプロセスが複数存在し、それらをまとめて終了したい場合に有効

`watchコマンド`
指定されたコマンドを繰り返し実行し、その結果を表示する
これにより、プログラムの出力の経時変化を監視できる

`tmux`
1つの物理的な端末画面から多数の端末を作成、アクセス、および制御することができる文字型端末の画面制御プログラム
tmuxパッケージのインストールが必要