Zudem kann ich in der Shell-Konsole kein javac ausführen: "bash: javac: command not found" ist die Fehlermeldung!
Wenn ein Programm nicht gefunden wird, dann deswegen, weil es nicht da ist, wo es gesucht wird, oder deswegen, weil es gesucht wird, wo es nicht ist.
Die Orte, an denen es gesucht wird, sind in einer Pfad-Variablen namens PATH spezifiziert. (Groß-Kleinschreibung spielt eine Rolle).
Tipp in einer Konsole also
echo $PATH
Ein typisches Ergebnis ist zum Beispiel:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:
/bin:
/usr/bin/X11:
/opt/java/bin:
/home/stefan/bin
Die Pfade in denen gesucht wird sind durch Doppelpunkt getrennt.
Das System durchsucht den Pfad von links nach rechts, um in einem der Verzeichnisse 'javac' (oder was auch immer) zu finden, und wer zuerst kommt malt zuerst.
Den Pfad erweitern kann man mit dem Befehl
export PATH=$PATH:/opt/java1.5/bin
Fährt man den Rechner ab und zu runter, so geht diese flüchtige Änderung des Pfades verloren, so daß man gut beraten ist diese Änderung in einer Konfigurationsdatei zu speichern.
Kandidaten für einen persistenten Eintrag sind:
/etc/bash.bashrc
/etc/profile
/home/haraldkl/.bashrc
Empfehlenswert ist es, die Variable JAVA_HOME zu setzen, bevorzugt in der gleichen Datei, aber früher:
export JAVA_HOME=/opt/jdk-1.5.0
zum Beispiel, und den Pfad darauf zu beziehen:
export PATH=$PATH:/$JAVA_HOME/bin
Jetzt ist aber noch die Frage: wo ist eigentlich javac?
Dafür gibt es das nützliche Programm locate.
locate javac | grep "javac$"
Grep sucht nach regulären Ausdrücken, sprich, Ausdrücken die sich mit Regeln abbilden lassen (engl.: regular expressions).
"javac$" ist so ein regulärer Ausdruck, wobei das Dollarzeichen für "Ende der Zeile" steht, und verhindert, daß javacc, javac.html und javac/experimente gefunden wird.
Eine kompakte Erklärung von regulären Ausdrücken findet man mit
man regex
Womöglich hast Du nur JRE, die Virtuelle Maschine zum ausführen von Java-Programmen installiert, und zum ausführen von Applets.
Das würde erklären wieso java gefunden wird, nicht aber javac.
Bearbeitet von SS2:
langer Code nach : gebrochen