個人的なメモ:journalctlの使い方や/var/logなど障害対応など面倒な問題が起きたときに使用するコマンド一覧

全てのログを表示：

```
sudo journalctl
```

ブート以降のログを表示：

```
sudo journalctl -b
```

指定したユニットのログを表示： 例：dnsmasq.serviceのログを表示

```
sudo journalctl -u dnsmasq.service
```

フィルタリングと検索

リアルタイムでログを表示：

```
sudo journalctl -f
```

エラーログのみを表示：

```
sudo journalctl -p err
```

指定した時間範囲のログを表示： 例：過去1時間のログを表示

```
sudo journalctl --since "1 hour ago"
```

詳細な解析

最終のブートセッションのログを表示：

```
sudo journalctl -b -1
```

カーネルログを表示：

```
sudo journalctl -k
```

システムメッセージ、エラーメッセージの詳細を表示：

```
sudo journalctl -xe
```

各サービスのログ確認

journalctl -u sshd
journalctl -u httpd
journalctl -u nginx
journalctl -u mysqld
journalctl -u cronie
journalctl -u updatedb
journalctl -u 'up*'

現在稼働中のサービスのリスト:

sudo systemctl list-units --type=service --state=running

nginxサービスの状態を確認

sudo systemctl status nginx

基本的なログ管理

sudo journalctl             # すべてのジャーナルログを表示
sudo journalctl -f          # リアルタイムでログを表示
sudo journalctl -u [unit]   # 特定のユニットのログを表示
sudo tail -f /var/log/syslog # リアルタイムでsyslogを表示
sudo less /var/log/syslog   # syslogをスクロールして閲覧

システムとプロセス管理
sudo systemctl list-units --type=service --state=running  # 起動中のサービスを表示
sudo systemctl status [service]  # サービスの状態を確認
sudo systemctl restart [service] # サービスを再起動
sudo ps aux                     # 現在のプロセス一覧を表示

ディスクとファイルシステム管理
df -h               # ディスク使用状況を表示
du -sh /path/to/dir # ディレクトリのサイズを表示
sudo fsck /dev/sdX  # ファイルシステムをチェック

ネットワーク管理

ip a                    # ネットワークインターフェースを表示
ping [host]             # ホストに対してpingを送信
sudo netstat -tuln      # 開いているポートとサービスを表示
sudo systemctl status network  # ネットワークサービスの状態を確認

Mail管理:

mailq                   # メールキューを表示
sudo postqueue -f       # メールキューをフラッシュ
sudo systemctl status postfix  # Postfixサービスの状態を確認

ファイルと権限管理
ls -l                  # ファイルリストを表示
chmod 755 /path/to/file # ファイルの権限を変更
chown user:group /path/to/file  # ファイルの所有者を変更

chmod権限リスト
以下は、chmodコマンドでよく使う権限のリストです：

記号	権限	説明
r	読み取り	ファイルの内容を読み取ることができる。
w	書き込み	ファイルの内容を変更することができる。
x	実行	ファイルを実行することができる

chmod 755 file.txt   # 所有者に読み書き実行、グループと他人に読み実行権限を付与
chmod 644 file.txt   # 所有者に読み書き、グループと他人に読み権限を付与
chmod 700 dir        # 所有者にすべての権限（読み書き実行）を付与

chownはファイルやディレクトリの所有者とグループを変更するためのコマンド。

chown [所有者]:[グループ] ファイルまたはディレクトリ
chown user1 file.txt       # 所有者をuser1に変更
chown user1:group1 file.txt  # 所有者をuser1、グループをgroup1に変更
chown -R user1:group1 dir/  # ディレクトリとその内部の全ファイルの所有者とグループを再帰的に変更

補足：「再帰的に変更」とは、指定したディレクトリの中にあるすべてのサブディレクトリやファイルに対して、同じ操作を適用することを意味します。つまり、ディレクトリだけでなく、その中に含まれるすべての内容物にも同じ所有者やグループの変更が行われるということです

dir/
├── file1.txt
├── file2.txt
└── subdir/
    ├── file3.txt
    └── file4.txt

この場合、chown -R user1:group1 dir/ コマンドを実行すると、以下のようにすべてのファイルとサブディレクトリの所有者とグループが user1:group1 に変更されます：

dir/file1.txt

dir/file2.txt

dir/subdir/

dir/subdir/file3.txt

dir/subdir/file4.txt

-R オプションを使用すると、再帰的に（recursive）そのディレクトリとその中のすべてのサブディレクトリおよびファイルに対して所有者とグループの変更が適用されます。つまり、/var以下のすべての内容にも影響が及びます。

sudo chown -R user1:group1 /var

このコマンドを実行すると、/varディレクトリおよびその中に含まれるすべてのサブディレクトリやファイルの所有者とグループがuser1:group1に変更されます。

-Rをつけなければ、/varディレクトリの所有者とグループをuser1:group1に変更しますが、/var内のサブディレクトリやファイルは影響を受けません。
例えばこれ：

sudo chown user1:group1 /var

その他：
## /var/log との違いと、Linuxサーバー（Debian系）の障害対応に必須のコマンド

### /var/log とは？

`/var/log` ディレクトリは、Linux システムのログファイルが保存される場所です。システムの起動や停止、アプリケーションのエラー、ユーザーのログインログなど、様々な種類のログがテキストファイルとして保存されています。

**主なログファイル:**

* **/var/log/messages:** システム全体の一般的なメッセージ
* **/var/log/syslog:** 古いシステムでの一般的なメッセージ（messagesと似ているが、システムによっては使われない）
* **/var/log/daemon.log:** デーモン（バックグラウンドで動作するプロセス）のログ
* **/var/log/auth.log:** 認証関連のログ（ユーザーログイン、sudo実行など）
* **/var/log/secure:** セキュリティ関連のログ（SSHログイン、su実行など）
* **/var/log/mail.log:** メールサーバーのログ
* **/var/log/apache2/error.log:** Apacheのエラーログ（例）
* **/var/log/nginx/error.log:** Nginxのエラーログ（例）

**/var/log と他のログの比較**

* **/var/log/kern.log:** カーネルのログ。より詳細なシステムの内部状態に関する情報が記録されます。
* **各アプリケーションのログ:** アプリケーションごとに専用のログディレクトリが用意されている場合があり、より詳細なアプリケーション固有のログが記録されます。

### 障害対応に必須のコマンド

Linux サーバー（Debian 系）の障害対応でよく利用されるコマンドを、カテゴリ別にまとめ:

#### システム情報取得

* **top, htop:** システムのリアルタイムな負荷状況を確認
* **free:** メモリの使用状況を確認
* **df, du:** ディスクの空き容量を確認
* **ps, pstree:** プロセスの状態を確認
* **netstat, ss:** ネットワーク接続の状態を確認
* **uptime:** システムの稼働時間と負荷平均を確認
* **vmstat:** 仮想メモリに関する統計情報を表示
* **iostat:** I/Oデバイスの統計情報を表示

#### ログ確認

* **tail:** ログファイルの末尾を表示
* **grep:** ログファイルから特定の文字列を検索
* **less:** ログファイルをページングして表示

#### ネットワーク

* **ping:** ネットワークの接続性を確認
* **traceroute:** ネットワークパケットの経路を確認
* **nslookup, dig:** DNSの問い合わせを行う
* **ifconfig, ip:** ネットワークインターフェースの設定を確認

#### ファイルシステム

* **ls, cd:** ディレクトリ内のファイル一覧を表示、ディレクトリ移動
* **cat, more, less:** ファイルの内容を表示
* **find:** ファイルを検索
* **grep:** ファイルの中から特定の文字列を検索
* **chmod:** ファイルのパーミッションを変更
* **chown:** ファイルの所有者を変更

#### プロセス管理

* **kill, killall:** プロセスを強制終了
* **systemctl:** systemdサービスの管理
* **service:** System V initシステムのサービス管理

#### パッケージ管理

* **apt:** Debian パッケージの管理

#### その他

* **journalctl:** systemdのログ管理
* **dmesg:** カーネルのメッセージを表示
* **locate:** ファイルの場所を検索

### メール

* **mail, mutt:** メールを送受信
* **ssmtp:** シンプルなメール転送エージェント
* **postfix, sendmail:** メール転送エージェント

### 障害対応の流れ

1. **ログを確認する:** 
   * `/var/log` ディレクトリ内のログファイルを確認し、エラーメッセージや異常な動作に関する情報を探します。
   * `journalctl` コマンドを使って、システム全体のログを検索します。
2. **システムの状態を確認する:**
   * `top`, `free`, `df` などのコマンドで、システムのリソース使用状況を確認します。
   * `netstat`, `ss` などのコマンドで、ネットワーク接続の状態を確認します。