Como modifico o comando reboot?

4

Estou tentando editar o comando reboot para enviar uma mensagem ao usuário, mas o próprio comando localizado em /sbin está compilado. É possível editar o comando e imprimir algo quando o usuário digita a reinicialização?

    
por EndenDragon 19.06.2016 / 19:58

3 respostas

12

Sim, mas você teria que editar seu código-fonte, adicionar seu aviso, recompilar e substituir o executável pelo modificado.

Uma abordagem muito mais simples seria criar um script que imprima seu aviso e, em seguida, chame reboot e salve esse script como reboot :

  1. Crie um arquivo com este conteúdo e salve-o como /usr/bin/reboot :

    #!/bin/sh
    echo "Eeeek! You are rebooting!"
    /sbin/reboot
    
  2. Torne-o executável:

    sudo chmod a+x /usr/bin/reboot
    

Agora, quando você executar reboot , porque /usr/bin é antes de /sbin em seu $PATH , você executará o script que imprimirá o aviso e, em seguida, executará reboot .

    
por terdon 19.06.2016 / 20:05
5

Uma maneira de fazer isso como mostra o perdão - com um script de wrapper.

A outra abordagem é via function . Os nomes das funções têm prioridade sobre os comandos e aliases do sistema, o que significa que, se criarmos a reinicialização da função, ela será executada. O que é conveniente é que você não precisa criar um arquivo separado, você pode colocá-lo em /etc/bash.bashrc para todos os usuários ou ~/.bashrc apenas para si mesmo.

Quanto à função em si, poderíamos fazer algo assim

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
}

O que também é legal é que você pode pressionar Ctrl + C para cancelar esta função

    
por Sergiy Kolodyazhnyy 19.06.2016 / 20:17
1

A maneira mais fácil de modificar um comando é criar um alias que o apague e o chama com argumentos diferentes ou antes / depois de fazer outra coisa.

Você cria um alias como este:

alias ALIASNAME='COMMAND'

Não se preocupe em dar ao pseudônimo o mesmo nome de um comando que ele contém, você não pode gerar recursão aqui.

Então, para primeiro imprimir uma mensagem, aguarde alguns segundos e finalmente reinicialize, este comando é adequado:

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

Agora, precisamos aliasar esse longo comando para reboot , para que ele seja executado em vez do original /sbin/reboot one:

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

Esse alias agora é válido apenas para seu usuário atual e somente para essa sessão de Bash. Fechar a janela do terminal fará com que ela desapareça novamente.

Para torná-lo persistente para sua conta de usuário, devemos garantir que o Bash o execute sempre que iniciar uma nova sessão. Isso é mais facilmente feito anexando-o ao seu arquivo ~/.bash_aliases . Abra-o com o seu editor de texto favorito. Se ainda não existir, basta criá-lo.

Anexe o comando alias reboot='...' de cima ao final do arquivo. Se você quiser, você também pode adicionar um comentário descrevendo o que é isso. Linhas de comentário devem começar com um caractere # . Salve o arquivo depois de terminar a edição.

Quando você abrir uma nova janela de terminal, o alias funcionará.

Por favor, note que esta abordagem é para 16.04, onde (por qualquer motivo) /sbin/reboot não precisa mais ser executado como root, mas também está feliz com privilégios normais de usuário. Se você usar uma versão mais antiga, em que /sbin/reboot ainda precisa ser executado como raiz ou com sudo , adicione o sudo dentro do comando alias:

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

A execução do próprio alias com sudo (ou seja, sudo ALIASNAME ) não funcionará porque os aliases são específicos da sessão de Bash do seu usuário.

    
por Byte Commander 19.06.2016 / 20:50