Rpm、yum;磁盤儲存與文件系統;網絡基礎

rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
包之間:可能存在依賴關係,甚至循環依賴
解決依賴包管理工具:
yum:rpm包管理器的前端工具
dnf: Fedora 18+ rpm包管理器前端管理工具
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 放庫的調用文件
緩存文件:/etc/ld.so.cache
Rpm包安裝
[install-options]
--test: 測試安裝,但不真正執行安裝,即dry run模式
--nodeps:忽略依賴關係
--replacepkgs | replacefiles
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本
%pre: 安裝前腳本 --nopre
%post: : 安裝後腳本 --nopost
%preun: 卸載前腳本 --nopreun
%postun: 卸載後腳本 --nopostun
Rpm包升級
upgrade:安裝有舊版程序包,則「升級」
若是不存在舊版程序包,則「安裝」
freshen:安裝有舊版程序包,則「升級」
若是不存在舊版程序包,則不執行升級操做
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級
--force: 強制安裝
Rpm包查詢
-a: 全部包 -f: 查看指定的文件由哪一個程序包安裝生成
-p rpmfile:針對還沒有安裝的程序包文件作查詢操做
-c: 查詢程序的配置文件 -d: 查詢程序的文檔
-i: information -l: 查看指定的程序包安裝後生成的全部文件
--scripts:程序包自帶的腳本 -e:卸載 包名
-R: 查詢指定的程序包所依賴的CAPABILITY
數據庫重建:
/var/lib/rpm
rpm {--initdb|--rebuilddb}
initdb: 初始化
若是事先不存在數據庫,則新建之
不然,不執行任何操做
rebuilddb:重建已安裝的包頭的數據庫索引目錄
yum
Yum repository: yum repo,存儲了衆多rpm包,以及包的相關的元數據
文件(放置於特定目錄repodata下) repodata/ 此目錄在哪一個文件夾下,倉庫的路徑就在哪裏
文件服務器:http:// https:// ftp:// file://
Yum配置文件
倉庫指向的定義:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0} 設置爲0 表示不檢查
gpgkey=URL
yum命令的用法:
yum [options] [command] [package ...]
顯示倉庫列表:
yum repolist [all|enabled|disabled]
安裝程序包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (從新安裝)
升級程序包: yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降級)
檢查可用升級: yum check-update
卸載程序包: yum remove | erase package1 [package2] [...]
清理本地緩存:
清除/var/cache/yum/$basearch/$releasever緩存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:yum makecache
系統光盤yum倉庫
系統安裝光盤做爲本地yum倉庫:
(1) 掛載光盤至某目錄,例如/mnt/cdrom
mount /dev/cdrom /mnt/cdrom
(2) 建立配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
兩種分區方式:MBR,GPT fdisk 建立MBR分區
• gdisk 建立GPT分區 • parted 高級分區操做
從新設置內存中的內核分區表版本 • partprobe
gdisk /dev/sdb 類fdisk 的GPT分區工具
fdisk -l [-u] [device...] 查看分區
fdisk /dev/sdb 管理分區
子命令: p 分區列表 t 更改分區類型
n 建立新分區 d 刪除分區 v 校驗分區 u 轉換單位
w 保存並退出 q 不保存並退出
建立文件系統
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 ex
findfs :查找分區
掛載mount
掛載:將額外文件系統與根文件系統某現存的目錄創建起關聯關係,進而使得此
目錄作爲其它文件訪問入口的行爲
卸載:爲解除此關聯關係的過程
把設備關聯掛載點:mount Point
mount
卸載時:可以使用設備,也可使用掛載點
umount 設備名|掛載點
掛載點下原有文件在掛載完成後會被臨時隱藏
掛載點目錄通常爲空
卸載命令
查看掛載狀況
findmnt MOUNT_POINT|device
查看正在訪問指定文件系統的進程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
終止全部在正訪問指定的文件系統的進程
fuser -km MOUNT_POINT
卸載
umount DEVICE
umount MOUNT_POINT
使用光盤: 建立ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc
刻錄光盤
wodim –v –eject centos.iso
手動掛載• mount /dev/sdb1 /m
掛載工具: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
備份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文件壓縮的備份文件恢復到指定盤
爲現有邏輯卷建立快照
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
建立邏輯卷示例
建立物理卷
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
網絡基礎部分
網絡:一些網絡設備,利用各類媒介連接起來,按照通信規則,造成的通信的集合。
路由器:(rooter)
交換機:swith
單工:單向 單雙工:輪流雙向 全雙工:同時雙向
TCP/IP 堆棧(來源於以太網) OSI參考模型
(傳輸控制協議/因特網互聯協議:是集合,不是2個協議)
應用層 message 應用層 http協議工做在此
傳輸層 段 傳輸層 UDP TCP工做在此
Internet層 包 網絡層 路由器在此 選擇路徑 IP地址是邏輯地址 做用在此
數據鏈路層 幀 數據鏈路層 以太網卡在物理地址
物理層 位 物理層 Hub在此
單播:一個電腦發一個數據,目標地址是一個主機,目標地址就是單播地址
廣播:目標地址是全部主機,出現48個1,廣播地址出現於目標地址,廣播越多,性能越差
多播:目標地址是部分主機
衝突域:一個設備向外發數據,另外一個也在發,兩個相遇就衝突,連接的主機多衝突域多,性能越差
TIME_WAIT:最糾結的狀態來了。從狀態圖上能夠看出,有三個狀態能夠轉化成它:
a:由FIN_WAIT_2進入此狀態:在雙方不一樣時發起FIN的狀況下,主動關閉的一方在完成自身發起的關閉請求後,接收到被動關閉一方的FIN後進入的狀態。
b:由CLOSING狀態進入:雙方同時發起關閉,都作了發起FIN的請求,同時接收到了FIN並作了ACK的狀況下,有CLOSING狀態進入。
c:由FIN_WAIT_1狀態進入:同時接收到FIN(對方發起),ACK(自己發起的FIN迴應),與b的區別在於自己發起的FIN迴應的ACK先於對方的FIN請求到達,而b是FIN先到達。這種狀況機率最小。
關閉的4次鏈接最難理解的狀態是TIME_WAIT,存在TIME_WAIT的2個理由:
1.可靠地實現TCP全雙工鏈接的終止。
2.容許老的重複分節在網絡中消逝。
問題:TCP創建鏈接時,爲何是 三次握手呢?
client發出的第一個鏈接請求報文段並無丟失,而是在某個網絡結點長時間的滯留了,以至延誤到鏈接釋放之後的某個時間纔到達server。原本這是一個早已失效的報文段。但server收到此失效的鏈接請求報文段後,就誤認爲是client再次發出的一個新的鏈接請求。因而就向client發出確認報文段,贊成創建鏈接。假設不採用「三次握手」,那麼只要server發出確認,新的鏈接就創建了。因爲如今client並無發出創建鏈接的請求,所以不會理睬server的確認,也不會向server發送數據。但server卻覺得新的運輸鏈接已經創建,並一直等待client發來數據。這樣,server的不少資源就白白浪費掉了。採用「三次握手」的辦法能夠防止上述現象發生。例如剛纔那種狀況,client不會向server的確認發出確認。server因爲收不到確認,就知道client並無要求創建鏈接。」在google上搜到的網友的解釋:
這個問題的本質是, 信道不可靠, 可是通訊雙發須要就某個問題達成一致. 而要解決這個問題, 不管你在消息中包含什麼信息, 三次通訊是理論上的最小值. 因此三次握手不是TCP自己的要求, 而是爲了知足"在不可靠信道上可靠地傳輸信息"這一需求所致使的. 請注意這裏的本質需求,信道不可靠, 數據傳輸要可靠. 三次達到了, 那後面你想接着握手也好, 發數據也好, 跟進行可靠信息傳輸的需求就不要緊了. 所以,若是信道是可靠的, 即不管何時發出消息, 對方必定能收到, 或者你不關心是否要保證對方收到你的消息, 那就能像UDP那樣直接發送消息就能夠了.」
爲何創建鏈接協議是三次握手,而關閉鏈接倒是四次握手呢?
這是由於服務端的LISTEN狀態下的SOCKET當收到SYN報文的建連請求後,它能夠把ACK和SYN(ACK起應答做用,而SYN起同步做用)放在一個報文裏來發送。但關閉鏈接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你全部的數據都所有發送給對方了,因此你可能未必會立刻會關閉SOCKET,也即你可能還須要發送一些數據給對方以後,再發送FIN報文給對方來表示你贊成如今能夠關閉鏈接了,因此它這裏的ACK報文和FIN報文多數狀況下都是分開發送的。
爲何TIME_WAIT狀態還須要等2MSL後才能返回到CLOSED狀態?
這是由於:雖然雙方都贊成關閉鏈接了,並且握手的4個報文也都協調和發送完畢,按理能夠直接回到CLOSED狀態(就比如從SYN_SEND狀態到 ESTABLISH狀態那樣);可是由於咱們必需要假想網絡是不可靠的,你沒法保證你最後發送的ACK報文會必定被對方收到,所以對方處於 LAST_ACK狀態下的SOCKET可能會由於超時未收到ACK報文,而重發FIN報文,因此這個TIME_WAIT狀態的做用就是用來重發可能丟失的 ACK報文。
局域網:基於廣播機制,全域網:基於點對點,前端

相關文章
相關標籤/搜索