一、创建一个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等级 | 最少硬盘 | 最大容错 | 可用容量 | 读取性能 | 写入性能 | 安全性 | 目的 | 应用产业 |
0 | 2 | 0 | n | n | n | 一个硬盘异常,全部硬盘都会异常 | 追求最大容量、速度 | 3D产业实时渲染、视频剪接高速缓存 |
1 | 2 | n-1 | 1 | n | 1 | 最高,一个正常即可 | 追求最大安全性 | 个人、企业备份 |
5 | 3 | 1 | n-1 | n-1 | n-1 | 高 | 追求最大容量、最小预算 | 个人、企业备份 |
10 | 4 | n/2 | n/2 | n | n/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.