Linuxを基本からまとめてみた【コマンドラインの操作】

## 絶対パスと相対パス

| 絶対パス|相対パス|   
| --- | --- |  
| ルートディレクトリを基準に指定するパス | カレントディレクトリを基準に指定するパス |  
  

| ルートディレクトリ |  カレントディレクトリ   |   
| --- | --- | 
|ファイル階層における最上位のディレクトリ| 実行中のソフトウェアなどが現在の位置として指し示しているディリクトリ  |    

#### ディリクトリに指定に利用できる記号

| 記号 |意味     | 
| --- | --- | 
|  ・  |カレントディレクトリ     |
|  ・・  |親ディレクトリ（１つ上の階層のディレクトリ）     |
| 〜    | ホームディレクトリ    |
|  /   |  ルートディリクトリ   |

## ショートカットキー
#### 入力補完
- ファイルやコマンドを途中まで入力してTabキーを押すと続きが補完される
- 候補が複数ある時は２回押すことで候補を確認できる

#### ショートカットキー

| キー操作 | 意味 |    
| --- | --- | 
| Tabキー |ディレクトリ名やコマンドの補完 |      
| Ctrl ＋　Cキー |処理の停止     |      
| Ctrl ＋　Zキー |処理の一時停止     |      
| Ctrl ＋　Aキー |カーソルを行の先頭に移動     |      
| Ctrl ＋　Eキー |カーソルを行の末尾に移動     |      
| Ctrl ＋　Sキー |画面の出力を停止     |     
| Ctrl ＋　Qキー |画面の出力を再開     |      
| Ctrl ＋　Lキー |画面のクリア     | 

## 特殊文字の抑止
#### 特殊文字の抑止する記号

| 記号    | 意味    |     
| --- | --- |
|’〜’(シングルクォーテーション) |囲まれた部分のすべての特殊文字の効果を抑止|
|”〜”(ダブルクォーテーション) |囲まれた部分の＄などの一部を除いた特殊文字の効果を抑止|
|\〜（バックスラッシュ）| 直後の一文字の特殊もじの効果を抑止|

## コマンド履歴

#### historyコマンド
- コマンド履歴を表示
- history(オプション)(履歴数)
- オプション -c : 履歴の消去
- 履歴数　表示する履歴の数　省略した場合、すべての履歴を表示

#### コマンド履歴の保存
- コマンド履歴は、ホームディリクトリの.bash_historyファイルに保存される

|HISTSIZE|HISTFILESIZE|
| --- | --- |
|現在使用しているシェルのコマンド履歴の最大保存数|.bash_historyのコマンド履歴の最大保存数 |

## マニュアルの活用と検索
#### manコマンド
- man(オプション)(セクション)(キーワード)

| オプション|　説明 | 
| --- | --- | 
| -a |用意されている全てのマニュアルを表示 | 
| -f |指定したキーワードと完全一致するマニュアルを検索 |  
| -k |指定したキーワードと部分一致するマニュアルを検索 | 

| セクション  | 説明  |  
| --- | --- | 
|  1   | 一般コマンド    |
|  2   | システムコール    |
|  3   | ライブラリ関数    |
|  5   | ファイルフォーマット(設定ファイル)|
|  6   | 管理コマンド    |

## 変数の取り扱い
#### 変数の定義・参照
- シェルでは変数を利用することができる
- 定義『変数名=値』の形式
- 変数名の先頭には$をつけることができない
- 『＝』の左右にスペースを入れてはいけない

## 変数の一覧表示
#### setコマンド
- これまでに定義されたシェル変数、環境変数を表示
- 関数の情報も表示される
- シェルのオプションも設定可能

#### envコマンド
- これまでに定義された環境変数を表示
- シェル変数、環境変数は表示されない

## シェル変数と環境変数
#### 変数の参照できる範囲が異なる

|  シェル変数  |  環境変数  |
| ---- | ---- |
|『変数名=値』で定義 | 子プロセスに引き継がれる  |
| 子プロセスに引き継がれない |シャル変数と定義し、exportコマンドで変数する |

#### exportコマンド / declareコマンド

|exportコマンド|declareコマンド|
| ---- | ---- |
|export変数名|declare変数名|
|export変数名＝値|declare変数名＝値|
|指定したシェル変数を環境変数<br>としてエクスポートする |変数の属性を指定できる|
| |-rオプション:読み取り専用 |
| |-xオプション:環境変数とする|

## ファイル内容を表示するための基本的なコマンド
#### catコマンド
- 指定したファイルの内容を表示
- 複数ファイルを指定した場合、指定順に内容を連結して表示
- ファイルを指定しなかった場合、入力内容をそのまま出力

#### niコマンド
- ファイル内容を行番号をつけて表示させる
- catコマンドに-nオプションをつけたもの(cat -n)と同様の結果を得られる

## ファイルの先頭・末尾部分を表示するコマンド
#### headコマンド
- ファイルの先頭部分を表示する
- デフォルトでは10行表示される
- -nオプションで行数を指定する

#### tailコマンド
- ファイルの末尾部分を表示する
- デフォルトでは10行表示される
- -nオプションで行数を指定する
- -fオプションで、追記された場合にリアルタイムで表示させる

## ファイルを整形して表示するための基本的なコマンド
#### fmtコマンド
- ファイルを段落に整形して表示
- -wオプションで段落の文字数を指定する（デフォルトは75文字）

#### prコマンド
- ファイルを印刷用に整形して表示
- 日時やページ数などが載ったヘッダー・フッターを付加する
- デフォルトでは、１ページにテキスト部分を56行表示する

## 指定した例を表示するコマンド
#### cutコマンド
- -dオプションで例の区切り文字数を指定
- -fオプションで表示する列番号を指定

## 各行を列として結合して表示するコマンド
#### pasteコマンド
- -dオプションで列の区切り文字数を指定
- デフォルトではタブ区切り

## ファイルの内容を並び変えて表示するコマンド
#### sortコマンド
- ファイルの内容を並び替えて表示する
- sort ファイル名

|  オプション  |  説明  |
| ---- | ---- |
|-t"(文字)"|指定した文字を区切り文字として使う|
|-k列文字|指定列を基準するデフォルトは先頭の列|
|-r|逆順に並び替える|
|-n|基準例を数値として扱う|

## 重複している行を排除して表示するコマンド
#### uniqコマンド
- 重複している行を排除して表示する
- uniq ファイル名
- -cオプション: 重複回数も表示
- 隣あった行のみを比較する
- あらかじめsortコマンドで内容を並び替えることが多い

## ファイルを共通の列で結合して表示するコマンド
#### joinコマンド
- 共通の列に基づいて、指定した2つのファイルを結合する
- join ファイル1ファイル2

|  オプション  |  説明  |
| ---- | ---- |
|-t"(文字)"|指定した文字を区切り文字として使う|
|1列番号|ファイル1の基準の列を指定|
|2列番号|ファイル2の基準の列を指定|

## ファイル内容を文字数など表示するコマンド
#### wcコマンド
- ファイル内の行数・単語数・文字数をカウントして表示する
- 複数選択した場合、上にあるものから順に表示される

|  オプション  |  説明  |
| ---- | ---- |
| -l | 改行文字の個数を数える  |
| -w | 単語の個数を数える<br>単語は、半角スペースで区切られた文字列のこと |
| -m | 文字数を数える  |
| -c|  バイト数を数える  |
| -L| 1行の最大文字数を数える |

## ファイルを 8 進数や他の形式で表示するコマンド
#### odコマンド
- ファイルを8進数や他の形式で表示する

| オプション | 説明 |
| ---- | ---- |
|-t c|ASCII文字で表示|
|-t d|符号付き　10進数で表示する|
|-t u|符号なし　10進数で表示する|
|-t f|浮動小数点型で表示する|
|-t o|8進数で表示する|
|-t x|16進数で表示する|

## 文字を置換・削除して表示するコマンド
#### trコマンド
- tr(文字列1)(文字列2) 
文字列1を文字列2に置換する

- tr-d(文字列1)
文字列1を削除する

- tr[:lower:][:upper:]
小文字を大文字に置換する

## 指定したファイルを分割するコマンド
#### splitコマンド
- split-l(行数)(ファイル名) 
(分割後のファイルの接頭辞)
- ファイルを指定行数ごとに分割

## タブとスペースを変換するコマンド
#### expandコマンド
- タブ ⇨ スペース
- 全てのタブが変換される
- -iオプション: 行頭のみ 
- -tオプション: タブの幅を指定

#### unexpandコマンド
- 2つ以上の連続スペース　⇨　タブ
- 行頭のみ変換される
- -aオプション: 全て変換する 

## ストリームとパイプ

#### ストリームとは？
- プログラムがデータを読み書きするためのデータの流れ

#### パイプ
- コマンドの標準出力を別のコマンドの標準入力として繋げる機能

## リダイレクトとヒアドキュメント
#### リダイレクト
- 入出力ストリームをファイル・デバイスに繋げる仕組み
- 出力時、ファイルの内容が上書きされる
- ファイルに追記する場合、『>』を『>>』に置き換えて利用する

#### ヒアドキュメント
- 複数行のテキストを簡単に扱うための機能
- コマンド<<デリミタ

#### teeコマンド
- 標準出力の内容をコンソールとファイルの両方に出力する
- 構文:(コマンド)|tee(ファイル名)

#### 正規表現
- 文字列のパターンを表現するための記法

#### 正規表現を使用したテキスト検索
#### grepコマンド
- 指定したファイルから、キーワードが書かれている行のみ抽出する
- grep[オプション]キーワードファイル

| オプション | 説明 |
| ---- | ---- |
|-e|複数のキーワードを指定する(OR検索)|
|-E|拡張正規表現を利用する|
|-v|否定条件(NOT検索)|
|-i|大文字・小文字の区別をしない|
|-c|キーワードと合致する行数のみを表示する|
|-n|出力される行に行番号を併せて表示する|

#### 正規表現を使用したテキスト検索
#### sedコマンド
- 文字列の置換や削除といった編集を行うことができる
- sed[オプション]'s/検索文字列/置換後の文字列/'ファイル
- sed[オプション]'/削除する文字列/d'ファイル
- 実際にはファイル内容は変更されない
- ファイルを直接編集したい場合、-iオプションを使用する
- デフォルトでは行で最初にマッチした文字列のみを置換する
- 全ての文字列を置換したい場合、置換後の文字列の後ろにgをつける

## エディタを使用したファイル編集
#### Linuxで利用できるテキストエディタ
- テキストファイルを編集するためのソフトウェア

#### 利用できるエディタ
- vi(vim)
- emacs
- nano

#### 既定のテキストエディタを設定
- エディタ変数を設定する

#### viエディタのモード
- viの大きな特徴:モードを切り替えて利用する

|ターミナル|コマンドモード|入力モード| 
| --- | --- | --- | 
|vi a.txt|各キーに命令が割り当てられる<br>文字の入力はできない|自由に入力できる| 

#### コマンドによって違いがある
| コマンド | 入力モードに切り替わる際の挙動　|
| --- | --- |
|i (小文字)|カーソルの位置はそのまま|
|a (小文字)|カーソルの位置を1文字右に移動する|
|o (小文字)|カーソルの位置を改行する| 
|I (大文字)|カーソルの位置を行頭に移動する|
|A (大文字)|カーソルの位置を行末に移動する|
|O (大文字)|カーソルの位置に改行を挿入する|

#### 保存・終了
- 『w』は保存、『q』は終了、『!』は強制

|コマンド|意味|
| --- | --- |
| ZZ  | ファイル名を保存して終了 |
| :wq | ファイル名を保存して終了 |
| :q  | ファイル名を保存せず終了 |
| :ql | 内容を変更した後でも保存せず終了 |
| :w(ファイル名)| ファイルを保存<br>ファイル名を指定すると指定した名前で保存 |
| :e(ファイル名)| ファイルを読み直す<br>ファイル名を指定すると指定したファイルを開く |




## 参考サイト
[新・Linux入門編4(LinuC対策版): コマンドラインの操作](https://paiza.jp/works/linux/new-primer/linux-new-primer-4)