马哥教育网络班19期+第7周课程练习

1.创建一个10G分区,并格式为ext4文件系统:

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

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

  fdisk /dev/sdb

03c041c0-46e0-441a-8f0c-ce096bb39f6f.jpg

   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

 83d53d1f-d26a-4cbf-934f-01294a491264.jpg

  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

(0)
snowsnow
上一篇 2016-06-22
下一篇 2016-06-22

相关推荐

  • PHP高效率写法(详解原因)

    1.尽量静态化:    如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。   当然了,这个测试方法需要在十万级以上次执行,效果才明显。   其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静…

    Linux干货 2015-05-28
  • 基于mysql虚拟用户认证​

    虚拟用户:                             用户账号存储于何处? …

    Linux干货 2016-10-17
  • 二叉树迭代器算法

    二叉树(Binary Tree)的前序、中序和后续遍历是算法和数据结构中的基本问题,基于递归的二叉树遍历算法更是递归的经典应用。 假设二叉树结点定义如下: // C++ struct Node {     int value;     No…

    Linux干货 2016-08-15
  • 超全超详细的HTTP状态码大全

    本部分余下的内容会详细地介绍 HTTP 1.1中的状态码。这些状态码被分为五大类:  100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 500-599 用…

    Linux干货 2015-03-20
  • Centos图形界面和命令界面模式切换

    大家都知道,centos有两种用户界面模式,一种是图形界面,也就是我们常说的Xwindows界面;另一种就是命令界面。有时因为方便需要在图形模式下安装一些程序,因图形界面占用的内存等资源较大,影响系统的运行,安装完后需要把系统切换到命令模式下运行,下面就两种模式如何进行切换做一下说明。 CentOS的启动模式共分为7级,分别是: 0-  停机 1-…

    系统运维 2015-07-19
  • 压缩工具

     压缩和解压缩工具和bash脚本编程      压缩比        目的:时间换空间        cpu的时间—>磁盘空间        compress/uncompress.…

    Linux干货 2016-12-31

评论列表(1条)

  • 马哥教育
    马哥教育 2016-06-23 14:20

    写的很棒,有的脚本是不是可以在优化一下那?