Ubuntuサーバーのチートシート

# 概要

Ubuntuサーバー使うと思って、HP見たらこんなのがあったのでありがたく使った。

https://assets.ubuntu.com/v1/f401c3f4-Ubuntu_Server_CLI_pro_tips_2020-04.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1523062/49ddf616-abb5-499c-d0e7-72849ad167bf.png)


これの日本語訳をして備忘録にします。

# 内容

以下が基本的なコマンドです。

## ネットワーク

**すべてのインターフェースのIPアドレスを見る**
```
networkctl status
```
**ホストに割り当てられたすべてのIPアドレスを見る**
```
hostname -I
```
**インターフェースを有効化、無効かする**
```
ip link set <interface> up
ip link set <interface> down
```
**ファイアウォールのルールを管理する**
```
sudo ufw enable         # ファイアウォールを有効化する
sudo ufw status         # ルールの一覧表示
sudo ufw allow <port>   # ポートの通信を許可する
sudo ufw deny <port>    # ポートの通信を禁止する
```
**ネットワーク越しにSSHで接続する**
```
ssh <user>@<host IP>
```

## セキュリティ

**誰がログインしているか確認する**
```
w
```
**<user>のパスワードの有効期限を取得する**
```
chage -l <user>
```
**<user>のパスワードの有効期限をセットする**
```
sudo chage <user>
```
**ユーザーアカウントをロックする**
```
sudo passwd -l <user>
```
**ユーザーアカウントのロックを解除する**
```
sudo passwd -u <user>
```
**開いているポートと関連するプロセスを一覧表示する**
```
sudo netstat -tulpn
```
**不正な IP アドレスを自動的に検出して禁止**
```
sudo apt install fail2ban
```
**BANされたIPアドレスの表示**
```
sudo fail2ban-client status
sudo fail2ban-client status <jail>
```
**インストール済みパッケージのサポート状況を取得する**
```
ubuntu-support-status
```
**カーネルのライブパッチを有効にする**
```
sudo snap install canonical-livepatch
sudo canonical-livepatch enable <token>
```
https://ubuntu.com/livepatch にアクセスして、最大 3 台のマシンの無料トークンを取得してください。

## パッケージ

**パッケージを検索する**
```
apt search <string>
```
**アップデート可能なパッケージを一覧表示する**
```
apt list --upgradable
```
**利用できるアップデートをすべて実行する**
```
sudo apt update && sudo apt upgrade
```
**Ubuntuのアーカイブからインストールする**
```
sudo apt install <package>
```
*Snapストアからインストールする**
```
sudo snap install <package>
```
**このファイルを提供するファイルはどれですか？**
```
sudo apt install apt-file
sudo apt-file update
apt-file <filename or command>
```

## ファイル

**ファイルを一覧表示する**
```
ls
```
**権限と日時と一緒にファイルを一覧表示する**
```
ls -al
```
**一般的なファイルの操作***
```
touch <filename>               # 空のファイルを作る
echo "<content>" > <filename>  # contentをが入ったファイルを作る
echo "<content>" >> <filename> # ファイルにcontentを追加する
cat <file>                     # テキストファイルを表示する
cp <file> <target filename>    # コピーする
mv <file> <target name>        # 移動か名前変更する
rm <file>                      # 消す
mkdir <directory>              # ディレクトリを作る
mkdir -p <dir1>/<dir2>         # ディレクトリを再帰的に作成する
rm -r <directory>              # ディレクトリを再帰的に削除する
locate <q>                     # 簡単なファイル検索
grep <string> <filename>       # ファイルから文字列を検索
grep -Iris <str> <directory>   # ディレクトリ内で文字列を再帰的に検索する
```

ここから上級コマンドです。

## ファイル
**過去`n`分間に変更されたファイルを検索**
```
find <directory> -mmin -<n> -type f
```
例）`find . -mmin -5 -type f`

**`n`番目の列のみを表示**
```
col<n> “<separator>” <filename>
```
eg. `col2 “,” foo.csv`

**ファイルをページ分割して表示する**
```
less <filename>
```
**最初の`n`行を表示する**
```
head -n <n> <filename>
```
**最後の`n`行を表示する。**
```
tail -n <n> <filename>
```
**増加するファイルの内容をたどる**
```
tail -f <filename>
```
**ディレクトリをアーカイブに圧縮する**
```
zip -r <target> <source dir>            # Zip
tar cvzf <target>.tar.gz <source dir>   # tar.gz
```
**アーカイブを解凍する**
```
unzip <zip file>      # zip
tar xf <tar.gz file>  # tar.gz
```
**ファイルをリモートサーバーにコピーする**
```
scp <filename> <user@server>:<destination>
```
例）`scp config.yaml admin@192.0.0.0:/config`

**ローカルにファイルをコピーする**
```
scp -r <user@server>:<source> <destination>
```
例）`scp -r admin@192.0.0.0:/config /tmp`

## システム

**カーネルのバージョンを表示する**
```
uname -r
```
**ディスク使用量を取得する**
```
df -h
```
**メモリ使用量を取得する**
```
cat /proc/meminfo
```
**システム時刻を取得する**
```
timedatectl status
```
**システムのタイムゾーンを設定する**
```
timedatectl list-timezones
sudo timedatectl set-timezone <zone>
```
**実行中のすべてのサービスを取得する**
```
systemctl --state running
```
**サービスを開始または停止する**
```
service <service> start/stop
```
**サービスの新しいログを監視する**
```
journalctl -u <service> --since now -f
```
**最近のログインのリストを取得する**
```
last
```
**実行中のプロセスを表示する**
```
htop
```
**ID でプロセスを強制終了する**
```
kill <PID>
```
**プロセス名でプロセスを強制終了**
```
pkill  <process name>
```
**コマンドをバックグラウンドで実行する**
```
<command> &
```
**バックグラウンドで動いているコマンドを表示する**
```
jobs
```
**`n`番目のコマンドを最前面に移動する**
```
fg <n>
```

## Kubernetesとコンテナ

**MicroK8 をインストールし、利用可能なアドオンを一覧表示する**
```
sudo snap install microk8s --classic
microk8s.status --wait-ready
```
**MicroK8sアドオンを有効にする**
```
microk8s.enable <service>
```
**MicroK8sノードと実行中のサービスを表示する**
```
microk8s.kubectl get nodes
microk8s.kubectl get services
```
http://microk8s.io/docs で、MicroK8 のその他のヘルプを参照してください。

**LXD コンテナを起動する**
```
lxd init
lxc launch ubuntu:18.04 <container name>
```
（別のディストリビューション）
```
lxc launch images:centos/8/amd64 <container name>
```
**LXDコンテナのシェルを取得する**
```
lxc exec <name> -- /bin/bash
```
**ファイルをLXDコンテナにプッシュする**
```
lxc file push <filename> <container name>/<path>
```
**LXD コンテナーからファイルをプルする**
```
lxc file pull <destination> <container name>/<file path>
```
http://linuxcontainers.org/lxd でのその他のLXDヘルプを読んでください

## 仮想化

**MultipassをインストールしてUbuntu VMを起動する**
```
sudo snap install multipass --classic
multipass launch <image> --name <VM name>
```
`<image>`を省略すると、最新のUbuntu LTSでVMが起動されます。

**利用可能な画像を探す**
```
multipass find
```
**既存のVMを一覧表示する**
```
multipass list
```
**VM内のシェルを取得する**
```
multipass shell <VM name>
```
マルチパスのその他のヘルプはこちら。 http://discourse.ubuntu.com

## OpenStack

OpenStack をインストールしてインスタンスを起動する
```
sudo snap install microstack --classic
sudo microstack.init
microstack.launch
```
Horizon ダッシュボードは`10.20.20.1`で利用可能です
デフォルトの認証情報は: `admin` / `keystone`
http://microstack.run/docs でMicroStackのその他のヘルプが見られます。

# 感想

知らないコマンドがたくさんありました。
とても面白かったです。
実務以外にもCTFやHardeningに生かせそう！