linux培训测试:题目和个人作答 (有不对的请多指教
前提:
一、每位同学的IP地址为172.16.X.1, 子网掩码为255.255.0.0,网关为172.16.0.1,DNS服务器为172.16.0.1,主机名为stuX.magedu.com,其中X为你的座位号;
/etc/sysconfig/network HOSTNAME GATEWAY
/etc/sysconfig/network-script/ifcfg-eth0 IPADDR NETMASK
/etc/resolve DNS
二、yum源为http://172.16.0.1/yum/{Server,Cluster,ClusterStorage,VT,errata};


1、安装操作系统,要求:
  1)新建一个虚拟机,要求内存大于等于512M,虚拟SCSI磁盘大小为320G,有两块网卡:第一块网卡为桥接模式,第二块网卡为仅主机模式;
  2)下载ftp://172.16.0.1/pub/p_w_picpaths/boot.iso文件至物理机,并以之作为启动盘启动安装过程;
  3)在安装启动界面boot:提示符后面输入(引号里面的内容):"linux  ip=172.16.X.1 netmask=255.255.0.0 gateway=172.16.0.1 dns=172.16.0.1 ks=http://172.16.0.1/exam.cfg"
  4)安装完成后需在事先排除系统故障,而后继续后面的题目;
          a) root用户密码未知,需要修改为你所需要的密码;
          b) grub损坏;
          c) 系统会莫名其妙地重启;

解答:
挂载光盘 进入紧急救援模式: boot 后输入:linux rescue
# chroot /mnt/sysp_w_picpath
# passwd 改root的密码
# mv /var/tmp/grub.test /boot/grub/grub.conf#
# grub
# root (hd0,0)
# setup (hd0)
# quit
#vim /etc/inittab 把 启动级别中的3和5别改为对应的3和5级别
# vi /etc/rc.d/rc.local 删除最后一行

#exit
#reboot
2、创建一个空间大小为10G的RAID5设备;其chuck大小为32k;要求此设备开机时可以自动挂载至/backup目录;
解答:
需要4个5G的id为fd的磁盘
#fdisk /dev/sda
#partprobe /dev/sda
# mdadm -C /dev/md1 -l 5 -n 3 -x 1 -c 32 -a yes /dev/sda{5,6,7,8}
# mkfs.ext3 /dev/md1
# mkdir /backup
vim /etc/fstab
添加 /dev/md1 /backup ext3 defaults 0 0
或者:
# echo "/dev/md1 /backup ext3 defaults 0 0" >>/etc/fstab
3、创建一个由两个物理卷组成的大小为8G的卷组myvg,要求其PE大小为8M;而后在此卷组中创建一个大小为4G的逻辑卷lv1,此逻辑卷要能在开机后自动挂载至/users目录;
解答:
创建两个4G的分区
#fdisk /dev/sda
#partprobe /dev/sda
#pvcreate /dev/sda{9,10}
#vgcreate myvg -s 8M /dev/sda{9,10}
#lvcreate -L 4G -n lv1 myvg
#mke2fs -j -L LV1 /dev/myvg/lv1
#mkdir /users
#vim /etc/fstab
添加:LABEL=LV1 /users ext3 defaults 0 0
或者 :
  echo "LABEL=LV1 /backup ext3 defaults 0 0" >>/etc/fstab
4、完成以下任务:
  (1)新建系统组mysql;新建系统用户mysql,要求其没有家目录且shell为/sbin/nologin;
  (2)新建GID为600的组magedu;新建用户gentoo,要求其家目录为/users/gentoo,密码同用户名;
  (3)新建用户centos,其家目录为/users/centos,密码同用户名;
  (4)新建用户www,其家目录为/users/www;
  (5)用户gentoo和centos均以magedu为其附加组;
解答:
可用一个脚本实现
#!bin/bash
useradd -u 300 -M -s /sbin/nologin mysql
groupadd -g 600 magedu
useradd -d /users/gentoo -G magedu gentoo
echo gentoo | passwd --stdin gentoo
useradd  -d /users/centos -G magedu centos
echo centos | passwd --stdin centos
useradd -d /users/www www
5、创建一个2G的分区,文件系统为ext3,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的3%,要求开机后可以自动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用;
#fdisk /dev/sda
#partprobe /dev/sda
#mkfs -t ext3 -L DATA -b 1024 -m 3 /dev/sda11
#vim /etc/fstab
添加:LABEL=DATA /data ext3 defaults 0 0

或者:echo "LABEL=DATA /data ext3 defaults 0 0" >> /etc/fstab
6、缩减前面创建的逻辑卷lv1的大小至2G;要求gentoo的家目录等不能丢失;缩减完成后以gentoo用户下载http://172.16.0.1/pub/Sources/new_lamp/httpd-2.2.19.tar.bz2至gentoo自己的家目录;
#umount /dev/myvg/lv1 要先卸载

#e2fsck -f /dev/myvg/lv1 检测一下

#resize2fs /dev/myvg/lv1 2G
#lvreduce -L 2G /dev/myvg/lv1(有可能数据有损失)
#mount /dev/myvg/lv1 /users
#su - gentoo
#wget http://172.16.0.1/pub/Sources/new_lamp/httpd-2.2.19.tar.bz2
7、复制文件/etc/rc.d/rc.sysinit至/data目录,其属主为root用户,属组为root组;要求此文件可以被任何人读取,可以被gentoo用户和magedu组读写,但centos没有任何访问权限;
#mount /dev/sda11 /data
#mount -o remount,acl /dev/sda11
#cp /etc/rc.d/rc.sysinit /data
#cd /data
#setfacl -m u:gentoo:rw- /data/rc.sysinit
#setfacl -m g:magedu:rw- /data/rc.sysinit
#setfacl -m u:centos:--- /data/rc.sysinit
8、配置centos用户能以root用户的身份执行useradd,userdel、usermod和passwd命令(但不能修改root用户的密码)且命令执行时不需要输入密码;而后以centos的身份删除用户www,但不要删除其家目录;
解答:

#visudo
编辑:在最后添加:
centos  ALL=(root) NOPASSWD:/usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod, /usr/bin/passwd, ! /usr/bin/passwd root
#su - centos
#sudo /usr/sbin/userdel www
9、配置本地的yum源指向,而后安装mysql-server和httpd软件包;
解答:
#vim /etc/yum.repos.d/local.repo
[base]
name=Server
baseurl=ftp://172.16.0.1/yum/Server
gpgcheck=0
enabled=1
#yum install mysql-server httpd
10、下载并编译安装axel;软件包所在的地址:ftp://172.16.0.1/pub/Sources/downloader;要求:
    1)软件的默认安装目录为/usr/local/axel;
    2)安装完成以后,所有用户可以直接执行axel命令,而且不用输入命令的完整的路径;

解答:
#lftp 172.16.0.1/pub/Sources/downloader
#get axel-2.2.19.tar.bz2
#wget ftp://172.16.0.1/pub/Sources/downloader/axel-2.2.19.tar.bz2

#tar xfv axel-2.2.19.tar.bz2
#cd axel-2.2.19
#./configure --prefix=/usr/local/axel
#make
#make install
#vim /etc/profile
添加 PATH=$PATH:/usr/local/axel/bin
#. /etc/profile
12、新建目录/backup/test,其属组为magedu,且此组具有读写权限,其它用户没有任何权限;magedu组成员在此目录中创建的文件的属组都需要是magedu,且magedu组中每个成员在此目录中只能删除自己的文件;

解答:

 #mkdir /backup/test
#cd /backup
#chown :magedu test
#chmod g+w test/
#chmod o=--- test/
#chmod g+s,o+t test/
13、配置当前主机内核参数,以允许在不同的网络接口间转发数据包;要求此项配置即刻生效并且在重新启动系统后不会失效。

解答:
#vim /etc/sysctl.conf
把net.ipv4.ip_forward=0 改变为:net.ipv4.ip_forward=1
#sysctl -p 立即生效
14、启用本机的VNC服务,并确保root可用可以使用redhat作为密码登录系统;

解答:
#vncpasswd  (设置密码)
#vncserver &  (开启服务)
#cd .vnc
#vim xstartup (编辑配置文件)
#gnome-session
#vncserver -kill :1(关闭服务)
15、配置本机每隔两天在凌晨3点20备份一次/etc目录,备份文件存放至/backup目录,文件名形如:etc-2011-11-20.tar.bz2;

解答:
which tar (查看tar的命令路径)
crontab -e(进入编辑)
20 3 */3 * * /bin/tar jcf  /backup/etc-`date +%F`.tar.bz2 /etc
16、使用find命令完成如下任务:
  (1)找到/etc目录下属于root用户且至少7分钟没有访问过的普通文件,并将它们复制到/tmp/test目录;
       要求:/tmp/test目录需要自己事先创建,并且为其创建符号链/users/test;
  (2)找到/users目录下所有没有属主且没有属组的文件,并将其属组修改为gentoo,将其属组修改为magedu;

解答:
#mkdir /tmp/test
#ln -sv /tmp/test /users/test
#find /etc -user root -amin +7 -type f -exec cp {} /tmp/test \;
#find /users/ -nouser -nogroup -exec chown gentoo:magedu {} \;
17、为centos用户的家目录创建磁盘使用限额,要求其能够使用的磁盘空间最大为100M,软限制为120M;要求完成后验正其有效性;

解答:
#vim /etc/fstab
家目录默认类型里输入usrquota
#mount -o remount /users   重新挂载
#quotacheck -cmu /users/
#quotaon  /users
#edquata -u centos
在soft 输入:102400
 在hard 输入:122880
可以通过:
#su - gentoo
#dd if=/dev/zero of=./centos.1 bs=1M count=30  这个命令创建大文件来验证一下
18、为逻辑卷lv1创建快照卷lv1_snap,要求此卷只读,且大小为1G;而后通过此卷将数据备份至/backup目录归档压缩存放;

解答:
#lvcreate -L 1G -s -n lv1_snap -p r /dev/myvg/lv1
#mkdir /mnt/snapshot
#mount /dev/myvg/lv1_snap /mnt/snapshot
#cd /mnt/snapshot
#tar -jcv -f /backup/lv1.tar.bz2 *
19、写一个脚本analyzelog.sh,完成日志分析:
说明:此脚本可以接受选项(i,d,t,a),使用格式:analyzelog <-i IP|-d DATE|-t TYPE|-a> LOG_FILE :
   (1)当用户使用选项-i时,统计出LOG_FILE文件中指定IP地址的访问次数(通常每一行为一次);grep "$1" | wc -l
   (2)当用户使用选项-d时,统计出LOG_FILE文件中指定日期(某一天,如:16/Feb/2012)内每个IP地址访问的次数;如:
               192.168.0.1:33
               192.168.0.195:17
               ...
   (3)当用户使用选项-t时,统计出LOG_FILE文件中以后缀后指定类型的文件(如.png表示png格式的图片)被访问的次数;
   (4)当用户使用选项-a时,统计出LOG_FILE文件中每个IP地址访问的次数;

样例日志文件为access_log、access_log.1、access_log.2,下载地址为:ftp://172.16.0.1/pub/docs
   
解答:

vim analyzelog.sh

#!/bin/bash

ACCESS_COUNT()
{
echo "The $OPTARG access count: `grep $OPTARG $FILENAME | wc -l`"
}

DATE_COUNT()
{
echo "The $OPTARG access count list:"
cat $FILENAME | grep $OPTARG | cut -d' ' -f1 | sort | uniq -c | sort -n | awk -F ' ' '{print $2 ":\t"$1 }'

###注:(awk -F ' ' '{print $2 ":\t"$1 }'可以替换成:sed '1,$s@\(.*\)[[:space:]]\{1\}\(.*\)@\2:\1@g')
}

TYPE_COUNT()
{
T=`cat $FILENAME | cut -d' ' -f7 | grep ${OPTARG}$ | wc -l`
echo "The $OPTARG access aount: $T"
}

ALL_IP_COUNT()
{
cat $FILENAME | cut -d' ' -f1 |sort|uniq -c| sort -n|awk -F ' ' '{print $2 ":\t"$1 }'
###注:(awk -F ' ' '{print $2 ":\t"$1 }'可以替换成:sed '1,$s@\(.*\)[[:space:]]\{1\}\(.*\)@\2:\1@g')

}

Usage()
{

cat <<EOF
Usage :$0 <-i IPADDR|-d DATE|-t FILETYPE|-a> FILENAME"
Accept date type: 01/Mar/2012
EOF
}
if [ $# -lt 1 ]; then
Usage
exit
fi
while getopts ":i:d:t:a" OPT ; do
shift $[$OPTIND-1]
FILENAME=$1
if [ -z $FILENAME ]; then
Usage
exit 0
fi
case $OPT in
i) ACCESS_COUNT ;;
d) DATE_COUNT ;;
t) TYPE_COUNT ;;
a) ALL_IP_COUNT ;;
*) Usage ;;
esac
done