初心者が最優先で覚えるべきLinuxコマンド①


## 読んでほしい人

- コマンド多すぎて何から覚えれば良いかよくわからない人
- いくつかコマンド覚えたけど、これが必要十分なのかわからない人
- とりあえずコマンドだけでファイル操作できるようになってドヤりたい人

## 自己紹介

- 渋谷区で勤務しているソフトウェアエンジニアです。
- エンジニア歴もうすぐ丸4年。
    - 前職は金融系の仕事をしていました（ITは素人同然）
- 最近は機械学習・データサイエンス系のお仕事多め。
- 社員・インターン生の採用・育成にもコミットしています。



## 覚えるべきコマンド

- 「何の言葉の略なのか」をなるべく記載するようにしています。意味がわかれば覚えるのにも役立つと思います。
- `$`はプロンプトです。僕はbashを使用しているので`$`ですが、zshなら`%`など、適宜読み替えてください。
- 本来的ではない使い方を紹介しているコマンドもあります。`touch`とかがそうなんですが、特に初心者が使う用途に絞って説明しています。

### `pwd`: カレントディレクトリ（現在のディレクトリ）確認

- `print working directory（「作業中のディレクトリを出力する」）`の略。
- カレントディレクトリ（現在、そのプロセスが作業しているディレクトリ）のフルパスを出力する。
    - `current directory（現在のディレクトリ）`の略。

- 例：ホームディレクトリ（この場合は`/Users/kjm_nuco`）がカレントディレクトリの場合

```bash
$ pwd
/home/kjm_nuco
```

### `ls`: カレントディレクトリ内のファイル・ディレクトリ一覧

- `list segments（「分割されたものを一覧する」）`の略。
- カレントディレクトリ内のファイル・フォルダ一覧を表示する。
- 例：カレントディレクトリ内に「hoge」ディレクトリ、「sample.txt」ファイルのみ存在する場合、
```bash
$ ls
hoge sample.txt
```

#### オプション
##### `-a`: 隠しディレクトリ・ファイルを含めてすべて表示。
##### `-l`: メタ情報（ファイルサイズ・更新日時・権限など）も含めて表示。

- この２つのオプションはめちゃくちゃ使うため、エイリアス（別名）を用意している人多数。
    - 例えば、`$ alias ll='ls -al'`と実行してエイリアス登録しておくと、`$ ll`で`$ ls -al`と同じことができる。


### `mkdir`: ディレクトリの作成

- `make directory（「ディレクトリを作成する」）`の略
- `$ mkdir (作成するディレクトリ名)`で新しいディレクトリを作成する。
- 例: 新たに`fuga`ディレクトリを作成する場合、

```bash
# fuga が存在しないことを確認
$ ls
hoge sample.txt

# fuga を作成
$ mkdir fuga

# fuga が作成されたことを確認
$ ls
fuga hoge sample.txt
```

### `cd`: カレントディレクトリを変更する（ディレクトリの移動）

- `change directory（「ディレクトリを変更する」）`の略。
- `$ cd （移動したい先のディレクトリ）` を実行することで、対象のディレクトリに移動することができる。
- 例: 
```bash
# カレントディレクトリを確認
$ pwd
/home/kjm_nuco

# カレントディレクトリ内の確認
$ ls
fuga hoge sample.txt

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

# 移動できたことを確認
$ pwd
/home/kjm_nuco/fuga

# 一つ上のディレクトリに移動
$ cd ..

# 移動できたことを確認
$ pwd
/home/kjm_nuco
```

### `touch`: ファイルの作成(ファイルのタイムスタンプの変更)

- ファイルの最終更新日を変更するコマンド
- <b>存在しないファイル名を指定すると、新たにその名前のファイル（中身は空）を作成する</b>ため、この用途で使われることが多い。
- 例: カレントディレクトリに、`sample2.txt`というファイルを作成する場合
```bash
# カレントディレクトリ内の確認
$ ls
fuga hoge sample.txt

# sample2.txt の作成
$ touch sample2.txt

# sample2.txt が作成されたことを確認
$ ls
fuga hoge sample.txt sample2.txt
```


### `echo`: 任意の文字列を標準出力する。

- 引数に指定した文字列を標準出力する。
- 変数の値などもこれで確認できる。（例えば環境変数など。）
- 例: 

```bash
$ echo Hello!
Hello!

# 環境変数 `PWD`の値を確認する
$ echo $PWD
/Users/kjm_nuco
```

- <b>`>` や `>>` と組み合わせることで、出力内容を新しいファイルに書き込んだり、既存のファイルに追記したりできる。</b>
    - `>`: 新しいファイルを作成し、出力内容を書き込む。既に同名のファイルがある場合は上書きする。
    - `>>`: 同上だが、既に同名のファイルがある場合は、そのファイルの末尾に追記する。

```bash
# 新規作成
$ echo Hello! > hello.txt
# 確認（catコマンドは次項参照）
$ cat hello.txt
hello!

# 追記
$ echo world. >> hello 
# 確認
$ cat hello 
Hello!
world.
```

#### オプション
##### -e: 改行コード\n などのエスケープシーケンスを反映させることができる。

### `cat`: ファイルの中身の確認(複数ファイルの連結)

- `concatenate（つなぐ・連結する）`の略。
- ２つ以上のファイルの中身を連結するコマンド。
- 単一のファイルを指定すると、そのファイルの中身を表示するため、この用途で使われることが多い。
- 例はechoコマンド（前項）参照

### `source`: ファイル内に書かれたコマンドを実行

- `$ source (ファイル名)` で、ファイル内に書かれたコマンドを実行することができる。
- 複数のコマンドを一連の流れでまとめて実行できるので、<b>シェルの設定ファイルの実行などによく利用される。</b>
- 例:
```bash
# ２つのechoコマンド実行を記載した、hellorcファイルを作成。
$ echo -e 'echo Hello!\necho World.' > hellorc

# hellorc ファイルの確認。
$ cat hellorc 
echo Hello!
echo World.

# hellorc 内のコマンドを実行。
$ source hellorc 
Hello!
World.
```

### `mv`: ファイルの移動

- `move（動かす）`の略。
- ファイルを別の場所に移動することができる。
    - `$ mv （移動元のファイルのパス） （移動先のファイルのパス）`
- ファイルは（移動先のファイルのパス）で指定したファイル名として移動するので、<b>同時にファイル名の変更が可能。（むしろ移動せずファイル名だけの変更も可能）</b>
- 例: 
```bash
# カレントディレクトリ内の確認
$ ls
fuga hoge hello sample.txt sample2.txt
# hogeディレクトリに何も無いことを確認
$ ls hoge

# sample.txt を hogeディレクトリに移動
$ mv sample.txt hoge/sample.txt
# カレントディレクトリにsample.txtが無いことを確認
$ ls
fuga hoge hello sample2.txt
# hogeディレクトリにsample.txtがあることを確認
$ ls hoge
sample.txt

# hello を hello.txt にファイル名変更
$ mv hello hello.txt
# 確認
$ ls
fuga hoge hello.txt sample2.txt
```

### `cp`: ファイルのコピー

- `copy（複製する）`の略。
- ファイルを別の場所にコピーすることができる。
    - `$ cp （コピー元のファイルのパス） （コピー先のファイルのパス）`
- 例:
```bash
# カレントディレクトリの確認
$ ls
fuga hoge hello.txt sample2.txt
# hogeディレクトリの確認
$ ls hoge
sample.txt
# hello.txt をhogeディレクトリ内にコピー
$ cp hello.txt hoge/hello.txt

# 確認
ls hoge
hello.txt sample.txt
```

### `rm`: ファイル・ディレクトリの削除

- `remove（取り除く）`の略。
- ファイルを削除する。
    - ゴミ箱に置かれるのではなく、ストレージから削除されるので注意。
- 例:
```bash
# カレントディレクトリの確認
$ ls
fuga hoge hello.txt sample2.txt
# sample2.txt の削除
$ rm sample2.txt
# 確認
$ ls
fuga hoge hello.txt
```

#### オプション
##### `-r`: ディレクトリを削除する。


## おわりに

インターン生や後輩社員の指導でも使えると思い、まとめてみました！

タイトルに「①」とつけましたが、「②」以降の作成については未定です（?）。

体感ですが、フロントエンドがメインの人でも、このくらいはできないと困りそうだな、と感じるくらい最低限のコマンドだと思います。

初心者の方の学習の一助になると幸いです。



弊社では、経験の有無を問わず、社員やインターン生の採用を行っています。
興味のある方は[こちら](https://www.recruit.nuco.co.jp/)をご覧ください。