【ITニュース解説】📦 My DevOps Journey: Part 4 — Archiving, Scheduling, Remote Access & System Administration Essentials
2025年09月16日に「Dev.to」が公開したITニュース「📦 My DevOps Journey: Part 4 — Archiving, Scheduling, Remote Access & System Administration Essentials」について初心者にもわかりやすく解説しています。
ITニュース概要
システムエンジニア向けに、Linuxでの実践的なシステム管理スキルを解説する。ファイルの圧縮・アーカイブ(tar)、タスク自動化(cron)、安全なリモート接続(SSHとキーペア)、仮想マシン活用法を、具体的なコマンド例を交えて紹介する。
ITニュース解説
システムエンジニアを目指す上で、Linuxの基本的な操作に加え、日々の運用作業を効率的かつ安全に進めるための実践的なツールを使いこなすことは不可欠だ。ここでは、ファイルをまとめて管理する方法、繰り返しの作業を自動化する方法、そして安全に遠隔操作する方法、さらには安全な検証環境を構築する方法について解説する。
まず、大量のファイルを効率的に扱うための「アーカイブと圧縮」について学ぶ。例えば、システムが毎日生成する何千ものログファイルをバックアップとして保存する場合、これらを一つずつコピーするのは非常に手間がかかるし、転送にも時間がかかる。このような時に役立つのが、複数のファイルを一つの大きなファイルにまとめる「アーカイブ」という機能だ。Linuxではtar(テープアーカイブ)コマンドを使う。例えば、/var/log/にあるすべてのログファイルをlogs.tarという一つのファイルにまとめるには、『tar -cvf logs.tar /var/log/』と入力する。『-c』はアーカイブの作成、『-v』は処理中のファイル名を表示、『-fは出力ファイル名を指定するという意味だ。こうして作成されたlogs.tarというファイルは、元の多数のファイルと比べて管理や転送が格段に楽になる。必要になったら、『tar -xvf logs.tar』で簡単に元のファイルを取り出せる。『-x』は展開を意味する。さらに、このアーカイブしたファイルを小さくするのが「圧縮」だ。例えば、gzipコマンドを使えば、demo.txtというファイルを『gzip demo.txt』と入力するだけで、demo.txt.gz`というより小さなファイルに変換できる。アーカイブと圧縮を組み合わせることで、大量のデータを効率的にバックアップし、保存し、転送できるようになる。
次に、毎日や毎週のように繰り返さなければならない作業を自動化する方法を学ぶ。システムのバックアップやログの定期的なクリーニングなど、これらを毎回手動で行うのは、忘れてしまったり、時間がかかったりして非常に非効率だ。そこで活躍するのが「cronジョブ」という仕組みだ。これは、指定した時間に特定のコマンドやスクリプトを自動で実行させるためのスケジュール機能だ。crontab -eコマンドを実行すると、cronジョブの設定ファイルを編集できる。このファイルに、『0 0 * * * /home/user/backup.sh』のような一行を追加すると、毎日午前0時に/home/user/backup.shというスクリプトが自動で実行されるようになる。『0 0 * * *』は、左から順に『分』『時』『日』『月』『曜日』を指定しており、この例では『毎日0時0分』を意味する。設定後、crontab -lコマンドで現在設定されているジョブを確認できる。ただし、cronジョブは環境変数が手動実行時と異なる場合があるため、注意が必要だ。例えば、Pythonスクリプトを実行しようとした際に、python3というコマンドが見つからずにエラーになることがあるが、これはcronが実行する際には、python3コマンドへの完全なパス(例: /usr/bin/python3)を指定してあげる必要があるためだ。スクリプトがうまく動かない時は、まず実行ファイルのフルパスを確認する習慣をつけると良い。
システムを安全に運用するためには、セキュリティの基本的な知識も不可欠だ。その中でも特に重要なのが、ユーザーの管理と権限の付与だ。複数の人がシステムを使う場合、全員に最高管理者と同じ権限を与えるのは危険である。そこで、sudo adduser devのように新しいユーザー(この場合はdev)を作成し、それぞれに必要最低限の権限を与えることが基本となる。例えば、開発者には開発に必要なファイルへのアクセス権だけを与え、システム全体の変更ができるsudo権限は原則として与えない。sudo usermod -aG sudo devコマンドを使えば、既存のユーザーdevにsudoグループを追加し、一時的に管理者権限でコマンドを実行できるようにする。しかし、このsudo権限をむやみに与えることは避けるべきだ。「最小権限の原則」と言って、ユーザーやプログラムには、その作業を行う上で必要最低限の権限のみを与えるべきだという考え方がある。これは、万が一システムが攻撃されたり、誤操作があったりした場合に、被害を最小限に抑えるための非常に重要なセキュリティ原則だ。
システムエンジニアは、自分の目の前にあるコンピューターだけでなく、遠く離れたデータセンターにあるサーバーを操作することが頻繁にある。このような時に使うのが「SSH(Secure Shell)」という技術だ。SSHを使うと、暗号化された安全な通信路を通じて、リモートのサーバーにコマンドを送信したり、ファイルを転送したりできる。基本的な接続方法は、『ssh user@192.168.1.10』のように、接続したいサーバーのユーザー名とIPアドレスを指定するだけだ。初めて接続する際は、多くの場合パスワードの入力を求められる。しかし、毎回パスワードを入力するのは手間がかかる。また、スクリプトで自動化する際にはパスワードの扱いがセキュリティ上の課題となることがある。パスワード認証を無効にすると、『Permission denied (publickey).』というエラーメッセージが表示されることがあるが、これはパスワード以外の認証方法が必要であることを示している。
そこで安全かつ効率的な解決策となるのが、「SSHキーペア」を使った認証だ。SSHキーペアは、秘密鍵と公開鍵という二つのファイルから構成される。秘密鍵は自分のコンピューターに厳重に保管し、公開鍵は接続したいサーバーに配置する。この二つが揃って初めて認証が成功するため、パスワードが不要になる上に、セキュリティも向上する。キーペアを生成するには、『ssh-keygen -t rsa -b 4096 -C "your_email@example.com"』というコマンドを使う。これにより、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)が生成される。次に、生成した公開鍵をサーバーにコピーする。これには、『ssh-copy-id user@192.168.1.10』という便利なコマンドがある。このコマンドを実行するだけで、指定したサーバーの適切な場所に公開鍵がコピーされる。一度この設定を完了すれば、次回からは『ssh user@192.168.1.10』と入力するだけで、パスワードなしでスムーズにサーバーにログインできるようになる。これは日々の作業効率を大きく向上させ、自動化の基盤となる非常に重要な技術だ。
システムに変更を加える際、本番環境のサーバーでいきなり試すのは非常に危険だ。もし設定ミスやプログラムのバグでシステムが停止してしまったら、大きな損害につながる可能性がある。そこで役立つのが「仮想マシン(VM)」だ。仮想マシンは、一台の物理的なコンピューター上で、複数の独立したコンピューターをソフトウェア的に動かす技術だ。これにより、本番環境に似た環境を安全に構築し、心ゆくまで試行錯誤できる「サンドボックス」として利用できる。例えば、VirtualBoxのようなソフトウェアを使ってUbuntuなどのOSをインストールした仮想マシンを作成し、その中でWebサーバーであるNginxをインストールしてみることができる。コマンドは『sudo apt install nginx -y』のように、実際のサーバーと同じように操作できる。Nginxが正しく動作しているかは、『systemctl status nginx』で確認可能だ。仮想マシンは、どんなに設定を壊してしまっても、元の状態に簡単に戻せる「スナップショット」機能があるため、安心して様々なことを試せる。これは、新しい技術を学ぶ際や、本番環境へのデプロイ前に動作確認を行う際に非常に重宝する。
ここまで見てきたように、ファイルのアーカイブと圧縮はデータの管理と転送を効率化し、cronジョブは繰り返しのタスクを自動化することで作業効率を劇的に向上させる。システムのセキュリティは最小権限の原則に基づいてユーザーと権限を適切に管理することが重要で、SSHとSCPは遠隔地のサーバーを安全に管理するための生命線となる。特にSSHキーペアは、パスワードなしの安全な自動化を実現するための基盤だ。そして仮想マシンは、新しい技術を試したり、本番環境への影響を心配せずに実験したりするための安全な練習場となる。これらのツールや概念は、システムエンジニアとして日々の業務を円滑に進める上で欠かせないものだ。しかし、これらのコマンドを一つずつ手で入力し続けるのは、やはり限界がある。そこで次のステップとして重要になるのが、複数のコマンドを組み合わせて一連の作業を自動化する「シェルスクリプト」だ。シェルスクリプトを習得することで、単なるコマンドの実行から、より複雑な自動化ワークフローの構築へとステップアップできる。変数や演算子、ループや条件分岐といったプログラミングの基本的な要素を学び、柔軟で再利用可能なスクリプトを作成する方法を深掘りしていく。これは、DevOpsエンジニアとして成長するための必須の段階であり、システムの運用と開発をよりスムーズに連携させるための鍵となるだろう。