應用程序:
程序:Architecture
C語言:源代碼——》(編譯)二進制格式
腳本:解釋器(二進制程序)
源代碼——》編譯——》鏈接——》運行
程序:
庫:
靜態
動態
靜態連接(直接把需要的庫文件打包進程序)
動態連接(將載入內存的庫文件直接調用)
共享庫
.so後綴(shared object)
配置文件
程序的組成部分:
1、二進制程序(二進制文件運行需要依賴於庫,這裏的庫指的是共享庫和程序自身提供的庫)
庫一般存放在/lib,/usr/lib路徑,應用程序的庫及系統底層glibc庫都存放在/usr/lib路徑
2、庫
3、配置文件
4、幫助文件
系統目錄
/boot:內核,initrd(initramfs),建議單獨分區
/etc:配置文件
/usr
/var: 外圍的文件系統,存放日誌信息,和運行過程、臨時文件等的區域,可以單獨分區
/dev:設備文件,不能單獨分區,2.6內核版本以後:udev提供動態配置外設的功能
/lib:庫文件
/tmp:可以單獨分區,至少400M空間
/bin:二進制程序
/sbin:二進制程序
/proc:僞文件系統,不能單獨分區,是內核管理時使用的,默認爲空的
/sys:僞文件系統,不能單獨分區,是內核管理時使用的,默認爲空的
/mnt
/media
/home:建議單獨分區
/root:不能單獨分區
/misc:雜項
/opt:早期很多三方軟件,都存放在該目錄
/srv
/usr/share/man:幫助文件
/etc ,/bin, /sbin, /lib, /usr/share/man,默認操作系統啓動會用到的程序,這些目錄不能掛載額外的分區,必須在根文件系統的分區上
另外的路徑用於安裝程序的路徑:
一、/usr
bin
sbin
lib
以上的配置文件也存放在etc目錄下,幫助文件也放在/usr/share/man目錄下
操作系統核心功能,都在以上目錄下,usr目錄可以單獨分區,可以類似像windows系統上,安裝軟件可以安裝到其他盤,但重啓系統程序可能無法正常啓動,但在linux下,可以將所有的程序安裝在usr目錄下,重新格式化安裝/etc,/bin,/sbin目錄即可,安裝的程序還可繼續使用
二、/usr/local
bin
sbin
lib
etc
man
以上可以理解爲一個獨立體系,通常爲安裝的第三方軟件,建議獨立分區
/proc/cpuinfo 包含了CPU各種支持的指令集
軟件包管理器:
1、打包成一個文件:二進制程序,庫文件,配置文件,幫助文件
2、生成數據庫,追蹤所安裝的每一個文件
軟件包管理器的核心功能:
1、製作軟件包
2、安裝,卸載、升級、查詢、校驗
readhat,suse,debian
readhat,suse:rpm
readhat package manager
rpm is package manager
debian:dpt
依賴關係,解決方法:
前端工具:yum(Yellowdog update modifier),apt-get
後端工具:rpm,dpt
rpm命令
rpm:
數據庫/var/lib/rpm
rpmbuild:
安裝,查詢,升級,檢驗,數據庫的重建,驗證數據包等工作:
RPM包的命名:
軟件包名稱:
組成部分:
主包:
bind-9.7.1-e151.i586.rpm
子包
bind-libs-9.7.1-e15.1.i586.rpm
bind-utils-9.7.1-e15.1.i586.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release(RPM作者編譯的版本號).arch(平臺).rpm
主版本號:重大改變會改變
次版本號:某個子功能發生重大 變化會改變
發行號:修改了部分bug,調整了一點功能會改變
bind-9.7.1.tar.gz 原代碼
rpm包:
二進制格式:安裝直接可以運行
rpm包作者下載源程序,進行編譯配置完成後,製作成rpm包
源碼格式:需進行編譯,在平臺上編譯能更好的發揮性能
i686:32位平臺
x64、x84是64位平臺
noarch:什麼平臺都可以安裝,bind-9.7.1-1.noarch.rpm
ppc:powper PC平臺安裝使用的,bind-9.7.1-ppc.rpm
rpm安裝:
rpm -i /PATH/PACKAGE_FILE
-h 顯示進度,以#號顯示進度,每個#表示2%
-v 顯示詳細信息,-vv -vvvv
rpm - ivh /path/to/package_file
--nodeps:忽略依賴關係
--replacepkgs:重新安裝,替換原有的安裝
--oldpackage:降級
--force:強行安裝,可以實現重裝或降級
--test測試可不可以安裝
rpm查詢
rpm -q /path/package_file:查詢指定的包是否已安裝
-qa :查詢已安裝的所有的包
-qi PACKAGE_NAME:查詢指定包的說明信息
-ql PACKAGE_NAME:查詢指定包安裝後生成的文件列表
-qf /path/to/somefile:查詢指定的文件是由哪個rpm包安裝生成的
-qc package_name:查詢指定包安裝的配置文件
-qd package_name:查詢指定包安裝的幫助文件
-q --scripts package_name:查詢指定包中包含的腳本
如果某rpm包尚末安裝,我們需要查詢其說明信息,安裝以後會生成的文件
rpm -qpi /path/to/package_name(p是指定軟件包的路徑)
rpm -qpl 等用法
rpm升級
rpm -Uvh /path/to/newpackage_name:如果裝有老版本的,則升級:否則安裝
rpm -Fvh /path/to/newpackage_name:如果裝有老版本的,則升級,否則退出不安裝
rpm降級
rpm -ivh --oldpackage /path/to/oldpackage_name
rpm -Uvh --oldpackage /path/to/oldpackage_name
rpm卸載
rpm -e package_name(不能與其他軟件包有依賴,如果有依賴是不允許卸載)
--nodeps
校驗
rpm -V package_name
[root@localhost Packages]# rm -rf /usr/share/zsh/5.0.2/functions/zrecompile [root@localhost Packages]# vim /usr/share/zsh/5.0.2/functions/zfgcp [root@localhost Packages]# rpm -V zsh S.5....T. /usr/share/zsh/5.0.2/functions/zfgcp missing /usr/share/zsh/5.0.2/functions/zrecompile
s.5....T.含義:
S:文件大小
M:權限
5:MD5值
D:主,次設備號
L:路徑不匹配
U:屬主
G:屬組
T:修改時間
檢驗來源合法性,及軟件包完整性
加密類型:
對稱:加密解密使用同一個密鑰
公鑰:一對兒密鑰,公鑰,私鑰,公鑰隱含於私鑰中,可以提取出來,並公開出去
單向:
/etc/pki/rpm-gpg/RPM-GPG-KEY-readhat-release 公鑰的存放的位置,校驗需將文件導入RPM包,如下:
rpm -K /papt/pachage_file,檢驗合法性。
dsa,gpg:驗證來源合法性,也即驗證簽名,可以使用--nosignature,略過此項
sha1,md5:驗證軟件包完整性,可以使用--nodigest,略過此項
[root@localhost Packages]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #導入密鑰 [root@localhost Packages]# rpm -K zsh-5.0.2-7.el7.x86_64.rpm zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
重建數據庫
/var/lib/rpm
rpm
--rebuilddb:重建數據庫,一定會重新建立數據庫
--initdb:初始化數據庫,沒有才建立,有就不用建立
yum repository
文件服務:
ftp
web
file
client:
配置文件
yum倉庫
HTML:HyperText Mark Language
XML:eXtended Mark Language
XML,JSON:半結構化的數據,用於不同平臺數據共享的手段
yum倉庫中的元數據文件:
primary.xml.gz:
包含了當前倉庫中包含了哪些RPM軟件包列表
依賴關係
每個RPM安裝生成的文件列表
filelists.xml.gz
當前倉庫中所有RPM包的所有文件列表
other.xml.gz
額外信息,RPM包的修改日誌
repomd.xml
記錄的是上面三個文件的時間戳和校驗和
comps*.xml
RPM包分組信息
配置文件:/etc/yum.conf
如何爲yum定義repo文件
[Repo_Nmae]:標識ID
name=:Description
baseurl=:
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=path
yum命令
yum [options] [command] [package...]
-y:自動回答爲yes
--nogpgcheck
list :列表
可以使用格式:yum list all bash*(支持glob)
all
available:可用的,倉庫中有但尚未安裝的
installed:已經安裝的
updates:可用的升級
clean: [ packages | metadata | expire-cache | rpmdb | plugins | all ],清理緩存
repolist: [all|enabled|disabled]:顯示repo列表,默認顯示enabled
install :安裝
yum install PACKAGE_NAME
update:升級
update_to:升級爲指定版本
remove|erase:卸載
info package_name:等於rpm -qi 查詢指定包的說明信息
provides|whatprovides:查看文件是由哪個安裝包生成的,等於rpm -qf
groupinfo
grouplist:顯示所有組
groupinstall:安裝組
yum groupinstall "development tools" "development libraries"
group
search STRING1:以字符串查詢軟件包名稱
reinstall:重裝
localinstall:安裝本地軟件包
yum localinstall --nogpgcheck PACKAGE_NAME
如何創建yum倉庫步驟:
createrepo:創建元數據
createrepo /path/to/soft
yum clean all
yum repolist
如果需要定義爲主的,需要將使用RPM包分組信息文件重建,如下:
createrepo -g /root/comps-rhel5-vt.xml /yum/vt
定製:手動編譯安裝
編譯環境,開發環境
開發庫,開發工具
C,C++,perl,java,python
c,c++編譯工具:
gcc:GUN c complier,c
g++:
make:項目管理工具
makefile:定義了make(GCC,G++)按何種次序去編譯這些源程序文件中的源程序
編譯安裝的三步驟
前提:準備開發環境(編譯環境)
安裝RHLE5“development tools" "development Libraries"
安裝RHLE6 "development tools" "compatibility libraries"(兼容庫)
#tar
#./configure
--help :獲取使用
--prefix=/path/to/somewhere:指定安裝路徑
--sysconfdir=/path/to/conffile_path:指定配置文件安裝路徑
功能:1、讓用戶選定編譯特性;2、檢查編譯環境
#make
#make install
示例安裝tengine服務:
下裝source文件,安裝好開發或編譯環境
./configure --prefix=/usr/local/tengine --conf-path=/etc/
make
make install
vim /etc/profile--> PATH=$PATH:/usr/local/tengine/sbin(將nginx命令加入環境,可直接使用)
source /etc/profile,加載環境變量
如果安裝到非默認路徑下,需注意
1、修改PATH環境變量,以能夠識別此程序的二進制文件路徑
修改/etc/profile文件
在/etc/profile.d/目錄建立一個以.sh爲名稱後綴的文件,在裏面定義export PATH=$PATH:/path/to/somewhere
2、默認情況下,系統搜索庫文件的路徑/lib,/usr/lib;要增添額外搜索路徑:
在/etc/ld.so.conf.d/中創建以.conf爲後綴的文件,而後把要增添的路徑直接寫至此文件中;
立即生效,需執行ldconfig命令,通知重新搜尋庫文件,-v:顯示重新搜索庫的過程
3、頭文件:輸出給系統
默認:/usr/include
增添頭文件搜尋路徑,使用連接進行
/usr/local/tengine/include/ /usr/include/
兩種方式:
ln -s /usr/local/tengine/include/* /usr/include/或者
ln -s /usr/local/tengine/include /usr/include/tengine
4、man文件路徑:默認安裝在--prefix指定的目錄下的man目錄,系統會到/usr/share/man,需修改
到/etc/man.config,增加MANPATH路徑。或 man -M /path/to/man_dir Command(重啓失效)
#!/bin/bash # POSTFIX=`echo $1 |awk -F. '{print $2}'` if [ "$POSTFIX" != "repo" ];then echo -e "\033[31mcreaterepo Usage: FILENAME.repo\033[0m" exit 7 fi cd /etc/yum.repos.d/ if [ -e $1 ];then echo "$1 existed" exit 9 else touch $1 &> /dev/null echo "$1 touch sucessful" fi read -p "Enter your repo_id: " REPO_ID until [ $REPO_ID == 'quit' ];do echo "[$REPO_ID]" >> $1 read -p "Enter your repository name: " REPO_NAME echo "name=$REPO_NAME">> $1 read -p "Enter your repository url: " REPO_URL echo "baseurl=$REPO_URL">>$1 read -p "Enter your enabled value: " REPO_ENABLE echo "enabled=$REPO_ENABLE">>$1 read -p "Enter your gpgcheck value: " REPO_GPGCHECK echo "gpgcheck=$REPO_GPGCHECK" >> $1 read -p "Enter your gpgfile path: " REPO_GPGFILE echo "gpgkey=$REPO_GPGFILE">>$1 read -p "Enter your repo_id agin: " REPO_ID done
netstat 命令
-r:顯示路由表
-n:以數字方式顯示
-t:建立的TCP連接
-u:顯示UDP連接
-l:顯示監聽狀態的連接
-p:顯示監聽指定的套接字的進程的進程號及進程名