Como fazer comando linux no Java?

12 respostas
namor

Olá, preciso criar um diretório em / porém quando tento usar o mkdir do java ele não cria pois precisa para este diretório o comando ser dado pelo root (sudo).

Sei que não posso passar a senha do root como parâmetro pois seria uma falha de segurança do SO.

É possível eu fazer o comando no Java, tipo: “sudo mkdir /pasta” o linux abrir o terminal já com este comando e só pedir a senha do sudo?

Desde já agradeço. :-o

12 Respostas

A

cara,

vc deve usar a Classe Runtime, veja

Runtime.getRuntime().exec("comando linux");

t+

namor

alissonvla:
cara,

vc deve usar a Classe Runtime, veja

Runtime.getRuntime().exec("comando linux");

t+

Olá, obrigado pela resposta!

Acabei de testar, ele consegue criar com perfeição o diretório dentro dos diretórios de user, ex: /home/user/teste. (obs: não abre o terminal)

porem quando preciso do sudo por exemplo “sudo mkdir /teste” ele não abre o terminal pedindo a senha do sudo e simplesmente fecha.

Não posso logar como root, apenas usando sudo + senha.

Obrigado

A

cara,

nao teria como no seu sistema que ele solicite a senha do sudo nao, pq acho que vc vai ter que fazer o seguinte

Runtime.getRuntime().exec("sudo "+senha+" mkdir /teste");

t+

namor

alissonvla:
cara,

nao teria como no seu sistema que ele solicite a senha do sudo nao, pq acho que vc vai ter que fazer o seguinte

Runtime.getRuntime().exec("sudo "+senha+" mkdir /teste");

t+

Obrigado, mas sudo não recebe senha assim, ele precisa assim:

no terminal é assim:

sudo mkdir /teste (enter)
senha (enter)

mais alguma dica?

Valeu

romarcio

Tem a classe ProcessBuildes presente a partir do Java 5: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

ProcessBuilder pb = new ProcessBuilder("javac", "HelloWorld.java"); //executa o comando javac para compilar a classe HelloWorld
Process p = pb.start(); //executa o processo acima

Da uma olhada na documentação.

leoramos

Cara, tens outra saída pra isso que não usar Java?
Eu trabalho atualmente num sistema que faz EXATAMENTE isso que tu tá fazendo. A verdade: é uma m****!
O jeito é tu ler o retorno, ver se é “senha:” (ou pior, pode ser que esteja em outro idioma… e daí, como faz?) e mandar outro comando Runtime.
Sinceramente, cara, se puder fazer sem java, melhor pra você.

Outra saída é criar script em shell, mesmo, e executar pelo sistema. Mas tô meio que chutando, não sei como fica a abordagem da senha nesse caso.

Abraço!

A

cara,

ate aonde eu sei para execução comando do SO com java, era utilizando a classe Runtime, talvez que conheça mais de linux possa te ajudar, pois meu conhecimento é basico.

t+

adriano_si

Concordo com o Leo Ramos…

Procura realmente uma solução alternativa… O recurso do Java de chamar recursos específicos de S.O só foi desenvolvida por causa das excessões…

Da feita que um código java chama recurso nativo, ele perdeu 30% da sua vantagem no meu ver (ser multiplataforma).

Abs []

namor

Realmente acredito que em C++ este trabalho seja mais simples.

Agora em java é possível eu fazer um comando em sudo e esperar o usuário escrever a senha?

eu consegui fazer isso chamando o jar pelo terminal assim: “java -jar nome.jar”

aí ele executa o java no console e pede a senha só que fica bugado o terminal e não consigo inserir a senha, quem quiser tentar faz aí rapidinho com o comando “sudo mkdir /teste” no Runtime.

Valeu.

javax.skol

Deixa eu ver entendi…
Vc quer que apareça a tela p/ que a senha do sudo seja digitada ? ou seja passada automaticamente?

javax.skol

psyltrance:
Deixa eu ver entendi…
Vc quer que apareça a tela p/ que a senha do sudo seja digitada ? ou seja passada automaticamente?

Se puder utilizar parte gráfica do SO, troque o ‘sudo’ por ‘gksudo’ que ele irá mostrar a tela de prompt, nativa do SO, do usuário exigindo a senha.

Paul_Anderson

Bom dia, não seis se é o que precisa mas vamos lá:

Para locais que o usuário local tenha permissão:
Runtime.getRuntime().exec(“mkdir /diretorio/pasta”);

Para locais que precise fazer como root faça:
Runtime.getRuntime().exec(“gksudo mkdir /diretorio/pasta”);
Esta opção solicita solicita a senha ao usuário.

Exatamente que o psyltrance disse…

Criado 26 de outubro de 2011
Ultima resposta 27 de jun. de 2013
Respostas 12
Participantes 7