Linux系統管理java
1.存儲管理node
傳統的磁盤分區shell
RAID技術,軟RAID的實現windows
LVMbash
文件系統管理網絡
ext,xfs,btrfs(瞭解)app
2.程序包管理異步
rpm、yum、dnfasync
3.sed、gawk分佈式
4.進程管理
5.網絡管理
網絡基礎知識(Cisco CCNA+CCNP)
網絡屬性管理
網絡參數監測
6.Linux內核管理
內核編譯和安裝
內核的裁剪
定製內核
7.Linux系統啓動流程
CentOS五、六、7
8.系統安裝
kickstart、dhcp、pxe
9.shell腳本的完善
Linux存儲管理
磁盤的接口類型:
IDE:並口,來源於ATA,133Mbps
SCSI:並口,
UltraSCSI320:320Mbps
UltraSCSI640:640Mbps
窄帶:7 14
寬帶:15 30
SATA:Serial ATA,串口
SATA1 2 3 6Gbps
SAS:串口
6Gbps
USB:
1.0 1.1 2.0 3.0:480Mbps 3.1:10Gbps
雙通道:160MBps
IOPS:每秒IO次數
IDE:機械硬盤,50IOPS
SCSI:機械硬盤,100-200IOPS
固態硬盤,400左右
SATA:機械硬盤:100左右
固態硬盤,400
SAS:機械硬盤,200左右
固態硬盤,800左右
PCI-E固態硬盤:100000+ ES3000 DEC
IDE:主板上兩個接口,4塊IDE硬盤
SATA:4-6接口,4-6塊硬盤
SCSI:7 15
SAS:16384塊硬盤
寫一個腳本,向每一個默認shell爲bash的用戶問好,如:Hi root
#!/bin/bash
#
for I in $(grep "bash$" /etc/passwd | cut -d: -f1) ; do
echo "Hi $I"
done
回顧:
while until select case
break continue
function
Linux系統管理
存儲管理
機械硬盤:
track:磁道,
sector:扇區,512Bytes,如今所說的扇區,其實是平均值;
cylinder:柱面,從磁道向全部盤片作投影
partition:分區,分區就是基於柱面來劃分的存儲空間
head:磁頭,每一個磁盤表面都有一個磁頭;
設備文件:/dev
設備文件是關聯到硬件設備的驅動程序和設備的訪問入口;
設備號:
major:主設備號,區分設備的類型,用於標明設備所需的驅動程序;
minor:次設備號,區分同種類型下的不一樣設備,是特定設備的訪問入口;
mknod命令:
mknod - make block or character special files
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
設備類型:
塊設備:用於隨機訪問的設備,數據存儲和交換的單位是塊;
字符設備:用於線性訪問的設備,數據的交換單位通常是字符;
設備文件名:IANA-->ICANN
/dev/
IDE:hd[a-d]
SCSI/SATA/SAS/USB:sd[a-z]
RHEL六、CentOS6開始:
全部的接口類型的硬盤設備統一命名爲sd[a-z]
設備引用方式:
設備文件名
卷標(Volume Lable)
link
UUID:全局惟一標識符,128bit
如何使用一個新的硬盤設備?
分區
建立文件系統(格式化)
掛載分區
爲什麼分區?
1.優化I/O性能
2.實現磁盤空間的配額限制
3.進行高速修復
4.隔離系統文件和其餘程序文件
5.安裝多個操做系統
如何分區?
MBR:硬盤空間小於2TB
MBR:Master(Main) Boot Record, 主引導記錄,起源於1982年,
0磁道0扇區:512Byte
446Bytes:boot loader,引導加載程序,GRUB
64Bytes:partition table,分區表,每16Bytes代表一個分區的內容;所以一共有四個主分區;
注意:
1.主分區+擴展分區,最多能夠有4個,其分區表位的編號依次爲:1,2,3,4
2.邏輯分區的編號從5開始,無論前面的四個數字編號是否被佔用;
2Bytes:結束標記,55AA
GPT:硬盤空間大於2TB
GUID Partition Table,GUID分區表,支持128個分區
UEFI(統一擴展固件接口)的硬件能夠支持GPT Boot Legacy
一般使用的分區工具:
fdisk:
用於建立和管理MBR分區,對於一塊硬盤,最多隻能管理15個分區;
gdisk:GNU disk
用於建立和管理GPT分區,
若是使用fdisk或gdisk命令對於已經有分區並掛載的磁盤的剩餘空間進行再次分區,分區的信息即使是保存了,也不會被內核從新讀取;若是要讓內核識別此類分區:
1.重啓計算機;
2.partprobe命令或者partx命令,強制內核重讀分區表;
CentOS5/7:partprobe -a [device] 若是省略了設備名,則表示重讀全部磁盤的分區表
CentOS6/7:partx -a [device]
kpartx -af [device]
fdisk分區示例:
fdisk - Partition table manipulator for Linux
fdisk -l [device...]
查看指定磁盤的分區表,若是省略device參數,則顯示全部磁盤設備的分區表;
fdisk device
對於指定設備進行分區管理;
fdisk子命令:
d delete a partition
l list known partition types
m print this menu
n add a new partition
e extended
p primary partition (1-4)
l logical
p print the partition table
q quit without saving changes
t change a partition's system id
w write table to disk and exit
parted:GNU
高級分區工具,實時生效;
parted - a partition manipulation program
parted [options] [device [command [options...]...]]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200
parted /dev/sdb rm 1
~]# echo '- - -' > /sys/class/scsi_host/host2/scan
強制內核識別在開機狀態下插上的SCSI接口的磁盤
寫一個腳本,將一個命令所依賴的共享庫文件複製到/mnt/sysroot/lib64目錄中,若是庫文件已經存在於目標目錄中,就不復制。
#!/bin/bash
#
DEST=/mnt/sysroot/lib64
if [ ! -d $DEST ] ; then
mkdir -p $DEST
fi
until [ "$CMD" == 'quit' ] ; do
read -p "give me a command: " CMD
if which --skip-alias $CMD &> /dev/null ; then
for I in $(ldd $(which --skip-alias $CMD) | grep -o "/[^[:space:]]\+") ; do
SRCLIB=$(basename $I)
if [ ! -e ${DEST}${SRCLIB} ] ; then
cp $I $DEST
fi
done
else
echo "Command not invalid."
fi
done
回顧:
機械式硬盤的基本術語和工做原理
使用新硬盤
分區
建立文件系統——格式化
掛載
分區方法:
fdisk parted
partprobe partx -a device
建立文件系統:
FHS /bin /dev /etc
權限
文件的命名規則
爲何要建立文件系統?
一百萬冊圖書
平面分類管理
想要搜索須要的圖書,須要遍歷;
空間分類管理
門類
幾回有限的但有效的查找便可;
建立文件系統實際上就是給分區進行存儲空間的邏輯編址;
格式化:
低級格式化:
物理層面完成格式化,在磁盤設備出廠時,經過低級格式化來建立磁道;
主要做用:劃分磁道
高級格式化:
分區以後進行,
主要做用:用來建立文件系統,爲分區構建邏輯編址單元,簇,塊
不管是簇仍是塊,都是將一個或多個扇區組織在一塊兒,共同完成數據存儲;
簇:512B 1024 2048 4096 8192 16384 32768 65536
塊:1024 2048 4096
注意:
1.一個塊只能放置一個文件的內容,一個文件能夠佔用多個塊;
2.若是在某個分區中,將建立大量的小文件,把塊劃分的小一些;反之,塊就大些
3.若是分區空間比較大,塊也應該大一些;
在一個分區中建立了文件系統:
首先,會將分區劃分紅大小相等的若干塊;
元數據塊
元數據——inode(index node)
文件的屬性:
文件大小
文件權限
文件全部者
文件時間戳
數據塊指針
存放元數據的固定的存儲空間,稱爲inode;
每一個inode都有其對應的inode編號
數據塊
存放文件中所包含的流式數據
特殊文件:
設備文件:block special 或 character special
僅僅是將元數據中的數據塊指針換成了設備號
符號連接文件:symbolic link
僅僅是將元數據中的數據塊指針換成了另外一個文件的訪問路徑;
這類文件只佔據元數據區域,沒有數據塊佔用;
隨着磁盤空間愈來愈大,劃分的塊的數量也愈來愈多,管理起來很不方便
劃分塊組能夠解決該問題
塊組:
每一個塊組中有獨立的元數據塊和數據塊
存放數據的時候,以塊組內的數據塊優先選擇,若是塊組內的數據塊不夠,能夠經過存儲策略來請多個塊組協同存儲;
超級塊:
主要定義了有多少個塊組,以及每一個塊組的邊界。
爲了防止超級塊發生故障倒置整個文件系統崩潰,對超級塊進行冗餘備份。
日誌塊:
對於數據的寫入操做作記錄的塊;
防止數據不一致;
數據不一致一般都是由不潔關機,不潔斷電致使;
一個完整的文件系統:
超級塊,inode,inode bitmap,block bitmap,data block,journal block
想要查找/var/log/messages文件的內容,是怎樣的過程?
首先查找/目錄inode編號,從元數據區域中找到對應inode,再讀取inode中的數據塊指針,找到存放/目錄內容的數據塊;
而後,在數據塊中查找名稱爲var的文件名,若是有,就定位其inode編號,再到元數據區域中查找對應編號的inode,再根據數據塊指針找到保存var目錄內容的數據塊;
再而後,在該數據塊中查找名稱爲log的文件名,若是有,就定位其inode編號,再到元數據區域中查找對應編號的inode,再根據數據塊指針找到保存log目錄內容的數據塊;
以後,在該數據塊中查找名稱爲messages的文件名,若是有,就定位其inode編號,再到元數據區域總查找對應編號的inode,再根據數據塊指針找到messages文件對銀的數據塊,就能夠讀取數據;
系統調用
Linux支持的文件系統:
位於內核空間中的文件系統驅動
1.內核一部分
2.內核模塊
位於用戶空間中的文件系統管理應用程序
管理命令
Linux本身的文件系統:
ext ext2 ext3 ext4(最大分區50TB,能夠作根分區,能夠作啓動分區)
xfs(企業級64位文件系統,最大分區500TB,能夠作根和啓動分區)
reiserfs(良好的反刪除功能)
btrfs(技術預覽版)
光盤文件系統:iso9660
網絡文件系統:NFS、CIFS
集羣文件系統:gfs二、ocfs2
內核級的分佈式文件系統:ceph
僞文件系統:proc、sysfs、tmpfs、hugepagefs
windows的文件系統:vfat,ntfs
Unix的文件系統:ufs,FFS,JFS,zfs
交換分區文件系統:swap
用戶空間中的分佈式文件系統:mogilefs,moosefs,glusterfs
對於不一樣的發行版的Linux,都有其默認的文件系統選擇:
RHEL、CentOS
5:ext3
6:ext4
7:xfs
文件系統的管理工具:
寫一個腳本,若是發現用戶hacker登陸,則將登陸時間和主機記錄於日誌/var/log/login.log中;
#!/bin/bash
#
if who | grep -q "\<hacker\>" ; then
for I in $(who | grep "\<hacker\>" | cut -d ' ' -f3-5 --output-delimiter=' '); do
echo -n $I >> /var/log/login.log
done
fi
管理文件系統:
建立文件系統:
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs, ...
文件系統檢測和修復工具
fsck
fsck.ext3, fsxk.ext3, fsck.ext4, fsck.xfs, ...
文件系統屬性查看工具
dumpe2fs
文件系統的屬性調整工具
tune2fs
建立文件系統工具:
mkfs命令:
mkfs - build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]
mkfs -t ext2 /dev/sdb1
注意:
1.不要使用磁盤設備名稱和擴展分區設備名稱做爲mkfs命令的參數;
若是使用磁盤設備做爲mkfs的參數,全部的分區都將被刪除
若是使用擴展分區做爲mkfs的參數,全部的邏輯分區都將被刪除
2.可以做爲mkfs命令參數的設備,是主分區設備和邏輯分區設備;
若是隻是計劃建立ext系列文件系統的話,可使用mke2fs命令:
mke2fs:
mke2fs - create an ext2/ext3/ext4 filesystem
經常使用選項:
-b block-size:在建立文件系統時,調整塊大小;
-i bytes-per-inode:指明inode與字節的比率,即:多少個字節能夠建一個inode,默認值爲16384;
-j:建立有日誌功能的文件系統,就是ext3
-N number-of-inodes:直接指明要給此文件系統建立的inode的數量;
-m reserved-blocks-percentage:指定爲超級用戶root預留的磁盤空間的百分比;默認是5;
-t fstype:指定文件系統類型,ext2 ext3 ext4,默認是ext2
-O [^]feature[,...]:關閉或開啓文件系統的特性
-L volume-label:爲文件系統指定卷標
若是隻計劃修改ext系列文件系統的卷標,可使用e2label命令:
e2label:
e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
注意:若是不加捲標信息,表示查看指定設備的卷標;
若是添加了卷標信息, 表示修改指定設備的卷標;
若是想要修改ext系列文件系統的屬性,可使用tune2fs命令:
tune2fs:
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
調整那些在ext2,3,4文件系統上的可修改的參數;
經常使用選項:
-j:將ext2文件系統修改成ext3;
-m reserved-blocks-percentage:修改成超級用戶預留的磁盤空間的百分比;
-o [^]mount-options[,...]:修改文件系統的默認掛載選項;
-r reserved-blocks-count:修改成超級用戶預留的磁盤空間的塊的數量;
-L volume-name:修改文件系統的卷標
-O [^]feature[,...]:修改文件系統的特性,將其關閉或啓用;
-l:顯示超級塊的內容 至關於dumpe2fs -h
文件系統的檢測修改工具:
fsck
-t fstype:指定要檢測的文件系統類型;
-a:無需交互,自動修復全部問題
-r:交互式修復問題
ext系列文件系統專門的檢測修復工具:
e2fsck
-y:在交互過程的全部的問題,都以"yes"回答;
-f:強制檢測修復;即便文件系統處於clean狀態;
blkid:
blkid - command-line utility to locate/print block device attributes
blkid -L label:根據卷標進行查找
blkid -U uuid:根據UUID進行查找
findfs:
findfs - Find a filesystem by label or UUID
findfs LABEL=label
findfs UUID=uuid
建立swap文件系統
前提:分區類型必須是swap類型
修改的方法是:在fdisk交互模式中,使用t命令將指定分區的類型修改成82便可;
mkswap
mkswap - set up a Linux swap area
-L LABEL:設置交互分區的卷標
-f:強制執行
使用文件系統——掛載
FHS
根文件系統以外的其餘文件系統若是想要被訪問;都必須經過某種方式關聯到根文件系統上,具體作法就是把其餘文件系統裝載到根文件系統中的某個目錄之中;這個過程稱爲"掛載";用於關聯其餘文件系統的那個目錄,稱爲掛載點;
掛載點:mount point,也是其餘文件系統的訪問入口;例如:/boot
要求:
1.做爲掛載點的目錄必須事先存在;
2.做爲掛載點的目錄應該是沒有被使用或不能被其餘進程使用的目錄;
3.做爲掛載點的目錄一旦掛載文件系統,其內原有的文件將被隱藏;
完成掛載操做,使用mount命令:
mount
mount - mount a filesystem
mount [-fnrsvw] [-t vfstype] [-o options] device dir
經常使用選項:
-r:readonly,以只讀的方式掛載目標文件系統;光盤
-w:read and write,以讀寫的方式掛載目標文件系統;
-n:默認狀況下,設備掛載或卸載的操做會同步更新到/etc/mtab中,若是在掛載時使用了-n選項,則表示咱們要禁用此特性,即使掛載成功,也不會更新到/etc/mtab中。
-t vsftype:指明要掛載的設備上建立的文件系統類型;若是省略該選項,mount命令會經過blkid來判斷要掛載的目標設備的文件系統類型;
-L LABEL:掛載文件系統時,使用卷標代替設備名稱
-U UUID:掛載文件系統時,使用UUID代替設備名稱
-a:mount -a:按照/etc/fstab文件中填寫的設備進行自動掛載;
-o option:
sync/nosync:同步/異步操做
atime/noatime:文件或目錄被讀取訪問時,是否更新訪問時間戳;
diratime/nodiratime:目錄被讀取訪問時,是否更新訪問時間戳;
ro/rw:是以只讀/讀寫的方式掛載文件系統;
dev/nodev:在此文件系統中是否容許建立設備文件;
exec/noexec:在此文件系統中是否容許運行程序文件;
auto/noauto:是否容許使用mount -a方式掛載/etc/fstab中的文件系統;
user/nouser:是否容許普通用戶掛載此文件系統;
suid/nosuid:是否容許程序文件上的SUID和SGID特殊權限生效;
relatime/norelatime:是否參考inode訪問時間來修改其修改時間和改變時間
remount:不經卸載實現從新掛載,能夠應用新的掛載選項;
acl:可使文件系統支持facl功能;
defaults:默認選項;包括:rw, suid, dev, exec, auto, nouser, async, and relatime
loop:使用環回設備;將鏡像文件掛載到掛載點;
defaults,ro,nosuid
-B, --bind:將某個目錄綁定至另外一個目錄;
mount --bind|-B 源目錄 目標目錄
卸載文件系統:
umount mount_point|device
掛載光盤:
1.保證光盤鏡像文件放入虛擬機光驅
2.保證光驅處於"已鏈接"狀態
3.建立光盤掛載點,mount -r /dev/sr0 mount_point
掛載U盤:
須要事先讓系統識別U盤設備,而後根據設備名進行掛載;/dev/sdc1
掛載交互分區:
swapon, swapoff
swapon, swapoff - enable/disable devices and files for paging and swapping
-a:自動掛載存儲於/etc/fstab文件中的交互分區設備;
df
-h -T -P
free
-k -m -g
/etc/fstab文件的格式:
共6個字段,使用空白字符分隔:
1.要掛載的設備
設備文件名
LABEL
UUID
僞文件系統
2.掛載點
swap設備無需掛載點,指定swap便可;
3.文件系統類型
4.掛載選項:defaults
5.轉儲頻率:
使用dump命令備份分區的頻率
0:表示不備份
1:天天備份一次
2:每隔一天備份一次
6.自檢次序
0:不自檢
1:優先自檢,一般只設置在根文件系統上;
2:次級自檢
...
9:最低優先級自檢
Linux系統中常有的壓縮和解壓縮工具:
壓縮:以時間換空間的一種操做;
壓縮的原理:標記和替換
壓縮比:壓縮以前與壓縮以後的文件的大小的比值;
純文本文件壓縮比較大
視頻、圖像等文件壓縮比小
可以實現壓縮功能的工具:
compress/uncompress:.Z擴展名
gzip/gunzip:.gz擴展名
bzip2/bunzip2:.bz2擴展名
xz/unxz:.xz擴展名,目前壓縮比最高的工具
zip/unzip:.zip擴展名
gzip:
gzip, gunzip, zcat - compress or expand files
-d:解壓縮
-#:以指定的壓縮比進行壓縮,1-9,9爲最高級;默認6
-c:將壓縮結果輸出到標準輸出,不會對原文件進行壓縮;
gzip -c /PATH/TO/FILE > /PATH/TO/COMPRESS_FILE.gz
bzip2:
bzip2, bunzip2 - a block-sorting file compressor, v1.0.4
bzcat - decompresses files to stdout
-d:解壓縮
-#:指定壓縮比進行壓縮,1-9,默認爲6
-k:保留原文件不刪除,建立新的壓縮文件;
xz:
xz, unxz, xzcat - Compress or decompress .xz files
-d:解壓縮
-#:指定壓縮比進行壓縮,1-9,默認爲6
-k:保留原文件不刪除,建立新的壓縮文件;
tar:歸檔程序
tar——tape archive:磁帶檔案
tar [OPTION...] [FILE]...
主選項:
-c:建立檔案文件
-x:釋放檔案文件的內容
-t:查看檔案文件中包含的文件
-u/-r:向檔案文件中添加新的文件
輔助選項:
-f:指定檔案的文件的路徑
-C:在釋放檔案文件中的內容時,指定釋放的路徑;
-z:在建立檔案文件時,調用gzip進行壓縮
-j:在建立檔案文件時,調用bzip2進行壓縮
-J:在建立檔案文件時,調用xz進行壓縮(可能不支持)
--exclude:在釋放檔案文件時,排除某個文件;
-k:在釋放檔案文件時,不會覆蓋同名文件;
cpio
寫一個腳本:給腳本傳遞幾個文件,選擇壓縮方式進行壓縮;
#!/bin/bash
#
read -p "Please input some files:" file
select I in gzip bzip2 xz ; do
case $I in
gzip)
gzip file
;;
bzip2)
bzip2 file
;;
xz)
xz file
;;
*)
echo "Input again some files:"
;;
esac
done
#!/bin/bash
#
filedest=/usr/bin/file
read -p "Please input some files:" file1 file2 file3 file4
select I in gzip bzip2 xz ; do
case $I in
gzip)
tar -czf ${filedest}.tar.gz file1 file2 file3 file4
;;
bzip2)
tar -cjf ${filedest}.tar.bz2 file1 file2 file3 file4
;;
xz)
tar -cJf ${filedest}.tar.xz file1 file2 file3 file4
;;
*)
echo "Input again some files:"
;;
esac
done
/etc/issue /etc/init.d /etc/java /etc/yum
file.tar