覚えておきたい最も基本的なLinuxコマンド

# はじめに
こんにちはJUNOです。
私の周りには未経験でエンジニアになったメンバーが勢揃いで、エンジニアの経験を教えられるのが私しかいないため今後の勉強会のためのアウトプットをしようと思います。

今回は題材は「Linuxコマンド」についてということで、
エンジニアになる前に(なってからでも)業務をする上で知っておきたい最低限のLinuxコマンドについて紹介します。


覚えておきたいコマンド一覧はこちら
pwd
ls
mv
cp
mv
cd
vi(vim)
cat
less
mkdir
rm
rmdir

一つでもわからないコマンドがあればターミナルを開いて確認してみてみましょう！

# 覚えておきたいコマンド一覧
## pwd
```
$ pwd
/home/juno 
```
pwdは今のいるディレクトリの場所を表示します。

#### 「ディレクトリ」って何？
WindowsやMacでいう「フォルダ」と同じものだと思ってもらえば大丈夫です。
厳密にディレクトリは、「ハードディスクなどの記録メディア上のファイルの保存場所」を表します。
この単語はエンジニアでないとあまり聞き慣れない言葉ですが、普段から常に使う言葉なので覚えておきましょう！

つまりpwdとは、windowsでいうと今開いているフォルダの場所を表示しているということです。

print working directoryの略

## ls
```
$ ls
fileA.txt  fileB.txt  fileC.txt  folderA
```
今いるディレクトリに存在するファイルを表示します。
lsコマンドは数あるコマンドの中でも最も多く使うコマンドかもしれません。

ちなみに各Linuxコマンドにはオプションというものが存在します。
例えばｌｓに`-l`というオプションを付与すると以下のようになります。

```
$ ls -l
total 4
-rw-rw-r-- 1 juno juno    0 May  2 04:48 fileA.txt
-rw-rw-r-- 1 juno juno    0 May  2 04:48 fileB.txt
-rw-rw-r-- 1 juno juno    0 May  2 04:48 fileC.txt
drwxrwxr-x 2 juno juno 4096 May  2 04:49 folderA
```
各ファイルの詳細が縦になって一覧で表示することができます。

また、オプションは複数付与することもでき、例えば上記のコマンドに`-a`も追加すると以下のようになる。

```
$ ls -al
total 24
drwxr-xr-x 3 juno juno 4096 May  2 04:58 .
drwxr-xr-x 1 root root 4096 May  2 04:27 ..
-rw-r--r-- 1 juno juno  220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 juno juno 3771 Apr  4  2018 .bashrc
-rw-rw-r-- 1 juno juno    0 May  2 04:48 fileA.txt
-rw-rw-r-- 1 juno juno    0 May  2 04:48 fileB.txt
-rw-rw-r-- 1 juno juno    0 May  2 04:48 fileC.txt
drwxrwxr-x 2 juno juno 4096 May  2 04:49 folderA
-rw-r--r-- 1 juno juno  807 Apr  4  2018 .profile
-rw-rw-r-- 1 juno juno    0 May  2 04:58 .secret_file.txt
```

`-a`は隠しファイルも含め全ファイルを表示するオプションです。
ファイルの1文字目が「.」のものが隠しファイルです。

lsコマンドでは`-l` や`-a`はよく使うオプションなので覚えておきましょう！

list segmentsの略

## cd
```
$ cd folderA
$
$ pwd
/home/juno/folderA
```

cdはディレクトリを移動するコマンドです。
WindowsやMacでフォルダをクリックしてフォルダを開くのと同じですね。
`cd {移動したいディレクトリ}`で移動できます。

また、便利なので以下の使い方も覚えておきましょう。

```
$ cd 
"cd"のみ実行した場合はhomeディレクトリへ移動する

$ cd ..
".."をつけると一個前の階層に移動する

$ cd - 
"-"をつけるとcdで移動する前にいたディレクトリへ戻る(１つ前の階層に移動するわけではない)
```

またLinuxにはディレクトリの指定の仕方として「絶対パス」と「相対パス」というものがあります。
#### 「絶対パス」
絶対パスとはルートディレクトリからのフルパスのことです。
ルートディレクトリとは、ディレクトリの中でも最も上部の根に当たる場所のことです。
ルートディレクトリは「/」で表します。
`cd /` でルートディレクトリに移動することができます。

そのルートディレクトリからの該当のファイル(orディレクトリ)までのパスが絶対パスとなります。

例えば、今いる場所の絶対パスはpwdコマンドで表示することができます。

```
/home/juno/folderA
```

これはルートディレクトリ(/)の中のhomeディレクトリの中のjunoディレクトリの中のfolderAディレクトリを表しています。

#### 「相対パス」
絶対パスは「ルートディレクトリ」を起点としたパスの指定でした。
一方で、相対パスは「今いるディレクトリ」を起点としたパスの指定です。

例えば、今いる場所からディレクトリを指定する場合

```
folderA/fileD.txt
or 
./folderA/fileD.txt
```
これは今いるディレクトリのfolderAディレクトリ内のfileD.txtを示しています。
ちなみに「./」は現在のディレクトリを意味します。これは省略可能です。

絶対パスと相対パスでcdコマンドを使ってfolderAに移動する場合は以下のようになります。

```
絶対パス
$ cd /home/juno/folderA
相対パス
$ cd folderA
```

絶対パスと相対パスの使い分けは、基本的に楽な方で大丈夫です。
もし、どの場所でも使えるようにするなら絶対パスを使いますし、今いる場所からそこにあるディレクトリにただ移動するだけなら相対パスが楽です。

change directoryの略


## cat

```
$ cat fileD.txt
Hello fileD!!
ファイルDの中身です。
```

catファイルの中身を表示するコマンドです。
catは「キャット」と呼びます。猫ですね。
`cat {ファイル名}`で使います。

## less

```
$ less fileD.txt

Hello fileD!!
ファイルDの中身です。
あ
い
う
え
お
カ
キ
ク
ケ
コ
さ
し
す
せ
そ
fileD.txt (END)
```

lessコマンドもcat同様ファイルの中身を出力するコマンドです。
`less {ファイル名}`で使います。
違いはcatコマンドは中身をコマンドライン上にバーーーっと表示しますが、
lessコマンドはファイルの頭から表示し、上下カーソルで中身の表示を操作することができます。
ファイルの行数が多い場合はlessコマンドで中身を表示します。

言葉だけでは難しいので実際やってみて下さい(あきらめ)。
lessコマンドを終了するときは`q`を押すと元のコマンドラインに戻ります。

lessのようなコマンドで`more`コマンドもあります。
一度試しに使ってみて下さい。

## mkdir
```
$ mkdir folderB
```
mkdirはディレクトリを作成するコマンドです。
私は「メイクディーアイアール」と言っています。

make directoryの略

## mv
```
$ mv fileC.txt folderA
```

mvはファイルを移動させるコマンドです。

`mv {移動元(ファイル名)} {移動先(ディレクトリ)}`で指定します。

また、ファイル名を変更したい場合にも使います。

```
$ mv fileC.txt fileCCC.txt
```

こうすると、fileC.txtファイルがfileCCC.txtに名前が変わります。
`mv {変更前} {変更後}`とおぼえましょう！

moveの略

## cp

```
$ cp fileC.txt folderA
```

ファイルをコピーするコマンドです。
mｖコマンドと同様で、
`cp {移動元} {移動先}`とおぼえましょう！

copyの略

## vi(vim)
```
$ vi fileA.txt
```

viはファイルを編集するコマンドです。
LINUXではコマンドを使ってファイルを操作します。そのファイル編集で代表的なコマンドがviです。
viはこれだけで1つの記事がかけるくらい奥が深いのでここでは省略します(さぼり)。
viは絶対使うコマンドなのでぜひ勉強をしてみてください。

ちなみにviからぬけだすには
`esc`をおして`:q`で抜け出せます。
1箇所でも編集して保存する場合は`:wq`で保存して抜け出せます。
編集はしたけど保存はしたくない場合は`:q!`で保存せず抜け出せます。


## rm
```
$ rm fileA.txt
```

rmはファイルを削除するコマンドです。
消してしまうともう元には戻せないので注意しましょう！
（このコマンドでこれまで何人のエンジニアが冷や汗をかいてきたのか。むしろはじめは覚えないほうがいいコマンドなのかもしれない...）

removeの略です。

## rmdir
```
$ rmdir folderB
```

rmdirはディレクトリを削除するコマンドです。

このコマンドを使う場合はディレクトリの中身が空である必要があります。
もしも中身がはいったディレクトリを削除する場合は`rm -rf {ディレクトリ名}`を使います。
ちなみに`-r`は再帰的にという意味でディレクトリ内のものも削除するという意味で、`-f`は確認をせず強制的に削除するという意味です。


# 絶対知っておきたい豆知識
#### 矢印キー上下（過去のコマンドを表示する）
ターミナルで上下キーを押すと過去に実行したコマンドを表示することができます。
何度もタイピングをするのは効率が悪いので同じコマンドを使う場合は上下キーを使いましょう。

#### タブキー（コマンドの補完機能）
コマンドを入力するとき、コマンドやパスを途中まで入力した状態でタブキーを押すと入力を自動的に補完してくれます。
例えば、forlderAを指定するとき、`fo`と入力してタブキーを押すとfolderAとなります(他にfoに当てはまるフォルダやディレクトリがなければ)。
すべてタイピングするのも時間の無駄なのでこちらも積極的に使用しましょう！

#### ctrl + a
カーソルを先頭に移動します。
カーソルを先頭に移動させるとき、いちいち左右の矢印キーで戻るのは時間がかかる場合があります。
そんなとき、一発で移動させたいときに使います。

#### ctrl + e
`ctrl + a`とは逆にカーソルを最後に移動する方法です。
これも一緒に覚えましょう！

# おわりに
Linuxコマンドはたくさんありますが、その中でも今回紹介したコマンドを知っていればとりあえずLinux使えます！といっても問題ないかと思います。しかし、普段から使っていないと忘れてしまうものなのでぜひ毎日使っていきましょう！

次は「知って得する！便利なLinuxコマンド」みたいな記事をかければいいなと思います。