操作系統:ubuntu 12.04
一、在oracle官網上下載最新版本的JDK : jdk-6u37-linux-x64.bin
下載之後默認放在了 /home/myname/下載 目錄下 由於目錄有中文,之前遇到過目錄帶中文的種種糾結問題,不想放在這裏,於是在命令行
myname@myname-PC:~$ sudo mv /home/myname/下載/jdk-6u37-linux-x64.bin /opt
對以上命令的解釋:
1)$符後面是輸入linux命令的地方,命令和$符之間有一個空格區域
2)$和:之間表示當前所在目錄,
3)~代表用戶目錄,和cd命令結合使用可以方便的進到用戶目錄, 例如 cd ~ 也可以這樣 cd $HOME $HOME也表示用戶目錄,這個HOME變量的值是在配置文件裏設置的
4)命令前綴sudo : superuserdo的縮寫 表示以超級用戶(系統管理員)身份運行後面的命令,如果我們不是用超級用戶(系統管理員)的身份登錄的系統,應用一些命令時會受到限制,提示 權限不足 前面加上sudo就可以解決這個問題
5)命令mv:這裏有兩個參數,第一個參數是/home/myname/下載/jdk-6u37-linux-x64.bin,表示你要移動的文件,用完全路徑表示比較好,第二個參數是/opt,表示你移動文件的目標目錄, 兩個參數之間有空格分隔
6)前面myname表示當前用戶名,後面myname-PC表示計算機名,用@連接
把JDK的安裝文件移動到/opt以後, 進入opt目錄,輸入命令後回車
myname@myname-PC:~$ cd /opt 回車
myname@myname-PC:/opt$
cd命令:進入指定的目錄 例如: cd /(進入系統根目錄),cd /home(進入系統根目錄下的home目錄),cd $HOME(進入HOME變量表示的目錄,即用戶目錄,
與 cd ~等效),cd ..(從當前目錄向上退一級)
給/opt下面的文件賦權限:
myname@myname-PC:/opt$ chmod 755 *
chmod命令:給文件賦權限,在/opt下ll一下可以看到:
drwxr-xr-x 8 root root 4096 10月 23 12:08jdk1.6.0_37/
-rwxr-xr-x 1 gchong gchong 72048548 10月 23 12:01 jdk-6u37-linux-x64.bin
對於第一行最高位 d表示這是一個目錄,對於第二行最高位 -表示這是一個文件 ,後面r表示可讀,w表示可寫,x表示可執行,-表示無權限,不清楚爲什麼有三組權限,每一組權限有三位,由低到高分別是2的0次冪,1次冪,2次冪,所以權限rwx:4+2+1=7 r-x:4+0+1=5
r-x:4+0+1=5
再看上面的命令 chmod 755 * 就是給當前目錄下的所有內容(包括文件和目錄)賦rwxr-xr-x權限
其實我們要的就是可執行權限, 只要賦x權限就可以了, 下面是執行這個下載的文件
myname@myname-PC:/opt$ ./jdk-6u37-linux-x64.bin “.” 表示當前目錄
二、運行後會提示安裝成功的字樣,在window系統裏安完JDK就要修改一下環境變量path的值,一邊我們能正常使用java,javac命令,而在linux系統下會複雜一點,linux環境下和環境變量有關的文件有以下四種,粗略記錄如下
1) /etc/environment 文件
2) /etc/profile 文件
3) ~/.profile 文件
4) ~/.env 文件 我不確定是不是在~目錄下(用戶目錄)
他們的區別,前三個文件只有在登錄系統以後才被讀取,且讀取這一次, 而.env文件是在用戶沒開一個進程都會被執行一次,它們的讀取順序就是1 2 3 4 這樣
詳細內容查閱 : http://blog.chinaunix.net/uid-15194453-id-3012479.html
我在environment下面加入
JAVA_HOME="/opt/jdk1.6.0_37"
PATH=“$PATH:$JAVA_HOME/bin”
CLASSPATH=".:$JAVA_HOME/lib"
總覺得沒什麼問題,但是重啓電腦後, ubuntu就登不上去了, 在網上找也說最好別再environment下修改環境變量, 容易悲劇。。。
配置完環境變量以後, 在命令行輸入 java -ersion 有的機器可以看到JDK的版本信息,代表安裝成功:
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode)
而有的機器則會出現這樣的信息:
程序“java”已包含在下列軟件包中:
* gcj-4.4-jre-headless
* gcj-4.5-jre-headless
* openjdk-6-jre-headless
請嘗試:apt-get install <選定的軟件包>
這是由於之前安裝過JDK,或者安裝過其他帶有java環境的軟件自動安裝了軟件帶有的JDK, 這樣就導致我們的系統裏存在多個JDK,它們的版本可能相同,也可能不同,
對於這種情況,linux是用update-alternatives命令解決的,update-alternatives 命令是管理軟件多版本的工具
三、update-alternatives命令
update-alternatives --install /usr/bin/java java /opt/jdk1.6.0_37/bin/java
解釋: 給alternatives安裝一個符號鏈接/usr/bin/java,他的名字是 java 對應的可執行應用程序路徑:/opt/jdk1.6.0_37/bin/java
在命令行我們輸入命令:
myname@myname-PC:~$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 10月 23 21:58 /usr/bin/java -> /etc/alternatives/java
可以發現, /usr/bin/java 是指向 /etc/alternatives/java 的
再輸入
myname@myname-PC:~$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 25 10月 23 21:58 /etc/alternatives/java -> /opt/jdk1.6.0_37/bin/java
可以發現,/etc/alternatives/java 也是個符號鏈接, 是指向 /opt/jdk1.6.0_37/bin/java 的, 這纔是最終的可執行文件
update-alternatives --display java :顯示java在alternatives裏的配置信息
update-alternatives --config java : 配置java對應的符號鏈接
There are 2choices for the alternative jdk (providing /usr/bin/jdk).
Selection Path Priority Status
--------------------------------------------------------------------------
0 /home/haili/jdk1.5.0_22 255 auto mode
1 /home/haili/jdk1.5.0_22 255 manual mode
* 2 /home/haili/jdk1.6.0_30 254 manual mode
這是網上的例子, 大概情況差不多, 選擇你想使用的命令的link值update-alternatives –remove java /opt/jdk1.6.0_37/bin/java 刪除這個java命令的配置
在命令行輸入的命令, 都是一個鏈接符號:
比如 java
命令行中的java只是一個鏈接符號, 先被鏈接到/usr/bin中, 在這個目錄下找有沒有java,這也是爲什麼我們要要設置環境變量path, path="/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/usr/games"
然後 /usr/bin/java 也是一個符號鏈接, 鏈接到/etc/alternatives/java, 它仍然是個符號鏈接, 最終
/etc/alternatives/java鏈接到實際的程序 /opt/jdk1.6.0_37/bin/java