0371.Blog

安全な CLI作業を行いたい

2022-07-01

こんにちは、0371です。
インフラの設定を安全に行えたらなと思っていたところ、良さげな動画を見つけたので、メモとして書き残していきます。
自分のようなインフラ作業初心者マンには学びになると思います。

動画の紹介

YOUTUBEで一般公開されています。 >【初級向け】安全・確実な作業で求められるLinuxコマンド

再生数が少ないのにびっくり。
初級向けと書いているからですかね?

LPI-JAPANが投稿した動画なので、ソースとしての信頼性は高いと勝手に思っています。

内容

どんなコマンドを使用しているかという点にフォーカスして紹介していきます。

作業前の確認編

まずはサーバにログインして、作業前にサーバの状態を確認します。

# 作業前の時刻確認
date

# ホスト名とIPアドレスを確認
uname -n; nmcli | grep inet4

# ログイン中のユーザがいないかの確認
w

# ログイン履歴の確認
last

# CPU、メモリ、プロセスの状態確認
top

# 関係するプロセスが存在するかの確認
ps -ef | grep プロセス名

# 必要なポートが開いているかの確認
ss -at | grep ポート名

ここまで確認したら、次のステップです。

ログ監視

作業を始めると思わせておいて、まだやることがあります。
ログの確認をしやすいように、複数のウィンドウでログの最新状態を常に更新するようにしておきます。

新しいターミナルウィンドウを作成して、サーバーにログインしてから下記のコマンドを実行してください。 使い方がわかる方は、tmuxを使用すると便利です。

# 日時の確認
date 

# サーバログをリアルタイムで継続表示
sudo journalctl -fu プロセス名

作業開始

ようやく、作業を開始していきます。
基本的には手順書のコピペになっていくと思いますが、実行前にコマンドを読み上げるなどして、コピペミスによる事故を防ぐのもいいかもしれません。

ここでは、部分的にコマンドを紹介していきます。

# ディレクトリ移動後の確認
cd /foo/bar/
pwd

pwdコマンドで自分自身がどのディレクトリにいるかを確認しています。
プロンプトに表示されない環境(su - を実行した場合)などに有効です。
意外と間違ったディレクトリに移動することがあるので、pwdコマンドを実行しておくと安心です。

# ファイルの中身を変更する前に必ずバックアップを取る
cp -p 変更するファイル バックアップファイル名

切り戻し(変更前の状態に戻すこと)を行うことが想定される場合がほとんどですので、バックアップファイルは必ず用意しておきましょう。

# vi ではなく、sedで変更する。
sed -i ~~~ 変更対象ファイル

vi で変更するのも良いのですが、変更箇所を誤ってしまう可能性があるため、sedで変更する方が安全です。
vi の方が楽かもしれませんが、何か起きた時の対処は楽ではないので、できるのであればsed コマンドにしましょう。

# 変更前と変更後の差分を確認
diff -U 0 変更前ファイル 変更後ファイル

自分が変更した箇所が合っているかの確認を行います。
diffの表示が見にくい場合は、下記のようにオプションを追加しても良いと思います。

diff -U 0 変更前ファイル 変更後ファイル -y -W 30 --suppress-common-lines

作業後の確認

作業後にもプロセスとポートの確認をします。

# 関係するプロセスが存在するかの確認
ps -ef | grep プロセス名

# 必要なポートが開いているかの確認
ss -at | grep ポート名

事後作業

作業後の後片付けを行います。

# 作業のコマンド履歴をファイルに保存する。
history >> ~/`date +%Y%m%d`_command_history.log

# 作業ファイルのバックアップを圧縮するディレクトリを作成する。
mkdir ~/`date +%Y%m%d`_backup

# 作業したファイルを全てコピー
cp -pv /foo/bar/files* ~/`date +%Y%m%d`_backup
cp -pv ~/`date +%Y%m%d`_command_history.log ~/`date +%Y%m%d`_backup

# 移動できたかの確認
ls -la ~/`date +%Y%m%d`_backup

# ディレクトリを圧縮
tar cvzf ~/`date +%Y%m%d`_backup.tar.gz ~/`date +%Y%m%d`_backup

# 圧縮できたかの確認
ls -l ~ | grep ~/`date +%Y%m%d`_backup.tar.gz

# ローカルからサーバーで圧縮したディレクトリを取得
### ローカルターミナル
scp -i 鍵ファイル -p サーバーホスト名:~/`date +%Y%m%d`_backup.tar.gz ./

# ローカルPCにコピーできたか確認
ls -l ~ | grep ~/`date +%Y%m%d`_backup.tar.gz

# サーバ側のバックアップディレクトリを削除する。
rm -rf ~/`date +%Y%m%d`_backup.tar.gz

# 作業終了時間を表示
date

# サーバーから抜ける
exit

以上で安全な作業が実現できると思います。
これらを全てシェルスクリプトで実行できれば、コピペミスがなくなってより安全で使い回しがしやすくなりそうですね。

今日の一言

うっかりミスを無くしたい😌
その2でございました。