Linuxの基本コマンド

## はじめに
Linuxの基礎を学習したので、
学習したコマンドの解説をアウトプットとして
この記事に残します。
初学者の方々にお役に立てていただければ幸いです。

## ディレクトリ間を移動する
まず前提としてLinuxを学習するときにディレクトリという
単語が必ず出てきますがこちらはフォルダのことですので
ご認識おきください。
では本題ですが、現在いるディレクトリから別のディレクトリへ
移動する際は**cd**を使います。
```:コマンド
cd オプション  移動先のディレクトリ
```
コマンドを打つ際に移動先のディレクトリの他に
オプションを入力することができます。
オプションは入力したコマンドがカスタマイズされた
## はじめに
Linuxの基礎を学習したので、
学習したコマンドの解説をアウトプットとして
この記事に残します。
初学者の方々にお役に立てていただければ幸いです。

## ディレクトリ間を移動する
まず前提としてLinuxを学習するときにディレクトリという
単語が必ず出てきますがこちらはフォルダのことですので
ご認識おきください。
では本題ですが、現在いるディレクトリから別のディレクトリへ
移動する際は**cd**を使います。
```:コマンド
cd オプション  移動先のディレクトリ
```
コマンドを打つ際に移動先のディレクトリの他に
オプションを入力することができます。
オプションは入力したコマンドがカスタマイズされた
挙動になります。cdではオプションを使うことがないので
これから説明するコマンドで使えるオプションを
その都度説明していきます。
ディレクトリの指定方法ですが、
移動したいディレクトリへの**パス**を
明示しなければなりません。
パスとはディレクトリへの道のことです。
パスの明示の方法には２つあります。
１つ目は相対パスです。
以下のようなディレクトリがあり
現在desktopにいるとします。
```
/user/desktop/app
```
相対パスは現在の位置から移動先への
パスのことを意味します。
相対パスで指定してappに移動しようとした場合
以下のようになります。
```コマンド
cd app
```
2つ目は絶対パスです。
絶対パスはルートディレクトリからみた
移動先へのパスです。
ルートディレクトリは全てのディレクトリの
一番先頭にあるディレクトリのことです。
Linuxのディレクトリの構造は木のようなもので
幹からどんどん枝分かれしていき絶対パスは
その幹の部分を基準にして示されます。
またルートディレクトリはパスとして
示す際は/で表現されます。
ただし先ほど相対パスで説明したパスの表記では
3つ/が表記されておりましたが、先頭の/がルートディレクトリ
を意味してその他のものはただのディレクトリを意味します。
説明が長くなりましたが以上の説明を踏まえて
絶対パスでappを明記すると以下のようになります。
```コマンド
cd /user/desktop/app
```
相対パスと絶対パスはその他のコマンドで
パスを指定する際に使うので覚えておくといいと思います。

## 現在のディレクトリを確認する
現在自分がどこのディレクトリにいるのかを
確認する際にはpwdを使います。
```コマンド
pwd
```

## 現在のディレクトリの中身を確認する
現在のディレクトリの中身を確認する際には
lsを使います。
```:コマンド
ls オプション ディレクト
```
lsはディレクトリを指定することによって
そのディレクトリを確認できます。
また以下はlsでよく使うオプションの一覧になります。
| オプション | 挙動 |
|:-:|:-:|
|-l | ファイルやディレクトリの詳細情報が表示される |
|-a | 隠しファイルも含めて表示する |
|-F | ファイルを＠ディレクトリを/のようにわかりやすく表示する |
|-t | 更新した順にソートして表示する |
|-r | 逆順にソートして表示する |

## ディレクトリを作成する
ディレクトリ作成の際にはmkdirを
使用します。
```コマンド
mkdir オプション ディレクトリ名
```
ディレクトリを作成する際にその中に
さらにディレクトリを作る場合は-pオプションが
使えます。
```コマンド
mkdir -p sample1/sample2/sample3
```

## ディレクトリを削除する
ディレクトリを削除する際rmdirを
使用します。
```コマンド
rmdir ディレクトリ名
```
rmdirは中身にファイル等があると
エラーを起こすので中身ごとディレクトリを
削除することを防ぐ際はrmdirを使いましょう。

## ファイルの中身を確認する
ファイルの内容を確認したい際に
使用します。
```コマンド
cat オプション ファイル名
```
catにはオプションとして-nがあります。
こちらはファイルを開いた際に各行に
行番号が割り振られた状態で表示されます。

## スクロールしてファイルを確認する
中身が多く画面に収まりきらないファイルを確認する際に
lessを使用します。
```コマンド
less オプション ファイル名
```
以下スクロールの操作です。
| コマンド | 挙動 |
|:-:|:-:|
| スペース、f | 一画面下にスクロール |
| b | 一画面上にスクロール |
| j | 1行下にスクロール |
| k | 一行上にスクロール |
| q | 閲覧を終了 |

## ファイルの末尾を確認する
ファイルの末尾を確認したい際に
tailを使用します。
```コマンド
tail オプション ファイル名
```
tailはオプションで特に指定しなければ
最後から十行目までを表示します。
表示する行数を指定するには-nオプションを使用します。
```コマンド
tail n 5 ファイル名
```
またtailはログファイルの更新の確認などを目的に
-fコマンドが使用できます。
```コマンド
tail -f ファイル名
```
こちらのオプションでは指定したファイルの変更を
リアルタイムで確認することができます。

## ファイルを作成する
ファイルを作成する際には
touchを使用します。
```コマンド
touch オプション ファイル名
```
touchは存在しないファイル名を
指定すると空のファイルを作成しますが、
既存のものを指定した場合はファイルの更新時間を
最新のものにします。

## ファイルを削除する
ファイルを削除する際には
rmを使用します、
```コマンド
rm オプション ファイル名
```
rmは-rオプションを使用することによって
中身のあるディレクトリを削除することができます。
すでに説明したrmdirは中身のないもののみの削除でしたが
目的別に使い分ければ良いでしょう。

## ファイルを移動する
ファイルを移動する際は
mvを使用します。
```コマンド
mv オプション ファイル名 移動先パス
```
また、mvはファイルの移動だけでなく
ファイル名の変更もできます。
```コマンド
mv オプション 旧ファイル名 新ファイル名
```
ファイル名を変更する際は-iオプションが
便利です。-iを使用するとファイル名の変更の前に
確認をしてくれます。

## ファイルをコピーする
ファイルをコピーする際は
cpを使用します。
```コマンド
cp オプション コピー元ファイル名 コピー先ファイル名
```
ファイルを別のディレクトリにコピーする場合は
```コマンド
cp オプション コピー元ファイル名 ディレクトリ名
```
コピーをする際にはrmでも説明した-iが使えます。
他のオプションとしてディレクトリをコピーする
-rがあります。
```コマンド
cp -r 旧ディレクトリ 新ディレクトリ
```

## リンクを貼る
リンクを貼るというのは特定のファイルに
あだ名をつけることです。
コマンド入力の際に長いパスを入力するのは
かなりの手間ですのでこれを省略するとき、
複数バージョンのソースコードを管理したいときなどに使います。
リンクを貼る時にはlnを使用します。
```コマンド
ln オプション リンク先ファイル名 リンク元ファイル名
```
リンクには**ハードリンク**と**シンボリックリンク**があります。
ハードリンクはリンク先の内容を参照するファイルを別名で作成します。
聞いただけではcpと同じに見えるかもしれませんが
cpと違う点は参照先のファイルに変更があった場合は
参照元にも変更が適応される点です。これは
また、ハードリンクはディレクトリに対しては使えません。

シンボリックリンクは参照先のファイルに変更があれば
それば反映される点は同じです。
ハードリンクとの違いは参照先のファイルが
削除されたり移動されるとリンクを作成された時のパスの
整合性が取れなくなり参照できなくなります。
lnのオプションには-sオプションがあり
これはシンボリックリンクを作成する際に使用します。
オプションをつけなかった場合はハードリンクになります。

## ファイルを検索する
ファイルを検索する際は
findを使用します。
```コマンド
find 検索開始ディレクトリ 検索条件 検索後のアクション
```
検索は検索開始ディレクトリに入力されたディレクトリを
基準に検索されます。
検索条件では-nameが使われることが多いです。
-nameの後に検索したいファイル名を入力することで
該当のファイルを検索します。
```コマンド
find 検索開始ディレクトリ -name sample.txt 検索後のアクション
```
検索後のアクションでは-printが使われることが多いです。
-printは検索に引っかかったファイルのパスを表示します。

## ファイルモードを変更する
ファイルには編集、閲覧、実行
それぞれに行うための権限があります。
それを変更するために使用するのがchmodです。
```コマンド
chmod ユーザーの種類 権限の追加、削除 ファイル名
```
chmodを使用する上で権限を変更するユーザーの種類、
権限を追加または削除、ファイルの権限を
表現するコマンドを認識しておく必要があります。

**変更するユーザーの種類**
| コマンド | 挙動 |
|:-:|:-:|
| u | 所有者の権限 |
| g | グループの権限 |
| o | その他のユーザーの権限 |
| a | 全ユーザーの権限 |

**権限の追加、削除**
| コマンド | 挙動 |
|:-:|:-:|
| + | 権限を追加 |
| - | 権限を削除 |
| = | 記述した権限にする |

**ファイルの権限**
| コマンド | 挙動 |
|:-:|:-:|
| r | 閲覧 |
| w | 編集 |
| x | 実行 |

以上のコマンド踏まえてchmodを使用して権限を
変更する例をあげます。
```コマンド
chmod ug+r sample_file
```
以上のコマンドではファイルの所有者と
特定のグループに所属しているユーザーに対して
閲覧の権限を追加するコマンドになります。

## ファイルの所有者を変更する
ファイルの所有者を変更する際は
chownを使用します。
```コマンド
chown 変更後のユーザー名 ファイル名
```

## プロセスを表示する
プロセスとは実行中のプログラムのことです。
プロセスはメモリ上で動くためPCが重くて
今動いているプロセスを確認したいときなどにpsを使います。
```コマンド
ps オプション
```
以下のオプションを入力することで
より詳細なプロセスの情報を表示します。
またpsのオプションを入力する際には他のコマンド
の時とは違い-は必要ありません。

| コマンド | 挙動 |
|:-:|:-:|
| a | psを実行したユーザ以外のプロセスを表示する |
| u | 実行中のプロセスの詳細情報を表示する |
| x | psを実行したユーザーのプロセスを表示する |

## プロセス・ジョブを終了する
ジョブは入力して実行したひとまとまりのコマンドのことです。
つまりプロセスを一つのパッケージとしてみたものがジョブです。
実行しているプロセスまたはジョブを終了する際に使用するのがkillです。
```コマンド
kill プロセスIDまたはジョブID
```
プロセスIDはps、ジョブIDは`jobs`で確認できます。