【知らなきゃ恥（※ ガチ）】小学一年生で習う? Linux用語特集

# はじめに
生成AIを使ってプログラミングやアプリ開発に挑戦している人が増えています。
v0やReplit Agent、Cursorなどアプリ開発に役立つサービスの登場でプログラミング未経験でもアプリをローンチする猛者も登場しています。

しかし、全くのゼロ知識で生成AIを使ってアプリ開発を進めるのは正直しんどいです。
例えばインフラやセキュリティが分からなくて脆弱なアプリになってしまうのは容易に起こり得ます。

今回の記事では、生成AIでアプリ開発を始めたプログラミング初心者や、開発の知識を深めたい人向けにコマンドラインでよく使用するLinuxコマンドに絞って用語と使い方を解説します。

「これだけ知っておけばとりあえず大丈夫！」というものを整理し、具体的な実行例まで付けて解説しているので手元でいつでも見返せるようにしておくと良いと思います。

### 対象読者
- 生成AIを使ってアプリ開発に取り組んでいる人
- Linuxコマンドの使い方を学びたい人
- 意外と忘れがちなコマンドを確認し直したい人

先に今回の記事で紹介するコマンド一覧を一覧で紹介します。気になるところから見るスタイルでも問題ないです。

### 記事の構成
本記事では下記のコマンドについて紹介と使用方法について具体例を交えながら解説しています。

| コマンド名  | 使用用途                                                 |
|------------|----------------------------------------------------------|
| ls         | ディレクトリ内容を一覧表示する                           |
| pwd        | 現在のディレクトリ位置を確認する                         |
| cd         | ディレクトリを移動する                                   |
| cp         | ファイルやディレクトリをコピーする                       |
| mv         | ファイルやディレクトリを移動/名前変更する                |
| rm         | ファイルやディレクトリを削除する                         |
| mkdir      | 新しいディレクトリを作成する                             |
| rmdir      | 空のディレクトリを削除する                               |
| touch      | 空ファイルを作成/更新日付を変更する                      |
| cat        | ファイル内容を一度に表示する                             |
| more/less  | ファイル内容をスクロールしながら表示する                 |
| head/tail  | ファイルの先頭/末尾の行を表示する                         |
| find       | 条件を指定してファイルを検索する                         |
| locate     | データベースから高速にファイルを検索する                 |
| chmod      | ファイルやディレクトリのアクセス権限を変更する           |
| chown      | ファイルやディレクトリの所有者やグループを変更する       |


:::note info
[Xアカウントではビジネスマンが生成AIを使いこなすヒントを発信しています](https://x.com/Nicola_GenAI)。AIを使いこなせるようになりたい方はフォローをお願いします！
また、マンツーマンの生成AIコーチングを行っているので、専門家の直接学習サポートに興味がある方はDMお待ちしています。
:::

https://x.com/Nicola_GenAI

https://x.com/Nicola_GenAI/status/1877534439791599950


それでは順番にそれぞれ解説していきます！

# Linux基本コマンド解説
## 使用するサンプルディレクトリ
今回は、以下のようなサンプルディレクトリを用いて、各コマンドの使用例も併せて紹介しています。


```bash
/sample_dir
├── file1.txt (内容: "Hello World")
├── file2.txt (内容: "Linux Command")
├── hidden_file (隠しファイル)
├── sub_dir
│   └── nested_file.txt

```

それでは各種コマンドを解説していきます。

## lsコマンド
### 説明
カレントディレクトリにある通常のファイルとサブディレクトリを表示する。
### 使い方
`ls [ディレクトリ]`
### 使用例
```bash
$ ls
file1.txt  file2.txt  sub_dir
```
カレントディレクトリにあるファイルとサブディレクトリが表示されます。
### 補足
`ls`コマンドをはじめ多くのlinuxコマンドは、-で始まる追加の引数を指定することができ、これをオプションといいます。
各コマンドの代表的なオプションを補足として紹介します。

- `-a`
隠しファイルも含めてすべて表示されます。
```bash
$ ls -a
.  ..  file1.txt  file2.txt  hidden_file  sub_dir

```
`.`と`..`はそれぞれカレントディレクトリと親ディレクトリを指します。

- `-l`
詳細情報も併せて表示します。
```bash
$ ls -l
total 8
-rw-r--r--  1 user user  1234 Jan  1 10:00 file1.txt
-rw-r--r--  1 user user  5678 Jan  1 11:00 file2.txt
drwxr-xr-x  2 user user  4096 Jan  1 09:00 sub_dir
```
`total`はブロック数を表します。
各列の情報
1. ファイルタイプとパーミッション
2. ハードリンクの数
3. 所有者
4. グループ
5. サイズ(バイト単位)
6. 最終更新日時
7. ファイル名


## pwdコマンド
### 説明
カレントディレクトリのパスを表示する。
### 使い方
`pwd`
### 使用例
```bash
$ pwd
/home/user/sample_dir
```


## cdコマンド
### 説明
ディレクトリを移動する。
### 使い方
`cd [移動先ディレクトリ]`
### 使用例
```bash
$ cd sub_dir
$ pwd
/home/user/sample_dir/sub_dir
```
### 補足
- 特殊な使用法
1. `cd ..`：親ディレクトリに移動
2. `cd ~`：ホームディレクトリに移動
3. `cd -`：直前のディレクトリの戻る

```bash
# 現在の作業ディレクトリを確認
$ pwd
/home/user/sample_dir

# sub_dirディレクトリに移動
$ cd sub_dir

# 現在の作業ディレクトリを確認
$ pwd
/home/user/sample_dir/sub_dir

# 親ディレクトリに戻る
$ cd ..

# 現在の作業ディレクトリを確認
$ pwd
/home/user/sample_dir

# ホームディレクトリに移動
$ cd ~

# 現在の作業ディレクトリを確認
$ pwd
/home/user
```


## cpコマンド
### 説明
ファイルやディレクトリをコピーする。
### 使い方
`cp [コピー元] [コピー先]`
### 使用例
```bash
$ cp file1.txt copy_of_file1.txt
$ ls
copy_of_file1.txt  file1.txt  file2.txt  sub_dir
```
### 補足
- `-r`
ディレクトリを再帰的にコピー
```bash
$ ls
copy_of_file1.txt  file1.txt  file2.txt  sub_dir
$ cp -r sub_dir new_sub_dir
$ ls
copy_of_file1.txt  file1.txt  file2.txt  sub_dir  new_sub_dir

# ディレクトリの中身も保持されていることを確認
$ ls new_sub_dir
nested_file.txt
```

## mvコマンド
### 説明
ファイルを移動または名前を変更する。(cpとは異なり、元のファイルは削除される)
### 使い方
`mv [移動元] [移動先]`
### 使用例
```bash
# ファイルを移動
$ mv file1.txt sub_dir/
$ ls
file2.txt  sub_dir
$ ls sub_dir
file1.txt  nested_file.txt

# ファイル名を変更
$ mv file2.txt renamed_file.txt
$ ls
renamed_file.txt  sub_dir

# ディレクトリ名を変更
$ mv sub_dir new_dir
$ ls
new_dir  renamed_file.txt
```


## rmコマンド
### 説明
ファイルやディレクトリを削除する。
### 使い方
`rm [削除対象]`
### 使用例
```bash
# 単一ファイルの削除
$ rm file1.txt
$ ls
file2.txt  sub_dir

# 複数ファイルの削除
$ rm file2.txt sub_dir/nested_file.txt
$ ls sub_dir
```
### 補足
- `-r`
ディレクトリを再帰的に削除
```bash
$ ls
sub_dir
$ rm -r sub_dir
$ ls
```
- `-i`
削除時に確認を求める
```bash
$ rm -i file2.txt
rm: remove regular file 'file2.txt'? y
```

## mkdirコマンド
### 説明
新しいディレクトリを作成する。
### 使い方
`mkdir [ディレクトリ名]`
### 使用例
```bash
$ mkdir new_dir
$ ls
file1.txt  file2.txt  sub_dir  new_dir
```
### 補足
- `-p`
階層ディレクトリを一括作成
```bash
$ mkdir -p parent_dir/child_dir
$ tree
.
├── file1.txt
├── file2.txt
├── sub_dir
│   └── nested_file.txt
├── new_dir
└── parent_dir
    └── child_dir
```
`parent_dir`が存在しない場合でも、`-p`オプションをつけることで親ディレクトリも一緒に作成されます。


## rmdirコマンド
### 説明
空のディレクトリを削除する。
### 使い方
`rmdir [ディレクトリ名]`
### 使用例
```bash
# ディレクトリが空でない場合、削除は失敗
$ rmdir sub_dir
rmdir: failed to remove 'sub_dir': Directory not empty

# ディレクトリの中身を空にする
$ rm sub_dir/nested_file.txt

# 空になったディレクトリを削除
$ rmdir sub_dir
$ ls
file1.txt  file2.txt
```
### 補足
- `-p`
親ディレクトリも一緒に削除
```bash
$ mkdir -p parent_dir/child_dir
$ rmdir -p parent_dir/child_dir
$ ls
file1.txt  file2.txt  sub_dir
```


## touchコマンド
### 説明
新しい空のファイルを作成または既存ファイルのタイムスタンプを更新する。
### 使い方
`touch [ファイル名]`
### 使用例
```bash
# 新しい空のファイルを作成
$ touch new_file.txt
$ ls
file1.txt  file2.txt  sub_dir  new_file.txt

# 既存ファイルのタイムスタンプを変更
$ touch file1.txt
$ ls -l
total 10
-rw-r--r--  1 user user  1234 Jan  14 10:00 file1.txt
-rw-r--r--  1 user user  5678 Jan  1 11:00 file2.txt
drwxr-xr-x  2 user user  4096 Jan  1 09:00 sub_dir
-rw-r--r-- 1 user user 0 Jan 14 10:00 new_file.txt
```
### 補足
- `-t`
タイムスタンプを特定の日時に設定
```bash
$ touch -t 202401020800 file1.txt
$ ls -l
total 10
-rw-r--r-- 1 user user 1234 Jan  2 08:00 file1.txt
-rw-r--r--  1 user user  5678 Jan  1 11:00 file2.txt
drwxr-xr-x  2 user user  4096 Jan  1 09:00 sub_dir
-rw-r--r-- 1 user user 0 Jan 14 10:00 new_file.txt
```

## catコマンド
### 説明
ファイルの内容を表示する。また、新しいファイルを作成したり、複数のファイルを結合したりすることにも用いられる。
### 使い方
`cat [ファイル名]`
### 使用例
```bash
# 単一ファイルの内容を表示
$ cat file1.txt
Hello World

# 複数ファイルを結合して表示
$ cat file1.txt file2.txt
Hello World
Linux Command
```
### 補足
- ファイルを新規作成/上書き
```bash
$ cat > new_file.txt
This is a new file.
Ctrl+D
$ cat new_file.txt
This is a new file.
```
`cat >`を使用すると標準入力からファイルを作成または上書きできます。入力を終了するには`Ctrl+D`を押します。

- 複数ファイルを結合
```bash
$ cat file1.txt file2.txt > combined.txt
$ cat combined.txt
Hello World
Linux Command
```


## moreコマンド/lessコマンド
### 説明
- `more`
テキストファイルをページ単位で表示する。ファイルの一方向のみ移動可能。
- `less`
`more`コマンドの機能を拡張したもので、上下自由にスクロールできる。
### 使い方
`more [ファイル名]`/`less[ファイル名]`
### 使用例
```bash
$ cat > new_file.txt
Line 1
Line 2
Line 3
Line 4
Line 5
Ctrl+D

$ more new_file.txt
Line 1
Line 2
...
--More--(続行するにはスペースキーを押してください)
# 内容が画面に収まりきらない場合、--More--が表示される
# スペースキーを押すごとに次のページが表示される

$ less file1.txt
Line 1
Line 2
...
# 上下矢印キーでスクロール可能
```
### 補足
- `less`コマンドの検索機能
`less`コマンド実行後に、以下のコマンドを実行することで検索キーワードに一致する箇所がハイライトされます。
```bash
/[検索キーワード]
```

- 比較

|特徴|`more`|`less`|
|----|----|----|
|スクロール|順方向のみ|両方向可能|
|検索機能|なし|あり|
|大きなファイルの対応|比較的遅い|高速で効率的|


## headコマンド/tailコマンド
### 説明
- `head`
ファイルの先頭部分(デフォルトでは最初の10行)を表示する。
- `tail`
ファイルの末尾部分(デフォルトでは最後の10行)を表示する。
### 使い方
`head [ファイル名]`/`tail [ファイル名]`
### 使用例
```bash
$ cat > new_file.txt
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
Line 13
Line 14
Line 15
Ctrl+D

$ head new_file.txt
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

$ tail new_file.txt
Line 6
Line 7
Line 8
Line 9
Line 10
Line 11
Line 12
Line 13
Line 14
Line 15
```
### 補足
- `-n`
行数を指定
```bash
$ head -n 5 new_file.txt
Line 1
Line 2
Line 3
Line 4
Line 5

$ tail -n 5 new_file.txt
Line 11
Line 12
Line 13
Line 14
Line 15
```


## findコマンド
### 説明
ディレクトリツリー内のファイルやディレクトリを検索する。
### 使い方
`find [検索開始ディレクトリ] [検索条件]`
### 使用例
```bash
# 名前で検索
$ find . -name "file1.txt"
./file1.txt

# 特定の種類を検索
$ find . -type d
.
./sub_dir

# 特定の拡張子で検索
$ find . -name "*.txt"
./file1.txt
./file2.txt
```
### 補足
- 主な検索条件
    - `-name`：ファイル名を指定
    - `-type`：ファイルの種類を指定
        - `f`：通常のファイル
        - `d`：ディレクトリ
    - `-size`：ファイルサイズを指定
        - `+`で以上、`-`で以下を表す
    - `-mtime`：最終更新日時を指定
        - `+n`でn日前より古い、`-n`でn日以内を表す
    - `-user`：指定したユーザーが所有するファイル

- 条件に一致したファイルにコマンドを実行
```bash
$ find . -name "file.txt" -exec cat {} \;
Hello World
This is nested file content.
```

## locateコマンド
### 説明
インデックスデータベースを利用して、より高速にファイルを検索する。
### 使い方
`locate [検索文字列]`
### 使用例
```bash
$ locate file1.txt
/home/user/sample_dir/file1.txt
$ locate file
/home/user/sample_dir/file1.txt
/home/user/sample_dir/file2.txt
/home/user/sample_dir/sub_dir/nested_file.txt

```
### 補足
- `-i`
大文字小文字を無視して検索
```bash
$ locate -i FILE1.TXT
/home/user/sample_dir/file1.txt
```

- `-c`
マッチ件数の表示
```bash
$ locate -c file
3
```

- 注意点
`locate`コマンドはデフォルトでインデックスデータベースを使用するため、最近作成したファイルが検索結果に含まれない場合があります。その際は以下のコマンドでデータベースを更新してください（管理者権限が必要）。
```bash
$ sudo updatedb
```

## chmodコマンド
### 説明
ファイルやディレクトリのアクセス権を変更する。
### 使い方
`chmod [モード] [ファイル名]`

- モードの指定方法
    - シンボリックモード
        - `u`：所有者
        - `g`：グループ
        - `o`：その他
        - `a`：全体
    - 数値モード
        - 8進数の数値で指定(`r`：読み取り、`w`：書込み、`x`：実行)
            - 7：`rwx`
            - 6：`rw-`
            - 5：`r-x`
            - 4：`r--`
            - 3：`-wx`
            - 2：`-w-`
            - 1：`--x`
            - 0：`---`

### 使用例
```bash
# 数値モード
$ chmod 644 file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 user user 1234 Jan 14 10:00 file1.txt

# シンボリックモード
# 所有者に実行権限を追加
$ chmod u+x file1.txt
$ ls -l file1.txt
-rwxr--r-- 1 user user 1234 Jan 14 10:00 file1.txt
```
### 補足
- `-R`
ディレクトリ内すべてのファイルの権限を変更
```bash
$ chmod -R 755 /sample_dir
$ ls -l
total 8
-rwxr-xr-x  1 user user  1234 Jan  1 10:00 file1.txt
-rwxr-xr-x  1 user user  5678 Jan  1 11:00 file2.txt
-rwxr-xr-x  2 user user  4096 Jan  1 09:00 sub_dir
```


## chownコマンド
### 説明
ファイルやディレクトリの所有者やグループを変更する。
### 使い方
`chown [新しい所有者]:[新しいグループ] [ファイル名]`
### 使用例
```bash
# 所有者とグループを変更
$ sudo chown user2:group2 file1.txt
$ ls -l file2.txt
-rw-r--r-- 1 user2 group2 1234 Jan 14 10:00 file2.txt

# 所有者のみ変更
$ sudo chown user1 file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 user1 group1 1234 Jan 14 10:00 file1.txt
```

### 補足
- `-R`
ディレクトリ全体を変更
```bash
$ sudo chown -R user2:group2 sub_dir
$ ls -lR sub_dir
sub_dir:
-rw-r--r-- 1 user2 group2 1234 Jan 14 10:00 nested_file.txt
```



# おわりに
いかがだったでしょうか？
生成AIを使ってアプリ開発にチャレンジする方など初めてLinuxコマンドを経験する人もいたのではないでしょうか。

基本的なLinuxコマンドを中心にまとめたので、それぞれ何ができるのか？は知っておいてほしいです。
どれもエンジニアなら知っておかなければいけないものばかりです。
AI時代でも基礎部分の理解は重要なので、これを気に是非マスターしましょう！


:::note info
[Xアカウントではビジネスマンが生成AIを使いこなすヒントを発信しています](https://x.com/Nicola_GenAI)。AIを使いこなせるようになりたい方はフォローをお願いします！
また、マンツーマンの生成AIコーチングを行っているので、専門家の直接学習サポートに興味がある方はDMお待ちしています。
:::

https://x.com/Nicola_GenAI

https://x.com/Nicola_GenAI/status/1877534439791599950


※ 記事中に誤表記等あればご教示いただけますと幸いです。