• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Linux-Consolenbefehle über Java ausführen?

rrurr

Member
Moin an alle,

ich würde gern Consolenbefehle (mit Parameter), die man unter Suse (in der Console) eintippt (z.B. mount, umount, unrar, su etc.) in einer Java-Application einbinden, so dass ich nur noch auf einen Kopf klicken muss und dann im Hintergrund die Befehler ausgeführt werden. Weiß jemand, wie man das realisieren kann?
Die GUI kann ich selbst erstellen, das ist das kleinste Problem, mir geht's pirmär um den Java-Code, der die Linux-Consolenbefehle aufruft.

Btw.: Ich programmiere mit Eclipse 3.2 unter openSuse 10.3.

MfG rrurr
 
OP
R

rrurr

Member
vielen Dank schon mal für den Code!
Nur hab ich jetzt das Problem, dass ja z.B. "su" eine Eingabe erwartet.
Wie kann man auf die Eingabe reagieren, um sein Passwort automatisch einzugeben?
Und was ggf. auch interessant zu wissen wäre, wie man das was gerade auf der Linux-Console abläuft ausgeben kann bzw. es unter Java sichtbar machen kann.

Gruß rrurr
 

nbkr

Guru
rt.exec liefert ein Process Objekt zurück. Darüber kannst Du einen InputReader erzeugen der dir die Ausgabe des Befehls liefert. Wegen der Berechtigung zum Ausführen der Kommandos würde ich Sudo verwenden. Du kannst das Programm dann als DEB Datei verteilen welche einerseits Sudo mit installiert und die /etc/sudoers Datei anpasst.
 
OP
R

rrurr

Member
nbkr schrieb:
Du kannst das Programm dann als DEB Datei verteilen welche einerseits Sudo mit installiert und die /etc/sudoers Datei anpasst.

Den Part habe ich jetzt nicht ganz verstanden. Wie erstelle ich solch eine DEB-Datei? Unter "Exportieren" in Eclipse hab ich einsolches Format nicht gefunden. Standardmäßig nimmt man dafür ja das .jad-Format. Aber ich vermute mal, dass man eine deb-Datei nicht über Eclipse erstellt. Wäre super, wenn mir das genauer erklären könntest oder mir eine Seite empfehlen kannst, auf der das erklärt ist.

Gruß rrurr
 

nbkr

Guru
Deb oder RPM Pakete stellen die übliche Softwareverteilmethode unter Linux da. Unter Windows wäre das die setup.exe.

Um einen Mount Befehl oder ein Shutdown auslösen zu können braucht dein Programm spezielle Rechte. Entweder es läuft als Root, was nicht empfehlenswert ist, oder es nutzt andere Methoden. Für ein Mount wäre ein Eintrag in der /etc/fstab möglich, aber vermutlich unpraktikabel. Somit kommt sudo in Frage. Mit sudo kannst Du als normaler Benutzer Befehl mit Rootrechten ausführen. Allerdings muss dafür die Datei /etc/sudoers angepasst werden.

Das müsste dein Benutzer von Hand machen, da auch hierfür Rootrechte benötigt werden. In irgendwelchen Konfigdateien rumzufummeln ist Otto-Normaluser aber zu kompliziert, also muss man ihm das abnehmen. Der normaler Benutzer hätte keine eine Datei die er anklickt oder noch besser sogar mittels apt-get installieren kann. Da kommen die DEB bzw. RPM Dateien ins Spiel. Mit denen kann man sowas machen, die Installation einer solchen Datei bekommt der Benutzer üblicherweise ohne Probleme hin.

Ein RPM oder DEB Datei ist im Prinzip nichts anders als ein gepacktes Archiv verbunden mit ein paar Shellscripten die ausgeführt werden. Diese Scripte können dann die /etc/sudoers anpassen und das Archiv kopiert deine Software in die passenden Ordner.
 
Oben