RPM可以對程序 進行安裝、卸載、查詢、校驗和維護
rpm(raedhat package mananger),一以種數據庫記錄的方式將需要的軟件安裝到linux系統的一種機制。
RPM最大的特點是將要安裝的軟件先編譯過,并且打包成為RPM機制的安裝包,通過包裝好的軟件里默認的數據庫記錄此軟件安裝時必須具備的依賴屬性軟件。當安裝軟件時,RPM就會依照數據庫記錄的依賴關系來查詢linux是否滿足,若滿足,則進行安裝,若不滿足則不安裝(強行安裝會出問題)。執行安裝時,會把軟件的信息整個寫入的RPM的數據庫中,以便以后的查詢、驗證與解除安裝(卸載)。
RPM的安裝以后綴名.RPM,命名的格式基本是:軟件名稱–版本–發布的次數–運行的平臺.rpm
以rp-pppoe這個軟件為例:
rp-pppoe-3.10-11.el6.x86_64.rpm
rp-pppoe是軟件名稱,3.10是版本,11.e16是發布的次數,x86_64是運行平臺
RPM的安裝路徑說明:
/var/lib/rpm 記錄安裝后軟件的信息,安裝完成后如要查詢、升級操作的版本之間對比,都是在查詢此目錄下數庫信息
/etc 存放軟件的配置文件 /etc/zshrc是zsh的配置文件
/usr/bin 存放可執行的文件
/usr/lib 存放軟件的動態涵數庫
/usr/share/doc 存放軟件的使用手冊與幫助文檔
/usr/share/man 存放man page文件
RPM的應用格式
rpm [選項] [軟件名稱] [參數]
安裝與升級的常用選項
安裝
-i install的意思
-h 以#號顯示安裝進度,一個#號代表2%的進度
-v 顯示安裝的詳細過程
常把三個選項一起使用,rpm -ihv zsh-4.3.10-7.el6.x86_64.rpm 安裝zsh這個軟件
升級
-Uvh 軟件名稱 如果要升級的軟件沒有安裝,則系統會直接安裝;若已安裝但有新版本,則系統會自動升級到新的版本
-Fvh 軟件名稱 如果要升級的軟件沒有安裝,則系統不會安裝;若已安裝但有新版本,則系統會自動升級到新的版本
使用參數說明
--nodeps 不查檢依賴關系,直接安裝軟件。如果依賴關系沒有安裝,會導致安裝的軟件無法正常使用
rpm -ihv zsh-4.3.10-7.el6.x86_64.rpm --nodeps
--replacefiles 安裝過程中,如果相應軟件或文件已經存在,則會直接覆蓋
--replacepkgs 安裝組軟件的過程中,如果部分軟件已經存在,則會再次安裝已存在的軟件
--force 是--replacefiles與replacepkgs的結合體,只要是安裝的,都會覆蓋
--test 測試安裝,可以找依賴關系的問題
--prefix 指定軟件的安裝新路徑
查詢的選項
-q 軟件名稱 查詢軟件是否已經安裝 -qa 查詢已經安裝的所有軟件 -qi 軟件名稱 查詢軟件的詳細信息 -ql 軟件名稱 查詢軟件所有的文件與目錄 -qc 軟件名稱 查詢軟件的配置文件 -qd 軟件名稱 查詢軟件的幫助文件 -qR 軟件名稱 查詢軟件依賴的文件 -qf 文件名稱 查詢此文件屬于哪個軟件
卸載
-e 軟件名稱 卸載軟件,如果存在依賴關系,則會提示錯誤。 --nodeps 此參數會強制刪除軟件,如果存在依賴關系,刪除后其他的軟件則無法正常使用 rpm -e zsh-4.3.10-7.el6.x86_64.rpm --nodeps --rebuilddb 重建數據庫,如果在刪除、安裝、升級過程中導致/var/lib/rpm文件受損,可以通過此參數來修復 rpm --rebuilddb
校驗
-V 軟件名稱 查詢此軟件包含的文件,如果有被修改過的,則顯示出來 -Va 查詢系統中所有可能被修改過的文件 -Vf 文件名稱 查詢此文件是否被修改過
例如查詢logrotate軟件哪個文件被修改過
[root@localhost Packages]# rpm -V logrotate
S.5….T. c /etc/logrotate.conf
前8位信息說明 S 文件的容量大小是否被修改 M 文件的類型或文件的權限(rwx)、可執行參數等參數是否被修改 5 MD5的值是否已經變化 D 設備的主次代碼是否已經改變 L link路徑是否已經被改變 U 文件的所有者是否已經改變 G 文件的基本組是已經改變 T 文件的修改時間是否已被修改 第9位信息說明 c 設置文件config file d 文檔 l 授權文件 r 自述文件
由于rpm是本地安裝,因此我使用光盤自的rpm包來安裝
首先 掛載光盤
[root@localhost /]# mount /dev/cdrom1 /mnt/cdrom/ mount: block device /dev/sr0 is write-protected, mounting read-only #掛載成功 [root@localhost Packages]# cd /mnt/cdrom/Packages/
安裝zsh軟件
[root@localhost Packages]# ls zsh* zsh-4.3.10-7.el6.x86_64.rpm [root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:zsh ########################################### [100%] [root@localhost Packages]# rpm -q zsh zsh-4.3.10-7.el6.x86_64 #查詢zsh軟件已安裝成功
查詢
[root@localhost Packages]# rpm -qc zsh #查詢ZSH的配置文件 /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc [root@localhost Packages]# rpm -qf /etc/zlogin #查詢zlogin這個文件屬于哪個程序的 zsh-4.3.10-7.el6.x86_64 [root@localhost Packages]# rpm -qd zsh #查詢zsh的幫助文檔,太多只顯示一部分 /usr/share/doc/zsh-4.3.10/BUGS /usr/share/doc/zsh-4.3.10/CONTRIBUTORS ………… /usr/share/info/zsh.info-3.gz /usr/share/info/zsh.info-4.gz /usr/share/man/man1/zshbuiltins.1.gz ………… /usr/share/man/man1/zshzle.1.gz [root@localhost Packages]# rpm -qi zsh #查詢zsh詳細信息Name : zsh Relocations: (not relocatable) Version : 4.3.10 Vendor: CentOS Release : 7.el6 Build Date: Sun 24 Nov 2013 09:40:59 AM PST Install Date: Wed 25 May 2016 04:24:06 PM PDT Build Host: c6b9.bsys.dev.centos.org Group : System Environment/Shells Source RPM: zsh-4.3.10-7.el6.src.rpm Size : 5009102 License: BSD Signature : RSA/SHA1, Sun 24 Nov 2013 11:33:46 AM PST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://zsh.sunsite.dk/ Summary : A powerful interactive shell Description : The zsh shell is a command interpreter usable as an interactive login shell and as a shell script command processor. Zsh resembles the ksh shell (the Korn shell), but includes many enhancements. Zsh supports command line editing, built-in spelling correction, programmable command completion, shell functions (with autoloading), a history mechanism, and more. [root@localhost Packages]#
驗證校驗
[root@localhost Packages]# rpm -V zsh #默認是zsh沒有被修改的文件,沒有顯示則沒有被修改的文件 [root@localhost Packages]# vim /etc/zshrc #手動修改這個文件 [root@localhost Packages]# rpm -V zsh #查詢 S.5....T. c /etc/zshrc #/etc/zshrc的大小、MD5值、修改時間都已經改變,文件類型是c(配置文件) [root@localhost Packages]# vim /usr/share/doc/zsh-4.3.10/FAQ #手動修改這個文件 [root@localhost Packages]# rpm -V zsh S.5....T. c /etc/zshrc S.5....T. d /usr/share/doc/zsh-4.3.10/FAQ #此文件的類型是d(文檔)
卸載,也叫解除安裝
[root@localhost Packages]# rpm -q zsh zsh-4.3.10-7.el6.x86_64 [root@localhost Packages]# rpm -e zsh #卸載 warning: /etc/zshrc saved as /etc/zshrc.rpmsave [root@localhost Packages]# rpm -q zsh package zsh is not installed #卸載之后,查詢時提示沒有安裝 [root@localhost Packages]#
YUM程序工具
yum是一個Shell前端軟件包管理器?;禦PM包管理,能夠從指定的YUM服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。yum提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。
yum服務器叫做yum repository,存儲了眾多的安裝程序,主配置文件是/etc/yum.conf,可通過man yum.conf查看配置文件的各項說明,/etc/yum.repos.d/目錄下后綴為.repo的文件,是關于yum repository服務器指定的配置,可以指向在線的服務器,也可以指向本地cd。
linux與yum repolist的關系如下圖:
yum repository的定義
name=Some name for this repository #名稱沒有要求,但不要與已存在的沖突 baseurl=url://path/to/repository/ #指向服務器 url有四種:ftp:// http:// nfs:// file:///(本地) enabled={1|0} #是否啟用,1是yes,0是no gpgcheck={1|0} #安裝前是否檢查程序的來源合法性 gpgkey=URL #密鑰文件的URL nablegroups={1|0} #是否支持在此服務器上用組來管理軟件 failovermethod={roundrobin|priority} #故障切換,若baseurl有多個url,此命令則指定根據相應的規則來使用哪個URL,默認為:roundrobin,意為隨機挑選;
yum的命令格式是
yum [options..] [command] [package] 常用command有: 顯示服務器列表:yum repolist [all|enabled|disabled] 顯示程序包: yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...] 安裝程序包: install package1 [package2] [...] 安裝 reinstall package1 [package2] [...] 重新覆蓋安裝 升級程序包: update [package1] [package2] [...] 升級 downgrade package1 [package2] [...] 降級 檢查可用升級: check-update 卸載程序包: remove | erase package1 [package2] [...] 查看程序包information: info [...] 查看指定的特性(可以是某文件)是由哪個程序包所提供: provides | whatprovides feature1 [feature2] [...] 清理本地緩存: clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 構建緩存: makecache 搜索: search string1 [string2] [...] 以指定的關鍵字搜索程序包名及summary信息; 查看指定包所依賴的capabilities: deplist package1 [package2] [...] 查看yum事務歷史:#可以顯示管理員安裝程序、卸載、升級的數量及日期 history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] 安裝及升級本地程序包: localinstall rpmfile1 [rpmfile2] [...] #安裝 (maintained for legacy reasons only - use install) ocalupdate rpmfile1 [rpmfile2] [...] 升級 (maintained for legacy reasons only - use update) 包組管理的相關命令: groupinstall group1 [group2] [...] 組安裝 groupupdate group1 [group2] [...] 組升級 grouplist [hidden] [groupwildcard] [...] 查詢程序組 groupremove group1 [group2] [...] 卸載指定組里包括的所有程序 groupinfo group1 [...] 查看組信息
常用options有:
[root@Centos6 ~]# yum repolist #[all顯示所有|enabled只顯示啟用的|disable只顯示關閉的],默認只顯示可用的 Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn repo id repo name status base CentOS-6 - Base 6,696 extras CentOS-6 - Extras 60 test_yumrepo test_yumrepository Centos 6.6 X86_64 4,184 updates CentOS-6 - Updates 94 repolist: 11,034
查詢程序
[root@Centos6 ~]# yum list pam* #查詢以pam開頭的程序 Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: ftp.sjtu.edu.cn * extras: ftp.sjtu.edu.cn * updates: ftp.sjtu.edu.cn Installed Packages # install packages是已安裝的程序 pam.x86_64 1.1.1-20.el6 @anaconda-CentOS-201410241409.x86_64/6.6 pam_passwdqc.x86_64 1.0.5-6.el6 @anaconda-CentOS-201410241409.x86_64/6.6 Available Packages #available packages是可升級和沒有安裝的包。除兩個可升級之外,其余均沒有安裝 pam.i686 1.1.1-22.el6 base # pam.x86_64 1.1.1-22.el6 base # 可升級的 pam-devel.i686 1.1.1-22.el6 base pam-devel.x86_64 1.1.1-22.el6 base pam_krb5.i686 2.3.11-9.el6 base pam_krb5.x86_64 2.3.11-9.el6 base pam_ldap.i686 185-11.el6 base pam_ldap.x86_64 185-11.el6 base pam_passwdqc.i686 1.0.5-8.el6 base pam_passwdqc.x86_64 1.0.5-8.el6 base #可升級 pam_pkcs11.i686 0.6.2-15.el6 base pam_pkcs11.x86_64 0.6.2-15.el6 base pam_ssh_agent_auth.i686 0.9.3-118.1.el6_8 updates pam_ssh_agent_auth.x86_64 0.9.3-118.1.el6_8 updates [root@Centos6 ~]#
安裝程序
[root@Centos6 ~]# yum install pam-devel.x86_64 #安裝 …………內容過多,忽略部分 Dependencies Resolved ======================================================================================================== Package Arch Version Repository Size ======================================================================================================== Installing: pam-devel x86_64 1.1.1-22.el6 base 205 k Updating for dependencies: pam x86_64 1.1.1-22.el6 base 658 k Transaction Summary ======================================================================================================== Install 1 Package(s) Upgrade 1 Package(s) Total download size: 863 k Is this ok [y/N]: y #提示是否下載安裝,如果存在依賴關系,鍵入y后,會自動下載安裝 Downloading Packages: (1/2): pam-1.1.1-22.el6.x86_64.rpm | 658 kB 00:01 (2/2): pam-devel-1.1.1-22.el6.x86_64.rpm | 205 kB 00:00 ----------------------------------------------------------------------------------------------------------------------------------------- …………內容過多,忽略部分 Complete!
組查詢
[root@Centos6 ~]# yum grouplist FTP* #查詢以FTP開頭的組名 Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Group Process Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn Available Groups: FTP server #只有FTP server這個組 Done
組查詢及組安裝
[root@Centos6 ~]# yum groupinfo 'FTP server' #查詢 Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Group Process Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn Group: FTP server Description: Allows the system to act as an FTP server. Mandatory Packages: #強制安裝的程序包 vsftpd Optional Packages:#可選安裝的程序包 xferstats [root@Centos6 ~]# yum groupinstall 'FTP server' #安裝 Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Group Process Loading mirror speeds from cached hostfile * base: ftp.sjtu.edu.cn * extras: ftp.sjtu.edu.cn * updates: ftp.sjtu.edu.cn Resolving Dependencies --> Running transaction check ---> Package vsftpd.x86_64 0:2.2.2-21.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================== Package Arch Version Repository Size ======================================================================================================== Installing: vsftpd x86_64 2.2.2-21.el6 base 155 k Transaction Summary ======================================================================================================== Install 1 Package(s) Total download size: 155 k Installed size: 340 k Is this ok [y/N]: y Downloading Packages: vsftpd-2.2.2-21.el6.x86_64.rpm | 155 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : vsftpd-2.2.2-21.el6.x86_64 1/1 Verifying : vsftpd-2.2.2-21.el6.x86_64 1/1 Installed: vsftpd.x86_64 0:2.2.2-21.el6 Complete!
升級
[root@Centos6 ~]#yum update …………………… python-dmidecode x86_64 3.10.13-3.el6_4 base 80 k rp-pppoe x86_64 3.10-16.el6 base 97 k satyr x86_64 0.16-2.el6 base 94 k vim-filesystem x86_64 2:7.4.629-5.el6 base 15 k Transaction Summary ======================================================================================================== Install 19 Package(s) Upgrade 407 Package(s) #升級的數量 Total download size: 377 M #升級的大小 Is this ok [y/N]: n #是否要升級。這里不升級??梢允褂脃um -y update 自動升級 Exiting on user Command
卸載組
root@Centos6 ~]# yum groupremove 'FTP server' Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Group Process Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn Resolving Dependencies --> Running transaction check ---> Package vsftpd.x86_64 0:2.2.2-21.el6 will be erased --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================== Package Arch Version Repository Size ======================================================================================================== Removing: vsftpd x86_64 2.2.2-21.el6 @base 340 k Transaction Summary ======================================================================================================== Remove 1 Package(s) Installed size: 340 k Is this ok [y/N]: y Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Erasing : vsftpd-2.2.2-21.el6.x86_64 1/1 Verifying : vsftpd-2.2.2-21.el6.x86_64 1/1 Removed: vsftpd.x86_64 0:2.2.2-21.el6 Complete!
添加本地yum reposlist及添加網絡yum reposlist
添加sohu的鏡像到reposlist,以及創建本地reposlist
在/etc/yum.repos.d/目錄下創建后綴名repo的文件
sohu鏡像的網址是http://mirrors.sohu.com/centos/7.2.1511/os/x86_64/
本地的程序安裝包目錄是/root/cdrom
使用createrepo創建本地的reposlist的repodata信息
[root@Centos6 cdrom]# createrepo ./ #先創建本地的 repodataSpawning worker 0 with 4184 pkgsWorkers FinishedGathering worker results Saving Primary metadataSaving file lists metadataSaving other metadataGenerating sqlite DBsSqlite DBs complete [root@Centos6 cdrom]# yum repolist #查詢系統默認的 yum reposlistLoaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn repo id repo name status base CentOS-6 - Base 6,696 extras CentOS-6 - Extras 60 test_yumrepo test_yumrepository Centos 6.6 X86_64 4,184 updates CentOS-6 - Updates 94 repolist: 11,034 [root@Centos6 cdrom]# [root@Centos6 yum.repos.d]# cat test_add_reposlist.repo [local_add] name=local_add_root/cdrom baseurl=file:///root/cdrom #添加本地yum reposlist gpgcheck=0 enabled=1 [sohu_add] name=sohu-add baseurl=http://mirrors.sohu.com/centos/7.2.1511/os/x86_64/ #添加sohu yum reposlist gpgcheck=0 enabled=1 [root@Centos6 yum.repos.d]# [root@Centos6 yum.repos.d]# yum repolist Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: centos.ustc.edu.cn * extras: centos.ustc.edu.cn * updates: centos.ustc.edu.cn repo id repo name status base CentOS-6 - Base 6,696 extras CentOS-6 - Extras 60local_add local_add_root/cdrom 4,184 #手動添加的yum reposlist已出現 sohu_add sohu-add 9,007test_yumrepo test_yumrepository Centos 6.6 X86_64 4,184 updates CentOS-6 - Updates 94 repolist: 24,225
編譯apache2 source安裝包
操作步驟
1、下載apache2 source包 2、configure 并提示安裝路徑、配置文件的存放路徑,其他默認 3、make:configure與Makefile.ini,生成Makefile文件 4、make install5、添加apache2的執行文件、lib路徑
第1步驟,下載并解壓
[root@MFC ~]# ls 1 cdrom Downloads install.log.syslog Music Public www.163.com 1.sh Desktop httpd-2.2.31.tar.gz lvm.tar.bz2 mysnap Templates anaconda-ks.cfg Documents install.log lvtest Pictures Videos [root@MFC ~]# tar xf httpd-2.2.31.tar.gz [root@MFC ~]# ls 1 cdrom Downloads install.log lvtest Pictures Videos 1.sh Desktop httpd-2.2.31 install.log.syslog Music Public www.163.com anaconda-ks.cfg Documents httpd-2.2.31.tar.gz lvm.tar.bz2 mysnap Templates [root@MFC ~]#
第2步驟 configure
root@MFC httpd-2.2.31]# ./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd2 #安裝目錄在/usr/local/apache2 配置文件存放在/etc/httdp2 ………………太多內容了,只顯示最后一小部分 config.status: creating support/envvars-std config.status: creating support/log_server_status config.status: creating support/logresolve.pl config.status: creating support/phf_abuse_log.cgi config.status: creating support/split-logfile config.status: creating build/rules.mk config.status: creating build/pkg/pkginfo config.status: creating build/config_vars.sh config.status: creating include/ap_config_auto.h config.status: executing default commands
第3步驟make 編譯
[root@MFC httpd-2.2.31]# make …………太多內容了,只顯示最后一小部分 ot/httpd-2.2.31/srclib/apr-util/xml/expat/libexpat.la /root/httpd-2.2.31/srclib/apr/libapr-1.la -lrt -lcrypt -lpthread make[1]: Leaving directory `/root/httpd-2.2.31'
第4步驟 make install。安裝,其實也就是把各文件及目錄復制到指定的位置。linux沒有注冊表,卸載時直接到各文件與目錄刪除便可rm -vrf
[root@MFC httpd-2.2.31]# make install…………………… 太多內容了,只顯示最后一小部分 mkdir /usr/local/apache2/man/man8mkdir /usr/local/apache2/manualmake[1]: Leaving directory `/root/httpd-2.2.31'
檢查安裝的文件
[root@MFC httpd-2.2.31]# ls /etc/httpd2/ #配置文件已在/etc目錄下 extra httpd.conf magic mime.types original [root@MFC httpd-2.2.31]# ls /usr/local/apache2/ #安裝目錄已存,且有bin\lib\man等種文件 bin build cgi-bin error htdocs icons include lib logs man manual modules [root@MFC httpd-2.2.31]#
安裝完成后配置
添加環境變量
[root@MFC profile.d]# cat apache2.sh PATH=/usr/local/apache2/bin:$PATH [root@MFC profile.d]# echo $PATH /usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
導出庫文件
[root@MFC ld.so.conf.d]# vim apache2.conf [root@MFC ld.so.conf.d]# ldconfig #讓系統重新搜索庫文件 [root@MFC ld.so.conf.d]# cat apache2.conf /usr/local/apache2/lib [root@MFC ld.so.conf.d]# 把includle目錄入的文件復制到/usr/inclulde/apache2 [root@MFC ld.so.conf.d]# cp /usr/local/apache2/include/* /usr/include/apache2/ 導出man幫助文件 編輯/etc/man.config,添加一行 MANPATH [root@MFC etc]# vim man.config # # This file is also read by man in order to find how to call nroff, less, etc., # and to determine the correspondence between extensions and decompressors. # # MANBIN /usr/local/bin/man # # Every automatically generated MANPATH includes these fields # MANPATH /usr/man MANPATH /usr/share/man MANPATH /usr/local/man MANPATH /usr/local/share/man MANPATH /usr/X11R6/manMANPATH /usr/local/apache2/man
原創文章,作者:Net20-deamon,如若轉載,請注明出處:http://www.www58058.com/17263