使用 emacs 来编辑 grub.cfg 文件
首先来看看 grub.cfg 文件的权限,内容如下:
[longyu@debian-10:20:15:39] ~ $ ls -lh /boot/grub/grub.cfg
-r--r--r-- 1 root root 7.9K 9月 30 16:12 /boot/grub/grub.cfg
grub.cfg 文件的 owner 与属组都是 root,普通用户只有读权限,没有写权限。除非你直接使用 root 用户来启动 emacs ,否则 grub.cfg 文件将无法被修改。
我们一般都是使用普通用户来启动 emacs 的,难道为了编辑一个 grub.cfg 文件必须关闭 emacs 后以 root 用户启动吗?这样不免有点太过低级了。那问题来了——能不能在 emacs 中临时提升权限,就像在 bash 中执行 sudo 命令临时获取 root 权限一样呢?
经过搜索我发现的确可以这样做,有两种方式:
- C-x C-f /su::filename
- C-x C-f /sudo::filename
我使用第一种方式,按下 C-x C-f 后输入 /su: 之后选择了我的 hostname,然后就需要输入密码,验证通过后就可以输入文件所在目录,以 root 权限打开文件。
示例内容如下:
Password for /su:root@debian-10: xxxxxxxxx
Find file: /su:debian-10:/boot/grub/grub.cfg
这之后 emacs 打开了一个缓冲区,我尝试修改缓冲区中的内容时有如下警告:
Buffer is read-only: #<buffer grub.cfg</su:root@debian-10:>>
这个警告表明当前缓冲区是只读的,无法进行修改。解决方法是关闭 read-only-mode,按下 M-x 并输入 read-only-mode,按下回车键便关闭了 read-only-mode,这之后缓冲区的内容可以修改,直接使用 C-x C-s 就可以写回修改到 grub.cfg 中。
由于我需要在内核启动的一长串参数后添加一个选项,我在内核的启动命令之后输入一个空格后,原来的长行被切割为多行,这样会在引导时产生问题。为了避免长行被切割,我执行 M-x 并输入 auto-fill-mode,关闭了自动填充模式,这之后就可以在长行后继续输入,而不会自动断行。