Um motivo para ter cuidado com sed e links simbólicos, é que quando sed modifica um arquivo no local, ele destruirá o link e criará um novo arquivo. Por exemplo:
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
Para trabalhar com links simbólicos de uma maneira mais segura, se sua versão do sed for GNU Sed, você pode usar a opção --follow-symlinks
de sed.
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
Como você pode ver, quando --follow-symlinks is used
, o link simbólico é mantido, e a operação sed realmente se aplica ao arquivo a
.
Então, no seu exemplo, se você quebrou o link simbólico entre /etc/grub.conf
- > /boot/grub/grub.conf
, você esperaria que suas alterações ocorressem, apenas para descobrir que elas não estavam sendo aplicadas a /boot/grub/grub.conf
, e você poderia gastar um tempo significativo para solucionar problemas porque sua inicialização não está funcionando conforme o esperado.