linuxdb2建庫
DB2資料庫命令簡介
1.啟動資料庫
DB2start
2.停止資料庫
DB2stop
DB2資料庫在linux相關指令之3.連接資料庫
DB2 connect to o_yd user DB2 using pwd
4.讀資料庫管理程序配置
DB2 get dbm cfg
5.寫資料庫管理程序配置
DB2 update dbm cfg using 參數名 參數值
6.讀資料庫的配置
DB2 connect to o_yd user DB2 using pwd
DB2 get db cfg for o_yd
7.寫資料庫的配置
DB2 connect to o_yd user DB2 using pwd
DB2 update db cfg for o_yd using 參數名 參數值
8.關閉所有應用連接
DB2 force application all
DB2 force application ID1,ID2,,,Idn MODE ASYNC
(DB2 list application for db o_yd show detail)
9.備份資料庫
DB2 force application all
DB2 backup db o_yd to d:
(DB2 initialize tape on \.tape0)
(DB2 rewind tape on \.tape0)
DB2 backup db o_yd to \.tape0
10.恢復資料庫
DB2 restore db o_yd from d: to d:
DB2 restore db o_yd from \.tape0 to d:
DB2資料庫在linux相關指令之11.綁定存儲過程
DB2 connect to o_yd user DB2 using pwd
DB2 bind c:dfplus.bnd
拷貝存儲過程到伺服器上的C:sqllibfunction目錄中
12.整理表
DB2 connect to o_yd user DB2 using pwd
DB2 reorg table ydd
DB2 runstats on table ydd with distribution and indexes all
13.導出表數據
DB2 export to c:dftz.txt of del select * from dftz
DB2 export to c:dftz.ixf of ixf select * from dftz
14.導入表數據
import from c:123.txt of del insert into ylbx.czyxx
DB2 import to c:dftz.txt of del commitcount 5000 messages c:dftz.msg insert into dftz
DB2 import to c:dftz.ixf of ixf commitcount 5000 messages c:dftz.msg insert into dftz
DB2 import to c:dftz.ixf of ixf commitcount 5000 insert into dftz
DB2 import to c:dftz.ixf of ixf commitcount 5000 insert_update into dftz
DB2 import to c:dftz.ixf of ixf commitcount 5000 replace into dftz
DB2 import to c:dftz.ixf of ixf commitcount 5000 create into dftz (僅IXF)
DB2 import to c:dftz.ixf of ixf commitcount 5000 replace_create into dftz (僅IXF)
15.執行一個批處理文件
DB2 -tf 批處理文件名
(文件中每一條命令用 ;結束)
16.自動生成批處理文件
建文本文件:temp.sql
select 'runstats on table DB2.' || tabname || '
with distribution and detailed indexes all;'
from syscat.tables where tabschema='DB2' and type='T';
DB2 -tf temp.sql>runstats.sql
17.自動生成建表(視圖)語句
在伺服器上:C:sqllibmisc目錄中
DB2 connect to o_yd user DB2 using pwd
DB2look -d o_yd -u DB2 -e -p -c c:o_yd.txt
DB2資料庫在linux相關指令之18.其他命令
grant dbadm on database to user bb
19select * from czyxx fetch first 1 rows only
20DB2look -d ylbx -u DB2admin -w -asd -a -e -o a.txt21. 顯示當前用戶所有表
list tables
22.列出所有的系統表
list tables for system
23.查看錶結構
DB2 describe select * from user.tables
B. db2常用命令
操作資料庫命令
1、 啟動資料庫實例
#db2start
2、 停止資料庫實例
#db2stop
如果你不能停止資料庫由於激活的連接,在運行db2stop前執行db2 force application all就可以了 /db2stop force
3、 創建資料庫
#db2 create db [dbname]
4、 連接到資料庫
#db2 connect to [dbname] user[username] using [password]
5、 斷開資料庫連接
#db2 connect reset
操作數據表命令
1、 列出所有用戶表
#db2 list tables
2、列出所有系統表
#db2 list tables for system
3、列出所有表
#db2 list tables for all
4、 列出系統表
#db2 list tables for system
5、列出用戶表
#db2 list tables for user
6、 列出特定用戶表
#db2 list tables for schema[user]
C. 虛擬機Linux上部署DB2pureScale過程
在Linux 操作系統 中,可在虛擬機上搭建DB2 pureScale,那麼搭建的步驟是怎麼樣的呢?DB2 pureScale又有什麼用呢?下面隨我一起來了解下Linux系統如何在虛擬機上部署DB2 pureScale。
在虛擬機Linux上部署DB2pureScale實踐過程
1、環境准備
硬體環境:3 台 x86-64虛擬機,內存要求 1.5G 或以上(主要針對虛擬機,內存過低會造成資料庫實例啟動失敗)
操作系統:Suse Linux Enterprise Server 11.3
DB2 版本:DB2 v10.5
機器名:node01 node02 node03
IP:192.168.18.201 192.168.18.202 192.168.18.203
網關:192.168.18.2
利用iscsi服務來做共享存儲功能,其中node01 作為 iscsi 的 Server,node01、node02和 node03 作為 iscsi Client,這樣三台虛擬機上都能看到相同的磁碟了(按照developer workers上的 文章 :非 InfiniBand 環境下搭建 DB2 pureScale,我用DB2 v10.5時啟動實例失敗,可能10.5做了限制,CF與member在同一台機器啟動失敗,幫多了一台虛擬機)。
2、操作系統安裝:
Node01預留出一塊分區,不進行格式化(文件類型為0x83 Linux)做為 pureScale 集群的 Sharing Disk 使用,Node02與Node03跟node01 其它 相同就可,
安裝必要的包:
libstdc++(32 位和 64 位庫)
glibc(32 位和 64 位庫)
cpp
gcc
gcc-c++
kernel-source
binutils
ksh-93u-0.8.1
openssh
ntp
完成SUSE 11 SP3的安裝。
驗證:檢查/lib/moles/3.0.76-0.11-default/build/include/linux有無autoconf.h,如果沒有autoconf.h,安裝DB2時會報Compiling GPL :.......Failure錯誤。
解決 方法 :cp –v /usr/src/linux-3.0.76-0.11-obj/x86_64/default/include/generated /lib/moles/3.0.76-0.11-default/build/include/linux
3、添加用戶和用戶組
三台機器全部執行如下命令(如果不做特殊說明,以#表示root身份登錄,以$表示db2inst1身份,以下相同)。
#groupadd -g 1001 db2fadm1
#groupadd -g 1002 db2iadm1
#useradd -g db2fadm1 -u 1001 -m -d /home/db2fenc1 -p db2fenc1 db2fenc1
#useradd -g db2iadm1 -u 1002 -m -d /home/db2inst1 -p db2inst1 db2inst1
#mkdir /root/.ssh
# su - db2inst1 -c "mkdir -p /home/db2inst1/.ssh"
4、配置ssh 信任連接
ssh信任通俗的說就是直接ssh不用輸入密碼
在/etc/hosts添加另外兩台機器的IP地址及機器名(確保3台機器名與ip地址全部出現在hosts文件中)
例如我的機器hosts如下:
127.0.0.1 localhost
192.168.18.201 node01.site node01
192.168.18.202 node02.site node02
192.168.18.203 node03.site node03
node01執行如下命令:
#ssh-keygen -t rsa
#cp -v /root/.ssh/id_rsa.pub /root/.ssh/id01
#scp /root/.ssh/id01 node02:/root/.ssh
#scp /root/.ssh/id01 node03:/root/.ssh
#su - db2inst1
$ssh-keygen -t rsa
$cp -v /home/db2inst1/.ssh/id_rsa.pub /home/db2inst1/.ssh/id01
$scp /home/db2inst1/.ssh/id01 node02:/home/db2inst1/.ssh
$scp /home/db2inst1/.ssh/id01 node03:/home/db2inst1/.ssh
node02執行如下命令:
#ssh-keygen -t rsa
#cp -v /root/.ssh/id_rsa.pub /root/.ssh/id02
#scp /root/.ssh/id02 node01:/root/.ssh/
#scp /root/.ssh/id02 node03:/root/.ssh/
#su - db2inst1
$ssh-keygen -t rsa
$cp -v /home/db2inst1/.ssh/id_rsa.pub /home/db2inst1/.ssh/id02
$scp /home/db2inst1/.ssh/id02 node01:/home/db2inst1/.ssh/
$scp /home/db2inst1/.ssh/id02 node03:/home/db2inst1/.ssh/
node03執行如下命令:
#ssh-keygen -t rsa
#cp -v /root/.ssh/id_rsa.pub /root/.ssh/id03
#scp /root/.ssh/id03 node01:/root/.ssh
#scp /root/.ssh/id03 node02:/root/.ssh
#su - db2inst1
$ssh-keygen -t rsa
$cp -v /home/db2inst1/.ssh/id_rsa.pub /home/db2inst1/.ssh/id03
$scp /home/db2inst1/.ssh/id03 node01:/home/db2inst1/.ssh/
$scp /home/db2inst1/.ssh/id03 node02:/home/db2inst1/.ssh/
分別在node01、node02、node03執行如下命令
#cd /root/.ssh
#cat id01 id02 id03 > authorized_keys
#chmod 600 authorized_keys
#su - db2inst1
$cd /home/db2inst1/.ssh
$ cat id01 id02 id03 > authorized_keys
測試是否配置成功
3台機器分別以root與db2inst1執行:
#ssh node01 ls
#ssh node02 ls
#ssh node03 ls
#su - db2inst1
$ssh node01 ls
$ssh node02 ls
$ssh node03 ls
確保不用輸入密碼,則配置成功。
5、ISCSI 共享存儲配置
Iscsi server端配置(node01上執行):
修改/etc/ietd.conf,添加如下內容:
Target iqn.2014-03.node01.site:scsidisk01
Lun 0 Path=/dev/sda4,Type=fileio
注意:我的未分區硬碟為/dev/sda4,你的可能不一樣的@_@~~~~
添加自啟動
#chkconfig -a iscsitarget
檢查是否成功
#chkconfig -l iscsitarget
結果:iscsitarget 0:off 1:off 2:off 3:on 4:off 5:on 6:off
重啟iscsitarget服務
# /etc/init.d/iscsitarget restart
iscsi client端配置(node01、node02、node03執行,):
iscsitarget文件內容如下:
#! /bin/sh
### BEGIN INIT INFO
# Provides: iscsiclsetup
#node02與node03上如果未裝iscsitarget需將下下行的$iscsitarget
# Required-Start: $network $syslog $iscsitarget $remote_fs smartd
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: ISCSI client setup
### END INIT INFO
case "$1" in start)
iscsiadm --mode discoverydb --type sendtargets --portal 192.168.18.201 --discover
iscsiadm --m node --targetname iqn.2014-03.node01.site:scsidisk01 --portal 192.168.18.201:3260 --login
;;
stop)
iscsiadm -m node -T iqn.2014-03.node01.site:scsidisk01 -p 192.168.18.201 --logout
;;
restart) ## Stop the service and regardless of whether it was ## running or not, start it again.
$0 stop
$0 start
;;
*)
Esac
保存後執行:#/etc/init.d/iscsiclient restart
驗證iscsiclient是否啟動成功:
#fdisk -l
檢查有無/dev/sdb出現
6、配置Linux環境變數
/etc/profie.local添加內容
alias sl='tail -f /var/log/messages'
alias fc='fcslogrpt /var/log/messages'
export PATH=/root/bin:/usr/sbin/rsct/bin:/opt/ibm/db2/v10.5/bin:$PATH
export PATH=/usr/lpp/mmfs/bin:$PATH
export DB2USENONIB=TRUE
export DB2_CFS_GPFS_NO_REFRESH_DATA=true
然後執行# . /etc/profile.local,完成後你就可以安裝purescale了,我猜測應該是設置了變數DB2USENONIB,使purescale不再要求你強制InfiniBand或萬兆網卡,使我等窮人可以有機會玩這種高檔、洋氣、上檔次的資料庫。。。
7、DB2 V10.5 的安裝:
node01:~/server_t # ./db2_install
DBI1324W Support of the db2_install command is deprecated. For
more information, see the DB2 Information Center.
Default directory for installation of procts - /opt/ibm/db2/V10.5
***********************************************************
Install into default directory (/opt/ibm/db2/V10.5) ? [yes/no]
yes
Specify one of the following keywords to install DB2 procts.
SERVER
CONSV
EXP
CLIENT
RTCL
Enter "help" to redisplay proct names.
Enter "quit" to exit.
***********************************************************
server
***********************************************************
Do you want to install the DB2 pureScale Feature? [yes/no]
Yes
曾經出現的錯誤:
ERROR: An error occurred while compiling IBM General Parallel File System
(GPFS) Portability Layer (GPL) on host "node01". Return code "2". GPL
compilation log file location "/tmp/compileGPL.log.000". The GPFS file system
cannot be mounted properly until the GPL mole is successfully compiled on
this host. For details, see the specified GPL compilation log. After fixing
the problems shown in the log file, re-run the DB2 installer. For information
regarding the GPFS GPL mole compile, see DB2 Information Center.
Compiling GPL :.......Failure
ERROR: A major error occurred while installing "DB2 Server Edition " on this
computer.
解決方案:
查看錯誤日誌:compileGPL.log.000,為以下內容:
cd /usr/lpp/mmfs/src/config; ./configure --genenvonly; if [ $? -eq 0 ]; then /usr/bin/cpp -P def.mk.proto > ./def.mk; exit $? || exit 1; else exit $?; fi
手工執行時會發現在./configure --genenvonly; 這一步報找不到
/usr/bin/diff: /lib/moles/3.0.76-0.11-default/build/include/linux/autoconf.h: No such file or directory
Kernel source tree does not have the correct autoconf.h file.
See /usr/lpp/mmfs/src/README for further information
手工拷唄一下autoconf.h文件即可
#cp –v /usr/src/linux-3.0.76-0.11-obj/x86_64/default/include/generated/autoconf.h /lib/moles/3.0.76-0.11-default/build/include/linux/
GPFS 文件系統配置與掛載
方法1:使用db2cluster_prepare
node01上執行:
#/opt/ibm/db2/v10.5/instance/db2cluster_prepare -instance_shared_dev /dev/sdb
DBI1446I The db2cluster_prepare command is running.
DB2 installation is being initialized.
Total number of tasks to be performed: 1
Total estimated time for all tasks to be performed: 60 second(s)
Task #1 start
Description: Creating IBM General Parallel File System (GPFS) Cluster and Filesystem
Estimated time 60 second(s)
Task #1 end
The execution completed successfully.
For more information see the DB2 installation log at
"/tmp/db2cluster_prepare.log".
DBI1070I Program db2cluster_prepare completed successfully.
此時df -l查看一下會發現多了一個掛載點
node01:/opt/ibm/db2/V10.5/instance # df -l
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 19599036 8122392 10481060 44% /
udev 958688 120 958568 1% /dev
tmpfs 958688 76 958612 1% /dev/shm
/dev/sda3 10327940 154460 9648836 2% /home
/dev/db2fs1 15728640 627712 15100928 4% /db2sd_20140401103940
曾經出現報錯:
DBI20022E The DB2 installer detected that the variable record "GPFS_CLUSTER" is
defined in the global registry. However, the GPFS cluster does not exist on
host "node01".
Creating IBM General Parallel File System (GPFS) Cluster and Filesystem :.......Failure
查看/tmp/ibm.db2.cluster.GuOypP發現有如下內容報錯:
014-04-01-10.26.12.358494+480 I5385E400 LEVEL: Warning
PID : 7469 TID : 139670848014112 PROC : db2cluster
INSTANCE: NODE : 000
HOSTNAME: node01
FUNCTION: DB2 UDB, oper system services, sqloMessage, probe:1
MESSAGE : Cannot obtain registry variables
DATA #1 : Hexmp, 4 bytes
0x00007FFF17631758 : B400 0F87
解決方案:由於此前我在此機器上試過N次db2cluster_prepare,包括V9.8、V10.1,V10.5安裝,導致全局注冊表變數沒有刪除干凈,使用db2greg -mp
V,GPFS_CLUSTER,NAME,db2cluster_20140403105617.site,-,DB2_CREATED將其刪除。
#cp -v /var/db2/global.reg /var/db2/global.reg_20140401
#db2delgreg -delvarrec service= GPFS_CLUSTER
總結 :db2cluster_prepare這個命令失敗時
檢查iscsi client是否准備好,fdisk -l查看一下是否有/dev/sdb
全局注冊表變數是否未刪除干凈 ,db2greg -mp查看
檢查一下是否tsa的domain存在,lsrpdomain,使用rmrpdomain將其刪掉,如果其node為活動需先將其node停掉。具體參考tsa相關命令,
檢查一下gpfs cluster domain是否未清理干凈,如果未清理干凈,需要使用將fs、nsd、node清理掉,具體命令參考gpfs信息中心。
方法2:手工掛載GPFS
遇到過使用db2cluster_prepare時無法成功,手工安裝(不確定是否遇到了 傳說 中的bug)。
創建cluster,不加-filesystem -disk選項:
node01:
#db2cluster -cfs -create -domain mydomain -host node01
#db2cluster -cfs -add -host node02
# db2cluster -cfs -add -host node03
說明:上面如果不出故障當然可以加上-filesystem –disk參數,當然也可以用mmaddnode –N XXX來添加節點
添加許可協議:
提供兩種方法
#mmchlicense server --accept -N node01,node02,node03
#/opt/ibm/db2/v10.5/bin/db2cluster -cfs -add -license
創建nsd:任意node執行
編寫newNSD文件內容如下
%nsd:
device=/dev/sdb
nsd=nsd1
usage=dataAndMetadata
#mmcrnsd -F /tmp/newNSD (-v no)
如果報mmcrnsd: Disk device sdb refers to an existing NSD,而使用mmlsnsd 又查找不到相應的nsd,添加-v no可以跳過此驗證。
#mmlsnsd 查看創建的nsd名稱,記下,在第3步時需要用到.
創建Cluster File System並掛載
啟動所有node,任意node執行
#mmstartup -a
#mmgetstate -a
確保所有node全部啟動成功為active
# mmcrfs -T /db2sd_20140401 db2sd_20140401 nsd1(此處的nsd1為第2步的nsd名稱)
#mmmount all -a
--曾經出現的錯誤:mmstartup -a無響應
,查看日誌/var/adm/ras/mmfs.log.previous
Tue Apr 1 22:02:11 CST 2014: runmmfs starting
Removing old /var/adm/ras/mmfs.log.* files:
Unloading moles from /lib/moles/3.0.76-0.11-default/extra
runmmfs: The /lib/moles/3.0.76-0.11-default/extra/mmfslinux.ko kernel extension does not exist.
runmmfs: Unable to verify kernel/mole configuration.
Loading moles from /lib/moles/3.0.76-0.11-default/extra
runmmfs: The /lib/moles/3.0.76-0.11-default/extra/mmfslinux.ko kernel extension does not exist.
runmmfs: Unable to verify kernel/mole configuration.
Tue Apr 1 22:02:11 CST 2014 runmmfs: error in loading or unloading the mmfs kernel extension
Tue Apr 1 22:02:11 CST 2014 runmmfs: stopping GPFS
解決方案:重新編譯一下gpfs的源碼,因為手工卸載gpfs。
/usr/lpp/mmfs/src/README有詳細的編譯方法:主要命令方法如下:
#cd /usr/lpp/mmfs/src
#make Autoconfig
#make InstallImages
make InstallImages會在/lib/moles/`uname -r`/extra目錄生成3個文件,大功告成.
創建實例
創建實例前:
node02#/opt/ibm/db2/V10.5/instance/db2icrt -cf node01 -cfnet node01
-m node02 -mnet node02 -instance_shared_dir /db2sd_20140401
-tbdev 192.168.18.2 -u db2fenc1 db2inst1
-tbdev 官方解釋為:Specifies a shared device path for a device that will act as a tiebreaker in the DB2 pureScale environment to ensure that the integrity of the data is maintained. 通俗的講就是在member出現故障時,判斷哪個member可以恢復服務,窮屌絲們就用網關IP來代替了,只要能 ping 通即可判斷為可用。
此時執行:# db2instance -instance db2inst1 -list可以查看
node01:/opt/ibm/db2/V10.5/instance # mmlscluster
GPFS cluster information
========================
GPFS cluster name: db2cluster_20140401103900.site
GPFS cluster id: 6571095102926235332
GPFS UID domain: db2cluster_20140401103900.site
Remote shell command: /var/db2/db2ssh/db2locssh
Remote file command: /var/db2/db2ssh/db2scp
GPFS cluster configuration servers:
-----------------------------------
Primary server: node01.site
Secondary server: node02.site
Node Daemon node name IP address Admin node name Designation
----------------------------------------------------------------------
1 node01.site 192.168.18.201 node01.site quorum-manager
2 node02.site 192.168.18.202 node02.site quorum-manager
曾經出現報錯:
錯誤1、報2632-044、2632-068,此類錯誤為創建tsa domain時的錯誤,原因在於虛擬機是拷貝的,不是重新安裝的。
解決方法:#/usr/sbin/rsct/install/bin/recfgct
啟動實例
node01:$/home/db2inst1/sqllib/adm/db2start
怎麼樣,報錯了吧,應該是SQL1721N
SQL1721N Starting the DB2 database manager failed because of a problem with a configuration file that is needed by RDMA.受打擊吧。
你裝完了實例啟動不了,沒關系,這么高檔的玩意怎麼能讓你這么快啟動啊。
你得設置兩個注冊表變數才能用普通網路.
$db2set DB2_SD_SOCKETS_RESTRICTIONS=false
$db2set DB2_CA_TRANSPORT_METHOD=SOCKETS
使用如下命令可以查看CF與member的狀態。
#db2instance -instance db2inst1 -list
node01:/home/db2inst1 # db2instance -instance db2inst1 -list
ID TYPE STATE HOME_HOST CURRENT_HOST ALERT PARTITION_NUMBER LOGICAL_PORT NETNAME
-- ---- ----- --------- ------------ ----- ---------------- ------------ -------
0 MEMBER STARTED node02 node02 NO 0 0 node02
128 CF PRIMARY node01 node01 NO - 0 node01
HOSTNAME STATE INSTANCE_STOPPED ALERT
-------- ----- ---------------- -----
node01 ACTIVE NO NO
node02 ACTIVE NO NO
此時你可以使用lssam查看tsa的兩個節點的狀態。
#lssam
添加成員
將node03添加為另一個member,如果實例沒有啟動會自動啟動實例,所以預先將上一步的兩台機器上的db2set執行完畢先。
node01:
#/opt/ibm/db2/v10.5/instance/db2iupdt -d -add -m node03 –mnet node03 db2inst1
#su - db2inst1 -c "db2start member 1"
開啟你的purescale之旅
#db2sampl
執行完畢後兩台member都可以看到資料庫sample,可以同時對庫進行操作
D. 在linux上如何邦定一個db2資料庫
一、安裝前准備工作:
1、對於Linux系統,至ibm網站下載軟體包
2、Linux內核設置:編輯/etc/sysctl.conf文件
3、創建相應用戶以及組:
4、創建相應目錄用於存放db2的數據文件以及日誌文件:
這里在根下面創建一個db2總目錄,然後創建了一個15G大小的邏輯卷掛載/db2下面,然後在其下面創建相應的文件夾。
database目錄存放資料庫實例
db2log1存放db2的主日誌文件
db2log2存放鏡像日誌文件
db2temp存放db2臨時表空間
db2用戶的家目錄的位置
二、安裝過程:
安裝可以使用root用戶安裝也可以使用非root用戶安裝,這里就直接使用root用戶安裝了。
以root身份執行db2setup,會彈出以下畫面:
這里選擇安裝企業版,點擊install new:
下一步之後,就出現創建用戶的畫面:
最後點擊finish開始安裝過程。
三、創建資料庫:
如果在安裝過程中,沒有創建資料庫,則後續可以使用db2cc命令創建資料庫。這是一個基於圖形界面的管理工具,使用起來也非常方便。執行db2cc後,會彈出以下畫面:
點擊右側的Create New Database,創建資料庫:
指定資料庫名稱以及存放位置,選中Let DB2 manage my storage,下一步:
點擊finish開始創建。默認db2會創建以下三個表空間:
(1)、catalog table space用於存放catalog表。
(2)、user table space存放所有表和索引數據。
(3)、temporary table space臨時數據的存放位置。
創建完成後,會看到如下畫面:
此時還沒有連接到xzxjdb1上,點擊右側的connect進行連接。連接之後,會看到右側多了好多信息:
使用命令行查看當前資料庫中表空間信息:
四、DB2的簡單管理:
1、查看錶空間信息:
2、查看錶信息:
3、查看當前實例下的所有資料庫信息:
4、停止資料庫:
5、啟動資料庫:
6、設置實例自動啟動:
《Linux就該這么學》里有相關介紹,建議看看。