一、建立一個10G分區,並格式爲ext4文件系統;node
(1) 要求其block大小爲2048, 預留空間百分比爲2, 卷標爲MYDATA, 默認掛載屬性包含acl;shell
答:①首先建立分區,命令以下:(注:僅展現命令,其中一些細節已省略)bash
[root@csd ~]# fdisk /dev/sdc ##選擇要分區的設備 Command (m for help): n ##「n」表示新建一個分區 Command action ##選擇分區的類型,主分區或擴展分區 e extended p primary partition (1-4) e Partition number (1-4): 1 ##選擇編號,範圍1-4 First cylinder (1-2610, default 1): ##起始扇區,可以使用默認值 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 10G ##結束扇區,可以使用容量單位K,M,G Command (m for help): n ##因爲擴展區沒法直接使用,咱們要再新建邏輯扇區 Command action ##選擇分區類型 l logical (5 or over) p primary partition (1-4) l First cylinder (1-10, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-10, default 10): ##選擇大小,默認則分配所有擴展空間 Using default value 10 Command (m for help): w ##保存退出 The partition table has been altered!
如圖所示:
②使用mke2fs將劃分的邏輯分區轉換成ext4格式,且block大小爲2048, 預留空間百分比爲2, 卷標爲MYDATA,命令以下:app
[root@csd ~]# mke2fs -t ext4 -b 2048 -m 2 -L 'MYDATA' /dev/sdc5 ##-t:設定文件格式 -b:指定block塊大小 -m #:爲管理人員預留的空間佔據的百分比,#爲數字,表明百分之多少 -L:設定卷標
如圖所示:ide
③修改其默掛載屬性,可以使用tune2fs實現,命令以下:性能
[root@csd ~]# tune2fs -o acl /dev/sdc5 ##-o選項爲修改默認掛載項 tune2fs 1.41.12 (17-May-2010)
結果以下:測試
(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳;ui
答:掛載使用mount命令來實現,命令以下:this
[root@csd ~]# mount -o nodiratime,noexec -L MYDATA /data/mydata ##"-o options":掛載文件系統的選項;-o後面選項可有多個,用逗號隔開 ##diratime/nodiratime:每一次訪問是否更新目錄文件的訪問時間戳 ##exec/noexec:是否支持將文件系統上的應用程序運行爲進程
結果以下:
spa
二、建立一個大小爲1G的swap分區,並建立好文件系統,並啓用之;
答:首先建立一個1G的的分區,並修改成swap文件系統,以下:
[root@csd ~]# mkswap /dev/sdb5 ##建立swap Setting up swapspace version 1, size = 7964 KiB no label, UUID=b7841e4a-adfc-4b3e-a092-e89b9ac8121e [root@csd ~]# swapon /dev/sdb5 ##啓用swap
結果以下:
三、寫一個腳本
(1)、獲取並列出當前系統上的全部磁盤設備;
(2)、顯示每一個磁盤設備上每一個分區相關的空間使用信息;
答:腳本以下
#!/bin/bash echo "當前系統上的磁盤設備:" fdisk -l | egrep "^Disk[[:space:]]/dev" ##"fdisk -l" 查看當前系統磁盤信息,而後篩選以"Disk /dev"開頭的行 echo "各分區使用狀況:" df -h | grep "^/dev*" ##"df -h"查看當前各分區使用情況,而後篩選以"/dev"開頭的行
結果以下:
四、總結RAID的各個級別及其組合方式和性能的不一樣;
答:
RAID-0:
讀寫性能提高;可用空間:N*min(s1,s2.....);N硬盤個數;min最小的空間
無容錯能力;最少磁盤數:2,2+
RAID-1:
讀性能提高、寫性能略有降低;可用空間:1*min(S1,S2.....);
有冗餘能力,最少磁盤數:2,2+
RAID-5:
讀寫性能提高;可用空間(N-1)*min(s1,s2....);有容錯能力:1塊磁盤
最少磁盤數:3,3+1
RAID-6:
讀寫性能提高;可用空間(N-2)*min(s1,s2....);
有容錯能力:2塊磁盤;最少磁盤數:4,4+
混合型RAID
RAID-10:
讀寫性能提高;可用空間:N*min(s1,s2....)/2
有容錯能力:每組鏡像最多隻能壞一塊;最少磁盤數:4,4+
五、建立一個大小爲10G的RAID1,要求有一個空閒盤,並且CHUNK大小爲128k;
答:RAID1要求最少2塊硬盤,因爲還要一個空閒盤,因此總共使用3塊硬盤建立;首先在3塊硬盤中建立一個10G空間,以/dev/sda爲例:
[root@csd ~]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n ##新建一個分區 Command action e extended p primary partition (1-4) e ##因爲個人硬盤已有三個分區,因此我把剩餘的所有分紅擴展分區 Selected partition 4 First cylinder (1428-3916, default 1428): Using default value 1428 Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): Using default value 3916 Command (m for help): n ##新建一個10G的分區作RAID使用 First cylinder (1428-3916, default 1428): Using default value 1428 Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): +10G Command (m for help): t ##調整分區ID Partition number (1-5): 5 ##新的10G分區爲5,因此選擇5 Hex code (type L to list codes): fd ##調整分區ID爲fd Changed system type of partition 5 to fd (Linux raid autodetect) Command (m for help): p ##查看全部分區狀況 Disk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002784f Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1301 10240000 83 Linux /dev/sda3 1301 1428 1024000 82 Linux swap / Solaris /dev/sda4 1428 3916 19985446 5 Extended /dev/sda5 1428 2733 10482967 fd Linux raid autodetect Command (m for help): wq ##保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: 設備或資源忙. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
分區建立結果以下:
建立RAID0:
[root@csd ~]# mdadm -C /dev/md0 -a yes -n 2 -l 1 -c 128 -x 1 /dev/sda5 /dev/sdb5 /dev/sdc5 ##註釋: ##-C:建立模式 ##-n #:使用#個塊設備來建立此RAID; ##-l #:指明要建立的RAID級別; ##-a {yes|no}:自動建立目標RAID設備的設備文件; ##-c CHUNK_SIZE:指明塊大小; ##-x #:指明空閒盤的個數; mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: /dev/sdc5 appears to contain an ext2fs file system size=80260K mtime=Sun Sep 11 22:12:49 2016 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
結果以下:
六、建立一個大小爲4G的RAID5設備,chunk大小爲256k,格式化ext4文件系統,要求可開機自動掛載至/backup目錄,並且不更新訪問時間戳,且支持acl功能;
答:建立3個2G分區,raid5的可用空間爲(N-1)*min(s1,s2....)
建立raid5:
[root@csd ~]# mdadm -C /dev/md0 -l 5 -a yes --chunk=256 -n 3 /dev/sda5 /dev/sdb5 /dev/sdc5 mdadm: /dev/sdc5 appears to contain an ext2fs file system size=80260K mtime=Sun Sep 11 22:12:49 2016 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
結果以下:
掛載過程:
[root@csd ~]# mke2fs -t ext4 /dev/md0 ##將md0格式化爲ext4
[root@csd ~]# mount /dev/md0 -o auto,noatime,acl /backup ##掛載至/backup
編輯/etc/fstab,開機自動掛載
結果以下:
七、寫一個腳本
(1) 接受一個以上文件路徑做爲參數;
(2) 顯示每一個文件擁有的行數;
(3) 總結說明本次共爲幾個文件統計了其行數;
答:腳本代碼以下:
#!/bin/bash if [ $# -eq 0 ];then ##「$#」傳遞給腳本的參數個數,「if」來判斷路徑不爲空 echo "至少須要一個文件路徑!" exit 1 fi for i in $*;do ##「$*」傳遞給腳本全部參數;(調用時將全部參數當獨立字符串) echo "$i 文件行數爲:$(cat $i | wc -l) 行" ##統計給出的各個文件路徑 done echo "本次統計 $# 個文件"
結果以下:
八、寫一個腳本
(1) 傳遞兩個以上字符串看成用戶名;
(2) 建立這些用戶;且密碼同用戶名;
(3) 總結說明共建立了幾個用戶;
答:腳本代碼以下:
#!/bin/bash for n in $*;do ##使用for循環來判斷每個用戶名是否低於或等於2個字符串 if [ $(echo "$n" | wc -c) -le 3 ];then ##判斷條件 echo "用戶名不得低於2個字符串" exit 1 elif id $n >> /dev/null;then ##判斷此用戶名是否存在 echo "用戶名$n 已存在" exit 1 else ##若用戶名不存在且是兩個字符串以上,建立用戶名 useradd $n echo "$n" | passwd --stdin $n >> /dev/null ##修改用戶的密碼同用戶名 echo "用戶$n 已添加,密碼同用戶名,請及時修改!" fi done echo "本次添加$# 個用戶" ##統計添加了多少個用戶
結果以下:
用戶名已存在的狀況
用戶名低於2個字符串的狀況
符合全部條件的狀況
九、寫一個腳本,新建20個用戶,visitor1-visitor20;計算他們的ID之和;
答:腳本代碼以下:
#!/bin/bash export sum=0 ##定義一個變量,後期求ID和用 for i in {1..20};do ##循環次數 if [ id visitor$i ] &> /dev/null ;then ##測試要添加的用戶是否已存在,若存在則中斷 echo "用戶visitor$i 已存在" exit 1 else useradd visitor$i >> /dev/null ##添加用戶 echo "用戶visitor$i 已添加" let sum+=$(id -u visitor$i) ##計算ID之和 fi done echo "所添加用戶的UID之和爲:$sum"
結果以下:
十、寫一腳本,分別統計/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#號開頭的行數之和,以及總的空白行數;
答:腳本代碼以下:
#!/bin/bash export sum1=0 ##求以#開頭行數之和用 export sp=0 ##求以空格開頭行數之和用 for i in $#;do ##循環次數 let sum1+=$(cat $* | grep -o "^#.*" | wc -l) ##找出文件中以#開頭的行數並求和 let sp+=$(cat $* | egrep -o "^[[:space:]].*" | wc -l) ##找出文件中以空格開頭的行數並求和 done echo "給出的文檔中以#開頭的行數和爲:$sum1" echo "給出的文檔中以空格開頭的行數和爲:$sp"
結果以下:
給出的文件中以#開頭的行數:
給出的文件中以空格開頭的行數:
十一、寫一個腳本,顯示當前系統上全部默認shell爲bash的用戶的用戶名、UID以及此類全部用戶的UID之和;
答:腳本代碼以下:
#!/bin/bash export sum=0 ##用於求UID之和用 cat /etc/passwd | egrep "bash$" | cut -d: -f1,3,7 ##顯示默認shell爲bash的信息 for i in $(cat /etc/passwd | egrep "bash$" | cut -d: -f3);do ##循環次數 let sum+=$i ##求UID之和 done echo "以上UID之和爲:$sum"
結果以下:
十二、寫一個腳本,顯示當前系統上全部,擁有附加組的用戶的用戶名;並說明共有多少個此類用戶;
答:腳本代碼以下:
#!/bin/bash export sum=0 ##用做計算符合條件用戶名數量 for i in $(cat /etc/passwd | cut -d: -f1);do ##循環次數,循環列表爲全部用戶名 if [ $(groups $i | wc -w) -gt 3 ];then ##對用戶名進行group查看,若是有多餘的附加組,則統計後的單詞數會大於3 echo "$(groups $i)" ##顯示出擁有附加組的用戶名 let sum+=1 ##累計計算次數 fi done echo "此類用戶共有$sum 個"
結果以下:
1三、建立一個由至少兩個物理卷組成的大小爲20G的卷組;要求,PE大小爲8M;而在卷組中建立一個大小爲5G的邏輯卷mylv1,格式化爲ext4文件系統,開機自動掛載至/users目錄,支持acl;
答:建立2個10G分區,修改格式爲8e(以/dev/sdb爲例)
[root@csd ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): 8e Changed system type of partition 5 to 8e (Linux LVM) Command (m for help): p Disk /dev/sda: 32.2 GB, 32212254720 bytes 255 heads, 63 sectors/track, 3916 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002784f Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1301 10240000 83 Linux /dev/sda3 1301 1428 1024000 82 Linux swap / Solaris /dev/sda4 1428 3916 19985446 5 Extended /dev/sda5 1428 2733 10482967 8e Linux LVM Command (m for help): wq The partition table has been altered!
建立PV:
建立GV:
[root@csd ~]# vgcreate -s 8m myvg /dev/sda5 /dev/sdb5 ##"-s"選項爲定義PE大小 Volume group "myvg" successfully created
建立LV:
[root@csd ~]# lvcreate -L 5G -n mylv1 myvg Logical volume "mylv1" created
格式化mylv1:
掛載至/users,支持acl:
設置開機自動掛載,支持acl:
1四、新建用戶magedu;其家目錄爲/users/magedu,然後su切換至此用戶,複製多個文件至家目錄;
答:
[root@csd /]# useradd -d /users/magedu magedu [magedu@csd etc]$ cp /etc/i* /users/magedu/
1五、擴展mylv1至9G,確保擴展完成後原有數據徹底可用;
答:
[root@csd /]# lvextend -L +4G /dev/myvg/mylv1 ##擴展物理邊界 Extending logical volume mylv1 to 9.00 GiB Logical volume mylv1 successfully resized [root@csd /]# resize2fs /dev/myvg/mylv1 ##擴展邏輯邊界 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/mylv1 to 2359296 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 2359296 blocks long.
結果以下:
擴展後數據狀況:
1六、縮減mylv1至7G,確保縮減完成後原有數據徹底可用;
答:
[root@csd ~]# umount /dev/myvg/mylv1 ##先卸載此卷 [root@csd ~]# e2fsck -f /dev/myvg/mylv1 ##進行文件系統強制檢測 e2fsck 1.41.12 (17-May-2010) 第一步: 檢查inode,塊,和大小 第二步: 檢查目錄結構 第3步: 檢查目錄鏈接性 Pass 4: Checking reference counts 第5步: 檢查簇概要信息 /dev/myvg/mylv1: 25/589824 files (0.0% non-contiguous), 72685/2359296 blocks [root@csd ~]# resize2fs /dev/myvg/mylv1 resize2fs 1.41.12 (17-May-2010) The filesystem is already 2359296 blocks long. Nothing to do! [root@csd ~]# resize2fs /dev/myvg/mylv1 7G ##必須先縮減邏輯邊界 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/myvg/mylv1 to 1835008 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long. [root@csd ~]# lvreduce -L -2G /dev/myvg/mylv1 ##縮減物理邊界 WARNING: Reducing active logical volume to 7.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv1? [y/n]: y Reducing logical volume mylv1 to 7.00 GiB Logical volume mylv1 successfully resized
結果以下:
1七、對mylv1建立快照,並經過備份數據;要求保留原有的屬主屬組等信息;
答:
[root@csd ~]# lvcreate -L 1G -s -n mylv101 /dev/myvg/mylv1 Logical volume "mylv101" created
結果以下: