こんにちは!
インフラエンジニアを目指している方、または現在エンジニアとして働いているけれど「Linuxをもっと体系的に学びたい」と感じている方はいませんか?
私も最初の頃は、Linuxのコマンドを調べながら作業していましたが、基礎的な理解が不足していたため、なぜそのコマンドを使うのか、どういう仕組みで動いているのかがよく分からない状態でした。
現代のIT業界において、Linuxは圧倒的なシェアを持つサーバOSです。クラウドサービスの普及により、その重要性はさらに高まっています。AWSやGoogle Cloud、Microsoft Azureなどの主要クラウドプラットフォームでも、Linuxが標準的に使用されています。
今回は、インフラエンジニアにとって必須のLinux知識について、「サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本」の内容を参考に、基礎から実践まで分かりやすく解説していきます!
なぜインフラエンジニアにLinuxが必要なのか
現代のIT基盤を支えるLinux
Linux系OSは、現在のIT基盤において圧倒的な存在感を持っています。
Linuxが選ばれる理由:
- 高い安定性: 長時間の連続稼働が可能
- 優れた性能: 効率的なリソース利用
- 豊富なソフトウェア: オープンソースの豊富なエコシステム
- コスト効率: ライセンス費用が不要
- カスタマイズ性: 用途に応じた柔軟な調整が可能
企業のWebサーバ、データベースサーバ、アプリケーションサーバの多くがLinux上で動作しており、インフラエンジニアがLinuxを理解していることは業務上必須となっています。
クラウド時代におけるLinuxの重要性
特にクラウド環境では、Linuxの知識がより重要になっています。
クラウドでのLinux活用例:
- Amazon EC2: Amazon Linux、Ubuntu、CentOSなど
- Google Compute Engine: Ubuntu、CentOS、Debian
- Microsoft Azure: Ubuntu、Red Hat Enterprise Linux
クラウドインスタンスの多くはLinuxベースであり、適切な設定・運用にはLinuxの深い理解が不可欠です。
また、コンテナ技術(Docker、Kubernetes)もLinux上で動作するため、現代的なインフラ構築においてLinuxスキルは避けて通れない技術となっています。
Linuxの基礎をしっかり学びたい方には、「サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本」がおすすめです。実務に直結する知識が体系的にまとめられています。
サーバの基本的な構成を理解しよう
サーバハードウェアの基礎知識
サーバを適切に運用するには、ハードウェアの基本的な構成を理解する必要があります。
サーバの主要コンポーネント:
CPU(プロセッサ):
- サーバの処理能力を決定する中核部品
- コア数とクロック速度が性能に影響
- Intel Xeon、AMD EPYCなどのサーバ向けCPUが主流
メモリ(RAM):
- データの一時保存領域
- 容量が大きいほど多くのプロセスを同時実行可能
- ECC(Error Correcting Code)メモリでデータ保護
ストレージ:
- HDD: 大容量で安価、回転部品のため故障リスクあり
- SSD: 高速で省電力、価格は高め
- NVMe SSD: さらに高速なインターフェース
ネットワークインターフェース:
- 1Gbps、10Gbps、25Gbpsなど
- 冗長性のため複数ポートを搭載することが多い
物理サーバと仮想サーバの違い
現代のインフラでは、物理サーバと仮想サーバの両方を理解する必要があります。
物理サーバ(ベアメタル):
- ハードウェアリソースを直接利用
- 最高の性能を発揮可能
- 初期投資とメンテナンスコストが高い
仮想サーバ:
- 物理サーバ上で複数のOSを同時実行
- リソースの効率的な利用が可能
- 柔軟なスケーリングと管理
クラウドインスタンス:
- クラウドプロバイダが提供する仮想サーバ
- 必要な時に必要な分だけ利用可能
- 従量課金でコスト最適化
サーバの役割と種類
用途に応じて、サーバには様々な役割があります。
Webサーバ:
- Apache HTTP Server、Nginx
- HTTPリクエストを処理してWebページを配信
アプリケーションサーバ:
- Tomcat、Node.js、Python(Django/Flask)
- ビジネスロジックを実行
データベースサーバ:
- MySQL、PostgreSQL、MongoDB
- データの永続化と高速検索
ファイルサーバ:
- NFS、Samba
- ファイル共有とバックアップ
プロキシサーバ:
- Squid、HAProxy
- 負荷分散とキャッシュ
これらの役割を理解することで、適切なサーバ設計と運用が可能になります。
Linuxの基礎知識
Linuxディストリビューションの特徴
Linuxには多くのディストリビューション(配布版)があり、それぞれ特徴があります。
主要なLinuxディストリビューション:
Red Hat系:
- Red Hat Enterprise Linux (RHEL): エンタープライズ向け、有償サポート
- CentOS: RHELのクローン、無償で利用可能
- Fedora: 最新技術をいち早く取り入れる
- Rocky Linux: CentOSの後継として注目
Debian系:
- Debian: 安定性重視、厳格な品質管理
- Ubuntu: 使いやすさと最新技術のバランス
- Ubuntu Server: サーバ用途に最適化
その他:
- SUSE Linux: ヨーロッパで強いシェア
- Amazon Linux: AWS環境に最適化
- Alpine Linux: 軽量でセキュリティ重視
ファイルシステムの構造
Linuxのファイルシステムは階層構造になっており、全てのファイルとディレクトリは「/」(ルート)から始まります。
主要なディレクトリの役割:
/ # ルートディレクトリ(全ての起点)
├── bin/ # 基本的なコマンド
├── etc/ # 設定ファイル
├── home/ # ユーザーのホームディレクトリ
├── var/ # ログファイル、一時ファイル
├── usr/ # ユーザープログラム
├── opt/ # オプションソフトウェア
├── tmp/ # 一時ファイル
└── proc/ # プロセス情報(仮想ファイルシステム)
重要な設定ファイル:
/etc/passwd
: ユーザー情報/etc/group
: グループ情報/etc/hosts
: ホスト名とIPアドレスの対応/etc/fstab
: ファイルシステムのマウント設定/var/log/
: 各種ログファイル
プロセスとサービスの概念
Linuxでは、実行中のプログラムを「プロセス」と呼びます。
プロセスの特徴:
- 各プロセスには一意のPID(Process ID)が割り当てられる
- 親プロセスと子プロセスの関係がある
- プロセス間でリソースを共有
サービス(デーモン):
- バックグラウンドで継続的に動作するプロセス
- システム起動時に自動で開始
- 例:SSH(sshd)、Web(httpd/nginx)、データベース(mysqld)
systemd(システム管理):
- 現代的なLinuxディストリビューションで使用
- サービスの開始・停止・監視を統合管理
systemctl
コマンドでサービス制御
これらの基礎概念を理解することで、Linuxシステムの動作原理が見えてきます。
実践的なLinux知識をさらに深めたい方は、「サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本」で体系的に学習することをお勧めします。
Linux基本操作をマスターしよう
基本的なコマンド操作
Linuxの操作は主にコマンドライン(CLI)で行います。基本的なコマンドを覚えることで、効率的なサーバ管理が可能になります。
システム情報の確認:
# システム情報表示
uname -a # カーネル情報
cat /etc/os-release # OS情報
uptime # 稼働時間と負荷
free -h # メモリ使用量
df -h # ディスク使用量
プロセス管理:
# プロセス確認
ps aux # 全プロセス表示
top # リアルタイム監視
htop # より見やすいプロセス監視
kill [PID] # プロセス終了
killall [プロセス名] # 名前でプロセス終了
ネットワーク確認:
# ネットワーク状態
ip addr show # IPアドレス確認
netstat -tulpn # ポート使用状況
ss -tulpn # 新しいnetstatの代替
ping [ホスト名] # 疎通確認
ファイル・ディレクトリ操作
効率的なファイル操作は、日常的なサーバ管理の基本です。
基本的なファイル操作:
# ディレクトリ移動・確認
pwd # 現在のディレクトリ
cd [ディレクトリ] # ディレクトリ移動
ls -la # ファイル一覧(詳細表示)
# ファイル・ディレクトリ作成
mkdir [ディレクトリ名] # ディレクトリ作成
touch [ファイル名] # 空ファイル作成
# ファイル操作
cp [元] [先] # ファイルコピー
mv [元] [先] # ファイル移動・名前変更
rm [ファイル名] # ファイル削除
rm -rf [ディレクトリ] # ディレクトリ削除(注意)
権限管理:
# 権限確認・変更
ls -l # 権限表示
chmod 755 [ファイル] # 権限変更(数値)
chmod u+x [ファイル] # 権限変更(記号)
chown user:group [ファイル] # 所有者変更
テキスト処理とパイプライン
Linuxの強力な機能の一つが、テキスト処理とパイプラインです。
ファイル内容の確認:
# ファイル表示
cat [ファイル] # 全内容表示
less [ファイル] # ページング表示
head -n 10 [ファイル] # 先頭10行表示
tail -n 10 [ファイル] # 末尾10行表示
tail -f [ファイル] # リアルタイム監視
テキスト検索・処理:
# 検索
grep "パターン" [ファイル] # 文字列検索
grep -r "パターン" [ディレクトリ] # 再帰検索
find /path -name "*.log" # ファイル検索
# テキスト処理
sed 's/old/new/g' [ファイル] # 文字列置換
awk '{print $1}' [ファイル] # 列抽出
sort [ファイル] # ソート
uniq [ファイル] # 重複削除
パイプラインの活用:
# 複数コマンドの組み合わせ
ps aux | grep nginx # nginxプロセス検索
cat access.log | grep "404" | wc -l # 404エラー数カウント
df -h | sort -k5 -nr # ディスク使用率順ソート
プロセス管理の基本
サーバの安定運用には、適切なプロセス管理が不可欠です。
サービス管理(systemd):
# サービス操作
systemctl status [サービス名] # 状態確認
systemctl start [サービス名] # サービス開始
systemctl stop [サービス名] # サービス停止
systemctl restart [サービス名] # サービス再起動
systemctl enable [サービス名] # 自動起動有効
systemctl disable [サービス名] # 自動起動無効
ログ確認:
# systemdログ
journalctl -u [サービス名] # サービスログ確認
journalctl -f # リアルタイムログ
journalctl --since "1 hour ago" # 1時間前からのログ
# 従来のログファイル
tail -f /var/log/messages # システムログ
tail -f /var/log/secure # 認証ログ
これらのコマンドを習得することで、効率的なLinuxサーバ管理が可能になります。
Linuxサーバのネットワーク操作
ネットワーク設定の基本
Linuxサーバの適切なネットワーク設定は、安全で効率的なサービス提供の基盤となります。
ネットワーク情報の確認:
# ネットワークインターフェース確認
ip addr show # IPアドレス確認
ip route show # ルーティングテーブル
nmcli device status # NetworkManager状態(CentOS/RHEL)
ネットワーク設定(永続化):
CentOS/RHEL系の場合:
# 設定ファイル編集
/etc/sysconfig/network-scripts/ifcfg-eth0
Ubuntu/Debian系の場合:
# Netplan設定(Ubuntu 18.04以降)
/etc/netplan/01-netcfg.yaml
DNS設定:
# DNS設定ファイル
/etc/resolv.conf # DNS設定
/etc/hosts # ローカルホスト名解決
# DNS確認コマンド
nslookup [ドメイン名] # DNS問い合わせ
dig [ドメイン名] # 詳細なDNS情報
ファイアウォール設定
セキュリティの基本として、ファイアウォール設定は必須です。
firewalld(CentOS/RHEL 7以降):
# 基本操作
firewall-cmd --state # 状態確認
firewall-cmd --list-all # 設定一覧
firewall-cmd --add-service=http --permanent # HTTP許可
firewall-cmd --add-port=8080/tcp --permanent # ポート許可
firewall-cmd --reload # 設定リロード
ufw(Ubuntu):
# 基本操作
ufw status # 状態確認
ufw enable # ファイアウォール有効化
ufw allow ssh # SSH許可
ufw allow 80/tcp # HTTP許可
ufw deny from 192.168.1.100 # 特定IPからの拒否
iptables(従来の方法):
# 基本操作
iptables -L # ルール一覧
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP許可
service iptables save # 設定保存
SSH接続とリモート管理
SSH(Secure Shell)は、安全なリモート管理の標準的な方法です。
SSH基本設定:
# SSH設定ファイル
/etc/ssh/sshd_config
# 重要な設定項目
Port 22 # ポート番号(変更推奨)
PermitRootLogin no # root直接ログイン禁止
PasswordAuthentication no # パスワード認証無効化
PubkeyAuthentication yes # 公開鍵認証有効化
SSH鍵認証設定:
# 鍵ペア生成(クライアント側)
ssh-keygen -t rsa -b 4096
# 公開鍵のサーバへのコピー
ssh-copy-id user@server
# SSH接続
ssh user@server
ssh -p 2222 user@server # 非標準ポート
安全なSSH運用:
- 強力なパスワードまたは鍵認証の使用
- 不要なサービスの停止
- 定期的なログ監視
- fail2banなどの侵入検知システムの導入
ログ管理とトラブルシューティング
効率的なトラブルシューティングには、適切なログ管理が不可欠です。
主要なログファイル:
/var/log/messages # 一般的なシステムログ
/var/log/secure # 認証関連ログ
/var/log/maillog # メール関連ログ
/var/log/cron # cron実行ログ
/var/log/httpd/ # Apacheログ
/var/log/nginx/ # Nginxログ
ログ監視コマンド:
# リアルタイム監視
tail -f /var/log/messages
journalctl -f
# ログ解析
grep "ERROR" /var/log/messages
awk '/Failed/ {print $1, $2, $3, $11}' /var/log/secure
トラブルシューティングの手順:
- 症状の確認: 何が起きているかを明確化
- ログの確認: 関連するログファイルをチェック
- リソース確認: CPU、メモリ、ディスクの使用状況
- ネットワーク確認: 接続状況とポート開放状態
- 設定確認: 関連する設定ファイルの検証
これらのネットワーク操作とトラブルシューティング技術を習得することで、安定したLinuxサーバ運用が可能になります。
詳細な設定方法や実践的なノウハウについては、「サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本」で学ぶことができます。
サーバ構築の実践ポイント
セキュリティ設定の基本
Linuxサーバを本番環境で運用する際は、適切なセキュリティ設定が不可欠です。
基本的なセキュリティ対策:
ユーザー管理の強化:
# 管理者ユーザーの作成
useradd -m -s /bin/bash adminuser
usermod -aG sudo adminuser # sudo権限付与(Ubuntu)
usermod -aG wheel adminuser # sudo権限付与(CentOS)
# パスワードポリシーの設定
/etc/login.defs # パスワード有効期限等
/etc/security/pwquality.conf # パスワード複雑性
不要なサービスの停止:
# 実行中サービスの確認
systemctl list-units --type=service --state=running
# 不要なサービスの停止・無効化
systemctl stop [サービス名]
systemctl disable [サービス名]
セキュリティアップデート:
# CentOS/RHEL
yum update -y
yum install yum-cron # 自動更新設定
# Ubuntu/Debian
apt update && apt upgrade -y
apt install unattended-upgrades # 自動更新設定
SELinux/AppArmorの活用:
# SELinux(CentOS/RHEL)
getenforce # 状態確認
setenforce 1 # 有効化
# AppArmor(Ubuntu)
aa-status # 状態確認
パフォーマンス監視
サーバの安定運用には、継続的なパフォーマンス監視が重要です。
リソース監視の基本:
CPU監視:
# CPU使用率確認
top # リアルタイム監視
htop # より見やすい表示
sar -u 1 10 # 1秒間隔で10回取得
# 負荷平均確認
uptime # 1分、5分、15分の負荷平均
w # ユーザーとプロセス情報
メモリ監視:
# メモリ使用状況
free -h # 人間が読みやすい表示
cat /proc/meminfo # 詳細なメモリ情報
vmstat 1 5 # 仮想メモリ統計
ディスク監視:
# ディスク使用量
df -h # ファイルシステム使用量
du -sh /var/log/* # ディレクトリ別使用量
lsof | grep deleted # 削除されたファイルを掴んでいるプロセス
# ディスクI/O
iostat -x 1 5 # I/O統計
iotop # プロセス別I/O監視
ネットワーク監視:
# ネットワーク統計
netstat -i # インターフェース統計
ss -tuln # ソケット状態
iftop # リアルタイムトラフィック監視
監視ツールの導入:
- Zabbix: 総合監視システム
- Nagios: ネットワーク監視
- Prometheus + Grafana: 現代的な監視スタック
- New Relic: クラウド監視サービス
バックアップとメンテナンス
データ保護と安定運用のために、適切なバックアップ戦略が必要です。
バックアップ戦略:
ファイルシステムバックアップ:
# rsyncを使用したバックアップ
rsync -av --delete /var/www/ /backup/www/
rsync -av -e ssh /var/www/ user@backup-server:/backup/www/
# tarを使用したアーカイブ
tar -czf backup_$(date +%Y%m%d).tar.gz /var/www/
データベースバックアップ:
# MySQL/MariaDB
mysqldump -u root -p database_name > backup.sql
mysqldump -u root -p --all-databases > all_databases.sql
# PostgreSQL
pg_dump -U postgres database_name > backup.sql
pg_dumpall -U postgres > all_databases.sql
自動バックアップの設定:
# cronジョブでの自動実行
crontab -e
# 毎日午前3時にバックアップ実行
0 3 * * * /path/to/backup-script.sh
システムメンテナンス:
ログローテーション:
# logrotateの設定
/etc/logrotate.conf # 基本設定
/etc/logrotate.d/ # サービス別設定
# 手動でのログローテーション実行
logrotate -f /etc/logrotate.conf
定期的なクリーンアップ:
# 古いログファイルの削除
find /var/log -name "*.log" -mtime +30 -delete
# 一時ファイルのクリーンアップ
rm -rf /tmp/*
rm -rf /var/tmp/*
# パッケージキャッシュのクリーンアップ
yum clean all # CentOS/RHEL
apt autoremove && apt autoclean # Ubuntu/Debian
これらの実践的なポイントを押さえることで、安全で安定したLinuxサーバ運用が可能になります。
インフラエンジニアとしてのLinux活用
自動化とスクリプト活用
効率的なインフラ運用には、繰り返し作業の自動化が不可欠です。
シェルスクリプトの基本:
基本的なスクリプト例:
#!/bin/bash
# システムヘルスチェックスクリプト
echo "=== システムヘルスチェック ==="
echo "日時: $(date)"
echo ""
echo "CPU使用率:"
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
echo "メモリ使用率:"
free | grep Mem | awk '{printf "%.2f%%\n", $3/$2*100}'
echo "ディスク使用率:"
df -h | grep -E '^/dev/' | awk '{print $5 " " $6}'
echo "負荷平均:"
uptime | awk -F'load average:' '{print $2}'
自動化の実例:
デプロイメントスクリプト:
#!/bin/bash
# Webアプリケーションデプロイスクリプト
APP_DIR="/var/www/html"
BACKUP_DIR="/backup/webapp"
GIT_REPO="https://github.com/user/webapp.git"
# バックアップ作成
cp -r $APP_DIR $BACKUP_DIR/$(date +%Y%m%d_%H%M%S)
# 最新コードの取得
cd $APP_DIR
git pull origin main
# 依存関係の更新
npm install
# サービス再起動
systemctl restart nginx
systemctl restart nodejs
echo "デプロイメント完了"
監視とアラートスクリプト:
#!/bin/bash
# ディスク使用量監視
THRESHOLD=80
DISK_USAGE=$(df / | grep -E "^/dev/" | awk '{print $5}' | cut -d'%' -f1)
if [ $DISK_USAGE -gt $THRESHOLD ]; then
echo "警告: ディスク使用量が${DISK_USAGE}%に達しました" | \
mail -s "ディスク容量アラート" admin@company.com
fi
継続的な学習とスキルアップ
Linux技術は常に進化しており、継続的な学習が重要です。
学習のロードマップ:
基礎レベル:
- ファイルシステムとコマンド操作
- ユーザー・権限管理
- プロセス管理とサービス制御
- 基本的なネットワーク設定
中級レベル:
- シェルスクリプト作成
- パフォーマンス監視と最適化
- セキュリティ設定の強化
- バックアップとリストア手順
上級レベル:
- カーネルパラメータの調整
- 高可用性クラスタ構築
- コンテナ技術(Docker、Podman)
- オーケストレーション(Kubernetes)
実践的な学習方法:
ラボ環境の構築:
- VirtualBoxやVMwareでの仮想環境
- クラウドサービスの無料枠活用(AWS Free Tier、Google Cloud)
- Raspberry Piでの物理環境
資格取得:
- LPIC: Linux Professional Institute Certification
- Red Hat Certified System Administrator (RHCSA)
- CompTIA Linux+: 基礎的なLinux知識の証明
実務での応用例
実際の業務でLinuxスキルがどのように活用されるかを理解することが重要です。
Webサービス運用:
- Nginx/Apacheの設定・運用
- SSL証明書の管理と更新
- ログ解析によるパフォーマンス最適化
- セキュリティインシデント対応
データベース運用:
- MySQL/PostgreSQLのインストール・設定
- パフォーマンスチューニング
- バックアップ・リストア手順
- レプリケーション設定
クラウドインフラ:
- AWS EC2インスタンスの管理
- Auto Scalingとロードバランサ設定
- CloudWatchによる監視設定
- Infrastructure as Code(Terraform、CloudFormation)
DevOps実践:
- CI/CDパイプラインの構築
- Dockerコンテナの運用
- Kubernetesクラスタ管理
- 監視・ログ集約システム構築
トラブルシューティング:
- パフォーマンス問題の特定と解決
- セキュリティインシデント対応
- システム障害の復旧作業
- 予防保全とキャパシティプランニング
これらの応用例を通じて、Linuxスキルは単なる技術知識から、ビジネス価値を生み出すエンジニアリング能力へと発展していきます。
体系的にLinuxを学び、実務に活かせるスキルを身につけたい方には、「サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本」がおすすめです。基礎から実践まで、現場で本当に必要な知識がバランスよくまとめられています。
まとめ
今回は、インフラエンジニアにとって必須のLinux基礎知識について、サーバ構築から運用まで幅広く解説しました。
Linuxの理解は、現代のIT基盤を支えるエンジニアにとって避けて通れないスキルです。クラウド時代においてその重要性はますます高まっており、適切な知識と実践経験を積むことで、より高度なインフラ設計・運用が可能になります。
今回カバーした主要なポイント:
- Linux基礎知識: ディストリビューション、ファイルシステム、プロセス管理
- 基本操作: コマンドライン操作、ファイル管理、テキスト処理
- ネットワーク設定: IP設定、ファイアウォール、SSH管理
- セキュリティ: ユーザー管理、アクセス制御、セキュリティ対策
- 運用管理: 監視、バックアップ、メンテナンス、トラブルシューティング
- 自動化: シェルスクリプト、デプロイメント自動化
これらの基礎をしっかり理解することで、以下のようなメリットが得られます:
- 効率的なサーバ管理: 適切なコマンド操作で迅速な作業が可能
- トラブル対応力: 問題の原因特定と適切な対処ができる
- セキュリティ意識: 安全なサーバ運用のベストプラクティスを実践
- 自動化スキル: 繰り返し作業の効率化と品質向上
- キャリアアップ: より高度なインフラ技術への発展基盤
Linuxは奥が深い技術領域ですが、基礎をしっかり固めることで、Docker、Kubernetes、クラウドサービスなどの最新技術も理解しやすくなります。
継続的な学習と実践を通じて、現代のIT基盤を支える優秀なインフラエンジニアを目指していきましょう!
実務で必要なLinux知識を体系的に学びたい方は、「サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本」をぜひ手に取ってみてください。今回の記事で触れた内容に加えて、ネットワーク、クラウド、セキュリティなど、インフラエンジニアに必要な幅広い知識が実践的にまとめられています。
コメント