Linux コマンドライン操作の基本

##はじめに
　LPICに即したLINUXの基本操作メモ

###1 シェル

ユーザからコマンドを受け付け必要なプログラムを実行するもの。

1.シェルは複数の種類がある。
・Bourne　UNIXの標準的なシェル
・Bash　Bourneシェルを改良したもの。Linuxの標準シェル
・Cシェル(csh)　C言語に似たスクリプトが利用できる
・tcsh　cshを改良したもの
・Kornシェル(ksh)　Bourneを拡張したもの
・zsh　kshにbashやtcshの機能を取り入れたもの

2.システムログイン直後に起動されるシェルを、ログインシェルと呼ぶ

3.ログイン後、シェルは「＄」や「#」等のプロンプトを表示し入力を待ち受ける。
 プロンプトの表示はシェルの種類で異なる。
 例：bashだと一般ユーザは「$」。rootは「#」である。

4.プロンプトの表示形式は自由に設定できる。例：ユーザ名。ホスト名。カレントディレクトリ等

5.利用できるシェルは/etc/shellsで確認できる。

6.chshコマンドで変更できる。

7.一般ユーザとrootではプロンプトが異なる。
　シェルのプロンプト表示形式は環境変数、PS1で設定する。

###2 シェル(bash)の基本操作と設定

・補完機能
　入力途中でTabキーを押すと残り部分が自動入力される。
　該当が複数ある場合は、tabキーを2回押すと候補が表示される。

|コマンド|説明|
|:--|:|
|Ctl + A|カーソル行頭に移動する
|Ctl + E|カーソル行末に移動する
|Ctl + D|カーソル部分の1文字削除
|Ctl + H|カーソル左側の1文字削除
|Ctl + L|画面をクリアしカレント行を再表示する
|Ctl + C|処理中断
|Ctl + Z|処理を一時停止

・ディレクトリの指定
bashは以下の特殊記号が利用できる

|コマンド|説明|
|:|:|
|~|ホームディレクトリ|
|.|カレントディレクトリ|
|..|一つ上のディレクトリ|

###3 シェル変数と環境変数
変数はシェル変数と環境変数に分かれる

・有効範囲の違い
シェル変数：変数を定義したシェルプロセス
環境変数：変数を定義したシェル。そのシェルで実行されるプロセス

・環境変数の設定方法
　exportコマンドで設定する

・主な環境変数

|変数|説明|
|:|:|
|EDTIOR|デフォルトエディタのパス|
|HISTFILE|コマンド履歴格納ファイル|
|HISTFILESIZE|HISTFILEに保存する履歴数|
|HISTSIZE|コマンド履歴の最大値|
|HOME|カレントユーザのホームディレクトリ|
|HOSTNAME|ホスト名|
|LANG|言語|
|LONGNAME|ログインシェルのユーザ名|
|PATH|コマンドやプログラムを検索するディレクトリリスト|
|PS1|プロンプトの表示文字列|
|PS2|複数行に渡る入力時のプロンプト|
|PWD|カレントディレクトリ|
|TERM|端末の種類|
|USER|現在のユーザ|


・変数の各種書式

|書式|説明|注意点|
|:--|:--|:--|
|変数を設定する|変数名=値| =の前後にスペースを入れない|
|変数の参照|echo $変数名　または　文字列|
|変数の削除|unset 変数名|
|環境変数の一覧表示|env　または　printenv|
|環境変数にエクスポート|export 変数名[=値]|

　・間違い例
　＄VAR=linux　＞変数の設定は＄が不要 　
　echo VAR　＞変数の参照は$が必要

###4 環境変数PATH

・コマンドは2種類ある。
　①内部コマンド・・シェルに組み込まれているもの
　②外部コマンド・・独立したプログラムが存在するもの
外部コマンドを実行する場合、シェルはそのコマンドがどこに保存されているのか
環境変数PATHに指定された順番で調べて実行する。

・コマンドが保存されたディレクトリを環境変数PATHに追加することを
パスを通す。と表現する。

・パスの通っていないディレクトリにあるコマンドを実行する場合は
絶対パスか相対パスを指定しないとエラーになる。


・パスの追加方法は2種類ある。
①~/.bash_profileなどの環境設定ファイルを修正する
②以下のコマンドを実行
　PATH=$PATH:追加するディレクトリ名

　例：/opt/binを末尾に追加する場合
　PATH=$PATH:/opt/bin

　注意：末尾に追加しない場合、既存のパスが消える！！
　例
　PATH=/opt/bin　とした場合、/opt/bin以外のpathが無くなり全ての外部コマンドが利用不可。

###5 コマンドの実行

①基本書式　コマンド　オプション　引数
②コマンドは1行に複数を並べて実行できる

|コマンド|説明|
|:|:|
|コマンド1;コマンド2|１に続いて２が実行される|
|コマンド1&&コマンド2|コマンド１が正常に終了すると２が実行される|
|コマンド｜｜コマンド2|コマンド１が正常に終了しなかった場合にコマンド２を実行する|
|(コマンド1;コマンド2)|コマンド１とコマンド２を、ひとかたまりのグループで実行する|
|{コマンド1;コマンド2;}|現在のシェル内でコマンド1とコマンド２を実行する|

###6 引用符

「'」　単一引用符
　説明：
　・全て文字列になる
　・変数はそのまま表示される。※値は表示できない

```
　$echo DATE
　7月7日　
　$echo '$DATE'
　&DATE
```
「"」　二重引用符
　説明：
　・文字列になる。
　・変数は値が表示される。
　・変数をエスケープ（表示しない場合）は先頭に「\」バックスラッシュをつける。
　　※Windowsだと￥マーク

```　
　[root@localhost ~]# echo $HOME
　/root
　[root@localhost ~]# echo "変数\$HOMEの内容は「$HOME」です"
　変数$HOMEの内容は「/root」です
```
「`」　バッククォーテーション
　説明：
　・バッククォーテーション内にコマンドがあれば実行結果を表示する
　・変数の場合は変数に格納されているコマンド実行結果が展開される


###7 コマンド履歴

bashは履歴機能があり、コマンド実行履歴を参照できます。
※一度利用したコマンドを利用したり、一部を変更して実行したい場合等。

####history　履歴を参照する

```
$history
 1 ls
 2 cat .profile
 3 pwd
 4 cd ..
 5 date
```
####履歴番号から実行する
!【履歴番号】

```
$ !5
date
2021年7月15日 23:22:12 JST
```
####bash履歴機能

|コマンド|説明|
|:|:|
|↑(Ctrl + P)|1つ前のコマンドを表示する|
|↓(Ctrl + N)|1つ次のコマンドを表示する|
|!文字列|実行したコマンドで、指定した文字列から始まるコマンドを実行する|
|!?文字列|実行したコマンドで、指定した文字列を含むコマンドを実行する|
|!!|直前に実行したコマンドを実行する|
|!履歴番号|履歴番号のコマンドを実行する|

###8 マニュアルの参照
・以下コマンドでマニュアルを参照できる

`man [オプション] [セクション] コマンド名 or キーワード`　

|オプション|説明|
|:|:|
|-a|全セクションのマニュアルを表示|
|-f|指定キーワード（完全一致）でドキュメントを表示|
|-k|指定キーワード（部分一致）でドキュメントを表示|
|-w|マニュアルがあるディレクトリを表示|

例：マニュアルのマニュアルを参照する

　`man man`

####・見出し
マニュアルは見出し区切られています。

|見出し|説明|
|:|:|
|NAME(名前)|コマンドやファイルの名前と簡易説明|
|SYNOPSIS(書式)|書式|
|DESCRIPTION(説明)|詳細説明|
|OPTIONS(オプション)|指定できるオプション説明|
|FILES(ファイル)|設定ファイルなど関連するファイル|
|ENVIRONMENT(環境変数)|関連する環境変数|
|NOTES(注意)|その他注意事項|
|BUGS(バグ)|既知の不具合|
|SEE ALSO(関連項目)|関連項目|
|AUTHOR(著者)|プログラムやドキュメントの著者|

↓イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1308027/9daf732d-116d-2cba-a2db-dc8bd44f08f4.png)

####・ページャの説明
マニュアルはほとんどが画面に収まらないのでページャで操作できる。

|キー操作|説明|
|:|:|
|k、↑|上クロール|
|k、↓、Enter|下スクロール|
|スペース、f|下に1画面スクロール|
|b|上に1画面スクロール|
|/検索文字列|下方向に文字列を検索する|
|?検索文字列|上方向に文字列を検索する|
|h|ヘルプを表示する|

####・セクション
同一の名前で異なる内容を調べる

|セクション|説明|
|:|:|
|1|ユーザコマンド|
|2|システムコール|
|3|ライブラリ|
|4|デバイスファイル|
|5|設定ファイル|
|6|ゲーム|
|7|その他|
|8|システム管理コマンド|
|9|Linux独自カーネルのドキュメント|

例：パスワードコマンドではなくパスワードファイルのマニュアルを確認する
 `man 5 password`


##履歴
2021/8/3 作成