Linuxの基本コマンド

##Linuxとは
OSの一種、コンピュータを動かすための基本ソフト。
サーバー用や開発用に使われている
####Linuxカーネル
中核となるソフトウェア。
####Linuxディストリビューション
カーネルに色々なソフトウェアを組み合わせて使いやすくしたもの。
####シェル
LinuxのCLI　を提供するソフトウェア。
ユーザーとカーネルの仲介役。
#####コマンドを入力すると実行結果が出力される
①ユーザーがプロンプトにコマンドを打つ
②シェルが入力された名前のコマンドを探す
③Linuxカーネルが見つかったコマンドを実行する
④シェルが実行結果を画面に表示

ターミナルとシェルは別。ターミナルの中でシェルが動いている。

#####ディレクトリ
ファイルを格納する仕組みのこと

###ショートカットキー
| コマンド　　　　　　　　　　　| 内容         |
|:-----------|:------------|
| command + a   | 行の先頭に移動 |
| command + e   | 行の最後に移動  |
| command + h   | カーソルの左を1文字削除  |
| command + d   | カーソル部分を1文字削除  |
| command + w    | カーソル位置の単語を削除       |
| command + u    | カーソル位置から行頭まで削除     |
| command + k    | カーソル位置から行末まで削除     |
| command + y    | 最後に削除した内容を挿入     |
| command + c    | 実行中のコマンドを強制終了     |
| command + l    | 画面の消去     |
| command + s    | 画面表示のロック     |
| command + q    | 画面表示ロックの解除     |
| Tab    | コマンドやパスの補完     |
| command + p,または↑ | 一つ前の履歴を見る     |
| command + n,または↓ | 一つ後の履歴を見る     |

###主要なディレクトリ

| ディレクトリ　　　　　　　　　| 役割       |
|:-----------|:------------|
| /bin   | 一般ユーザー及び管理ユーザーの両方が使用するコマンドの実行ファイルを格納 |
| /dev  | デバイスファイルを格納  |
| /etc   | 設定ファイルを格納  |
| /home   | ホームディレクトリが配置される  |
| /sbin    | 管理者向けのコマンドの実行ファイルを格納       |
| /tmp    | 一時的なファイルを格納     |
| /usr    | 各種アプリケーションとそれに付随するファイルを格納     |
| /var    | 変化するデータを格納    |

##各種コマンド

###cd
ディレクトリを移動するコマンド

```
$ cd [ディレクトリ]
```

| ディレクトリ　　　　　　　　　| 意味      |
|:-----------|:------------|
| カレントディレクトリ  「.」| 現在自分がいるディレクトリ |
| 親ディレクトリ  　　　「..」| 一つ上の階層のディレクトリ  |
| ホームディレクトリ   「~」  | 「/home/ユーザー名」ディレクトリ  |
| ルートディレクトリ　　「/」   | 「/」ディレクトリ  |

###pwd
カレントディレクトリ（自分がいるディレクトリ）を表示するコマンド

```
$ pwd
```

###ls
ファイルやディレクトリの一覧を表示するコマンド

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

#拡張子がhtmlのファイル一覧を表示
$ ls *.html
index.html home.html job.html

#zから始まり4文字で終わるファイルの表示
$ ls /bin/z???
/bin/zcat /bin/zcmp /bin/znew

#ファイルの詳細情報の表示
$ ls -l

#隠しファイルも含めた全てのファイルの表示
$ ls -a

#ファイルの種別を表示
# ls -F
```

###mkdir
ディレクトリを作成するコマンド

```
$ mkdir <作成するディレクトリ>

#深いディレクトリを一度に作成
$ mkdir -p test/2021/08
```

###rmdir
空のディレクトリを削除するコマンド

```
$ rmdir <ディレクトリ名>
```

###--help
コマンドのヘルプメッセージを表示

```
$ <コマンド> --help
```

###man
コマンドのマニュアルを表示

```
$ man <調べたいコマンド>

#キーワードから検索
$ man -k move 
```

###cat
ファイルの中身を表示するコマンド

```
$ cat <ファイル名>

#ファイルの詳細情報を表示
$ cat -n <ファイル名>

#複数のファイルをまとめて表示
$ cat <ファイル名> <ファイル名>
```

###less
ファイルの中身をスクロール表示する

```
$ less <ファイル名>
```

#####<スクロールの操作>

| コマンド　　　　　　　　| 内容      |
|:-----------|:------------|
| スペースキー, f| 一画面下にスクロール |
| b 　　　| 一画面上にスクロール  |
| j  | 一行下にスクロール  |
| k  | 一行上にスクロール  |
| q  | lessコマンド終了  |
| /<文字列>  | 下方向に向かって検索  |
| ?<文字列>  | 上方向に向かって検索  |
| n  | 次の検索結果に移動  |
| N  | 前の検索結果に移動  |

###touch
空のファイルを作成

```
$ touch <新規ファイル名1> <新規ファイル名2>
```

###rm
ファイル・ディレクトリを削除するコマンド

```
$ rm <ファイル名1> <ファイル名2> //複数削除可能

#ディレクトリも併せて削除
$ rm -r <ディレクトリ名>

#ファイルを削除する際に警告文を表示しない
$ rm -f <ファイル名>

#ファイルの削除前に確認
$ rm -i <ファイル名>
```

###mv
ファイルの移動、ファイル名を変更するコマンド

```
$ mv <移動元> <移動先>

#ファイル名を変更
$ mv <旧ファイル名> <新ファイル名>

#ファイルを移動
$ mv <ファイル名> <ディレクトリ名>

#上書きする前に確認する
$ mv -i <旧ファイル名> <新ファイル名>
```

###cp
ファイル・ディレクトリをコピーするコマンド

```
$ cp <コピー元> <コピー先>

#ファイルをコピー
$ cp <ファイル名> <ファイル名>

#ファイルをディレクトリ内にコピー
$ cp <ファイル名> <ディレクトリ名>

#上書き前に確認する
$ cp -i <ファイル名> <ファイル名>

#ディレクトリをコピーする
$ cp -r <ディレクトリ名> <ディレクトリ名>
```

###ln
リンクを張るコマンド

```
$ ln [オプション] <リンク元のファイル> <リンク名>

#ハードリンクを張る
$ ln <ファイル名> <ファイル名>

#シンボリックリンクを張る
$ ln -s <ファイル名> <ファイル名>
```

###find
ファイルを検索するコマンド

```
$ find <検索開始ディレクトリ> <検索条件> <アクション>
$ find . -name README.md -print

#ファイル名を指定してファイルを検索。ファイル名の大文字小文字は区別する。
$ find . -name README.md

#ワイルドカードが使える。*を使うときは"で囲う
$ find . -name '*.html' -print

#ファイル名を指定してファイルを検索。ファイル名の大文字小文字は区別しない。
$ find . -iname readme.md
```

```
#通常ファイルの検索
$ find . -type f -print

#シンボリックリンクの検索
$ find . -type l -print

#ディレクトリの検索
$ find . -type d -print

#複数の検索条件を指定。-aは省略可能。
$ find . -type d -a -name images -print
```

###リダイレクト

```
#入力リダイレクト(キーボードの代わりにファイルから入力する機能)
$ cat < /etc/hosts

#出力リダイレクト(コマンドの実行結果をファイルに保存)
$ ls > output.txt
$ cat > output.txt

#エラー入力のリダイレクト(エラー結果をファイルに保存)
$ ls /hoge 2> error.txt

#出力とエラー出力をまとめる
$ ls / /hoge > output.txt 2>&1

#リダイレクトで追記
$ echo Hello! >> output.txt
```

###/dev/null
入力先として指定しても何も返さず、出力先として指定してもデータは消え何も表示されないファイル。

```
#入力先として指定、入力先が何もない状態となる
$ cat < /dev/null

#出力先として指定、結果が何も表示されない
$ ls / > /dev/null
```

###パイプライン
複数のコマンドを連携させる機能。

```
コマンド | コマンド
$ ls /bin | less
$ ls /bin | grep systemd | less
```

###chmod
ファイルやディレクトリのパーミッションを設定

```
$ chmod [ugoa] [+-=] [rwx] <ファイル名>
$ chmod u+r file

#数値で指定
$ chmod <8進数の数値> <ファイル名>
$ chmod 755 file
```

| 記号　　　　　　　| 内容      |
|:-------|:------------|
| u  | 所有者の権限 |
| g 　　| グループの権限 |
| o  | その他のユーザーの権限  |
| a  | 全ユーザーの権限  |
| +  | 権限の追加  |
| -  | 権限を削除  |
| =  | 記述した権限にする |

| パーミッション　　　　　　　| 数値      |
|:-------|:------------|
| r(読み取り) | 4 |
| w(書き込み)　　| 2 |
| x(実行)    | 1 |

###sudo
スーパーユーザーとしてコマンドが実行可能
管理者権限を持つユーザーがスーパーユーザー

```
$ sudo <コマンド>
```

###ps
実行中のプロセスを表示するコマンド

```
$ ps [オプション]

#全ユーザーのプロセスを、詳細情報を合わせて表示
$ ps aux
```

###jobs
現在のジョブの一覧を表示するコマンド

```
$ jobs
```

###fg,bg
ジョブをフォアグラウンド、バックグラウンドにするコマンド

```
$ fg %<ジョブID>
$ bg %<ジョブID>
```

###kill
ジョブやプロセスを終了させるコマンド

```
$ kill %<ジョブID>
$ kill %<プロセスID>
```

##参考リンク
https://www.udemy.com/course/unscared_linux/