quota磁盘配额、array、trap等的使用

quota  磁盘配额:
可以限制:
     空间大小 最多使用5G
     文件个数 最多20文件
    
软限制:在一定的时间范围内可以超出限制
硬限制:绝对不能超 
grace  time 宽限期
rc.sysinit
磁盘配额的生效级别是文件系统  
可以独立对用户配额,也可以对组进行配额,这两个是独立的
aquota.user 对用户的磁盘配额文件保存在这个文件中
aquota.group 对组  对组的磁盘配额文件保存在这个文件中
 
如何实现磁盘配额: 
要使用quota,必须要内核与文件系统支持才行,先查看一下/home是不是一个独立的文件系统
# df -h /home 
1、为要启用磁盘配额的文件系统设定挂载选项
用户usrquota 
组 grpquota
# mount -o remount,userquota,grpquota /home  暂时有效系统重启后就消失了
要想永久有效编辑/etc/fstab
# vim /etc/fstab
将/dev/vol0/home    /home     ext3    defaults   1 2 改为
/dev/vol0/home    /home     ext3    defaults,usrquota,grpquota   1 2
虽然永久有效但不会立即生效,必须要重启,这里不需要只需要重新挂载就可以了
# mount -o remount /home  前面我们先编辑文件,这里就省事多了
2、创建配额所用数据库
# quotacheck  -cmug /home 检查我们所使用的文件系统上有没有设定好磁盘配额的数据库,没有则创建
    -c  创建并且而不读去原有数据库
    -m  不将此文件挂载为只读
    -u   设定跟用户相关的文件
    -g  设定跟组相关的配额文件
   
   
3、启用对应文件系统上的磁盘配额
# quotaon  /home  启用这个文件系统上或分区上的文件配额功能
# quotaoff   /home 暂时性的关闭
# quota -a 所有都生效
4、设定用户磁盘配额或组配额
# edquota  -g  打开配置文件     交互式的磁盘配额命令
           -u 表示限定的是用户配额
# edquota -p  redhat centos  将centos配额和redhat磁盘配额相同
# edquota -t  设定宽限期限默认为7天 加 -t 可以设定宽限期限
如限制redhat
# edquota centos 用户redhat配额 这里-u可以省略 就会显示如下
Disk quotas for user centos (uid 3308):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vol0-home             0          0          0          0        0        0
这时可以改一下soft和hard              
Disk quotas for user centos (uid 3308):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vol0-home             0       1024         2048           0        0        0
这里的意思是软限制空间大小为1024k  硬限制2048k,blocks 是已用了多少单位是k
如果你创建文件大小超出1024k但小于2048k 会给你警告但是还是能创建,如果超出2048k,文件还是能创建
只是文件大小只能是剩余的空间大小不会是你给的那么打了
文件个数限制:   
Disk quotas for user centos (uid 3308):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vol0-home             0       1024         2048      0        15        20          
inode 是已有的文件数
soft 能创建15个 超过就会有警告,不能超过hard 20 ,超出不会创建
# setquota  设定某个用户的 非交互式
# setquota
查看某个文件系统上磁盘
# repquota  文件系统 显示某个文件系统上的磁盘信息或概要信息
# warnquota  想超出配额的所有用户发邮件做出警告
变量:内存空间,所有变量被识别为字符
array:数组
如何声明一个数组
declare -a AA
赋值方法一
AA[0]=jerry
AA[1]=tom
AA[2]=wendy
AA[6]=susan
3\4\5 为空
赋值方法二
AA=(“jerry ere” tom wendy)  若变量中有空格用引号引起来
AA=([0]=jerry [1]=tom [2]=wendy [6]=susan)
AA[3]=ella
AA[4]=selina

${#AA[0]}可以看到第0个元素由几个字符组成
${#AA[@]} = ${#AA[*]} 可以看到值不为空的元素的个数
练习
1、如写一个脚本给出几个人名随机挑出
# vim array.sh
   #!/bin/bash
   #
     ARRAY=([0]=jerry [2]=tom [3]=susan [6]=ella) 给出变量
    for I in {1..20};do  循环20次
        INDEX=$[$RANDOM%7] 随机
       echo ${ARRAY[$INDEX]}显示人名
    done
2、写脚本 显示随机出现的名字和改名字的占用的字节数
# vim array1.sh
   #!/bin/bash
   #
     AA=([0]=jerry [2]=tom [3]=susan [6]=ella)
     D=$[$AA%7]  随机
     echo -n  ${AA[$D]} ${#AA[$D]}
     echo
3、随机显示十个数,并显示最大的数
# vim array2.sh
  #!/bin/bash
  #
  #
  for I in {0..9}; do      for语句循环十个数
    ARRAY[$I]=$RANDOM      数是随机的
    echo -n "${ARRAY[$I]}  "  显示出随机数
    sleep 1          前后两个数出现的间隔
  done
    echo  换行
    declare -i MAX=${ARRAY[0]} 声明一个变量MAX等于ARRAY变量的第一个元素
    INDEX=$[${#ARRAY[*]} -1] 
  for I in `seq 1 $INDEX`; do
      if [ $MAX -lt ${ARRAY[$I]} ]; then
        MAX=${ARRAY[$I]}
      fi
  done
     echo $MAX
4、输入一个1-39的数,比如说你输入10,就会随机出来10个不同的数字
# vim array3.sh
  #!/bin/bash
  #
     read -p " the element numbers[1-39]:" ELENUM 
     declare -a ARRAY
   function OPT {
     for I in `seq 0 $[${#ARRAY[@]} -1]`; do
      if [ $1 -eq ${ARRAY[$I]} ] ;then
      return 1
      fi
     done
   return 0
  }
    for A  in `seq 0 $[$ELENUM-1]`;do
      while true; do
       ABC=$[$RANDOM%40]
       OPT $ABC
      if [ $? -eq 0 ]; then
      break
      fi
      done
    ARRAY[$A]=$ABC
    echo "${ARRAY[$A]}"
  done
trap  在脚本中捕捉信号,并且可以特定处理
# trap ‘echo “ not quit...”’ INT  捕捉信号SIGINT可以跟多个命令用分号隔开
信号
1:SIGHUP
2:SIGINT
9:SIGKILL
15:SIGTERM
18:SIGCONT
19:SIGSTOP
5、trap命令的使用
如果你在执行练习4时还未执行完不想执行了按ctrl+c 就ok了,但是trap就是相反,你想退出我偏不让
array2.sh可以改为
 # vim array2.sh
   #!/bin/bash
   #
   #
   trap ‘echo“Not quit...”’ SIGINT       这时再按ctrl+c也退不出了
  for I in {0..9}; do      for语句循环十个数
      ARRAY[$I]=$RANDOM      数是随机的
      echo -n "${ARRAY[$I]}  "  显示出随机数
      sleep 1          前后两个数出现的间隔
   done
    echo  换行
    declare -i MAX=${ARRAY[0]} 声明一个变量MAX等于ARRAY变量的第一个元素
    INDEX=$[${#ARRAY[*]} -1] 
  for I in `seq 1 $INDEX`; do
      if [ $MAX -lt ${ARRAY[$I]} ]; then
        MAX=${ARRAY[$I]}
      fi
  done
     echo $MAX
6、创建文件
# vim array4.sh
   #!/bin/bash
   #
    mkdir -p /var/tmp/test
    while true; do
       touch /var/tmp/test/file-`date +%F-%H-%M-%S`
       sleep 2
    done   
    
如果在创建过程中不想创建了,还想把已经创建的清除,这就用到trap了
7、按ctrl+c终止时将已创建的文件删除
# vim array5.sh
   #!/bin/bash
   #
   trap ‘rm -rf /var/tmp/test;echo “Clean successfully”;exit 5’ INT   SIGINT可以简写为INT 当trap中有多个命令可用分号隔开
    mkdir -p /var/tmp/test
    while true; do
       touch /var/tmp/test/file-`date +%F-%H-%M-%S`
       sleep 2
    done   
8、还可以用函数
# vim array5.sh
   #!/bin/bash
   #
   function  TRAP {
    rm -rf /var/tmp/test
    echo "Clean successfully"
   }
   trap 'Clean successfully;exit 5' INT
    mkdir -p /var/tmp/test
    while true; do
       touch /var/tmp/test/file-`date +%F-%H-%M-%S`
       sleep 2
    done   

你可能感兴趣的:(array,职场,trap,休闲,quota)