設定ファイル編集時はバックアップを取ろう！方法をまとめた。

#はじめに
設定ファイル変更前後のバックアップ方法についてです。

[前回](
https://qiita.com/ume-san/items/6417390507fc3c710c54#7%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB)、WSL2(Ubuntu)からDBeaverへリモート接続するためにPostgreSQLの設定ファイルの変更をした際、「変更前のファイルと変更後のファイルのバックアップを取っておくべきだった」という教訓を得ました。

Ubuntuのファイルの扱い方がわかっていないので、バックアップの方法（ファイルコピーの方法）を、この記事にまとめていきたいと思います。

◆豆知識◆
設定ファイル変更時の慣習
「最近は環境構築をDockerで毎回サラッとできるようになったけど、以前は簡単なプログラミング言語で自動化させていた。その際に設定ファイルを変更させる前に「abc.config」を「abc_original.config」とかにコピーする慣習があった」by黒澤さん

# 環境
|||バージョン|
|:--|:--|:--|
|Host OS|Windows 10 Home|21H1(OSビルド:19043.1165)|
|Virtual Machine(仮想環境技術)|WSL2|-|
|Remote OS(仮想環境OS)|Ubuntu| 20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)|
|Database|PostgreSQL|12.7 (Ubuntu 12.7-0ubuntu0.20.04.1)|
|Docker|無し|-|
|エディタ|Visual Studio Code|1.60.0|

#これらの記事を参考にしました
参考1↓

https://oxynotes.com/?p=3865

参考2↓

https://blog.yuto-shin.net/2020/edit-config-file-linux/

#前回行なった方法と今回行なう改善策
【前回行なった方法】
参考1中の「コメントアウトを利用した編集の良い例、悪い例」に悪い例として掲載されている
「設定を直接書き換える」方法を取ってしまいました。

【改善策】
・オリジナルファイルをコピーし、バックアップとして残す。
・編集するファイルに「元の設定をコメントアウトで残す」&「コメントで変更の理由を追記する」


#変更前の設定ファイルをバックアップする
今回は試しに、PostgreSQLの設定ファイル「pg_hba.conf」について、
**①originalを表す「.org」という拡張子を追加して「pg_hba.conf.org」という名前でコピー
②元の設定をコメントアウトで残す
③コメントで変更の理由を追記する**
をしてみます。

（以下umesanはユーザー名）
（#＝rootユーザ、$＝一般ユーザ）

##⓪準備
1.ホストWin10のUbuntuのアイコンをクリックしUbuntu起動。
↓
2.（Ubuntu）`code`+Enter（VSCodeを起動）
（メモ：これまで「code .」で入っていたけれど「 .」が無くても同じ動作した）
↓
3.（VSCode）$`su`（rootユーザーでログインしなおす）
パスワード:　←rootユーザーのパスワードを求められるので入力
（※ここで最初「$　su」を実行したところ、Authentication failureというエラーが出たため[こちら](https://qiita.com/YGocho/items/bcf5563bdfa971a1c0ef)の方法で対処した。その後、パスワード入力に普通に進めるようになった。）
↓
3.（VSCode）root@MyComputer:~# `cd /etc/postgresql/12/main`
（「pg_hba.conf」が保存されているディレクトリへ移動）
↓
4.（VSCode）「root@MyComputer:/etc/postgresql/12/main#」と表示された。

##①拡張子「.org」を追加してコピー
4.（VSCode）root@MyComputer:/etc/postgresql/12/main# `cp pg_hba.conf pg_hba.conf.org`
で「pg_hba.conf」を開く前にコピーする。バックアップファイルの名前は「pg_hba.conf.org」とする。
（ファイルのコピーは「cp」コマンドの後に「コピーするファイル名＋半角スペース＋コピー後のファイル名」で指定する。）
（ここで何かしら「コピーできたよ！」的なコメントが表示されるのかと思いきや、何も表示されず。心配なのでviエディタで確認。）
↓
5.（VSCode）`vi pg_hba.conf.org`（pg_hba.conf.orgファイルを開く）
下のようにファイルの中身がviエディタで表示された。
<img width ="300" alt="1000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/0f1abb83-8948-0d6b-09c9-f6a263fbd9a9.png">
↓
6.（VSCode中で開いたviエディタ）`:q!`で終了。
↓
7.（VSCode）のターミナル画面に戻った。

<img width ="500" alt="1001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/a2b17b2a-ee9c-f925-f359-d4b9ba215bdc.png">

##②元の設定をコメントアウトで残す
本来であれば「pg_hba.conf」を編集するのですが、今回は「pg_hba.conf」は既に設定ファイルとして使用中なので、「pg_hba.conf.org」で「コメントアウトで残す」を試してみます。
最後の行をコメントアウトし、その下に新しい行を足してみます。

作業開始時の最終行の様子↓
<img width ="500" alt="2000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/76210b7a-ea5b-8606-7188-97c42e731c47.png">

1.`i`を押下し、コマンドモードから編集モードに切り替える。
（最終行に「-- INSERT --  」と表示される）
↓
2.コメントアウトしたい行のはじめに「#」と入力。
（行全体が白色から青色に変わる）
<img width ="500" alt="2001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/abf10177-056d-589e-0a76-285ce0275906.png">
↓
3.新たに「host replication all all md5」という1行を入力。
<img width ="500" alt="2003.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/c2972a2e-fe6e-e4a7-442b-459523eec5e2.png">
↓
②へ続く

##③コメントで変更の理由を追記する
4.変更した行の下へ「#」でコメントアウトしつつ変更理由を記述。今回は下赤枠のように書いてみた。
<img width ="500" alt="2007.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/47667264-07c8-b7b6-4728-85509a946eab.png">
↓
`Esc`キーを押下し、編集モードからコマンドモードに切り替える。
↓
:w押下で保存。
「"pg_hba.conf.org" 105L, 5143C written」という1行が表示された。
<img width ="500" alt="2008.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/c2651610-324e-fa50-40f3-ad6601bbe4fa.png">
↓
:q!で終了。
↓
（この画面に戻った）
<img width ="500" alt="2006.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/65f1645f-2f39-d704-af66-76e12de5379e.png">

#（今回のみ）バックアップしたファイルを削除
今回コピーしたファイル「pg_hba.conf.org」は既に前回変更済みのファイルで、既にオリジナルではないので、今後の誤解を避けるために削除しておきます。

参考＝[ファイル・ディレクトリを削除するrmコマンドについて詳しく！【Linuxコマンド集】](https://eng-entrance.com/linux_command_rm#rm-2)

1.（VSCode）root@MyComputer:/etc/postgresql/12/main# `rm pg_hba.conf.org`を実行。（「pg_hba.conf.org」ファイルを削除）
（特に「削除しました」等のコメントは表示されず。削除されたかどうか不安なのでviで確認します。）
↓
2.（VSCode）root@MyComputer:/etc/postgresql/12/main# `vi pg_hba.conf.org`（「pg_hba.conf.org」ファイルをviエディタで開く）
↓
3.このように表示された。
<img width ="300" alt="2010.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/b1e3bba5-c1c3-8e45-1a7d-82b505df768c.png">
ファイルが「~」になり、「New File」と表示された。きちんと削除できていた！
（New Fileと表示されているということは、新しいファイル作ってしまったという事？？このファイルを消す必要はあるのか？？と不安になったのでもう一度「rm pg_hba.conf.org」したら「rm: cannot remove 'pg_hba.conf.org': No such file or directory」とエラーが返された。再度のrmする必要はなかったみたい。）

#結論
設定ファイルを編集するときには・・・
「**バージョン管理**（orgファイルを作る&今回はやらなかったが、編集履歴がわかるようにファイル名の最後にバージョン名を加える）」と、
「**コメントの追加**」。
この2点を行なう！！