1.创建一个10G分区,并格式为ext4文件系统:
(1)要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;
(2)挂载至/data/mydata目录,要求挂载时禁止程序自行运行,且不更新文件的访问时间戳;
fdisk /dev/sdb
partx -a /dev/sdb1
mkfs.ext4 -b 2048 -m 2 -L "MYDATA" /dev/sdb1
vim /etc/fstab
/dev/sdb1 /data/mydata ext4 rw,suid,dev,noexec,auto,nouser,async,noatime 0 0
2.创建一个大小为1G的swap分区,并创建好文件系统,并启用之;
fdisk /dev/sdb
partx -a /dev/sdb2
mkswap -L "myswap" /dev/sdb2
swapon /dev/sdb2
3.写一个脚本
(1)获取并列出当前系统上的所有磁盘设备;
(2)显示每个磁盘设备上每个分区相关的空间使用信息;
#!/bin/bash
#
echo "all disk as follows :"
fdisk -l |egrep '^Disk[[:space:]]+/dev/' |awk '{print $2}' |awk -F: '{print $1}'
echo "————————"
echo "partions space has used:"
for disk in $(fdisk -l |egrep '^Disk[[:space:]]+/dev/' |awk '{print $2}' |awk -F: '{print $1}');do
for part in $(fdisk -l $disk |grep '^/dev/'|awk '{print $1}');do
echo "$part partion used:$(df -h $part| awk '/\/dev\//{print $5}')"
done
done
4.总结RAID的各个级别机器组合方式和性能的不同:
raid0:条带卷;至少2块盘,读、写性能提升,无冗错能力,空间:N*min(S1,S2,…)
raid1:镜像卷;至少2块盘,读性能提升、写性能下降,有冗错能力,空间:1*min(S1,S2,…)
raid4:奇偶校验的独立磁盘结构;存储校验码的硬盘是单独的盘,其余和raid5基本类似
raid5:分布式奇偶校验的独立磁盘结构;至少3块盘,读、写性能提升,有冗余能力,空间:(N-1)*min(S1,S2,…)
raid6:两种存储的奇偶校验码的磁盘结构;至少4块盘,读写性能提升,有容错能力,空间:(N-2)*min(S1,S2,…)
raid10:先做raid1,再做raid0;读写性能提升,至少4块盘,有容错能力,空间:N*min(S1,S2,…)/2
JBOD:将多块磁盘的空间合并一个大的连续空间使用,空间:sum(S1,S2,…)
5.创建一个大小为10G的raid1,要求有一个空闲盘,而且chunk大小为128K;
mdadm -C /dev/md0 -n 2 -x 1 -c 128 -l 1 /dev/sdb3 /dev/sdc1 /dev/sdc2
6.创建一个大小为4G的raid5设备,chunk大小为256K,格式化ext4文件系统,要求可开机自动挂载至/backup目录,而且不更新访问时间戳,且支持acl功能;
mdadm -C /dev/md0 -n 3 -l 5 -c 256 /dev/sdb3 /dev/sdc1 /dev/sdc2
mkfs.ext4 /dev/md0
vim /etc/fstab
/dev/md/localhost.localdomain:0 /backup ext4 rw,acl,noatime 0 0
7.写一个脚本:
(1)接受一个以上文件路径作为参数
(2)显示每个文件拥有的行数
(3)总结说明本次公文几个文件统计了其行数
#!/bin/bash
#
read -p "please input the file path:" -a line
echo "================================="
if [ ${#line[@]} -lt 1 ];then
echo "please input file path like:/path/to/file"
else
for i in $(seq 0 $[${#line[*]}-1]);do
if [ -f ${line[$i]} ];then
echo "${line[$i]} lines is:$(cat ${line[$i]} |wc -l)"
else
echo "please input a file path like:/etc/path/to/file"
exit 1
fi
done
echo "file number:${#line[@]}"
fi
8.写一个脚本:
(1)传递两个以上的字符串当做用户名
(2)创建这些用户名,且密码同用户名
(3)总结说明共创建了几个用户
#!/bin/bash
#
declare -i sum=0
read -p "please more than one strings:" -a user
if [ ${#user[@]} -lt 1 ];then
echo "please input strings like:string1 string1 …"
exit 1
else
for i in $( seq 0 $[${#user[*]}-1]);do
if id ${user[$i]} &>/dev/null ;then
echo "${user[$i]} is exist!please input agin!"
elif [[ ! ${user[$i]} =~ [[:alpha:]]+ ]];then –>想匹配为大小写字母及数字,但是user$此类还是可以添加成功
echo "please input correct string"
else
useradd ${user[$i]}&&echo "${user[$i]}" |passwd –stdin ${user[$i]} &>/dev/null &&echo "${user[$i]} add success"&&let sum++
fi
done
fi
echo "sum of new adduser:$sum"
9.写一个脚本,新建20个用户,visitor1-visitor20,计算他们的ID之和;
#!/bin/bash
#
declare -i sum=0
for i in {1..20};do
useradd visitor${i}&&echo "add success"
let sum+=$(id user1|cut -d" " -f1 |sed -r 's/\(.*\)//g;s/uid=//g')
done
echo "userid sum:$sum"
10.写一个脚本,分别统计/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#开头的行数之和,以及总的空白行数
#!/bin/bash
#
echo "At the beginning of the line # ,rc.sysinit:$(cat /etc/rc.d/rc.sysinit |egrep '^#' |wc -l)"
echo "Blank row ,rc.sysinit:i$(cat /etc/rc.d/rc.sysinit |egrep '^$' |wc -l)"
echo
echo "At the beginning of the line # ,functions:$(cat /etc/rc.d/init.d/functions |egrep '^#' |wc -l)"
echo "Blank row ,functions:i$(cat /etc/rc.d/init.d/functions |egrep '^$' |wc -l)"
echo
echo "At the beginning of the line # ,/etc/fstab:$(cat /etc/fstab |egrep '^#' |wc -l)"
echo "Blank row ,/etc/fstab:i$(cat /etc/fstab |egrep '^$' |wc -l)"
11.写一个脚本,显示当前系统上所有默认shell为bash的用户的用户名、UID以及此类所有用户的UID之和
#!/bin/bash
#
echo "/bin/bash user==>uname uid:"
echo "$(awk -F: '$NF=="/bin/bash"{print $1,$3}' /etc/passwd)"
echo "sum of uid:$(awk -F: 'BEDIN{sum=0}$NF=="/bin/bash"{sum=sum+$3}END{print sum}' /etc/passwd)"
12.写一个脚本,显示当前系统上所有拥有附加组的用户的用户名,并说明共有多少个此类用户
#!/bin/bash
#
User=($(awk -F: '{print $1}' /etc/passwd))
for i in $(seq 0 $[${#User[@]}-1]);do
if [ $(id ${User[$i]} |cut -d" " -f3 |awk -F"," '{print NF}') -gt 1 ];then
echo "user who have supp-group:${User[$i]}"
let sum++
fi
done
echo "sum,user who have supplementary group:$sum"
13.创建一个有至少两个物理卷组成的大小为20G的卷组,要求:PE大小为8M;
在卷组中创建一个大小为5G的逻辑卷mylv1,格式户为ext4文件系统,开机自动挂载至/users目录,支持acl;
分区:
fdisk /dev/sdb
fdisk /dev/sdc
分别创建/dev/sdb3、/dev/sdc1分区;分区类型设置8e;partx -a /dev/sdb3、partx -a /dev/sdc1重读硬盘分区表信息
lvm创建:
(1)pvcreate /dev/sdb3 /deb/sdbc1
(2)vgcteate -s 8M myvg /deb/sdb3 /deb/sdc1
(3)lvcreate -L 5G -n mylv1 myvg
(4)mkfs.ext4 /dev/mapper/myvg-mylv1
(5)mkdir /users
(6)vim /etc/fstab –>添加一条内容:/dev/mapper/myvg-mylv1 /users ext4 rw,acl,auto 0 0
(7)
14.新建用户magedu,其家目录为/users/magedu,而后su切换至此用户,赋值多个文件至家目录;
useradd -m -k /etc/skel -d /users/magedu magedu;su -l magedu ;cp -a /etc/pam.d /users/magedu
15.扩展mylv1至9G,确保扩展后原有数据可用;
lvextend -L 9G /dev/mapper/myvg-mylv1 ; resize2fs /dev/mapper/myvg-mylv1 ;df -h
16.缩减mylv1至7G,确保扩展后原有数据可用;
umount /dev/mapper/myvg-mylv1
e2fsck -f /dev/mapper/myvg-mylv1
resize2fs /dev/mapper/myvg-mylv1 7G
lvreduce -L 7G /dev/mapper/myvg-mylv1
mount /dev/mapper/myvg-mylv1 /users/
17.对mylv1创建快照,并通过备份数据,要求保留原有的属主属组等信息;
lvcreate -s -p r -L 1G -n mylv1-snapshot /dev/mapper/myvg-mylv1
mount /dev/mapper/myvg-mylv1 /mnt
文件系统备份:
tar -Jcvpf /tmp/mylv1_$(date +%Y-%m-%d-%T).tat.xz /mnt/
块的备份:
dd if=/dev/mapper/myvg-mylv1–snapshot of=/tmp/myvg-mylv1–snapshot.dd
删除快照:
lvremove /dev/mapper/myvg-mylv1–snapshot
原创文章,作者:snow,如若转载,请注明出处:http://www.178linux.com/19368
评论列表(1条)
写的很棒,有的脚本是不是可以在优化一下那?