Newer
Older
hello-programmer-world / src / pages / cli / 020-common-commands.mdx
@h.sakamoto h.sakamoto 16 hours ago 8 KB fixed
---
layout: "@/layouts/MarkdownLayout.astro"
---

import Toc from "../../components/Toc.astro";
import Image from "../../components/Image.astro";

export const title = "基礎コマンド";

# {title}

## TOC

## ディレクトリの移動と確認

### pwd

現在のディレクトリ位置を確認します。

WindowsではExplorer、MacではFinderなどで、表示されている場所に相当します。

```bash frame=terminal
$ pwd
/home/user/projects
```

### ls

現在のディレクトリにある、ファイルやディレクトリの一覧を表示します。

```bash frame=terminal
$ ls
sample.txt project1 project2
```

よく使うオプション:

- `ls -l`: 詳細情報を表示(ファイルサイズ、更新日時など)
- `ls -a`: 隠しファイルも含めて表示

```bash frame=terminal
$ ls -l
-rw-r--r-- 1 user user 1234 Jan 01 12:00 sample.txt
drwxr-xr-x 2 user user 4096 Jan 01 12:00 project1
```

### find

現在のディレクトリとその配下にあるファイルやディレクトリを検索します。

```bash frame=terminal
$ find
.
```

### cd

ディレクトリを移動します。  
`cd`は「change directory」の略です。

```bash frame=terminal
$ pwd
/home/user
$ cd projects
$ pwd
/home/user/projects
```

引数なしで`cd`を実行すると、ホームディレクトリに移動します。

```bash frame=terminal
$ pwd
/home/user/projects/src/components
$ cd
$ pwd
/home/user
```

## ファイル・ディレクトリの操作

ターミナル上では、現在のディレクトリを基準にしてファイルやディレクトリの操作を行います。

### touch

空のファイルを作成します。  
既に存在するファイルを指定すると、更新日時だけが変更されます。

```bash frame=terminal
$ touch sample.txt
$ ls
sample.txt
```

### rm

ファイルやディレクトリを削除します。  
`rm`は「remove」の略です。

```bash frame=terminal
rm sample.txt
```

⚠️ **注意**: 一度削除すると復元できないので、慎重に使いましょう。

ディレクトリを削除する場合は、`-r`オプション(再帰的に削除)を使います。

```bash frame=terminal
rm -r project1
```

### mkdir

新しいディレクトリを作成します。  
`mkdir`は「make directory」の略です。

```bash frame=terminal
$ mkdir new-project
$ ls
new-project
```

複数階層のディレクトリを一度に作る場合は、`-p`オプションを使います。

```bash frame=terminal
mkdir -p projects/web/frontend
```

### rmdir

空のディレクトリを削除します。  
`rmdir`は「remove directory」の略です。

```bash frame=terminal
rmdir old-project
```

**ポイント**: ディレクトリの中にファイルがある場合は削除できません。  
中身ごと削除したい場合は、`rm -r`を使います。

### mv

ファイルやディレクトリを移動、または名前を変更します。  
`mv`は「move」の略です。

```bash frame=terminal
# ファイル名の変更
$ mv old-name.txt new-name.txt

# ファイルを別のディレクトリに移動
$ mv sample.txt projects/

# 移動と同時に名前も変更
$ mv sample.txt projects/renamed.txt
```

### cat

ファイルの内容を表示します。  
`cat`は「concatenate」(連結する)の略です。

```bash frame=terminal
$ cat sample.txt
これはサンプルファイルの内容です。
複数行のテキストも表示できます。
```

複数のファイルを指定すると、内容を連結して表示します。

```bash frame=terminal
cat file1.txt file2.txt
```

### grep

テキストファイルの中から特定の文字列を検索して、それを含む行を表示します。

grepは「global regular expression print」の略です。

```plain title=名簿.csv
名前,年齢,職業
田中太郎,30,エンジニア
鈴木花子,25,デザイナー
佐藤次郎,28,マーケター
高橋美咲,27,エンジニア
伊藤健太,32,エンジニア
```

<br />

`名簿.txt`から、「エンジニア」という文字列を含む行を検索する例:

```bash frame=terminal
$ grep "エンジニア" 名簿.csv
田中太郎,30,エンジニア
高橋美咲,27,エンジニア
伊藤健太,32,エンジニア
```

## その他

### echo

文字列を画面に出力します。

```bash frame=terminal
$ echo "Hello, World!"
Hello, World!
```

変数の値を確認したり、ファイルに文字列を書き込んだりする際にもよく使います。

```bash frame=terminal
# ファイルに書き込む
$ echo "新しい内容" > sample.txt

# ファイルに追記する
$ echo "追加の内容" >> sample.txt
```

## ジョークコマンド

### sl

`ls`とタイプミスすると走る蒸気機関車。  
わざと間違えて楽しむジョークコマンドです。

インストールが必要な場合があります。

```bash frame=terminal
$ sl
    (蒸気機関車のアスキーアートが走ります)
```

### lolcat

テキストに虹色のグラデーションをつけて表示します。  
見た目が楽しくなるコマンドです。

```bash frame=terminal
$ echo "Hello, World!" | lolcat
(虹色のHello, World!が表示されます)
```

### figlet

テキストを大きなアスキーアートに変換します。  
バナーやタイトルを作るのに便利です。

```bash frame=terminal
$ figlet "Hello"
 _   _      _ _       
| | | | ___| | | ___  
| |_| |/ _ \ | |/ _ \ 
|  _  |  __/ | | (_) |
|_| |_|\___|_|_|\___/ 
```

### cowsay

牛が吹き出しでメッセージを言っているアスキーアートを表示します。

```bash frame=terminal
$ cowsay "Hello!"
 ________
< Hello! >
 --------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
```

## ファイル操作でよく見る記号

### `/` (スラッシュ)

ディレクトリの区切りを表します。

なお、Windowsではバックスラッシュ (`\`) が使われます。  
また、環境によっては <code>&yen;</code>と表示されることがあります。  
これはバックスラッシュを表す番号に、<code>&yen;</code>の文字が割り当てられていた歴史的な経緯によるものです。

### `.` (ドット)

現在のディレクトリを表します。

```bash frame=terminal
$ pwd
/home/user/projects
$ cd .
$ pwd
/home/user/projects
```

### `..` (ドットドット)

現在のディレクトリの、1つ上のディレクトリを表します。

```bash frame=terminal
$ pwd
/home/user/projects
$ ls /home/user # 1つ上のディレクトリの内容を、明示的に指定して確認
projects projects2 sample.txt
$ ls ..         # 1つ上のディレクトリの内容を確認
projects projects2 sample.txt
```

組み合わせて使うこともできます。

```bash frame=terminal
$ pwd
/home/user/projects/src
$ ls ../..    # 2つ上のディレクトリの内容を確認
projects projects2 sample.txt
$ cd ../../projects2
$ pwd
/home/user/projects2
```

### `~` (チルダ)

ユーザーのホームディレクトリを表します。

```bash frame=terminal
$ pwd
/home/user/projects/path/to/somewhere
$ cat ~/sample.txt
これは、ホームディレクトリにあるsample.txtの内容です。
$ cd ~
$ pwd
/home/user
```

## 用語

### ルートディレクトリ (root directory)

ファイルシステムの最上位に位置するディレクトリのことです。  
これ以上上の階層は存在しません。

`/`で表されます。

なおWindowsでは、各ドライブ (C:やD:) がそれぞれ独立したルートディレクトリを持ちます。

`C:\` や `D:\` のように表されます。

### パス (path)

目的のファイルやディレクトリまでの道筋を示す文字列のことです。

### 絶対パス (absolute path)

[ルートディレクトリ](#ルートディレクトリ-root-directory)から始まるパスのことです。  
自分の現在位置に関係なく、常に同じ場所を指し示します。

```bash frame=terminal
$ cat /home/user/projects/sample.txt
これは、ホームディレクトリにあるsample.txtの内容です。
```

### 相対パス (relative path)

自分の現在位置を基準にしたパスのことです。

[絶対パス](#絶対パス-absolute-path)ではないパス全般を指すとも言えます。

```bash frame=terminal
$ pwd
/home
$ cat user/sample.txt
これは、ホームディレクトリにあるsample.txtの内容です。
$ cat ./user/sample.txt
これは、ホームディレクトリにあるsample.txtの内容です。
```