第三週

包命名和工具
包:分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
包之間:可能存在依賴關係,甚至循環依賴
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm包管理器前端管理工具

庫文件
查看二進制程序所依賴的庫文件
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件
ldconfig 加載配置文件中指定的庫文件
/sbin/ldconfig –p 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關係
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache

程序包的來源
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
獲取程序包的途徑:
(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包管理
CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#顯示程序包管理執行進度
rpm -ivh PACKAGE_FILE ...

rpm包安裝
[install-options]
--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包升級
升級:
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” 釋放包內文件

包查詢
[query-options]
--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形式保留

包校驗
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: 公鑰,公開所有人
recret key: 私鑰, 不能公開
導入所需要公鑰
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”

rpm數據庫
數據庫重建:
/var/lib/rpm
rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在數據庫,則新建之
否則,不執行任何操作
rebuilddb:重建已安裝的包頭的數據庫索引目錄

yum
CentOS: yum, dnf
YUM: Yellowdog Update Modifier,rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具
yum repository: yum repo,存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄repodata下)
文件服務器:
http://
https://
ftp://
file://

yum配置文件
yum客戶端配置文件:
/etc/yum.conf:爲所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置
倉庫指向的定義:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意爲隨機挑選,默認值
priority:按順序訪問
cost= 默認爲1000

yum倉庫
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386, x86_64
$YUM0-$YUM9:自定義變量
示例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i386

yum源
阿里雲repo文件
http://mirrors.aliyun.com/repo/
CentOS系統的yum源
阿里雲:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清華大學:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源
阿里雲:https://mirrors.aliyun.com/epel/$releasever/x86_64
阿里巴巴開源軟件
https://opsx.alibaba.com/

yum-config-manager

生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x8664.repo
yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “倉庫名" 禁用倉庫
yum-config-manager --enable “倉庫名” 啓用倉庫
yum命令
yum命令的用法:
yum [options] [command] [package ...]
顯示倉庫列表:
yum repolist [all|enabled|disabled]
顯示程序包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安裝程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安裝)

yum命令
升級程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降級)
檢查可用升級:
yum check-update
卸載程序包:
yum remove | erase package1 [package2] [...]

yum命令
查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪個程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
清理本地緩存:
清除/var/cache/yum/$basearch/$releasever緩存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
yum makecache

yum命令
搜索:yum search string1 [string2] [...]
以指定的關鍵字搜索程序包名及summary信息
查看指定包所依賴的capabilities:
yum deplist package1 [package2] [...]
查看yum事務歷史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
日誌 :/var/log/yum.log

yum命令
安裝及升級本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
包組管理的相關命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

yum命令
yum的命令行選項:
--nogpgcheck:禁止進行gpg check
-y: 自動回答爲“yes”
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啓用此處指定的repo
--noplugins:禁用所有插件

系統光盤yum倉庫
系統安裝光盤作爲本地yum倉庫:
(1) 掛載光盤至某目錄,例如/mnt/cdrom
mount /dev/cdrom /mnt/cdrom
(2) 創建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
創建yum倉庫:
createrepo [options] <directory>

DNF (DaNdiFied)
DNF 介紹:新一代的RPM軟件包管理器。DNF 發行日期是2015年5月11日,DNF 包管理器採用Python 編寫,發行許可爲GPL v2,首先出現在Fedora 18 發行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括用戶體驗,內存佔用,依賴分析,運行速度等
安裝所需軟件包,依賴epel源
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm
yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm
配置文件:/etc/dnf/dnf.conf
倉庫文件:/etc/yum.repos.d/ *.repo
日誌: /var/log/dnf.rpm.log

DNF 使用
幫助:man dnf
dnf 用法:與yum一致
dnf [options] <command> [<arguments>...]
dnf --version
dnf repolist
dnf clean all
dnf makecache
dnf list installed
dnf list available
dnf search nano
dnf history
dnf history undo 1

程序包編譯
程序包編譯安裝:
Application-VERSION-release.src.rpm --> 安裝後,使用rpmbuild命令製作成二進制格式的rpm包,而後再安裝
源代碼-->預處理-->編譯-->彙編-->鏈接-->執行
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關係
C、C++:make 項目管理器
configure腳本 --> Makefile.in --> Makefile
java: maven

編譯安裝
C語言源代碼編譯安裝三步驟:
1、./configure
(1) 通過選項傳遞參數,指定啓用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成Makefile
(2) 檢查依賴到的外部環境,如依賴的軟件包
2、make 根據Makefile文件,構建應用程序
3、make install 複製文件到相應路徑
開發工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
注意:安裝前查看INSTALL,README

編譯安裝
開源程序源代碼的獲取:
官方自建站點:
apache.org (ASF:Apache Software Foundation)
mariadb.org
...
代碼託管:
SourceForge.net
Github.com
code.google.com
c/c++編譯器: gcc (GNU C Complier)

編譯安裝
編譯C源代碼:
準備:提供開發工具及開發環境
開發工具:make, gcc等
開發環境:開發庫,頭文件
glibc:標準庫
實現:通過“包組”提供開發組件
Development Tools
Server Platform Development
生產實踐:(基於最小化安裝的系統)
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils

編譯安裝
第一步:configure腳本
選項:指定安裝位置、指定啓用的特性
--help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:
--prefix=/PATH:指定默認安裝位置,默認爲/usr/local/
--sysconfdir=/PATH:配置文件安裝位置
System types:支持交叉編譯

編譯安裝
Optional Features: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可選包
--with-PACKAGE[=ARG] 依賴包
--without-PACKAGE 禁用依賴關係
注意:通常被編譯操作依賴的程序包,需要安裝此程序包的“開發”組件,其包名一般類似於name-devel-VERSION
第二步:make
第三步:make install

編譯安裝
安裝後的配置:
(1) 二進制程序目錄導入至PATH環境變量中
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導入幫助手冊
編輯/etc/man.config|man_db.conf文件
添加一個MANPATH

Ubuntu 軟件管理
Debian軟件包通常爲預編譯的二進制格式的擴展名“.deb”,類似rpm文件,因此安裝快速,無需編譯軟件。包文件包括特定功能或軟件所必需的文件、元數據和指令
dpkg:package manager for Debian,類似於rpm, dpkg是基於Debian的系統的包管理器。可以安裝,刪除和構建軟件包,但無法自動下載和安裝軟件包或其依賴項
APT:Advanced Packaging Tool,功能強大的軟件管理工具,甚至可升級整個Ubuntu的系統,基於客戶/服務器架構
APT工作原理:在服務器上先複製所有DEB包,然後用APT的分析工具genbasedir根據每個DEB 包的包頭(Header)信息對所有的DEB包進行分析,並將該分析結果記錄在文件夾base內的一個DEB 索引清單文件中,一旦APT 服務器內的DEB有所變動,要使用genbasedir產生新的DEB索引清單。客戶端在進行安裝或升級時先要查詢DEB索引清單,從而獲知所有具有依賴關係的軟件包,並一同下載到客戶端以便安裝。當客戶端需要安裝、升級或刪除某個軟件包時,客戶端計算機取得DEB索引清單壓縮文件後,會將其解壓置放於 /var/cache/apt/,而客戶端使用apt-get install或apt-get upgrade命令的時候,就會將這個文件夾內的數據和客戶端計算機內的DEB數據庫比對,知道哪些DEB已安裝、未安裝或是可以升級的

Ubuntu 軟件管理
dpkg常見用法: man dpkg
dpkg -i package.deb 安裝包
dpkg -r package 刪除包,不建議,不自動卸載依賴於它的包
dpkg -P package 刪除包(包括配置文件)
dpkg -l 列出當前已安裝的包,類似rpm -qa
dpkg -l package 顯示該包的簡要說明,類似rpm –qi
dpkg -L package 列出該包中所包含的文件,類似rpm –ql
dpkg -S <pattern> 搜索包含pattern的包,類似rpm –qf
dpkg -s package 列出該包的狀態,包括詳細信息,類似rpm –qi
dpkg --configure package 配置包,-a 使用,配置所有沒有配置的軟件包
dpkg -c package.deb 列出 deb 包的內容,類似rpm –qpl
dpkg --unpack package.deb 解開 deb 包的內容

Ubuntu 軟件管理
dpkg示例:
列出系統上安裝的所有軟件包
dpkg -l
列出軟件包安裝的文件
dpkg -L bash
查看/bin/bash來自於哪個軟件包
dpkg -S /bin/bash
安裝本地的 .deb 文件
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
卸載軟件包
dpkg -r zip
注意:一般建議不要使用dpkg卸載軟件包。因爲刪除包時,但依賴於它的任何包仍將安裝,並且可能無法再正常運行

Ubuntu 軟件管理
Debian 使用APT工具來管理包系統,它與 apt 命令不同。在基於 Debian 的 Linux 發行版中,有各種工具可以與 APT 進行交互,以方便用戶安裝、刪除和管理的軟件包。apt-get 是其中一個常用的命令行工具,另外一款較爲流行的命令行與 GUI 兼顧的工具是 Aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 這三條命令中
在 2014 年apt 命令發佈第一個穩定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令解決了命令過於分散的問題,它包括 apt-get 命令出現以來使用最廣泛的功能選項,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令時,用戶不必再由 apt-get 轉到 apt-cache 或 apt-config,提供管理軟件包所需的必要選項
apt 相當於 apt-get、apt-cache 和 apt-config 中最常用命令選項的集合
apt 具有更精減但足夠的命令選項,而且參數選項的組織方式更爲有效。此外,啓用的幾個特性也非常有幫助。例如,可以在使用 apt 命令安裝或刪除程序時看到進度條。apt 還會在更新存儲庫數據庫時提示用戶可升級的軟件包個數
apt 與 apt-get 有一些類似的命令選項,但它並不能完全向下兼容 apt-get 命令,也即可用 apt 替換部分 apt-get 系列命令,但不是全部

Ubuntu 軟件管理
查看幫助:apt help
apt與apt-get命令對比
apt 命令 被取代的命令 命令的功能
apt install apt-get install 安裝軟件包
apt remove apt-get remove 移除軟件包
apt purge apt-get purge 移除軟件包及配置文件
apt update apt-get update 刷新存儲庫索引
apt upgrade apt-get upgrade 升級所有可升級的軟件包
apt autoremove apt-get autoremove 自動刪除不需要的包
apt full-upgrade apt-get dist-upgrade 在升級軟件包時自動處理依賴關係
apt search apt-cache search 搜索應用程序
apt show apt-cache show 顯示安裝細節

Ubuntu 軟件管理
apt 特有的命令
apt list 列出包含條件的包(已安裝,可升級等)
apt edit-sources 編輯源列表
APT包索引來自/etc/apt/sources.list文件和/etc/apt/sources.list.d目錄中定義的存儲庫的可用包的數據庫。要使用存儲庫中所做的最新更改來更新本地程序包索引
apt命令操作(如安裝和刪除軟件包)記錄在/var/log/dpkg.log日誌文件中

Ubuntu 軟件管理
apt示例:
安裝包:
apt install tree zip
刪除包:
apt remove tree zip
說明:apt remove中添加--purge選項會刪除包配置文件,謹慎使用
更新包索引:
apt update
升級包:要升級系統,請首先更新軟件包索引,再升級
apt upgrade

管理分區
列出塊設備
•lsblk
創建分區使用:
•fdisk 創建MBR分區
•gdisk 創建GPT分區
•parted 高級分區操作
重新設置內存中的內核分區表版本
•partprobe

parted命令
parted的操作都是實時生效的,小心使用
用法:parted [選項]... [設備 [命令 [參數]...]...]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默認M)
parted /dev/sdb rm 1
parted –l 列出分區信息

分區工具fdisk和gdisk

gdisk /dev/sdb 類fdisk 的GPT分區工具
fdisk -l [-u] [device...] 查看分區
fdisk /dev/sdb 管理分區
子命令:
p 分區列表
t 更改分區類型
n 創建新分區
d 刪除分區
v 校驗分區
u 轉換單位
w 保存並退出
q 不保存並退出
分區工具fdisk和gdisk

同步分區表
查看內核是否已經識別新的分區
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]

創建文件系統
mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL' 設定卷標

創建ext文件系統
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
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

使用光盤
在圖形環境下自動啓動掛載/run/media/<user>/<label>
否則就必須被手工掛載
mount /dev/cdrom /mnt/
操作光盤:
eject 彈出光盤
eject -t 彈入光盤
創建ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc
刻錄光盤
wodim –v –eject centos.iso

常見工具
文件系統空間佔用等信息的查看工具
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

工具dd
conv=conversion[,conversion...] 用指定的參數轉換文件
轉換參數:
ascii 轉換 EBCDIC 爲 ASCII
ebcdic 轉換 ASCII 爲 EBCDIC
lcase 把大寫字符轉換爲小寫字符
ucase 把小寫字符轉換爲大寫字符
nocreat 不創建輸出文件
noerror 出錯時不停止
notrunc 不截短輸出文件
sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
fdatasync 寫完成前,物理寫入輸出文件

工具dd
備份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
拷貝內存資料到硬盤
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將無法掛載,創建和拷貝操作無法執行

工具dd
測試硬盤寫速度
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 PhysicalDevicePath [PhysicalDevicePath...]
管理卷組
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

跨主機遷移卷組
源計算機上
1 在舊系統中,umount所有卷組上的邏輯卷
2 禁用卷組
vgchange –a n vg0
lvdisplay
3 導出卷組
vgexport vg0
pvscan
vgdisplay
拆下舊硬盤
在目標計算機上
4 在新系統中安裝舊硬盤,並導入卷組:vgimport vg0
5 vgchange –ay vg0 啓用
6 mount所有卷組上的邏輯卷

創建邏輯卷示例
創建物理卷
pvcreate /dev/sda3
爲卷組分配物理卷
vgcreate vg0 /dev/sda3
從卷組創建邏輯卷
lvcreate -L 256M -n data vg0
mkfs.xfs -j /dev/vg0/data
掛載
mount /dev/vg0/data /mnt/data

使用LVM快照
爲現有邏輯卷創建快照
lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
掛載快照
mkdir -p /mnt/snap
mount -o ro /dev/vg0/data-snapshot /mnt/snap
恢復快照
umount /dev/vg0/data-snapshot
umount /dev/vg0/data
lvconvert --merge /dev/vg0/data-snapshot
刪除快照
umount /mnt/databackup
lvremove /dev/vg0/databackup

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章