Linux入門
Linux系統管理:
磁盤管理,文件系統管理
RAID基礎原理,LVM2
網絡管理:TCP/IP協議,Linux網絡屬性配置
程序包管理:rpm,yum
進程管理:htop,glance,tsar等
sed和awk
Linux系統開機流程
內核管理基礎知識:編譯內核,模塊
Linux系統裁剪
kernel+busybox
課外做業:LFS
回顧:find,特殊權限,if語句
Linux磁盤管理:
I/O Ports:I/O設備地址
一切皆文件:
open(),read(),write(),close()
塊設備:block,存取單位"塊",磁盤
字符設備:char,存取單位"字符",鍵盤
設備文件:關聯至一個設備驅動程序,進而可以跟與之對應的硬件設備進行通訊
設備號碼:
主設備號:major number,標識設備類型
次設備號:minor number,標識同一類型下的不一樣設備
硬盤接口類型:
並行
IDE:133MB/s
SCSI:640MB/s
串口
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
rpm:rotations per minute
/dev/DEV_FILE
磁盤設備的設備文件命名:
IDE:/dev/hd
SCSI,STAT,SAS,USB:/dev/sd
不一樣設備:a-z
/dev/sda,/dev/sdb...
同一設備上的不一樣分區:1,2,3...
/dev/sda1,/dev/sda2
機械式硬盤:
track:磁道
cylinder:柱面
secotr:扇區
512bytes
如何分區:
按柱面
0磁道0扇區:512bytes
MBR:Master Boot Record
446bytes:boot loader
64bytes:分區表
16bytes:標識一個分區
2bytes:55AA
4個主分區:
3主分區+1擴展(N個邏輯分區)
問題:UEFI,GPT
分區管理工具:fdisk,parted,sfdisk
fidsk:對於一塊硬盤來說,最多隻能管理15個分區
fdisk -l [-u] [device...]
fdisk device
子命令:管理功能
p:print,顯示已有分區
n:new,建立
d:delete,刪除
w:write,寫入磁盤並退出
q:quit,放棄更新並退出
m:獲取幫助
l:列表所分區id
t:調整分區id
查看內核是否已經識別新分區:
cat /proc/partations
通知內核從新讀取硬盤分區表:
partx -a /dev/DEVICE
-n M:N
M
:N
kpartx -a /dev/DEVICE
-f: force
CentOS 5:使用partprobe
partprobe [/dev/DEVICE]
Linux文件系統管理:
Linux文件系統:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
swap:交換分區
光盤:ISO9660
Windows:fat32,ntfs
Unix:FFS,UFS,JFS2
網絡文件系統:NFS,CIFS
集羣文件系統:GFS2,OCFS2
分佈式文件系統:ceph,
moosefs,mogilefs,glusterfs,lustre
根據其是否支持'journal'功能:
日誌型文件系統:ext3,ext4,xfs...
非日誌型文件系統:ext2,vfat
文件系統的組成部分:
內核中的模塊:ext4,xfs,vfat
用戶空間的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
Linux的虛擬文件系統:VFS
建立文件系統:
mkfs命令:
1.mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
2.mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL':設定卷標
mke2fs:ext系列文件系統專用管理工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j:至關於-t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #:爲數據空間中每多少個字節建立一個inode,此大小不該該小於block的大小
-N #:爲數據空間建立多少個iNode
-m #:爲管理人員預留的空間佔據的百分比,默認5%
-O FEATURE[,...]:啓用指定特性
-O ^FEATURE:關閉指定特性
mkswap:建立交換分區
mkswap [options] device
-L 'LABEL'
前提:調整其分區的ID爲82
其餘經常使用工具:
blkid:塊設備屬性信息查看
blkid [OPTION]... [DEVICE]
-U UUID:根據指定的UUID來查找對應的設備
-L LABEL:根據指定的LABEL來查找對應的設備
e2label:管理ext系列文件系統的label信息
e2label DEVICE [LABEL]
tune2fs:從新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊信息:super block
-L 'LABEL':修改卷標
-m #:修改預留給管理員的空間百分比
-j:將ext2升級爲ext3
-O:文件系統屬性啓用或禁用
-o:調整文件系統的默認掛載選項
-U UUID:修改UUID號
dumpe2fs:
-h:查看超級塊信息
文件系統檢測:
fsck:file system check
fsck.FS_TYPE
fsck -t FS_TYPE
-a:自動修復錯誤
-r:交互式修復錯誤
注意:FS_TYPE必定要與分區上已有文件類型相同
e2fsck:ext系列文件專用的檢測修復工具
-y:自動回答爲yes
-f:強制修復
回顧:
磁盤接口類型,磁盤分區,fdisk,mkfs,mke2fs,tune2fs,blkid,dumpe2fs,e2label
vfs:xfs,ext{2|3|4},btrfs
文件系統管理:
將額外文件系統與根文件系統某現存的目錄創建起關聯關係,進而使得此目錄做爲其餘文件訪問入口的行爲,稱之爲掛載.
解除此關聯關係的過程稱之爲卸載
設備掛載點:Mount Point
mount
卸載時:可以使用設備,也可使用掛載點
umount
注意:掛載點下原有文件,在掛載完成後會被臨時隱藏
掛載方法:mount DEVICE MOUNT_POINT
mount:經過查看/etc/mtab文件顯示當前系統已掛載的全部設備
mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要掛載的設備
1.設備文件,例如/dev/sda5
2.卷標:-L 'LABEL',例如-L 'MYDATA'
3.UUID,-U 'UUID'
4.僞文件系統名稱:proc,sysfs,devtmpfs,configfs
dir:掛載點
事先存在:建議使用空目錄
進程正在使用中的設備沒法被卸載
經常使用選項:
-t vsftype:指定要掛載的設備上的文件系統類型
-r:readonly,只讀掛載
-w:read and write,讀寫掛載
-n:不更新/etc/mtab
-a:自動掛載全部支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有自動掛載功能)
-L 'LABEL':以卷標指定掛載設備
-U 'UUID':以UUID指定掛載設備
-B,--bind:綁定目錄到另外一個目錄上
注意:查看內核追蹤到的已掛載的全部設備:cat /proc/mounts
-o options:(掛載文件系統的選項)
async:異步模式
sync:同步模式
atime/noatime:包含目錄和文件
diratime/nodiratime:目錄的訪問時間戳
auto/noauto:是否支持自動掛載
exec/noexec:是否支持將文件系統上的應用程序運行爲進程
dev/nodev:是否支持在此文件系統上使用設備文件
suid/nosuid:
remount:從新掛載
ro:
rw:
user/nouser:是否容許普通用戶掛載此設備
acl:啓用此文件系統上的acl功能
注意:上述選項可多個同時使用,彼此使用逗號分隔
默認掛載選項:defaults
rw, suid, dev, exec, auto, nouser, async, and relatime
卸載命令:
umount DEVICE
umount MOUNT_POINT
查看正在訪問指定文件系統的進程
fuser -v MOUNT_POINT
終止全部正在訪問指定文件系統的進程:
fuser -km MOUNT_POINT
掛載交換分區:
啓用:swapon
swapon [OPTION]... [DEVICE]
-a:激活全部的交換分區
-p PRIORITY:指定優先級
禁用:swapoff [OPTION]... [DEVICE]
內存空間使用狀態:
free [OPTION]
-m:以MB爲單位
-g:以GB爲單位
文件系統空間佔用等信息的查看工具:
df:
-h:human-readable
-i:inodes instead of blocks
-P,--portability:以posix兼容的格式輸出
查看某目錄整體空間佔用狀態:
du:
du [OPTIONS]... DIR
-h:human-readable
-s:summary
命令總結:mount,umount,free,df,du,swapon,swapoff,fuser
文件掛載的配置文件:/etc/fstab
每行定義一個要掛載的文件系統:
要掛載的設備或僞文件系統 掛載點
文件系統類型
掛載選項
轉儲頻率
自檢次序
要掛載的設備或僞文件系統:
設備文件,LABEL(LABEL=""),UUID(UUID=""),僞文件系統名稱(proc,sysfs)
掛載選項:
defaults
轉儲頻率:
0:不作備份
1:天天轉儲
2:每隔一天轉儲
自檢次序:
0:不自檢
1:首先自檢,通常只有rootfs才用1
...
文件系統上的其餘概念:
iNode:index node,索引節點
地址指針:
直接指針:
間接指針:
三級指針:
inode bitmap:對位標識每一個inode空閒與否的狀態信息
連接文件:
硬連接:
不可以對目錄進行
不能跨分區進行
指向同一個inode的多個不一樣路徑,建立文件的硬連接,即爲爲inode建立新的引用路徑,所以會增長其引用計數
符號連接:
能夠對目錄進行
並且能夠跨分區
指向的是另外一個文件的路徑,其大小爲指向的路徑字符串長度,不增長或減小模板文件inode的引用計數
ln [-sv] SRC DEST
-s:symbolic link
-v:verbose,顯示過程
文件管理操做對文件的影響:
文件刪除:
文件複製:
文件移動:
練習:
1.建立一個20G的文件系統,塊大小爲2048,文件系統ext4,卷標爲TEST,要求此分區開機後自動掛載至/testing目錄,且默認有acl掛載選項
1.建立20G分區
2.格式化
mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE
3.編輯/etc/fstab
LABEL='TEST' /testing ext4 defaults,acl 0 0
2.建立一個5G的文件系統,卷標HUGE,要求此分區開機自動掛載至/mogdata目錄,文件系統類型爲ext3
3.寫一個腳本,完成以下功能:
1.列出當前系統識別到的全部磁盤設備
2.若是磁盤數量爲1,則顯示其空間使用信息,不然,則顯示最後一個磁盤設備的空間使用信息
bash腳本編程之用戶交互:
read [option]... [name ...]
-p 'PROMPT'
-t TIMEOUT
bash -n /path/to/some_scripts
檢查腳本中的語法錯誤
bash -x /path/to/some_scripts
#!/bin/bash
read -p "Enter a special file:" diskfile
[ -z "$diskfile" ] && echo "Fool" && exit 1
if fdisk -l | grep "^Disk $diskfile" &> /dev/null;then
fdisk -l $diskfile
else
echo "No such file."
exit 2
fi
RAID:
redundant arrays of inexpensive disks
independent
Berkeley:A case for redundant arrays of inexpensive disks RAID
提升IO能力:
磁盤並行讀寫
提升耐用性:
磁盤冗餘來實現
級別:多塊磁盤組織在一塊兒的工做方式有所不一樣
RAID實現的方式:
外接式磁盤陣列:經過擴展卡提供適配能力
內接式RAID:主板集成RAID控制器
Software RAID:
級別:level
RAID-0:0,條帶卷,strip;
RAID-1:1,鏡像卷,mirror;
RAID-2
..
RAID-5:
RAID-6:
RAID10:
RAID01:
RAID-0:
讀寫性能提高
可用空間:N*min(S1,S2..)
無容錯能力
最小磁盤數:2
RAID-1:
讀性能提高,寫性能降低
可用空間:1*min(S1,S2..)
有冗餘能力
最少磁盤數:2
RAID-4:
RAID-5:
讀寫性能提高
可用空間:(N-1)*min(S1,S2...)
有容錯能力:1塊磁盤
最少磁盤數:3
RAID-6:
讀寫性能提高
可用空間(N-2)*min(S1,S2...)
有容錯能力:2
最少磁盤數:4
混合類型:
RAID10:
讀寫性能提高
可用空間:N*min(S1,S2...)/2
有容錯能力:每組鏡像最多隻能壞1塊
最少磁盤數:4
RAID01:
RAID50,RAID-7:
JBOD:just a bunch of disks
功能:將多塊磁盤的空間合併一個大的連續空間使用
可用空間:sum(S1,S2..)
經常使用級別:RAID0,RAID1,RAID5,RAID10,RAID50,JBOD
實現方式:
硬件實現方式
軟件實現方式
CentOS 6上的軟件RAID的實現:
結合內核中的md(multi devices)
mdadm:模式化的工具
命令的語法格式:mdadm [mode] <raiddevice> [OPTIONS] <component-device>
支持的raid級別,linear,0,1,4,5,6,10
模式:
建立:-C
裝配:-A
監控:-F
管理:-f,-r,-a
<raiddevice>:/dev/md#
<component-devices>:任意塊設備
-C:建立模式
-n #:使用#個塊設備來建立RAID
-l #:指明要建立的raid級別
-a {yes|no}:自動建立目標raid設備的設備文件
-c CHUNK_SIZE:指明塊大小
-x #:指明空閒盤的個數
例如,建立一個10G可用空間的RAID5:
-D:顯示raid詳細信息
mdadm -D /dev/md#
管理模式:
-f:標記指定磁盤爲損壞
-a:添加磁盤
-r:移除磁盤
觀察md的狀態:
cat /proc/mdstat
中止md設備:
mdadm -S /dev/md#
watch命令:
-n #:刷新間隔,單位是秒
watch -n# 'COMMAND'
LVM2:
LVM:logical volume manager,version 2
dm:device mapper,將一個或多個底層塊設備組織成一個邏輯設備的模塊
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root <-- /dev/VG_NAME/LV_NAME (/dev/vol0/root)
pv管理工具:
pvs:簡要pv信息顯示
pvdisplay:顯示pv的詳細信息
pvcreate /dev/DEVICE :建立pv
vg管理工具:
vgs
vgdisplay
vgcreate [-s#[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]]
先作pvmove
vgremove
lv管理工具:
lvs
lvdisplay
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvremove /dev/VG_NAME/LV_NAME
擴展邏輯卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
縮減邏輯卷:
umount /dev/VG_NAME/LV_NAME
e2fsck -F /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount
快照:snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
文件系統掛載使用:
掛載光盤設備:
光盤設備文件:
IDE:/dev/dhc
SATA:/dev/sr0
符號連接文件:
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw
mount -r /dev/cdrom /media/cdrom
umount /dev/cdrom
dd命令:covert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size,複製單元大小
count=#:複製多少個bs
磁盤拷貝:
dd if=/dev/sda of=/dev/sdb
備份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破壞MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=256 count =1
兩個特殊設備:
/dev/null:數據黑洞
/dev/zero:吐零機
btrfs文件系統:
技術預覽版
Btrfs (B-tree,Buffer FS,Better FS),GPL,Oracle,2007,CoW
核心特性:
多物理卷支持:btrfs可由多個底層物理卷組成,支持RAID,以聯機,移除,修改.
寫時複製更新機制(CoW):複製,更新及替換指針,而非就地更新
數據及元數據校驗碼:checksum
子卷:sub_volume
快照:支持快照的快照
透明壓縮
文件系統建立:
mkfs.btrfs
-L 'LABEL'
-d <type>:raid0 raid1 raid5 raid6 raid10 single
-m <profile>:raid0 raid1 raid5 raid6 raid10 single dup
-O <feature>
-O list-all:列出支持的全部feature
屬性查看:
btrfs filesystem show
掛載文件系統:
mount -t btrfs /dev/sdb MOUNT_POINT
透明壓縮機制:
mount -o compress={lzo|zlib} DEVICE MOUNT_POINT
子命令:filesystem,device,balance,subvolume
壓縮,解壓縮及歸檔工具:
compress/uncompress:.Z
gzip/gunzip:.gz
bzip2/bunzip2:.bz2
xz/unxz:.xz
zip/unzip:.zip
tar,cpio
1.gzip/gunzip:
gzip [OPTION]... FILE...
-d:解壓縮,至關於gunzip
-c:將結果輸出至標準輸出
-#:1-9,指定壓縮比
zcat:不顯示展開的前提下查看文本文件內容
2.bzip2/bunzip2/bzcat
bzip2 [OPTION]... FILE...
-k:keep,保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認6
bzcat:不顯示展開的前提下查看文本文件內容
3.xz/unxz/xzcat:
xz [OPTION]... FILE...
-k:
-d:
-#:
xzcat:不顯示展開的前提下查看文本文件內容
4.tar
tar [OPTION]...
1.建立歸檔:
tar -c -f /PATH/TO/SOMEFILE.tar FILE...
2.查看歸檔文件中的文件列表:
tar -t -f /PATH/TO/SOMEFILE.tar
3.展開歸檔
tar -xf /PATH/TO/SOMEFILE.tar
tar -xf /PATH/TO/SOMEFILE.tar -C /PATH/TO/DIR
-j:bzip2,
-z:gzip
-J:xz
bash腳本編程:
if語句,bash -n,bash -x
循環:for,while,until
循環體:要執行的代碼,可能要執行N遍
進入條件
退出條件
for循環:
for 變量名 in 列表;do
循環體
done
執行機制:
依次將列表中的元素賦值給"變量名";每次複製後既執行一次循環體;直到列表中的元素耗盡,循環結束
列表生成方式:
1.直接給出字符串列表
2.整數列表
1.{start..end}
2.$(seq [start [step]] end)
3.返回列表的命令:
$(COMMAND)
4.glob
5.變量引用
$@,$*
Linux程序包管理:
API:application programming interface
POSIX:Protab OS
程序源代碼 --> 預處理 --> 編譯 --> 彙編 --> 連接
靜態編譯:
共享編譯:.so
ABI:application binary interface
Windows與Linux不兼容:
庫級別的虛擬化:
Linux:WINE
Windows:cywin
系統級開發:
C
C++
應用級開發:
Java
Python
PHP
二進制應用程序的組成部分:
二進制文件,庫文件,配置文件,幫助文件
程序包管理器:
Debian:deb,dpt
Redhat:
rpm:Redhat package manager
RPM is package manager
Gentoo:
Archlinux:
源代碼:name-VERSION.tar.gz
VERSION:major.minor.release
rpm包命名方式:
name-VERSION-ARCH.rpm
VERSION:major.minor.release
release.arch:
release:release.OS
常見的arch:
x86:i386,i486,i586,i686
x86_64:x64,x86_64,amd64
powerrpc:ppc
跟平臺無關:noarch
testaoo:拆包
testapp-VERSION-ARCH.rpm 主包
testapp-devel-VERSION-ARCH.rpm 支包
testapp-testing-VERSION-ARCH.rpm
包之間:存在依賴關係
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 22+ rpm包管理器前端管理工具
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig -p:顯示本機已經緩存的全部可用庫文件名及文件路徑映射關係
配置文件爲:/etc/ld.so.conf /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
程序包管理:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷的實現程序包的安裝,卸載,查詢,升級和校驗等管理操做
1.程序的組成清單(每一個包獨有)
文件清單
安裝或卸載時運行的腳本
2.數據庫(公共)
程序包名稱及版本
依賴關係
功能說明
安裝生成的個文件文件路徑及校驗碼信息
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum,dnf
獲取程序包的途徑:
1.系統發行版的光盤或官方服務器
CentOS鏡像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2.項目官方站點
3.第三方組織
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4.本身製做
建議:檢查其合法性
來源合法性
程序包的完整性
CentOS系統上rpm命令管理程序包:
安裝,卸載,升級,查詢,校驗,數據維護
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v:verbose
-vv:
-h:以#顯示程序包管理執行進度:每一個#表示%2的進度
rpm -ivh PACKAGE_FILE ...
[install-option]
--test:測試安裝,但不執行真正安裝過程,dry run模式
--nodeps:忽略依賴關係
--replacepkgs:從新安裝
--nosignature:不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本片段
%pre:安裝前腳本 --nopre
%post:安裝後 --nopost
%preun:卸載前 --nopreun
%postun:卸載後 --nopostun
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
upgrade:安裝有舊版程序包,則升級,若是不存在舊版程序包,則安裝
freeshen:安裝有舊版程序包,則升級,若是不存在,則不執行升級操做
rpm -Uvh PACKAGE_FILE...
rpm -Fvh PACKAGE_FILE...
--oldpackage:降級
--force:強制升級
注意:
1.不要對內核執行升級操做:Linux支持多內核版本並存,所以,對直接安裝新版本內核
2.若是原程序包的配置文件安裝後曾被修改,升級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本配置文件,而把新版本的文件重命名(FILENAME.rpmnew)後保留
查詢:
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:全部包
-f:查詢指定的文件由哪一個程序包安裝生成
-p /PATH/TO/PACKAGE_FILE:針對還沒有安裝的程序包文件作查詢操做
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個包所提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴
[query-options]
--changelog:查詢rpm包的changlog
-c:查詢程序的配置文件
-d:查詢程序的幫助手冊
-i:information
-l:查看指定程序包安裝後生成的全部文件
--scripts:程序包自帶的腳本片段
-R:查詢指定的程序包所依賴的CAPABILITY
--provices:列出指定程序包所提供的CAPABILITY
用法:
-qi PACKAGE,-qf FILE,-qc PACKAGE,-ql PACKAGE,-qd PACKAGE
-qpi PACKAGE_FILE,-qpl PACKAGE_FILE
-qa
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
校驗:
rpm {-V|--verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
包來源合法性驗證及完整性驗證:
完整性驗證:SHA256
來源合法性驗證:RSA
公鑰加密:
對稱加密:加密,解密使用同一密鑰
非對稱加密:密鑰是成對的
public key:公鑰
secret key:私鑰
導入所需的公鑰:
rpm --import /PATH/FORM/GPG-PUBKEY-FILE
CentOS 7 發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7
數據庫重建:
rpm {--initdb|--rebuilddb}
initdb:初始化
若是不存在數據庫,則新建
rebuilddb:重建
不管是否存在,直接從新建立數據庫
程序包管理2:
CentOS:yum,dnf
YUM:yellow dog,yellowdog update modifier
yum repository:yum repo
存儲了衆多rpm包,以及包的相關元數據文件(放置於特定目錄:repodata)
文件服務器:
ftp://
http://
nfs://
file:///
yum客戶端:
配置文件:
/etc/yum.conf:爲全部倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置信息
倉庫指向的定義
[repositoryid]
name=Some name for this repository
baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
默認爲roundrobin,隨機挑選
cost=
默認1000
yum命令的用法:
yum [options] [command] [package ...]
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* update-minimal [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* autoremove [package1] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache [fast]
* groups [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
(maintained for legacy reasons only - use repoquery or yum provides)
* localinstall rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained for legacy reasons only - use update)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* repoinfo [all|enabled|disabled]
* repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
* load-transaction [txfile]
* updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel]
* fssnapshot [summary | list | have-space | create | delete]
* fs [filters | refilter | refilter-cleanup | du]
* check
* help [command]
顯示倉庫列表:
repolist [all|enabled|disabled]
顯示程序包:
list
yum list [all|glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安裝程序包:
install pkg1 [pkg2] [...]
reinstall package1 [package2] [...] 從新安裝
升級程序包:
update [pkg1] [pkg2] [...]
downgrade package1 [package2] [...] 降級
檢查可用升級:
check-update
卸載程序包:
remove | erase pkg1 [pkg2] [...]
查看程序包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)
localupdate rpmfile1 [rpmfile2] [...]
包管理的相關命令:
groupinstall group1 [group2] [...]
groupupdate group1 [group2] [...]
grouplist [hidden] [groupwildcard] [...]
groupremove group1 [group2] [...]
groupinfo group1 [...]
如何使用光盤做爲本地yum倉庫:
1.掛載光盤至某目錄,例如/media/cdrom
mount -r -t iso9660 /dev/cdrom /media/cdrom
2.建立配置文件
[base]
name=CentOS 7 Release 7.2.1511
baseurl=file:///mnt
enabled=1
gpgcheck=0
yum的命令行選項:
--nogpgcheck:禁止進行gpg check
-y:自動回答爲yes
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啓用此處指定的repo
--noplugins:禁用全部插件
yum的repo配置文件中可用的變量:
$releaserver:當前OS發行版的主版本號
$arch:平臺
$basearch:基礎平臺
$YUM0-$YUM9
http://mirrors.magedu.com/centos/$releaserver/$basearch/os
建立yum倉庫:
createrepo [options] <directory>
程序包編譯安裝:
testapp-VERSION-release.src.rpm --> 安裝後使用rpmbuild命令製做成二進制格式的rpm包,然後再安裝
源代碼 --> 預處理 --> 編譯(gcc) --> 彙編 --> 連接 --> 執行
源代碼組織格式:
多文件:文件中的代碼之間,極可能存在跨文件依賴關係
C,C++: make (configure --> Makefile.in --> makefile)
java:maven
編譯安裝:
./configure
1.經過選項傳遞參數,指定啓用特性,安裝路徑等.執行時會參考用戶的指定以及Makefile.in文件生成makefile
2.檢查依賴到的外部環境
make
根據makefile文件,構建應用程序
make install
開發工具:
autoconf:生成configure腳本
automake:生成Makefile.in
建議:安裝前查看INSTALL,README
開源程序源代碼的獲取:
官方自建站點:
apache.org(ASF)
mariadb.org
代碼託管:
SourceForge
Github.com
code.google.com
c/c++:gcc (GNU C Complier)
編譯C源代碼:
前提:提供開發工具及開發環境
開發工具:make,gcc等
開發環境:開發庫,頭文件
glibc:標準庫
經過"包組"提供開發組件
1.configure腳本
選項:指定安裝位置,指定啓用的特性
--help:獲取其支持使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH/TO/SOMEWHERE:指定默認安裝位置
--sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝路徑
system types:
optional features:可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
optional packages:可選包
--with-PACKAGE[=ARG]
--without-PACKAGE
2.make
3.make install
安裝後的配置:
1.導出二進制程序目錄至PATH環境變量
編輯文件/etc/profile.d/name.sh
export PATH=/PATH/TO/BIN:$PATH
2.導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中
讓系統從新生成緩存:
ldconfig [-v]
3.導出頭文件
基於連接的方式實現:
ln -sv
4.導出幫助手冊:
編輯/etc/man.config文件
添加一個MANPATH
練習:
1.yum的配置和使用,包括yum repositroy的建立
2.編譯安裝apache 2.2;啓動此服務
博客做業:程序包管理 rpm/yum/編譯