Linux初心者がIoTゲートウェイを触る時に使ったコマンドをメモ

LinuxベースのOSが入ったIoTゲートウェイを触る時によく使うコマンドのメモです。
入門の位置付けなので、それぞれのコマンドのオプションなどの深追いはしていません。ここで挙げていないオプションもたくさんあるので、気になった方は調べてみてください。

※できるだけそのまま使えるように、コマンド開始記号は省いています。

## 端末への接続に関するもの

### シリアル接続する

```shell
screen {接続先} {接続先端末のボーレート}
```

##### 例えば、ボーレートが115200 bps、接続先が `/dev/tty.usbserial-xxxxxx` の端末に接続したい場合

```shell
screen /dev/tty.usbserial-xxxxxx 115200
```


接続を終えたい場合は `command + a + k` で セッションを終わらせましょう。セッションが残っていると、再接続の際にうまくいかないことがあります。

### SSH接続する

```shell
ssh {ログインユーザ}@{送信先のIP}
```

##### 例えば、 `user1` というログインユーザを利用して、IPアドレス `192.168.0.10` の端末に入りたい場合

```shell
ssh user1@192.168.0.10
```

## ユーザーに関するもの
### ユーザーを切り替える

#### rootユーザーに切り替える

- su ← `super user`

```
su
```

- パスワードが必要です
- デフォルトのパスワード設定は各機器の初期設定やOSによって異なります

#### 例えば、 `user1` に切り替える

```
su user1
```

### パスワードを変更する

```
passwd
```

- その後、現在のパスワードを入力（`current`とある場合）
- 変更したいパスワードを入力（`Retype`と出た場合はもう一度打つ）

## 実行に関するもの

### 実行中のプロセスのうちで特定のワードが含まれるものを出力する

- ps ← `process`

```shell
ps aux | grep {検索したいワード}
```

### 実行中のプロセスを強制的に終わらせる

```shell
kill {終了させたいプロセスの番号}
```

### 過去の実行コマンドの履歴を出力する

```shell

history
```

#### 過去の実行コマンドから特定のワードが含まれるものを出力する

```shell
history | grep {検索したいワード}
```

## ファイルに関するもの

### ファイル・ディレクトリの一覧表示

- ls ← `list`

#### 隠しファイル（ `.`始まり）も表示したい時

```shell
ls -a
```

#### ファイルサイズを単位つきでわかりやすくしたい時

```shell
ls -lh
```

##### オプションは組み合わせられます

```shell
ls -lah
```

### ファイルコピー

#### ファイルを別の場所にコピーする

```shell

cp {コピー元ファイル名} {コピー先ディレクトリ}
```

#### ファイルの中身を別のファイルにコピーする（別名で保存する）

```shell
cp {コピー元ファイル名} {コピー先ファイル名}
```

### ファイル検索

#### 全ファイルから、ファイル名に特定のワードが含まれるファイルを出力する

```shell
find / -type f -name {検索したいワード}
```

- `/` の検索先が全てのディレクトリ（＝全てのファイル）を表します
- 検索には `*` のワイルドカードを利用します。利用しない場合は、一意のファイル名検索となります
- ファイルではなくディレクトリを検索したい場合は、 `-type d` にします

##### 例えば、ファイル名に `test` が含まれるファイルを出力したい場合

```shell
find / -type f -name `*test*`
```

### 全ファイルから、特定の期間に更新されたファイルを出力する

- `mtime` ← `modified time`

```shell
find / -type f -mtime {数字}
```

#### 例えば、現在時刻から三日(72時間)以内に更新されたファイルの場合

```shell
find / -type f -mtime -3
```

####  例えば、現在時刻から三日以上前に更新されたファイルの場合

```shell
find / -type f -mtime +3
```
#### 例えば、現在時刻から三日前(72時間前〜96時間前)の間に更新されたファイルの場合

```shell
find / -type f -mtime 3
```

### 全ファイルから、特定の期間にアクセスされたファイルを出力する

- `atime` ← `accessed time`

```shell
find / -type f -atime {数字}
```

例は `mtime`を参考にしてください。

### 全ファイルから、特定の日時にアクセスされたファイルを出力する

```shell
find / -type f -daystart -atime {数字}
```

- `-daystart`オプションで、1日の始まりを0時とすることができます

#### 例えば、三日前の0時から24時の間にアクセスされたファイルを出力する

```shell
find / -type f -daystart -atime 3
```

- `mtime` の例のような期間指定もできます

#### 現在のディレクトリ以下から、ファイル内テキストに特定のワードが含まれるファイルを出力する

```shell
grep ./ {検索したいワード} -slr *
```

- `-s` オプションでディレクトリの場合の出力（エラー出力）をスキップします
- `-l` オプションでファイル名だけ出力するようにします
- `-r` オプションでディレクトリ内のさらにディレクトリに再起的に検索を行います

#### あるファイルの中で特定のワードが含まれる列を出力する

```shell
grep {検索対象のファイル} {検索したいワード} * -sn
```

- `-n` オプションで行数表示させます

##### 例えば、 `syslog` に出力された `rc.local` の実行に関するログを見たい場合

```shell
grep /var/log/syslog rc.local * -sn
```

### ファイル転送

#### 手元の端末から別端末にファイルを転送する（SSHログインが必要）

```shell
scp {送信したいファイル} {ログインユーザ}@{送信先のIP}:{送信先フォルダ}
```

##### 例えば、 `user1` というログインユーザを利用して、IPアドレス `192.168.0.10` の端末に入って、そのディレクトリの `/home/` 以下にファイル `test_script.sh` を置きたい場合

```shell
scp test_script.sh user1@192.168.0.10:/home/
```

#### 別端末から手元の端末にファイルを転送する（SSHログインが必要）

上の方法の「送信元」と「送信先」を入れ替えただけです。

```shell
scp {ログインユーザ}@{送信元のIP}:{送信元ファイル} {送信先}
```

### ログファイル

####  ログファイル名を指定し、ファイルの最終行から遡って10行分のログを表示し続ける

```shell
tail -F {コンソールに出力したいログファイル名}
```

- 途中でログローテートなどによりファイル名が変更された場合は、同名のファイルをもう一度探し、開き直してくれます
- ファイル名変更後も引き続き同じファイルを参照し続けたい場合は、`-F` オプションの代わりに `-f` を使います
- 行数を指定する場合は `-n` オプションを利用します
- コンソールがログ出力で占拠されるので、別ターミナルを開くなどの工夫が必要です

### 圧縮ファイル

#### `.xz` ファイルを解凍する

```shell

xz -d {file_name}.xz
```

#### 圧縮されたファイルとは別のファイルとして解凍ファイルを作成する

```shell
xz -d {file_name}.xz --keep
```

#### ファイルを `.xz` 形式で圧縮する

```shell
xz -z {file_name}
```

- オプション指定で別の形式を選べます

#### 元ファイルとは別のファイルとして圧縮ファイルを作成する

```shell
xz -z {file_name} --keep
```