如何修改重启命令?

如何修改重启命令?

我正在尝试编辑 reboot 命令以向用户回显一条消息,但命令本身位于/sbin已编译。是否可以编辑该命令并让其在用户键入 reboot 时打印出一些内容?

答案1

是的,但是您必须编辑其源代码,添加警告,重新编译并用修改后的可执行文件替换可执行文件。

一个更简单的方法是创建一个打印警告的脚本,然后调用reboot并将该脚本保存为reboot

  1. 创建包含以下内容的文件并将其保存为/usr/bin/reboot

    #!/bin/sh
    echo "Eeeek! You are rebooting!"
    /sbin/reboot
    
  2. 使其可执行:

    sudo chmod a+x /usr/bin/reboot
    

现在,当您运行时reboot,因为在您的/usr/bin之前,您将运行打印警告的脚本,然后运行。/sbin$PATHreboot

答案2

正如 terdon 所展示的,其中一种方法是使用包装脚本。

另一种方法是通过function。函数名称优先于系统命令和别名,这意味着如果我们创建函数重新启动,它将被执行。方便之处在于您不必创建单独的文件,您可以将其放入/etc/bash.bashrc所有用户或~/.bashrc仅供您自己使用。

至于函数本身,我们可以这样做

reboot()
{
   printf "Reboot is about to happen , press enter "
   read
   /sbin/reboot
   # or for those who like to use systemd way, you can do systemctl reboot
}

同样很酷的是,你可以按Ctrl+C取消此功能

答案3

修改命令的最简单方法是创建一个别名来掩盖它,并使用不同的参数或在执行其他操作之前/之后调用它。

您可以像这样创建别名:

alias ALIASNAME='COMMAND'

不要担心给别名赋予与其包含的命令相同的名称,您不能在这里生成递归。

因此,要首先打印一条消息,等待几秒钟,最后重新启动,该命令是合适的:

echo "Rebooting in 10 seconds - abort with CTRL+C" && sleep 10 && reboot

现在我们需要将这个长命令别名为reboot,以便运行它而不是原始/sbin/reboot命令:

alias reboot='echo "Rebooting in 10 seconds - abort with CTRL+C" && sleep 10 && reboot'

此别名现在仅对当前用户有效,并且仅对此 Bash 会话有效。关闭终端窗口将使其再次消失。

为了使它对您的用户帐户持久有效,我们必须确保 Bash 每次启动新会话时都运行它。最简单的方法是将其附加到您的~/.bash_aliases文件中。用您最喜欢的文本编辑器打开它。如果它尚不存在,只需创建它。

将上面的命令附加alias reboot='...'到文件末尾。如果需要,您还可以添加注释来描述此内容。注释行必须以字符开头#。完成编辑后保存文件。

当您现在打开一个新的终端窗口时,别名将会起作用。


请注意,此方法适用于 16.04,其中(无论出于何种原因)/sbin/reboot不再需要以 root 身份运行,但也可以满足普通用户权限。如果您使用/sbin/reboot仍需要以 root 身份或使用 运行的旧版本,则必须在别名命令中sudo添加:sudo

alias reboot='echo "Rebooting in 10 seconds" && sleep 10 && sudo reboot'

sudo使用(即)运行别名本身sudo ALIASNAME将不起作用,因为别名特定于用户的 Bash 会话。

相关内容