Posso executar várias linhas de comandos sudo?

4

Esta questão refere-se a outra questão . Se eu colar o código sugerido do @kyodake, tudo de uma vez no terminal funcionaria?

Ou devo ir linha por linha?

    
por thednp 11.09.2015 / 04:01

2 respostas

8

Existem várias abordagens para permitir que vários comandos sejam executados com sudo .

O primeiro se adapta melhor ao seu caso de uso. Outros são adicionados para explorar alternativas; eles podem não atender a sua necessidade específica, mas podem ser úteis para você no futuro ou para outros usuários.

Abordagem nº 1: mais limpa e simples

Coloque tudo em um script, por exemplo myscript.sh , torne o arquivo executável com chmod 755 myscript.sh e execute esse script com sudo myscript.sh

Abordagem # 2: longa sequência de comandos

Você precisa de algo com privilégios de superusuário para executar vários comandos. Isso seria shell (qualquer shell, por exemplo, bash ou sh ). Os shells têm um -c flag, que diz a eles para executar um comando ou um conjunto de comandos separados por um ponto-e-vírgula ; . Exemplo simples: sudo bash -c 'apt-get update; apt-get upgrade' . Em particular, a resposta do kyodake pode ser refeita assim:

sudo bash -c 'apt-get update;apt-get install --reinstall aptitude deborphan mate-desktop; aptitude remove '?and(?reverse-depends(unity),?not(?reverse-depends(?exact-name(mate-desktop))))';aptitude remove '?and(?reverse-depends(ubuntu),?not(?reverse-depends(?exact-name(mate-desktop))))';aptitude remove '?and(?reverse-depends(gnome),?not(?reverse-depends(?exact-name(mate-desktop))))';apt-get install --reinstall mate-desktop;deborphan;apt-get --purge remove $(deborphan);deborphan --libdevel;apt-get --purge remove $(deborphan --libdevel);deborphan --find-config;dpkg --purge $(deborphan --find-config);apt-get autoremove;apt-get clean;reboot'

Comprimento? Sim. Essa abordagem funciona melhor quando você precisa executar apenas alguns comandos com o sudo.

Abordagem # 3: jogando com o tempo limite do sudo

Por padrão, o privilégio sudo expira após 15 minutos. Então, se você tem certeza de que todos esses comandos não demoram tanto, você pode executar o primeiro comando com sudo e será solicitado a digitar a senha; para todos os comandos subseqüentes, você não será solicitado, mas ainda precisará digitar sudo .

Abordagem # 4: usando shell de raiz

Como kyodake se sugeriu na resposta, faça o login em um shell de root com sudo -i para usar o privilégio de root até você exit . Note que isto não é recomendado por razões de segurança. A menos que você esteja 100% certo de que se lembrará de sair quando terminar de trabalhar e ninguém entrar em seu shell de root, então ... use esta abordagem a seu critério.

    
por Sergiy Kolodyazhnyy 11.09.2015 / 06:23
1

Copiar e colar o script funcionará e os comandos serão executados um após o outro;

No entanto, o problema aqui são os caracteres $ / # no início de cada linha, o que quebraria cada comando; removê-los é obrigatório antes de executar o script de qualquer forma .

Acho que a maneira mais rápida / direta de fazer isso seria processá-lo e executá-lo ao mesmo tempo usando o seguinte método:

  • Selecionando o script, pulando a primeira linha, como é (ou seja, incluindo os caracteres # no início)
  • Copiando o script usando Ctrl + C
  • Apertando Ctrl + Alt + T
  • Digitação sed 's/^.//' <<EOF | sudo bash
  • Acertando Enter
  • Colando o script usando Ctrl + Deslocamento + V
  • Acertando Enter
  • Digitação EOF
  • Acertando Enter novamente

Vantagens contra a criação de um script propositalmente e a sua execução:

  1. É mais rápido
  2. Não é necessário criar nenhum arquivo
  3. Não é necessário processar o script para remover os $ / # caracteres

Veja um exemplo usando este script:

# whoami
# echo command1
# echo command2
# echo command3
ubuntu@ubuntu ~ % sed 's/^.//' <<EOF | sudo bash
ubuntu@ubuntu ~ pipe heredoc> # whoami
ubuntu@ubuntu ~ pipe heredoc> # echo command1
ubuntu@ubuntu ~ pipe heredoc> # echo command2
ubuntu@ubuntu ~ pipe heredoc> # echo command3
ubuntu@ubuntu ~ pipe heredoc> EOF
root
command1
command2
command3
    
por kos 11.09.2015 / 07:24