【Linux】viエディタでファイル編集する前後で実施するコマンド

Linux

viエディタの使い方については以下の記事でまとめています。

【Linux】viコマンドでファイルを編集する
Linuxでviコマンドを使用してファイルを編集する方法をまとめました。viコマンドでファイルを作成・編集する既にファイルが存在している状態でviコマンドの引数にファイルを指定すると、既に存在しているファイルを編集することができます。もし、...

本記事では、viエディタでファイルを編集する際に気をつける点などをまとめました。

この記事の例ではdnf.confを編集する例をもとに記事をまとめました。

編集するファイルの場所を検索する

編集予定のファイルの場所が分かっていれば気にしなくて問題ありませんが、どこのファイルを編集するか確認するためにファイルの場所を検索します。

今回はdnf.confを編集するので、dnf.confの格納場所を探します。

まずはcdコマンドで、最上位のディレクトリ、「/」へ移動します。

cd /

これはLinuxの最も上位のディレクトリです。このディレクトリ配下のファイルすべてに対してファイル名で検索をかけます。

find ./ -name dnf.conf

以下は上記コマンドの実行結果です。

[root@localhost ~]# cd /
[root@localhost /]#
[root@localhost /]#
[root@localhost /]# find ./ -name dnf.conf
./etc/dnf/protected.d/dnf.conf
./etc/dnf/dnf.conf
./usr/lib/tmpfiles.d/dnf.conf
[root@localhost /]#

cdコマンドでディレクトリの移動、lsコマンドでファイルの存在を確認

以下のコマンドでユーザーの今いるディレクトを移動できます。

cd

ディレクトリの先頭に/(スラッシュ)が記載されていれば絶対パスでユーザーが今いるディレクトリの位置に関係なく指定したディレクトリに移動します。

/(スラッシュ)が先頭についていなければ、ユーザーが今いるディレクトリ配下のディレクトリで該当するディレクトリがあった場合にその該当するディレクトリに移動します。

以下のコマンドを使用して、編集予定のファイルの状態を確認します。

ls -la

-lはファイルの詳細を表示するオプションです。

-aは隠しファイルも含めた全てのファイルを表示するオプションです。

以下のようにコマンドを実行することで、CDコマンドでユーザーのディレクトリを移動せずとも、該当のファイルの状態を確認できます。

ls -la <ファイルパス>

cdコマンドで状態を確認したいファイルのある場所へ移動している場合は、ls -laコマンドを実行するだけで問題ありません。

今回はdnf.confを例にファイルの状態を確認してみます。

[root@localhost ~]# ls -la /etc/dnf/dnf.conf
-rw-r--r--. 1 root root 108  9月  9  2022 /etc/dnf/dnf.conf
[root@localhost ~]#

cp -pコマンドでパーミッションを含めてファイルのバックアップコピーを作成

ファイルの状態をls -laコマンドで確認したら、今あるファイルのバックアップを作成します。

cp -p <コピー元ファイルパス> <コピー先ファイルパス>

cdコマンドでファイルのある場所に移動している場合は以下のようにファイルパスではなく、単にファイル名を入力すれば問題ありません。

cp -p <コピー元ファイル名> <コピー先ファイル名>

編集前のファイルのコピー実行例

今回はdnf.confを例にファイルのバックアップを作成します。バックアップを取るファイルの名前は、元のファイル名にバックアップを意味する「bk」をつける、もしくはバックアップファイルの作成日の日付を記載します。

[root@localhost ~]# cp -p /etc/dnf/dnf.conf /etc/dnf/dnf.confbk
[root@localhost ~]# cp -p /etc/dnf/dnf.conf /etc/dnf/dnf.conf20250213

diffコマンドでバックアップファイルを確認する

diffコマンドを実行してコピーしたファイルと元のファイルに差分がないことを確認します。

diff <コピー元ファイル名> <コピー先ファイル名>

diffコマンドでバックアップが作成されたことの確認例

/etc/dnf/dnf.confを例に操作してみます。

[root@localhost ~]# cp -p /etc/dnf/dnf.conf /etc/dnf/dnf.confbk
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# diff /etc/dnf/dnf.conf /etc/dnf/dnf.confbk
[root@localhost ~]#

バックアップが問題なく作成できていることが確認できました。

バックアップがうまく作成できていない場合は以下のようなメッセージが表示されます。

[root@localhost ~]# diff /etc/dnf/dnf.conf /etc/dnf/dnf.confbk
diff: /etc/dnf/dnf.confbk: そのようなファイルやディレクトリはありません

viエディタで対象のファイルを編集する

バックアップの作成が終わってるので、元のファイルをviコマンドで編集します。

再度diffコマンドでバックアップファイルとオリジナルファイルを比較

再度diffコマンドを実行して編集したファイルの中身を確認します。

正しく差分が表記されれば問題ありません。

diff <編集済みファイル名> <編集前のコピーファイル名>

ファイル編集後のdiffコマンド実行例

今回はdnf.confに以下を記載してdnf updateでカーネルのバージョンが上がらないようにする例を紹介します。

excludepkgs=kernel*

dnf.confに上記1行をつかして、編集前のbkファイルとdiffコマンドで比較すると以下のように表示されます。

[root@localhost ~]#
[root@localhost ~]# diff /etc/dnf/dnf.conf /etc/dnf/dnf.confbk
7d6
< excludepkgs=kernel*
[root@localhost ~]#

サービスによってはsystemctl restart <サービス名>を実行する

.confなどの定義ファイルを更新した際は、サービスの再起動が必要になる場合があるため、サービスの再起動が必要なサービスについては忘れずにサービスの再起動を実行しましょう。confファイルの編集によってサービスの再起動の必要があるかどうかはRed Hat Enterprise Linuxの公式サイトに記載があるので、確認しておきます。

systemctl コマンドの詳細はLinuxのmanコマンドで確認することができます。以下の記事でもsystemctlコマンドの詳細をまとめています。

まとめ

viコマンドでファイルを編集する前に必ず本記事でまとめた操作を実行しておきましょう。誤ってファイルを編集してしまった場合でもリカバリーがきくことがります。

タイトルとURLをコピーしました