1 Linux 目錄結構
即使這是個菜鳥級的問題,也經常難住老鳥。我就見過很資深的程序員把JDK不合適地安裝到/home目錄下。雖然不一定有最正確的安裝位置,但一定有不適當的安裝位置。爲了確定我們到底應該把JDK安裝在哪裏,首先要了解一下Unix/Linux的目錄結構。- /bin 用來貯存用戶命令。/usr/bin 也被用來貯存用戶命令。
- /sbin 許多系統命令(例如 shutdown)的貯存位置。/usr/sbin 中也包括了許多系統命令。
- /root 根用戶(超級用戶)的主目錄。
- /mnt 該目錄中通常包括系統引導後被掛載的文件系統的掛載點。比如,默認的光盤掛載點是 /mnt/cdrom/。可以爲U盤建一個掛載點:mkdir /mnt/usb。
- /boot 包括內核和其它系統啓動期間使用的文件,最大不超過200M。通常我爲 /boot 建一個primary分區是1G。
- /lost+found 被 fsck 用來放置零散文件(沒有名稱的文件)。
- /lib 包含許多被 /bin 和 /sbin 中的程序使用的庫文件。目錄 /usr/lib 中含有更多用於用戶程序的庫文件。/lib 目錄下放置的是 /bin 和 /sbin 目錄下程序所需的庫文件。簡單說,/lib 是內核級的;/usr/lib 是系統級的;/usr/local/lib 是用戶級的。僅僅被 /usr 目錄下的程序所使用的共享庫不必放到 /lib 目錄下。只有 /bin 和 /sbin 下的程序所需要的庫有必要放到 /lib 目錄下。
- /dev 貯存設備文件。
- /etc 包含許多配置文件和目錄。
- /var 用於貯存variable(或不斷改變的)文件,例如日誌文件和打印機假脫機文件,虛擬機鏡像文件等。
- /usr 包括與系統用戶直接有關的文件和目錄,例如應用程序及支持它們的庫文件。
- /proc 一個虛擬的文件系統(不是實際貯存在磁盤上的),它包括被某些程序使用的系統信息。
- /initrd 用來在計算機啓動時掛載 initrd.img 映像文件的目錄以及載入所需設備模塊的目錄。不要刪除 /initrd 目錄。如果你刪除了該目錄後再重新引導 Red Hat Linux 時,你將無法引導你的計算機。
- /tmp 用戶和程序的臨時目錄。 /tmp 給予所有系統用戶讀寫權。
- /home 用戶主目錄的默認位置。
- /opt 可選文件和程序的貯存目錄。該目錄主要被第三方開發者用來簡易地安裝和卸裝他們的軟件包。
在傳統的unix系統中,/usr 通常只包含系統發行時自帶的程序,而/usr/local 則是本地系統管理員用來自由添加程序的目錄。這裏有一條嚴厲而牢固的規則:除非在裏面創建目錄,unix發行版不得使用 /usr/local 。
對於Linux發行版,如 RedHat, Debian 等等,一個可能的規定是:/usr 目錄只能由發行版的軟件包管理工具負責管理,而對 /usr/local 卻沒有這樣做。正是因爲採用這種方式,軟件包管理工具的數據庫才能知道在 /usr 目錄內的每一個文件。
2配置環境JAVA變量
有3種方式配置JAVA環境變量。
2.1/etc/profile
如果你的計算機僅僅作爲開發使用時推薦使用這種方法.所有用戶的shell都有權使用這些環境變量。修改/etc/profile 文件,執行下面的語句:
- $ sudo -s
- # echo 'export JAVA_HOME=/usr/local/java/jdk1.6.0_38' >> /etc/profile
- # echo 'export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' >> /etc/profile
- # echo 'export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar' >> /etc/profile
切換到任何一個用戶,執行下面這個命令,環境變量的更改立即生效:
# source /etc/profile
檢查JAVA環境變量更改是否生效:
$ java -version
2.2 ~/.profile
這個是最安全的方法,控制JAVA到當前用戶。如果你需要給某個用戶權限使用這些環境變量,你只需要修改其個人用戶主目錄下的 .profile, 如下:
- $ cd ~/
- $ echo 'export JAVA_HOME=/usr/local/java/jdk1.6.0_38' >> ./.profile
- $ echo 'export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' >> ./.profile
- $ echo 'export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar' >> ./.profile
- $ source ./.profile
- $ java -version
- or
- $ java
2.3 /etc/profile.d/java.sh
這種方式爲所有用戶增加JAVA環境變量,並且一啓動就生效。強烈不建議這個方式,除非在你個人開發的計算機上。
- $ sudo -s
- # echo '# add java environments to all users' > /etc/profile.d/java.sh
- # chmod 755 /etc/profile.d/java.sh
- # echo 'export JAVA_HOME=/usr/local/java/jdk1.6.0_38' >> /etc/profile.d/java.sh
- # echo 'export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' >> /etc/profile.d/java.sh
- # echo 'export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar' >> /etc/profile.d/java.sh
-
# shutdown -r now
如何在一臺Linux服務器上查找JDK的安裝路徑呢? 有那些方法可以查找定位JDK的安裝路徑?是否有一些侷限性呢? 下面總結了一下如何查找JDK安裝路徑的方法.
1:echo $JAVA_HOME
使用$JAVA_HOME的話能定位JDK的安裝路徑的前提是配置了環境變量$JAVA_HOME,否則如下所示,根本定位不到JDK的安裝路徑
[root@localhost ~]# java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
[root@localhost ~]# echo $JAVA_HOME
2:which java
首先要申明一下which java是定位不到安裝路徑的。which java定位到的是java程序的執行路徑。網上的資料都是人云亦云,完全不去思考。那麼怎麼定位到java的安裝路徑呢?下面我們來看看例子吧,如下所示:
[root@localhost ~]# java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Aug 17 15:12 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 46 Aug 17 15:12 /etc/alternatives/java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
[root@localhost ~]#
[root@localhost ~]# cd /usr/lib/jvm
[root@localhost jvm]# ls
java-1.6.0-openjdk-1.6.0.0.x86_64 java-1.7.0-openjdk-1.7.0.65.x86_64 jre jre-1.6.0 jre-1.6.0-openjdk.x86_64 jre-1.7.0 jre-1.7.0-openjdk.x86_64 jre-openjdk
[root@localhost jvm]#
whereis java 也是如此,它本身不能定位到安裝路徑。可以通過上面例子去定位安裝路徑
3: rpm -ql packagename
如果JDK是源碼安裝的話,那麼這個方法也是行不通的。也就是說rpm –ql packagename也是有一定侷限性的。
[root@localhost ~]# java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
[root@localhost ~]# rpm -qa | grep java
tzdata-java-2014g-1.el6.noarch
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
[root@localhost ~]# rpm -ql java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64 | more
/etc/.java
/etc/.java/.systemPrefs
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jaas-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jaas-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jaas.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jce-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jce-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jce.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jdbc-stdext-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jdbc-stdext-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jdbc-stdext-3.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jdbc-stdext.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-cos-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-cos-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-cos.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-ldap-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-ldap-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-ldap.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-rmi-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-rmi-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi-rmi.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jndi.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jsse-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jsse-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/jsse.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/sasl-1.7.0.65.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/sasl-1.7.0.jar
/usr/lib/jvm-exports/java-1.7.0-openjdk-1.7.0.65.x86_64/sasl.jar
/usr/lib/jvm-exports/jre-1.7.0-openjdk.x86_64
/usr/lib/jvm-private/java-1.7.0-openjdk.x86_64
/usr/lib/jvm-private/java-1.7.0-openjdk.x86_64/jce
/usr/lib/jvm-private/java-1.7.0-openjdk.x86_64/jce/vanilla
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/ASSEMBLY_EXCEPTION
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/LICENSE
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/THIRD_PARTY_README
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/keytool
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/orbd
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/pack200
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/policytool
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/rmid
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/bin/rmiregistry
--More--