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

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

#]tune2fs -m 2 /dev/sda3
[root@localhost ~]# mke2fs  -t ext4 -b 2048 -L MYDATA -m 2 /dev/sda3
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, 5242880 blocks
104857 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: 完成

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

[root@localhost ~]# mkdir -pv  /data/mydata
mkdir: 已创建目录 "/data"
mkdir: 已创建目录 "/data/mydata"
[root@localhost ~]# mount /dev/sda3 /data/mydata/


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

[root@localhost ~]#mkswap /dev/sda4
[root@localhost ~]#swapon /dev/sda4

3、写一个脚本

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

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

#!/bin/bash
#
echo "当前系统磁盘设备有:"

fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d' ' -f2

# 显示每个磁盘的分区信息

for i in $(fdisk -l | grep -o "^Disk /dev/[sh]d[a-z]" | cut -d' ' -f2);do
  echo "============$i 磁盘分区信息==========="
  fdisk -l $i
  echo
done

脚本测试

[root@localhost script]# bash getdisk.sh 
当前系统磁盘设备有:
/dev/sda
/dev/sdb
============/dev/sda 磁盘分区信息===========

Disk /dev/sda: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004d0da

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64       10444    83373056   8e  Linux LVM

============/dev/sdb 磁盘分区信息===========

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x266ebb54

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  83  Linux
/dev/sdb2            1307        1332      208845   82  Linux swap / Solaris

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

  RAID 全称 Redundant Arrays f Independent Disks,目前常用RAID级别有5种:RAID0、1、4、5、6、10。

  RAID0:提供了IO性能扩展能力,读写性能得到提升。

         缺点:无容错能力,一块磁盘损坏,其他磁盘将受影响。

         组合方式:通过2块及以上磁盘组成可用空间为N*min(S1,S2,...)磁盘。

  RAID1:读性能提升,写性能略有下降,有冗余能力

         组合方式:2块及以上磁盘组成可用空间为min(S1,S2,...)

  RAID4:读写性能得到提升,同时拥有冗余能力

          组合方式:两块磁盘存储数据,第三存储前两块磁盘按位异或的结果。

          如:DISK1存储:1101;DISK2存储:0110;DISK3存储:1101异或0110=>1011

  RAID5:读写性能提升,有1块磁盘容错能力。与RAID4不同的是,在每块磁盘上都有chuk。

          组合方式:最少3块磁盘数,组成可用空间:(N-1)*min(S1,S2,...)磁盘

  RAID6:读写性能提升,有2块磁盘容错能力。比RAID5多一块校验盘

          组合方式:最少4块磁盘数,组成可用空间:(N-2)*min(S1,S2,...)磁盘

  RAID10:读写性能提升,存储数据先分割,后存储到两块磁盘组成的RAID1的镜像中

          有容错能力,每组RAID1组成的镜像自多只能坏一块磁盘

          组合方式:最少4块磁盘数,组成可用空间:N*min(S1,S2,...)/2磁盘

        

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

1、创建3块10G空闲盘,并调整格式为fd

[root@localhost ~]# fdisk /dev/sdb
Command (m for help): n
Partition number (1-4): 1
First cylinder (1-13054, default 1): 
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +10G
Command (m for help): t
Partition number (1-4): 
Value out of range.
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

2、用mdadm工具创建RAID1

    -C:指明创建的磁盘 md0

    -n 2: 使用两块设备来创建

    -l 1: 指明创建RAID级别为RAID1

    -c 128: 指明CHUNK大小为128

    -x 1: 指明空闲盘数为1

[root@localhost ~]# mdadm -C md0 -n 2 -l 1 -c 128 -x 1 /dev/sdb{1,2,3}
mdadm: /dev/sdb1 appears to contain an ext2fs file system
       size=10490412K  mtime=Mon Feb 27 13:44:42 2017
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/md/md0 started.

3、mdadm -D 参数显示创建RAID的详细信息

[root@localhost ~]# mdadm -D /dev/md/md0
/dev/md/md0:
        Version : 1.2
  Creation Time : Sun Mar  5 15:45:56 2017
     Raid Level : raid1
     Array Size : 10482176 (10.00 GiB 10.73 GB)
  Used Dev Size : 10482176 (10.00 GiB 10.73 GB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent
    Update Time : Sun Mar  5 15:46:29 2017
          State : clean, resyncing 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1
  Resync Status : 11% complete
           Name : localhost.localdomain:md0  (local to host localhost.localdomain)
           UUID : 50c34387:f13ce1b2:1087d348:1fe1ebef
         Events : 1
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2
       2       8       19        -      spare   /dev/sdb3



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

1、创建3块空间为2G的分区,并调整类型为fd,创建过程同上。

2、创建RAID5

[root@localhost ~]# mdadm -C /dev/md1 -l 5 -n 3 -c 256 -a yes /dev/sdb{5,6,7}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@localhost ~]# mdadm  -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Sun Mar  5 16:05:48 2017
     Raid Level : raid5
     Array Size : 4204544 (4.01 GiB 4.31 GB)
  Used Dev Size : 2102272 (2.00 GiB 2.15 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent
    Update Time : Sun Mar  5 16:07:35 2017
          State : clean 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 256K
           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : ea6f54f2:c745274e:f56132bc:a84d4cad
         Events : 18
    Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb5
       1       8       22        1      active sync   /dev/sdb6
       3       8       23        2      active sync   /dev/sdb7


#] mkfs.ext4 /dev/md1     #格式化为ext4文件系统;
#创建目录 /backup
]# mkdir /backup
 
#修改配置文件,设置开机自动挂载至/backup;
]# echo "/dev/md1 /backup ext4 defaults,noatime,acl 0 0" >>/etc/fstab


7、写一个脚本

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

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

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

#!/bin/bash
# addu.sh
# 创建多个用户,并设置用户名与密码相同
# 脚本接受至少2个参数作为用户名
#

declare -i count=0

# 重定向输出文件描述符
exec 3>$1
exec 3>&2
exec 1>/dev/null
exec 2>/dev/null
#
# 检查脚本参数个数
if [ $# -ge 2 ];then
  for user in $@;do
# 判断用户是否存在,如不存在,则添加用户,并设置密码与用户名相同
    if ! id $user;then
        useradd $user && echo $user | passwd --stdin $user && (( count++ ))
    fi
  done
  echo "成功添加用户$count个。" >&3
else
  echo "至少需传递两个参数作为用户名" >&3
fi
# 恢复重定向文件描述符
exec 1>&3
exec 2>&3
# 关闭创建的文件描述符
exec 3>&-
~

测试脚本:
[root@localhost script]# bash addu.sh user1
至少需传递两个参数作为用户名
[root@localhost script]# bash addu.sh user1 user2
成功添加用户2个。
[root@localhost script]# bash addu.sh user1 user2 user3
成功添加用户1个。
[root@localhost script]# bash addu.sh user1 user2 user3
成功添加用户0个。
[root@localhost script]#


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

[root@localhost script]# vim cnt.sh
#!/bin/bash
# cnt.sh
# 统计/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab
# 以#开头行数之和,以及总空白行

declare -i count1=0
declare -i count2=0
file="/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab"
for f in $file;do
  if [ -f $f ];then
   count1=$(grep '^#' $f | wc -l)
   count2=$(grep '^$' $f | wc -l)
   echo "$f 文件以#开头有:$count1 行;空白行为:$count2"
  fi
done

测试脚本:

[root@localhost script]# bash cnt.sh 
/etc/rc.d/rc.sysinit 文件以#开头有:44 行;空白行为:99
/etc/rc.d/init.d/functions 文件以#开头有:42 行;空白行为:76
/etc/fstab 文件以#开头有:7 行;空白行为:1


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

#!/bin/bash
#
# hasmultgrp.sh
#

declare -i count=0
declare -i cnt=0
user=$(awk -F: '{print $1}' /etc/passwd| sed 's/[[:space:]]*//')
echo -n "以下用户拥有附加组:"
for i in $user;do
  count=$(id -G $i | awk -F' ' '{print NF}')
  if [ $count -ge 2 ];then
    echo -n "$i "
    (( cnt++ ))
  fi
done
  echo
  echo "拥有附加组的用户共有$cnt个"

测试脚本:

[root@localhost script]# bash hasmulgrp.sh 
以下用户拥有附加组:bin daemon adm postfix user1 user3 user4 
拥有附加组的用户共有7个


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


1、本次实验通过两块硬盘的3个分区来创建20G卷组,sdb8:8G,sdc1:6G,sdc2:6G,并调整分区类型为8e。创建分区过程在此略过。

[root@localhost ~]# fdisk -l /dev/sd{b,c} | grep '8e'
/dev/sdb8            4705        5749     8393931   8e  Linux LVM
/dev/sdc1               1         784     6297448+  8e  Linux LVM
/dev/sdc2             785        1568     6297480   8e  Linux LVM

2、用3个分区创建3个物理卷,通过pvcreate命令来创建,pvdisplay来显示物理卷

[root@localhost ~]# pvcreate /dev/sdb8
  Physical volume "/dev/sdb8" successfully created
[root@localhost ~]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
[root@localhost ~]# pvcreate /dev/sdc2
  Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# pvdisplay -C
  PV         VG       Fmt  Attr PSize  PFree
  /dev/sda2  VolGroup lvm2 a--  79.51g    0 
  /dev/sdb8           lvm2 ---   8.01g 8.01g
  /dev/sdc1           lvm2 ---   6.01g 6.01g
  /dev/sdc2           lvm2 ---   6.01g 6.01g

3、创建卷组MyVG,使用vgcreate -s 8创建pe=8M的卷组,vgs显示卷组简要信息

[root@localhost ~]# vgcreate -s 8 MyVG /dev/sdb8 /dev/sdc{1,2}
  Volume group "MyVG" successfully created
[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize  VFree 
  MyVG       3   0   0 wz--n- 20.00g 20.00g


4、创建5G大小逻辑卷mylv1,使用命令lvcreate

[root@localhost ~]# lvcreate -L 5G -n mylv1 MyVG
  Logical volume "mylv1" created.
[root@localhost ~]# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1   MyVG     -wi-a-----  5.00g

5、格式化为ext4文件系统,并挂载至/user目录下,支持acl,开机自动挂载

[root@localhost ~]# mkfs.ext4 /dev/MyVG/mylv1 
.....
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
.....
[root@localhost ~]# mkdir /user
[root@localhost ~]# mount /dev/MyVG/mylv1 /user/
[root@localhost ~]# echo -e "/dev/mapper/MyVG-mylv1\t/user\text4\tdefault,acl\t0 0">>/etc/fstab


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

1、在/user目录下创建目录mydata,复制部分数据至改目录

2、扩展逻辑卷通过命令lvextend, -L指定扩展大小,使用resize2fs来修复逻辑卷大小上的改变

[root@localhost script]# lvextend -L 9G /dev/MyVG/mylv1 
  Size of logical volume MyVG/mylv1 changed from 5.00 GiB (640 extents) to 9.00 GiB (1152 extents).
  Logical volume mylv1 successfully resized
[root@localhost script]# resize2fs /dev/MyVG/mylv1 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/MyVG/mylv1 is mounted on /user; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/MyVG/mylv1 to 2359296 (4k) blocks.
The filesystem on /dev/MyVG/mylv1 is now 2359296 blocks long.
[root@localhost script]# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1   MyVG     -wi-ao----  9.00g

3、确认数据可以性

[root@localhost script]# pwd
/user/mydata/script
[root@localhost script]# ls
addu.sh  cnt.sh  getdisk.sh  hasmulgrp.sh  ks.sh  nine.sh  ping2.sh  ping.sh  user1
[root@localhost script]# less cnt.sh 
#!/bin/bash
# cnt.sh
declare -i count1=0
declare -i count2=0
file="/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab"

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

1、缩减逻辑卷前需要先卸载,检查文件系统

[root@localhost ~]# umount /user/
[root@localhost ~]# e2fsck -f /dev/MyVG/mylv1 
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/MyVG/mylv1: 24/589824 files (0.0% non-contiguous), 72726/2359296 blocks

2、改变逻辑卷大小为7G

[root@localhost ~]# resize2fs /dev/MyVG/mylv1 7G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/MyVG/mylv1 to 1835008 (4k) blocks.
The filesystem on /dev/MyVG/mylv1 is now 1835008 blocks long.
[root@localhost ~]# resize2fs /dev/MyVG/mylv1 7G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/MyVG/mylv1 to 1835008 (4k) blocks.
The filesystem on /dev/MyVG/mylv1 is now 1835008 blocks long.

3、lvreduce缩减逻辑卷大小7G

[root@localhost ~]# lvreduce -L 7G /dev/MyVG/mylv1 
  WARNING: Reducing active logical volume to 7.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv1? [y/n]: y
  Size of logical volume MyVG/mylv1 changed from 9.00 GiB (1152 extents) to 7.00 GiB (896 extents).
  Logical volume mylv1 successfully resized
[root@localhost ~]# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1   MyVG     -wi-a-----  7.00g

4、重新挂载逻辑卷,并检查数据可用性

[root@localhost ~]# mount /dev/MyVG/mylv1 /user/
[root@localhost script]# pwd
/user/mydata/script
[root@localhost script]# less cnt.sh 
#!/bin/bash
# cnt.sh
declare -i count1=0
declare -i count2=0
file="/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/fstab"


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

1、创建名为snap_mylv1的快照,lvcreate命令:-s指定创建快照

[root@localhost ~]# lvcreate -L 7G -p r -s -n snap_mylv1 /dev/MyVG/mylv1 
  Logical volume "snap_mylv1" created.
[root@localhost mydata]# lvs
  LV         VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1      MyVG     owi-aos---  7.00g                                                    
  snap_mylv1 MyVG     sri-a-s---  7.00g      mylv1  0.00

2、查看快照

[root@localhost mydata]# ll /dev/MyVG/
total 0
lrwxrwxrwx. 1 root root 7 Mar  5 18:24 mylv1 -> ../dm-3
lrwxrwxrwx. 1 root root 7 Mar  5 18:24 snap_mylv1 -> ../dm-6

3、挂载快照至/snap

[root@localhost mydata]# mkdir /snap
[root@localhost mydata]# mount /dev/MyVG/snap_mylv1 /snap/
mount: block device /dev/mapper/MyVG-snap_mylv1 is write-protected, mounting read-only
[root@localhost mydata]# df -hP
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   50G  4.3G   43G  10% /
tmpfs                         940M   76K  939M   1% /dev/shm
/dev/sda1                     477M   42M  410M  10% /boot
/dev/mapper/VolGroup-lv_home   26G   46M   24G   1% /home
/dev/mapper/MyVG-mylv1        6.8G   12M  6.5G   1% /user
/dev/mapper/MyVG-snap_mylv1   6.8G   12M  6.5G   1% /snap

4、创建一个100M大小的文件,比对快照与原始逻辑卷的空间

[root@localhost user]# dd if=/dev/zero of=test bs=2048k count=50
50+0 records in
50+0 records out
104857600 bytes (105 MB) copied, 0.408157 s, 257 MB/s
[root@localhost user]# df -hP
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   50G  4.3G   43G  10% /
tmpfs                         940M   76K  939M   1% /dev/shm
/dev/sda1                     477M   42M  410M  10% /boot
/dev/mapper/VolGroup-lv_home   26G   46M   24G   1% /home
/dev/mapper/MyVG-mylv1        6.8G  112M  6.4G   2% /user
/dev/mapper/MyVG-snap_mylv1   6.8G   12M  6.5G   1% /snap

14、如何将Linux主机接入到TCP/IP网络,请描述详细的步骤。(手动指定的方式)

1、将linux主机添加至TCP/IP网络。在CENTOS6系列,编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,设定IPADDR,NETMASK,GATEWAY,DNS1,BOOTPROTO等信息

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost network-scripts]# less ifcfg-eth0 
DEVICE=eth0
HWADDR=00:0c:29:97:c0:34
TYPE=Ethernet   #指明接口类型
UUID=140eddab-b7cc-4ec7-afd0-df43c15b5402
ONBOOT=yes #在系统的引导过程中,是否激活此接口
NM_CONTROLLED=yes 
BOOTPROTO=static
IPADDR=172.16.100.10
NETMASK=255.255.255.0
GATEWAY=172.16.100.1
DNS1=114.114.114.114
IPV6INIT=no
USERCTL=no

2、重启网络服务生效

[root@localhost ~]# service network restart

15、为Linux主机配置网络信息的方式有哪些,请描述各个过程。


1)使用命令ifconfig eth0 172.16.100.10  临时立即生效,重启系统后失效 

2)使用命令ip addr add 172.16.100.10/24 dev eth0 临时立即生效,重启系统后失效

3)修改网卡配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 需要重启服务后生效    

4)使用图形界面 setup--网络配置  修改后重启服务


16、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;

    在线的主机使用绿色显示;

    不在线的主使用红色显示;

#!/bin/bash
#
# ping.sh
# ping命令探测主机状态,在线显示绿色,不在线显示红色
net="172.16.250."

for h in $(seq 1 20);do
  ping -c 1 -w 1 $net$h &>/dev/null && echo -e "\033[32m $net$h \033[0m" || echo -e "\033[31m $net$h \033[m"
done


17、常用的网络管理类工具有哪些,并用示例形式描述他们的使用方法。


18、写一个脚本,完成以下功能

  (1) 假设某目录(/etc/rc.d/rc3.d/)下分别有K开头的文件和S开头的文件若干;

  (2) 显示所有以K开头的文件的文件名,并且给其附加一个stop字符串;

  (3) 显示所有以S开头的文件的文件名,并且给其附加一个start字符串;

  (4) 分别统计S开头和K开头的文件各有多少;

#!/bin/bash
#
# 统计/etc/rc.d/rc3.d目录下S开头和K开头文件个数
# 并将这些文件显示出来

dir="/etc/rc.d/rc3.d"
if [ -d $dir ];then
  kfile=$(ls $dir | grep '^K')
  sfile=$(ls $dir | grep '^S')

  kcnt=$(echo $kfile | wc -w)
  scnt=$(echo $sfile | wc -w)

  for f in $kfile;do
    echo "$f stop"
  done

  for f in $sfile;do
   echo "$f start"
  done

  echo "S开头文件有$scnt个,K开头文件有$kcnt个"


19、写一脚本,用ping命令测试172.16.250.20-172.16.250.100以内有哪些主机在线,将在线的显示出来;

#!/bin/bash
#
#
net="172.16.250."
echo "172.16.250.20-100在线主机为:"
for i in $(seq 20 100);do
  ping -c 1 -w 1 $net$i &>/dev/null && echo "$net$i"
done
~


20、打印九九乘法表;

[root@localhost script]# vim nine.sh
#!/bin/bash
#
#
# 打印九九乘法表

for i in $(seq 1 9);do
  for j in $(seq 1 $i);do
    echo -e -n "${i}x${j}=$[$i*$j]\t"
  done
  echo
done

脚本测试:

[root@localhost script]# bash nine.sh 
1x1=1
2x1=2   2x2=4
3x1=3   3x2=6   3x3=9
4x1=4   4x2=8   4x3=12  4x4=16
5x1=5   5x2=10  5x3=15  5x4=20  5x5=25
6x1=6   6x2=12  6x3=18  6x4=24  6x5=30  6x6=36
7x1=7   7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49
8x1=8   8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64
9x1=9   9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81