新人開発エンジニアに知っておいてほしいLinux知識

# はじめに
3か月ほど社内講師を務めており、
面談から帰ってきた新人エンジニアさんから多かった質問として
**「Linuxを使うって言われたんですけど、どう勉強したらいいですか？」**
**「開発でLinuxって使うんですか？」**
というものがありました。

「そういえば初めは自分もそうだったなぁ」と思い出しました。
確かに研修ではJava、JSP、HTML、JavaScript、SQLなどは触りましたが、
突然「Linux使うので少し勉強してください」と言われてもチンプンカンプンですよね。

ということで！！
かなり初歩的ではありますが！！

筆者の経験・主観で、
**・どんな場面でLinuxコマンドを使うのか**
**・知っておいた方がいいコマンド**
**・知っておいた方がいいショートカット**
を書きなぐっていきます！

# どんな場面で開発エンジニアがLinuxコマンドを使用するの？
**コマンドを叩いて何かを開発する**という事は基本的にはありません。
（もし仮にあったとしても新人に求められることはないはずです）

## 開発したアプリケーションをリモートサーバにデプロイするため
研修ではあくまでローカル環境に仮想サーバを立て、
そこにjarやwarを配置してWEBアプリを動かしていたと思います。
なぜなら**一人でひとつのWEBアプリを作っており、他の人が触る必要がなかったから**です。

しかし現場では**チーム開発**を行います。
開発（コーディング）・UTはローカル環境で行うとしても、
それ以降のIT環境・ST環境・本番環境はそれぞれ独立したリモートサーバにjarやwarを配置する必要があります。
（今はクラウドサーバの現場も増えてきていますが、物理サーバ（Linux）を抱えて運用している現場もまだまだ多いです）

**その各環境に配置するためにTeratermなどを用いて、Linuxコマンドを使用することがあります。**
※筆者の場合はデプロイ用のシェルが用意されていることがほとんどでした。

## 障害調査のログを確認するため
保守現場に入ると**障害対応**という作業が求められます。
障害というのはいわゆる不具合・バグのことで、
**本番環境で障害が発生すると監視チームから連絡が入り、そこからログ取得/調査/対応を行う**ことが求められます。

このケースでも**Teratermなどで本番環境へ接続し、ログ配置場所まで移動やログを確認するためにLinuxコマンドを使用します。**

# よく使うコマンドたち
ではここからよく使うであろうコマンドを書いていきます。
**「参画前に知っておけば大丈夫なコマンドはこれくらいかな？」**くらいの感覚で列挙しています。

> 筆者的にまず初めは
> 「ディレクトリを移動して、ディレクトリの中身を確認して、対象ファイルの中身を確認する」
> ができるようになれればいいかなとは思います。
> その場合に使用するコマンドは`cd`、`ls`、`more`の3つですね。

## cd
**`cd`はディレクトリを移動するために使用するコマンド**です。
Windowsでエクスプローラーを開いて移動したいフォルダをダブルクリックするとそのフォルダが開けますよね。それとほぼ同義です。
使い方は以下の通りです。

``` bash
cd 移動先パス
```

### 絶対パスと相対パス
ここで絶対パスと相対パスについて触れておこうと思います。
研修などでも少なからず聞いたことのあるワードだと思いますが、`cd`コマンドを使用するためには移動先パスを入力する必要があります。
その**パスの表現方法として二種類ある**と思っていただければ大丈夫です。

#### 絶対パス
**ルートディレクトリ（最上位のディレクトリ）からの目的地までの道筋を示したものを絶対パスと呼びます。**
Linuxではルートディレクトリを`/`で表現するので、**`/`から始まるパスは絶対パスとなります。**

``` bash
cd /aaa/bbb
```

#### 相対パス
**カレントディレクトリ（今自分がいるディレクトリ）から目的地までの道筋を示したものを相対パスと呼びます。**
Linuxではカレントディレクトリの一つ上のディレクトリは`..`で表現できます。

``` bash
cd aaa/bbb
# 自分が /ccc にいるとしたら、 cd /ccc/aaa/bbb と同義です
```

絶対パスの例と違うところは移動先パスの先頭に`/`があるかないかだけですが、
上記は**自分がいるディレクトリからの相対パス**となります。
`/`一文字で意味が異なるので気を付けましょう！

## ls
**`ls`は自分がいるディレクトリの中身を一覧で表示したり、対象ファイルの情報を表示するコマンド**です。
Windowsでエクスプローラーを開いて移動したいフォルダをダブルクリックするとそのフォルダの中身が表示されますよね。それと一緒です。
使い方はこんな感じ。

``` bash
ls -ltr
```

これを実行するとディレクトリの中身がばーっと表示されます。それだけです。
`-ltr`の部分は**オプション**と呼ばれる機能です。

### オプションってなんだ？
Linuxでは命令を行うためにコマンドを実行します。
実はその**コマンドには不随機能があり、それらを呼び出すために使用するものをオプション**と呼びます。

書き方は`コマンド -オプション`となります。（コマンドの後の半角スペースが重要です）

```bash
ls -l
ls -t
ls -r
```
3つの`ls`コマンドが並んでいますが、それぞれ実行結果が微妙に異なります。
それがオプション（不随機能）の効力です。

今は「オプションていう便利機能があるんだな」ぐらいでよいと思います。
**慣れてきたらオプションは各コマンドごとに用意されているので、ぜひ調べてみてください！**

## more
**`more`はテキストファイルを1画面ずつ表示させるコマンド**です。
「1画面ずつ」というのは、長いファイルの場合は1画面で表示しきれない場合があります。
そんなときのために1画面分で一旦表示を停止してくれるのが`more`です。
次のページを表示したい場合は`space`を押してください。
Windowsで.txtファイルとかをダブルクリックするとメモ帳やサクラエディタで中身が表示されますよね。それと同じイメージです。
書き方は以下の通り。

``` bash
more ファイル名
```

ファイル名とありますが、カレントディレクトリ直下のファイルしか見れないわけではありません。
絶対パス、相対パスで指定可能です。

``` bash
cd /aaa        # /aaa へ移動
more error.log # カレントディレクトリ直下のerror.logを表示
```

``` bash
more /aaa/error.log # /aaa直下のerror.logを表示
```

2つ例を挙げましたが、どちらも実行結果は一緒です。
これでファイル閲覧もできるようになりましたね！

## ちょっとしたまとめ
…ここまで`cd`、`ls`、`more`を紹介してきました。
**実はこの3つが使えるようになれば「障害調査のログを確認する」ことは可能です。**

ここで紹介したコマンドはごくごく一部です。
**他にもたくさんコマンドが存在するので、慣れてきたら色々使ってみましょう！！**

- grep（文字列検索）
- cat（ファイル表示、連結表示）
- less（ファイル表示）
- tail（ファイル表示）
- mv（移動）
- cp（コピー）
- touch（ファイル作成）
- mkdir（ディレクトリ作成）
- chmod（ファイル、ディレクトリの権限編集）
- chown（オーナ変更）
- su（ユーザ切り替え）
- vi（viエディタ起動）

# 知っておくといいショートカット
ここからは知っておくと便利なショートカットを載せていきます。
間違いなく作業効率は上がるのでぜひ使っていきましょう。

## ↑↓（コマンド履歴）
`↑`で1つ前のコマンドを表示することができ、`↓`で1つ後のコマンドを表示させることができます。
実行したいコマンドが表示できたら`Enter`で実行です。シンプルかつ簡単ですね！

**「2回前に打ったコマンドをまた使いたい！！」**
あるあるです。そんな時は**`↑`を2回押してみてください。**

## Alt + C（コピー）、Alt + V（ペースト）
そのまんま**コピペのショートカット**です。
大体`Ctrl`+`C`or`V`のイメージだと思うのですが、Linuxでは`Alt`になるのでご注意ください。

因みにTeratermでは右クリックでクリップボードのペーストになります。

## Ctrl + C（処理の強制終了）
**コンソールで実行している処理をとっさに終了させたい時は`Ctrl`+`C`**を実行してみてください。

**「何気なく`more`コマンドを実行したら数万行あった…！とっとと終わらせたい…！」**
こんな時は`Ctrl`+`C`を使用しましょう。

## Ctrl + A（行先頭に移動）、Ctrl + E（行最後に移動）
サクラエディタでいうところの`Home`や`End`です。**行頭や行の最後にカーソルを移動**できます。
LinuxはCUIなのでキーボードを触ったりマウスを触ったりするだけで作業効率が落ちたりします。

**カーソル移動もできるだけキーボードで済ませましょう！！**

# 最後に
しがない開発エンジニアによるLinux記事でした。
最後までお付き合いいただきありがとうございます！

どのくらいの量にするか迷いましたが、
「これも載せた方がいい！」
「ここ間違えてる！」
等の指摘があったらコメントをお願いいたします！

ではまたどこかで！！