シンボリックに気を付けて[sed]

環境:CentOS-6.4
sedバージョン:4.2.1

sedを利用してシンボリックファイルで置換処理を行うとシンボリックのファイルが実態ファイルになってしまう。

例えば、こんな失敗例

/etc/grub.confなんかは/boot/grub/grub.confのシンボリックリンクなんですが、

これをsedで置換しちゃうと実態ファイルになってしまう。

つまり別々のgrub.confが出来上がる。

yum updateでカーネルをアップデートすると/etc/grub.confだけを書き換えるので、別々のファイルとなった/boot/grub/grub.confは書き換えません。

OSの起動時は/boot/grub/grub.confを利用することになりますので古いカーネルのままで起動してしまう。

例えば、

sed -i "s/変更前文字列/変更後文字列/" /etc/grub.conf

このようなコマンドで実態ファイルになってしまいます。

ただ、sedにはシンボリック用のオプションが用意されていまして、–follow-symlinksというオプションを指定してあげることでシンボリックとして取り扱ってくれるようになります。

sed -i --follow-symlinks "s/変更前文字列/変更後文字列/" /etc/grub.conf

これなら大丈夫です。

ちなみに、

CentOS-5系のsedはバージョンが4.1.5なんですが、–follow-symlinksというオプションがありません。ただし、このオプションを指定しなくともシンボリックのファイルが実態ファイルになるということはありません。

cent5と6って意外と細かな違いがあるので苦労しますよね。

 


PAGE TOP