インフラ レッスン2
Linux基礎
コマンドライン、ファイル操作、権限管理を学ぼう
Linuxファイルシステム
Linuxではすべてのファイルがルートディレクトリ(/)を 起点としたツリー構造で管理されています。Windowsのようなドライブレター(C:、D:)はありません。
/ ← ルートディレクトリ
├── bin/ ← 基本コマンド(ls, cp, mv 等)
├── etc/ ← 設定ファイル(nginx.conf, hosts 等)
├── home/ ← ユーザーのホームディレクトリ
│ ├── tanaka/
│ └── suzuki/
├── var/ ← ログ、データ(/var/log, /var/www)
├── tmp/ ← 一時ファイル
├── usr/ ← ユーザー用プログラム
│ ├── bin/
│ └── local/
├── opt/ ← オプションソフトウェア
└── proc/ ← プロセス情報(仮想ファイルシステム)重要なディレクトリの役割を把握しておくと、設定ファイルの場所やログの確認がスムーズになります。
基本コマンド
Linuxの操作はターミナル(コマンドライン)から行います。ファイルやディレクトリの操作は 最も基本的で頻繁に使うスキルです。
# ファイル・ディレクトリの一覧表示
$ ls # 現在のディレクトリの内容を表示
$ ls -la # 隠しファイル含む詳細表示
$ ls -lh # ファイルサイズを読みやすく表示
# ディレクトリの移動
$ cd /var/log # 絶対パスで移動
$ cd .. # 一つ上のディレクトリに移動
$ cd ~ # ホームディレクトリに移動
$ pwd # 現在のディレクトリのパスを表示
# ディレクトリの作成・削除
$ mkdir myproject # ディレクトリを作成
$ mkdir -p a/b/c # 深い階層を一度に作成
$ rmdir empty_dir # 空のディレクトリを削除# ファイルのコピー・移動・削除
$ cp file.txt backup.txt # ファイルをコピー
$ cp -r src/ dest/ # ディレクトリを再帰的にコピー
$ mv old.txt new.txt # ファイル名を変更(移動)
$ mv file.txt /tmp/ # ファイルを別の場所に移動
$ rm file.txt # ファイルを削除
$ rm -rf directory/ # ディレクトリを強制的に再帰削除(注意!)
# ファイルの中身を確認
$ cat file.txt # ファイル全体を表示
$ head -n 20 file.txt # 先頭20行を表示
$ tail -n 20 file.txt # 末尾20行を表示
$ tail -f /var/log/syslog # リアルタイムでログを監視
$ less file.txt # ページ送りで表示(q で終了)
$ grep "error" /var/log/syslog # 文字列を検索パーミッション(権限管理)
Linuxではファイルごとに所有者(owner)、グループ(group)、その他(others)の3つの権限を設定できます。
# ls -la の出力例
-rw-r--r-- 1 tanaka staff 1024 Jan 15 10:30 config.txt
drwxr-xr-x 5 tanaka staff 160 Jan 15 10:00 myproject/
# パーミッションの読み方
# -rw-r--r--
# │ │ │ │
# │ │ │ └── others: r-- (読み取りのみ)
# │ │ └───── group: r-- (読み取りのみ)
# │ └──────── owner: rw- (読み取り・書き込み)
# └─────────── ファイル種類 (- = ファイル, d = ディレクトリ)
# 数値表記: r=4, w=2, x=1
# rw-r--r-- = 644
# rwxr-xr-x = 755# 権限を変更する (chmod)
$ chmod 755 script.sh # rwxr-xr-x(実行可能に)
$ chmod 644 config.txt # rw-r--r--(読み取りのみ公開)
$ chmod +x deploy.sh # 実行権限を追加
$ chmod -w important.txt # 書き込み権限を削除
# 所有者を変更する (chown)
$ chown www-data:www-data /var/www/html # 所有者とグループを変更
$ chown -R tanaka:staff myproject/ # 再帰的に変更
# よく使うパーミッション
# 644 → 設定ファイル、HTMLファイル
# 755 → 実行スクリプト、ディレクトリ
# 600 → SSH秘密鍵、機密ファイル
# 700 → .ssh ディレクトリプロセス管理
Linuxでは実行中のプログラムをプロセスと呼びます。 サーバー運用ではプロセスの監視と管理が重要です。
# プロセスの確認
$ ps aux # 全プロセスを表示
$ ps aux | grep nginx # nginx関連のプロセスを検索
$ top # リアルタイムでプロセスを監視
$ htop # より見やすいプロセスモニター
# プロセスの終了
$ kill 1234 # PID 1234 のプロセスを終了(SIGTERM)
$ kill -9 1234 # 強制終了(SIGKILL)
$ killall nginx # nginx の全プロセスを終了
# サービス管理 (systemd)
$ systemctl start nginx # サービスを開始
$ systemctl stop nginx # サービスを停止
$ systemctl restart nginx # サービスを再起動
$ systemctl status nginx # サービスの状態を確認
$ systemctl enable nginx # OS起動時に自動起動
$ systemctl disable nginx # 自動起動を無効化SSH(リモート接続)
SSH(Secure Shell)は、リモートサーバーに 安全に接続するためのプロトコルです。公開鍵認証を使えばパスワードなしでログインできます。
# SSHで接続
$ ssh user@192.168.1.100 # IPアドレスで接続
$ ssh user@myserver.example.com # ドメイン名で接続
$ ssh -p 2222 user@server.com # ポート番号を指定
# SSH鍵ペアの生成
$ ssh-keygen -t ed25519 -C "your_email@example.com"
# → ~/.ssh/id_ed25519(秘密鍵)と ~/.ssh/id_ed25519.pub(公開鍵)が生成
# 公開鍵をサーバーに登録
$ ssh-copy-id user@server.com
# ~/.ssh/config で接続設定を簡略化
Host myserver
HostName 192.168.1.100
User tanaka
Port 22
IdentityFile ~/.ssh/id_ed25519
# 設定後は以下だけで接続可能
$ ssh myserver環境変数
環境変数はOS全体やプロセスで共有される変数です。 アプリケーションの設定値やシークレットを管理するのに使われます。
# 環境変数の確認
$ echo $HOME # ホームディレクトリのパス
$ echo $PATH # コマンドの検索パス
$ env # 全環境変数を表示
$ printenv NODE_ENV # 特定の環境変数を表示
# 環境変数の設定
$ export NODE_ENV=production # 現在のセッションに設定
$ export DATABASE_URL="postgres://user:pass@localhost:5432/mydb"
# 永続化(~/.bashrc または ~/.zshrc に追記)
$ echo 'export NODE_ENV=production' >> ~/.bashrc
$ source ~/.bashrc # 設定を再読み込み
# コマンド実行時のみ環境変数を設定
$ NODE_ENV=production npm start
# .env ファイルでの管理(アプリケーション側で読み込む)
# .env
DATABASE_URL=postgres://localhost:5432/mydb
API_KEY=your-secret-key
PORT=3000まとめ
- Linuxのファイルシステムはルート(/)を起点としたツリー構造
- ls、cd、cp、mv、rm などの基本コマンドでファイルを操作する
- chmod / chown でファイルの権限と所有者を管理する
- ps、kill、systemctl でプロセスとサービスを管理する
- SSHで安全にリモートサーバーに接続する(公開鍵認証推奨)
- 環境変数でアプリケーションの設定値を管理する