Одна из причин быть осторожной с sed и символическими ссылками заключается в том, что когда sed изменяет файл на месте, он уничтожает ссылку и создает новый файл. Например:
bash-[622]$ echo abc > a
bash-[623]$ ln -s a b
bash-[624]$ ls -la
total 32
drwxr-xr-x 2 tim staff 233 Mar 2 10:31 ./
drwxrwxrwt 4 root sys 612 Mar 2 10:29 ../
-rw-r--r-- 1 tim staff 4 Mar 2 10:31 a
lrwxrwxrwx 1 tim staff 1 Mar 2 10:31 b -> a
bash-[625]$ cat a
abc
bash-[626]$ cat b
abc
bash-[627]$ sed -i 's/abc/def/g' b
bash-[628]$ ls -la
total 32
drwxr-xr-x 2 tim staff 233 Mar 2 10:31 ./
drwxrwxrwt 4 root sys 612 Mar 2 10:29 ../
-rw-r--r-- 1 tim staff 4 Mar 2 10:31 a
-rw-r--r-- 1 tim staff 4 Mar 2 10:31 b
bash-[629]$ cat a
abc
bash-[630]$ cat b
def
Для более безопасной работы с символическими ссылками, если ваша версия sed - GNU Sed, вы можете использовать параметр sed - follow-symlinks
.
bash-[632]$ echo abc > a
bash-[633]$ ln -s a b
bash-[634]$ ls -la
total 32
drwxr-xr-x 2 tim staff 233 Mar 2 10:33 ./
drwxrwxrwt 4 root sys 612 Mar 2 10:32 ../
-rw-r--r-- 1 tim staff 4 Mar 2 10:33 a
lrwxrwxrwx 1 tim staff 1 Mar 2 10:33 b -> a
bash-[635]$ cat a
abc
bash-[636]$ cat b
abc
bash-[637]$ sed --follow-symlinks -i 's/abc/def/g' b
bash-[638]$ ls -la
total 32
drwxr-xr-x 2 tim staff 233 Mar 2 10:33 ./
drwxrwxrwt 4 root sys 612 Mar 2 10:32 ../
-rw-r--r-- 1 tim staff 4 Mar 2 10:33 a
lrwxrwxrwx 1 tim staff 1 Mar 2 10:33 b -> a
bash-[639]$ cat a
def
bash-[640]$ cat b
def
Как видите, когда используется - follow-symlinks
, символическая ссылка сохраняется, и операция sed фактически применяется к файлу a
.
Итак, в вашем примере, если вы разорвали символическую ссылку между /etc/grub.conf
-> /boot/grub/grub.conf
, вы ожидаете, что ваши изменения будут происходят только для того, чтобы узнать, что они на самом деле не применяются к /boot/grub/grub.conf
, и вы можете потратить значительное время на устранение неполадок, почему ваша загрузка не работает должным образом.