よく使うLinuxコマンド【初心者用】

# はじめに
ずっとWindowsで開発してきましたがLinuxで開発する機会が増えてきました。
仕事で使ったコマンドのメモで、Linux未経験の超初心者向けです。

# ファイルを編集する（vi）
| コマンド | 説明 |
|:---------|:-----|
|vi {ファイル名} |ファイルを編集する<br>存在しないファイル名の場合は新規作成して編集する |

## 基礎的なviの編集方法
Linux初心者はこのviの編集方法がわからなくて混乱する。
| コマンド | 説明 |
|:---------|:-----|
|i |編集モードにする |
|Escキー |コマンドモードに戻る（編集モード終了） |
|h |←左に移動 |
|j |↓下に移動 |
|k |↑上に移動 |
|l |→右に移動 |
|x |1文字削除。コマンドモードの状態で削除する<br>その後文字を挿入したい場合は編集モードにして挿入する |
|:wq |保存して終了。コマンドモードの状態で実行する |


# 省略コマンドの設定 
エイリアス(alias)[^1]に別名で設定すれば省略したコマンドで実行することも可能。
[^1]: コマンドを別名のコマンドで登録できる便利なコマンド。

.bashrcファイルを開く
```
sudo vi ~/.bashrc
```

以下を追記する。(追加するコマンドは例)
```
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
```

.bashrcファイルを適用する
```
source ~/.bashrc
```
これで`ll`と打って実行すれば`ls -alF`を実行したことと同じになる。

# ファイルを表示させる（ls）
| コマンド | 説明 |
|:---------|:-----|
|ls |カレントディレクトリ内にあるファイルの一覧を表示 |
|ls {ディレクトリ名} |ディレクトリ内にあるファイルの一覧を表示 |
|ls -l {ディレクトリ名} |長いフォーマットで表示する。<br>ディレクトリを指定した場合、最初にトータルのブロック数を表示してからディレクトリ内のファイルの情報を表示する |

# 現在操作中のディレクトリを表示（pwd）
| コマンド | 説明 |
|:---------|:-----|
|pwd |現在、操作しているディレクトリを表示する |

# ディレクトリの作成/削除（mkdir/rmdir ）
| コマンド | 説明 |
|:---------|:-----|
|mkdir {ディレクトリ名} |ディレクトリの作成する |
|mkdir -p {ディレクトリ名} |必要に応じて親ディレクトリも作成する |
|rmdir {ディレクトリ名} |空のディレクトリ削除する |
|rmdir -p {ディレクトリ名} |必要に応じて親ディレクトリも削除する |

# ファイル作成（touch）
| コマンド | 説明 |
|:---------|:-----|
|touch {ファイル名} |指定したファイル・ディレクトリのタイム・スタンプを変更するコマンドですが、存在しないファイルを指定した場合は空の新規ファイルが作成される |


# ファイル削除（rm ファイル名）
| コマンド | 説明 |
|:---------|:-----|
|rm {ファイル名} |ファイルを削除する |
|rm -r {ディレクトリ名} |ディレクトリを削除する|

# ファイルの中身を見る（cat）
| コマンド | 説明 |
|:---------|:-----|
|cat {ファイル名} |ファイルを開く（表示だけ） |

# ファイルやディレクトリの移動（mv）
| コマンド | 説明 |
|:---------|:-----|
|mv {移動元} {移動先} |`mv {ファイル名} {移動先ディレクトリ}`でファイルが指定したディレクトリに移動<br>例：`mv file.txt .ABC/` |

# ディレクトリ、ファイル名変更（mv）
mvコマンドでディレクトリ名やファイル名の変更もできる。
| コマンド | 説明 |
|:---------|:-----|
|mv {変更前のファイル名} {変更後のファイル名} |ファイル名変更 |
|mv {変更前のディレクトリ/} {変更後のディレクトリ/} |ディレクトリ名変更 |

# 権限の変更(chmod)、所有者の変更(chown)、グループの変更(chgrp)
ファイルをそのまま実行して **許可がありません** とエラーが出たときに権限を付与したり所有者を変更すると実行成功することがある。
| コマンド | 説明 |
|:---------|:-----|
|chmod {パーミッション} {ファイル名} | **change mode** の略。<br>ファイルやディレクトリのアクセス権を変更する<br>パーミッションに`+x`を指定：全権限に実行権限付与<br>パーミッションに`g+x`を指定：グループ権限に実行権限付与 | 
|chmod -R {パーミッション} {ファイル名} | ディレクトリごとアクセス権を変更する | 
|chown {[所有者]or[所有者:グループ]} {ファイルorディレクトリ} | **change owner** の略。<br>ファイルやディレクトリの所有者を変更する<br>`chown user1 data`：dataフォルダの所有者をuser1に変更<br>`chown user1:general data`：dataフォルダの所有者をuser1にグループをgeneralにする | 
|chown -R {[所有者]or[所有者:グループ]} {ファイルorディレクトリ} | ディレクトリごと所有者を変更する | 
|chgrp {グループ} {ファイルorディレクトリ} | **change group** の略。<br>ファイルやディレクトリのグループを変更する<br>`chgrp user1 data`：dataフォルダのグループをuser1にする | 
|chgrp -R {グループ} {ファイルorディレクトリ} | ディレクトリごとグループを変更する | 

## パーミッション(アクセス権)について
パーミッションは **3桁の数字で表す方法(777等)** と **9文字の記号で表す方法(rwxrwxrwx等)** の2種類がある。
`ls -l`コマンドでファイルやディレクトリのパーミッションの確認ができる。
**drwxr-xr-x** 等と表示される。
| パーミッションの文字列 | 説明 |
|:---------|:-----|
| 1文字目|`d`であればディレクトリを、`-`であればファイルを示す | 
| 2～4文字目の3文字| 所有者の権限 | 
| 5～7文字目の3文字| グループの権限 | 
| 8～10文字目の3文字| その他の権限 | 

rやwなどの文字列が何を示すかは以下の通り。
| 権限の文字列 | 数字で表す場合 | 説明 |
|:-:|:-:|:-----|
| r | 4 | (read)読み込み権限 | 
| w | 2 | (write)書き込み権限 | 
| x | 1 | (execute)実行権限 | 

数字で表す場合は記号で表す場合の3桁分を合計した数値で表す。
**755** の場合は **rwxr-xr-x** と同じ意味。

## アクセス権の対象
| 記号 | 説明 |
|:---------|:-----|
| u | 所有者(user) | 
| g | グループ(group) | 
| o | その他(other) | 
| a | 上記すべて(all) | 

# シンボリックリンク（ln）
Windowsでいうところのショートカットのようなもの。
ファイルや、ディレクトリを参照するリンクを生成することで同じファイルやディレクトリを作成しなくてよくなる。
| コマンド | 説明 |
|:---------|:-----|
|ln -s {ファイル名} {リンク名} |ファイルのシンボリックリンク作成 |
|ln -s {ディレクトリ名} {リンク名} |ディレクトリのシンボリックリンク作成 |
|ln -s {ファイル1} {ファイル2……} {ディレクトリ} |指定したディレクトリの中にシンボリックリンクを作成 |
|unlink リンク名 |リンク削除 |

`ln`は、ファイルのリンクを作成するためのコマンド。
`ln {ファイル名} {リンク名}`でハードリンクを作成。

# 空き容量表示(df)
| コマンド | 説明 |
|:---------|:-----|
|df -h |ディスクの空き領域（freeスペース）のサイズを集計して表示する。<br>`-h`は読みやすい単位(1000単位)で表示 |

容量不足のときの確認時に。

# 使用量確認(du)
| コマンド | 説明 |
|:---------|:-----|
|du -h {ディレクトリ名} |指定ディレクトリの使用量表示<br>ディレクトリ指定しないと全部表示されて見にくい<br>`-h`は読みやすい単位(1000単位)で表示 |
|du -sh {ディレクトリ名} |合計のみを表示したい場合は`-s`オプションを使用。 |
|du -h {ディレクトリ名} \| sort -nr |使用量でソートして表示 |

例：`sudo du -hm --max-depth=1 /home/ | sort -nr`

# Linuxで実行中のプロセスの状況確認(ps)
| コマンド | 説明 |
|:---------|:-----|
|ps aux |実行中のプロセスを一覧表示する。<br>`a`は全ユーザーを、`u`はユーザー名の表示を、`x`はシステム（Xサーバなど） |

# プロセスをkillする(kill)
| コマンド | 説明 |
|:---------|:-----|
| kill {プロセス番号（PID）} |指定したプロセス番号のプロセスをkillする |

例
1. killしたいプロセスのPIDを確認
`ps aux`
2. 対象のPID(20898とする)をkillする
`kill 20898`

# 共有メモリセグメントの使用状況確認(ipcs)
| コマンド | 説明 |
|:---------|:-----|
| ipcs -m | 共有メモリセグメントの使用状況確認 |

# メモリの容量を表示(free)
| コマンド | 説明 |
|:---------|:-----|
| free -m | 空きメモリと使用しているメモリの容量を表示 |

# ファイルを検索する(find)
| コマンド | 説明 |
|:---------|:-----|
| find -iname '{ファイル名}' | 大文字小文字を無視してファイルを検索する |

# プロセス監視(top)
| コマンド | 説明 | 
|:---------|:-----|
|top -u {ユーザー名} |指定したユーザーのプロセス状態を確認する |

# ファイル、ディレクトリをコピーする(cp)
| コマンド | 説明 |
|:---------|:-----|
|cp コピー元 コピー先 |ファイルをコピーする |
|cp -r コピー元ディレクトリ コピー先ディレクトリ |ディレクトリをコピーする |

# ファイルの分割
ログファイルのファイルサイズが大きくなりすぎて困った場合に。
| コマンド | 説明 |
|:---------|:-----|
|\\$i=0; cat .\\{分解したいファイル名} -ReadCount 10000 \| % { \\$_ > {分解したファイル名_}\\$i.{拡張子};$i++ }| 10000行ごとにファイルを分割して保存する|

# 文字化けファイル名修正
ファイルが文字化けすると開けなくなるので。
1. inode番号を確認
`ls -li`
2. ファイル名修正(inode番号:3818180を修正する場合)
`sudo find . -inum 3818180 -exec mv '{}' {修正したいファイル名} /;`

# sudoでcdしたい場合
`sudo cd /path/to/dir` とやってもsudo内でcdが終わったあと、元のシェルの環境に戻ってくるので意味がない。
サブシェルを起動してcdをして、その後に何かコマンドを実行する。
`sudo sh -c "cd /path/to/dir; pwd"`

# さいごに
Linux超初心者はviの編集方法なんて知らない。
右も左もわからない初心者用のメモでした。