【Linux】コマンド入門（ディレクトリ・ファイル）

:::note
Linuxについて学習をしたので、ディレクトリとファイル操作系のコマンドを簡単にまとめました。
:::
:::note
初心者の方はご活用ください！
:::

# ディレクトリ操作系
## pwdコマンド
**_Print Working Directory (Present Working Directory)_**
カレントディレクトリ（現在いるディレクトリ）を表示するコマンド
```text:例
pwd [option(任意)]
```

## lsコマンド
**_List Segments_**
ファイル、ディレクトリの一覧を表示するコマンド
```text:例
list [option(任意)] [ファイル・ディレクトリ(任意)]
```

<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -a </td> <td>全てのファイルを表示する（隠しファイル含む）</td>
  </tr>
  <tr>
    <td> -l </td> <td>ファイルの詳細情報を表示する</td>
  </tr>
  <tr>
    <td> -F </td> <td> ファイル種別を表示する </td>
</table>


#### 便利機能（正規表現）
<table>
  <thead>
    <tr>
      <th>表現</th> <th>説明</th> <th>例</th>
    </tr>
  </thead>
  <tr>
    <td> * </td> <td>任意の文字列</td> <td>r*.txt ⇒ r.txt、rq.txt、ringo.txt、、、</td>
  </tr>
  <tr>
    <td> ? </td> <td>任意の1字</td> <td>r??.txt ⇒ rrr.txt、red.txt、r10.txt、、、</td>
  </tr>
  <tr>
    <td> [文字列] </td> <td>文字列に該当する1字</td> <td>repo202[12] ⇒ repo2021、repo2022
<br>repo202[1-9] ⇒ repo2021、、、repo2029</br></td>
</table>

## cdコマンド
**_Change Directory_**
ディレクトリの移動に使うコマンド
```text:例
cd [option(任意)] [ディレクトリ(任意)]
```

## mkdirコマンド
**_Make Directory_**
ディレクトリを作成するコマンド
```text:例
mkdir [option(任意)] <ディレクトリ>
```

<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -p </td> <td>深いディレクトリを一度に作成する</td>
  </tr>
</table>

## rmdirコマンド
**_Remove Directory_**
空ディレクトリを削除するコマンド
```text:例
rmdir <ディレクトリ>
```

# ファイル操作系
## catコマンド
**_Concatenate_**（直訳は結合）
ファイルの内容（中身）を表示するコマンド
```text:例
cat [option(任意)] <ファイル名> [ファイル名(複数の場合)]、、、
```

## lessコマンド
**_Less_**
ファイルの内容（中身）をスクロールで表示するコマンド
```text:例
less [option(任意)] <ファイル名>
```

<table>
<caption>操作系</caption>
  <thead>
    <tr>
      <th>キー操作</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> ・スペース<p>・f</p> </td> <td>1画面<strong>下</strong>へスクロール</td>
  </tr>
  <tr>
    <td> b </td> <td>1画面<strong>上</strong>へスクロール</td>
  </tr>
  <tr>
    <td> ・e <p>・j </p></td> <td>1行<strong>下</strong>へスクロール（後に数字を続けると、指定行スクロール）</td>
  </tr>
  <tr>
    <td> ・k <p>・y </p> </td> <td>1行<strong>上</strong>へスクロール（後に数字を続けると、指定行スクロール）</td>
  </tr>
</table>


<table>
<caption>検索系</caption>
  <thead>
    <tr>
      <th>キー操作</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> / <文字列> <td> 下方向検索 </td>
  </tr>
  <tr>
    <td> ? </td> <td> 上方向検索 </td>
  </tr>
  <tr>
    <td> n </td> <td> 次を検索（後に数字を続けると、指定分先を検索）</td>
  </tr>
  <tr>
    <td> N </td> <td> 前を検索（後に数字を続けると、指定分前を検索）</td>
  </tr>
</table>

## touchコマンド
**_Touch_**
ファイルを作成するコマンド（本来は、タイムスタンプを変更するコマンド）
```text:例
touch [option(任意)] <ファイル名1> <ファイル名2>...
```
<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -t </td> <td> [[CC]YY]MMDDhhmm[.ss]形式でタイムスタンプを指定 </td>
  </tr>
</table>

## viコマンド
**_VIsual editor (Visual Interface)_**
ファイルを作成し、編集するコマンド
コマンド実行後はコマンドモードに移行

```text:例
vi <ファイル名> 
```

<table>
  <thead>
    <tr>
      <th> キーコマンド </th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> i </td> <td> 入力モードに移行し、現在のカーソル位置に文字を入力する </td>
  </tr>
  <tr>
    <td> Escキー </td> <td> 入力モードからコマンドモードに移行する </td>
  </tr>
  <tr>
    <td> :w </td> <td> ファイルを保存する </td>
  </tr>
  <tr>
    <td> :q! </td> <td> ファイルを保存せず終了する </td>
  </tr>
  <tr>
    <td> :wq </td> <td> ファイルを保存して終了する </td>
  </tr>
</table>

## rmコマンド
**_Remove_**
ファイル・ディレクトリの削除を行うコマンド

```text:例
rm [option(任意)] <ファイル名1> <ファイル名2>...
```
<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -r </td> <td> ディレクトリも再帰的に削除する </td>
  </tr>
  <tr>
    <td> -f </td> <td> 削除前の警告文を非表示にする </td>
  </tr>
  <tr>
    <td> -i </td> <td> 削除前に確認する</td>
  </tr>
</table>

:::note
ここでの「再帰的」は「繰り返し」のようなニュアンス
参考：https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1364814303
:::

## mvコマンド
**_Move_**
ファイルの移動、名前変更を行うコマンド
```text:例（ファイル移動）
mv [option(任意)] <ファイル名> <移動先ディレクトリ>
```

```text:例（ファイル名変更）
mv [option(任意)] <元ファイル名> <新ファイル名>
```

<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -i </td> <td> 上書き前に確認する</td>
  </tr>
</table>

## cpコマンド
**_Copy_**
ファイルのコピーを行うコマンド

:::note warn

コピー先に同名のファイルがある場合、上書きを行う。
:::

```text:例
cp [option(任意)] <コピー元ファイル名> <コピー後ファイル名>
```

```text:例（ディレクトリ指定）
cp [option(任意)] <コピー元ファイル名> <ディレクトリ名>
```

<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -i </td> <td> 上書き前に確認する </td>
  </tr>
  <tr>
    <td> -r </td> <td> ディレクトリを再帰的にコピーする </td>
  </tr>
  <tr>
    <td> -p </td> <td> タイムスタンプ、パーミッション、所有者を保持してコピーする </td>
  </tr>
</table>

## lnコマンド
**_Link_**
リンクを作成するコマンド
```text:例
ln [option(任意)] <リンク元ファイル名> <リンク名>
```
:::note

optionを指定しない場合、ハードリンクを作成する
:::

<table>
  <thead>
    <tr>
      <th>オプション</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -s </td> <td> シンボリックリンクを作成する </td>
  </tr>
</table>

#### 補足：ハードリンクとシンボリックリンクについて
<table>
  <thead>
    <tr>
      <th>種類</th> <th>イメージ</th>
    </tr>
  </thead>
  <tr>
    <td> ハードリンク </td> <td> ・ファイルのクローンを作成するイメージ <p> ・リンク元を削除してもリンクは<strong>利用可能</strong> </p> </td>
  </tr>
  <tr>
    <td> シンボリックリンク </td> <td> ・ショートカットを作成するイメージ <p> ・リンク元が削除されるとリンクは<strong>利用不可</strong></td>
  </tr>
</table>

## findコマンド
**_Find_**
ファイル検索を行うコマンド

```text:例
find <検索開始ディレクトリ> <検索条件> <アクション>
```
<table>
  <thead>
    <tr>
      <th>検索条件</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> -name </td> <td> ファイル名を指定して検索 </td>
  </tr>
  <tr>
    <td> -iname </td> <td> 大文字・小文字の区別をせず、ファイル名を指定して検索 </td>
  </tr>
  <tr>
    <td> -type </td> <td> ファイルの種類で検索 <p> 凡例）f：ファイル、d：ディレクトリ、、 </p> </td>
  </tr>
  <tr>
    <td> -a </td> <td> 複数条件を指定する <p> 例）-type f <strong>-a</strong> -name sample.txt </p> </td>
  </tr>
</table>



## 付録
### おすすめの講座
<strong>①Linuxについて簡単に知りたい方向け</strong>
1日1時間×5日である程度のコマンド操作を理解できるので、
時間がない方、初心者の方にはおすすめです！

https://www.udemy.com/course/unscared_linux/

<strong>②ガッツリ勉強したい人向け</strong>
約20時間となかなか重たい講座ですが、ファイル操作だけでなく、
Dockerやシェルスクリプト等についても学習できます。

https://www.udemy.com/course/linuxlpic/