【初心者向け】Linuxコマンドはここから始めよう。

# はじめに

こんにちは。
私は、普段はLinux系のサーバ上にあるOracle Databaseの運用保守を担当しています。
私のチームはDBAなので、業務の中でデータベース関連は知識は増えていきますが、
OS側も障害やメンテナンスの際に触る必要があるので
最低限のLinuxコマンドも身につけた方がよいです。
DBAに限らずアプリケーションエンジニアでもLinuxコマンドは最低限必要だと思っています。

なので、今回はこれからLinuxコマンドを学習する方向けに、
学習方法ご紹介させていただきます。

# 対象者
- Linuxコマンドをこれから学習する初心者向けです。
- IT初心者の新卒の方は是非ご一読いただければと思います。

# 目次
1. Linux環境準備（ブラウザ上でコマンドを試すことができます）
    - JSLinux
2. Linux学習方法
    2-1. 学習サイトping-t
    2-2.  LinuC/LPIC資格勉強
    2-3. その他
3. 仕事で最低限必要なLinuxコマンド
3-1. ディレクトリ操作・移動・追加・削除
    3-2. ファイルの中身表示
    3-3 . ファイル編集
    3-4. ファイル検索
    4-5. ショートカット
    4-6. その他覚えておくと便利なコマンド
    
4. 所感
5. 参考サイト

# 1. Linux環境準備（ブラウザ上でコマンドを試すことができます）
環境の構築や準備って結構大変ですよね。
最近ではAWSなどのクラウドが気軽に触れるようになりましたので、
クラウド上に学習用のLinuxサーバを立てて簡単に実機操作もできるようになりました。
ですが、クラウドの知識が前提条件となりますので、ここでは環境構築自体が不要となるWebブラウザ上でのLinux学習方法をご紹介します。

## JSLinux
1. まずは[こちら](https://bellard.org/jslinux/)のページを開きます
2. 「Click here」をクリックします
![スクリーンショット 2022-06-13 22.12.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/f1b59777-b197-4a45-92c1-0e49d81370c5.png)

1. 数分するとLinuxが起動し、コマンドが実行できる状態になります。
※注意点：PCのクリップボードからのペーストは、ターミナルのカーソルの部分で右クリックして貼り付けを選択してください。
![スクリーンショット 2022-06-13 22.39.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/18e5e170-e3fb-1b58-bcee-25ff32560f0b.png)

1. 終了する時はブラウザのタブを閉じるかブラウザを終了することでJSLinuxも終了できます。

これでLinuxサーバを構築することなくLinuxコマンドを学ぶ環境が整いました。

# 2. Linux学習方法
Linuxコマンドを本格的に学びたいのなら、学習方法はいくつかあります。
学習サイトで勉強したり資格を受験したり方法は様々です。
ここでは私がおすすめする方法をご紹介したいと思います。

### 2-1. 学習サイト[ping-t](https://ping-t.com/)
まずは資格取得向けの学習サイトからご紹介します。

資格の内容については後述しますが、[ping-t](https://ping-t.com/)はLinuxの資格であるLinuC/LPICの問題集サイトです。
アカウント登録は必要となるのですが、LinuC/LPICの一部の問題集を無料で試すことができ、
Lv1の101をなんと**無料**で学ぶことができます。
102については残念ながら有料(1ヶ月2,400円)ですが、問題数が豊富で解説もしっかりと載っているため、LinuC/LPICの資格を受験しなくてもLinuxコマンドを学ぶには優秀なサイトだと思います。

### 2-2.  LinuC/LPIC資格勉強
LinuCとLPICはLinuxプロフェッショナル認定プログラムの試験です。
- LPICの[公式サイト](https://www.lpi.org/ja/our-certifications/lpic-1-overview)はこちらから
- LinuCの[公式サイト](https://linuc.org/)はこちらから

LinuC/LPICは、両試験ともレベル1、レベル2、レベル3があり、レベル1が初心者向けです。
レベル1の試験時間は各90分で多肢選択問題と穴埋め問題で合計60問あります。
[ping-t](https://ping-t.com/)などでしっかりと資格受験対策をすれば、必ず合格することができます。
LPICは世界中で実施されているLinux技術者認定試験なのに対して、LinuCは日本の市場に最適化した日本独自の試験です。
LinuC/LPICは両方とも101試験と102試験の２つの試験に合格して初めて1つの資格が取得できます。
1試験目に合格後、もう一方の試験は5年以内に合格する必要があります。

**5年を過ぎると、先に受けたテストの合格は無効**になりますので受験する際はご注意ください。

### 2-3.  その他

資格勉強も良い学習方法だと思っていますが、実際にWebサーバなどを構築してみるのもとても良い勉強方法になります。

Linux上にWebサーバーを構築してMySQLやPostgreSQLなどのDBも構築すれば、簡単なWebサイトになりLinuxコマンドも身につけることができます。
私も未経験でプロトソリューションに入社して初めて配属されたチームでは、教育課題の一環としてVirtualBoxにCentOSのインストールからWebサーバ、DBの構築を行いました。

pwdやlsも知らなかったど新人の私には、辛い作業でしたが少しつづLinuxコマンドを覚えていくことに楽しさを感じながら環境構築を行っていました。今では簡単なLinuxコマンドは使えるようになっているので良い経験になったなと当時課題を出してくれた先輩に感謝しています。

ですので、Webサーバなどの環境構築はオススメの勉強法です！

# 3. 仕事で最低限必要なLinuxコマンド
それでは、お待たせしました。
ここからは最低限必要なLinuxコマンドをご紹介いたします。
本記事ではLinuxコマンドとオプションや説明を記載しています。
オプションは全てではなく、よく使用する一部のみ載せていますので、
他のオプションについては別サイトなどで調べてください。

Linuxサーバーでは、ほとんどGUIが用意されておらず、CUIのターミナル上ですべてを操作することになります。そのため、作業するディレクトリ（フォルダ）を移動するだけでもコマンドを使います。

早速ディレクトリ操作から見てみましょう。

### 3-1.  ディレクトリ操作・移動・追加・削除

ディレクトリ操作について

| Linuxコマンド | 説明 | オプション |
| --- | --- | --- |
| pwd | 現在のディレクトリ表示 |-L：論理的なディレクトリ名を表示　<br>-P：物理的なディレクトリ名を表示 |
| ls | ディレクトリ情報の一覧表示 |-l：ファイル詳細の表示<br>-a：すべて表示<br>-h：単位を読みやすい形式で表示<br>-r：逆順で表示　<br>-t：更新時間順にソート |

**実行例**
pwdで現在のディレクトリを表示して、
ls に-l のオプションを付けて、ディレクトリ一覧を詳細に表示しています。
ls -lrtはディレクトリ一覧の詳細表示に加えて、更新順番に逆順にソートしています。私はこれをよく使用しています。
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/6e6f8eaf-52b9-05fb-1810-03fd8c4970d4.png)

以下は、容量のトップ10ファイルを確認しています。
このディレクトリ内で容量が大きいファイルを探す際に便利です。
※\|（パイプ）については本記事の最後あたりでご紹介します。
```ls -lh | head -10```


ディレクトリ移動・追加・削除
| Linuxコマンド | 説明 | オプション |
| --- | --- | --- |
| cd | ディレクトリ移動 |-L：論理的なディレクトリへ移動<br>-P：移動先がシンボリックリンクの場合、物理的なディレクトリへ移動 |
| mkdir | ディレクトリ作成 |-m：作成するディレクトリのパーミッションを設定<br>-p：必要に応じて親ディレクトリも作成<br>-v：経過表示 |
| rm | ディレクトリ削除 | -f：存在しないファイルを無視<br>-i： 削除前に確認<br>-v：経過を表示<br>-d：unlinkでディレクトリを削除<br>-r：ディレクトリを再帰的に削除 |
| mv | ・ファイル(ディレクトリ)名変更<br>・ファイル移動 | -b：上書き・削除されるファイルのバックアップ<br>-f：上書き時、確認メッセージ非表示<br>-i：上書き時、確認メッセージ表示<br>-n：移動先に同名ファイル・ディレクトリが存在時、移動不可<br>-v：詳細を表示 |
| cp | ファイルコピー | -i：上書前に確認<br>-v：実行内容の表示<br>-n：存在するファイルの上書き制御<br>-b：上書きファイルのバックアップ生成<br>-S 接尾辞：バックアップファイル生成時、ファイル名末尾に付ける文字 |
| scp | sshプロトコルを使用して別サーバへファイルを転送する | -r：ディレクトリ内を再帰的にコピー<br>-P ポート番号：ポート番号を指定する<br>-l 帯域（Kbit/s）：転送する帯域を制御する |
| touch | 新規ファイル作成 |  |

**実行例**
mkdir -p でディレクトリ「test」とディレクトリ「test123」を作成して、
ls -l　でディレクトリ「test123」が作成されたことが確認できました。
![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/9c2e9376-33d0-10b3-9593-86237bfac619.png)

### 3-2. ファイルの中身表示
| Linuxコマンド | 説明 | オプション |
| --- | --- | --- |
| cat | テキストファイルの内容を表示 | -n：行番号を追加<br>-b：行番号を追加するが、空白行には追加無<br>-s：連続した空行を1行に変更<br>-v：TAB、改行、改ページ以外の非表示文字を表示<br>-t：非表示文字を表示<br>-E：行の最後に"$"を表示<br>-A：全ての非表示文字を表示<br>-e：TABを除く全ての非表示文字を表示 |
| view | ファイルへの書き込み権限がなく表示専用のコマンド |  |
| more | テキストファイルを1画面ずつ表示する | +数値：数値で指定した行から表示する<br>+/文字列：指定した文字列を検索して、見つけた行の2行上から表示する<br>-s：連続した空行を1行にする-<br>-l：改ページを無視する<br>-u：下線の処理を行わない<br>-f：画面での行数ではなく、データの行数を表示する |
| tail | ファイルの末尾部分を表示 | -n 行数:末尾から指定された行数分だけ表示<br>-c バイト数：末尾から指定されたバイト数だけ表示<br>-f :ファイルの末尾に追加された行を表示し続ける |

**実行例**
touchでファイル「test.txt」を作成して、
la -lで作成されたことを確認します。新規ファイル作成は、viでも可能です。
![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/00dbd31f-7893-7f35-3120-c1e141ff4a5c.png)

catコマンドでファイル「test.txt」を開きます。
今回は「test.txt」の中身は事前に用意しました。ファイルの中身の編集手順については後述します。
![Untitled (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/5bdc24e2-e7ea-a6b5-555f-a6cc87a68435.png)

ファイルの中身を確認するコマンドは他にもlessやmoreやviewなどがあります。

catがファイル全体を表示するのに対して、moreは1画面ずつ表示してくれてます。行数の多いフィアルを開く場合は、moreやviewなどがよいと思います。

続いてtailの例です。
tail -n3 test.txt でファイル「test.txt」の末尾3業を表示しています。
tailはログ確認ができる便利なコマンドで、私はメンテナンスなどのログ確認の際に
```tail -200f ファイル名```でリアルタイムに更新されるログの末尾200行の確認をよく使っています。
![Untitled (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/17a8ddc2-cd65-c4d6-fea1-0dea0c399dcd.png)

### 3-3 . ファイル編集
viエディタはLinuxやUNIXで標準的に使われているエディタです。
Linuxでは、viの機能を拡張したVIM(VI Improved)をviエディタとして採用しています。
viエディタはコマンドモードとインサートモードという2つの動作モードを切り替えながら使います。

viのインサートモード

| Linuxコマンド | 説明 |
| --- | --- |
| i | カーソルの前にテキストを入力 |
| a | カーソルの後にテキストを入力 |
| I | 行頭の最初の文字にカーソルを移動し、その直前にテキストを入力 |
| A | 行末にカーソルを移動し、その直後にテキストを入力 |
| o | カレント行の下に空白行を挿入し、その行でテキストを入力 |
| O | カレント行の上に空白行を挿入し、その行でテキストを入力 |

viの終了、ファイル保存

| Linuxコマンド | 説明 |
| --- | --- |
| :q | ファイルへ保存せず終了する |
| :q! | 編集中の内容を保存せず終了する |
| :wq(ZZ) | 編集中の内容を保存して終了する |
| :w | 編集中の内容でファイルを上書き保存する |
| :e! | 最後に保存した内容に復帰する |

**実行例**
vi test.txtコマンドでファイル「test.txt」を開きます。
![Untitled (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/7e857129-8d4d-c277-11b6-dc08a7683c7b.png)

viの編集、保存、終了する際は以下ように実行します。
画像だと分かりにくいですが、手順を以下に記載します。
1. 「i」と入力してインサートモードに変更
2. 好きなように編集（以下はaaa、bbb、ccc、ddd、eeeとアルファベットを入力しました）
    3. ESCキーを押してインサートモードを終了
4. 「:w」と入力して保存
5. 「:q」と入力してviを終了
![Untitled (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/87bf3a96-b04f-3345-38af-612dfc469b2c.png)

入力モードでEscキーを押すとコマンドモードに切り替わります。
コマンドモードでは、カーソルキーを使わずにカーソルの移動を行うことができます。

viのカーソル操作
| Linuxコマンド | 説明 |
| --- | --- |
| h | 1文字左へ移動する。←キーと同じ |
| l | 1文字右へ移動する。→キーと同じ |
| k | 1文字上へ移動する。↑キーと同じ |
| j | 1文字下へ移動する。↓キーと同じ |
| O | 行の先頭へ移動 |
| $ | 行の末尾へ移動 |
| H | 画面の一番上の行頭へ移動 |
| L | 画面の一番下の行頭へ移動 |
| gg | ファイルの先頭行へ移動 |
| G | ファイルの最終行へ移動 |
| :n | ファイルのn行目に移動 |

viの編集コマンド
| Linuxコマンド | 説明 |
| --- | --- |
| x | カーソル位置の文字を削除 |
| X | カーソル位置の手前の文字を削除 |
| dd | カレント行を削除 |
| dw | カーソル位置から次の単語まで削除 |
| yy | カレント行をバッファにコピー |
| p | カレント行の下にバッファの内容を貼り付け |
| P | カレント行の上にバッファの内容を貼り付け |

viの検索コマンド
| Linuxコマンド | 説明 |
| --- | --- |
| /パターン | カーソル位置から後方に向かって指定したパターンを検索 |
| ?パターン | カーソル位置から前方に向かって指定したパターンを検索 |
| n | 次を検索 |
| N | 逆方向に次を検索 |

**実行例**
以下は、viでtest.txtを開いて、/eeeと入力してEnterしました。
eeeが検索され、カーソルが検索された行に飛んでるのが分かります。
もし、他にも他にもeeeがないか検索したい場合は、nを入力すれば再度検索できます。
下から検索したい場合は、大文字のNで検索できます。
私は、ログからエラー等の特定の文字列を検索する場合によく使用しています。
![Untitled (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/32b705c5-4f33-6d8b-6d76-aab38741139a.png)

### 3-4. ファイル検索
| Linuxコマンド | 説明 | オプション |
| --- | --- | --- |
| grep | 正規表現でファイルやディレクトリ検索が可能 | -c：パターンがマッチした業の行数だけを表示<br>-f：検索パターンをファイルから読み込む<br>-i：大文字小文字を区別せず検索<br>-n：検索結果とあわせて行番号も表示<br>-v：パターンがマッチしない行を表示 |
| find | 指定したディレクトリ以下から検索条件にマッチするファイルやディレクトリを検索 | -name ファイル名：ファイル名で検索<br>-atime 日時：最終アクセス時刻で検索<br>-mtime 日時：最終更新時刻で検索<br>-perm アクセス権:アクセス権で検索<br>-size サイズ：ファイルサイズで検索<br>-exec コマンド｛｝\;  マッチしたファイルに対してコマンドを実行 |
| locate | あらかじめ作成されたデータベースに基づいてファイル検索する | -i：大文字小文字を区別しない<br>-b：上位ディレクトリは検索せず、ファイルやディレクトリ自体を探す |

**実行例**
grepはファイル中の文字列を検索するコマンドです。
grep [検索文字] [ファイル名]
で、ファイル内に検索文字が含まれているか確認することができます。
以下は、ファイル「test.txt」内でdddを検索している例です。
grepは正規表現が使えるので便利です。ここでは正規表現は割愛します。
![Untitled (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/4a89cf40-8191-456f-b52b-23d8c121a3ec.png)

grepに-c オプションを付けると検索パターンにマッチした行数を表示できます。
これは例えば、ログにエラーが何行出ているか確認することができます。
![Untitled (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/9b2a416e-0f0f-2244-9026-27cb88d0378d.png)

### 3-5. ショートカット
その他、覚えておくと便利なショートカットをご紹介します。

どれもとても便利なのですが、tabキーはフォルダやファイル名をすべて覚えていなくても始めの数文字だけ入力すれば、あとはtabキーで予測変換できるのでよく利用しています。

| ショートカットキー | 説明 |
| --- | --- |
| ↑ ↓ | コマンド履歴を順に表示 |
| tabキー | フォルダやファイル名の予測変換 |
| Ctr(control) + a | カーソルを先頭に移動 |
| Ctr + e | カーソルを終端に移動 |
| Ctr + b | カーソルを一文字戻す |
| Ctr + f | カーソルを一文字進める |
| Ctr + d | カーソル位置の文字を消す |
| Ctr + h | カーソル位置の左側の文字を消す |
| Ctr + w | カーソル位置の左側の単語を消す |
| Ctr + r | コマンド履歴の中で検索する |
| Ctr + A | 行の先頭へカーソルを移動 |
| Ctr + E | 行の最後へカーソルを移動 |

**実行例**
以下は、画像だと分かりにくいのですが、
例えば、以下コマンドを入力して実行前するオプションを変更したいので、カーソルを先頭に
戻したいという場面がある場合に、矢印で戻るのは面倒なのでCtr  + aを入力すると先頭に戻ることができます。
![Untitled (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/278813bd-0e03-4a64-ae48-9929a5c45488.png)

### 3-6.その他覚えておくと便利なコマンド
| Linuxコマンド | 概要 | 説明・オプション |
| --- | --- | --- |
| history | コマンド履歴 | 過去に実行したコマンド履歴の確認 |
| bashの履歴機能 | bashはUNIXの標準的なシェル | ↑：1つ前のコマンドを表示<br>↓：1つ次のコマンドを表示<br>!文字列：実行したコマンドの中で指定した文字列から始まるコマンドを実行<br>!!：直前に実行したコマンドを再実行<br>!履歴番号：履歴番号のコマンドを実行 |
| \|  (パイプ) | パイプライン処理 | 単純な動作のコマンドを組み合わせて複雑な処理をすることができる<br>例)ls -l |wc -l<br>カレントディレクトリないのファイル/ディレクトリの数をカウントする |
| ps | プロセス監視 | a：他のユーザーのプロセスも表示<br>f：親子関係をツリー上に表示<br>u：ユーザ名も表示<br>x：制御端末のないデーモンなどのプロセスも表示する<br>-e：すべてのプロセスを表示<br>-l：詳細な情報を表示 |
| df  | ディスクの空き領域を表示 | -h：サイズに応じて読みやすい単位で表示する |

**実行例**
以下は、historyの例です。historyは過去に実行したコマンドの履歴を確認できます。
過去に実行したコマンドを探すときに使用しています。
![Untitled (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/9fc9f69e-cfd5-5549-fd2b-0505973efabb.png)

以下は、df -hの例です。df はディスクの空きサイズを確認できます。
-hオプションは読みやすい単位で表示してくれますので、df -hはセットで使用しています。
運用保守を担当していると残りのディスク容量は重要ですので、こちらも頻繁に使用しています。
![Untitled (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/2bfa8fe5-4193-faf7-d824-faec92d81b90.png)

以下は、ps の例です。
ps -ef ですべてのプロセスの親子関係を表示しています。
| (パイプ)は、コマンドを組み合わせることができます。ここでは /binという文字列を検索して
プロセスを表示しています。
![Untitled (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113544/6a589122-1062-5489-bfe9-02f77393616d.png)

# 4.所感
いかがでしたでしょうか。
他にももっとご紹介したかったのですが、今回は、最低限のコマンドをご紹介しました。
他にもLinuxコマンドは山のようにあります。
3.Linux学習方法でも記述しましたが、Linuxを学ぶには実際に手を動かす環境構築がオススメです。
一方で、体系的に学びスキルの幅を広げたいという意味では、資格勉強で学習するのも一つの手ではないかと考えています。
Linuxコマンドは覚えれば自由に操作することが出来ます。
自由に操作できればLinuxコマンドが楽しくなると思いますので、この記事がお読みいただいた方の初めの一歩になることが出来れば幸いです。

最後までお読みいただきありがとうございました。

# 5. 参考サイト

- [JSLinux](https://bellard.org/jslinux/)
- [ping-t](https://ping-t.com/)
- [LinuC公式サイト](https://linuc.org/)
- [LPIC公式サイト](https://www.lpi.org/ja)
- [【Linux入門】コマンドライン初心者のための基礎とサンプル](https://uxmilk.jp/tag/linux)