包的組成:
二進制文件、庫文件、配置文件、幫助文件前端
程序包管理器:
debian: deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器node
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平臺無關:noarch數據庫
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm包管理器前端管理工具centos
查看二進制程序所依賴的庫文件
ldd /PATH/TO/BINARY_FILE緩存
管理及查看本機裝載的庫文件
ldconfig 加載配置文件中指定的庫文件
/sbin/ldconfig -p 顯示本機已經緩存的全部可用庫文件名及文件路徑
映射關係
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cachebash
包文件組成 (每一個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本服務器
數據庫(公共):/var/lib/rpm
程序包名稱及版本
依賴關係
功能說明
包安裝後生成的各文件路徑及校驗碼信息dom
獲取程序包的途徑:
(1) 系統發版的光盤或官方的服務器
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 本身製做
注意:第三方包建議要檢查其合法性
來源合法性,程序包的完整性異步
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf(centos8版本開始)async
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose(顯示詳細過程)
-vv:
-h: 以#顯示程序包管理執行進度
rpm -ivh PACKAGE(包裹)_FILE ...
--test: 測試安裝,但不真正執行安裝,即dry run模式
--nodeps:忽略依賴關係
--replacepkgs(完整覆蓋安裝) | replacefiles (僅覆蓋安裝重複文件)
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本
%pre: 安裝前腳本 --nopre
%post: 安裝後腳本 --nopost
%preun: 卸載前腳本 --nopreun
%postun: 卸載後腳本 --nopostun
rpm包升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安裝有舊版程序包,則「升級」
若是不存在舊版程序包,則「安裝」
freshen:安裝有舊版程序包,則「升級」
若是不存在舊版程序包,則不執行升級操做
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級
--force: 強制安裝
包查詢
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a:全部包
-f:查看指定的文件由哪一個程序包安裝生成
-p rpmfile:針對還沒有安裝的程序包文件作查詢操做
--whatprovides CAPABILITY(能力,功能):查詢指定的CAPABILITY由哪一個包所提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id 「*.conf」 釋放包內文件
--changelog:查詢rpm包的changelog
-c:查詢程序的配置文件
-d:查詢程序的文檔
-i:information(信息)
-l:查看指定的程序包安裝後生成的全部文件
--scripts:程序包自帶的腳本
--provides:列出指定程序包所提供的CAPABILITY
-R:查詢指定的程序包所依賴的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 ...
當包卸載時,對應的配置文件不會刪除, 以FILENAME.rpmsave形式保留
神奇的文件夾(用來自動掛載光盤)
操做步驟:(1) rpm -ivh /misc/cd/Packages/autofs-5.0.7-99.el7.x86_64.rpm(安裝)
systemctl start autofs (systemctl enable autofs下次開機程序自啓動)
(2) cd /misc/cd/
(3) ls 會有Packages文件夾(6 7版本中)
(4) df 查看 自動掛載成功
diff 文件1 文件2 用於兩個文件的對比 包校驗:rpm -K yum
文件服務器:
http://
https://
ftp://
file://
yum客戶端配置文件:
/etc/yum.conf:爲全部倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
做爲yum源路徑的前提:在目錄中必須有repodata文件夾
倉庫指向的定義:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/ (倉庫指向的路徑)
enabled={1|0} (1爲啓用 0爲禁用 默認啓用)
gpgcheck={1|0} (1爲檢查密鑰 0爲不檢查 默認不檢查)
gpgkey=URL (密鑰路徑)
自配yum出現問題的兩點緣由:(1)配置文件格式錯誤 例如 baseurl路徑錯誤
(2)緩存問題
顯示倉庫列表:
yum repolist
顯示程序包:
yum list
升級程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降級)
檢查可用升級:
yum check-update
卸載程序包:
yum remove
清除緩存:
yum clean all
查看程序包information(信息)
yum info [...]
查看yum事務歷史
yum history
例:yum history info 6(查看歷史記錄中編號6的操做)
yum history undo 6(撤銷歷史紀錄中編號6的操做)
yum history redo 6 (從新執行歷史記錄中6的操做)
日誌 :/var/log/yum.log
查看指定的特性(能夠是某文件)是由哪一個程序包所提供:yum provides
編譯安裝
C語言源代碼編譯安裝三步驟:
一、 ./configure
(1) 經過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的
指定以及Makefile.in文件生成Makefile
(2) 檢查依賴到的外部環境,如依賴的軟件包
二、 make 根據Makefile文件,構建應用程序
三、 make install 複製文件到相應路徑
開發工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
注意:安裝前查看INSTALL,README
管理分區
列出塊設備
lsblk
建立分區使用:
fdisk 建立MBR分區
gdisk 建立GPT分區(GPT建立分區只有主分區 )
fdisk -l [-u] [device...] 查看分區
fdisk /dev/sdb 管理分區
p 分區列表
t 更改分區類型
n 建立新分區
d 刪除分區
v 校驗分區
u 轉換單位
w 保存並退出
q 不保存並退出
同步分區表
查看內核是否已經識別新的分區
cat /proc/partations
centos6通知內核從新讀取硬盤分區表
新增分區用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
刪除分區用
partx -d --nr M-N /dev/DEVICE
CentOS 5,7: 使用partprobe
partprobe [/dev/DEVICE]
查前支持的文件系統:cat /proc/filesystems
建立文件系統
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
-I 一個inode記錄佔用的磁盤空間大小,128---4096
-m # 默認5%,爲管理人員預留空間佔總空間的百分比
-O FEATURE[,...] 啓用指定特性
-O ^FEATURE 關閉指定特性
blkid:塊設備屬性信息查看
blkid [OPTION]... [DEVICE]
-U UUID 根據指定的UUID來查找對應的設備
-L LABEL 根據指定的LABEL來查找對應的設備
e2label:管理ext系列文件系統的LABEL
e2label DEVICE [LABEL]
findfs :查找分區
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
tune2fs:從新設定ext系列文件系統可調整參數的值
-l 查看指定文件系統超級塊信息;super block
-L 'LABEL’ 修改卷標
-m # 修預留給管理員的空間百分比
-j 將ext2升級爲ext3
-O 文件系統屬性啓用或禁用, –O ^has_journal
-o 調整文件系統的默認掛載選項,–o ^acl
-U UUID 修改UUID號
dumpe2fs:
將磁盤塊分組管理
-h:查看超級塊信息,不顯示分組信息
文件系統檢測和修復
常發生於死機或者非正常關機以後
掛載爲文件系統標記爲「no clean」
注意:必定不要在掛載狀態下修復
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p 自動修復錯誤
-r 交互式修復錯誤
FS_TYPE 必定要與分區上已經文件類型
e2fsck:ext系列文件專用的檢測修復工具
-y 自動回答爲yes
-f 強制修復
用mount命令掛載文件系統
掛載方法: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':例如 -U '0c50523c-43f1-45e7-
85c0-a126711d406e'
(4) 僞文件系統名稱:proc, sysfs, devtmpfs, configfs
dir:掛載點
事先存在,建議使用空目錄
進程正在使用中的設備沒法被卸載
mount經常使用命令選項
-t vsftype 指定要掛載的設備上的文件系統類型
-r readonly,只讀掛載
-w read and write, 讀寫掛載
-n 不更新/etc/mtab,mount不可見
-a 自動掛載全部支持自動掛載的設備(定義在了/etc/fstab文件
中,且掛載選項中有auto功能)
-L 'LABEL' 以卷標指定掛載設備
-U 'UUID' 以UUID指定要掛載的設備
-B, --bind 綁定目錄到另外一個目錄上
查看內核追蹤到的已掛載的全部設備
cat /proc/mounts
mount經常使用命令選項
-o options:(掛載文件系統的選項),多個選項使用逗號分隔
async 異步模式 sync 同步模式,內存更改時,同時寫磁盤
atime/noatime 包含目錄和文件
diratime/nodiratime 目錄的訪問時間戳
auto/noauto 是否支持自動掛載,是否支持-a選項
exec/noexec 是否支持將文件系統上運行應用程序
dev/nodev 是否支持在此文件系統上使用設備文件
suid/nosuid 是否支持suid和sgid權限
remount 從新掛載
ro 只讀 rw 讀寫
user/nouser 是否容許普通用戶掛載此設備,/etc/fstab使用
acl 啓用此文件系統上的acl功能
loop 使用loop設備
defaults:至關於rw, suid, dev, exec, auto, nouser, async
卸載命令
查看掛載狀況
findmnt MOUNT_POINT|device
查看正在訪問指定文件系統的進程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
終止全部在正訪問指定的文件系統的進程
fuser -km MOUNT_POINT
卸載
umount DEVICE
umount MOUNT_POINT
掛載點和/etc/fstab
配置文件系統體系
被mount、 fsck和其它程序使用
系統重啓時保留文件系統體系
能夠在設備欄使用文件系統卷標
使用mount -a 命令掛載/etc/fstab中的全部文件系統
文件掛載配置文件
/etc/fstab每行定義一個要掛載的文件系統
一、要掛載的設備或僞文件系統
設備文件
LABEL:LABEL=""
UUID:UUID=""
僞文件系統名稱:proc, sysfs
二、掛載點
三、文件系統類型:ext4,xfs,iso9660,nfs,none
四、掛載選項:defaults ,acl,bind
五、轉儲頻率:0:不作備份 1:天天轉儲 2:每隔一天轉儲
六、 fsck檢查的文件系統的順序:容許的數字是0 1 2
0:不自檢
1:首先自檢;通常只有rootfs才用
2:非rootfs使用
處理交換文件和分區
swap交換分區是系統RAM的補充,Swap 分區支持虛擬內存。當沒有足夠的
RAM 保存系統處理的數據時會將數據寫入 swap 分區
掛載交換分區
基本設置包括:
• 建立交換分區或者文件
• 使用mkswap寫入特殊簽名
• 在/etc/fstab文件中添加適當的條目
• 使用swapon -a 激活交換空間
啓用:swapon
swapon [OPTION]... [DEVICE]
-a:激活全部的交換分區
-p PRIORITY:指定優先級
/etc/fstab 在第4列中:pri=value
禁用:swapoff [OPTION]... [DEVICE]
SWAP的優先級
能夠指定swap分區0到32767的優先級,值越大優先級越高
若是用戶沒有指定,那麼核心會自動給swap指定一個優先級,這個優先級從
-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一
先添加的swap的缺省優先級比較高,除非用戶本身指定一個優先級,而用戶
指定的優先級(是正數)永遠高於核心缺省指定的優先級(是負數)
使用光盤
建立ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc
常見工具
文件系統空間佔用等信息的查看工具
df [OPTION]... [FILE]...
-H 以10爲單位
-T 文件系統類型
-h human-readable
-i inodes instead of blocks
-P 以Posix兼容的格式輸出
查看某目錄整體空間佔用狀態
du [OPTION]... DIR
-h human-readable
-s summary
--max-depth=# 指定最大目錄層級
工具dd
dd命令:convert and copy a file 用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
if=file 從所命名文件讀取而不是從標準輸入
of=file 寫到所命名的文件而不是到標準輸出
ibs=size 一次讀size個byte
obs=size 一次寫size個byte
bs=size block size, 指定塊大小(既是是ibs也是obs)
cbs=size 一次轉化size個byte
skip=blocks 從開頭忽略blocks個ibs大小的塊
seek=blocks 從開頭忽略blocks個obs大小的塊
count=n 複製n個bs
conv=conversion[,conversion...] 用指定的參數轉換文件
轉換參數:
ascii 轉換 EBCDIC 爲 ASCII
ebcdic 轉換 ASCII 爲 EBCDIC
lcase 把大寫字符轉換爲小寫字符
ucase 把小寫字符轉換爲大寫字符
nocreat 不建立輸出文件
noerror 出錯時不中止
notrunc 不截短輸出文件
sync 把每一個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
Fdatasync 寫完成前,物理寫入輸出文件
備份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破壞MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一個大與2K的二進制文件fileA。如今想從第64個字節位置開始讀取,須要讀
取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開
始的位置,替換128Bytes,實現以下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
備份:
dd if=/dev/sdx of=/dev/sdy
將本地的/dev/sdx整盤備份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
將/dev/sdx全盤數據備份到指定路徑的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
備份/dev/sdx全盤數據,並利用gzip壓縮,保存到指定路徑
恢復:
dd if=/path/to/image of=/dev/sdx
將備份文件恢復到指定盤
gzip -dc /path/to/image.gz | dd of=/dev/sdx
將壓縮的備份文件恢復到指定盤
拷貝內存資料到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024
將內存裏的數據拷貝到root目錄下的mem.bin文件
從光盤拷貝iso鏡像
dd if=/dev/cdrom of=/root/cd.iso
拷貝光盤數據到root文件夾下,並保存爲cd.iso文件
銷燬磁盤數據
dd if=/dev/urandom of=/dev/sda1
利用隨機的數據填充硬盤,在某些必要的場合能夠用來銷燬數據,執行此操做
之後,/dev/sda1將沒法掛載,建立和拷貝操做沒法執行
獲得最恰當的block size
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
經過比較dd指令輸出中命令的執行時間,便可肯定系統最佳的block size大小
測試硬盤寫速度
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
測試硬盤讀速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
pv管理工具
顯示pv信息
pvs:簡要pv信息顯示
pvdisplay
建立pv
pvcreate /dev/DEVICE
刪除pv
pvremove /dev/DEVICE
vg管理工具
顯示卷組
vgs
vgdisplay
建立卷組
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName
管理卷組
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
刪除卷組
先作pvmove,再作vgremove
lv管理工具:
顯示邏輯卷
lvs
Lvdisplay
建立邏輯卷
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
刪除邏輯卷
lvremove /dev/VG_NAME/LV_NAME
重設文件系統大小
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
xfs_growfs /mountpoint
擴展和縮減邏輯卷
擴展邏輯卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
lvresize -r -l +100%FREE /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
邏輯卷底層能夠是硬盤 也能夠是分區建立邏輯卷前要更改id 把id改爲8e