【初心者インフラエンジニア向け】知っておきたいLinuxコマンド


## はじめに
こんにちは、日本リック エンジニア採用チームです。

今回は日本リックに新卒で入社して8年目のインフラエンジニアのMさんに記事をお願いしました。

初心者インフラエンジニア向けの「知っておきたいLinuxコマンド」を教えてもらいましたのでぜひ参考にしてください。


## 【プロフィール】30代前半/男子
新卒で営業として入社。
現在はお客様の現場でお仕事をしている三十路社員。

## 【今のお仕事】
とあるシステムの移行、アプリケーションの構築～納品まで　って感じです。

## 【本題】
今回は知っておきたいLinuxコマンドというテーマで書こうと思って、考えてみましたが、正直なところ、仕事内容やその時の用途で使うコマンドは変わるので、「これ！」と、いうものがない？！かもと思っています。(笑)

「そうはいってもどうやって身につけたの？」と思われるかもしれませんが、私の場合は、気が付いたら覚えていた、という感じです。
基本的にめんどくさがりなので「楽をしたい」の意識が7割以上あります。
そして、そのためのツールをよく作成しています。

作成の過程で「こんなことができるコマンドないかな？」、「自分が望む結果にするにはどうすればいいのか」など、思った時に調べて実践してを繰り返してるうちに自然と身に付きましたね。

「よし！覚えるぞ！」とか「これから覚えなきゃ！」なんて意識は100%の内20%ぐらいでいいかな、という感覚です。
調べること、実施するという経験を積み重ねることが大事かと思います。
まぁ、そんなことを言うと元も子もないですが。(笑)

じゃあ今回は何なのよ！ってことですが、私が業務上でよく使用するコマンドに焦点を当てて書いていきたいと思います。
メモみたいな感じですが、これからLinuxを触ってみようという方は、「このコマンドはこんな用途で使うんだー」って感じで、既に触ってるという方は、「自分の知らないことあるかなー」って感じで読んでもらえたらうれしいです。


## 【初心者インフラエンジニア向け】知っておきたいLinuxコマンド
今回紹介するLinuxコマンドの一覧がこちらです。

- cd
- ls
- mkdir
- rm
- cp
- mv
- vi
- chmod
- grep
- find
- diff

順番に紹介します。

## 【cd】
### cd [path]

```
cd [path]
```

カレントディレクトリの移動

カレントディレクトリを移動します。
それ以上でもそれ以下でもありません。


## 【ls】
### ls [ファイル/ディレクトリ名]

```
ls [ファイル/ディレクトリ名]
```

ファイルとディレクトリを表示(ファイルやフォルダを指定すると結果がそれのみとなります)

◇以下オプション◇

#### ls -a [ファイル/ディレクトリ名]

```
ls -a [ファイル/ディレクトリ名]
```

隠しファイル、隠しフォルダも含めて表示

#### ls -l [ファイル/ディレクトリ名]

```
ls -l [ファイル/ディレクトリ名]
```

詳細情報を表示(パーミッション、タイムスタンプ、容量(byte)、ファイル名など)

#### ls -R [ファイル/ディレクトリ名]

```
ls -R [ファイル/ディレクトリ名]
```

サブディレクトも含めて再帰的に表示

ファイルもしくはフォルダがあるかなーってざっくりと探すときは「ls」単体で使ってます。
オプションについては基本的に「-a」、「-l」、「-R」しか使ってません。(大体わかるので・・・)
あとはオプションを組み合わせて使っていますね。`「ls -la」`とか。
オプションは他にもあり、ある条件でソートした状態で結果を表示させるオプションや表示結果を一部変換して表示させるオプションなどがあります。


## 【mkdir】
### mkdir [ディレクトリ名]

```
mkdir [ディレクトリ名]
```

ディレクトリを作成します。

◇以下オプション◇

#### mkdir -p [ディレクトリ名]/[ディレクトリ名]/・・・

```
mkdir -p [ディレクトリ名]/[ディレクトリ名]/・・・
```

基本的にはカレントディレクトリにしかフォルダを作成できませんが、「-p」で親ディレクトリもついでに作成できちゃいます。
あとはパーミッション(アクセス権みたいなもの)も設定できますが、最初の内は気にしなくていいかと思います。


## 【rm】
### rm [ファイル名]

```
rm [ファイル名]
```

ファイルを削除します。

◇以下オプション◇

#### rm -f [ファイル名]

```
rm -f [ファイル名]
```

削除する際の確認を問われなくなります。

#### rm -r [ディレクトリ名]

```
rm -r [ディレクトリ名]
```

ディレクトリを削除します。

削除確認を問われるのが嫌なので、「-f」を付けてます。
対象の全ファイルすべてに対して問われるので、うざったいです。
ですが、商用作業の時は「-i」若しくは、オプションを付けずに実行して必ず確認をしています。
なんでもかんでも、確認せずに消すのはダメですよー。


## 【cp】
### cp [コピー元のファイル名] [コピー先のファイル名]

```
cp [コピー元のファイル名] [コピー先のファイル名]
```

ファイルをコピーします。

◇以下オプション◇

#### cp -p [コピー元のファイル名] [コピー先のファイル名]

```
cp -p [コピー元のファイル名] [コピー先のファイル名]
```

コピー元ファイルのオーナー、グループ、パーミッション、タイムスタンプを保持します。

#### cp -r [コピー元のディレクトリ名] [コピー先のディレクトリ名]

```
cp -r [コピー元のディレクトリ名] [コピー先のディレクトリ名]
```

ディレクトリを再帰的にコピーします。

編集すべきでないファイル等のタイムスタンプが変わってしまうので基本的に必ず「-p」は使用しています。
あとはコピー先に同名ファイルがある場合には上書き確認が問われます。
確認を問われなくするオプションもありますが、つけないほうがいいかと思います。
誤ってコピーしなくていいファイルを知らないうちに上書きしてしまった、なんてこともありますからね。


## 【mv】
### mv [移動するファイル/ディレクトリ名] [移動先path] 

```
mv [移動するファイル/ディレクトリ名] [移動先path] 
```

ファイルまたはフォルダの移動

◇以下オプション◇

#### mv -b [ファイル/ディレクトリ名]

```
mv -b [ファイル/ディレクトリ名]
```

上書きされる場合に、そのファイルのバックアップを作成します。
その際にできるファイル名はそのファイル名の後ろに「～」が付与されます。

あまり多用するイメージはありません。
ファイル、ディレクトリをバックアップとして残したい時ぐらいにしか使用していません。

## 【vi】
### vi [ファイル名] 

```
vi [ファイル名] 
```

ファイルを開くまたは新規作成します。

「vi」は編集可能状態でファイルを開きます。
反対に読み取り専用で開くというが「view」になります。
なんでもかんでも「vi」で開くというのはやめたほうが良いかと思います。
知らないうちに編集してしまい、何も気にせず保存してしまった、なんてことは避けましょう。

編集する実際には様々なコマンドがあり、ほんの一部ですが、文字の挿入や上書き、任意の行数に移動する、置換などがあります。


## 【chmod】
### chmod モード [ファイル/ディレクトリ名]

```
chmod モード [ファイル/ディレクトリ名]
```

ファイルやディレクトリに対してパーミッションの設定をします。

◇以下オプション◇

#### chmod -R モード [ディレクトリ名]

```
chmod -R モード [ディレクトリ名]
```

再帰的にやってくれます。

ファイルやディレクトリに対してアクセス権を決めます。
アクセス権を決める対象は３つで、「所有者」、「所有グループ」、「他人」です。
モードで箇所でそれを決定し、コマンドの書き方は`chmod 777 [ファイル/ディレクトリ名]`となります。
左から「所有者」、「所有グループ」、「他人」の設定です。

では7となんだ？ってことですが、これは設定の足し算の結果です。
「ls -l」でファイルを見るとわかるのですが、「-rw-r--r--」と感じに左側に表示されます。
これが足し算の内訳です。
一番左はとりあえず無視し、左から2文字目から3文字で1セットです。

設定できる内容は以下となります。

- r　：読み出し可能
- w　：書き込み可能
- x　：実行可能
※設定されていない場合は「-」が設定されます。

そして、それぞれに数値があります。
「r」は4、「w」は2、「x」は1、「-」は0です。

では、先ほどの「-rw-r--r--」といった権限を付与するためにはどうコマンドを実行するのかというと`chmod 666 [ファイル/ディレクトリ名]`となります。
私は755(所有者は読書きと実行が可能、所有グループと他人は読みと実行)で実行することがほとんどです。

## 【grep】
### grep [文字列] [ファイル名]

```
grep [文字列] [ファイル名]
```

文字列を検索します。

◇以下オプション◇

#### grep -n [文字列] [ファイル名]

```
grep -n [文字列] [ファイル名]
```

検索結果に行数を表示します。

#### grep -v [文字列] [ファイル名]

```
grep -v [文字列] [ファイル名]
```

検索結果から文字列を除外します。

ファイル内に該当する文字列があった場合にその1行を抽出してくれます。
あとは「|(パイプ)」でコマンドを組み合わせ実行する時によく使用します。

例として、ディレクトリ内に「test01.txt ~ test10.txt」があるとします。
ここで「ls」コマンドを実施した際に、「test05.txt」のみを表示させたい場合は`ls -l | grep 05`となります。
逆に「test05.txt」を表示したくない場合は`ls -l | grep -v 05`となります。
「|(パイプ)」で繋げることで自分の見やすい結果に絞ることができるので意外と使っています。


## 【find】
### find [ファイル名]

```
find [ファイル名]
```

ファイルを検索します。

「find」ではオプションではなく判別式を使用します。
よく使用しているは「-name」です。

`find [検索場所] -name [ファイル名]`

上記を実行すると指定した検索場所配下全てのディレクトリに対して指定したファイル名があるかないかを表示してくれます。

ワイルドカードにも適応しているので、「.txt」という拡張子で調べたい場合は

`find [検索場所] -name *.txt`

となります。
多くのファイルやディレクトリで管理し始めると、「ls」で見るのも面倒になってくるので結構使ってます。

## 【diff】
### diff [ファイル名1] [ファイル名2]

```
diff [ファイル名1] [ファイル名2]
```

ファイル名1とファイル名2の差分を表示してくれます。

◇以下オプション◇
#### diff -q [ファイル名1] [ファイル名2]

```
diff -q [ファイル名1] [ファイル名2]
```

差分結果の詳細を表示しません。
「ファイル名1とファイル名2は違います」といった表示になります。

#### diff -y [ファイル名1] [ファイル名2]

```
diff -y [ファイル名1] [ファイル名2]
```

差分結果を左右に表示します。
左がファイル名1、右がファイル名2となり、差異がある箇所は中央に「|(パイプ)」が表示されます。

#### diff -r [ディレクトリ名1] [ディレクトリ名2]

```
diff -r [ディレクトリ名1] [ディレクトリ名2]
```

ディレクトリ毎比較します。

ファイルの編集をしたあとで、想定通りの差分だけなのか余計な差分がないのかなどの確認のために使用しています。
業務上扱うファイル数が多いので、最初にオプションに「-rq」を使用しざっくりとどのファイルに差分があるか確認し、その後でどの箇所に差分があるのか確認をしています。

---

以上がよく使うかなと思ったコマンドです。

上記コマンドについて、「使用できるオプション」も記載しましたが内容は一部です。
もっと知りたい方は世界のgoogleさんに聞いてみてください。(笑)

それではまたいずれ。