Passar comandos ao alternar para o root

1

Estou mudando para usuário root usando sudo -i , mas é possível passar um comando para execução na mesma linha? Ex: sudo -i -c "mkdir qq"

    
por Hari Aakash 02.09.2017 / 11:08

3 respostas

1

Você pode usar algo como:

$ sudo -i /bin/bash -c 'mkdir qq && bash'

# pwd
/root

# ls -d qq
qq

primeiro você passa /bin/bash como seu shell, mkdir qq como o comando que você deseja executar e && bash para obter um shell com acesso root.

    
por Ravexina 02.09.2017 / 11:30
2

sudo executa comandos. Apenas faça:

sudo -i mkdir qq

Você não precisa de uma opção especial como su .

    
por muru 02.09.2017 / 17:26
2

Como muru diz , o uso típico de sudo é executar apenas um comando. Você não precisa passar o -c como faria com a maioria dos shells ou com o comando su .

No entanto, dependendo do que você pretende que o resultado execute mkdir qq , talvez você queira omitir o sinalizador -i também. Se você executa sudo -i sem um argumento de comando para iniciar um shell ou com um argumento de comando ( sudo -i command... ) para executar um único comando, sudo -i simula o ambiente que você obteria se fizesse login como o usuário alvo . Quando nenhum usuário de destino é especificado, esse usuário é root , cujo diretório inicial é /root . Efetuar login como um usuário coloca você no diretório inicial, portanto, sudo -i faz isso também, embora apenas para o shell que está sendo lançado ou para o comando único que está sendo executado.

Assim, executar sudo -i mkdir qq na verdade executa mkdir qq como raiz de /root . Como qq é um caminho relativo relativo , o diretório criado por esse comando é, na verdade, /root/qq , ou seja, , um diretório chamado qq dentro do diretório /root . Se é isso que você quer, ótimo! Mas se o que você quer é criar um diretório chamado qq onde quer que você esteja agora, então você deve fazer uma destas coisas:

  • Para criar um diretório, geralmente não há motivo para você precisar do ambiente de login completo de root . Assim, você pode soltar o sinalizador -i e executar sudo mkdir qq .
  • No caso improvável de você precisar do ambiente de login do root para criar um diretório - não consigo pensar em um motivo -, você pode usar o caminho completo para o diretório. Embora duvide que você precise disso neste caso, é bom saber que você usa um caminho completo em um comando executado com sudo -i para verificar se está se referindo ao arquivo ou diretório correto. Por exemplo, se sua meta fosse criar qq em /opt , você poderia executar sudo -i mkdir /opt/qq . Novamente, no entanto, para mkdir , isso não será necessário, basta soltar o -i .
  • Se você não precisar executar um comando como root ou qualquer outro usuário alternativo, não o faça. Para criar um novo diretório em algum lugar em que seu usuário já tenha acesso de gravação, é melhor executar apenas mkdir qq sem sudo . Em particular, se este diretório qq for onde você irá instalar o programa de mensagens instantâneas QQ para uso somente por você, e não outros usuários no sistema, e você está criando dentro de seu diretório inicial, então é melhor não use sudo quando você instalar ou executar o programa. (Eu não estou supondo que isso é para QQ. Isso é apenas um exemplo.)
por Eliah Kagan 06.09.2017 / 04:08