初心者向けLinuxコマンドまとめ（独断と偏見による重要順）

Linuxコマンドのまとめ記事はいくつかありますが、どこから覚えていけばいいか初心者の方だと分かりづらいなと思ったので、独断と偏見の重要度順でまとめてみました！
Linuxコマンドが何も分からない人が一からこの記事を使って覚えてもらうことを想定しています
vimなど、コマンドによっては本1冊書けるぐらい深いものもありますが、あくまでも覚える前提として、最低限の内容のみ掲載しております

#最重要
## pwd：自分がいるディレクトリ（カレントディレクトリ）の表示
Print Working Directory
今現在自分がいるディレクトリ（カレントディレクトリ）を表示するコマンドです

```
//カレントディレクトリの表示
$ pwd
> /Users/test
```


## ls：カレントディレクトリ内のファイル・ディレクトリ一覧表示
LiSt
カレントディレクトリ内のファイル・ディレクトリ一覧表示

```
//ディレクトリ一覧を確認
ls
>Applications Desktop

//lのオプションで、権限含めて詳細情報を確認できます
//aのオプションで、隠しファイルを表示できます
ls -la
>drwx------@   7 user  staff    224  9 19  2020 Applications
>drwx------@ 168 user  staff   5376  2 16 16:00 Desktop
```


## cd：カレントディレクトリの変更
Change Directory
絶対パスでも相対パスでも、ディレクトリの名前を入力するだけでも階層の移動ができます
特に最初のうちはlsで直下のディレクトリを確認して、確認したディレクトリにcdするのが良いかなと思っています

```
//tempフォルダに移るとき
cd temp
//一つ上の階層に戻るとき
cd ../
```

## mkdir：ディレクトリの作成
MaKe DIRectory
今のディレクトリの下に新たなディレクトリが作れます


```
//testディレクトリを作成
mkdir test
//成功したら何も表示されないので、確認する場合はls
ls
> test

```

##rm, rmdir：ファイルやディレクトリの削除
rmでファイルの削除、rmdirで**空の**ディレクトリを削除できます
そのまんまではrmでディレクトリの削除や、ファイルが入ったディレクトリの削除はできません
rm -rでディレクトリ内に入ってるファイルも含めて丸ごと削除できるようになります
rmコマンドだけでディレクトリも消せるようになるので、正直rmdirはほとんど使わない印象です
（軽くググるとrm -rfというコマンドを見かけると思いますが、どんなに大切なファイルであっても問答無用ですぐ消去されてしまうので基本的に使わないで下さい）

```
//1つのファイルを消すとき
rm test.txt
//testディレクトリが空だったら消せる
rmdir test
//test2ディレクトリが空でも中身入ってても消せる（中身のファイルも全て消える）
rm -r test2
```

##sudo：管理者権限で実行
SUperuser DO
このコマンドは単体で動く物ではなく、他のコマンドと組み合わせて使うコマンドです
各コマンドの前にこのコマンドを入力することで、一時的に管理者権限を得てコマンドを実行します
例えばコマンドを入力したら、Permission Diniedが出てきた場合は管理者権限が必要

```
//一般ユーザーに権限がなかったとしても、sudoで実行できる
sudo rm test.txt
```


#重要
##mv：ファイル・ディレクトリの移動（リネーム）
MoVe
ファイルやディレクトリを移動させたり、ファイル名を変えることができるコマンド

```
//test.txtをtempディレクトリの中に移動
mv test.txt temp
//このような書き方をするとディレクトリの移動はせずに、名前だけ変えることができる
mv test.txt test2.txt
```

##cp：ファイルのコピー
CoPy
最初の引数のファイルを、次の引数の場所にコピーします
-rオプションで、ディレクトリとその中のファイル丸ごとコピーできます

```
//元のファイルは保ったまま、test.txtをtempディレクトリの中にも置きます
cp test.txt temp
//tempディレクトリ全体をtemp2ディレクトリの中にも置きます
cp -r temp temp2
```


##cat, less：ファイルの中身を見る
catは、ファイルの全内容を一括出力
lessは、まず1画面に収まる分量を出力後、Enterで1行分、Spaceで1ページ分めくれる機能がついています
簡単な文章はcat、長い文章はlessと使い分けると個人的には良いかなと思っています
（moreというコマンドでもlessと同様のことができますが、lessの方が機能豊富なので割愛します）
全てのコマンドは紹介しきれないので、細かい操作が気になる方はこちらの記事をご覧ください
https://www.atmarkit.co.jp/ait/articles/1702/09/news031.html

```
//どちらもファイルの中身を見ることができるコマンド
cat test.txt
less test.txt
//lessを使うと別画面に行くので、終了したい場合はqキーを押すと終了
```

##vi, vim：テキスト編集
###vimの基本
テキスト編集のコマンドですが、メモ帳アプリなどと違って操作がかなり特徴的なので、個人的には初心者が最もとっつきにくいイメージのあるコマンドかなと思っています
lessと同様にコマンド入力後vimエディターが起動し、主に書き込み（挿入）モードとノーマルモードを切り替えて操作します
viとvimは厳密には違いますが、Ubuntuではviコマンドでもvimが開きます（viの後継で改良版がvim）

```
//下記コマンド入力でvi or vimエディターが立ち上がる
vi test.txt
```

###vimの超基本
エディターが立ち上がった直後と、esc押した後：ノーマルモード
コマンドモード中にi押した後：挿入（書き込み）モード（iはinsert）
挿入モード中はメモ帳などの感覚でテキスト編集ができる
ノーマルモード中は様々なキーに様々な機能が割り当てられているが、初心者が最低限覚えるのは終了方法だけで大丈夫です（以下はノーマルモード中のみ行える操作です）

```
//保存する(Write)
:w 
//保存してvimエディターを閉じる(Write Quit)
:wq
//保存せずにvimエディターを閉じる
:q
//保存せずにvimエディターを閉じる(変更があっても確認せず破棄される)
:q!
```

###vi/vim参考リンク
https://eng-entrance.com/linux-command-vi
https://qiita.com/okamos/items/c97970ab34ff55ff3167


##chmod：権限変更
CHange MODe
このコマンドで誰が何をやって良いという権限を変更できますが、かなり分かりやすい記事があったので、権限の見方など一から学びたい方は、こちらの記事をご覧下さい
https://qiita.com/shisama/items/5f4c4fa768642aad9e06

細かい解説は上記記事に任せて、ちょこっとだけ解説します

```
//test.txtはどのユーザーでもフル権限を付与
chmod 777 test.txt
//アルファベットで指定（ユーザーに書き込み権限追加）
chmod u+w test.txt
//選択可能なオプション
u, g, o, a：ユーザー、グループ、その他、すべて
=, +, -：その権限に設定する、権限付与、権限はく奪
r, w, x：読み込み、書き込み、実行
```

##chown：所有者の切り替え
CHange OWNer

```
chown ユーザー[: グループ]　ファイル

//test.txtをrootグループのrootユーザーへ変更します
chown root:root test.txt
```



## su（とexit）：ユーザー切り替え
Switch User
指定せずに以下様に入力すると常に管理者権限として実行を行えるようになる
exitで管理者権限抜けて一般ユーザーに戻る

```
su -
```


##>, >>, <：リダイレクト
>, >>：コマンドを実行して得られた結果をファイルに書き出すことができます
<：コマンドを入力にできます

```
//ls -lの結果をfile.txtに上書き
ls -l > file.txt
//ls -lの結果をfile.txtに追記
ls -l >> file.txt
//（ファイル入力の使用例が思いつかなかった）
コマンド < ファイル名
```

##grep：正規表現で検索
Global Regular Expression Print
正規表現を使って文字列の検索が行えるコマンド
個人的には後述のパイプでほかのコマンドと組み合わせて使うイメージ

```
//tempディレクトリにあるaという文字列を検索して出力
grep a temp/*
```

##history：コマンド履歴とコマンドの再利用

```
//このコマンドで今まで使用したコマンドを表示できる
history

1:ls
2:cd /temp/test
3:ls
//!(historyで表示された番号)でコマンドの再実行ができる
!2
//上記コマンドならcd /temp/testが実行される
```

##|（パイプ）：コマンドをつなぐ
下記の例の様に複数のコマンド同士をつなぐことができます
特にgrepなどと相性が良いです

```
//過去の実行履歴の中からmysqlを含むコマンドのみ表示
historty | grep mysql
```

## $()：コマンド実行の結果を返す

```
//このコマンドでは先にlsが処理された後、そこで得られた結果をcatの引数にしています
//結果として、lsで取得したディレクトリ全体のそれぞれのファイルに関して、catコマンドで中身を表示します
cat $(ls)
```

##echo

#必要
##tar：ファイルの圧縮と解凍

##touch：タイムスタンプの更新



##find

##ln：シンボリックリンク

## man：マニュアルの表示
コマンドのマニュアルを表示します
分からないことがあってもググることが習慣な人はこのコマンドは使わないかもしれないです

```
man コマンド

man ls
```

##systemctl

##apt, yum

#便利コマンド
タブ補完
Ctrl+A, Ctrl+E(行頭、行末へカーソル移動)
↑, ↓, Ctrl+R(コマンド履歴の参照)
Ctrl+C(実行中のコマンドを中止)

##clear