一、创建一个10G分区,并格式为ext4文件系统;

(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;

(2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;

[root@localhost shell]# fdisk /dev/sdb 
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xbb124f0f 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):
将使用默认值 20971519
分区 1 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
#创建一个10G分区,并格式为ext4文件系统,block大小为2048, 预留空间百分比为2, 卷标为MYDATA
[root@localhost shell]# mkfs.ext4 -b 2048 -m 2 -L MYDATA /dev/sdb1 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=MYDATA
OS type: Linux
块大小=2048 (log=1)
分块大小=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 5242368 blocks
104847 blocks (2.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=273678336
320 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 
        2048000, 3981312

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   
#添加默认挂载属性包含acl
[root@localhost datamydata]# tune2fs -o acl /dev/sdb1         
tune2fs 1.42.9 (28-Dec-2013)
#挂载时禁止程序自动运行,且不更新文件的访问时间戳
[root@localhost shell]# mount -o noexec,noatime /dev/sdb1 /datamydata/

二、创建一个大小为1G的swap分区,并创建好文件系统,并启用之;

[root@localhost /]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost /]# mkswap /dev/sdb1        #设置交换分区
mkswap: /dev/sdb1: warning: wiping old ext4 signature.
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=e4029ba2-4339-4809-8e3c-ce5206cab430
[root@localhost /]# swapon /dev/sdb1        #激活swap分区
[root@localhost /]# echo "/dev/sdb swap swap defaults 0 0">>/etc/fstab    #开机自动挂载

三、写一个脚本

(1)、获取并列出当前系统上的所有磁盘设备;

(2)、显示每个磁盘设备上每个分区相关的空间使用信息;

[root@localhost shell]# cat disk.sh 
#!/bin/bash
disk=`fdisk -l | grep -o "^磁盘 /dev/sd[a-z]" | awk '{print $2}'`
for i in $disk
do
echo "磁盘设备$i"
        partition=`fdisk -l | egrep -o "^${i}[1-9]"`
        df -h $partition
        echo
done

[root@localhost shell]# ./disk.sh 
磁盘设备/dev/sda
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda1       477M   94M  354M   21% /boot
/dev/sda2        75G  1.6G   69G    3% /
devtmpfs        1.9G     0  1.9G    0% /dev

磁盘设备/dev/sdc
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdc1       9.8G   37M  9.2G    1% /data2
/dev/sdc2       9.8G   37M  9.2G    1% /data3

磁盘设备/dev/sdb
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1       9.8G   37M  9.2G    1% /data1


四、总结RAID的各个级别及其组合方式和性能的不同;

#n 代表硬盘总数
RAID等级最少硬盘最大容错可用容量读取性能写入性能安全性目的应用产业
020nnn一个硬盘异常,全部硬盘都会异常追求最大容量、速度3D产业实时渲染、视频剪接高速缓存
12n-11n1最高,一个正常即可追求最大安全性个人、企业备份
531n-1n-1n-1追求最大容量、最小预算个人、企业备份
104n/2n/2nn/2安全性高综合RAID 0/1优点,理论速度较快大型数据库、服务器


五、创建一个大小为10G的RAID1,要求有一个空闲盘,而且CHUNK大小为128k;

[root@localhost ~]# mdadm -C /dev/md0 -n 2 -l 1 -a yes -c 128 -x 1 /dev/{sdb1,sdc1,sdc2}
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
Continue creating array? 
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@localhost ~]# mdadm -D /dev/md0            #查看raid设备状态
/dev/md0:
        Version : 1.2
  Creation Time : Wed Sep 14 10:39:23 2016
     Raid Level : raid1
     Array Size : 10476544 (9.99 GiB 10.73 GB)
  Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Wed Sep 14 10:40:24 2016
          State : clean, resyncing 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

  Resync Status : 20% complete

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : b7511226:41ef3645:d49c64fa:be413b76
         Events : 3

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1

       2       8       34        -      spare   /dev/sdc2

六、创建一个大小为4G的RAID5设备,chunk大小为256k,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;

[root@localhost ~]# mdadm -C /dev/md0 -n 3 -l 5 -a yes -c 256 /dev/{sdb1,sdc1,sdc2}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@localhost ~]# mdadm -D /dev/md0             #查看raid设备状态
/dev/md0:
        Version : 1.2
  Creation Time : Wed Sep 14 10:47:53 2016
     Raid Level : raid5
     Array Size : 20953088 (19.98 GiB 21.46 GB)
  Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Wed Sep 14 10:54:48 2016
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 256K

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : dafac51f:9a46ad25:e16286d7:1e4c0e54
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       34        2      active sync   /dev/sdc2


七、写一个脚本

(1) 接受一个以上文件路径作为参数;

(2) 显示每个文件拥有的行数;

(3) 总结说明本次共为几个文件统计了其行数;

[root@localhost ~]# cat /shell/line.sh 
#!/bin/bash
if [ $# -eq 0 ];then
        echo "至少需要一个参数"
else
        sum=0
        for i in $@
        do
                if [ -f $i ];then
                        j=`cat $i | wc -l`
                        echo "${i}的行数为${j}"
                        let line=$line+$j
                        ((sum=sum+1))
                else
                        echo "${i}文件不存在"
                fi
        done
        echo "本次一共统计了${sum}个文件共计${line}行"
fi
[root@localhost ~]# ./line.sh  /etc/passwd /etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-ens192 adf
/etc/passwd的行数为41
/etc/sysconfig/network的行数为1
/etc/sysconfig/network-scripts/ifcfg-ens192的行数为19
adf文件不存在
本次一共统计了3个文件共计61行


八、写一个脚本

(1) 传递两个以上字符串当作用户名;

(2) 创建这些用户;且密码同用户名;

(3) 总结说明共创建了几个用户;

[root@localhost shell]# cat useradd.sh 
#!/bin/bash
sum=0
if [ $# -eq 0 ];then
        echo "至少需要一个参数"
else
        for i in $@
        do

                if [ `expr length $i` -gt 2 ];then
                        if
                                id ${i} >/dev/null 2>&1
                        then
                                echo "${i}已存在"
                        else
                                useradd ${i}
                                echo ${i} | passwd --stdin ${i} >/dev/null 2>&1 && echo "${i}创建成功"&&((sum=sum+1))
                        fi
                else
                        echo "用户名$i必须大于两个字符"
                fi
        done
        echo "总共创建了${sum}个用户"
fi

[root@localhost shell]# ./useradd.sh user10 user11 a
user10创建成功
user11创建成功
用户名a必须大于两个字符
总共创建了2个用户


九、写一个脚本,新建20个用户,visitor1-visitor20;计算他们的ID之和;

[root@localhost shell]# cat sum_id.sh 
#!/bin/bash
for i in $(seq 1 20)
do
        if
                id visitor${i} >/dev/null 2>&1
        then
                echo "visitor${i}已存在"
        else
                useradd visitor${i}&& echo "visitor${i}创建成功"
        fi
done
awk -F ":" '/^visitor/{sum+=$3} END{printf("visitor1-visitor20的id之和为%d\n",sum)}' /etc/passwd

[root@localhost shell]# ./sum_id.sh 
visitor1创建成功
visitor2创建成功
visitor3创建成功
visitor4创建成功
visitor5创建成功
visitor6创建成功
visitor7创建成功
visitor8创建成功
visitor9创建成功
visitor10创建成功
visitor11创建成功
visitor12创建成功
visitor13创建成功
visitor14创建成功
visitor15创建成功
visitor16创建成功
visitor17创建成功
visitor18创建成功
visitor19创建成功
visitor20创建成功
visitor1-visitor20的id之和是60410


十、写一脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#号开头的行数之和,以及总的空白行数;

[root@localhost shell]# cat /shell/sum_line.sh 
#!/bin/bash
file=(/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab)
for i in ${file[*]}
do
        a=`grep -c '^#' $i`
        b=`grep -c '^$' $i`
        echo "$i中以#号开头的行数之和位$a"
        let sum+=b
done
echo "三个文件中总的空白行数为$sum"

[root@localhost shell]# ./sum_line.sh 
/etc/rc.d/rc.sysinit中以#号开头的行数之和位44
/etc/rc.d/init.d/functions中以#号开头的行数之和位31
/etc/fstab中以#号开头的行数之和位7
三个文件中总的空白行数为164


十一、写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和;

[root@localhost /]# awk -F ":" 'BEGIN{printf "用户名          uid\n" }/\/bin\/bash/{printf "%-15s %s\n",$1,$3;sum += $3}END{printf("uid总和为%d\n",sum)}' /etc/passwd
用户名          uid
root            0
mageia          1100
openstack       3003
bash            3004
testbash        3005
basher          3006
fedora          3008
user10          3009
user11          3010
visitor1        3011
visitor2        3012
visitor3        3013
visitor4        3014
visitor5        3015
visitor6        3016
visitor7        3017
visitor8        3018
visitor9        3019
visitor10       3020
visitor11       3021
visitor12       3022
visitor13       3023
visitor14       3024
visitor15       3025
visitor16       3026
visitor17       3027
visitor18       3028
visitor19       3029
visitor20       3030
uid总和为82555


十二、写一个脚本,显示当前系统上所有,拥有附加组的用户的用户名;并说明共有多少个此类用户;

[root@localhost shell]# cat group.sh 
#!/bin/bash
user=`awk -F ":" '{print $1}' /etc/passwd`
for i in `awk -F ":" '{print $1}' /etc/passwd`
do
        group=`id $i | awk '{print $3}' | awk -F "," '{print $2}'`
        if [  -n "$group" ];then
                echo $i
        let sum+=1
        fi
done
echo "拥有附加组的用户一共有$sum个"

[root@localhost shell]# ./group.sh 
postfix
slackware
openstack
拥有附加组的用户一共有3个


十三、创建一个由至少两个物理卷组成的大小为20G的卷组;要求,PE大小为8M;而在卷组中创建一个大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录,支持acl;

#创建物理卷(PV)
[root@localhost shell]# pvcreate /dev/sdc1                
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc1.
  Physical volume "/dev/sdc1" successfully created
[root@localhost shell]# pvcreate /dev/sdc2
WARNING: ext4 signature detected on /dev/sdc2 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc2.
  Physical volume "/dev/sdc2" successfully created

[root@localhost shell]# pvdisplay 
  "/dev/sdc1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               v6mW8l-5qss-qEXs-vXRz-3sVq-5GF3-4dKWh5
  
#pvdisplay 查看物理卷信息:   
  "/dev/sdc2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc2
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               CIUTFd-pHZD-GpzZ-LYHr-j0d9-T3S4-75hGzh
  
#创建卷组vgdata  
  [root@localhost shell]# vgcreate -s 8m vgdata /dev/sdc1 /dev/sdc2
  Volume group "vgdata" successfully created
  
#查看卷组
[root@localhost shell]# vgdisplay 
  --- Volume group ---
  VG Name               vgdata
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.98 GiB
  PE Size               8.00 MiB
  Total PE              2558
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2558 / 19.98 GiB
  VG UUID               SnCrN2-HKQh-X8q2-Jsnz-tAZ0-YEqA-7fhDI7

#创建逻辑卷
[root@localhost shell]# lvcreate -n mylv -L 5G vgdata 
  Logical volume "mylv" created.

#查看逻辑卷
[root@localhost shell]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vgdata/mylv
  LV Name                mylv
  VG Name                vgdata
  LV UUID                6MxN7u-Ln6e-eWM8-g7DA-yKdy-lrTb-YnoEoh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-09-14 16:00:12 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             640
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

#格式化为ext4文件系统
[root@localhost shell]# mkfs.ext4 /dev/vgdata/mylv 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

#开机自动挂载至/users目录,支持acl
[root@localhost shell]#  echo "/dev/vgdata/mylv  /users  ext4  defaults,acl 0 0" >> /etc/fstab


十四、新建用户magedu;其家目录为/users/magedu,而后su切换至此用户,复制多个文件至家目录;

[root@localhost shell]# useradd magedu -d /users/magedu
[root@localhost shell]# su magedu
[magedu@localhost shell]$ cd ~
[magedu@localhost ~]$ pwd
/users/magedu
[magedu@localhost ~]$ cp /etc/sysconfig/network-scripts/* ./


十五、扩展mylv1至9G,确保扩展完成后原有数据完全可用;

[root@localhost shell]# lvextend -L +4G /dev/vgdata/mylv 
  Size of logical volume vgdata/mylv changed from 5.00 GiB (640 extents) to 9.00 GiB (1152 extents).
  Logical volume mylv successfully resized.
[root@localhost shell]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vgdata/mylv
  LV Name                mylv
  VG Name                vgdata
  LV UUID                6MxN7u-Ln6e-eWM8-g7DA-yKdy-lrTb-YnoEoh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-09-14 16:00:12 +0800
  LV Status              available
  # open                 0
  LV Size                9.00 GiB
  Current LE             1152
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0


十六、缩减mylv1至7G,确保缩减完成后原有数据完全可用;

[root@localhost shell]# e2fsck -f /dev/vgdata/mylv 
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vgdata/mylv: 11/458752 files (0.0% non-contiguous), 67327/1835008 blocks

[root@localhost shell]#  resize2fs /dev/vgdata/mylv 7G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vgdata/mylv to 1835008 (4k) blocks.
The filesystem on /dev/vgdata/mylv is now 1835008 blocks long.

[root@localhost shell]# lvreduce -L 7G /dev/vgdata/mylv 
  WARNING: Reducing active logical volume to 7.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume vgdata/mylv changed from 9.00 GiB (1152 extents) to 7.00 GiB (896 extents).
  Logical volume mylv successfully resized.

[root@localhost shell]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vgdata/mylv
  LV Name                mylv
  VG Name                vgdata
  LV UUID                6MxN7u-Ln6e-eWM8-g7DA-yKdy-lrTb-YnoEoh
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-09-14 16:00:12 +0800
  LV Status              available
  # open                 0
  LV Size                7.00 GiB
  Current LE             896
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0


十七、对mylv1创建快照,并通过备份数据;要求保留原有的属主属组等信息;

[root@localhost shell]# lvcreate -s -L 1G -n mylv_snap -p r /dev/vgdata/mylv 
  Logical volume "mylv_snap" created.