como usar & para sudo

0

Eu sei que se eu colocar & no final da aplicação no terminal, ele vai rodar em segundo plano e terminal ainda pode receber comandos, por exemplo:

howchen@host:~
-> cutecom&
[1] 17269
howchen@host:~

pode aparecer o aplicativo cutecom . No entanto, eu preciso executar este aplicativo com root, eu não posso entrar como:

howchen@host:~
-> su cutecom&

se eu nunca executar alguns aplicativos com su antes, ele será exibido como:

howchen@host:~
-> su cutecom&
[1] 17404
howchen@host:~
-> No passwd entry for user 'cutecom'
    
por How Chen 30.12.2013 / 09:08

5 respostas

2

Embora todas as respostas sobre sudo vs su estejam corretas, elas não abordam a parte & da pergunta.

O problema de tentar fazer algo como sudo somecommand & é que ele origina sudo (o que acontece antes que ele tenha a chance de solicitar a senha). Você deseja usar o plano de fundo somecommand . O & é um operador de shell, portanto, ele tem precedência e opera antes de chamar qualquer comando. Isso precisa ser alterado para que sudo aconteça primeiro e, em seguida, o plano de fundo.
Como & é um operador de shell, precisamos que o sudo lance outro shell para poder manipulá-lo. A maneira de fazer isso é algo como o seguinte:

sudo sh -c 'somecommand &'

Dessa forma, você obterá o prompt sudo da senha e, em seguida, o sudo iniciará sh -c 'somecommand &' , portanto, o segundo plano será tratado por um novo shell em vez do atual.

    
por 30.12.2013 / 19:07
7

Como @Kiwy disse, su cutecom significa que você está tentando alterar o usuário atual para o usuário cutecom .

Se você quiser su para root e executar o comando cutecom, a sintaxe correta é

su -c cutecom

Isso exigirá que você digite a senha do root.

Como @kiwy disse, é muito mais comum usar sudo para executar comandos como root. Ele pode ser configurado para você executar qualquer comando como outro usuário e não requerer uma senha ou permitir que você use sua própria senha em vez da senha raiz.

    
por 30.12.2013 / 11:29
2

Se, por algum motivo, você tiver que usar su em vez de sudo, o seguinte deve ajudar. Eu estou usando bash para esses exemplos, qualquer shell que tenha recursos de controle de trabalho deve se comportar de forma semelhante, tanto quanto eu já experimentei. Execute o comando como segue:

su root -c cutecom

Uma vez iniciado o cutecom, pressione Control-Z. Na maioria das shells e na maioria dos ambientes em que já estive, Control-Z é a Sequência de Suspensão. O shell deve responder com algo semelhante a:

[1]+  Stopped                 su root -c cutecom

E ele retornará para um prompt de shell. Supondo que a resposta anterior começou com [1], digite o seguinte comando:

bg %1

Isso colocará o job # 1 em segundo plano e imprimirá algo semelhante ao seguinte:

[1]+ su root -c cutecom &

e retorne você ao prompt.

Se você precisar trazê-lo de volta para o primeiro plano (isso também funciona para trabalhos regulares iniciados com um &), você pode digitar:

fg %1

Se você precisar de uma listagem de todos os trabalhos suspensos e em segundo plano, use o comando jobs:

jobs
[1]+  Stopped                 su root -c dullcom
[2]-  Running                 su root -c cutecom &
    
por 30.12.2013 / 21:11
0
sudo bash
what_ever_command &
exit
    
por 30.12.2013 / 13:23
0

O comando su é usado para autenticar como root por padrão ou como o nome do usuário passa como primeiro argumento. Por exemplo, su foo tentará autenticar você como o usuário foo .

O comando sudo é usado para executar um comando no contexto raiz sem ser root user.

linux