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

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

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

答:

   分区

fdisk-l /dev/sdb      //查看准备硬盘

fdisk/dev/sdb

 

② 格式化

mke2fs-t ext4 -L 'MYDATA' -b 2048 -m 2 /dev/sdb1

 

③ 挂载

echo"/dev/sdb1 /data/mydata ext4 defaults,acl 0 0" >> /etc/fstab

   mount -o noatime,noexec /dev/sdb1 /data/mydata/

 

 

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

答:

   分区

  fdisk /dev/sdb

   格式化

   mkswap /dev/sdb2

 

   激活所有swap分区

   swapon -a

 

3、写一个脚本

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

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

答:

#!/bin/bash

for disk in $(fdisk -l | grep -o"^Disk /dev/sd[a-z]" | cut -d' ' -f2);do

   echo $disk

   declare -i i=1

   while [ $i -le $( fdisk -l $disk | grep "^/dev/sd[a-z][0-9]" |wc -l) ];do

       df -Th ${disk}${i} | tail -1 | awk '{print $1,$6}'

       let i++

   done

   echo

done

 

 

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

答:

常用RAID级别:

RAID1: 硬盘镜像,至少2块硬盘,数据会在所有硬盘上保存一份,写入性能下降,读取性能有所提高,只要硬盘没有全部坏,数据就不会丢失

RAID 5: 至少3块硬盘,其中一块硬盘的容量用于做数据校验,因此可用容量为n-1块硬盘,可用允许任意一块硬盘损坏,数据不会丢失。写入性能稍微有些下降,读取性能有所提高

RAID 6: 至少4块硬盘,原理和RAID 5相同,使用2块硬盘容量做数据校验,可用容量为n-2,可允许坏两块硬盘

 

常用RAID组合:

RAID 1+0: 至少4块硬盘,先两两一组做RAID1,之后在RAID1基础上做RAID0,可以提高读写性能。必须保证各组RAID1里至少有一块硬盘完好,否则所有硬盘的数据会丢失

RAID 5+0: 至少6块硬盘,先每3块一组做RAID5,之后在RAID5基础上做RAID0,每组RAID5中最多只能坏1块硬盘,否则所有硬盘的数据会丢失

 

 

 

 

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

答:

   分区

fdisk /dev/sdb

 

   创建RAID1

mdadm -C /dev/md0 -l 1 -a yes -c 128 -n 2 -x 1/dev/sdb{1,2,3}

 

 

 

 

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

答:

   准备三个分区

fdisk /dev/sdb

 

   创建RAID5

mdadm -C /dev/md1 -l 5 -a yes -c 256 -n 3 /dev/sdb{1,2,3}

 

   分区并挂载

mkdir /backup

mkfs.ext4 /dev/md1

echo "/dev/md1 /backup ext4 defaults,acl,noatime 00" >> /etc/fstab

mount -a

 

 

7、写一个脚本

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

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

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

答:

#!/bin/bash

declare -i sum=0

   for user in $@;do

   id $user &> /dev/null && continue

   useradd $user && echo "$user" | passwd --stdin $user&> /dev/null

   [ $? -eq 0 ] && let sum++

done

echo "add $sum users success"

 

 

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

答:

#!/bin/bash

for file in /etc/rc.d/rc.sysinit/etc/rc.d/init.d/functions /etc/fstab; do

   sum=$(grep "^#" $file | wc -l)

   space=$(grep "^[[:space:]]*$" $file | wc -l)

   let totalSum+=$sum

   let totalSpace+=$space

done

echo "#开头的行一共有$totalSum,空白行一共有$totalSpace"

 

 

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

答:

#!/bin/bash

declare -a userWithExgroup

for user in $(cut -d: -f 1 /etc/passwd);do

   if id $user | cut -d' ' -f3 | grep "," &> /dev/null;then

       userWithExgroup[${#userWithExgroup[@]}]=$user

   fi

done

for user in ${userWithExgroup[@]};do

   echo $user

done

echo "Total is${#userWithExgroup[@]}"

 

 

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

答:

   创建两个分区,标识为8e

fdisk /dev/sdb

 

   创建PV

pvcreate /dev/sdb{1,2}

 

   创建VG

vgcreate -s 8MB vg0 /dev/sdb{1,2}

 

   创建LV

lvcreate -L 5G -n mylv1 vg0

 

   格式化并挂载

mkfs.ext4 /dev/vg0/mylv1

mkdir /users

echo "/dev/vg0/mylv1 /users ext4 defaults,acl 00" >> /etc/fstab

mount -a

 

 

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

答:

   准备数据

cp /etc/fstab /users/

 

   扩展LV

lvextend -L +4G /dev/vg0/mylv1

 

   调整分区容量

resize2fs /dev/vg0/mylv1

 

   验证

 

 

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

答:

   卸载

umount /users/

 

   检查分区

e2fsck -f /dev/vg0/mylv1

 

   调整分区容量

resize2fs /dev/vg0/mylv1 7G

 

   缩减LV大小

lvreduce -L -2G /dev/vg0/mylv1

 

   重新挂载

mount /dev/vg0/mylv1 /users/

 

   验证

 

 

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

答:

   创建快照

lvcreate -s -L 512M -n mylv1-snap -p r /dev/vg0/mylv1

 

   挂载快照

mkdir /snap

mount /dev/vg0/mylv1-snap /snap

 

   备份数据

mkdir /backup

cp -a /users/ /backup/

 

 

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

答:

   给主机分配一个可用的IP地址,如192.168.1.101/24

   修改网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0        //配置文件名和网卡名对应

 

   重启网络服务:

service network restart                 //Centos6上的重启命令

systemctl restart network               //Centos 7上的重启命令

 

 

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

答:

配置IP的命令:

ifconfig

ifconfig -a                         //查看所有网卡信息

ifconfig eth0 up | down             //启用或关闭接口

ifconfig eth0 192.168.1.101/24 up   //给网卡设置IP和掩码并启用该网卡

ifconfig eth0 promisc              //启用混杂模式

ifconfig eth0 -promisc             //取消混杂模式

 

IP

ip link show                   //查看所有网卡的物理属性

ip link show up                    //只显示处于开启状态的网卡信息

ip link set dev eth0 up | down      //启用或关闭接口

 

ip addr                            //查看所有网卡的网络属性

ip addr add 192.168.1.102/24 dev eth0         

//给网卡添加一个ip地址,使用ifconfig无法看到新添加的ip地址

ip addr add 192.168.1.103/24 dev eth0 label "eth0:0"

//添加新ip并标记label,使用ifconfig可以看到eth0:0的ip

ip addr del 192.168.1.103/24 dev eth0           //删除ip

 

setup(Centos 6专用)

 

nmcli

nmcli dev show              //查看所有网卡信息

nmcli dev show eth0          //查看指定网卡信息

nmcli connection modify eth0ipv4.addresses 192.168.1.224/24

//修改网卡的ip地址,该命令直接修改配置文件,修改后需要重启下网络服务才会生效

nmcli connection modify eth0 +ipv4.addresses 192.168.1.234/24

//添加一个ip地址,需要重启网络服务

nmcli connection modify eth0 -ipv4.addresses192.168.1.224/24

//减少一个ip地址,需要重启网络服务

nmcli connection modify eth0 ipv4.gateway 192.168.1.1

nmcli connection modify eth0 ipv4.dns 192.168.1.1

nmcli connection modify eth0 +ipv4.dns 8.8.8.8

//设置网关和dns以及辅助dns,需要重启网络服务

 

 

nmtui(Centos7 专用)

 

 

配置路由的命令:

route

route -n               //查看路由信息

route add -net 172.16.2.0 netmask 255.255.255.0 gw192.168.1.1 dev eth0

//添加路由信息,目标为172.16.2.0/24网段,网关为192.168.1.1,使用eth0接口

 

route add -host 172.16.3.2 gw 192.168.1.1       //目标为单一的主机

 

route del -host 172.16.3.2 gw 192.168.1.1

route del -net 172.16.2.0 netmask 255.255.255.0 gw192.168.1.1

//删除相应的路由条目

 

route add default gw 192.168.1.1         //设置默认路由

 

 

IP

ip route list               //查看路由表

ip route add 172.16.4.0/24 via 192.168.1.1       //添加路由条目

ip route del 172.16.4.0/24 via 192.168.1.1       //删除路由条目

ip route add default via 192.168.1.1            //添加默认路由

 

netstat

netstat -rn         //查看内核路由表,以数字格式显示

 

直接修改配置文件(需要重启网络服务)

vim /etc/sysconfig/network-scripts/route-eth0   //指定相应的接口,需要重启网络服务

 

 

查看端口的命令:

netstat和 ss(效率比netstat高)

-t     //tcp协议的端口

-u     //udp协议的端口

-w    //rawsocket相关的端口

-l     //处于listen的端口

-a     //显示所有状态的端口

-n     //以数字格式显示ip和端口

-e     //以扩展格式显示

-p     //显示相关进程及PID

常用组合:  -tan, -uan,  -tanl,  -uanl, -tanlp, -uanlp

 

 

设置dns:

vim /etc/resolv.conf      //需要重启网络服务

 

 

设置主机名

hostname                   //查看主机名

hostname webserver01       //修改主机名

 

vim /etc/sysconfig/network    //Centos6修改配置文件,重启后生效

 

vim /etc/hostname    //Centos 7修改配置文件

 

 

 

 

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

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

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

答:

#!/bin/bash

net='172.16.250'

for i in {1..254};do

   if ping -c 1 -w 1 ${net}.${i} &> /dev/null;then

       echo -e "\033[32m ${net}.${i} is up \033[0m"

   else

       echo -e "\033[31m ${net}.${i} is down \033[0m"

   fi

done

 

 

 

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

答:

ps(查看进程信息)

ps -aux         //查看所有进程信息

VSZ:    虚拟内存集

RSS:   常驻内存集

STAT:

   R:  running

   S:  可中断的睡眠状态

   D:  不可中断的睡眠状态

   T: 停止状态

   Z:   僵死状态(被销毁前的状态)

   +:   表示为前台进程

   l:    多线程进程

   N: 低优先级进程

   <:  高优先级进程

   s:  session leader

 

START:  进程启动时间

TIME:  进程占据CPU的累积时长

 

ps -eFH      //以树状显示进程间的层次关系

 

ps -axo    //自定义需要显示的信息

ps -axo uid,pid,ni,pri,psr,rtprio,cmd | head -2

NI:   nice值

PRI:  优先级

PSR:  显示工作在哪个CPU核心上

rtprio:  实时优先级

 

 

pgrep

pgrep -a httpd

pgrep -au root     //根据指定的有效用户查看进程信息

pgrep -aU root        //根据指定的真实用户查看进程信息

 

pgrep -aP 1           //把给定的PID作为父进程的进程列表

 

pstree            //以树状查看进程信息

 

 

top (查看进程实时信息)

top -d 3 -b -n 2       //指定刷新时间为3秒,以批次方式显示,显示2批次信息

 

top          //查看实时的动态信息

 

htop(需要使用epel源安装)

 

htop -d 3 -u root -s TIME        

//指定刷新时间为3秒,只显示root的进程,根据TIME字段排序

 

 

vmstat(报告虚拟内存状态)

vmstat        //显示当前信息的快照

procs:

r: 等待运行的进程的个数

b: 处于不可中断睡眠的进程个数(被阻塞的队列长度)

memory:

swpd:  交换内存的使用总量

free:   空闲物理内存的总量

buffer:  用于buffer内存的总量

cache:  用于cache内存的总量

swap:

si:   数据进入swap中的速率(kb/s)

so:  数据离开swap中的速率(kb/s)

io:

bi:   从块设备读取数据到系统的速率(kb/s)

bo:  保存数据到块设备的速率(kb/s)

system:

  in:  中断速率

cs:  进程切换速率

CPU

us:  用户使用比例

sy:  内核使用比例

id:  空闲比例

wa:  等待IO完成的比例

st:  被虚拟化技术偷走的比例

 

 

 

vmstat 2 5        //每2秒输出一次信息,共输出5次

vmstat -s         //显示内存详细信息

 

 

dstat(用于生成系统资源统计数据,需要安装)

dstat 3         //每3秒更新一行数据

 

dstat -C 0,1       //分别显示相应的CPU核心的数据

 

dstat -D sda      //分别显示相应硬盘的数据

 

dstat -m          //显示内存相关数据

 

dstat -p          //显示进程相关数据

 

dstat -s                    //查看swap相关数据

dstat --tcp               //查看tcp连接相关数据

dstat --udp                        //查看udp连接相关数据

dstat --top-cpu         //查看当前最占用CPU的进程

dstat --top-io           //查看当前最占用IO的进程

dstat --top-mem        //查看当前最占用内存的进程

dstat --top-latency       //查看当前延迟最大的进程

 

 

pmap (查看某一进程的内存映射表)

pmap -x 1            //查看1号pid的内存映射表

 

 

glances(需要安装)

 

glances -t 3     //指定刷新时间为3秒

 

glances -f . -o <HTML | CSV>     //将报告导出到当前目录,格式可选择HTML或CSV

 

 

glances -s -B 192.168.1.203      //作为服务端运行,绑定相应的IP地址

glances -c 192.168.1.203        //可以获取指定服务器上的glances数据

 

 

kill (向进程发送控制信号)

kill [-signal] PID            //向指定PID发送控制信号

signal:

1)SIGHUP: 重新读取配置文件,不会关闭进程

2)SIGINT: 中止正在运行的进程,相当于Ctrl+c

9)  SIGKILL:  杀死正在运行的进程

15)SIGTERM:  安全结束正在运行的进程

18) SIGCONT:  继续运行之前被停止的进程

19) SIGSTOP:   停止一个进程

 

killall [-signal] NAME         //中止某一名称下的所有进程

 

 

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

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

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

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

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

答:

#!/bin/bash

echo "start with K:"

ls /etc/rc.d/rc3.d/ | sed -n's/^K.*/& stop/p'

total1=$(ls /etc/rc.d/rc3.d/ | grep"^K" | wc -l )

echo "Total is  $total1"

echo

echo "start with S:"

ls /etc/rc.d/rc3.d/ | sed -n's/^S.*/& start/p'

total2=$(ls /etc/rc.d/rc3.d/ | grep"^S" | wc -l )

echo "Total is  $total2"

 

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

答:

#!/bin/bash

net='172.16.250'

for i in {20..100};do

   if ping -c 1 –w 1 ${net}.${i} &> /dev/null;then

       echo "${net}.${i} is up"

   fi

done

 

 

20、打印九九乘法表;

答:

#!/bin/bash

for((i=1;i<10;i++));do

   for((j=1;j<=i;j++));do

       echo -n -e "${i}X${j}=$[$i*$j]\t"

   done

   echo

done