1. 程式人生 > >馬哥教育M28第十三天到第十五天學習總結

馬哥教育M28第十三天到第十五天學習總結

cache hdp centos time 利用 mask nosuid 括號 通過

馬哥第十三天、

<font size=4>1.lftp安裝:直接在Linux上登錄遠程服務器下載ftp上的文件,查詢lftp使用方式
lftp 用戶名:密碼@ftp地址:傳送端口(默認21)
也可以先不帶用戶名登錄,然後在接口界面下用login命令來用指定賬號登錄,密碼不顯示

     查看文件與改變目錄
     ls     !ls (凡是加!,指的是操作本地計算機環境)
     cd 對應ftp目錄
     下載
     get當然是可以的,還可以:
     mget -c *.pdf    #把所有的pdf文件以允許斷點續傳的方式下載
     mirror  aaa/     #將aaa目錄整個的下載下來,子目錄也會自動復制
     pget -c -n 10 file.dat   #以最多10個線程以允許斷點續傳的方式下載file.dat,可以通過設置 pget:default-n的值而使用默認值上傳
     同樣的put、mput都是對文件的操作,和下載類似.
     mirror -R 本地目錄名
     將本地目錄以叠代(包括子目錄)的方式反向上傳到ftp  site
     模式設置
     set ftp:charset  gbk  遠程ftp site用gbk編碼,對應的要設置為uft8,只要替換為gbk為utf8即可
     set file:charset utf8 本地的charset設定為utf8,如果你是gbk,相應改掉
     set ftp:passive-mode 1
     使用被動模式登錄,有些site要求必須用被動模式或者主動模式才可以登錄,這個開關就是設置這個的,0代表不用被動模式
     書簽
     其實命令行也可以有書簽,在lftp終端提示符下:
     bookmark add ustc   #就可以把當前正在瀏覽的ftp site用ustc作為標簽儲存起來。以後在shell終端下,直接lftp ustc就可以自動填好用戶名和密碼,進入對應的目錄了。
     bookmark edit
     會調用編輯器手動修改書簽。當然,也可以看到,這個書簽其實就是個簡單的文本文件,用戶名、密碼都可以看到
     配置文件
     vim /etc/lftp.conf
     一般,會添加這幾行:
     set ftp:charset gbk
     set file:charset utf8
     set pget:default-n 5
     這樣,就不用每次進入都要打命令了,其他的set可以自己tab然後help來看。

2.b編譯安裝過程中出現任何需要另外安裝的,結合yum search 包名 通過模糊搜索得到相應的軟件包然後選擇合適的進行安裝

3.dd if of : 可以使用dd克隆復制命令對硬盤分區或者文件系統進行重命名</font>

馬哥第十四天、

<font size=4>1.硬盤最外圍磁道0磁道的第一個分區是MBR 512字節, 446B->boot loader , 64B分區表 , 2B校驗(55 AA)
2.mknod: linux下創建塊設備或者字符設備的命令 make Node
block c設備
mknod /app/magedisk b 8 5

mknod /app/dvd b 11 0
mknod /app/tty1 c 4 1
mknod其中的一種重要用途是:為Linux系統中的硬盤創建一個新的設備名(實際上就是創建新的文件設備b,主設備號、次設備號與硬盤對應一致,可以形象的看作是為設備創建了一個鏈接;同理,在對硬盤進行了分區之後,對應的應該是為分區創建新的文件設備名->創建時需要對應分區的主要設備號、次要設備號即可!);mknod不能跟隨硬盤同步分區(只是認為的根據實際設備號進行創建設備文件)

CHS 磁盤三圍
cylinder 柱面
head 磁頭
sector 扇區

track 磁道
512sector數/ track head * track數/盤面

B KB MB GB TB PB EB ZB YB BB NB DB

echo ‘- - -‘ > /sys/class/scsi_host/host0/scan 註意:虛擬機或者說是虛擬化下對新增硬盤快速生效方式是給系統虛擬硬盤所在host下的面板傳遞信號- - - ,以便引導系統去重讀分區信息;但是在生產環境下基本不太可能,用的都是直接物理機
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt #mount掛載的只能說是文件系統,只是在分區後分區設備默認被創建了同命名的文件系統,掛載後,掛載點裏面的所有內容暫時被隱藏,卸載才能看到
cp /etc/fstab /mnt/
umount /mnt/
hexdump -C -n 512 /dev/sdb -v #查看磁盤前512字節信息

skip表示跳過if(源)設備多少字節
seek表示跳過of設備多少字節
dd if=/dev/sdb of=/app/mbr.bak bs=1 count=512
dd if=/dev/sdb of=/app/mbrtable.bak bs=1 count=64 skip=446
partx -d /dev/sdb --nr 1
dd if=/app/mbrtable.bak of=/dev/sdb bs =1 count=64 seek=446
partprobe /dev/sdb
mount /dev/sdb1 /mnt/

實驗:破壞sdb的55AA,然後通過sda恢復 千萬註意:dd是具有極大破懷興的,通常僅作測試的時候使用,正常情況下不需使用dd命令!!
dd if=/dev/zero of=/dev/sdb bs=1 count=2 seek=510
dd if=/dev/zero of=/dev/sdb bs =1 count=2 skip=510 seek=510

磁盤設備文件命名規則:
CentOS5及其之前:SCSI, SATA, SAS, USB: /dev/sd
IDE: /dev/hd

CentOS6及其之後:SCSI, SATA, SAS, IDE ,USB:/dev/sd
KVM: /dev/vd

Xen: /dev/xvd*

3.測試磁盤I/O讀寫速度:
思考問題1.通過學習了硬盤等相關硬件知識後,應該學會思考:利用什麽去測試硬盤的讀寫速率,進一步聯想去挑選什麽硬盤,如何在工作中測試並使用滿足要求的性能高的I/O磁盤

用法:
1.測試IO讀:
hdparm -t --direct /dev/sda3 #CentOS7中需要使用root用戶身份手動安裝hdparm
2.測試IO寫:
sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1000KB count=20000;sync)"

                        dd bs=1M   count=20000  if=/dev/zero  of=test.dd  conv=fdatasync      #dd命令測試是IO的順序寫和讀方式
        3.查看文件系統塊大小
                            tune2fs -l /dev/sda1 |grep Block
      上面的命令行有些復雜,做下詳細的解釋:
                        (1)sync 命令用來刷新文件系統的緩沖區,執行sync命令實際的作用是把內存中的數據緩沖寫入到磁盤中。先執行下sync,是為了減少對後面測試的影響。也可以使用 echo 3 > /proc/sys/vm/drop_caches來清除緩存。
                        (2)time 命令用來測試命令的執行時間,shell內建還有一個time命令,我們這裏使用全路徑來指定使用的是非內建命令。
                        -p 選項設置時間的輸出格式為POSIX缺省時間格式,單位是秒,在後面的測試小節可以看到time -p  的輸出形式
                        (3)bash 命令 -c 選項的作用是將後面的字符串參數當做bash腳本來執行,看起來有些畫蛇添足,好像直接執行也是可以的。其實不然,因為後面字符串包含了兩條命令行,而time命令需要統計這兩條命令行的執行時間。
                        (4)小括號的意思是另起一個子進程來執行括號中的腳本,dd這條命令行這裏就不講了,重點是sync命令,因為當dd退出時,這條命令行提交的大部分內容都在內存緩沖區(寫緩存),甚至如果機器的內存相比於 你提交的數據要大得多,那可能數據都在內存中,而再執行sync才能將內存中的數據寫入到磁盤中,否則就成了測試內存的寫速度,那顯然是不對的。

4.針對CentOS6系列的分區必須註意硬盤大小,如果分區大於2T,就使用不了MBR分區dos類型,必須使用parted 或gdisk來分區gpt類型(支持64位尋址大於2T)
5.註意:使用卷標對設備進行掛載或者開機自動掛載 -> /etc/fstab
LABLE=DEVICENAME mount LABLE=DEVICENAME /mnt
生產環境,寫入配置文件的時候,UUID進行唯一識別 blkid;
mount UUID=‘‘ /mnt

6.e2fsck -f 針對ext類型的文件系統進行強制修復,可交互
在文件系統因外界壓力不正常卸載或未卸載!

7.快速查看占用某一分區或者文件系統的進程以及詳細信息 lsof
fuser -v /fsname/
fuser -vmk /fsname 遞歸殺死占用掛載點進程(涉及到目錄,必須考慮遞歸問題)

作業:
1.給當前虛擬機增加一個80G大小的硬盤,要求當前生效可以使用fdisk -l 查看到該硬盤,名為/dev/sdb
2.為/dev/sdb創建一個新的設備名為/app/magediska
mknod /app/magediska b 8 16
3.對/app/magediska進行分區,要求如下
a.創建/app/magediska1分區,大小為100M,格式化為ext4文件系統,並掛載到/mnt/diska目錄下
b.將/etc/fstab文件復制到在/mnt/diska上後卸載分區。
c.僅備份/app/magediska分區的分區表至/app/mbr.bak
dd if=/dev/sdb of=/app/mbr.bak bs=1 count=16 skip=446
d.使用dd命令初始化/app/magediska硬盤,使其沒有分區表信息
dd if=/dev/zero of=/dev/sdb bs=1 count=512
e.再使用fdisk命令創建/app/magediska2分區,格式化為ext3文件系統,並掛載到/mnt/diskb目錄下並將/etc/passwd文件復制到該目錄下。
f.利用c步驟的備份還原/app/magediska1分區,確保/app/mageddd if=/dev/sdb of=/app/mbr.bak bs=1 count=16 skip=446iska2分區不受影響。最後再次將/app/magediska1掛載到/mnt/diska下,確保其中的fstab文件依然可用。
dd if=/app/mbr.bak of=/dev/sdb bs=1 count=16 seek=446

二、
BIOS+MBR BIOS+MBR+GPT
UEFI+GPT
傳統的BIOS啟動由於MBR的限制,默認是無法引導超過2.1TB以上的硬盤的;GPT類型分區超2.1TB;

fdisk parted gdisk
非交互式增加一個1G的分區:
echo -e "n\n\n+1G\nw\n" |fdisk /dev/sda
cat <<EOF | fdisk /dev/sda
n

                +1G
                w
                EOF
            echo  -e "n\n\n\n+1G\n\nw\ny\n"  |gdisk /dev/sdb
            parted  /dev/sdb   primary  1000(sector)   2000

            查看內核是否同步分區表信息的方法:
            lsblk(只限於CentOS6及其以上的系統)
            cat /proc/partitions
            ls  /dev/sdX*

            更新方法如下:
            partprobe /dev/sda  (CentOS6、CentOS7)
            CentOS6只限於對非系統所在硬盤使用
            partx -a  /dev/sda  更新增加的分區
            partx  -d  /dev/sda  --nr 6-7  刪除分區6和7

    postfix(25 smtp) /var/mail  nfs  Sun  Oracle
    dovecot (pop3 imap)
    pop3.qq.com          smtp.qq.com
    Windows  Linux  CIFS  samba

    查看當前操作系統所支持的文件系統
                    cat /proc/filesystems

    journal
                    /var/log    排錯
                    oracel
                                        redo  log    -1000
                    ext3    
                                    inode   bitmap
                                        block    bitmap
                  格式化
                                    mkfs.xfs   /dev/sdb1
                                    mkfs   -t   xfs   /dev/sdb2
                    e2fsck   -f    /dev/sdb1

mount
-t vsftype:指定要掛載的設備上的文件系統類型
-r readonly, 只讀掛載
-w read and write ,讀寫掛載
-n 不更新/etc/mtab, mount 不可見
-a 自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能) #mount -a 自動掛載的只能是/etc/fstab中尚未掛載的設備,已經掛載的不再進行掛載,需要使用remount重新掛載
-L ‘LABLE’ 以卷標指定掛載設備
-U ‘UUID‘ 以UUID指定要掛載的設備
-B --bind 綁定目錄到另一個目錄上
查看內核追蹤到的已經掛載的所有設備
cat /proc/mounts
掛載選項
-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 /dev/sdb1
lsof /mount/ 查看訪問該掛載點目錄的所有進程信息
fuser -vmk /mount 強制結束所有訪問該掛載點及其子目錄的進程

作業:
1.當/etc/fstab中uuid錯誤時且末位為非0時,系統無法正常啟動的問題解決
1.因為硬盤掛載檢測是開機啟動初期根目錄先以只讀的方式掛載,當緊接著一位分區設備末位非0強制檢測,導致檢測失敗不通過,在根目錄及其下所有目錄和文件只讀情況下,應該先 mount -o remount,rw / ; 然後修改/etc/fstab文件中錯誤的uuid或者將末位改為0重新啟動掛載,然後跳過再正確修改!
2.小總結:使用uuid掛載時,結束退出前最好將以掛載的文件系統卸載,再正確關機

2.創建一個2G的文件系統,塊大小為2048byte, 預留1%可用空間,文件系統類型ext4,卷標為TEST,要求此分區開機後自動掛載至/test目錄,且默認有acl掛載選項.
                            fdisk  |gdisk(|partx) /dev/sdb  .. 分區2G
                            1.mke2fs  -L TEST  -b 2048  -t ext4  -m 1 /dev/sdb3
                            2.tune2fs -o acl test    ;   blkid   /dev/sdb3
                            3.vim /etc/fstab
                                UUID=...             /app/test       ext4       default        00

swap的擴展
整塊硬盤的swap
mkswap /dev/sdX
swapon /dev/sdX
基於分區的swap
fdisk|gdisk|parted 對sdX進行分區,註意轉換分區類型為82
mkswap /dev/sdXn
swapon /dev/sdXn
基於文件的swap
dd if=/dev/zero of=/path/swap.img bs=1M count=xxx
mkswap /path/swap.img
swapon /path/swap.img
swapon -s 查看所有的swap信息
swapon -a 加載/etc/fstab當中所有尚未加載的swap設備
-p 指定swap的優先級,數字越大越優先
swapoff 關閉指定的swap設備
-a 關閉所有的swap設備
在/etc/fstab中書寫的方式如下:
UUID=c4983177-34ae-4b99-bd81-42011b536088 swap swap defaults,pri=1 00
UUID=73fe49f8-b44a-42fa-bcbd-1639058f5326 swap swap defaults,pri=2 0 0

在Linux下掛載ntfs格式的U盤
安裝 ntfs-3g包
配置epel倉庫
[fedora-epel]
name=epel
baseurl=http://172.18.0.1/fedora-epel/7/x86_64/
gpgcheck=0
mount /dev/sdb4 /mnt

光盤掛載
                mount  /dev/sr0   /media
                mount   /dev/cdrom   /media

                free
                du -sh  直接統計整個目錄及其內部使用大小
                常見的df和du不一致情況就是文件刪除的問題。當一個文件被刪除後,在文件系統 目錄中已經不可見了,所以du就不會再統計它了。然而如果此時還有運行的進程持有這個已經被刪除了的文件的句柄,那麽這個文件就不會真正在磁盤中被刪除, 分區超級塊中的信息也就不會更改。這樣df仍舊會統計這個被刪除了的文件。

quota
ext文件系統的quota
1.mount -o usrquota,grpquota /dev/sdXn /path
2.quotacheck -cugm /path
3.quotaon /path
4.setquota username 100M 200M 80 100 /data

edquota -u username 交互式
edquota -p username1 username2
將username1的quota策略復制給username2

練習:
為liubei guanyu zhangfei caocao四個用戶配置一個共享目錄,要求如下:
1.共享目錄的大小為3GB,要求為ext4類型的文件系統,掛載到/data目錄。
fdisk /dev/sda
partx -a /dev/sda
mkdir /data
mke2fs -t ext4 /dev/sdaX
mount /dev/sdaX /data

2.設置liubei guanyu zhangfei三個用戶可以在共享目錄下創建以及刪除文件
for n in liubei guanyu zhangfei caocao ;do useradd $n ;done
groupadd shuguo
chgrp shuguo /data
chmod 775 /data
for m in liubei guanyu zhangfei ;do usermod -aG shuguo $m;done

3.劉關張創建的文件,彼此之間可以讀寫,caocao及其他用戶僅能讀, caocao在該目錄下也能創建文件,僅其自己可以讀寫,其他人無權限。
其他人對該目錄,僅可訪問
chmod g+s /data
umount /data; mount /dev/sdaX /data
setfacl -m u:caocao:rwx /data
vim ~caocao/.bashrc
umask 026

4.guanyu zhangfei僅能在該目錄下創建100M的文件,caocao最多創建10個文件。
vim /etc/fstab
/dev/sdaX /data ext4 defaults,usrquota,grpquota 0 0
umount /data; mount -a
setquota guanyu 0 100M 0 0 /data/
edquota -p guanyu zhangfei
setquota caocao 0 0 0 10 /data/

5.guanyu zhangfei所創建的文件僅自己可以刪除,liubei可以刪除所有人的文件
chown liubei /data/
chmod o+t /data/

for n in $(seq 1 10);do
echo $n
done

n=1
while [ $n -le 10];do
echo $n
n=$[$n+1]
sleep 0.5s
done

n=1
until [ $n -gt 10 ];do
echo $n
n=$[$n+1]
sleep 0.5s
done

n=1
while true;do
echo $n
n=$[$n+1]
sleep 0.5s
if [ $n -eq 11 ];then
break
fi
done</font>

馬哥教育M28第十三天到第十五天學習總結