Linux不完全攻略(轉)

post0發表於2007-08-10
Linux不完全攻略(轉)[@more@]

Web:

程式碼:

xx. 搭建網頁伺服器

版本:2004-06-27-01

網頁伺服器=IIS?錯啦!

網頁伺服器首選Apache。用Google查查,優秀的多平臺支援、良好的安全性和高度的可定製能力性使它差不多佔據了網頁伺服器7成份額。

xx.1 準備工作

去,在那裡找一個叫httpd的東東下載。要source,不要binary的。

我下載的是此時的最新版本,“httpd-2.0.49.tar.gz”。還有一個很小的驗證碼檔案,“httpd-2.0.94.tar.gz.md5”,一起下回來。

對“httpd-2.0.49.tar.gz”執行“md5sum ”,看看得出的字串是否和“httpd-2.0.94.tar.gz.md5”裡的一致,不一致請重新下載。“httpd- 2.0.94.tar.gz.md5”裡的字母可能是大寫的,這無所謂。要注意的是,“httpd-2.0.94.tar.gz.md5”裡的字串很可能是以兩位一組分開的,以致於我以為下回來的檔案是壞的。

xx.2 安裝

我安裝Apache的路徑是“/opt/prog/c/apache”。先把“httpd-2.0.49.tar.gz”丟到裝臨時檔案的目錄“/opt/prog/tmp”裡。開終端,進這個目錄:

[root@TFW-RFL40 root]# cd /opt/prog/tmp

[root@TFW-RFL40 tmp]#

解壓縮:

[root@TFW-RFL40 tmp]# tar zxvf ./httpd-2.0.49.tar.gz

……

……

……

[root@TFW-RFL40 tmp]#

得到Apache的原始碼目錄“httpd-2.0.49”。

進這個目錄:

[root@TFW-RFL40 tmp]# cd httpd-2.0.49

[root@TFW-RFL40 httpd-2.0.49]#

配置,生成編譯選項:

[root@TFW-RFL40 httpd-2.0.49]# ./configure --prefix="/opt/prog/c/apache" --enable-module=so

……

……

……

[root@TFW-RFL40 httpd-2.0.49]#

“ --prefix=”用來指定軟體的安裝路徑。

“ --enable-module=”使Apache編譯、安裝完成後能夠隨時載入其所指型別的外部模組。可以用多個“ --enable-module=”指定支援多種模組。

更多的引數,在此暫不列舉。

編譯、連線,把原始碼變成本地二進位制碼:

[root@TFW-RFL40 httpd-2.0.49]# make

……

……

……

[root@TFW-RFL40 httpd-2.0.49]#

安裝,把對應的檔案送到相應的地方。

[root@TFW-RFL40 httpd-2.0.49]# make install

……

……

……

[root@TFW-RFL40 httpd-2.0.49]#

xx.3 執行

現在去軟體安裝的地方:

[root@TFW-RFL40 httpd-2.0.49]# cd /opt/prog/c/apache

[root@TFW-RFL40 apache]#

啟動網頁伺服器:

[root@TFW-RFL40 apache]# ./bin/apachectl start

[root@TFW-RFL40 apache]#

開啟瀏覽器,訪問url“localhost”。如果你的計算機已經接入乙太網,你可以在另外一臺計算機的瀏覽器裡用IP地址訪問你自己的計算機。由物理主機和虛擬機器構成的乙太網環境同樣適合。能看到繪有一支大羽毛的Apache測試頁即告成功。

重新啟動網頁伺服器:

[root@TFW-RFL40 apache]# ./bin/apachectl restart

[root@TFW-RFL40 apache]#

關閉網頁伺服器:

[root@TFW-RFL40 apache]# ./bin/apachectl stop

[root@TFW-RFL40 apache]#

xx.4 更高的要求

xx.4.1 ……

……

……

……

xx.4.2 中文支援

“AddDefaultCharset ISO-8859-1”一行改為“AddDefaultCharset GB18030”

……

……

……

JSP:

程式碼:

xx. 搭建JSP伺服器

版本:2004-06-13-01

JSP是一項很有前途的站點動態網頁技術,如果你把握得當,也很有錢途。Tomcat是Apache基金Jakart專案的產品,曾經被SUN推薦來做JSP容器,搭建JSP伺服器的首選。

Tomcat可以充當Apache的JSP擴充套件外掛,也可以獨立執行,充當網頁伺服器。如果你的站點訪問量比較小,你甚至可以不裝Apache。

xx.1 準備工作

去,在那裡找一個叫jakart-tomcat的東東下載。要binary,不要source的。

我下載的是此時穩定的最新版本,“jakart-tomcat-4.1.30.tar.gz”。還有一個很小的驗證碼檔案,“jakart-tomcat-4.1.30.tar.gz.md5”,一起下回來。

對“jakart-tomcat-4.1.30.tar.gz”執行“md5sum ”,看看得出的字串是否和“jakart-tomcat-4.1.30.tar.gz.md5”裡的一致,不一致請重新下載。“jakart- tomcat-4.1.30.tar.gz.md5”裡的字母可能是大寫的,這無所謂。要注意的是,“httpd-2.0.94.tar.gz.md5” 裡的字串很可能是以兩位一組分開的,以致於我以為下回來的檔案是壞的。

Tomcat執行需要J2SDK支援。如果沒有安裝J2SDK,請先安裝J2SDK。

xx.2 安裝

我安裝Tomcat的路徑是“/opt/prog/m/tomcat”。把“jakart-tomcat-4.1.30.tar.gz”丟到裝臨時檔案的目錄“/opt/prog/tmp”裡。開終端,進要安裝軟體的目錄:

[root@TFW-RFL40 root]# cd /opt/prog/m

[root@TFW-RFL40 m]#

解壓縮:

[root@TFW-RFL40 m]# tar zxvf /opt/prog/tmp/jakart-tomcat-4.1.30.tar.gz

……

……

……

[root@TFW-RFL40 m]#

做一個沒有版本號的連結,這樣Tomcat的內容也可以被看成安裝在“/opt/prog/m/tomcat”裡,以後升級方便:

[root@TFW-RFL40 m]# ln -s ./jakart-tomcat-4.1.30 ./tomcat

[root@TFW-RFL40 m]#

主要安裝完成。

修改環境變數檔案。我改的是“/etc/profile”。在檔案的末尾新增如下9行內容:

########################################

# Tomcat

CATALINA_BASE="/opt/prog/m/tomcat"

CATALINA_HOME="/opt/prog/m/tomcat"

JAVA_HOME="/opt/prog/m/java/j2sdk1.4.1_02"

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HOME/bin:$CATALINA_HOME/bin

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC JAVA_HOME CLASSPATH CATALINA_BASE CATALINA_HOME

########################################

CATALINA_BASE、CATALINA_HOME應該就是Tomcat的安裝位置了。JAVA_HOME是J2SDK的安裝位置。

由於我有一個不帶版本號的連結,我用4.1.30替換4.1.27時只是刪除舊的連結和重做一個連結,不必來改這個檔案。

xx.3 執行

現在去軟體安裝的地方:

[root@TFW-RFL40 m]# cd tomcat

[root@TFW-RFL40 tomcat]#

啟動JSP伺服器:

[root@TFW-RFL40 tomcat]# ./bin/startup.sh

[root@TFW-RFL40 tomcat]#

開啟瀏覽器,訪問url“localhost:8080”。如果你的計算機已經接入乙太網,你可以在另外一臺計算機的瀏覽器裡用IP地址訪問你自己的計算機。由物理主機和虛擬機器構成的乙太網環境同樣適合。此時應該能看到畫著一隻黃貓的Tomcat測試頁。再訪問“localhost: 8080/examples/jsp/”,看裡面的動態網頁,如果能正常工作,即告成功。

關閉網頁伺服器:

[root@TFW-RFL40 tomcat]# ./bin/shutdown.sh

[root@TFW-RFL40 tomcat]#

xx.4 更高的要求

xx.4.1 定義

進Tomcat的安裝目錄。我的是“/opt/prog/m/tomcat”。

再進“webapps”目錄。

再進“examples”目錄。

再進“jsp”目錄。看到一個檔案“index.html”,這就是“localhost:8080/examples/jsp/”裡那些動態網頁的索引。

退回一點。注意,目錄“examples”有直接的子目錄WEB-INF,這個子目錄又直接包含一個應用配置檔案“web.xml”。“examples”裡還有其他目錄和檔案,用於實現瀏覽器中不變的和變化的前臺使用者介面。

為了方便繼續描述,在此定義兩個概念“Web應用(或者叫Web應用程式)”和“Web應用主目錄”。

當一個目錄影上述的“examples”那樣包含一個直接子目錄“WEB-INF”,而這個“WEB-INF”又直接包含一個應用配置檔案“web.xml”時,稱這個目錄為“Web應用主目錄”;

一個“Web應用主目錄”及其內部的所有檔案、目錄的集合稱為“Web應用(或者叫Web應用程式)”。

像examples一樣,一般的Web應用主目錄內除了“WEB-INF”外,還有其他一些目錄、檔案,用來實現前臺瀏覽器中變化的或不變的使用者介面,而“WEB-INF”裡除了“web.xml”,往往還有其他目錄、檔案,用於在後臺完成對前臺介面的控制。

xx.4.2 現狀

目前你的目前Tomcat能供外界供訪問的Web應用只有“http://主機(主機名或IP):8080/examples/”。從應用的角度來看,在稍微正式一點的場合中,單一的、名字死板的Web應用總不太好,互相沒什麼關聯的功能或內容,最好由不同的Web應用提供;從開發的角度來看, “examples”裡面滿是原裝的例子,一大堆檔案,在這裡面繼續開發,檔案更多,更亂,也難於管理。

xx.4.3 初步目標

初步的目標是實現大致如下的佈局:

有若干個目錄,分別裝著包括除錯的和對外的Web應用,並充當各應用的主目錄,暫且命名為“app_1”、“app2”……“app_x”……“app_n”,當然那個“examples”也可以位列其中;

用某目錄“A”充當Web應用的根目錄,將Web應用主目錄“app_1”、“app2”……“app_n”都放置其中;

以“http://主機/app_x/”作為url即可使用相應Web應用主目錄“app_x”中的內容。

在我的機上,Web應用根目錄是“/opt/prog/m/webapps”。供學習、除錯用的Web應用有“root.web_00”、 “typhoon.anti”、“typhoon.study”、“typhoon.web_00”,對外的有“examples”、 “exampless”和“typhoon.school”。

xx.4.4 修改

到Tomcat的安裝目錄“/opt/prog/m/tomcat”,進配置檔案目錄“conf”,找到檔案“server.xml”。用文字編輯器開啟“server.xml”,在其中找到如下內容:

unpackWARs="true" autoDeploy="true">

將“appBase”對應的“webapps”是預設的Web應用根目錄。把它修改為欲用做Web應用根目錄的目錄“A”。注意要寫明“A”的全路徑。我填寫的是“/opt/prog/m/webapps”。再找如下內容:

reloadable="true" crossContext="true">

“Context path”似乎是指JSP容器,“docBase”含義也沒弄清,不過按預設內容是不行的。把“Context path”對應的內容修“/examples”改為“/”。把“docBase”對應的內容修“examples”改為與前面提到的“appBase”相同。再把配置檔案“web.xml”改名,改名前先向每個Web應用的“WEB-INF”目錄裡複製一份,以替代“WEB-INF”裡的 “web.xml”。

重新啟動Tomcat,用url“http://主機:8080/app_x/”,Web應用裡的內容都能用了。目標達到。

如果希望直接用Tomcat充當Web伺服器,“http://主機:8080/app_x/”不太好。開啟“server.xml”,找到下面一段:

port="8080" minProcessors="5" maxProcessors="75"

enableLookups="true" redirectPort="8443"

acceptCount="100" debug="0" connectionTimeout="20000"

useURIValidationHack="false" disableUploadTimeout="true" />

這段將8080埠定義為Tomcat預設的HTTP埠。將“8080”修改為“80”即可以“http://主機/app_x/”方式訪問各Web應用。

整合:

程式碼:

xx. 整合Web伺服器與JSP伺服器

版本:2004-06-13-02

Apache是專業的Web伺服器,專注於它的本行,而碰到JSP、PHP、ASP類的動態網頁,它只能乾瞪眼;Tomcat主要是個JSP引擎,充當 Web伺服器只是兼職,靜態頁面處理能力不足,也無法應對大量HTTP訪問。但是Apache能夠把不認識的網頁提交給其他伺服器處理並接受處理結果,而 Tomcat也能夠處理其他伺服器提交的JSP頁並返回處理結果,兩者一拍即合,分工明確,合作愉快。

下面的說明中,軟體版本和Apache、Tomcat的安裝路徑以你的實際情況為準。

xx.1 早期的module_webapp方式

xx.1.1 準備工作

去,在那裡找apr和對應你Tomcat版本的jakarta-tomcat-connectors- 4.1.30-src下載。都要source的。我下的是“apr-0.9.4.tar.gz”和“jakarta-tomcat-connectors -4.1.30-src.tar.gz”。把它們對應的md5校驗碼檔案一起下回來。

分別對下回來的檔案執行“md5sum”,把結果與各自校驗碼檔案裡的內容對比,如果對不上請重新下載。

xx.1.2 安裝整合外掛

把“jakarta-tomcat-connectors-4.1.30-src.tar.gz”丟進裝臨時檔案的目錄“/opt/prog/tmp”,並解壓縮到此。

進入解壓縮生成的目錄“jakarta-tomcat-connectors-4.1.30-src”。注意到裡面的“webapp”目錄了吧?把“apr-0.9.4.tar.gz”丟進去,並解壓縮到那裡。

進“webapp”,把新生成的目錄“apr-0.9.4”更名或連結為“apr”。

開終端,進這個目錄:

[root@TFW-RFL40 root]# cd /opt/prog/tmp/jakarta-tomcat-connectors-4.1.30/webapp/apr

[root@TFW-RFL40 apr]#

生成編譯配置檔案:

[root@TFW-RFL40 apr]# ./support/buildconf.sh

……

……

……

[root@TFW-RFL40 apr]#

配置,生成編譯選項:

[root@TFW-RFL40 apr]# ./configure --with-apxs="/opt/prog/c/apache/bin/apxs"

……

……

……

[root@TFW-RFL40 apr]#

編譯、連線,把原始碼變成本地二進位制碼:

[root@TFW-RFL40 apr]# make

……

……

……

[root@TFW-RFL40 apr]#

進目錄“Apache-2.0”,如果前面沒出差錯,這裡會有“mod_webapp.so”,這就是所需要的整合外掛。如果你的Apache版本是是 1.3.x,整合外掛應該在“Apache-1.3”裡。把“mod_webapp.so”屬性修改為所有者可執行。

去Apache的安裝目錄“/opt/prog/c/apache”,把整合外掛複製或移動到目錄“modules”裡。如果Apache版本是是1.3.x,整合外掛複製或移動到目錄“libexec”裡。

xx.1.3 整合

最後一步,讓Apache與Tomcat攜手工作,需要修改配置檔案。

xx.1.3.1 Apache

編輯Apache的配置檔案“http.conf”,在其最後新增如下一行:

LoadModule?webapp_module?modules/mod_webapp.so

如果Apache版本是是1.3.x,新增這行:

LoadModule?webapp_module?libexec/mod_webapp.so

儲存修改。

在終端裡檢查外掛模組是否能正常載入:

[root@TFW-RFL40 apr]# cd /opt/prog/c/apache

[root@TFW-RFL40 apache]# ./bin/apachectl configtest

如果能正常載入,會出現:

Syntax OK

[root@TFW-RFL40 apr]#

否則請檢查前面是否有差錯,或查詢其他資料。

再次編輯“http.conf”,繼續在最後新增如下兩行:

ServerName localhost:8008

WebAppConnection warpConnection warp localhost:8008

去Tomcat的Web應用根目錄瞧瞧,看哪Web應用些是需要對外開放的,把它們以“WebAppDeploy examples warpConnection /app_x”形式逐行新增在配置檔案“httpd.conf”末尾。我新增的有:

WebAppDeploy examples warpConnection /examples

WebAppDeploy examples warpConnection /exampless

WebAppDeploy examples warpConnection /typhoon.school

xx.1.3.2 Tomcat

到Tomcat的配置檔案目錄“/opt/prog/m/tomcat/conf”,用文字編輯器開啟“server.xml”。如果從前沒有改動過這個檔案,能找到這樣一段,或者類似的段:

port="8080" minProcessors="5" maxProcessors="75"

enableLookups="true" redirectPort="8443"

acceptCount="100" debug="0" connectionTimeout="20000"

useURIValidationHack="false" disableUploadTimeout="true" />

把這段新增在上面一段之前:

port="8008" minProcessors="5" maxProcessors="75"

enableLookups="true"

acceptCount="10" debug="0"/>

連線外掛“mod_webapp.so”預設使用8008埠,這段是對8008埠的定義,可以在“server- noexamples.xml.config”裡找到。如果Tomcat是4.1.18/4.1.19版本,請注意“server.xml”裡是否已經有 8008埠的說明,如果有,就不必再新增。

xx.2 更新的module_jk2方式

xx.2.1 準備工作

去,在那裡找jakarta-tomcat-connectors-jk2-src-current,要 source,不要binary的。把它的md5校驗碼檔案也找出來,都下載。我下的是“jakarta-tomcat-connectors-jk2- src-current.tar.gz”和“jakarta-tomcat-connectors-jk2-src- current.tar.gz.md5”。

分別對下回來的檔案執行“md5sum”,把結果與各自校驗碼檔案裡的內容對比,如果對不上請重新下載。

xx.2.2 安裝整合外掛

把“jakarta-tomcat-connectors-jk2-src-current.tar.gz”丟進裝臨時檔案的目錄“/opt/prog/tmp”。

開終端,進這個目錄:

[root@TFW-RFL40 root]# cd /opt/prog/tmp

[root@TFW-RFL40 tmp]#

解壓縮:

[root@TFW-RFL40 tmp]# tar zxvf jakarta-tomcat-connectors-jk2-src-current.tar.gz

……

……

……

[root@TFW-RFL40 tmp]#

生成編譯配置檔案:

[root@TFW-RFL40 tmp]# cd jakarta-tomcat-connectors-jk2-2.0.4-src

[root@TFW-RFL40 jakarta-tomcat-connectors-jk2-2.0.4-src]# cd jk

[root@TFW-RFL40 jk]# cd native2

[root@TFW-RFL40 natave2]# sh ./buildconf.sh

……

……

……

[root@TFW-RFL40 native2]#

配置,生成編譯選項:

[root@TFW-RFL40 native2]# ./configure --with-apxs2="/opt/prog/c/apache/bin/apxs" -enable-EAPI

……

……

……

[root@TFW-RFL40 native2]#

我不清楚這個EAPI是什麼,但是我把這個引數加上後編譯就成功了。

編譯、連線,把原始碼變成本地二進位制碼:

[root@TFW-RFL40 native2]# make

……

……

……

[root@TFW-RFL40 native2]#

進目錄“jakarta-tomcat-connectors-jk2-2.0.4-src/jk/build/jk2/apache2 ”,如果前面沒出差錯,這裡會有“mod_jk2.so”,這就是所需要的整合外掛。如果你的Apache版本是是1.3.x,整合外掛可能在 “jakarta-tomcat-connectors-jk2-2.0.4-src/jk/build/jk2/apache”裡。把 “mod_jk2.so”屬性修改為所有者可執行。

去Apache的安裝目錄“/opt/prog/c/apache”,把整合外掛複製或移動到目錄“modules”裡。如果Apache版本是是1.3.x,整合外掛複製或移動到目錄“libexec”裡。

xx.2.3 整合

最後一步,讓Apache與Tomcat攜手工作,需要修改配置檔案。

xx.2.3.1 Apache

編輯Apache的配置檔案“http.conf”,在其最後新增如下一行:

LoadModule?webapp_module?modules/mod_jk2.so

如果Apache版本是是1.3.x,新增這行:

LoadModule?webapp_module?libexec/mod_jk2.so

儲存修改。

在終端裡檢查外掛模組是否能正常載入:

[root@TFW-RFL40 apache]# cd /opt/prog/c/apache

[root@TFW-RFL40 apache]# ./bin/apachectl configtest

如果能正常載入,會出現:

Syntax OK

[root@TFW-RFL40 apache]#

否則請檢查前面是否有差錯,或查詢其他資料。

開啟“/opt/prog/c/apache/worker2.properties”。如果檔案不存在,就建立這個檔案。如果Apache版本不是2.0.49,請將其內容替換為以下21行:

[shm]

info=Scoreboard. Requried for reconfiguration and status with multiprocess servers.

file=anon

# Defines a load balancer named lb. Use even if you only have one machine.

[lb:lb]

# Example socket channel, override port and host.

[channel.socket:localhost:8009]

port=8009

host=127.0.0.1

# define the worker

[ajp13:localhost:8009]

channel=channel.socket:localhost:8009

group=lb

# Map the Tomcat examples webapp to the Web server uri space

[uri:/examples/*]

group=lb

[status:]

info=Status worker, displays runtime information

[uri:/jkstatus/*]

info=The Tomcat /jkstatus handler

group=status:

上述為2.0.49版Apache的“worker2.properties”內容。將上述文字置入檔案時,為了便於閱讀,允許用回車拉大行距。

去Tomcat的Web應用根目錄瞧瞧,看哪Web應用些是需要對外開放的,把它們逐行新增在“# Map the Tomcat examples webapp to the Web server uri space

”下方,替代原有的“[uri:/examples/*]”。

我新增的有:

[uri:/examples/*]

[uri:/exampless/*]

[uri:/typhoon.school/*]

xx.2.3.2 Tomcat

到Tomcat的配置檔案目錄“/opt/prog/m/tomcat/conf”,用文字編輯器開啟“server.xml”。如果從前沒有改動過這個檔案,能找到這樣一段,或者類似的段:

port="8080" minProcessors="5" maxProcessors="75"

enableLookups="true" redirectPort="8443"

acceptCount="100" debug="0" connectionTimeout="20000"

useURIValidationHack="false" disableUploadTimeout="true" />

再檢查一下,看是否有這段對8009埠的定義:

port="8009" minProcessors="5" maxProcessors="75"

enableLookups="true" redirectPort="8443"

acceptCount="10" debug="0" connectionTimeout="0"

useURIValidationHack="false"

protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>

連線外掛“mod_jk2.so”預設使用8009埠,如果檔案裡沒有這段,需要把它新增在上一段之前。

xx.3 聯合測試

注意,“mod_webapp.so”和“mod_jk2.so”最好不要一起用,只用其中一個。重新啟動Apache和Tomcat。再用url “http://主機/app_x/”試試,應該一切OK了。以後做JSP開發的時候可以只用Tomcat,並且能以“http://主機: 8080/app_x/”使用所有的Web應用。承擔外界訪問的時候Apache和Tomcat一起跑,外界如果從80埠訪問,只能使用 “httpd.conf”或“worker2.properties”裡提到的Web應用。

再改一點。開啟Tomcat配置檔案“server.xml”,還找這段:

port="8080" minProcessors="5" maxProcessors="75"

enableLookups="true" redirectPort="8443"

acceptCount="100" debug="0" connectionTimeout="20000"

useURIValidationHack="false" disableUploadTimeout="true" />

很多人已經知道Tomcat的HTTP管理埠是8080,你可以把裡面的“8080”改成別人不知道的,比如“8088”。不要改成已經被佔用的埠。修改後你能以“http://主機:8088/app_x/”使用所有的Web應用。

從現在起,所有非JSP的內容由Apache處理,JSP的東東都透過8008或8009埠發給Tomcat,各得其所。

資料庫:

程式碼:

實踐:Typhoon.Free.Wolf

宣告:不承擔由此產生的不良後果

版本:V0.9.3+++ 2004-03-30-01

本文(不包含連結)可以以非商業目的任意轉載。

下面是我安裝和初步試用PostgreSQL的經歷,集中在這裡。

安裝篇

我下載了PostgreSQL7.3.4,是原始碼,儲存為“/opt/lin_app02/tmp/download/PostgreSQL/R1/postgresql-7.3.4.tar.gz”。下載後,我在這個目錄下開了終端(rxvt),執行命令:

[code]

[root@TFW-RFL40F R1]# tar zxvfp ./postgresql-7.3.4.tar.gz

[/code]

得到一個目錄“postgresql-7.3.4”。

[code]

[root@TFW-RFL40F R1]# cd postgresql-7.3.4

[root@TFW-RFL40F postgresql-7.3.4]# ./configure --prefix=/opt/lin_app02/postgres --enable-locale --enable-multibyte --with-perl --with-odbc --with-tcl

[/code]

......

對上面一步的說明:

./configure

configure不加任何選項,系統將按預設的設定安裝postgresql,檢視configre的相關選項可以使用:configure -help

一些最常用的如下:

--prefix=BASEDIR

為安裝 PostgreSQL 選擇一個不同的基礎路徑。預設是 /usr/local/pgsql。

--enable-locale

如果你想用本地化支援。

--enable-multibyte

允許使用多位元組字元編碼。這個選項主要用於象日語,韓語或中文這樣的語言。

--with-perl

新增 Perl 模組介面。請注意 Perl 介面將安裝到 Perl 模組的常用位置(典型的是在 /usr/lib/perl),所以要成功使用這個選項,你必須有 root 許可權。

--with-odbc

製作 ODBC 驅動包。

--with-tcl

製作 Tcl/Tk 需要的介面庫和程式,包括 libpgtcl,pgtclsh,和 pgtksh。

這些編譯引數告訴編譯器如何編譯PostgreSQL:

[code]

[root@TFW-RFL40F postgresql-7.3.4]# make

[/code]

......

[code]

[root@TFW-RFL40F postgresql-7.3.4]# make install

[/code]

......

中間不報錯的話,安裝就完成了。

初始化

建立一個存放資料庫檔案的目錄:

[code]

[root@TFW-RFL40F postgresql-7.3.4]# mkdir /opt/lin_app02/postgre-data

[/code]

下面要設定環境變數。由於安全原因,PostgreSQL是不讓“root”等特權使用者用的。為了方便,我就用日常工作的“typhoon”身份管理PostgreSQL,但是建議大家為管理PostgreSQL新建立一個使用者。為了方便,我直接修改了“/etc/profile”,但是建議修改個人主目錄下的“.bash_profile”。

我在環境變數檔案裡新增了如下內容:

[code]

########################################

# PostgreSQL

LD_LIBRARY_PATH=/opt/lin_app02/postgres/lib

export LD_LIBRARY_PATH

PGLIB=/opt/lin_app02/postgres/lib

PGDATA=/opt/lin_app02/postgre-data

PATH=$PATH:/opt/lin_app02/postgres/bin

MANPATH=$MANPATH:/opt/lin_app02/postgres/man

export PGLIB PGDATA PATH MANPATH

########################################

[/code]

看著挺麻煩,其實就是下面的格式:

LD_LIBRARY_PATH=/lib

export LD_LIBRARY_PATH

PGLIB=/lib

PGDATA=

PATH=$PATH:/bin

MANPATH=$MANPATH:/man

export PGLIB PGDATA PATH MANPATH

剛才提到的那些目錄都是在“root”身份下建立的,要讓它們能為“typhoon”所用,還得改許可權:

[code]

[root@TFW-RFL40F postgresql-7.3.4]# chown -R typhoon.typhoon /opt/lin_app02/postgre*

[/code]

即:

chown -R .

chown -R .

然後我關閉了X,並登出,再重新登入,以使環境變數生效。

[code]

[typhoon@TFW-RFL40F typhoon]$ initdb

[/code]

這個命令用來初始化PostgreSQL。請確保執行前你放資料庫檔案的地方是空的。

初始化後會自動建立資料庫的超級使用者,使用者名稱與安裝、執行初始化的作業系統使用者同名。可能還會自動建立一個與使用者名稱同名的資料庫。在我這裡就是使用者“typhoon”和資料庫“typhoon”。直接執行“/bin/psql”就能登入進去。“q”可以退回作業系統的shell。如果這個資料庫沒有自動生成,請執行“/bin/createdb [使用者名稱]”,即以你的使用者名稱建立一個資料庫。這個資料庫就相當於你的“Home”,沒這個資料庫,做某些事情就不方便。

啟停方法

[code]

[typhoon@TFW-RFL40F typhoon]$ postmaster -i -D ./postgre-data/&

[/code]

postmaster -i -D &

......

這是開始資料庫系統的服務。後面那個“&”最好帶上,否則,......:-D

上面說的啟動方法是正規方法,PostgreSQL還提供了封裝的控制指令碼“/bin/pg_ctl”。

[code]

[typhoon@TFW-RFL40F typhoon]$ pg_ctl -l ./123/pg.log start

[/code]

如果有“-l 檔名”這個引數,所有的錯誤都會被記錄到這個檔案裡。

[code]

[typhoon@TFW-RFL40F typhoon]$ pg_ctl stop

[/code]

停止服務。既然是停止,就別管什麼記錄檔案了。

[code]

[typhoon@TFW-RFL40F typhoon]$ pg_ctl -l ./123/pg.log restart

[/code]

相當於先“stop”再“start”。

[code]

[typhoon@TFW-RFL40F typhoon]$ pg_ctl reload

[/code]

如果對配置檔案做了修改,想不中斷服務而立即生效,就這樣。

注意:PostgreSQL管理員最好從“Login:”、xdm或kdm登入系統,因為如果“su”過去操作將不能正常執行。

和大家共同進步。下面是我安裝時參考的帖子:

[url][/url]

[url][/url]

[url][/url]

我四處查詢連結裡所說的“egcs-c++”,也沒下載到,後來才知道“egcs-c++”已經被整合進高版本的“gcc”裡了。我的“gcc”是3.2的。大家的“gcc”如果高於2.8,也就不要再到處找“egcs-c++”了。

安全管理

初始化後,在資料庫目錄裡會有這樣兩個檔案:“postgresql.conf”和“pg_hba.conf”。

修改“postgresql.conf”第30行左右的地方為頂格“tcpip_socket = true”,以允許網路訪問。

“pg_hba.conf”,基於主機的訪問控制(Host Based Access)。左邊有“#”的內容都是被註釋掉的,起說明或參考等作用。

我以我現在的檔案為例做說明(裡面的中文為我的說明):

[code]

# PostgreSQL Client Authentication Configuration File

# ===================================================

#

# Refer to the PostgreSQL Administrator's Guide, chapter "Client

# Authentication" for a complete description. A short synopsis

# follows.

#

# This file controls: which hosts are allowed to connect, how clients

# are authenticated, which PostgreSQL user names they can use, which

# databases they can access. Records take one of three forms:

#

# local DATABASE USER METHOD [OPTION]

# host DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]

# hostssl DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]

#

# (The uppercase quantities should be replaced by actual values.)

# DATABASE can be "all", "sameuser", "samegroup", a database name (or

# a comma-separated list thereof), or a file name prefixed with "@".

# USER can be "all", an actual user name or a group name prefixed with

# "+" or a list containing either. IP-ADDRESS and IP-MASK specify the

# set of hosts the record matches. METHOD can be "trust", "reject",

# "md5", "crypt", "password", "krb4", "krb5", "ident", or "pam". Note

# that "password" uses clear-text passwords; "md5" is preferred for

# encrypted passwords. OPTION is the ident map or the name of the PAM

# service.

#

# This file is read on server startup and when the postmaster receives

# a SIGHUP signal. If you edit the file on a running system, you have

# to SIGHUP the postmaster for the changes to take effect, or use

# "pg_ctl reload".

# Put your actual configuration here

# ----------------------------------

#

# CAUTION: The default configuration allows any local user to connect

# using any PostgreSQL user name, including the superuser, over either

# Unix-domain sockets or TCP/IP. If you are on a multiple-user

# machine, the default configuration is probably too liberal for you.

# Change it to use something other than "trust" authentication.

#

# If you want to allow non-local connections, you need to add more

# "host" records. Also, remember TCP/IP connections are only enabled

# if you enable "tcpip_socket" in postgresql.conf.

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD

#訪問來源 資料庫 使用者 IP-地址 子網掩碼 認證方式

local typhoon typhoon md5

#對於來自本地的訪問,資料庫“typhoon”對使用者“typhoon”採用“md5”加密口令認證

local typhoon all reject

#對於來自本地的訪問,資料庫“typhoon”對上面沒提到的所有使用者無條件拒絕認證

host typhoon typhoon 255.255.255.255 127.0.0.1 md5

#對於來網路的訪問,資料庫“typhoon”對使用者“typhoon”,如果提出訪問的是本機,採用“md5”加密口令認證

host typhoon all 0.0.0.0 0.0.0.0 reject

#對於來網路的訪問,資料庫“typhoon”對上面沒提到的所有使用者,不管提出訪問的哪臺機器,也不管它來自哪個子網,無條件拒絕認證

local all all md5

#對於來自本地的訪問,上面沒提到的資料庫對上面沒提到的所有使用者採用“md5”加密口令認證

host all all 0.0.0.0 0.0.0.0 md5

#對於來網路的訪問,數上面沒提到的資料庫對上面沒提到的所有使用者,不管提出訪問的哪臺機器,也不管它來自哪個子網,採用“md5”加密口令認證

########################################

# Others are all denied 其他訪問一概無條件拒絕

local all all reject

host all all 0.0.0.0 0.0.0.0 teject

########################################

########################################

# All denied permissed, not safe

# 對所有訪問都信任,太不安全,被我禁止掉了,只作為參考

#local all all trust

#host all all 0.0.0.0 0.0.0.0 trust

########################################

[/code]

這些認證的規則是從上到下一條一條載入的,要注意的是,裡面的“all”並不是真正意義上的“所有”,只是前面的規定中沒有提到的那部分。個人感覺用“other”也許更恰當。

這樣,最終的結果是:

所有使用者都能透過加密口令訪問“typhoon”以外的資料庫,但是隻有使用者“typhoon”能以加密口令訪問資料庫“typhoon”。

操作篇

[客戶端基本連線操作]====================

*檢視PostgreSQL的系統表:

(摸索/查詢中)

*終端登入:

psql -l[主機名/IP] -d[資料庫名] -U[使用者名稱]

*連線到另外一個資料庫:

c [資料庫名]

*斷開終端:

q

========================================

[基本使用者管理]==========================

*新增使用者:

create user [使用者名稱];

*修改使用者密碼:

alter user [使用者名稱] with password [口令];

*刪除使用者:

drop user [使用者名稱];

*檢視使用者資訊:

(摸索/查詢中)

========================================

[基本資料庫操作]========================

*建立資料庫:

create database [資料庫名];

*檢視資料庫列表:

d

*刪除資料庫:

drop database [資料庫名];

*修改資料庫的所有者:

(摸索/查詢中)

========================================

[資料庫內基本操作]======================

*給予某使用者在某資料庫建立表的授權:

(摸索/查詢中)

*收回某使用者在某資料庫建立表的授權:

(摸索/查詢中)

建立表:

create table ([欄位名1] [型別1] ,[欄位名2] [型別2],......);

*檢視錶名列表:

d

*檢視某個表的狀況:

d [表名]

*重新命名一個表:

alter table [表名A] rename to [表名B];

*修改表的所有者:

(摸索/查詢中)

*刪除一個表:

drop table [表名];

========================================

[表內基本操作]==========================

*在已有的表裡新增欄位:

alter table [表名] add column [欄位名] [型別];

*刪除表中的欄位:

alter table [表名] drop column [欄位名];

*重新命名一個欄位:

alter table [表名] rename column [欄位名A] to [欄位名B];

*給一個欄位設定預設值:

alter table [表名] alter column [欄位名] set default [新的預設值];

*去除預設值:

alter table [表名] alter column [欄位名] drop default;

*將已存在的表裡某列設定為主碼:

(摸索/查詢中)

*將已存在的表裡某幾列設定為主碼:

(摸索/查詢中)

*取消某列的主碼資格:

(摸索/查詢中)

在表中插入資料:

insert into 表名 ([欄位名m],[欄位名n],......) values ([列m的值],[列n的值],......);

修改表中的某行某列的資料:

update [表名] set [目標欄位名]=[目標值] where [該行特徵];

刪除表中某行資料:

delete from [表名] where [該行特徵];

delete from [表名];--刪空整個表

========================================

[備份]==================================

備份一個資料庫:

pg_dump 資料庫名 > 備份檔案

把備份檔案導回原資料庫或匯入新資料庫:

cat 備份檔案 | psql 資料庫名

最好先把這個資料庫的認證改為“trust”。

備份一個表:

pg_dump -t table1 dbname > bk1.sql

========================================

ADD

摘自[]:

你需要為psql程式帶入引數:psql -d databasename -U username -W。-d用來指定資料庫,-U指定使用者名稱,而-W要求psql提示你輸入一個口令。當你成功地執行了psql以後,將每個CREATE TABLE查詢單獨地貼上到psql中並按Enter鍵。如果在你的SQL語句中有錯誤,psql會給出相應提示。透過逐一地加入每一個表,你會得到每一個表的除錯資訊,這樣做起來相當簡單。如果,在你輸入了表的定義之後,你發現遺漏了一兩個欄位,有兩種方法

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940368/,如需轉載,請註明出處,否則將追究法律責任。

相關文章