Linuxで個人的によく使うコマンドのまとめ

## そもそもコマンドってどうやって使うの？

ターミナルで[コマンド]+[オプション]を打つことで使える。
使えるコマンドは`/usr/bin/`,`/usr/sbin/`,`usr/local/bin`,`usr/local/bin`にいるらしい。

```
ls /usr/bin 
```
とかで一覧を確認できます。

## オプションは割と共通の意味で使われていることが多かったりする(**違うのもあるので注意**)。
割と共通に思えるオプション。
-r 再帰的に行う(ディレクトリを指定したらその下のディレクトリやファイルまで含めて行う)
-f 強制的に行う(あまり使いたくない)
-a すべて

## よく使うコマンド
### ディレクトリの中身一覧を表示：**ls** 

#### 割と使うオプション
-lでリスト
-aで隠しファイルも含めてすべて
-tで新しいものから時間順

```
hoge@DESKTOP:~$ ls -la
total 8
drwxr-xr-x 1 hoge hoge 4096 Jul 15 21:58 .
drwxr-xr-x 1 root root 4096 Jun  8 21:53 ..
-rw------- 1 hoge hoge  341 Jul 15 21:49 .bash_history
-rw-r--r-- 1 hoge hoge  220 Jun  8 21:53 .bash_logout
-rw-r--r-- 1 hoge hoge 3771 Jun  8 21:53 .bashrc
drwx------ 1 hoge hoge 4096 Jul 15 21:57 .cache
drwx------ 1 hoge hoge 4096 Jul 15 21:57 .local
-rw-r--r-- 1 hoge hoge  807 Jun  8 21:53 .profile
-rw-r--r-- 1 hoge hoge    0 Jun  8 21:55 .sudo_as_admin_successful
drwxrwxrwx 1 hoge hoge 4096 Jul 15 22:22 python-test
```

### ファイルの中身を見る：**less ファイル名**

#### lessの中でよく使うコマンド

q　閲覧終了
f  次のページへ進む
b  前のページへ戻る
g  ファイルの最初へ
G  ファイルの最後へ
/  検索
n  次の検索結果
N  前の検索結果

```
hoge@DESKTOP:~$ less aaa.txt
aaa
bbb
ccc
aaa.txt (END)
```

### ファイルの読み書き：**vim ファイル名**

#### よく使うモード
esc  コマンドモード(ファイルに書き込んだりできない)
i    インサートモード(ファイルへの書き込みができる)
v    ビジュアルモード(コピーしたり、選択したりが便利)

#### よく使うコマンド
:wq  書き込んで終了
:q!　強制終了
/    検索
x    文字削除
h    ←
j    ↑
k    ↓
l    →

めんどくさくなったので、あとはこのわかりやすいリンク先で。
[新人達を1ヶ月でガチvimmerにした方法](https://qiita.com/nyantera/items/4bf29ca6f11bc797a9cb)
コマンドでvimtutorって打つと基本的な操作について学べるのでそちらもおすすめ。

```
hoge@DESKTOP:~$ vim aaa.txt
aaa
bbb
ccc
~
"aaa.txt" 3L, 12C 
```

### コマンドのマニュアルを見る：**man コマンド名**

```
hoge@DESKTOP:~$ man ls

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List information about the FILEs (the current directory by default).  Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..
       
       ......略......
```

### ディレクトリを移動する：**cd ディレクトリ名**

tabを押すと次の予測が出てくるので便利


### パッケージをインストールする：**apt(yum,brew) install パッケージ名**

apt updateやapt upgradeでアップデートやアップグレードができる。

パッケージ管理システムについての説明はこれがわかりやすかった。
https://eng-entrance.com/category/linux/linux-package

### ディレクトリを作る：**mkdir ディレクトリ名**

### 空ファイルを作る：**touch ファイル名**

### コピーする：**cp ファイル名 コピー先ディレクトリパス**

詳しいオプションはこちらを参考に。
https://eng-entrance.com/linux_command_cp

### 移動させる：**mv ファイル名 移動先ディレクトリパス**

詳しいオプションはこちらを参考に。
https://eng-entrance.com/linux_command_mv

### ファイル名を探す：**find 検索先 -name ファイル名**
ファイルの名前を探すことができます。
正規表現でワイルドカード(*)をよく使うかなぁ。

詳しいオプションはこちらを参考に。
https://eng-entrance.com/linux-command-find

### ファイルの中身を探す：**grep -r 文字列 検索先**
再帰的に探すことが多いと思う。
パイプ(|)でつないで操作することも多い。

xargsとかと一緒に使われることも多い気がします。
https://wa3.i-3-i.info/word11619.html

詳しいオプションはこちらを参考に。
https://eng-entrance.com/linux-command-grep

### コマンドが入っているか、入っているならどこなのかを探す。：**which コマンド名**

```
hoge@DESKTOP:~$ which ls
/bin/ls
```
こんな感じで場所を教えてくれます。
そもそもインストールされていないのか、ただパスが通っていないだけなのかなどを確認するときに使います。

### 自分が今どこのディレクトリにいるか知る：pwd

```
hoge@DESKTOP:~$ pwd
/home/hoge
```

## ログを追いかけるコマンド：**tail -f ファイル名**
ログが書き込まれていくのを追っていくコマンド

https://eng-entrance.com/linux-command-tail

## そこまで頻繁には使わないけど、最初の設定とかで使うことがあるコマンド

### パスワードの変更：**passwd**
https://eng-entrance.com/linux-command-passwd

### 所有者やグループの変更：**chown**,**chmod**
#### chown
https://eng-entrance.com/linux-command-chown
#### chmod
https://eng-entrance.com/linux-group


## リモートサーバの操作をしたりするとき使うコマンド

### リモートサーバに入る：**ssh サーバ名**

sshの公開鍵方式でリモートサーバに入るには秘密鍵をローカルに置かなくてはいけない。
鍵があるディレクトリで`ssh`を叩くか`-i`オプションで鍵を指定するか`.ssh/config`で鍵の位置を指定する。
下記リンクで書き方や詳しい指定の仕方が書いている。

https://qiita.com/0084ken/items/2e4e9ae44ec5e01328f1

### 複数の仮想端末を使う：**screen -U**

特にリモートサーバで作業する場合、ウインドウを複数開かなくてよい、複数のプロセスを同時実行できる、セッション切れしても端末の状態を保存しておける、など便利です。

使い方の要点
https://qiita.com/ryounagaoka/items/8203e9c149b542986c92

マニュアル
https://linuxjm.osdn.jp/html/GNU_screen/man1/screen.1.html

### ローカルからリモートに安全にファイルを転送する：**scp 送り元 送り先**

ssh接続をつかってファイル転送をできます。
`.ssh/config`にサーバ名と鍵を指定しておけば`サーバ名:指定ディレクトリ`だけで指定ができるので便利です。

https://qiita.com/katsukii/items/225cd3de6d3d06a9abcb


## インストールしたパッケージでよく使うコマンド

### 再帰的にディレクトリの構成を確認する：**tree ディレクトリ名**

`apt(yum,brew) install tree`とかでインストールできるはず。


### mysqlを起動する：**mysql (-h ホスト名) -u ユーザ名 -p (-P ポート番号)**

VirtualMachineなどを使ってmysqlを起動する場合、ホスト名とポート番号が必要になりますが、
通常起動であれば`-u`と`-p`オプションだけで大丈夫です。




## まとめ
個人的に使うことがあるコマンドでした。
随時追記・修正行います。
間違っている等ご指摘あればお願いします。