sed-backup
2025/10/25
sed コマンドでのバックアップ指定方法
`sed -i.bak` でのバックアップファイル名
バックアップファイル名sed -i.bak 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/configこのコマンドを実行すると、バックアップファイルは:
/etc/selinux/config.bak`になります。
動作の詳細
`-i.bak` の仕組み:- `-i` の後に続く文字列(この場合`.bak`)が、元のファイル名の**末尾に追加**されます
- 元ファイル:`/etc/selinux/config`
- バックアップ:`/etc/selinux/config.bak`
様々なバックアップ指定例
# 1. 単純な拡張子追加sed -i.bak 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.bak
# 2. 日付付きバックアップ
sed -i.$(date +%Y%m%d) 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.20251027
# 3. より詳細なタイムスタンプ
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.bak-20251027_143045
# 4. チルダ(~)を使う慣例
sed -i~ 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config~
# 5. .origを使う(オリジナルの意味)
sed -i.orig 's/pattern/replace/' /etc/selinux/config
# → /etc/selinux/config.orig
実際の動作確認
# 実行前$ ls -la /etc/selinux/
config
# コマンド実行
$ sudo sed -i.bak 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 実行後
$ ls -la /etc/selinux/
config # 変更されたファイル
config.bak # 元の内容を保持したバックアップ
# 内容の違いを確認
$ diff /etc/selinux/config.bak /etc/selinux/config
3c3
< SELINUX=enforcing
注意点とTips
1. **既存バックアップの上書き**# 注意:既に config.bak が存在する場合、上書きされます!
# より安全な方法(タイムスタンプ付き)
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/pattern/replace/' file2. **バックアップを作りたくない場合**
# GNU sed(Linux)
sed -i '' 's/pattern/replace/' file # エラーになる sed -i 's/pattern/replace/' file # バックアップなし# BSD sed(macOS)
sed -i '' 's/pattern/replace/' file # バックアップなし3. **複数ファイルの処理**
# 複数ファイルを処理する場合
sed -i.bak 's/pattern/replace/' *.conf# 結果
file1.conf → file1.conf.bak(バックアップ)
file2.conf → file2.conf.bak(バックアップ)
より実践的な使い方
# 1. バックアップディレクトリを分ける方法cp /etc/selinux/config /tmp/config.bak-$(date +%Y%m%d)
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 2. バックアップの世代管理
backup_with_rotation() {
local file=$1
local max_backups=5
# 古いバックアップを削除
ls -t $file.bak* 2>/dev/null | tail -n +$*1 | xargs rm -f
# 新しいバックアップを作成
sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/^SELINUX=.*/SELINUX=disabled/' "$file"
}
# 3. 変更前後の確認を含む安全な方法
safe_sed_with_backup() {
local file="/etc/selinux/config"
local backup="$file.bak-$(date +%Y%m%d_%H%M%S)"
# 明示的にバックアップ作成
cp -a "$file" "$backup"
echo "バックアップ作成: $backup"
# sed実行(-iでバックアップなし、既に作成済みなので)
sed -i 's/^SELINUX=.*/SELINUX=disabled/' "$file"
# 差分表示
diff -u "$backup" "$file"
}
まとめ
- `sed -i.bak` は簡潔で便利。シンプルで覚えやすい。自動的にバックアップ作成
- でも、既存の`.bak`ファイルを上書き。タイムスタンプがないので、いつのバックアップか不明
推奨される書き方:**
# タイムスタンプ付きが安全 sed -i.bak-$(date +%Y%m%d_%H%M%S) 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/configこれで、複数回実行してもバックアップが上書きされず、変更履歴を追跡できます。