Como fazer comando linux no Java?

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

cara,

vc deve usar a Classe Runtime, veja

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

t+

[quote=alissonvla]cara,

vc deve usar a Classe Runtime, veja

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

t+[/quote]

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

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+

[quote=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+[/quote]

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

no terminal é assim:

sudo mkdir /teste (enter)
senha (enter)

mais alguma dica?

Valeu

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.

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!

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+

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 []

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.

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

[quote=psyltrance]Deixa eu ver entendi…
Vc quer que apareça a tela p/ que a senha do sudo seja digitada ? ou seja passada automaticamente?[/quote]
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.

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…