Linuxの設定ファイルの統一!

 設定ファイルの統一は面倒

たくさんのマシンを持っていると設定が面倒だったりしませんか?私は6台のマシン(持ちすぎ)を頻繁に使っています。そのせいでこっちのマシンの設定は変えたけどこっちは?…とかどこまで変えたっけ?など頻発しておりました

そのため今回思い切ってgitで管理しようと思いました。ただ、ディレクトリの配置などがだいぶ違うため、そのまま安直に管理することはできません…

lnコマンド

ここで使えると思ったのがlnコマンドです!windowsで言うところのショートカットですかね?これにより元ファイルは別のところで管理しつつ設定ファイルたちもリンクをたどって反映されるというわけです!一か所のgit管理でなんとかなります

www.atmarkit.co.jp

早速製作開始

専用ディレクトリの用意

適当な場所に設定ファイル格納用のディレクトリを準備します。この時にgitの設定もしておくといいでしょう

設定ファイルたちを集める

設定ファイルたちをそのディレクトリに集めます。このときわかりやすいようにディレクトリ名を変えてしまっても大丈夫です

リンクを作る!

設定ファイルたちのリンクをそれぞれの場所に用意します。これでgit管理がしやすくなりました

面倒なのでシェルを作りました

手作業が面倒なのでシェルを書きました。テスト段階で作りこんでない&ファイル数が少ないですが参考にしてみてください

ここでは.zshenv .zshrc starship.toml .ssh/config を配置してくれるようになっています

#!/bin/bash

# 作成するファイルとディレクトリ群
array_file=(".zshenv" ".zsh/.zshrc" ".config/starship.toml" ".ssh/config")
array_crent_file_name=("zshenv" "zshrc" "starship.toml" "ssh_config")
array_dir=(".zsh" ".config" ".ssh")

# カレントディレクトリを保存
run_DIR=$(cd $(dirname $0); pwd)
echo "CRENT_DIR:$run_DIR"
cd

# ディレクトリの作成
for i in ${array_dir[@]}; do

if [ ! -e "$i" ]; then

mkdir $i

fi
done

echo "number of file:${#array_file[@]}"

# ファイルの作成
for ((i = 0; i < ${#array_file[@]}; i++)) {
#echo "array[$i] = ${array_file[i]}"

if [ ! -e "${array_file[$i]}" ]; then
# echo "ln -s $run_DIR/${array_crent_file_name[$count]} $i"
ln -s $run_DIR/${array_crent_file_name[$i]}
${array_file[$i]}
else
echo "${array_file[$i]} exists"
fi
}

 [2020.11.30 ソースの間違いを修正]

まとめ

今回は珍しくソフトウエア寄りのことをやってみました。いつもはハードっぽいことしてるので新鮮味がありましたねえ~(本職はこっちのはずなんですが…)ソフトウエア系もこんな感じで投稿できたらなあと思います

参考文献